USING "globals.sch" USING "flow_mission_data_public.sch" USING "blip_control_public.sch" USING "mission_control_public.sch" USING "cellphone_public.sch" USING "code_control_public.sch" USING "comms_control_public.sch" USING "properties_locations.sch" USING "properties_events.sch" USING "properties_cutscenes.sch" USING "flow_public_game.sch" USING "shop_private.sch" #if not USE_CLF_DLC #if not USE_NRM_DLC USING "randomChar_Public.sch" #endif #endif CONST_FLOAT LONG_RANGE_PURCHASE_DISTANCE 150.0 CONST_FLOAT LONG_RANGE_PURCHASE_DISTANCE_SQUARED 22500.0 // get the blip enum for a property FUNC STATIC_BLIP_NAME_ENUM GET_BLIP_ENUM_FOR_PROPERTY(PROPERTY_ENUM thisProperty) SWITCH thisProperty CASE PROPERTY_TOWING_IMPOUND RETURN STATIC_BLIP_AMBIENT_PROPERTY_TOWING_IMPOUND BREAK CASE PROPERTY_TAXI_LOT RETURN STATIC_BLIP_AMBIENT_PROPERTY_TAXI_LOT BREAK CASE PROPERTY_ARMS_TRAFFICKING RETURN STATIC_BLIP_AMBIENT_PROPERTY_ARMS_TRAFFICKING BREAK CASE PROPERTY_SONAR_COLLECTIONS RETURN STATIC_BLIP_AMBIENT_PROPERTY_SONAR_COLLECTIONS BREAK CASE PROPERTY_CAR_MOD_SHOP RETURN STATIC_BLIP_AMBIENT_PROPERTY_CAR_MOD_SHOP BREAK CASE PROPERTY_CINEMA_VINEWOOD RETURN STATIC_BLIP_AMBIENT_PROPERTY_CINEMA_VINEWOOD BREAK CASE PROPERTY_CINEMA_DOWNTOWN RETURN STATIC_BLIP_AMBIENT_PROPERTY_CINEMA_DOWNTOWN BREAK CASE PROPERTY_CINEMA_MORNINGWOOD RETURN STATIC_BLIP_AMBIENT_PROPERTY_CINEMA_MORNINGWOOD BREAK CASE PROPERTY_GOLF_CLUB RETURN STATIC_BLIP_AMBIENT_PROPERTY_GOLF_CLUB BREAK CASE PROPERTY_CAR_SCRAP_YARD RETURN STATIC_BLIP_AMBIENT_PROPERTY_CAR_SCRAP_YARD BREAK CASE PROPERTY_WEED_SHOP RETURN STATIC_BLIP_AMBIENT_PROPERTY_WEED_SHOP BREAK CASE PROPERTY_BAR_TEQUILALA RETURN STATIC_BLIP_AMBIENT_PROPERTY_BAR_TEQUILALA BREAK CASE PROPERTY_BAR_PITCHERS RETURN STATIC_BLIP_AMBIENT_PROPERTY_BAR_PITCHERS BREAK CASE PROPERTY_BAR_HEN_HOUSE RETURN STATIC_BLIP_AMBIENT_PROPERTY_BAR_HEN_HOUSE BREAK CASE PROPERTY_BAR_HOOKIES RETURN STATIC_BLIP_AMBIENT_PROPERTY_BAR_HOOKIES BREAK ENDSWITCH RETURN STATIC_BLIP_AMBIENT_PROPERTY_TOWING_IMPOUND ENDFUNC // get the stat for a property FUNC STATSENUM GET_STAT_FOR_PROPERTY(PROPERTY_ENUM thisProperty, PROPERTY_STAT_ENUM thisStat) SWITCH thisProperty CASE PROPERTY_TOWING_IMPOUND SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_TOWI BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_TOWI BREAK ENDSWITCH BREAK CASE PROPERTY_TAXI_LOT SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_TAXI BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_TAXI BREAK CASE PROPERTY_STAT_MISSIONS_TRIGGERED RETURN PROP_MISSIONS_TAXI BREAK ENDSWITCH BREAK CASE PROPERTY_ARMS_TRAFFICKING SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_TRAF BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_TRAF BREAK ENDSWITCH BREAK CASE PROPERTY_SONAR_COLLECTIONS SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_SOCO BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_SOCO BREAK ENDSWITCH BREAK CASE PROPERTY_CAR_MOD_SHOP SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_CMSH BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_CMSH BREAK ENDSWITCH BREAK CASE PROPERTY_CINEMA_VINEWOOD SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_CINV BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_CINV BREAK CASE PROPERTY_STAT_MISSIONS_TRIGGERED RETURN PROP_MISSIONS_CINV BREAK ENDSWITCH BREAK CASE PROPERTY_CINEMA_DOWNTOWN SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_CIND BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_CIND BREAK CASE PROPERTY_STAT_MISSIONS_TRIGGERED RETURN PROP_MISSIONS_CIND BREAK ENDSWITCH BREAK CASE PROPERTY_CINEMA_MORNINGWOOD SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_CINM BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_CINM BREAK CASE PROPERTY_STAT_MISSIONS_TRIGGERED RETURN PROP_MISSIONS_CINM BREAK ENDSWITCH BREAK CASE PROPERTY_GOLF_CLUB SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_GOLF BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_GOLF BREAK ENDSWITCH BREAK CASE PROPERTY_CAR_SCRAP_YARD SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_CSCR BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_CSCR BREAK CASE PROPERTY_STAT_MISSIONS_TRIGGERED RETURN PROP_MISSIONS_CSCR BREAK ENDSWITCH BREAK CASE PROPERTY_WEED_SHOP SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_WEED BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_WEED BREAK CASE PROPERTY_STAT_MISSIONS_TRIGGERED RETURN PROP_MISSIONS_WEED BREAK ENDSWITCH BREAK CASE PROPERTY_BAR_TEQUILALA SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_BARTE BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_BARTE BREAK CASE PROPERTY_STAT_MISSIONS_TRIGGERED RETURN PROP_MISSIONS_BARTE BREAK ENDSWITCH BREAK CASE PROPERTY_BAR_PITCHERS SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_BARPI BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_BARPI BREAK CASE PROPERTY_STAT_MISSIONS_TRIGGERED RETURN PROP_MISSIONS_BARPI BREAK ENDSWITCH BREAK CASE PROPERTY_BAR_HEN_HOUSE SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_BARHE BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_BARHE BREAK CASE PROPERTY_STAT_MISSIONS_TRIGGERED RETURN PROP_MISSIONS_BARHE BREAK ENDSWITCH BREAK CASE PROPERTY_BAR_HOOKIES SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_BARHO BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_BARHO BREAK CASE PROPERTY_STAT_MISSIONS_TRIGGERED RETURN PROP_MISSIONS_BARHO BREAK ENDSWITCH BREAK CASE PROPERTY_STRIP_CLUB SWITCH thisStat CASE PROPERTY_STAT_BOUGHT RETURN PROP_BOUGHT_STRIP BREAK CASE PROPERTY_STAT_EARNINGS RETURN PROP_EARNED_STRIP BREAK ENDSWITCH BREAK ENDSWITCH RETURN PROP_BOUGHT_TOWI ENDFUNC FUNC enumCharacterList GET_CONTACT_CHARACTER_FOR_PROPERTY(PROPERTY_ENUM thisProperty) SWITCH thisProperty CASE PROPERTY_TAXI_LOT RETURN CHAR_PROPERTY_TAXI_LOT BREAK CASE PROPERTY_CINEMA_VINEWOOD RETURN CHAR_PROPERTY_CINEMA_VINEWOOD BREAK CASE PROPERTY_CINEMA_DOWNTOWN RETURN CHAR_PROPERTY_CINEMA_DOWNTOWN BREAK CASE PROPERTY_CINEMA_MORNINGWOOD RETURN CHAR_PROPERTY_CINEMA_MORNINGWOOD BREAK CASE PROPERTY_CAR_SCRAP_YARD RETURN CHAR_PROPERTY_CAR_SCRAP_YARD BREAK CASE PROPERTY_WEED_SHOP RETURN CHAR_PROPERTY_WEED_SHOP BREAK CASE PROPERTY_BAR_TEQUILALA RETURN CHAR_PROPERTY_BAR_TEQUILALA BREAK CASE PROPERTY_BAR_PITCHERS RETURN CHAR_PROPERTY_BAR_PITCHERS BREAK CASE PROPERTY_BAR_HEN_HOUSE RETURN CHAR_PROPERTY_BAR_HEN_HOUSE BREAK CASE PROPERTY_BAR_HOOKIES RETURN CHAR_PROPERTY_BAR_HOOKIES BREAK ENDSWITCH RETURN CHAR_PROPERTY_BAR_HOOKIES ENDFUNC // which character can purchase property FUNC enumCharacterList GET_CHARACTER_FOR_PROPERTY(PROPERTY_ENUM thisProperty) SWITCH thisProperty CASE PROPERTY_ARMS_TRAFFICKING RETURN CHAR_TREVOR BREAK CASE PROPERTY_CAR_MOD_SHOP CASE PROPERTY_TOWING_IMPOUND CASE PROPERTY_WEED_SHOP CASE PROPERTY_TAXI_LOT RETURN CHAR_FRANKLIN BREAK CASE PROPERTY_CINEMA_VINEWOOD CASE PROPERTY_CINEMA_DOWNTOWN CASE PROPERTY_CINEMA_MORNINGWOOD RETURN CHAR_MICHAEL BREAK ENDSWITCH RETURN NO_CHARACTER ENDFUNC // is property blocked for character FUNC BOOL IS_PROPERTY_BLOCKED_FOR_CHARACTER(PROPERTY_ENUM thisProperty, enumCharacterList thisChar) SWITCH thisProperty CASE PROPERTY_BAR_HOOKIES IF thisChar = CHAR_TREVOR RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC // is the property unlocked FUNC BOOL IS_PROPERTY_AVAILABLE(PROPERTY_ENUM thisProperty) #IF IS_DEBUG_BUILD IF g_PropertySystemData.bDebugForcePropertiesAvailable RETURN TRUE ENDIF #ENDIF SWITCH thisProperty CASE PROPERTY_CAR_MOD_SHOP CASE PROPERTY_BAR_HEN_HOUSE CASE PROPERTY_BAR_HOOKIES IF GET_MISSION_COMPLETE_STATE(SP_MISSION_TREVOR_2) RETURN TRUE ENDIF BREAK CASE PROPERTY_CINEMA_VINEWOOD CASE PROPERTY_CINEMA_DOWNTOWN CASE PROPERTY_CINEMA_MORNINGWOOD IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MICHAEL_KILLED) RETURN FALSE ELSE IF GET_MISSION_COMPLETE_STATE(SP_MISSION_TREVOR_3) RETURN TRUE ENDIF ENDIF BREAK CASE PROPERTY_ARMS_TRAFFICKING IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_TREVOR_KILLED) RETURN FALSE ELSE IF GET_MISSION_COMPLETE_STATE(SP_MISSION_TREVOR_2) RETURN TRUE ENDIF ENDIF BREAK CASE PROPERTY_SONAR_COLLECTIONS IF GET_MISSION_COMPLETE_STATE(SP_HEIST_DOCKS_2A) OR GET_MISSION_COMPLETE_STATE(SP_HEIST_DOCKS_2B) RETURN TRUE ENDIF BREAK CASE PROPERTY_BAR_TEQUILALA IF IS_THIS_RANDOM_CHARACTER_MISSION_COMPLETED(RC_NIGEL_1A) AND GET_MISSION_COMPLETE_STATE(SP_MISSION_TREVOR_3) RETURN TRUE ENDIF BREAK CASE PROPERTY_TOWING_IMPOUND IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_OFFERED_TOWING_IMPOUND) RETURN TRUE ENDIF BREAK DEFAULT IF GET_MISSION_COMPLETE_STATE(SP_MISSION_TREVOR_3) RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC // is player in a position where he cannot purchase the property FUNC BOOL IS_PLAYER_AT_PROPERTY_CANNOT_PURCHASE_COORDS(PROPERTY_ENUM thisProperty) VECTOR vPlayerPos vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID()) SWITCH thisProperty CASE PROPERTY_WEED_SHOP IF vPlayerPos.x >= -1174.95801 AND vPlayerPos.y >= -1570.78271 RETURN TRUE ENDIF BREAK CASE PROPERTY_ARMS_TRAFFICKING IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<2142.642, 4794.097, 40.052>>, <<2145.074, 4788.900, 39.970>>, 2.6, FALSE, FALSE) RETURN TRUE ENDIF BREAK CASE PROPERTY_CINEMA_DOWNTOWN IF vPlayerPos.y < -708.2 RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC // set total planes destroyed count FUNC INT GET_TOTAL_PLANES_DESTROYED() INT iStatMichael INT iStatFranklin INT iStatTrevor INT iStatMichaelH INT iStatFranklinH INT iStatTrevorH STAT_GET_INT(SP0_PLANES_EXPLODED, iStatMichael) STAT_GET_INT(SP1_PLANES_EXPLODED, iStatFranklin) STAT_GET_INT(SP2_PLANES_EXPLODED, iStatTrevor) STAT_GET_INT(SP0_HELIS_EXPLODED, iStatMichaelH) STAT_GET_INT(SP1_HELIS_EXPLODED, iStatFranklinH) STAT_GET_INT(SP2_HELIS_EXPLODED, iStatTrevorH) RETURN (iStatMichael + iStatFranklin + iStatTrevor + iStatMichaelH + iStatFranklinH + iStatTrevorH) ENDFUNC // set total cars destroyed count FUNC INT GET_TOTAL_CARS_DESTROYED() INT iStatMichael INT iStatFranklin INT iStatTrevor STAT_GET_INT(SP0_CARS_EXPLODED, iStatMichael) STAT_GET_INT(SP1_CARS_EXPLODED, iStatFranklin) STAT_GET_INT(SP2_CARS_EXPLODED, iStatTrevor) RETURN (iStatMichael + iStatFranklin + iStatTrevor) ENDFUNC // how much do you get this week from property FUNC INT GET_THIS_WEEKS_INCOME_FOR_PROPERTY(PROPERTY_ENUM thisProperty) INT iReturnCash = 0 SWITCH thisProperty CASE PROPERTY_ARMS_TRAFFICKING //iReturnCash = (g_savedGlobals.sTraffickingData.iGroundRank * 5000) + (g_savedGlobals.sTraffickingData.iAirRank * 7000) BREAK CASE PROPERTY_CAR_SCRAP_YARD INT iTotalCarsDestroyed INT iCarsDestroyedThisWeek iTotalCarsDestroyed = GET_TOTAL_CARS_DESTROYED() iCarsDestroyedThisWeek = iTotalCarsDestroyed - g_savedGlobals.sPropertyData.iTotalCarsDestroyed iReturnCash = iCarsDestroyedThisWeek * 150 IF iReturnCash > 5000 iReturnCash = 5000 ENDIF g_savedGlobals.sPropertyData.iTotalCarsDestroyed = iTotalCarsDestroyed BREAK CASE PROPERTY_CAR_MOD_SHOP iReturnCash = 1600//1380 BREAK CASE PROPERTY_WEED_SHOP iReturnCash = 9300//8050 BREAK CASE PROPERTY_TAXI_LOT iReturnCash = 2000//1725 BREAK CASE PROPERTY_GOLF_CLUB iReturnCash = 264500//230000 BREAK CASE PROPERTY_CINEMA_VINEWOOD iReturnCash = 132200//115000 BREAK CASE PROPERTY_CINEMA_DOWNTOWN iReturnCash = 264000//230000 BREAK CASE PROPERTY_CINEMA_MORNINGWOOD iReturnCash = 142300//115000 BREAK CASE PROPERTY_BAR_TEQUILALA iReturnCash = 16500//14370 BREAK CASE PROPERTY_BAR_PITCHERS iReturnCash = 7100//6200 BREAK CASE PROPERTY_BAR_HEN_HOUSE iReturnCash = 920//800 BREAK CASE PROPERTY_BAR_HOOKIES iReturnCash = 4700//4100 BREAK CASE PROPERTY_STRIP_CLUB iReturnCash = 5000 BREAK ENDSWITCH RETURN iReturnCash ENDFUNC // property management script FUNC STRING GET_SCRIPT_FOR_PROPERTY_MANAGEMENT_MISSION(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iVariation) SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY RETURN "pm_delivery" BREAK CASE PROPERTY_MANAGEMENT_MISSION_DEFEND RETURN "pm_defend" BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN RETURN "pm_recover_stolen" BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK RETURN "pm_gang_attack" BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION RETURN "pm_plane_promotion" BREAK CASE PROPERTY_MANAGEMENT_MISSION_TAXI SWITCH CONVERT_INT_TO_TAXI_VARIATION(thisProperty, iVariation) CASE TAXI_MISSION_VARIATION_CLOWN_CAR RETURN "taxi_clowncar" BREAK CASE TAXI_MISSION_VARIATION_CUT_YOU_IN RETURN "taxi_cutyouin" BREAK CASE TAXI_MISSION_VARIATION_DEADLINE RETURN "taxi_deadline" BREAK CASE TAXI_MISSION_VARIATION_FOLLOW_CAR RETURN "taxi_followcar" BREAK CASE TAXI_MISSION_VARIATION_GOT_YOU_NOW RETURN "taxi_gotyounow" BREAK CASE TAXI_MISSION_VARIATION_GOT_YOUR_BACK RETURN "taxi_gotyourback" BREAK CASE TAXI_MISSION_VARIATION_NEEDS_EXCITEMENT RETURN "taxi_needexcitement" BREAK CASE TAXI_MISSION_VARIATION_TAKE_IT_EASY RETURN "taxi_takeiteasy" BREAK CASE TAXI_MISSION_VARIATION_TAKE_TO_BEST RETURN "taxi_taketobest" BREAK ENDSWITCH BREAK ENDSWITCH RETURN "error" ENDFUNC // call to trigger management mission FUNC CC_CommID GET_PROPERTY_MANAGEMENT_CALL(TAXI_MISSION_VARIATION_ENUM thisTaxi) SWITCH thisTaxi CASE TAXI_MISSION_VARIATION_CLOWN_CAR RETURN QCALL_PROP_TAXI_CLOWN_CAR BREAK CASE TAXI_MISSION_VARIATION_CUT_YOU_IN RETURN QCALL_PROP_TAXI_CUT_YOU_IN BREAK CASE TAXI_MISSION_VARIATION_DEADLINE RETURN QCALL_PROP_TAXI_DEADLINE BREAK CASE TAXI_MISSION_VARIATION_FOLLOW_CAR RETURN QCALL_PROP_TAXI_FOLLOW_THAT_CAR BREAK CASE TAXI_MISSION_VARIATION_GOT_YOU_NOW RETURN QCALL_PROP_TAXI_GOT_YOU_NOW BREAK CASE TAXI_MISSION_VARIATION_GOT_YOUR_BACK RETURN QCALL_PROP_TAXI_GOT_YOUR_BACK BREAK CASE TAXI_MISSION_VARIATION_NEEDS_EXCITEMENT RETURN QCALL_PROP_TAXI_NEED_EXCITEMENT BREAK CASE TAXI_MISSION_VARIATION_TAKE_IT_EASY RETURN QCALL_PROP_TAXI_TAKE_IT_EASY BREAK CASE TAXI_MISSION_VARIATION_TAKE_TO_BEST RETURN QCALL_PROP_TAXI_TAKE_TO_BEST BREAK ENDSWITCH RETURN COMM_NONE ENDFUNC // positive response to trigger management mission FUNC CC_QuestionCallResponse GET_PROPERTY_MANAGEMENT_POSITIVE_RESPONSE(TAXI_MISSION_VARIATION_ENUM thisTaxi) SWITCH thisTaxi CASE TAXI_MISSION_VARIATION_CLOWN_CAR RETURN RESP_PROP_TAXI_CLOWN_CAR_YES BREAK CASE TAXI_MISSION_VARIATION_CUT_YOU_IN RETURN RESP_PROP_TAXI_CUT_YOU_IN_YES BREAK CASE TAXI_MISSION_VARIATION_DEADLINE RETURN RESP_PROP_TAXI_DEADLINE_YES BREAK CASE TAXI_MISSION_VARIATION_FOLLOW_CAR RETURN RESP_PROP_TAXI_FOLLOW_THAT_CAR_YES BREAK CASE TAXI_MISSION_VARIATION_GOT_YOU_NOW RETURN RESP_PROP_TAXI_GOT_YOU_NOW_YES BREAK CASE TAXI_MISSION_VARIATION_GOT_YOUR_BACK RETURN RESP_PROP_TAXI_GOT_YOUR_BACK_YES BREAK CASE TAXI_MISSION_VARIATION_NEEDS_EXCITEMENT RETURN RESP_PROP_TAXI_NEED_EXCITEMENT_YES BREAK CASE TAXI_MISSION_VARIATION_TAKE_IT_EASY RETURN RESP_PROP_TAXI_TAKE_IT_EASY_YES BREAK CASE TAXI_MISSION_VARIATION_TAKE_TO_BEST RETURN RESP_PROP_TAXI_TAKE_TO_BEST_YES BREAK ENDSWITCH RETURN RESP_NONE ENDFUNC // negative response to trigger management mission FUNC CC_QuestionCallResponse GET_PROPERTY_MANAGEMENT_NEGATIVE_RESPONSE(PROPERTY_ENUM thisProperty) SWITCH thisProperty CASE PROPERTY_TAXI_LOT SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_MICHAEL RETURN RESP_PROP_TAXI_M_NO BREAK CASE CHAR_TREVOR RETURN RESP_PROP_TAXI_T_NO BREAK CASE CHAR_FRANKLIN RETURN RESP_PROP_TAXI_F_NO BREAK ENDSWITCH BREAK ENDSWITCH RETURN RESP_NONE ENDFUNC // get text part ID for a specific management mission. PROC GET_PROPERTY_MANAGEMENT_MISSION_FAIL_TEXT_PARTS(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iThisVariation, CC_TextPart &part1, CC_TextPart &part2) thisProperty=thisProperty INT iNumberRandom INT iNumberStart = 0 SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY SWITCH CONVERT_INT_TO_DELIVERY_VARIATION(thisProperty, iThisVariation) CASE DELIVERY_MISSION_VARIATION_TIMED_1 CASE DELIVERY_MISSION_VARIATION_TIMED_2 CASE DELIVERY_MISSION_VARIATION_TIMED_3 part1 = TPART_PROP_WEED_DEL iNumberRandom = 3 BREAK CASE DELIVERY_MISSION_VARIATION_LOSE_COPS CASE DELIVERY_MISSION_VARIATION_LOSE_COPS_2 part1 = TPART_PROP_WEED_DEL iNumberRandom = 3 BREAK CASE DELIVERY_MISSION_VARIATION_RECOVER_VAN CASE DELIVERY_MISSION_VARIATION_RECOVER_VAN_2 part1 = TPART_PROP_WEED_DEL iNumberRandom = 3 BREAK CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_COUNTRY CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_VINYARD CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_LIQUOR_MARKET CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_LIQUOR_MARKET_2 CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_LIQUOR_MARKET_3 CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_PISSWASSER_1 CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_PISSWASSER_2 part1 = TPART_PROP_BAR_DEL iNumberRandom = 5 BREAK ENDSWITCH BREAK CASE PROPERTY_MANAGEMENT_MISSION_DEFEND part1 = TPART_PROP_SCRAP_DEF iNumberRandom = 1 BREAK CASE PROPERTY_MANAGEMENT_MISSION_TAXI part1 = TPART_PROP_TAXI IF g_PropertySystemData.failReasonOverride = PROPERTY_MISSION_FAIL_REASON_OVERRIDE_NONE iNumberStart = 0 iNumberRandom = 5 ELSE iNumberStart = 5 iNumberRandom = 8 ENDIF BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK part1 = TPART_PROP_BAR_GANG iNumberRandom = 3 BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN SWITCH CONVERT_INT_TO_RECOVER_STOLEN_VARIATION(thisProperty, iThisVariation) CASE RECOVER_STOLEN_MISSION_VARIATION_TAKINGS part1 = TPART_PROP_BAR_STLN iNumberRandom = 3 BREAK CASE RECOVER_STOLEN_MISSION_VARIATION_PAP part1 = TPART_PROP_BAR_PAP IF g_PropertySystemData.failReasonOverride = PROPERTY_MISSION_FAIL_REASON_OVERRIDE_PAPS_KILLED iNumberStart = 3 iNumberRandom = 6 ELSE iNumberStart = 0 iNumberRandom = 3 ENDIF BREAK ENDSWITCH BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION part1 = TPART_PROP_CIN_PLANE iNumberRandom = 3 BREAK ENDSWITCH SWITCH GET_RANDOM_INT_IN_RANGE(iNumberStart,iNumberRandom) CASE 0 part2 = TPART_PROP_FAIL1 BREAK CASE 1 part2 = TPART_PROP_FAIL2 BREAK CASE 2 part2 = TPART_PROP_FAIL3 BREAK CASE 3 part2 = TPART_PROP_FAIL4 BREAK CASE 4 part2 = TPART_PROP_FAIL5 BREAK CASE 5 part2 = TPART_PROP_FAIL6 BREAK CASE 6 part2 = TPART_PROP_FAIL7 BREAK CASE 7 part2 = TPART_PROP_FAIL8 BREAK ENDSWITCH ENDPROC // get text part ID for a specific management mission. PROC GET_PROPERTY_MANAGEMENT_MISSION_NOTIFY_TEXT_PARTS(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iThisVariation, CC_TextPart &part1, CC_TextPart &part2) thisProperty=thisProperty INT iNumberRandom INT iNumberStart = 0 SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY SWITCH CONVERT_INT_TO_DELIVERY_VARIATION(thisProperty, iThisVariation) CASE DELIVERY_MISSION_VARIATION_TIMED_1 CASE DELIVERY_MISSION_VARIATION_TIMED_2 CASE DELIVERY_MISSION_VARIATION_TIMED_3 part1 = TPART_PROP_WEED_DEL iNumberRandom = 3 BREAK CASE DELIVERY_MISSION_VARIATION_LOSE_COPS CASE DELIVERY_MISSION_VARIATION_LOSE_COPS_2 part1 = TPART_PROP_WEED_DEL iNumberRandom = 3 BREAK CASE DELIVERY_MISSION_VARIATION_RECOVER_VAN CASE DELIVERY_MISSION_VARIATION_RECOVER_VAN_2 part1 = TPART_PROP_WEED_DEL iNumberStart = 3 iNumberRandom = 5 BREAK CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_COUNTRY CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_VINYARD CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_LIQUOR_MARKET CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_LIQUOR_MARKET_2 CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_LIQUOR_MARKET_3 CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_PISSWASSER_1 CASE DELIVERY_MISSION_VARIATION_BREAKABLE_CARGO_PISSWASSER_2 part1 = TPART_PROP_BAR_DEL iNumberRandom = 6 BREAK ENDSWITCH BREAK CASE PROPERTY_MANAGEMENT_MISSION_DEFEND part1 = TPART_PROP_SCRAP_DEF iNumberRandom = 2 BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK part1 = TPART_PROP_BAR_GANG iNumberRandom = 6 BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN SWITCH CONVERT_INT_TO_RECOVER_STOLEN_VARIATION(thisProperty, iThisVariation) CASE RECOVER_STOLEN_MISSION_VARIATION_TAKINGS part1 = TPART_PROP_BAR_STLN iNumberRandom = 3 BREAK CASE RECOVER_STOLEN_MISSION_VARIATION_PAP part1 = TPART_PROP_BAR_PAP iNumberRandom = 3 BREAK ENDSWITCH BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION part1 = TPART_PROP_CIN_PLANE iNumberRandom = 3 BREAK ENDSWITCH SWITCH GET_RANDOM_INT_IN_RANGE(iNumberStart,iNumberRandom) CASE 0 part2 = TPART_PROP_NOTI1 BREAK CASE 1 part2 = TPART_PROP_NOTI2 BREAK CASE 2 part2 = TPART_PROP_NOTI3 BREAK CASE 3 part2 = TPART_PROP_NOTI4 BREAK CASE 4 part2 = TPART_PROP_NOTI5 BREAK CASE 5 part2 = TPART_PROP_NOTI6 BREAK ENDSWITCH ENDPROC // get text part ID for a specific management mission. PROC GET_PROPERTY_MANAGEMENT_MISSION_PASS_TEXT_PARTS(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iThisVariation, CC_TextPart &part1, CC_TextPart &part2) thisProperty=thisProperty iThisVariation=iThisVariation INT iNumberRandom INT iNumberStart = 0 SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DEFEND part1 = TPART_PROP_SCRAP_DEF iNumberRandom = 1 BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK part1 = TPART_PROP_BAR_GANG iNumberRandom = 6 BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION part1 = TPART_PROP_CIN_PLANE iNumberRandom = 3 BREAK ENDSWITCH SWITCH GET_RANDOM_INT_IN_RANGE(iNumberStart,iNumberRandom) CASE 0 part2 = TPART_PROP_PASS1 BREAK CASE 1 part2 = TPART_PROP_PASS2 BREAK CASE 2 part2 = TPART_PROP_PASS3 BREAK CASE 3 part2 = TPART_PROP_PASS4 BREAK CASE 4 part2 = TPART_PROP_PASS5 BREAK CASE 5 part2 = TPART_PROP_PASS6 BREAK ENDSWITCH ENDPROC // get number of missions for property FUNC INT GET_NUMBER_OF_MISSIONS_FOR_PROPERTY(PROPERTY_ENUM thisProperty) SWITCH thisProperty CASE PROPERTY_WEED_SHOP CASE PROPERTY_CAR_SCRAP_YARD CASE PROPERTY_TAXI_LOT RETURN 1 BREAK CASE PROPERTY_CINEMA_VINEWOOD CASE PROPERTY_CINEMA_DOWNTOWN CASE PROPERTY_CINEMA_MORNINGWOOD RETURN 2 BREAK CASE PROPERTY_BAR_TEQUILALA CASE PROPERTY_BAR_PITCHERS CASE PROPERTY_BAR_HEN_HOUSE CASE PROPERTY_BAR_HOOKIES RETURN 3 BREAK ENDSWITCH RETURN 0 ENDFUNC // get number of variations of a particular type for a property FUNC INT GET_NUMBER_OF_VARIATIONS_FOR_PROPERTY(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission) SWITCH thisProperty CASE PROPERTY_WEED_SHOP SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY RETURN 7 BREAK ENDSWITCH BREAK CASE PROPERTY_CAR_SCRAP_YARD SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DEFEND RETURN 2 BREAK ENDSWITCH BREAK CASE PROPERTY_TAXI_LOT SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_TAXI RETURN 9 BREAK ENDSWITCH BREAK CASE PROPERTY_CINEMA_VINEWOOD CASE PROPERTY_CINEMA_DOWNTOWN CASE PROPERTY_CINEMA_MORNINGWOOD SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN RETURN 1 BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION RETURN 1 BREAK ENDSWITCH BREAK CASE PROPERTY_BAR_TEQUILALA CASE PROPERTY_BAR_PITCHERS CASE PROPERTY_BAR_HEN_HOUSE CASE PROPERTY_BAR_HOOKIES SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN RETURN 2 BREAK CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY IF thisProperty = PROPERTY_BAR_TEQUILALA OR thisProperty = PROPERTY_BAR_PITCHERS RETURN 5 ELSE RETURN 2 ENDIF BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK RETURN 2 BREAK ENDSWITCH BREAK ENDSWITCH RETURN 0 ENDFUNC // vector of the event coord FUNC VECTOR GET_MANAGEMENT_EVENT_COORD(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iThisVariation) SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY RETURN GET_DELIVERY_EVENT_INIT_COORDS(thisProperty, CONVERT_INT_TO_DELIVERY_VARIATION(thisProperty, iThisVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_TAXI RETURN GET_TAXI_EVENT_INIT_COORDS(thisProperty, CONVERT_INT_TO_TAXI_VARIATION(thisProperty, iThisVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION RETURN <<-1085.2794, -2970.5725, 12.9457>> BREAK ENDSWITCH RETURN GET_PROPERTY_PURCHASE_COORDS(thisProperty) ENDFUNC // is player in notify range for management event FUNC BOOL IS_PLAYER_IN_NOTIFY_RANGE_FOR_MANAGEMENT_EVENT(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iVariation) VECTOR vSpecificArea1 VECTOR vSpecificArea2 BOOL bUseSpecificArea = FALSE IF thisMission <> PROPERTY_MANAGEMENT_MISSION_DELIVERY SWITCH thisProperty CASE PROPERTY_BAR_TEQUILALA CASE PROPERTY_BAR_PITCHERS vSpecificArea1 = <<-2541, -3646, 0>> vSpecificArea2 = <<1934, 1495, 0>> bUseSpecificArea = TRUE BREAK CASE PROPERTY_BAR_HEN_HOUSE vSpecificArea1 = <<-3142, 5278, 0>> vSpecificArea2 = <<4200, 7722, 0>> bUseSpecificArea = TRUE BREAK CASE PROPERTY_BAR_HOOKIES vSpecificArea1 = <<-3447, 2447, 0>> vSpecificArea2 = <<4200, 5368, 0>> bUseSpecificArea = TRUE BREAK ENDSWITCH ENDIF VECTOR vEventCoord = GET_MANAGEMENT_EVENT_COORD(thisProperty, thisMission, iVariation) IF NOT bUseSpecificArea IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vEventCoord, GET_NOTIFY_RANGE_FOR_MANAGEMENT_EVENT(thisProperty, thisMission, iVariation), FALSE, FALSE) IF NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vEventCoord, GET_BLOCK_RANGE_FOR_MANAGEMENT_EVENT(thisProperty, thisMission, iVariation), FALSE, FALSE) RETURN TRUE ENDIF ENDIF ELSE IF IS_ENTITY_IN_AREA(PLAYER_PED_ID(), vSpecificArea1, vSpecificArea2, FALSE, FALSE) IF NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vEventCoord, GET_BLOCK_RANGE_FOR_MANAGEMENT_EVENT(thisProperty, thisMission, iVariation), FALSE, FALSE) RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC PROPERTY_MANAGEMENT_MISSION_ENUM GET_MISSION_FROM_PROPERTY_AND_NUMBER(PROPERTY_ENUM thisProperty, INT iNumber) SWITCH thisProperty CASE PROPERTY_WEED_SHOP RETURN PROPERTY_MANAGEMENT_MISSION_DELIVERY BREAK CASE PROPERTY_CAR_SCRAP_YARD RETURN PROPERTY_MANAGEMENT_MISSION_DEFEND BREAK CASE PROPERTY_TAXI_LOT RETURN PROPERTY_MANAGEMENT_MISSION_TAXI BREAK CASE PROPERTY_CINEMA_VINEWOOD CASE PROPERTY_CINEMA_DOWNTOWN CASE PROPERTY_CINEMA_MORNINGWOOD SWITCH iNumber CASE 0 RETURN PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN BREAK CASE 1 RETURN PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION BREAK ENDSWITCH BREAK CASE PROPERTY_BAR_TEQUILALA CASE PROPERTY_BAR_PITCHERS CASE PROPERTY_BAR_HEN_HOUSE CASE PROPERTY_BAR_HOOKIES SWITCH iNumber CASE 0 RETURN PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN BREAK CASE 1 RETURN PROPERTY_MANAGEMENT_MISSION_DELIVERY BREAK CASE 2 RETURN PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK BREAK ENDSWITCH BREAK ENDSWITCH RETURN PROPERTY_MANAGEMENT_MISSION_DELIVERY ENDFUNC // get the mission track bit for a property FUNC PROPERTY_SAVED_BIT_ENUM GET_MISSION_TRACK_BIT_FOR_PROPERTY_VARIATION(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iThisVariation) SWITCH thisProperty CASE PROPERTY_WEED_SHOP DELIVERY_MISSION_VARIATION_ENUM thisDelivery thisDelivery = CONVERT_INT_TO_DELIVERY_VARIATION(thisProperty, iThisVariation) SWITCH thisDelivery CASE DELIVERY_MISSION_VARIATION_TIMED_1 CASE DELIVERY_MISSION_VARIATION_TIMED_2 CASE DELIVERY_MISSION_VARIATION_TIMED_3 RETURN PROPERTY_SAVED_BIT_VAR_TRACK_WEED_TIMED BREAK CASE DELIVERY_MISSION_VARIATION_LOSE_COPS CASE DELIVERY_MISSION_VARIATION_LOSE_COPS_2 RETURN PROPERTY_SAVED_BIT_VAR_TRACK_WEED_LOSE_COPS BREAK CASE DELIVERY_MISSION_VARIATION_RECOVER_VAN CASE DELIVERY_MISSION_VARIATION_RECOVER_VAN_2 RETURN PROPERTY_SAVED_BIT_VAR_TRACK_WEED_RECOVER_VAN BREAK ENDSWITCH BREAK CASE PROPERTY_CINEMA_VINEWOOD CASE PROPERTY_CINEMA_DOWNTOWN CASE PROPERTY_CINEMA_MORNINGWOOD SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN RETURN PROPERTY_SAVED_BIT_VAR_TRACK_CINEMA_RECOVER_STOLEN BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION RETURN PROPERTY_SAVED_BIT_VAR_TRACK_CINEMA_PLANE_PROMOTION BREAK ENDSWITCH BREAK CASE PROPERTY_BAR_TEQUILALA CASE PROPERTY_BAR_PITCHERS CASE PROPERTY_BAR_HEN_HOUSE CASE PROPERTY_BAR_HOOKIES SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN RETURN PROPERTY_SAVED_BIT_VAR_TRACK_BAR_RECOVER_STOLEN BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK RETURN PROPERTY_SAVED_BIT_VAR_TRACK_BAR_GANG_ATTACK BREAK CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY RETURN PROPERTY_SAVED_BIT_VAR_TRACK_BAR_DELIVERY BREAK ENDSWITCH BREAK ENDSWITCH RETURN PROPERTY_SAVED_BIT_VAR_TRACK_NO_TRACK ENDFUNC // get the subvar track bit for a property FUNC PROPERTY_MISSION_SUB_VAR_ENUM GET_MISSION_SUB_VAR_BIT_FOR_PROPERTY_VARIATION(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iThisVariation) SWITCH thisProperty CASE PROPERTY_WEED_SHOP DELIVERY_MISSION_VARIATION_ENUM thisDelivery thisDelivery = CONVERT_INT_TO_DELIVERY_VARIATION(thisProperty, iThisVariation) SWITCH thisDelivery CASE DELIVERY_MISSION_VARIATION_TIMED_1 RETURN PROPERTY_MISSION_SUB_VAR_WEED_TIMED_1 BREAK CASE DELIVERY_MISSION_VARIATION_TIMED_2 RETURN PROPERTY_MISSION_SUB_VAR_WEED_TIMED_2 BREAK CASE DELIVERY_MISSION_VARIATION_TIMED_3 RETURN PROPERTY_MISSION_SUB_VAR_WEED_TIMED_3 BREAK CASE DELIVERY_MISSION_VARIATION_LOSE_COPS RETURN PROPERTY_MISSION_SUB_VAR_WEED_LOSE_COPS_1 BREAK CASE DELIVERY_MISSION_VARIATION_LOSE_COPS_2 RETURN PROPERTY_MISSION_SUB_VAR_WEED_LOSE_COPS_2 BREAK CASE DELIVERY_MISSION_VARIATION_RECOVER_VAN RETURN PROPERTY_MISSION_SUB_VAR_WEED_RECOVER_VAN_1 BREAK CASE DELIVERY_MISSION_VARIATION_RECOVER_VAN_2 RETURN PROPERTY_MISSION_SUB_VAR_WEED_RECOVER_VAN_2 BREAK ENDSWITCH BREAK CASE PROPERTY_CINEMA_VINEWOOD CASE PROPERTY_CINEMA_DOWNTOWN CASE PROPERTY_CINEMA_MORNINGWOOD SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN RECOVER_STOLEN_MISSION_VARIATION_ENUM thisStolen thisStolen = CONVERT_INT_TO_RECOVER_STOLEN_VARIATION(thisProperty, iThisVariation) SWITCH thisStolen CASE RECOVER_STOLEN_MISSION_VARIATION_TAKINGS RETURN PROPERTY_MISSION_SUB_VAR_CINEMA_RECOVER_STOLEN_TAKINGS BREAK // CASE RECOVER_STOLEN_MISSION_VARIATION_FILM /// RETURN PROPERTY_MISSION_SUB_VAR_CINEMA_RECOVER_STOLEN_FILM // BREAK ENDSWITCH BREAK ENDSWITCH BREAK CASE PROPERTY_BAR_TEQUILALA CASE PROPERTY_BAR_PITCHERS CASE PROPERTY_BAR_HEN_HOUSE CASE PROPERTY_BAR_HOOKIES SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN RECOVER_STOLEN_MISSION_VARIATION_ENUM thisStolen thisStolen = CONVERT_INT_TO_RECOVER_STOLEN_VARIATION(thisProperty, iThisVariation) SWITCH thisStolen CASE RECOVER_STOLEN_MISSION_VARIATION_TAKINGS RETURN PROPERTY_MISSION_SUB_VAR_BAR_RECOVER_STOLEN_TAKINGS BREAK CASE RECOVER_STOLEN_MISSION_VARIATION_PAP RETURN PROPERTY_MISSION_SUB_VAR_BAR_RECOVER_STOLEN_PAPARAZZI BREAK ENDSWITCH BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK GANG_ATTACK_MISSION_VARIATION_ENUM thisGangAttack thisGangAttack = CONVERT_INT_TO_GANG_ATTACK_VARIATION(thisProperty, iThisVariation) SWITCH thisGangAttack CASE GANG_ATTACK_MISSION_VARIATION_STAYS_AND_FIGHTS RETURN PROPERTY_MISSION_SUB_VAR_GANG_ATTACK_STAYS_AND_FIGHTS BREAK CASE GANG_ATTACK_MISSION_VARIATION_FLEES_ON_SIGHT RETURN PROPERTY_MISSION_SUB_VAR_GANG_ATTACK_FLEES_ON_SIGHT BREAK ENDSWITCH BREAK ENDSWITCH BREAK CASE PROPERTY_CAR_SCRAP_YARD DEFEND_MISSION_VARIATION_ENUM thisDefend thisDefend = CONVERT_INT_TO_DEFEND_VARIATION(thisProperty, iThisVariation) SWITCH thisDefend CASE DEFEND_MISSION_VARIATION_1 RETURN PROPERTY_MISSION_SUB_VAR_DEFEND_1 BREAK CASE DEFEND_MISSION_VARIATION_2 RETURN PROPERTY_MISSION_SUB_VAR_DEFEND_2 BREAK ENDSWITCH BREAK CASE PROPERTY_TAXI_LOT TAXI_MISSION_VARIATION_ENUM thisTaxi thisTaxi = CONVERT_INT_TO_TAXI_VARIATION(thisProperty, iThisVariation) SWITCH thisTaxi CASE TAXI_MISSION_VARIATION_CLOWN_CAR RETURN PROPERTY_MISSION_SUB_VAR_TAXI_CLOWN_CAR BREAK CASE TAXI_MISSION_VARIATION_CUT_YOU_IN RETURN PROPERTY_MISSION_SUB_VAR_TAXI_CUT_YOU_IN BREAK CASE TAXI_MISSION_VARIATION_DEADLINE RETURN PROPERTY_MISSION_SUB_VAR_TAXI_DEADLINE BREAK CASE TAXI_MISSION_VARIATION_FOLLOW_CAR RETURN PROPERTY_MISSION_SUB_VAR_TAXI_FOLLOW_CAR BREAK CASE TAXI_MISSION_VARIATION_GOT_YOU_NOW RETURN PROPERTY_MISSION_SUB_VAR_TAXI_GOT_YOU_NOW BREAK CASE TAXI_MISSION_VARIATION_GOT_YOUR_BACK RETURN PROPERTY_MISSION_SUB_VAR_TAXI_GOT_YOUR_BACK BREAK CASE TAXI_MISSION_VARIATION_NEEDS_EXCITEMENT RETURN PROPERTY_MISSION_SUB_VAR_TAXI_NEEDS_EXCITEMENT BREAK CASE TAXI_MISSION_VARIATION_TAKE_IT_EASY RETURN PROPERTY_MISSION_SUB_VAR_TAXI_TAKE_IT_EASY BREAK CASE TAXI_MISSION_VARIATION_TAKE_TO_BEST RETURN PROPERTY_MISSION_SUB_VAR_TAXI_TAKE_TO_BEST BREAK ENDSWITCH BREAK ENDSWITCH RETURN PROPERTY_MISSION_SUB_VAR_NO_TRACK ENDFUNC // can a property variation launch FUNC BOOL CAN_PROPERTY_VARIATION_LAUNCH(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iThisVariation) PROPERTY_SAVED_BIT_ENUM trackBit = GET_MISSION_TRACK_BIT_FOR_PROPERTY_VARIATION(thisProperty, thisMission, iThisVariation) PROPERTY_MISSION_SUB_VAR_ENUM subVarBit = GET_MISSION_SUB_VAR_BIT_FOR_PROPERTY_VARIATION(thisProperty, thisMission, iThisVariation) //IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iBit, trackBit) // CDEBUG1LN(DEBUG_PROPERTY, "Bit is set ", ENUM_TO_INT(thisMission)) //ENDIF //IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iBit, subVarBit) // CDEBUG1LN(DEBUG_PROPERTY, "Subvar is set ", iThisVariation) //ENDIF BOOL bNotSeenBefore = FALSE IF (trackBit = PROPERTY_SAVED_BIT_VAR_TRACK_NO_TRACK OR NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iBit, trackBit)) AND (subVarBit = PROPERTY_MISSION_SUB_VAR_NO_TRACK OR NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iSubVarBit, subVarBit)) IF GET_RANDOM_INT_IN_RANGE(0,3) = 0 bNotSeenBefore = TRUE //ELSE // CDEBUG1LN(DEBUG_PROPERTY, "Failed on random number gen ", ENUM_TO_INT(thisMission)) ENDIF ENDIF IF bNotSeenBefore RETURN TRUE ENDIF RETURN FALSE ENDFUNC // get a management mission to run on a property FUNC BOOL GET_PROPERTY_MANAGEMENT_MISSION_FROM_PROPERTY(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM &propertyManagementMission, INT &iPropertyManagementVariation) PROPERTY_MANAGEMENT_MISSION_ENUM thisMission BOOL bPreventLaunchInExile = FALSE IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MICHAEL_TREVOR_EXILE_STARTED) AND NOT GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MICHAEL_TREVOR_EXILE_FINISHED) IF thisProperty = PROPERTY_CINEMA_VINEWOOD OR thisProperty = PROPERTY_CINEMA_DOWNTOWN OR thisProperty = PROPERTY_CINEMA_MORNINGWOOD bPreventLaunchInExile = TRUE ELIF thisProperty = PROPERTY_BAR_TEQUILALA OR thisProperty = PROPERTY_BAR_PITCHERS OR thisProperty = PROPERTY_CAR_SCRAP_YARD IF g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner <> CHAR_FRANKLIN bPreventLaunchInExile = TRUE ENDIF ENDIF ENDIF IF NOT bPreventLaunchInExile INT i, j REPEAT GET_NUMBER_OF_MISSIONS_FOR_PROPERTY(thisProperty) i thisMission = GET_MISSION_FROM_PROPERTY_AND_NUMBER(thisProperty, i) //CDEBUG1LN(DEBUG_PROPERTY, "Checking mission ", i) REPEAT GET_NUMBER_OF_VARIATIONS_FOR_PROPERTY(thisProperty, thisMission) j //CDEBUG1LN(DEBUG_PROPERTY, "Checking variation ", j) IF CAN_PROPERTY_VARIATION_LAUNCH(thisProperty, thisMission, j) //CDEBUG1LN(DEBUG_PROPERTY, "Can launch ", j) IF IS_PLAYER_IN_NOTIFY_RANGE_FOR_MANAGEMENT_EVENT(thisProperty, thisMission, j) //CDEBUG1LN(DEBUG_PROPERTY, "In notify range ", j) propertyManagementMission = thisMission iPropertyManagementVariation = j RETURN TRUE ENDIF ENDIF ENDREPEAT ENDREPEAT ENDIF propertyManagementMission = PROPERTY_MANAGEMENT_MISSION_NONE RETURN FALSE ENDFUNC // get the number of variations you have to complete for a property/mission before it resets and you can get dups again FUNC INT GET_NUMBER_OF_MANAGEMENT_VARIATIONS_COMPLETED_TO_RESET(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission) SWITCH thisProperty CASE PROPERTY_CAR_SCRAP_YARD SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DEFEND RETURN 2 BREAK ENDSWITCH BREAK CASE PROPERTY_WEED_SHOP SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY RETURN 5 BREAK ENDSWITCH BREAK CASE PROPERTY_TAXI_LOT SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_TAXI RETURN 9 BREAK ENDSWITCH BREAK CASE PROPERTY_CINEMA_VINEWOOD CASE PROPERTY_CINEMA_DOWNTOWN CASE PROPERTY_CINEMA_MORNINGWOOD SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION RETURN 1 BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN RETURN 1 BREAK ENDSWITCH BREAK CASE PROPERTY_BAR_TEQUILALA CASE PROPERTY_BAR_PITCHERS CASE PROPERTY_BAR_HEN_HOUSE CASE PROPERTY_BAR_HOOKIES SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY RETURN 0 BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK RETURN 2 BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN RETURN 2 BREAK ENDSWITCH BREAK ENDSWITCH RETURN 1 ENDFUNC PROC SET_CURRENT_MANAGEMENT_VARIATION_AS_LAUNCHED() PROPERTY_SAVED_BIT_ENUM trackBit = GET_MISSION_TRACK_BIT_FOR_PROPERTY_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.currentPropertyManagementMission, g_PropertySystemData.iCurrentPropertyManagementVariation) PROPERTY_MISSION_SUB_VAR_ENUM subVarBit = GET_MISSION_SUB_VAR_BIT_FOR_PROPERTY_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.currentPropertyManagementMission, g_PropertySystemData.iCurrentPropertyManagementVariation) IF trackBit <> PROPERTY_SAVED_BIT_VAR_TRACK_NO_TRACK SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.iBit, trackBit) ENDIF IF subVarBit <> PROPERTY_MISSION_SUB_VAR_NO_TRACK SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.iSubVarBit, subVarBit) ENDIF ENDPROC // reset all the variations for a property mission if launched x amount, except for the last one you played PROC RESET_ALL_MANAGEMENT_VARIATIONS_IF_COMPLETED(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iDontReset) INT i INT iTrackDone = 0 INT iSubVarDone = 0 PROPERTY_SAVED_BIT_ENUM thisTrackVar = GET_MISSION_TRACK_BIT_FOR_PROPERTY_VARIATION(thisProperty, thisMission, iDontReset) PROPERTY_MISSION_SUB_VAR_ENUM thisSubVar = GET_MISSION_SUB_VAR_BIT_FOR_PROPERTY_VARIATION(thisProperty, thisMission, iDontReset) PROPERTY_SAVED_BIT_ENUM checkTrackVar[3] PROPERTY_MISSION_SUB_VAR_ENUM checkSubVar[9] REPEAT COUNT_OF(checkTrackVar) i checkTrackVar[i] = PROPERTY_SAVED_BIT_VAR_TRACK_NO_TRACK ENDREPEAT REPEAT COUNT_OF(checkSubVar) i checkSubVar[i] = PROPERTY_MISSION_SUB_VAR_NO_TRACK ENDREPEAT SWITCH thisProperty CASE PROPERTY_CAR_SCRAP_YARD SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DEFEND checkSubVar[0] = PROPERTY_MISSION_SUB_VAR_DEFEND_1 checkSubVar[1] = PROPERTY_MISSION_SUB_VAR_DEFEND_2 BREAK ENDSWITCH BREAK CASE PROPERTY_WEED_SHOP SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY checkTrackVar[0] = PROPERTY_SAVED_BIT_VAR_TRACK_WEED_TIMED checkTrackVar[2] = PROPERTY_SAVED_BIT_VAR_TRACK_WEED_LOSE_COPS checkTrackVar[1] = PROPERTY_SAVED_BIT_VAR_TRACK_WEED_RECOVER_VAN checkSubVar[0] = PROPERTY_MISSION_SUB_VAR_WEED_TIMED_1 checkSubVar[1] = PROPERTY_MISSION_SUB_VAR_WEED_TIMED_2 checkSubVar[2] = PROPERTY_MISSION_SUB_VAR_WEED_TIMED_3 checkSubVar[3] = PROPERTY_MISSION_SUB_VAR_WEED_LOSE_COPS_1 checkSubVar[4] = PROPERTY_MISSION_SUB_VAR_WEED_LOSE_COPS_2 checkSubVar[5] = PROPERTY_MISSION_SUB_VAR_WEED_RECOVER_VAN_1 checkSubVar[6] = PROPERTY_MISSION_SUB_VAR_WEED_RECOVER_VAN_2 BREAK ENDSWITCH BREAK CASE PROPERTY_TAXI_LOT SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_TAXI checkSubVar[0] = PROPERTY_MISSION_SUB_VAR_TAXI_CLOWN_CAR checkSubVar[1] = PROPERTY_MISSION_SUB_VAR_TAXI_CUT_YOU_IN checkSubVar[2] = PROPERTY_MISSION_SUB_VAR_TAXI_DEADLINE checkSubVar[3] = PROPERTY_MISSION_SUB_VAR_TAXI_FOLLOW_CAR checkSubVar[4] = PROPERTY_MISSION_SUB_VAR_TAXI_GOT_YOU_NOW checkSubVar[5] = PROPERTY_MISSION_SUB_VAR_TAXI_GOT_YOUR_BACK checkSubVar[6] = PROPERTY_MISSION_SUB_VAR_TAXI_NEEDS_EXCITEMENT checkSubVar[7] = PROPERTY_MISSION_SUB_VAR_TAXI_TAKE_IT_EASY checkSubVar[8] = PROPERTY_MISSION_SUB_VAR_TAXI_TAKE_TO_BEST BREAK ENDSWITCH BREAK CASE PROPERTY_CINEMA_VINEWOOD CASE PROPERTY_CINEMA_DOWNTOWN CASE PROPERTY_CINEMA_MORNINGWOOD checkTrackVar[0] = PROPERTY_SAVED_BIT_VAR_TRACK_CINEMA_RECOVER_STOLEN checkTrackVar[1] = PROPERTY_SAVED_BIT_VAR_TRACK_CINEMA_PLANE_PROMOTION SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN checkSubVar[0] = PROPERTY_MISSION_SUB_VAR_CINEMA_RECOVER_STOLEN_TAKINGS BREAK ENDSWITCH BREAK CASE PROPERTY_BAR_TEQUILALA CASE PROPERTY_BAR_PITCHERS CASE PROPERTY_BAR_HEN_HOUSE CASE PROPERTY_BAR_HOOKIES checkTrackVar[0] = PROPERTY_SAVED_BIT_VAR_TRACK_BAR_RECOVER_STOLEN checkTrackVar[1] = PROPERTY_SAVED_BIT_VAR_TRACK_BAR_GANG_ATTACK checkTrackVar[2] = PROPERTY_SAVED_BIT_VAR_TRACK_BAR_DELIVERY SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK checkSubVar[0] = PROPERTY_MISSION_SUB_VAR_GANG_ATTACK_STAYS_AND_FIGHTS checkSubVar[1] = PROPERTY_MISSION_SUB_VAR_GANG_ATTACK_FLEES_ON_SIGHT BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN checkSubVar[0] = PROPERTY_MISSION_SUB_VAR_BAR_RECOVER_STOLEN_TAKINGS checkSubVar[1] = PROPERTY_MISSION_SUB_VAR_BAR_RECOVER_STOLEN_PAPARAZZI BREAK ENDSWITCH BREAK ENDSWITCH // check to see if track vars should reset REPEAT COUNT_OF(checkTrackVar) i IF checkTrackVar[i] <> PROPERTY_SAVED_BIT_VAR_TRACK_NO_TRACK IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iBit, checkTrackVar[i]) iTrackDone++ //CDEBUG1LN(DEBUG_PROPERTY, "Add to iTrackDone") ENDIF ENDIF ENDREPEAT IF iTrackDone >= GET_NUMBER_OF_MISSIONS_FOR_PROPERTY(thisProperty) //CDEBUG1LN(DEBUG_PROPERTY, "Reset all") REPEAT COUNT_OF(checkTrackVar) i IF checkTrackVar[i] <> thisTrackVar AND checkTrackVar[i] <> PROPERTY_SAVED_BIT_VAR_TRACK_NO_TRACK //CDEBUG1LN(DEBUG_PROPERTY, "Reset specific", i) CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.iBit, checkTrackVar[i]) ENDIF ENDREPEAT ENDIF // check to see if subvars should reset REPEAT COUNT_OF(checkSubVar) i IF checkSubVar[i] <> PROPERTY_MISSION_SUB_VAR_NO_TRACK IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iSubVarBit, checkSubVar[i]) iSubVarDone++ ENDIF ENDIF ENDREPEAT INT iToReset = GET_NUMBER_OF_MANAGEMENT_VARIATIONS_COMPLETED_TO_RESET(thisProperty, thisMission) IF iSubVarDone >= iToReset REPEAT COUNT_OF(checkSubVar) i IF (checkSubVar[i] <> thisSubVar OR iToReset = 1) AND checkSubVar[i] <> PROPERTY_MISSION_SUB_VAR_NO_TRACK CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.iSubVarBit, checkSubVar[i]) ENDIF ENDREPEAT ENDIF ENDPROC // next event time PROC SET_NEXT_PROPERTY_MANAGEMENT_EVENT_TIME(PROPERTY_ACTION_ENUM thisAction) INT iAdvanceDay INT iAdvanceHour INT iAdvanceMinute BOOL bRandomAdvanceHourMinute = TRUE SWITCH thisAction CASE PROPERTY_ACTION_FINISHED_MANAGEMENT_EVENT IF GET_MISSION_COMPLETE_STATE(SP_MISSION_MICHAEL_3) iAdvanceDay = GET_RANDOM_INT_IN_RANGE(3,5) ELSE iAdvanceDay = GET_RANDOM_INT_IN_RANGE(6,7) ENDIF BREAK CASE PROPERTY_ACTION_IGNORED_MANAGEMENT_EVENT IF GET_MISSION_COMPLETE_STATE(SP_MISSION_MICHAEL_3) iAdvanceDay = GET_RANDOM_INT_IN_RANGE(3,5) ELSE iAdvanceDay = GET_RANDOM_INT_IN_RANGE(6,7) ENDIF BREAK CASE PROPERTY_ACTION_DELAY_FOR_MISSION iAdvanceDay = 0//GET_RANDOM_INT_IN_RANGE(0,2) bRandomAdvanceHourMinute = FALSE iAdvanceHour = 0 iAdvanceMinute = GET_RANDOM_INT_IN_RANGE(0,60) BREAK CASE PROPERTY_ACTION_GENERAL_DELAY iAdvanceDay = 0 BREAK ENDSWITCH IF bRandomAdvanceHourMinute iAdvanceHour = GET_RANDOM_INT_IN_RANGE(0,24) iAdvanceMinute = GET_RANDOM_INT_IN_RANGE(0,60) ENDIF TIMEOFDAY potentialNextTimeOfDay = GET_CURRENT_TIMEOFDAY() #IF IS_DEBUG_BUILD TEXT_LABEL_63 tlNow = TIMEOFDAY_TO_TEXT_LABEL(potentialNextTimeOfDay) CDEBUG1LN(debug_property,tlNow,": Next property event CHECK for action #",thisAction," is in ",iAdvanceDay," days, ",iAdvanceHour,"h ",iAdvanceMinute,"m") #ENDIF ADD_TIME_TO_TIMEOFDAY(potentialNextTimeOfDay, 0, iAdvanceMinute, iAdvanceHour, iAdvanceDay) IF IS_TIMEOFDAY_AFTER_TIMEOFDAY(potentialNextTimeOfDay, g_savedGlobals.sPropertyData.nextCheckManagementEventTime) g_savedGlobals.sPropertyData.nextCheckManagementEventTime = potentialNextTimeOfDay ENDIF ENDPROC // next event time specific to a property PROC SET_NEXT_MANAGEMENT_EVENT_TIME_FOR_PROPERTY(PROPERTY_ENUM thisProperty, PROPERTY_ACTION_ENUM thisAction) INT iAdvanceDay INT iAdvanceHour INT iAdvanceMinute SWITCH thisAction CASE PROPERTY_ACTION_FINISHED_MANAGEMENT_EVENT IF GET_MISSION_COMPLETE_STATE(SP_MISSION_MICHAEL_3) iAdvanceDay = GET_RANDOM_INT_IN_RANGE(5,7) ELSE iAdvanceDay = GET_RANDOM_INT_IN_RANGE(7,9) ENDIF iAdvanceHour = GET_RANDOM_INT_IN_RANGE(0,24) iAdvanceMinute = GET_RANDOM_INT_IN_RANGE(0,60) BREAK CASE PROPERTY_ACTION_PURCHASED_PROPERTY iAdvanceDay = 0 iAdvanceHour = GET_RANDOM_INT_IN_RANGE(12,15) iAdvanceMinute = GET_RANDOM_INT_IN_RANGE(0,60) BREAK ENDSWITCH TIMEOFDAY potentialNextTimeOfDay = GET_CURRENT_TIMEOFDAY() #IF IS_DEBUG_BUILD TEXT_LABEL_63 tlNow = TIMEOFDAY_TO_TEXT_LABEL(potentialNextTimeOfDay) CDEBUG1LN(debug_property,tlNow,": Next potential property event for property #",thisProperty," action #",thisAction," is in ",iAdvanceDay," days, ",iAdvanceHour,"h",iAdvanceMinute,"m") #ENDIF ADD_TIME_TO_TIMEOFDAY(potentialNextTimeOfDay, 0, iAdvanceMinute, iAdvanceHour, iAdvanceDay) IF IS_TIMEOFDAY_AFTER_TIMEOFDAY(potentialNextTimeOfDay, g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].nextManagementEventTime) g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].nextManagementEventTime = potentialNextTimeOfDay ENDIF ENDPROC // set the property blip position PROC SET_PROPERTY_BLIP_POSITION(PROPERTY_ENUM thisProperty) IF thisProperty = PROPERTY_ARMS_TRAFFICKING VECTOR vPos IF g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner = NO_CHARACTER vPos = GET_PROPERTY_PURCHASE_COORDS(PROPERTY_ARMS_TRAFFICKING) ELSE vPos = <<2151.25024, 4773.05518, 40.30271>> ENDIF SET_STATIC_BLIP_POSITION(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), vPos) ENDIF ENDPROC // get property name string FUNC STRING GET_PROPERTY_NAME_STRING(PROPERTY_ENUM thisProperty) SWITCH thisProperty CASE PROPERTY_ARMS_TRAFFICKING RETURN "PN_TRAF" BREAK CASE PROPERTY_CAR_SCRAP_YARD RETURN "PN_CSCR" BREAK CASE PROPERTY_WEED_SHOP RETURN "PN_WEED" BREAK CASE PROPERTY_TAXI_LOT RETURN "PN_TAXI" BREAK CASE PROPERTY_CAR_MOD_SHOP RETURN "PN_CMSH" BREAK CASE PROPERTY_SONAR_COLLECTIONS RETURN "PN_SOCO" BREAK CASE PROPERTY_TOWING_IMPOUND RETURN "PN_TOWI" BREAK CASE PROPERTY_GOLF_CLUB RETURN "PN_GOLF" BREAK CASE PROPERTY_CINEMA_VINEWOOD RETURN "PN_CINV" BREAK CASE PROPERTY_CINEMA_DOWNTOWN RETURN "PN_CIND" BREAK CASE PROPERTY_CINEMA_MORNINGWOOD RETURN "PN_CINM" BREAK CASE PROPERTY_BAR_TEQUILALA RETURN "PN_BRTE" BREAK CASE PROPERTY_BAR_PITCHERS RETURN "PN_BRPI" BREAK CASE PROPERTY_BAR_HEN_HOUSE RETURN "PN_BRHE" BREAK CASE PROPERTY_BAR_HOOKIES RETURN "PN_BRHO" BREAK CASE PROPERTY_STRIP_CLUB RETURN "PN_STRP" BREAK ENDSWITCH RETURN "error" ENDFUNC // get property cost string FUNC STRING GET_PROPERTY_COST_STRING(PROPERTY_ENUM thisProperty) SWITCH thisProperty CASE PROPERTY_ARMS_TRAFFICKING RETURN"PROPR_CO_TRAF" BREAK CASE PROPERTY_CAR_SCRAP_YARD RETURN"PROPR_CO_CSCR" BREAK CASE PROPERTY_WEED_SHOP RETURN"PROPR_CO_WEED" BREAK CASE PROPERTY_TAXI_LOT RETURN"PROPR_CO_TAXI" BREAK CASE PROPERTY_CAR_MOD_SHOP RETURN"PROPR_CO_CMSH" BREAK CASE PROPERTY_SONAR_COLLECTIONS RETURN"PROPR_CO_SOCO" BREAK CASE PROPERTY_TOWING_IMPOUND RETURN"PROPR_CO_TOWI" BREAK CASE PROPERTY_GOLF_CLUB RETURN"PROPR_CO_GOLF" BREAK CASE PROPERTY_CINEMA_VINEWOOD RETURN"PROPR_CO_CINV" BREAK CASE PROPERTY_CINEMA_DOWNTOWN RETURN"PROPR_CO_CIND" BREAK CASE PROPERTY_CINEMA_MORNINGWOOD RETURN"PROPR_CO_CICO" BREAK CASE PROPERTY_BAR_TEQUILALA RETURN"PROPR_CO_BARTE" BREAK CASE PROPERTY_BAR_PITCHERS RETURN"PROPR_CO_BARPI" BREAK CASE PROPERTY_BAR_HEN_HOUSE RETURN"PROPR_CO_BARHE" BREAK CASE PROPERTY_BAR_HOOKIES RETURN"PROPR_CO_BARHO" BREAK CASE PROPERTY_STRIP_CLUB RETURN"PROPR_CO_STRP" BREAK ENDSWITCH RETURN "error" ENDFUNC // get property legend string FUNC STRING GET_PROPERTY_LEGEND_STRING(PROPERTY_ENUM thisProperty, BOOL bOwned) IF bOwned RETURN GET_PROPERTY_NAME_STRING(thisProperty) ELSE SWITCH thisProperty CASE PROPERTY_ARMS_TRAFFICKING RETURN"B_TRF2" BREAK CASE PROPERTY_CAR_SCRAP_YARD RETURN"B_CSR2" BREAK CASE PROPERTY_WEED_SHOP RETURN"B_WED2" BREAK CASE PROPERTY_TAXI_LOT RETURN"B_TXI2" BREAK CASE PROPERTY_CAR_MOD_SHOP RETURN"B_CMS2" BREAK CASE PROPERTY_SONAR_COLLECTIONS RETURN"B_SOC2" BREAK CASE PROPERTY_TOWING_IMPOUND RETURN"B_TOW2" BREAK CASE PROPERTY_GOLF_CLUB RETURN"B_GLF2" BREAK CASE PROPERTY_CINEMA_VINEWOOD RETURN"B_CIV2" BREAK CASE PROPERTY_CINEMA_DOWNTOWN RETURN"B_CID2" BREAK CASE PROPERTY_CINEMA_MORNINGWOOD RETURN"B_CIM2" BREAK CASE PROPERTY_BAR_TEQUILALA RETURN"B_BRT2" BREAK CASE PROPERTY_BAR_PITCHERS RETURN"B_BRP2" BREAK CASE PROPERTY_BAR_HEN_HOUSE RETURN"B_BRH2" BREAK CASE PROPERTY_BAR_HOOKIES RETURN"B_BHO2" BREAK ENDSWITCH ENDIF RETURN "error" ENDFUNC // blip the property PROC BLIP_PROPERTY(PROPERTY_ENUM thisProperty, BOOL bBlip) IF bBlip IF g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner <> NO_CHARACTER IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_OWNED) SET_STATIC_BLIP_ACTIVE_STATE(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), FALSE) INT iBlipColour SWITCH g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner CASE CHAR_FRANKLIN iBlipColour = BLIP_COLOUR_FRANKLIN BREAK CASE CHAR_MICHAEL iBlipColour = BLIP_COLOUR_MICHAEL BREAK CASE CHAR_TREVOR iBlipColour = BLIP_COLOUR_TREVOR BREAK ENDSWITCH SET_STATIC_BLIP_COLOUR(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), iBlipColour) SET_STATIC_BLIP_ICON(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), RADAR_TRACE_BUSINESS) SET_STATIC_BLIP_NAME(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), GET_PROPERTY_LEGEND_STRING(thisProperty, TRUE)) SET_PROPERTY_BLIP_POSITION(thisProperty) SET_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_OWNED) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_AVAILABLE) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_UNAVAILABLE) SET_STATIC_BLIP_ACTIVE_STATE(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), TRUE) ENDIF ELSE enumCharacterList propertyCharacter = GET_CHARACTER_FOR_PROPERTY(thisProperty) IF (propertyCharacter = GET_CURRENT_PLAYER_PED_ENUM() OR propertyCharacter = NO_CHARACTER) AND NOT (IS_PROPERTY_BLOCKED_FOR_CHARACTER(thisProperty, GET_CURRENT_PLAYER_PED_ENUM())) IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_AVAILABLE) SET_STATIC_BLIP_ACTIVE_STATE(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), FALSE) SET_STATIC_BLIP_ICON(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), RADAR_TRACE_BUSINESS_FOR_SALE) SET_STATIC_BLIP_COLOUR(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), BLIP_COLOUR_DEFAULT) SET_STATIC_BLIP_NAME(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), GET_PROPERTY_LEGEND_STRING(thisProperty, FALSE)) SET_PROPERTY_BLIP_POSITION(thisProperty) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_OWNED) SET_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_AVAILABLE) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_UNAVAILABLE) SET_STATIC_BLIP_ACTIVE_STATE(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), TRUE) ENDIF ELSE IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_UNAVAILABLE) SET_STATIC_BLIP_ACTIVE_STATE(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), FALSE) SET_STATIC_BLIP_ICON(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), RADAR_TRACE_BUSINESS_FOR_SALE) SET_STATIC_BLIP_COLOUR(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), BLIP_COLOUR_INACTIVE_MISSION) SET_STATIC_BLIP_NAME(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), GET_PROPERTY_LEGEND_STRING(thisProperty, FALSE)) SET_PROPERTY_BLIP_POSITION(thisProperty) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_OWNED) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_AVAILABLE) SET_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_UNAVAILABLE) SET_STATIC_BLIP_ACTIVE_STATE(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), TRUE) ENDIF ENDIF ENDIF ELSE IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_AVAILABLE) OR IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_UNAVAILABLE) OR IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_OWNED) SET_STATIC_BLIP_ACTIVE_STATE(GET_BLIP_ENUM_FOR_PROPERTY(thisProperty), FALSE) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_AVAILABLE) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_UNAVAILABLE) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_BLIPPED_OWNED) ENDIF ENDIF ENDPROC PROC CLEANUP_MISSION_PASSED_SCREEN() IF HAS_SCALEFORM_MOVIE_LOADED(g_PropertySystemData.passedScaleform) SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(g_PropertySystemData.passedScaleform) SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE) ENDIF CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_MISSION_PASS) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_PURCHASED) g_PropertySystemData.missionPassedScreenState = PROPERTY_MISSION_PASSED_SCREEN_STATE_NOT_STARTED ENDPROC // release management event entities PROC RELEASE_MANAGEMENT_EVENT_ASSETS(BOOL bReleaseEntities = TRUE, BOOL bGrab = FALSE) PRINTSTRING("releasing management event assets") PRINTNL() IF g_PropertySystemData.createManagementEventState >= CREATE_MANAGEMENT_EVENT_STATE_LOADING_ASSETS SWITCH g_PropertySystemData.currentPropertyManagementMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY RELEASE_DELIVERY_EVENT_ASSETS(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_DELIVERY_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION RELEASE_PLANE_PROMOTION_EVENT_ASSETS() BREAK CASE PROPERTY_MANAGEMENT_MISSION_TAXI RELEASE_TAXI_EVENT_ASSETS(CONVERT_INT_TO_TAXI_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN RELEASE_RECOVER_STOLEN_EVENT_ASSETS(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_RECOVER_STOLEN_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK RELEASE_GANG_ATTACK_EVENT_ASSETS(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_GANG_ATTACK_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK ENDSWITCH ENDIF IF bReleaseEntities INT i REPEAT NUMBER_PROPERTY_MANAGEMENT_VEHICLES i IF DOES_ENTITY_EXIST(g_PropertySystemData.managementEventVehicle[i]) IF bGrab SET_ENTITY_AS_MISSION_ENTITY(g_PropertySystemData.managementEventVehicle[i], TRUE, TRUE) ENDIF IF IS_ENTITY_A_MISSION_ENTITY(g_PropertySystemData.managementEventVehicle[i]) IF NOT IS_ENTITY_DEAD(g_PropertySystemData.managementEventVehicle[i]) IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(g_PropertySystemData.managementEventVehicle[i]) SET_VEHICLE_AS_NO_LONGER_NEEDED(g_PropertySystemData.managementEventVehicle[i]) ENDIF ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(g_PropertySystemData.managementEventVehicle[i]) ENDIF ENDIF ENDIF ENDREPEAT REPEAT NUMBER_PROPERTY_MANAGEMENT_PEDS i IF DOES_ENTITY_EXIST(g_PropertySystemData.managementEventPed[i]) IF bGrab SET_ENTITY_AS_MISSION_ENTITY(g_PropertySystemData.managementEventPed[i], TRUE, TRUE) ENDIF IF IS_ENTITY_A_MISSION_ENTITY(g_PropertySystemData.managementEventPed[i]) IF NOT IS_ENTITY_DEAD(g_PropertySystemData.managementEventPed[i]) IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(g_PropertySystemData.managementEventPed[i]) SET_PED_AS_NO_LONGER_NEEDED(g_PropertySystemData.managementEventPed[i]) ENDIF ELSE SET_PED_AS_NO_LONGER_NEEDED(g_PropertySystemData.managementEventPed[i]) ENDIF ENDIF ENDIF ENDREPEAT ENDIF g_PropertySystemData.createManagementEventState = CREATE_MANAGEMENT_EVENT_STATE_NOT_STARTED ENDPROC PROC RESET_PROPERTIES_FOR_MP() // TEMP - remove the property blip if one exists, reset the system to waiting IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RUN_CUTSCENE) END_PROPERTY_CUTSCENE(g_PropertySystemData.runCutsceneProperty) ENDIF IF DOES_BLIP_EXIST(g_PropertySystemData.propertyManagementBlip) REMOVE_BLIP(g_PropertySystemData.propertyManagementBlip) ENDIF RELEASE_MANAGEMENT_EVENT_ASSETS(TRUE, TRUE) RESET_PROPERTY_ASSET_STREAMING() RESET_FOR_SALE_SIGN_CREATE_STATE(FALSE, TRUE) IF DOES_ENTITY_EXIST(g_PropertySystemData.veh[0]) SET_ENTITY_AS_MISSION_ENTITY(g_PropertySystemData.veh[0], TRUE, TRUE) SET_VEHICLE_AS_NO_LONGER_NEEDED(g_PropertySystemData.veh[0]) ENDIF IF DOES_ENTITY_EXIST(g_PropertySystemData.veh[1]) SET_ENTITY_AS_MISSION_ENTITY(g_PropertySystemData.veh[1], TRUE, TRUE) SET_VEHICLE_AS_NO_LONGER_NEEDED(g_PropertySystemData.veh[1]) ENDIF CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_FAIL_TEXT) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_PASS_TEXT) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_MISSION_PASS) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_PURCHASED) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RUN_CUTSCENE) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SETUP_CUTSCENE) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_PLAYING_MOCAP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_CLEARED_FOR_MOCAP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DONE_PURCHASE_SOUND) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_BLIPPED_MANAGEMENT_EVENT) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RECEIVED_CALL) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_LAUNCH_AMBIENT_SCRIPT) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_PURCHASE_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_NO_MONEY_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_CONFIRM_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_WRONG_CHAR_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_CONFIRM_PURCHASE) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SUPPRESS_FOR_SALE_SIGNS) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_PLAYED_PASS_SOUND) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SUPPRESS_AIRPORT_RESTRICTED) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_TRAFFICKING_ASSETS) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DO_RESET_TO_WAITING) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_TEXT_VIEW) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_PURCHASED) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_TOWING_ASSETS) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RESET_FOR_MULTIPLAYER) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_GOLF_CLUB_ASSETS) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_PLAYED_BOUGHT_SOUND) CLEANUP_MISSION_PASSED_SCREEN() g_PropertySystemData.propertyManagementState = PROPERTY_MANAGEMENT_STATE_WAITING PRINTSTRING("reset properties for MP") PRINTNL() ENDPROC // property specific stuff on availability PROC DO_PROPERTY_SPECIFIC_AVAILABLE_ACTIONS(PROPERTY_ENUM thisProperty) /* SWITCH thisProperty // tonya text to see if CASE PROPERTY_TOWING_IMPOUND IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_ENABLED_TOWING_VEH_GEN) SET_VEHICLE_GEN_AVAILABLE(VEHGEN_IMPOUND_TOW_TRUCK, TRUE) SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_ENABLED_TOWING_VEH_GEN) ENDIF BREAK ENDSWITCH */ IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].iBit, PROPERTY_BIT_SENT_EMAIL) INT iOwnerBit BOOL bIsCall = FALSE BOOL bIsNoComm = FALSE CC_CommID thisComm enumCharacterList fromChar INT iSpeaker SWITCH thisProperty CASE PROPERTY_TOWING_IMPOUND thisComm = EMAIL_PRO_TOWING_IMPOUND_F fromChar = CHAR_PROPERTY_TOWING_IMPOUND BREAK CASE PROPERTY_TAXI_LOT bIsCall = TRUE thisComm = CALL_PROP_TAXI_F iSpeaker = 3 fromChar = CHAR_PROPERTY_TAXI_LOT BREAK CASE PROPERTY_ARMS_TRAFFICKING bIsNoComm = TRUE BREAK CASE PROPERTY_SONAR_COLLECTIONS SWITCH g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner CASE CHAR_MICHAEL thisComm = EMAIL_PRO_SONAR_COLLECTIONS_M BREAK CASE CHAR_TREVOR thisComm = EMAIL_PRO_SONAR_COLLECTIONS_T BREAK CASE CHAR_FRANKLIN thisComm = EMAIL_PRO_SONAR_COLLECTIONS_F BREAK ENDSWITCH fromChar = CHAR_PROPERTY_SONAR_COLLECTIONS BREAK CASE PROPERTY_CAR_MOD_SHOP thisComm = EMAIL_PRO_CAR_MOD_SHOP_F fromChar = CHAR_PROPERTY_CAR_MOD_SHOP BREAK CASE PROPERTY_CINEMA_VINEWOOD thisComm = EMAIL_PRO_CINEMA_VINEWOOD_M fromChar = CHAR_PROPERTY_CINEMA_VINEWOOD BREAK CASE PROPERTY_CINEMA_DOWNTOWN thisComm = EMAIL_PRO_CINEMA_DOWNTOWN_M fromChar = CHAR_PROPERTY_CINEMA_DOWNTOWN BREAK CASE PROPERTY_CINEMA_MORNINGWOOD bIsCall = TRUE thisComm = CALL_PROP_CINEMA_M iSpeaker = 4 fromChar = CHAR_PROPERTY_CINEMA_MORNINGWOOD BREAK CASE PROPERTY_GOLF_CLUB SWITCH g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner CASE CHAR_MICHAEL bIsCall = TRUE thisComm = CALL_PROP_GOLF_M iSpeaker = 3 BREAK CASE CHAR_TREVOR bIsCall = TRUE thisComm = CALL_PROP_GOLF_T iSpeaker = 3 BREAK CASE CHAR_FRANKLIN bIsCall = TRUE thisComm = CALL_PROP_GOLF_F iSpeaker = 3 BREAK ENDSWITCH fromChar = CHAR_PROPERTY_GOLF_CLUB BREAK CASE PROPERTY_CAR_SCRAP_YARD SWITCH g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner CASE CHAR_MICHAEL thisComm = EMAIL_PRO_CAR_SCRAP_YARD_M BREAK CASE CHAR_TREVOR thisComm = EMAIL_PRO_CAR_SCRAP_YARD_T BREAK CASE CHAR_FRANKLIN thisComm = EMAIL_PRO_CAR_SCRAP_YARD_F BREAK ENDSWITCH fromChar = CHAR_PROPERTY_CAR_SCRAP_YARD BREAK CASE PROPERTY_WEED_SHOP thisComm = EMAIL_PRO_WEED_SHOP_F fromChar = CHAR_PROPERTY_WEED_SHOP BREAK CASE PROPERTY_BAR_TEQUILALA SWITCH g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner CASE CHAR_MICHAEL thisComm = EMAIL_PRO_BAR_TEQUILALA_M BREAK CASE CHAR_TREVOR thisComm = EMAIL_PRO_BAR_TEQUILALA_T BREAK CASE CHAR_FRANKLIN thisComm = EMAIL_PRO_BAR_TEQUILALA_F BREAK ENDSWITCH fromChar = CHAR_PROPERTY_BAR_TEQUILALA BREAK CASE PROPERTY_BAR_PITCHERS SWITCH g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner CASE CHAR_MICHAEL thisComm = EMAIL_PRO_BAR_PITCHERS_M BREAK CASE CHAR_TREVOR thisComm = EMAIL_PRO_BAR_PITCHERS_T BREAK CASE CHAR_FRANKLIN thisComm = EMAIL_PRO_BAR_PITCHERS_F BREAK ENDSWITCH fromChar = CHAR_PROPERTY_BAR_PITCHERS BREAK CASE PROPERTY_BAR_HEN_HOUSE SWITCH g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner CASE CHAR_MICHAEL thisComm = EMAIL_PRO_BAR_HEN_HOUSE_M BREAK CASE CHAR_TREVOR thisComm = EMAIL_PRO_BAR_HEN_HOUSE_T BREAK CASE CHAR_FRANKLIN thisComm = EMAIL_PRO_BAR_HEN_HOUSE_F BREAK ENDSWITCH fromChar = CHAR_PROPERTY_BAR_HEN_HOUSE BREAK CASE PROPERTY_BAR_HOOKIES SWITCH g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner CASE CHAR_MICHAEL thisComm = EMAIL_PRO_BAR_HOOKIES_M BREAK CASE CHAR_FRANKLIN thisComm = EMAIL_PRO_BAR_HOOKIES_F BREAK ENDSWITCH fromChar = CHAR_PROPERTY_BAR_HOOKIES BREAK ENDSWITCH SWITCH g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner CASE CHAR_MICHAEL iOwnerBit = BIT_MICHAEL BREAK CASE CHAR_FRANKLIN iOwnerBit = BIT_FRANKLIN BREAK CASE CHAR_TREVOR iOwnerBit = BIT_TREVOR BREAK ENDSWITCH IF NOT bIsNoComm IF NOT bIsCall IF REGISTER_EMAIL_FROM_CHARACTER_TO_PLAYER( thisComm, CT_FRIEND, iOwnerBit, fromChar, 10000, 10000, VID_BLANK, CID_BLANK, FLOW_CHECK_NONE, BIT_NONCRIT_TXTMSG) SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].iBit, PROPERTY_BIT_SENT_EMAIL) ENDIF ELSE IF REGISTER_CALL_FROM_CHARACTER_TO_PLAYER(thisComm, CT_FRIEND, iOwnerBit, fromChar, iSpeaker, 0, 10000, COMM_NONE, VID_BLANK, CID_BLANK, FLOW_CHECK_NONE, COMM_FLAG_CALL_ADD_TEMP_CONTACT | COMM_FLAG_DONT_SAVE) SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].iBit, PROPERTY_BIT_SENT_EMAIL) ENDIF ENDIF ELSE SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].iBit, PROPERTY_BIT_SENT_EMAIL) ENDIF ENDIF ENDPROC // property specific stuff on unavailability PROC DO_PROPERTY_SPECIFIC_UNAVAILABLE_ACTIONS(PROPERTY_ENUM thisProperty) SWITCH thisProperty // tonya text to see if CASE PROPERTY_TOWING_IMPOUND IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_OFFERED_TOWING_IMPOUND) IF GET_MISSION_COMPLETE_STATE(SP_MISSION_TREVOR_3) AND IS_THIS_RANDOM_CHARACTER_MISSION_COMPLETED(RC_TONYA_5) IF NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_PROPERTY_PURCHASE_COORDS(PROPERTY_TOWING_IMPOUND), <<300,300,300>>, FALSE, FALSE) IF REGISTER_CALL_FROM_CHARACTER_TO_PLAYER(CALL_PROP_TOWING, CT_FRIEND, BIT_FRANKLIN, CHAR_TOW_TONYA, 3, 0, 10000) SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_OFFERED_TOWING_IMPOUND) ENDIF /* IF REGISTER_CALL_FROM_CHARACTER_TO_PLAYER( ePropertyCallID, eYesReponse, eNoReponse, CT_FRIEND, GET_CURRENT_PLAYER_PED_BIT(), GET_CONTACT_CHARACTER_FOR_PROPERTY(g_PropertySystemData.currentPropertyManagementProperty), 3, 0, 10000, COMM_NONE, VID_BLANK, CID_BLANK, FLOW_CHECK_NONE, COMM_FLAG_CALL_ADD_TEMP_CONTACT | COMM_FLAG_DONT_SAVE) g_PropertySystemData.sManagementCommsID = ePropertyCallID CDEBUG1LN(DEBUG_PROPERTY, "Call registered, waiting on call respond") CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RECEIVED_CALL) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_TEXT_VIEW) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) bSetPending = TRUE ENDIF */ /* IF REGISTER_TEXT_MESSAGE_FROM_CHARACTER_TO_PLAYER( TEXT_PROP_UNAV_TOWING, CT_FRIEND, BIT_FRANKLIN, CHAR_TOW_TONYA, 0) ENDIF */ ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDPROC // check to see if a property available and blip if so PROC UPDATE_PROPERTY_AVAILABILITY(PROPERTY_ENUM thisProperty) IF thisProperty <> PROPERTY_STRIP_CLUB IF g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner = NO_CHARACTER IF IS_PROPERTY_AVAILABLE(thisProperty) IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_AVAILABLE_FOR_SALE) SET_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_AVAILABLE_FOR_SALE) ENDIF BLIP_PROPERTY(thisProperty, TRUE) ELSE DO_PROPERTY_SPECIFIC_UNAVAILABLE_ACTIONS(thisProperty) BLIP_PROPERTY(thisProperty, FALSE) IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_AVAILABLE_FOR_SALE) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_AVAILABLE_FOR_SALE) ENDIF ENDIF ELSE DO_PROPERTY_SPECIFIC_AVAILABLE_ACTIONS(thisProperty) BLIP_PROPERTY(thisProperty, TRUE) ENDIF ENDIF ENDPROC // get the text to display on success splash FUNC STRING GET_PROPERTY_SUCCESS_SPLASH_STRING(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iThisVariation) SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY IF thisProperty = PROPERTY_WEED_SHOP RETURN "PROPR_SUC_WEED" ELSE RETURN "PROPR_SUC_BOOD" ENDIF BREAK CASE PROPERTY_MANAGEMENT_MISSION_DEFEND RETURN "PROPR_SUC_SCRD" BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN SWITCH CONVERT_INT_TO_RECOVER_STOLEN_VARIATION(thisProperty, iThisVariation) CASE RECOVER_STOLEN_MISSION_VARIATION_TAKINGS IF thisProperty = PROPERTY_CINEMA_VINEWOOD OR thisProperty = PROPERTY_CINEMA_MORNINGWOOD OR thisProperty = PROPERTY_CINEMA_DOWNTOWN RETURN "PROPR_SUC_CITR" ELSE RETURN "PROPR_SUC_BATR" ENDIF BREAK // CASE RECOVER_STOLEN_MISSION_VARIATION_FILM // RETURN "PROPR_SUC_FIRR" // BREAK CASE RECOVER_STOLEN_MISSION_VARIATION_PAP RETURN "PROPR_SUC_PHOR" BREAK ENDSWITCH BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK RETURN "PROPR_SUC_BARD" BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION RETURN "PROPR_SUC_CPRO" BREAK ENDSWITCH RETURN "error" ENDFUNC // handle 100% PROC UPDATE_PROPERTY_100_PERCENT_STATUS() INT i INT iCount = 0 REPEAT COUNT_OF(PROPERTY_ENUM) i IF INT_TO_ENUM(PROPERTY_ENUM, i) <> PROPERTY_STRIP_CLUB IF g_savedGlobals.sPropertyData.propertyOwnershipData[i].charOwner <> NO_CHARACTER iCount++ ENDIF ENDIF ENDREPEAT PRINTSTRING("property purchase count = ") PRINTINT(iCount) PRINTNL() IF iCount >= 5 REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_PRPTY) PRINTSTRING("set property 100% completion") PRINTNL() ENDIF IF iCount >= COUNT_OF(PROPERTY_ENUM) - 1 REQUEST_SYSTEM_ACTIVITY_TYPE_PURCHASED_ALL_PROPERTIES() // 1943758 - feed IF FACEBOOK_CAN_POST_TO_FACEBOOK() FACEBOOK_POST_COMPLETED_MILESTONE(FACEBOOK_MILESTONE_PROPERTIES) SHOW_FACEBOOK_MILESTONE_FEED_MESSAGE(FACEBOOK_MILESTONE_PROPERTIES) PRINTSTRING("post property facebook milestone") PRINTNL() ELSE PRINTSTRING("did not post property facebook milestone as turned off") PRINTNL() ENDIF ENDIF ENDPROC // handle buy property PROC UPDATE_PROPERTY_PURCHASE(BOOL bCanPurchase) BOOL bShouldDisplayPurchaseHelp = FALSE PROPERTY_ENUM tickProperty = INT_TO_ENUM(PROPERTY_ENUM, g_PropertySystemData.iTick) IF bCanPurchase IF g_savedGlobals.sPropertyData.propertyOwnershipData[tickProperty].charOwner = NO_CHARACTER IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iPropertyBit[tickProperty], PROPERTY_UNSAVED_BIT_AVAILABLE_FOR_SALE) //IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_PROPERTY_PURCHASE_COORDS(thisProperty), <>, FALSE, FALSE) IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_PROPERTY_PURCHASE_COORDS(tickProperty)) < LONG_RANGE_PURCHASE_DISTANCE_SQUARED SET_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[tickProperty], PROPERTY_UNSAVED_BIT_RUN_LOCATE_CHECK) HINT_SCRIPT_AUDIO_BANK("HUD_PROPERTY") ELSE CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[tickProperty], PROPERTY_UNSAVED_BIT_RUN_LOCATE_CHECK) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[tickProperty], PROPERTY_UNSAVED_BIT_CREATED_FOR_SALE_SIGN) ENDIF ENDIF ENDIF ELSE CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[tickProperty], PROPERTY_UNSAVED_BIT_RUN_LOCATE_CHECK) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[tickProperty], PROPERTY_UNSAVED_BIT_CREATED_FOR_SALE_SIGN) ENDIF INT i REPEAT COUNT_OF(PROPERTY_ENUM) i PROPERTY_ENUM thisProperty = INT_TO_ENUM(PROPERTY_ENUM, i) IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_RUN_LOCATE_CHECK) // create for sale sign IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_CREATED_FOR_SALE_SIGN) IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_PROPERTY_PURCHASE_COORDS(thisProperty)) < LONG_RANGE_PURCHASE_DISTANCE_SQUARED IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SUPPRESS_FOR_SALE_SIGNS) SWITCH g_PropertySystemData.createForSaleSignState CASE CREATE_FOR_SALE_SIGN_STATE_NOT_STARTED REQUEST_MODEL(GET_PROPERTY_FOR_SALE_SIGN_MODEL()) g_PropertySystemData.createForSaleSignState = CREATE_FOR_SALE_SIGN_STATE_LOADING_MODEL BREAK CASE CREATE_FOR_SALE_SIGN_STATE_LOADING_MODEL IF HAS_MODEL_LOADED(GET_PROPERTY_FOR_SALE_SIGN_MODEL()) g_PropertySystemData.createForSaleSignState = CREATE_FOR_SALE_SIGN_STATE_DONE ENDIF BREAK CASE CREATE_FOR_SALE_SIGN_STATE_DONE INT j INT iFreeSignSlot iFreeSignSlot = -1 REPEAT NUMBER_PROPERTY_FOR_SALE_SIGNS j IF NOT DOES_ENTITY_EXIST(g_PropertySystemData.signObject[j]) iFreeSignSlot = j ENDIF ENDREPEAT IF iFreeSignSlot >= 0 g_PropertySystemData.signObject[iFreeSignSlot] = CREATE_OBJECT(GET_PROPERTY_FOR_SALE_SIGN_MODEL(), GET_PROPERTY_PURCHASE_COORDS(thisProperty)) SET_ENTITY_HEADING(g_PropertySystemData.signObject[iFreeSignSlot], GET_PROPERTY_PURCHASE_HEADING(thisProperty)) RELEASE_PROPERTY_FOR_SALE_SIGN_MODEL() SET_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_CREATED_FOR_SALE_SIGN) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF // load in assets IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_TRAFFICKING_ASSETS) IF thisProperty = PROPERTY_ARMS_TRAFFICKING IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_PROPERTY_PURCHASE_COORDS(thisProperty), <<50, 50, 50>>) REQUEST_CUTSCENE("oscar_mcs_1") SET_SRL_FORCE_PRESTREAM(SRL_PRESTREAM_FORCE_OFF) REQUEST_MODEL(CUBAN800) REQUEST_MODEL(DUNE) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_TRAFFICKING_ASSETS) ENDIF ELSE CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_TRAFFICKING_ASSETS) ENDIF ELSE IF thisProperty = PROPERTY_ARMS_TRAFFICKING IF NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_PROPERTY_PURCHASE_COORDS(thisProperty), <<60, 60, 60>>) RESET_PROPERTY_ASSET_STREAMING() ENDIF ENDIF ENDIF IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_TOWING_ASSETS) IF thisProperty = PROPERTY_TOWING_IMPOUND IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_PROPERTY_PURCHASE_COORDS(thisProperty), <<50, 50, 50>>) REQUEST_MODEL(TOWTRUCK) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_TOWING_ASSETS) ENDIF ELSE CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_TOWING_ASSETS) ENDIF ELSE IF thisProperty = PROPERTY_TOWING_IMPOUND IF NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_PROPERTY_PURCHASE_COORDS(thisProperty), <<60, 60, 60>>) RESET_PROPERTY_ASSET_STREAMING() ENDIF ENDIF ENDIF IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_GOLF_CLUB_ASSETS) IF thisProperty = PROPERTY_GOLF_CLUB IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_PROPERTY_PURCHASE_COORDS(thisProperty), <<20, 20, 20>>) g_PropertySystemData.streamVolume = STREAMVOL_CREATE_FRUSTUM(<<-1418.670288,50.412415,55.505150>>, CONVERT_ROTATION2_TO_DIRECTION_VECTOR(<<7.033136,-0.000000,-82.497063>>), 100, FLAG_MAPDATA) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_GOLF_CLUB_ASSETS) ENDIF ELSE CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_GOLF_CLUB_ASSETS) ENDIF ELSE IF thisProperty = PROPERTY_GOLF_CLUB IF NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_PROPERTY_PURCHASE_COORDS(thisProperty), <<25, 25, 25>>) RESET_PROPERTY_ASSET_STREAMING() ENDIF ENDIF ENDIF IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_PROPERTY_PURCHASE_COORDS(thisProperty), <>) AND GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0 AND bCanPurchase AND NOT IS_PLAYER_AT_PROPERTY_CANNOT_PURCHASE_COORDS(thisProperty) AND NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND NOT IS_PHONE_ONSCREEN() AND NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RUN_CUTSCENE) AND NOT IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_SELECT_WEAPON) AND NOT (Is_Player_Timetable_Scene_In_Progress() OR IS_PLAYER_SWITCH_IN_PROGRESS()) AND NOT IS_CUSTOM_MENU_ON_SCREEN() //Don't allow purchase while PI menu is up STRING sHelp SWITCH thisProperty CASE PROPERTY_ARMS_TRAFFICKING sHelp = "PROPR_PUR_TRAF" BREAK CASE PROPERTY_CAR_SCRAP_YARD sHelp = "PROPR_PUR_CSCR" BREAK CASE PROPERTY_WEED_SHOP sHelp = "PROPR_PUR_WEED" BREAK CASE PROPERTY_TAXI_LOT sHelp = "PROPR_PUR_TAXI" BREAK CASE PROPERTY_CAR_MOD_SHOP sHelp = "PROPR_PUR_CMSH" BREAK CASE PROPERTY_SONAR_COLLECTIONS sHelp = "PROPR_PUR_SOCO" BREAK CASE PROPERTY_TOWING_IMPOUND sHelp = "PROPR_PUR_TOWI" BREAK CASE PROPERTY_GOLF_CLUB sHelp = "PROPR_PUR_GOLF" BREAK CASE PROPERTY_CINEMA_VINEWOOD sHelp = "PROPR_PUR_CINV" BREAK CASE PROPERTY_CINEMA_DOWNTOWN sHelp = "PROPR_PUR_CIND" BREAK CASE PROPERTY_CINEMA_MORNINGWOOD sHelp = "PROPR_PUR_CINM" BREAK CASE PROPERTY_BAR_TEQUILALA sHelp = "PROPR_PUR_BARTE" BREAK CASE PROPERTY_BAR_PITCHERS sHelp = "PROPR_PUR_BARPI" BREAK CASE PROPERTY_BAR_HEN_HOUSE sHelp = "PROPR_PUR_BARHE" BREAK CASE PROPERTY_BAR_HOOKIES sHelp = "PROPR_PUR_BARHO" BREAK ENDSWITCH BOOL bAllowPurchase bAllowPurchase = FALSE IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_TRAFFICKING_ASSETS) bAllowPurchase = TRUE ELSE IF HAS_CUTSCENE_LOADED() AND HAS_MODEL_LOADED(CUBAN800) AND HAS_MODEL_LOADED(DUNE) bAllowPurchase = TRUE ENDIF ENDIF IF bAllowPurchase RESET_SHOP_HELP_DELAY() bShouldDisplayPurchaseHelp = TRUE BOOL bIsCorrectCharacter = FALSE enumCharacterList propertyCharacter = GET_CHARACTER_FOR_PROPERTY(thisProperty) IF (propertyCharacter = GET_CURRENT_PLAYER_PED_ENUM() OR propertyCharacter = NO_CHARACTER) AND NOT (IS_PROPERTY_BLOCKED_FOR_CHARACTER(thisProperty, GET_CURRENT_PLAYER_PED_ENUM())) bIsCorrectCharacter = TRUE ENDIF INT iPurchaseCost = GET_PROPERTY_PURCHASE_PRICE(thisProperty) IF bIsCorrectCharacter IF GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) >= iPurchaseCost IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_CONFIRM_PURCHASE) IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_PURCHASE_HELP) PRINT_HELP_FOREVER_WITH_STRING(sHelp, GET_PROPERTY_COST_STRING(thisProperty)) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_PURCHASE_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_NO_MONEY_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_CONFIRM_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_WRONG_CHAR_HELP) ENDIF ELSE IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_CONFIRM_HELP) PRINT_HELP_FOREVER_WITH_STRING("PROPR_PUR_CONF", GET_PROPERTY_COST_STRING(thisProperty)) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_CONFIRM_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_NO_MONEY_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_PURCHASE_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_WRONG_CHAR_HELP) ENDIF ENDIF ELSE IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_NO_MONEY_HELP) PRINT_HELP_FOREVER_WITH_STRING("PROPR_PUR_NOMO", GET_PROPERTY_COST_STRING(thisProperty)) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_PURCHASE_HELP) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_NO_MONEY_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_CONFIRM_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_WRONG_CHAR_HELP) ENDIF ENDIF ELSE IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_WRONG_CHAR_HELP) IF thisProperty = PROPERTY_BAR_HOOKIES PRINT_HELP_FOREVER("PROPR_PUR_OMAT") ELSE SWITCH propertyCharacter CASE CHAR_TREVOR PRINT_HELP_FOREVER("PROPR_PUR_OTRE") BREAK CASE CHAR_FRANKLIN PRINT_HELP_FOREVER("PROPR_PUR_OFRA") BREAK CASE CHAR_MICHAEL PRINT_HELP_FOREVER("PROPR_PUR_OMIC") BREAK ENDSWITCH ENDIF CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_PURCHASE_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_NO_MONEY_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_CONFIRM_HELP) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_WRONG_CHAR_HELP) ENDIF ENDIF g_PropertySystemData.handlePurchaseProperty = thisProperty SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_CONTEXT) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_TALK) IF IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_CONTEXT) IF GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) >= iPurchaseCost AND bIsCorrectCharacter IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_CONFIRM_PURCHASE) CLEAR_HELP() g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner = GET_CURRENT_PLAYER_PED_ENUM() STAT_SET_BOOL(GET_STAT_FOR_PROPERTY(thisProperty, PROPERTY_STAT_BOUGHT), TRUE) SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].iBit, PROPERTY_BIT_IS_NEW_PROPERTY) SET_NEXT_MANAGEMENT_EVENT_TIME_FOR_PROPERTY(thisProperty, PROPERTY_ACTION_PURCHASED_PROPERTY) SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].iBit, PROPERTY_BIT_SHOULD_RECEIVE_PAYMENT_THIS_WEEK) // special cases for some properties SWITCH thisProperty CASE PROPERTY_CAR_SCRAP_YARD g_savedGlobals.sPropertyData.iTotalCarsDestroyed = GET_TOTAL_CARS_DESTROYED() BREAK CASE PROPERTY_SONAR_COLLECTIONS g_PropertySystemData.ambientScriptProperty = thisProperty SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_LAUNCH_AMBIENT_SCRIPT) BREAK CASE PROPERTY_TOWING_IMPOUND CANCEL_COMMUNICATION(CALL_PROP_TOWING) g_PropertySystemData.ambientScriptProperty = thisProperty SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_LAUNCH_AMBIENT_SCRIPT) BREAK ENDSWITCH RUN_PROPERTY_PURCHASE_CODE_ID(thisProperty, TRUE) // delete for sale sign IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_REQUESTED_TRAFFICKING_ASSETS) RESET_FOR_SALE_SIGN_CREATE_STATE(TRUE) ENDIF // set 100% UPDATE_PROPERTY_100_PERCENT_STATUS() g_PropertySystemData.runCutsceneProperty = thisProperty CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_RUN_LOCATE_CHECK) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iPropertyBit[thisProperty], PROPERTY_UNSAVED_BIT_AVAILABLE_FOR_SALE) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SETUP_CUTSCENE) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RUN_CUTSCENE) ELSE SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_CONFIRM_PURCHASE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF thisProperty = g_PropertySystemData.handlePurchaseProperty IF NOT bShouldDisplayPurchaseHelp IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_PURCHASE_HELP) OR IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_NO_MONEY_HELP) OR IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_CONFIRM_HELP) OR IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_WRONG_CHAR_HELP) IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RUN_CUTSCENE) CLEAR_HELP() CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_PURCHASE_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_NO_MONEY_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_CONFIRM_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAYED_WRONG_CHAR_HELP) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_CONFIRM_PURCHASE) ENDIF ENDIF ENDIF ENDIF ENDREPEAT ENDPROC PROC PROPERTY_PAY_INCOME(PROPERTY_ENUM thisProperty, INT iIncome) CREDIT_BANK_ACCOUNT(g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner, GET_BANK_ACCOUNT_SOURCE_FOR_PROPERTY(thisProperty), iIncome) // increment any necessary globals SWITCH thisProperty CASE PROPERTY_SONAR_COLLECTIONS g_savedGlobals.sPropertyData.iCashFromSonarThisWeek += iIncome BREAK CASE PROPERTY_ARMS_TRAFFICKING g_savedGlobals.sPropertyData.iCashFromTraffickingThisWeek += iIncome BREAK CASE PROPERTY_TOWING_IMPOUND g_savedGlobals.sPropertyData.iCashFromTowingThisWeek += iIncome BREAK ENDSWITCH // set the stat INT iIncomeStat STAT_GET_INT(GET_STAT_FOR_PROPERTY(thisProperty, PROPERTY_STAT_EARNINGS), iIncomeStat) iIncomeStat += iIncome STAT_SET_INT(GET_STAT_FOR_PROPERTY(thisProperty, PROPERTY_STAT_EARNINGS), iIncomeStat) ENDPROC // handle income for 1 property FUNC enumCharacterList UPDATE_PROPERTY_INCOME(PROPERTY_ENUM thisProperty, BOOL bResetShouldReceiveThisWeek) enumCharacterList paidChar = NO_CHARACTER IF g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner <> NO_CHARACTER // pay the cash INT iIncome = GET_THIS_WEEKS_INCOME_FOR_PROPERTY(thisProperty) // get the income IF iIncome > 0 IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].iBit, PROPERTY_BIT_SHOULD_RECEIVE_PAYMENT_THIS_WEEK) PROPERTY_PAY_INCOME(thisProperty, iIncome) paidChar = g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner ELSE iIncome = 0 ENDIF ENDIF // update this-week counts SWITCH thisProperty CASE PROPERTY_SONAR_COLLECTIONS iIncome = g_savedGlobals.sPropertyData.iCashFromSonarThisWeek g_savedGlobals.sPropertyData.iCashFromSonarThisWeek = 0 IF iIncome > 0 paidChar = g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner ENDIF BREAK CASE PROPERTY_ARMS_TRAFFICKING iIncome = g_savedGlobals.sPropertyData.iCashFromTraffickingThisWeek g_savedGlobals.sPropertyData.iCashFromTraffickingThisWeek = 0 IF iIncome > 0 paidChar = g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner ENDIF BREAK CASE PROPERTY_TOWING_IMPOUND iIncome = g_savedGlobals.sPropertyData.iCashFromTowingThisWeek g_savedGlobals.sPropertyData.iCashFromTowingThisWeek = 0 IF iIncome > 0 paidChar = g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner ENDIF BREAK ENDSWITCH IF bResetShouldReceiveThisWeek SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].iBit, PROPERTY_BIT_SHOULD_RECEIVE_PAYMENT_THIS_WEEK) ENDIF g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].iLastIncome = iIncome ENDIF RETURN paidChar ENDFUNC // handle income for all properties PROC UPDATE_ALL_PROPERTIES_INCOME() IF GET_GAME_TIMER() >= g_PropertySystemData.iLastIncomeCheckTime + 3000 // check to see if it's time to get paid DAY_OF_WEEK thisDay = GET_CLOCK_DAY_OF_WEEK() INT i IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_INCOME_PAID_THIS_WEEK) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND NOT IS_REPEAT_PLAY_ACTIVE() IF thisDay = MONDAY BOOL bMichaelPaid = FALSE BOOL bTrevorPaid = FALSE BOOL bFranklinPaid = FALSE REPEAT COUNT_OF(PROPERTY_ENUM) i enumCharacterList paidChar = UPDATE_PROPERTY_INCOME(INT_TO_ENUM(PROPERTY_ENUM, i), TRUE) IF paidChar = CHAR_MICHAEL bMichaelPaid = TRUE ELIF paidChar = CHAR_TREVOR bTrevorPaid = TRUE ELIF paidChar = CHAR_FRANKLIN bFranklinPaid = TRUE ENDIF ENDREPEAT // send email IF bMichaelPaid FIRE_EMAIL_INTO_DYNAMIC_THREAD(DYNAMIC_THREAD_PROPERTIES_FINANCE_REPORT_MIKE, PROPMAN_TO_MIKE, FALSE) ENDIF IF bTrevorPaid FIRE_EMAIL_INTO_DYNAMIC_THREAD(DYNAMIC_THREAD_PROPERTIES_FINANCE_REPORT_TREVOR, PROPMAN_TO_TREV, FALSE) ENDIF IF bFranklinPaid FIRE_EMAIL_INTO_DYNAMIC_THREAD(DYNAMIC_THREAD_PROPERTIES_FINANCE_REPORT_FRANKLIN, PROPMAN_TO_FRANK, FALSE) ENDIF SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_INCOME_PAID_THIS_WEEK) ENDIF ENDIF ELSE IF thisDay <> MONDAY CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_INCOME_PAID_THIS_WEEK) ENDIF ENDIF g_PropertySystemData.iLastIncomeCheckTime = GET_GAME_TIMER() ENDIF ENDPROC // is triggered by call rather than text FUNC BOOL IS_PROPERTY_MANAGEMENT_EVENT_TRIGGERED_BY_PHONE_CALL(PROPERTY_MANAGEMENT_MISSION_ENUM thisMission) SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_TAXI RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC // are we at the trigger to launch event script FUNC BOOL IS_PLAYER_AT_MANAGEMENT_EVENT_TRIGGER(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iThisVariation) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_MANAGEMENT_EVENT_COORD(thisProperty, thisMission, iThisVariation), GET_TRIGGER_RANGE_FOR_MANAGEMENT_EVENT(thisProperty, thisMission, iThisVariation)) RETURN TRUE ENDIF RETURN FALSE ENDFUNC // should the property mission force start FUNC BOOL SHOULD_MANAGEMENT_EVENT_FORCE_START(PROPERTY_ENUM thisProperty, PROPERTY_MANAGEMENT_MISSION_ENUM thisMission, INT iThisVariation) SWITCH thisMission CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN RETURN SHOULD_RECOVER_STOLEN_EVENT_FORCE_START(thisProperty, CONVERT_INT_TO_RECOVER_STOLEN_VARIATION(thisProperty, iThisVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK RETURN SHOULD_GANG_ATTACK_EVENT_FORCE_START(thisProperty, CONVERT_INT_TO_GANG_ATTACK_VARIATION(thisProperty, iThisVariation)) BREAK ENDSWITCH RETURN FALSE ENDFUNC // reset back to waiting state PROC RESET_PROPERTY_MANAGEMENT_TO_WAITING() IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DO_RESET_TO_WAITING) IF DOES_BLIP_EXIST(g_PropertySystemData.propertyManagementBlip) REMOVE_BLIP(g_PropertySystemData.propertyManagementBlip) ENDIF IF IS_COMMUNICATION_REGISTERED(g_PropertySystemData.sManagementCommsID) CANCEL_COMMUNICATION(g_PropertySystemData.sManagementCommsID) ENDIF IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SUPPRESS_AIRPORT_RESTRICTED) RELEASE_SUPPRESSED_RESTRICTED_AREA_WANTED_LEVEL(AC_AIRPORT_AIRSIDE, TRUE) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SUPPRESS_AIRPORT_RESTRICTED) ENDIF g_PropertySystemData.iManagementEventEndTime = GET_GAME_TIMER() g_PropertySystemData.propertyManagementState = PROPERTY_MANAGEMENT_STATE_WAITING CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DO_RESET_TO_WAITING) ENDIF ENDPROC // deal with the result of a management mission PROC HANDLE_PROPERTY_MANAGEMENT_STATE_RESULT(PROPERTY_MANAGEMENT_RESULT_ENUM thisResult) SWITCH thisResult CASE PROPERTY_MANAGEMENT_RESULT_NONE CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_FAIL_TEXT) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_PASS_TEXT) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_MISSION_PASS) BREAK CASE PROPERTY_MANAGEMENT_RESULT_SUCCESS SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_FAIL_TEXT) IF g_PropertySystemData.currentPropertyManagementProperty <> PROPERTY_TAXI_LOT SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_MISSION_PASS) ENDIF IF g_PropertySystemData.currentPropertyManagementMission = PROPERTY_MANAGEMENT_MISSION_DEFEND OR g_PropertySystemData.currentPropertyManagementMission = PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION OR g_PropertySystemData.currentPropertyManagementMission = PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_PASS_TEXT) ELSE CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_PASS_TEXT) ENDIF MAKE_AUTOSAVE_REQUEST() BREAK CASE PROPERTY_MANAGEMENT_RESULT_FAILURE CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.propertyOwnershipData[g_PropertySystemData.currentPropertyManagementProperty].iBit, PROPERTY_BIT_SHOULD_RECEIVE_PAYMENT_THIS_WEEK) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_PASS_TEXT) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_FAIL_TEXT) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_MISSION_PASS) BREAK ENDSWITCH CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_PURCHASED) ENDPROC // create the management event PROC HANDLE_CREATE_MANAGEMENT_EVENT_ENTITIES() SWITCH g_PropertySystemData.createManagementEventState CASE CREATE_MANAGEMENT_EVENT_STATE_NOT_STARTED SWITCH g_PropertySystemData.currentPropertyManagementMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY REQUEST_DELIVERY_EVENT_ASSETS(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_DELIVERY_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION REQUEST_PLANE_PROMOTION_EVENT_ASSETS() BREAK CASE PROPERTY_MANAGEMENT_MISSION_TAXI REQUEST_TAXI_EVENT_ASSETS(CONVERT_INT_TO_TAXI_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN REQUEST_RECOVER_STOLEN_EVENT_ASSETS(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_RECOVER_STOLEN_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK REQUEST_GANG_ATTACK_EVENT_ASSETS(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_GANG_ATTACK_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK ENDSWITCH g_PropertySystemData.createManagementEventState = CREATE_MANAGEMENT_EVENT_STATE_LOADING_ASSETS BREAK CASE CREATE_MANAGEMENT_EVENT_STATE_LOADING_ASSETS BOOL bLoaded bLoaded = TRUE SWITCH g_PropertySystemData.currentPropertyManagementMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY bLoaded = HAVE_DELIVERY_EVENT_ASSETS_LOADED(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_DELIVERY_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION bLoaded = HAVE_PLANE_PROMOTION_EVENT_ASSETS_LOADED() BREAK CASE PROPERTY_MANAGEMENT_MISSION_TAXI bLoaded = HAVE_TAXI_EVENT_ASSETS_LOADED(CONVERT_INT_TO_TAXI_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN bLoaded = HAVE_RECOVER_STOLEN_EVENT_ASSETS_LOADED(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_RECOVER_STOLEN_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK bLoaded = HAVE_GANG_ATTACK_EVENT_ASSETS_LOADED(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_GANG_ATTACK_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK ENDSWITCH IF bLoaded SWITCH g_PropertySystemData.currentPropertyManagementMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY CREATE_DELIVERY_EVENT_ENTITIES(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_DELIVERY_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION CREATE_PLANE_PROMOTION_EVENT_ENTITIES() BREAK CASE PROPERTY_MANAGEMENT_MISSION_TAXI CREATE_TAXI_EVENT_ENTITIES(CONVERT_INT_TO_TAXI_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN CREATE_RECOVER_STOLEN_EVENT_ENTITIES(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_RECOVER_STOLEN_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK CREATE_GANG_ATTACK_EVENT_ENTITIES(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_GANG_ATTACK_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK ENDSWITCH g_PropertySystemData.createManagementEventState = CREATE_MANAGEMENT_EVENT_STATE_DONE ENDIF BREAK CASE CREATE_MANAGEMENT_EVENT_STATE_DONE BREAK ENDSWITCH ENDPROC // update the management event in the world FUNC BOOL UPDATE_MANAGEMENT_EVENT_IN_WORLD() IF g_PropertySystemData.createManagementEventState = CREATE_MANAGEMENT_EVENT_STATE_DONE SWITCH g_PropertySystemData.currentPropertyManagementMission CASE PROPERTY_MANAGEMENT_MISSION_DELIVERY RETURN UPDATE_DELIVERY_EVENT_IN_WORLD(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_DELIVERY_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION RETURN UPDATE_PLANE_PROMOTION_EVENT_IN_WORLD() BREAK CASE PROPERTY_MANAGEMENT_MISSION_TAXI RETURN UPDATE_TAXI_EVENT_IN_WORLD(CONVERT_INT_TO_TAXI_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_RECOVER_STOLEN UPDATE_RECOVER_STOLEN_EVENT_IN_WORLD(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_RECOVER_STOLEN_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK CASE PROPERTY_MANAGEMENT_MISSION_GANG_ATTACK UPDATE_GANG_ATTACK_EVENT_IN_WORLD(g_PropertySystemData.currentPropertyManagementProperty, CONVERT_INT_TO_GANG_ATTACK_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) BREAK ENDSWITCH ENDIF RETURN TRUE ENDFUNC // set player on management mission PROC SET_PLAYER_ON_MANAGEMENT_MISSION(BOOL bOnMission) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WillFlyThroughWindscreen, NOT bOnMission) SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WillTakeDamageWhenVehicleCrashes, NOT bOnMission) ENDIF ENDPROC // is far away enough to send pass message? FUNC BOOL IS_PLAYER_FAR_ENOUGH_TO_SEND_PASS_MESSAGE() IF g_PropertySystemData.currentPropertyManagementMission = PROPERTY_MANAGEMENT_MISSION_DELIVERY IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_PROPERTY_PURCHASE_COORDS(g_PropertySystemData.currentPropertyManagementProperty), <<120,120,120>>, FALSE, FALSE) RETURN FALSE ENDIF ENDIF RETURN TRUE ENDFUNC // handle management events PROC UPDATE_PROPERTY_MANAGEMENT(BOOL bCanStartAgainstMission) SWITCH g_PropertySystemData.propertyManagementState CASE PROPERTY_MANAGEMENT_STATE_WAITING // here we are waiting for the next opportunity to notify about a management event opening // display pass screen SWITCH g_PropertySystemData.missionPassedScreenState CASE PROPERTY_MISSION_PASSED_SCREEN_STATE_NOT_STARTED IF bCanStartAgainstMission IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_MISSION_PASS) OR IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_PURCHASED) g_PropertySystemData.passedScaleform = REQUEST_SCALEFORM_MOVIE("MIDSIZED_MESSAGE") g_PropertySystemData.missionPassedScreenState = PROPERTY_MISSION_PASSED_SCREEN_STATE_LOADING SET_RESULT_SCREEN_DISPLAYING_STATE(TRUE) ENDIF ENDIF BREAK CASE PROPERTY_MISSION_PASSED_SCREEN_STATE_LOADING IF HAS_SCALEFORM_MOVIE_LOADED(g_PropertySystemData.passedScaleform) AND (GET_GAME_TIMER() >= g_PropertySystemData.iManagementEventEndTime + 1500 OR IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_PURCHASED)) IF bCanStartAgainstMission BEGIN_SCALEFORM_MOVIE_METHOD(g_PropertySystemData.passedScaleform, "SHOW_SHARD_MIDSIZED_MESSAGE") IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_MISSION_PASS) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_PROPERTY_SUCCESS_SPLASH_STRING(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.currentPropertyManagementMission, g_PropertySystemData.iCurrentPropertyManagementVariation)) IF g_PropertySystemData.currentPropertyManagementProperty <> PROPERTY_CAR_SCRAP_YARD AND g_PropertySystemData.currentPropertyManagementProperty <> PROPERTY_WEED_SHOP SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_PROPERTY_NAME_STRING(g_PropertySystemData.currentPropertyManagementProperty)) ENDIF ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PROPR_PURCHASED") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_PROPERTY_NAME_STRING(g_PropertySystemData.runCutsceneProperty)) ENDIF END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_MISSION_PASS) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_PLAYED_PASS_SOUND) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_PLAYED_BOUGHT_SOUND) ELSE CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_PLAYED_BOUGHT_SOUND) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_PLAYED_PASS_SOUND) ENDIF ENDIF CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_MISSION_PASS) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DISPLAY_PURCHASED) g_PropertySystemData.missionPassedScreenState = PROPERTY_MISSION_PASSED_SCREEN_STATE_DISPLAYING ENDIF BREAK CASE PROPERTY_MISSION_PASSED_SCREEN_STATE_DISPLAYING IF bCanStartAgainstMission IF HAS_SCALEFORM_MOVIE_LOADED(g_PropertySystemData.passedScaleform) IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_PLAYED_PASS_SOUND) PLAY_SOUND_FRONTEND(-1, "UNDER_THE_BRIDGE", "HUD_AWARDS") SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_PLAYED_PASS_SOUND) ELIF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_PLAYED_BOUGHT_SOUND) PLAY_SOUND_FRONTEND(-1, "UNDER_THE_BRIDGE", "HUD_AWARDS") SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_PLAYED_BOUGHT_SOUND) ENDIF DRAW_SCALEFORM_MOVIE_FULLSCREEN(g_PropertySystemData.passedScaleform, 255, 255, 255, 255) ENDIF ENDIF IF GET_GAME_TIMER() >= g_PropertySystemData.iManagementEventEndTime + 11000 BEGIN_SCALEFORM_MOVIE_METHOD(g_PropertySystemData.passedScaleform, "SHARD_ANIM_OUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(HUD_COLOUR_WHITE)) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.33) END_SCALEFORM_MOVIE_METHOD() g_PropertySystemData.missionPassedScreenState = PROPERTY_MISSION_PASSED_SCREEN_STATE_CLEANUP ENDIF IF IS_PLAYER_SWITCH_IN_PROGRESS() OR NOT bCanStartAgainstMission CLEANUP_MISSION_PASSED_SCREEN() ENDIF BREAK CASE PROPERTY_MISSION_PASSED_SCREEN_STATE_CLEANUP IF bCanStartAgainstMission IF HAS_SCALEFORM_MOVIE_LOADED(g_PropertySystemData.passedScaleform) DRAW_SCALEFORM_MOVIE_FULLSCREEN(g_PropertySystemData.passedScaleform, 255, 255, 255, 255) ENDIF ENDIF IF GET_GAME_TIMER() >= g_PropertySystemData.iManagementEventEndTime + 11500 OR IS_PLAYER_SWITCH_IN_PROGRESS() OR NOT bCanStartAgainstMission CLEANUP_MISSION_PASSED_SCREEN() ENDIF BREAK ENDSWITCH IF bCanStartAgainstMission // send fail message IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_FAIL_TEXT) //CDEBUG1LN(DEBUG_PROPERTY, "Want to send fail message") IF GET_GAME_TIMER() >= g_PropertySystemData.iManagementEventEndTime + 5000 //CDEBUG1LN(DEBUG_PROPERTY, "Fail message time") CC_TextPart part1 CC_TextPart part2 GET_PROPERTY_MANAGEMENT_MISSION_FAIL_TEXT_PARTS(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.currentPropertyManagementMission, g_PropertySystemData.iCurrentPropertyManagementVariation, part1, part2) IF REGISTER_COMPOSITE_TEXT_MESSAGE_FROM_CHARACTER_TO_PLAYER( TEXT_PROPERTY, part1, part2, CT_FRIEND, GET_PLAYER_PED_BIT(g_savedGlobals.sPropertyData.propertyOwnershipData[g_PropertySystemData.currentPropertyManagementProperty].charOwner),//GET_CURRENT_PLAYER_PED_BIT(), GET_CONTACT_CHARACTER_FOR_PROPERTY(g_PropertySystemData.currentPropertyManagementProperty), 0, DEFAULT, DEFAULT, DEFAULT, DEFAULT, COMM_FLAG_DONT_SAVE, CANNOT_CALL_SENDER) g_PropertySystemData.failReasonOverride = PROPERTY_MISSION_FAIL_REASON_OVERRIDE_NONE CDEBUG1LN(DEBUG_PROPERTY, "Fail message successfully sent") CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_FAIL_TEXT) ENDIF ENDIF ENDIF // send pass message IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_PASS_TEXT) //CDEBUG1LN(DEBUG_PROPERTY, "Want to send pass message") IF GET_GAME_TIMER() >= g_PropertySystemData.iManagementEventEndTime + 3000 AND IS_PLAYER_FAR_ENOUGH_TO_SEND_PASS_MESSAGE() //CDEBUG1LN(DEBUG_PROPERTY, "Pass message time") CC_TextPart part1 CC_TextPart part2 GET_PROPERTY_MANAGEMENT_MISSION_PASS_TEXT_PARTS(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.currentPropertyManagementMission, g_PropertySystemData.iCurrentPropertyManagementVariation, part1, part2) IF REGISTER_COMPOSITE_TEXT_MESSAGE_FROM_CHARACTER_TO_PLAYER( TEXT_PROPERTY, part1, part2, CT_FRIEND, GET_PLAYER_PED_BIT(g_savedGlobals.sPropertyData.propertyOwnershipData[g_PropertySystemData.currentPropertyManagementProperty].charOwner),//GET_CURRENT_PLAYER_PED_BIT(), GET_CONTACT_CHARACTER_FOR_PROPERTY(g_PropertySystemData.currentPropertyManagementProperty), 0, DEFAULT, DEFAULT, DEFAULT, DEFAULT, COMM_FLAG_DONT_SAVE, CANNOT_CALL_SENDER) g_PropertySystemData.passReasonOverride = PROPERTY_MISSION_PASS_REASON_OVERRIDE_NONE CDEBUG1LN(DEBUG_PROPERTY, "Pass message successfully sent") CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SEND_PASS_TEXT) // UPDATE_PROPERTY_INCOME(g_PropertySystemData.currentPropertyManagementProperty, FALSE) // CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.propertyOwnershipData[g_PropertySystemData.currentPropertyManagementProperty].iBit, PROPERTY_BIT_SHOULD_RECEIVE_PAYMENT_THIS_WEEK) ENDIF ENDIF ENDIF ENDIF // look for an event to launch IF bCanStartAgainstMission PROPERTY_ENUM thisTickProperty thisTickProperty = INT_TO_ENUM(PROPERTY_ENUM, g_PropertySystemData.iTick) IF g_savedGlobals.sPropertyData.propertyOwnershipData[thisTickProperty].charOwner = GET_CURRENT_PLAYER_PED_ENUM() AND IS_PLAYER_PED_PLAYABLE(GET_CURRENT_PLAYER_PED_ENUM()) IF IS_NOW_AFTER_TIMEOFDAY(g_savedGlobals.sPropertyData.propertyOwnershipData[thisTickProperty].nextManagementEventTime) //AND GET_GAME_TIMER() >= g_iGlobalWaitTime BOOL bTimeToLaunch bTimeToLaunch = FALSE IF IS_NOW_AFTER_TIMEOFDAY(g_savedGlobals.sPropertyData.nextCheckManagementEventTime) CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_DONE_EVENT_FOR_NEW_PROPERTY) bTimeToLaunch = TRUE ENDIF IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.propertyOwnershipData[g_PropertySystemData.currentPropertyManagementProperty].iBit, PROPERTY_BIT_IS_NEW_PROPERTY) AND NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_DONE_EVENT_FOR_NEW_PROPERTY) bTimeToLaunch = TRUE ENDIF IF bTimeToLaunch PROPERTY_MANAGEMENT_MISSION_ENUM potentialManagementMission INT iPotentialManagementVariation GET_PROPERTY_MANAGEMENT_MISSION_FROM_PROPERTY(thisTickProperty, potentialManagementMission, iPotentialManagementVariation) IF potentialManagementMission <> PROPERTY_MANAGEMENT_MISSION_NONE //AND GET_GAME_TIMER() >= g_iCharWaitTime[GET_CONTACT_CHARACTER_FOR_PROPERTY(thisTickProperty)] CDEBUG1LN(DEBUG_PROPERTY, "Obtained Property Management Mission From Property") g_PropertySystemData.currentPropertyManagementProperty = thisTickProperty g_PropertySystemData.currentPropertyManagementMission = potentialManagementMission g_PropertySystemData.iCurrentPropertyManagementVariation = iPotentialManagementVariation g_PropertySystemData.failReasonOverride = PROPERTY_MISSION_FAIL_REASON_OVERRIDE_NONE g_PropertySystemData.passReasonOverride = PROPERTY_MISSION_PASS_REASON_OVERRIDE_NONE SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DO_RESET_TO_WAITING) g_PropertySystemData.propertyManagementState = PROPERTY_MANAGEMENT_STATE_GIVE_NOTIFICATION //ELSE //CDEBUG1LN(DEBUG_PROPERTY, "Failed to find a management mission") ENDIF ENDIF ENDIF ENDIF ELSE IF GET_GAME_TIMER() >= g_PropertySystemData.iNextPushEventTime RESET_PROPERTY_MANAGEMENT_TO_WAITING() SET_NEXT_PROPERTY_MANAGEMENT_EVENT_TIME(PROPERTY_ACTION_DELAY_FOR_MISSION) g_PropertySystemData.iNextPushEventTime = GET_GAME_TIMER() + 5000 ENDIF ENDIF BREAK CASE PROPERTY_MANAGEMENT_STATE_GIVE_NOTIFICATION // text the player that the event has opened BOOL bSetPending bSetPending = FALSE IF bCanStartAgainstMission IF IS_PROPERTY_MANAGEMENT_EVENT_TRIGGERED_BY_PHONE_CALL(g_PropertySystemData.currentPropertyManagementMission) CC_CommID ePropertyCallID CC_QuestionCallResponse eYesReponse CC_QuestionCallResponse eNoReponse ePropertyCallID = GET_PROPERTY_MANAGEMENT_CALL(CONVERT_INT_TO_TAXI_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) eYesReponse = GET_PROPERTY_MANAGEMENT_POSITIVE_RESPONSE(CONVERT_INT_TO_TAXI_VARIATION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.iCurrentPropertyManagementVariation)) eNoReponse = GET_PROPERTY_MANAGEMENT_NEGATIVE_RESPONSE(g_PropertySystemData.currentPropertyManagementProperty) INT iRequeueTime iRequeueTime = 10000 #IF IS_DEBUG_BUILD IF g_PropertySystemData.bDebugRequeue iRequeueTime = 500 ENDIF #ENDIF IF REGISTER_CALL_WITH_QUESTION_FROM_CHARACTER_TO_PLAYER( ePropertyCallID, eYesReponse, eNoReponse, CT_FRIEND, GET_CURRENT_PLAYER_PED_BIT(), GET_CONTACT_CHARACTER_FOR_PROPERTY(g_PropertySystemData.currentPropertyManagementProperty), 8, 0, iRequeueTime, COMM_NONE, VID_BLANK, CID_BLANK, FLOW_CHECK_NONE, COMM_FLAG_CALL_ADD_TEMP_CONTACT | COMM_FLAG_DONT_SAVE) g_PropertySystemData.sManagementCommsID = ePropertyCallID CDEBUG1LN(DEBUG_PROPERTY, "Call registered, waiting on call respond") CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RECEIVED_CALL) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_TEXT_VIEW) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) #IF IS_DEBUG_BUILD g_PropertySystemData.bDebugRequeue = FALSE #ENDIF bSetPending = TRUE ENDIF ELSE INT iRequeueTime iRequeueTime = 10000 CC_CommunicationType commType commType = CT_FRIEND #IF IS_DEBUG_BUILD IF g_PropertySystemData.bDebugRequeue iRequeueTime = 500 commType = CT_END_OF_MISSION ENDIF #ENDIF CC_TextPart part1 CC_TextPart part2 GET_PROPERTY_MANAGEMENT_MISSION_NOTIFY_TEXT_PARTS(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.currentPropertyManagementMission, g_PropertySystemData.iCurrentPropertyManagementVariation, part1, part2) IF REGISTER_COMPOSITE_TEXT_MESSAGE_FROM_CHARACTER_TO_PLAYER( TEXT_PROPERTY, part1, part2, commType, GET_CURRENT_PLAYER_PED_BIT(), GET_CONTACT_CHARACTER_FOR_PROPERTY(g_PropertySystemData.currentPropertyManagementProperty), 0, iRequeueTime, DEFAULT, DEFAULT, DEFAULT, COMM_FLAG_DONT_SAVE, CANNOT_CALL_SENDER) g_PropertySystemData.sManagementCommsID = TEXT_PROPERTY CDEBUG1LN(DEBUG_PROPERTY, "Text registered") CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_TEXT_VIEW) #IF IS_DEBUG_BUILD g_PropertySystemData.bDebugRequeue = FALSE #ENDIF bSetPending = TRUE ENDIF ENDIF IF bSetPending CDEBUG1LN(DEBUG_PROPERTY, "Set pending") // suppress airport restriction for plane promotion IF g_PropertySystemData.currentPropertyManagementMission = PROPERTY_MANAGEMENT_MISSION_PLANE_PROMOTION IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SUPPRESS_AIRPORT_RESTRICTED) IF NOT IS_RESTRICTED_AREA_WANTED_LEVEL_SUPPRESSED(AC_AIRPORT_AIRSIDE) SUPPRESS_RESTRICTED_AREA_WANTED_LEVEL(AC_AIRPORT_AIRSIDE, TRUE) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SUPPRESS_AIRPORT_RESTRICTED) ENDIF ENDIF ENDIF IF DOES_BLIP_EXIST(g_PropertySystemData.propertyManagementBlip) REMOVE_BLIP(g_PropertySystemData.propertyManagementBlip) ENDIF IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.propertyOwnershipData[g_PropertySystemData.currentPropertyManagementProperty].iBit, PROPERTY_BIT_IS_NEW_PROPERTY) CLEAR_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.propertyOwnershipData[g_PropertySystemData.currentPropertyManagementProperty].iBit, PROPERTY_BIT_IS_NEW_PROPERTY) SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_DONE_EVENT_FOR_NEW_PROPERTY) ENDIF CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_BLIPPED_MANAGEMENT_EVENT) SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DO_RESET_TO_WAITING) g_PropertySystemData.propertyManagementState = PROPERTY_MANAGEMENT_STATE_PENDING ENDIF ELSE CDEBUG1LN(DEBUG_PROPERTY, "Mission set, goto waiting from notify") RESET_PROPERTY_MANAGEMENT_TO_WAITING() ENDIF BREAK CASE PROPERTY_MANAGEMENT_STATE_PENDING // the player must get to the event in time BOOL bFailOut bFailOut = FALSE IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) IF IS_COMMUNICATION_REGISTERED(g_PropertySystemData.sManagementCommsID) IF GET_COMMUNICATION_STATUS(g_PropertySystemData.sManagementCommsID) = CS_IN_PROGRESS SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RECEIVED_CALL) CDEBUG1LN(DEBUG_PROPERTY, "Waiting on call respond!") SWITCH CHECK_RESPONSE_TO_CELLPHONE_PROMPT() CASE RESPONDED_YES CDEBUG1LN(DEBUG_PROPERTY, "YES response registered") CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) BREAK CASE RESPONDED_NO CDEBUG1LN(DEBUG_PROPERTY, "NO response registered, fail out eventually") //CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) //bFailOut = TRUE BREAK ENDSWITCH ELSE IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RECEIVED_CALL) IF WAS_LAST_PHONECALL_HUNG_UP_BY_JOYPAD() OR CHECK_CELLPHONE_LAST_CALL_REJECTED() CDEBUG1LN(DEBUG_PROPERTY, "Hung up or rejected, fail out") CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) bFailOut = TRUE ENDIF ENDIF ENDIF ELSE IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RECEIVED_CALL) CDEBUG1LN(DEBUG_PROPERTY, "Hung up or rejected, fail out") CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) ELSE CDEBUG1LN(DEBUG_PROPERTY, "Comms not registered, fail out") ENDIF bFailOut = TRUE ENDIF ELIF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_TEXT_VIEW) IF NOT IS_COMMUNICATION_REGISTERED(g_PropertySystemData.sManagementCommsID) CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_TEXT_VIEW) ENDIF ENDIF // blip the event IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_BLIPPED_MANAGEMENT_EVENT) AND NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) AND NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_TEXT_VIEW) AND NOT bFailOut CDEBUG1LN(DEBUG_PROPERTY, "Add the blip") g_PropertySystemData.propertyManagementBlip = CREATE_BLIP_FOR_COORD(GET_MANAGEMENT_EVENT_COORD(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.currentPropertyManagementMission, g_PropertySystemData.iCurrentPropertyManagementVariation)) SET_BLIP_SPRITE(g_PropertySystemData.propertyManagementBlip, RADAR_TRACE_PROPERTY) SWITCH g_savedGlobals.sPropertyData.propertyOwnershipData[g_PropertySystemData.currentPropertyManagementProperty].charOwner CASE CHAR_MICHAEL SET_BLIP_COLOUR(g_PropertySystemData.propertyManagementBlip, BLIP_COLOUR_MICHAEL) BREAK CASE CHAR_FRANKLIN SET_BLIP_COLOUR(g_PropertySystemData.propertyManagementBlip, BLIP_COLOUR_FRANKLIN) BREAK CASE CHAR_TREVOR SET_BLIP_COLOUR(g_PropertySystemData.propertyManagementBlip, BLIP_COLOUR_TREVOR) BREAK ENDSWITCH SET_BLIP_PRIORITY(g_PropertySystemData.propertyManagementBlip, BLIPPRIORITY_HIGH) SET_BLIP_FLASHES(g_PropertySystemData.propertyManagementBlip, TRUE) SET_BLIP_FLASH_TIMER(g_PropertySystemData.propertyManagementBlip, 10000) g_PropertySystemData.iPendingPropertyManagementTimeOut = GET_GAME_TIMER() + 300000 SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_BLIPPED_MANAGEMENT_EVENT) ENDIF #IF NOT USE_CLF_DLC #IF NOT USE_NRM_DLC IF NOT HAS_ONE_TIME_HELP_DISPLAYED(FHM_FIRST_PROPERTY_MISSION) IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_BLIPPED_MANAGEMENT_EVENT) FlowHelpStatus fStatus fStatus = GET_FLOW_HELP_MESSAGE_STATUS("AM_H_PMFS") IF fStatus = FHS_EXPIRED ADD_HELP_TO_FLOW_QUEUE("AM_H_PMFS", FHP_HIGH, 0, 3000) ELIF fStatus = FHS_DISPLAYED SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_FIRST_PROPERTY_MISSION) ENDIF ENDIF ENDIF #ENDIF #ENDIF // handle creating the event HANDLE_CREATE_MANAGEMENT_EVENT_ENTITIES() IF NOT UPDATE_MANAGEMENT_EVENT_IN_WORLD() CDEBUG1LN(DEBUG_PROPERTY, "Management event failed to update, fail out") // something went wrong in the world to fail it bFailOut = TRUE ELSE IF bCanStartAgainstMission BOOL bForceStartMission bForceStartMission = SHOULD_MANAGEMENT_EVENT_FORCE_START(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.currentPropertyManagementMission, g_PropertySystemData.iCurrentPropertyManagementVariation) IF IS_PLAYER_AT_MANAGEMENT_EVENT_TRIGGER(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.currentPropertyManagementMission, g_PropertySystemData.iCurrentPropertyManagementVariation) OR bForceStartMission IF (g_PropertySystemData.createManagementEventState = CREATE_MANAGEMENT_EVENT_STATE_DONE AND NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) AND NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_TEXT_VIEW)) OR bForceStartMission CDEBUG1LN(DEBUG_PROPERTY, "Launch management evemt") IF bForceStartMission SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_FORCED_MISSION_START) ELSE CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_FORCED_MISSION_START) ENDIF SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DO_RESET_TO_WAITING) g_PropertySystemData.propertyManagementState = PROPERTY_MANAGEMENT_STATE_LAUNCHING ENDIF ELIF GET_GAME_TIMER() >= g_PropertySystemData.iPendingPropertyManagementTimeOut IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) AND NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_TEXT_VIEW) // player ignored the event and it timed out CDEBUG1LN(DEBUG_PROPERTY, "Ignored event, fail out") bFailOut = TRUE ENDIF ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() <> g_savedGlobals.sPropertyData.propertyOwnershipData[g_PropertySystemData.currentPropertyManagementProperty].charOwner OR IS_PLAYER_SWITCH_IN_PROGRESS() #IF IS_DEBUG_BUILD IF NOT g_PropertySystemData.bDebugSetAsOwner[g_PropertySystemData.currentPropertyManagementProperty] #ENDIF // player switched and it timed out CDEBUG1LN(DEBUG_PROPERTY, "Wrong character, fail out") bFailOut = TRUE #IF IS_DEBUG_BUILD ENDIF #ENDIF ENDIF //IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID()) //OR IS_PED_INJURED(PLAYER_PED_ID()) // arrested or died // CDEBUG1LN(DEBUG_PROPERTY, "Arrested or died, fail out") // bFailOut = TRUE //ENDIF ELSE CDEBUG1LN(DEBUG_PROPERTY, "Mission launched, fail out") bFailOut = TRUE ENDIF ENDIF IF bFailOut CDEBUG1LN(DEBUG_PROPERTY, "FAIL OUT HIT") g_PropertySystemData.failReasonOverride = PROPERTY_MISSION_FAIL_REASON_OVERRIDE_IGNORED IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_TEXT_VIEW) AND NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) HANDLE_PROPERTY_MANAGEMENT_STATE_RESULT(PROPERTY_MANAGEMENT_RESULT_FAILURE) ELSE HANDLE_PROPERTY_MANAGEMENT_STATE_RESULT(PROPERTY_MANAGEMENT_RESULT_NONE) ENDIF RESET_PROPERTY_MANAGEMENT_TO_WAITING() RELEASE_MANAGEMENT_EVENT_ASSETS() IF NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_TEXT_VIEW) AND NOT IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_WAITING_ON_CALL_RESPOND) SET_NEXT_PROPERTY_MANAGEMENT_EVENT_TIME(PROPERTY_ACTION_IGNORED_MANAGEMENT_EVENT) ENDIF ENDIF BREAK CASE PROPERTY_MANAGEMENT_STATE_LAUNCHING // try and launch the mission script STRING sScript sScript = GET_SCRIPT_FOR_PROPERTY_MANAGEMENT_MISSION(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.currentPropertyManagementMission, g_PropertySystemData.iCurrentPropertyManagementVariation) REQUEST_SCRIPT(sScript) IF HAS_SCRIPT_LOADED(sScript) m_enumMissionCandidateReturnValue candidateValue candidateValue = Request_Mission_Launch(g_PropertySystemData.iCandidateID, MCTID_CONTACT_POINT, MISSION_TYPE_MINIGAME) IF candidateValue = MCRET_ACCEPTED IF DOES_BLIP_EXIST(g_PropertySystemData.propertyManagementBlip) REMOVE_BLIP(g_PropertySystemData.propertyManagementBlip) ENDIF STATIC_BLIP_SOFT_REMOVE(GET_BLIP_ENUM_FOR_PROPERTY(g_PropertySystemData.currentPropertyManagementProperty)) // increment launched stat INT iLaunchedStat STAT_GET_INT(GET_STAT_FOR_PROPERTY(g_PropertySystemData.currentPropertyManagementProperty, PROPERTY_STAT_MISSIONS_TRIGGERED), iLaunchedStat) iLaunchedStat++ STAT_SET_INT(GET_STAT_FOR_PROPERTY(g_PropertySystemData.currentPropertyManagementProperty, PROPERTY_STAT_MISSIONS_TRIGGERED), iLaunchedStat) SET_PLAYER_ON_MANAGEMENT_MISSION(TRUE) RELEASE_MANAGEMENT_EVENT_ASSETS(FALSE) SET_CURRENT_MANAGEMENT_VARIATION_AS_LAUNCHED() RESET_ALL_MANAGEMENT_VARIATIONS_IF_COMPLETED(g_PropertySystemData.currentPropertyManagementProperty, g_PropertySystemData.currentPropertyManagementMission, g_PropertySystemData.iCurrentPropertyManagementVariation) g_PropertySystemData.propertyManagementThreadID = START_NEW_SCRIPT(sScript, MISSION_STACK_SIZE) SET_SCRIPT_AS_NO_LONGER_NEEDED(sScript) g_PropertySystemData.currentPropertyManagementResult = PROPERTY_MANAGEMENT_RESULT_NONE SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_DO_RESET_TO_WAITING) g_PropertySystemData.propertyManagementState = PROPERTY_MANAGEMENT_STATE_RUNNING ELIF candidateValue = MCRET_DENIED SET_SCRIPT_AS_NO_LONGER_NEEDED(sScript) RELEASE_MANAGEMENT_EVENT_ASSETS() SET_NEXT_PROPERTY_MANAGEMENT_EVENT_TIME(PROPERTY_ACTION_GENERAL_DELAY) RESET_PROPERTY_MANAGEMENT_TO_WAITING() ENDIF ENDIF BREAK CASE PROPERTY_MANAGEMENT_STATE_RUNNING // mission script is in progress IF IS_THREAD_ACTIVE(g_PropertySystemData.propertyManagementThreadID) ELSE #IF IS_DEBUG_BUILD SWITCH g_PropertySystemData.currentPropertyManagementResult CASE PROPERTY_MANAGEMENT_RESULT_NONE PRINTSTRING("property management mission terminated with NO RESULT!") PRINTNL() BREAK CASE PROPERTY_MANAGEMENT_RESULT_SUCCESS PRINTSTRING("property management mission terminated with SUCCESS!") PRINTNL() BREAK CASE PROPERTY_MANAGEMENT_RESULT_FAILURE PRINTSTRING("property management mission terminated with FAILURE!") PRINTNL() BREAK ENDSWITCH #ENDIF CLEAR_ADDITIONAL_TEXT(MISSION_TEXT_SLOT, TRUE) SET_PLAYER_ON_MANAGEMENT_MISSION(FALSE) HANDLE_PROPERTY_MANAGEMENT_STATE_RESULT(g_PropertySystemData.currentPropertyManagementResult) RELEASE_MANAGEMENT_EVENT_ASSETS() SET_NEXT_PROPERTY_MANAGEMENT_EVENT_TIME(PROPERTY_ACTION_FINISHED_MANAGEMENT_EVENT) SET_NEXT_MANAGEMENT_EVENT_TIME_FOR_PROPERTY(g_PropertySystemData.currentPropertyManagementProperty, PROPERTY_ACTION_FINISHED_MANAGEMENT_EVENT) RESET_PROPERTY_MANAGEMENT_TO_WAITING() Mission_Over(g_PropertySystemData.iCandidateID) ENDIF BREAK ENDSWITCH ENDPROC #IF IS_DEBUG_BUILD FUNC STRING GET_PROPERTY_NAME_AS_STRING(PROPERTY_ENUM thisProperty) SWITCH thisProperty CASE PROPERTY_TOWING_IMPOUND RETURN "Towing Impound" BREAK CASE PROPERTY_TAXI_LOT RETURN "Taxi Lot" BREAK CASE PROPERTY_ARMS_TRAFFICKING RETURN "Arms Trafficking" BREAK CASE PROPERTY_SONAR_COLLECTIONS RETURN "Sonar Collections" BREAK CASE PROPERTY_CAR_MOD_SHOP RETURN "Car Mod Shop" BREAK CASE PROPERTY_CINEMA_VINEWOOD RETURN "Cinema - Vinewood" BREAK CASE PROPERTY_CINEMA_DOWNTOWN RETURN "Cinema - Downtown" BREAK CASE PROPERTY_CINEMA_MORNINGWOOD RETURN "Cinema - Morningwood" BREAK CASE PROPERTY_GOLF_CLUB RETURN "Golf Club" BREAK CASE PROPERTY_CAR_SCRAP_YARD RETURN "Car Scrap Yard" BREAK CASE PROPERTY_WEED_SHOP RETURN "Weed Shop" BREAK CASE PROPERTY_BAR_TEQUILALA RETURN "Bar - Tequilala" BREAK CASE PROPERTY_BAR_PITCHERS RETURN "Bar - Pitchers" BREAK CASE PROPERTY_BAR_HEN_HOUSE RETURN "Bar - Hen House" BREAK CASE PROPERTY_BAR_HOOKIES RETURN "Bar - Hookies" BREAK CASE PROPERTY_STRIP_CLUB RETURN "Strip Club" BREAK ENDSWITCH RETURN "ERROR" ENDFUNC // create properties widgets PROC CREATE_PROPERTIES_WIDGETS() START_WIDGET_GROUP("Properties") INT i ADD_WIDGET_INT_READ_ONLY("Next Management Year", g_PropertySystemData.iDebugNextManagementYear) ADD_WIDGET_INT_READ_ONLY("Next Management Month", g_PropertySystemData.iDebugNextManagementMonth) ADD_WIDGET_INT_READ_ONLY("Next Management Day", g_PropertySystemData.iDebugNextManagementDay) ADD_WIDGET_INT_READ_ONLY("Next Management Hour", g_PropertySystemData.iDebugNextManagementHour) ADD_WIDGET_INT_READ_ONLY("Next Management Minute", g_PropertySystemData.iDebugNextManagementMinute) ADD_WIDGET_INT_READ_ONLY("Next Management Second", g_PropertySystemData.iDebugNextManagementSecond) ADD_WIDGET_BOOL("Advance next overall management time", g_PropertySystemData.bDebugAdvanceNextPropertyManagementTime) ADD_WIDGET_BOOL("Unlock Towing Impound (set all Tonya missions complete)", g_PropertySystemData.bDebugSetTonyaMissionsComplete) ADD_WIDGET_BOOL("Print current time of day", g_PropertySystemData.bDebugPrintCurrentTimeOfDay) REPEAT COUNT_OF(PROPERTY_ENUM) i PROPERTY_ENUM thisProperty = INT_TO_ENUM(PROPERTY_ENUM, i) START_WIDGET_GROUP(GET_PROPERTY_NAME_AS_STRING(thisProperty)) ADD_WIDGET_INT_READ_ONLY("Current owner", g_PropertySystemData.iDebugOwner[i]) ADD_WIDGET_BOOL("Set as owner", g_PropertySystemData.bDebugSetAsOwner[i]) ADD_WIDGET_INT_READ_ONLY("Next Management Day", g_PropertySystemData.iDebugThisPropertyNextManagementDay[i]) ADD_WIDGET_INT_READ_ONLY("Next Management Hour", g_PropertySystemData.iDebugThisPropertyNextManagementHour[i]) ADD_WIDGET_BOOL("Advance next management time", g_PropertySystemData.bDebugAdvanceNextThisPropertyManagementTime[i]) ADD_WIDGET_BOOL("Warp to cutscene", g_PropertySystemData.bDebugWarpToThisPropertyPurchaseCutscene[i]) //ADD_WIDGET_BOOL("Should pay this week", g_savedGlobals.sPropertyData.propertyOwnershipData[i].bShouldReceivePaymentThisWeek) STOP_WIDGET_GROUP() ENDREPEAT STOP_WIDGET_GROUP() ENDPROC // maintain properties widgets PROC MAINTAIN_PROPERTIES_WIDGETS() INT i IF GET_GAME_TIMER() >= g_PropertySystemData.iDebugUpdateWidgetTime IF g_PropertySystemData.bDebugAdvanceNextPropertyManagementTime g_savedGlobals.sPropertyData.nextCheckManagementEventTime = GET_CURRENT_TIMEOFDAY() g_PropertySystemData.bDebugAdvanceNextPropertyManagementTime = FALSE ENDIF g_PropertySystemData.iDebugNextManagementYear = GET_TIMEOFDAY_YEAR(g_savedGlobals.sPropertyData.nextCheckManagementEventTime) g_PropertySystemData.iDebugNextManagementMonth = ENUM_TO_INT(GET_TIMEOFDAY_MONTH(g_savedGlobals.sPropertyData.nextCheckManagementEventTime)) g_PropertySystemData.iDebugNextManagementDay = GET_TIMEOFDAY_DAY(g_savedGlobals.sPropertyData.nextCheckManagementEventTime) g_PropertySystemData.iDebugNextManagementHour = GET_TIMEOFDAY_HOUR(g_savedGlobals.sPropertyData.nextCheckManagementEventTime) g_PropertySystemData.iDebugNextManagementMinute = GET_TIMEOFDAY_MINUTE(g_savedGlobals.sPropertyData.nextCheckManagementEventTime) g_PropertySystemData.iDebugNextManagementSecond = GET_TIMEOFDAY_SECOND(g_savedGlobals.sPropertyData.nextCheckManagementEventTime) IF g_PropertySystemData.bDebugPrintCurrentTimeOfDay PRINT_TIMEOFDAY(GET_CURRENT_TIMEOFDAY()) ENDIF IF g_PropertySystemData.bDebugSetTonyaMissionsComplete Set_Random_Character_Mission_Complete(RC_TONYA_1) Set_Random_Character_Mission_Complete(RC_TONYA_2) Set_Random_Character_Mission_Complete(RC_TONYA_3) Set_Random_Character_Mission_Complete(RC_TONYA_4) Set_Random_Character_Mission_Complete(RC_TONYA_5) g_PropertySystemData.bDebugSetTonyaMissionsComplete = FALSE ENDIF REPEAT COUNT_OF(PROPERTY_ENUM) i PROPERTY_ENUM thisProperty = INT_TO_ENUM(PROPERTY_ENUM, i) IF g_PropertySystemData.bDebugAdvanceNextThisPropertyManagementTime[i] g_savedGlobals.sPropertyData.propertyOwnershipData[i].nextManagementEventTime = GET_CURRENT_TIMEOFDAY() g_PropertySystemData.bDebugAdvanceNextThisPropertyManagementTime[i] = FALSE ENDIF g_PropertySystemData.iDebugThisPropertyNextManagementDay[i] = GET_TIMEOFDAY_DAY(g_savedGlobals.sPropertyData.propertyOwnershipData[i].nextManagementEventTime) g_PropertySystemData.iDebugThisPropertyNextManagementHour[i] = GET_TIMEOFDAY_HOUR(g_savedGlobals.sPropertyData.propertyOwnershipData[i].nextManagementEventTime) IF g_PropertySystemData.bDebugSetAsOwner[i] g_savedGlobals.sPropertyData.propertyOwnershipData[i].charOwner = GET_CURRENT_PLAYER_PED_ENUM() g_PropertySystemData.bDebugSetAsOwner[i] = FALSE SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.propertyOwnershipData[i].iBit, PROPERTY_BIT_SHOULD_RECEIVE_PAYMENT_THIS_WEEK) ENDIF SWITCH g_savedGlobals.sPropertyData.propertyOwnershipData[i].charOwner CASE NO_CHARACTER g_PropertySystemData.iDebugOwner[i] = -1 BREAK CASE CHAR_TREVOR g_PropertySystemData.iDebugOwner[i] = 2 BREAK CASE CHAR_FRANKLIN g_PropertySystemData.iDebugOwner[i] = 1 BREAK CASE CHAR_MICHAEL g_PropertySystemData.iDebugOwner[i] = 0 BREAK ENDSWITCH IF g_PropertySystemData.bDebugWarpToThisPropertyPurchaseCutscene[i] g_PropertySystemData.bDebugForcePropertiesAvailable = TRUE g_savedGlobals.sPropertyData.propertyOwnershipData[i].charOwner = NO_CHARACTER CREDIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), GET_BANK_ACCOUNT_SOURCE_FOR_PROPERTY(thisProperty), 150000000) SET_ENTITY_COORDS(PLAYER_PED_ID(), GET_PROPERTY_PURCHASE_COORDS(thisProperty)) g_PropertySystemData.bDebugWarpToThisPropertyPurchaseCutscene[i] = FALSE ENDIF ENDREPEAT g_PropertySystemData.iDebugUpdateWidgetTime = GET_GAME_TIMER() + 3000 ENDIF ENDPROC #ENDIF // Handles launching an ambient script upon purchasing a property PROC REQUEST_AND_LAUNCH_PROPERTY_AMBIENT_SCRIPT(PROPERTY_ENUM thisProperty) SWITCH thisProperty CASE PROPERTY_SONAR_COLLECTIONS // Launch sonar ambient script to search for gold nuggets REQUEST_SCRIPT("ambient_Sonar") IF HAS_SCRIPT_LOADED("ambient_Sonar") START_NEW_SCRIPT("ambient_Sonar", DEFAULT_STACK_SIZE) SET_SCRIPT_AS_NO_LONGER_NEEDED("ambient_Sonar") CPRINTLN(DEBUG_AMBIENT, "REQUEST_AND_LAUNCH_PROPERTY_AMBIENT_SCRIPT() - ambient_Sonar launched!") CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_LAUNCH_AMBIENT_SCRIPT) ENDIF BREAK CASE PROPERTY_TOWING_IMPOUND // Launch TOWING AMBIENT IF g_savedGlobals.sTowingData.iTowingJobsCompleted < 5 g_savedGlobals.sTowingData.iTowingJobsCompleted = 5 ENDIF REQUEST_SCRIPT("controller_Towing") IF HAS_SCRIPT_LOADED("controller_Towing") START_NEW_SCRIPT("controller_Towing", DEFAULT_STACK_SIZE) SET_SCRIPT_AS_NO_LONGER_NEEDED("controller_Towing") CPRINTLN(DEBUG_AMBIENT, "REQUEST_AND_LAUNCH_PROPERTY_AMBIENT_SCRIPT() - towing launched!") CLEAR_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_LAUNCH_AMBIENT_SCRIPT) ENDIF BREAK ENDSWITCH ENDPROC // handle entire properties system PROC UPDATE_PROPERTIES_SYSTEM() IF NOT g_bInMultiplayer AND NOT MPGlobals.g_bEndSingleplayerNow BOOL bCanStartAgainstMission = CAN_MISSION_TYPE_START_AGAINST_CURRENT_TYPE(MISSION_TYPE_STORY) INT i BOOL bCanPurchase = FALSE IF bCanStartAgainstMission AND NOT g_bResultScreenDisplaying UPDATE_PROPERTY_AVAILABILITY(INT_TO_ENUM(PROPERTY_ENUM, g_PropertySystemData.iTick)) UPDATE_ALL_PROPERTIES_INCOME() bCanPurchase = TRUE ENDIF UPDATE_PROPERTY_PURCHASE(bCanPurchase) UPDATE_PROPERTY_MANAGEMENT(bCanStartAgainstMission) // release for sale sign and cutscene while on mission IF g_PropertySystemData.iTick = 0 IF NOT bCanStartAgainstMission //IS_CURRENTLY_ON_MISSION_OF_ANY_TYPE() RESET_FOR_SALE_SIGN_CREATE_STATE(FALSE) RESET_PROPERTY_ASSET_STREAMING() ELSE // release for sale signs REPEAT NUMBER_PROPERTY_FOR_SALE_SIGNS i IF DOES_ENTITY_EXIST(g_PropertySystemData.signObject[i]) IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(g_PropertySystemData.signObject[i])) > LONG_RANGE_PURCHASE_DISTANCE_SQUARED DELETE_OBJECT(g_PropertySystemData.signObject[i]) ENDIF ENDIF ENDREPEAT ENDIF IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_SUPPRESS_FOR_SALE_SIGNS) RESET_FOR_SALE_SIGN_CREATE_STATE(FALSE) ENDIF IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_RESET_TIME_AFTER_ARMENIAN_1) IF GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_1) g_savedGlobals.sPropertyData.nextCheckManagementEventTime = GET_CURRENT_TIMEOFDAY() SET_BITMASK_AS_ENUM(g_savedGlobals.sPropertyData.iBit, PROPERTY_SAVED_BIT_RESET_TIME_AFTER_ARMENIAN_1) ENDIF ENDIF // unlock any taxis near the taxi lot IF g_savedGlobals.sPropertyData.propertyOwnershipData[PROPERTY_TAXI_LOT].charOwner = CHAR_FRANKLIN IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN IF NOT IS_PED_INJURED(PLAYER_PED_ID()) VEHICLE_INDEX taxiVehicle = GET_VEHICLE_PED_IS_ENTERING(PLAYER_PED_ID()) IF IS_VEHICLE_DRIVEABLE(taxiVehicle) IF GET_ENTITY_MODEL(taxiVehicle) = TAXI IF IS_ENTITY_IN_AREA(taxiVehicle, <<878.28693, -194.96330, 77.59733>>, <<931.63037, -147.05588, 74.05599>>, FALSE, FALSE) SET_VEHICLE_DOORS_LOCKED(taxiVehicle, VEHICLELOCK_UNLOCKED) SET_VEHICLE_ALARM(taxiVehicle, FALSE) SET_VEHICLE_HAS_BEEN_OWNED_BY_PLAYER(taxiVehicle, TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RUN_CUTSCENE) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_CONTEXT) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_TALK) RUN_PROPERTY_CUTSCENE(g_PropertySystemData.runCutsceneProperty) ENDIF IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_LAUNCH_AMBIENT_SCRIPT) REQUEST_AND_LAUNCH_PROPERTY_AMBIENT_SCRIPT(g_PropertySystemData.ambientScriptProperty) ENDIF g_PropertySystemData.iTick++ IF g_PropertySystemData.iTick >= COUNT_OF(PROPERTY_ENUM) g_PropertySystemData.iTick = 0 ENDIF #IF IS_DEBUG_BUILD MAINTAIN_PROPERTIES_WIDGETS() #ENDIF ELSE IF IS_BITMASK_AS_ENUM_SET(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RESET_FOR_MULTIPLAYER) RESET_PROPERTIES_FOR_MP() ENDIF ENDIF ENDPROC // initialise all property data on clean boot PROC Initialise_Properties_Global_Variables_On_Startup() INT i REPEAT COUNT_OF(PROPERTY_ENUM) i g_savedGlobals.sPropertyData.propertyOwnershipData[i].charOwner = NO_CHARACTER //g_savedGlobals.sPropertyData.propertyOwnershipData[i].bShouldReceivePaymentThisWeek = TRUE ENDREPEAT g_PropertySystemData.propertyManagementState = PROPERTY_MANAGEMENT_STATE_WAITING g_PropertySystemData.currentPropertyManagementMission = PROPERTY_MANAGEMENT_MISSION_NONE g_PropertySystemData.iTick = 0 g_savedGlobals.sPropertyData.nextCheckManagementEventTime = GET_CURRENT_TIMEOFDAY() ENDPROC