Files
gtav-src/script/dev_ng/singleplayer/include/private/properties_private.sch
T
2025-09-29 00:52:08 +02:00

4078 lines
152 KiB
Scheme
Executable File

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), <<LONG_RANGE_PURCHASE_DISTANCE,LONG_RANGE_PURCHASE_DISTANCE,LONG_RANGE_PURCHASE_DISTANCE>>, 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), <<LOCATE_SIZE_ON_FOOT_ONLY, LOCATE_SIZE_ON_FOOT_ONLY, LOCATE_SIZE_HEIGHT>>)
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