572 lines
20 KiB
Python
Executable File
572 lines
20 KiB
Python
Executable File
|
|
|
|
//Compile out Title Update changes to header functions.
|
|
//Must be before includes.
|
|
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
|
|
|
|
|
|
CONST_INT IS_TENNIS_MULTIPLAYER 0
|
|
CONST_INT LAUNCHER_HAS_SCENE 1
|
|
CONST_INT LAUNCHER_VOL_BUTTON_PRESS 1
|
|
CONST_INT LAUNCHER_DONT_CHECK_RELOAD_RANGE 1
|
|
CONST_INT LAUNCHER_DISABLE_FOR_MAGDEMO 1
|
|
CONST_INT LAUNCHER_DONT_FADE_DOWN 1
|
|
CONST_INT MIN_AMBIENT_TENNIS_COURTS 1
|
|
CONST_INT MAX_AMBIENT_TENNIS_COURTS 3 // Should not be above 6, limited by number of courts to play on at Venice.
|
|
CONST_INT MIN_AMBIENT_COURT_INDEX 2
|
|
CONST_INT MAX_AMBIENT_COURT_INDEX 7
|
|
|
|
|
|
USING "family_public.sch"
|
|
USING "generic_launcher_header.sch"
|
|
//USING "tennis_core_lib.sch"
|
|
|
|
ENUM TENNIS_LOCATION
|
|
TENNIS_Venice = 1,
|
|
TENNIS_MichaelsHouse,
|
|
TENNIS_VineWoordHotel1,
|
|
TENNIS_RichmanHotel1,
|
|
TENNIS_RichmanHotel2,
|
|
TENNIS_LSUCourt1,
|
|
TENNIS_VespucciHotel,
|
|
TENNIS_WeazelCourt1,
|
|
TENNIS_ChumashHotel,
|
|
TENNIS_MAX_COURT_LOCATIONS
|
|
ENDENUM
|
|
TENNIS_LOCATION eThisCourtLoc
|
|
|
|
BOOL bAllowTennis = TRUE
|
|
BOOL bLaunchedWifeTennis = FALSE
|
|
BOOL bScriptRequested = FALSE
|
|
|
|
// Get the position of the launcher (where the player needs to go to trigger tennis).
|
|
FUNC VECTOR TENNIS_GET_LAUNCHER_LOCATION_BY_ID(INT iCourtID)
|
|
TENNIS_LOCATION courtEnum = INT_TO_ENUM(TENNIS_LOCATION, iCourtID)
|
|
|
|
SWITCH courtEnum
|
|
CASE TENNIS_Venice RETURN GET_STATIC_BLIP_POSITION(STATIC_BLIP_MINIGAME_TENNIS)
|
|
CASE TENNIS_MichaelsHouse RETURN GET_STATIC_BLIP_POSITION(STATIC_BLIP_MINIGAME_TENNIS_MICHAEL_HOUSE)
|
|
CASE TENNIS_VineWoordHotel1 RETURN <<487.5186, -217.7697, 52.7864>>
|
|
CASE TENNIS_RichmanHotel1 RETURN <<-1223.9077, 338.3685, 78.9859>>
|
|
CASE TENNIS_RichmanHotel2 RETURN <<-1233.0884, 372.8109, 78.9812>>
|
|
CASE TENNIS_LSUCourt1 RETURN <<-1618.4875, 266.4701, 58.5552>>
|
|
CASE TENNIS_VespucciHotel RETURN <<-936.0361, -1261.9667, 6.9773>>
|
|
CASE TENNIS_WeazelCourt1 RETURN <<-1372.0155, -101.2864, 49.7046>>
|
|
CASE TENNIS_ChumashHotel RETURN <<-2869.9915, 9.2297, 10.6083>>
|
|
DEFAULT RETURN <<0,0,0>>
|
|
ENDSWITCH
|
|
ENDFUNC
|
|
|
|
// Get the nearest launcher location to the position given.
|
|
FUNC INT TENNIS_GET_NEAREST_LAUNCHER_LOCATION(VECTOR vTestPos)
|
|
FLOAT fNearest = 9999999.9
|
|
FLOAT fCurrent
|
|
INT iNearest
|
|
INT iCurrent
|
|
|
|
REPEAT TENNIS_MAX_COURT_LOCATIONS iCurrent
|
|
fCurrent = VDIST2(vTestPos, TENNIS_GET_LAUNCHER_LOCATION_BY_ID(iCurrent))
|
|
IF fNearest > fCurrent
|
|
fNearest = fCurrent
|
|
iNearest = iCurrent
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN iNearest
|
|
ENDFUNC
|
|
|
|
FUNC STATIC_BLIP_NAME_ENUM TENNIS_GET_STATIC_BLIP_NAME_BY_ID(INT iCourtID)
|
|
TENNIS_LOCATION courtEnum = INT_TO_ENUM(TENNIS_LOCATION, iCourtID)
|
|
SWITCH courtEnum
|
|
CASE TENNIS_Venice RETURN STATIC_BLIP_MINIGAME_TENNIS
|
|
CASE TENNIS_MichaelsHouse RETURN STATIC_BLIP_MINIGAME_TENNIS_MICHAEL_HOUSE
|
|
CASE TENNIS_VineWoordHotel1 RETURN STATIC_BLIP_MINIGAME_TENNIS_VINEWOOD_HOTEL1
|
|
CASE TENNIS_RichmanHotel1 RETURN STATIC_BLIP_MINIGAME_TENNIS_RICHMAN_HOTEL1
|
|
CASE TENNIS_RichmanHotel2 RETURN STATIC_BLIP_MINIGAME_TENNIS_RICHMAN_HOTEL1
|
|
CASE TENNIS_LSUCourt1 RETURN STATIC_BLIP_MINIGAME_TENNIS_LSU_COURT1
|
|
CASE TENNIS_VespucciHotel RETURN STATIC_BLIP_MINIGAME_TENNIS_VESPUCCI_HOTEL
|
|
CASE TENNIS_WeazelCourt1 RETURN STATIC_BLIP_MINIGAME_TENNIS_WEAZEL_COURT
|
|
CASE TENNIS_ChumashHotel RETURN STATIC_BLIP_MINIGAME_TENNIS_CHUMASH_HOTEL
|
|
DEFAULT RETURN STATIC_BLIP_MINIGAME_TENNIS
|
|
ENDSWITCH
|
|
|
|
ENDFUNC
|
|
|
|
FUNC STATIC_BLIP_NAME_ENUM TENNIS_GET_CLOSEST_TENNIS_STATIC_BLIP(VECTOR vTestPos)
|
|
RETURN TENNIS_GET_STATIC_BLIP_NAME_BY_ID(TENNIS_GET_NEAREST_LAUNCHER_LOCATION(vTestPos))
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks to see if we can run while a friend activity is going on.
|
|
FUNC BOOL LAUNCHER_CAN_RUN_FRIEND_ACTIVITY()
|
|
// If we're on a friend activity, but our blip isn't active, quit.
|
|
IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY)
|
|
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY_WITH_MG)
|
|
// Need to figure out which tennis blip we're checking.
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
// Check that blip!
|
|
SWITCH INT_TO_ENUM(TENNIS_LOCATION, TENNIS_GET_NEAREST_LAUNCHER_LOCATION(GET_ENTITY_COORDS(PLAYER_PED_ID())))
|
|
CASE TENNIS_Venice RETURN IS_STATIC_BLIP_CURRENTLY_VISIBLE(STATIC_BLIP_MINIGAME_TENNIS) BREAK
|
|
CASE TENNIS_MichaelsHouse RETURN IS_STATIC_BLIP_CURRENTLY_VISIBLE(STATIC_BLIP_MINIGAME_TENNIS_MICHAEL_HOUSE) BREAK
|
|
CASE TENNIS_VineWoordHotel1 RETURN IS_STATIC_BLIP_CURRENTLY_VISIBLE(STATIC_BLIP_MINIGAME_TENNIS_VINEWOOD_HOTEL1) BREAK
|
|
CASE TENNIS_RichmanHotel1 RETURN IS_STATIC_BLIP_CURRENTLY_VISIBLE(STATIC_BLIP_MINIGAME_TENNIS_RICHMAN_HOTEL1) BREAK
|
|
CASE TENNIS_LSUCourt1 RETURN IS_STATIC_BLIP_CURRENTLY_VISIBLE(STATIC_BLIP_MINIGAME_TENNIS_LSU_COURT1) BREAK
|
|
CASE TENNIS_VespucciHotel RETURN IS_STATIC_BLIP_CURRENTLY_VISIBLE(STATIC_BLIP_MINIGAME_TENNIS_VESPUCCI_HOTEL) BREAK
|
|
CASE TENNIS_WeazelCourt1 RETURN IS_STATIC_BLIP_CURRENTLY_VISIBLE(STATIC_BLIP_MINIGAME_TENNIS_WEAZEL_COURT) BREAK
|
|
CASE TENNIS_ChumashHotel RETURN IS_STATIC_BLIP_CURRENTLY_VISIBLE(STATIC_BLIP_MINIGAME_TENNIS_CHUMASH_HOTEL) BREAK
|
|
DEFAULT RETURN FALSE //we're on a friend activity, but we're at a court that isn't being checked
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// We're not even on a friend activity. Who cares?
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
|
|
// Scene setup loading
|
|
PROC LAUNCHER_CUSTOM_REQUEST_ASSETS()
|
|
// Request tennis assets here here (instructor, ball, wife maybe?)
|
|
IF bAllowTennis
|
|
IF (eThisCourtLoc = TENNIS_Venice)
|
|
REQUEST_SCRIPT("tennis_ambient")
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL LAUNCHER_CUSTOM_ASSETS_LOADED()
|
|
IF bAllowTennis
|
|
IF (eThisCourtLoc = TENNIS_Venice)
|
|
// If we're in Venice, stream the event script for people playing Tennis.
|
|
RETURN HAS_SCRIPT_LOADED("tennis_ambient")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL LAUNCHER_TENNIS_IS_MISSION_FLOW_AFTER_FAMILY_4() // check to see if we finished family 4
|
|
// PRINTLN("LAUNCHER_TENNIS_IS_MISSION_FLOW_AFTER_FAMILY_4()")
|
|
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_4)
|
|
// PRINTLN("We've completed family 4")
|
|
RETURN TRUE
|
|
ENDIF
|
|
// PRINTLN("We have not completed family 4")
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL LAUNCHER_TENNIS_IS_MISSION_FLOW_AFTER_FAMILY_5() // check to see if we're inbetween family 5/6
|
|
// PRINTLN("LAUNCHER_TENNIS_IS_MISSION_FLOW_AFTER_FAMILY_5()")
|
|
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_5)
|
|
// PRINTLN("We've completed family 5")
|
|
RETURN TRUE
|
|
ENDIF
|
|
// PRINTLN("We have not completed family 5")
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL LAUNCHER_TENNIS_IS_MISSION_FLOW_BEFORE_FAMILY_6() // check to see if we're inbetween family 5/6
|
|
// PRINTLN("LAUNCHER_TENNIS_IS_MISSION_FLOW_BEFORE_FAMILY_6()")
|
|
IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_6)
|
|
// PRINTLN("We have not completed family 6")
|
|
RETURN TRUE
|
|
ENDIF
|
|
// PRINTLN("We've completed family 6")
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL LAUNCHER_TENNIS_IS_FRIEND_JIMMY_OR_AMANDA()
|
|
IF NOT IS_ENTITY_DEAD(FRIEND_A_PED_ID())
|
|
IF GET_NPC_PED_ENUM(FRIEND_A_PED_ID()) = CHAR_JIMMY
|
|
OR GET_NPC_PED_ENUM(FRIEND_A_PED_ID()) = CHAR_AMANDA
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL LAUNCHER_TENNIS_IS_FRIEND_LAMAR()
|
|
IF NOT IS_ENTITY_DEAD(FRIEND_A_PED_ID())
|
|
IF GET_NPC_PED_ENUM(FRIEND_A_PED_ID()) = CHAR_LAMAR
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL LAUNCHER_TENNIS_IS_FRIEND_WITH_PLAYER()
|
|
IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY)
|
|
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY_WITH_MG)
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC LAUNCHER_CUSTOM_APPROACH_WAIT()
|
|
|
|
|
|
enumCharacterList ePlayer = GET_PLAYER_PED_ENUM(PLAYER_PED_ID())
|
|
|
|
IF ePlayer = CHAR_FRANKLIN
|
|
IF NOT LAUNCHER_TENNIS_IS_FRIEND_WITH_PLAYER()
|
|
PRINTLN("Franklin has been detected so terminating launcher...")
|
|
GENERIC_LAUNCHER_FORCE_WAIT_TERMINATE_AND_CLEAR_STATIC_BLIP(eLauncherStaticBlip)
|
|
EXIT
|
|
ENDIF
|
|
ELIF ePlayer = CHAR_MICHAEL
|
|
IF NOT IS_TENNIS_GLOBAL_FLAG_SET(TGF_PRELOADED_PLAYER_OUTFIT)
|
|
SET_TENNIS_GLOBAL_FLAG(TGF_PRELOADED_PLAYER_OUTFIT)
|
|
PRELOAD_OUTFIT(PLAYER_PED_ID(), OUTFIT_P0_TENNIS)
|
|
CDEBUG2LN(DEBUG_TENNIS, "LAUNCHER_CUSTOM_APPROACH_WAIT :: PRELOAD_OUTFIT(PLAYER_PED_ID(), OUTFIT_P0_TENNIS) ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ELIF ePlayer = CHAR_TREVOR
|
|
IF NOT IS_TENNIS_GLOBAL_FLAG_SET(TGF_PRELOADED_PLAYER_OUTFIT)
|
|
SET_TENNIS_GLOBAL_FLAG(TGF_PRELOADED_PLAYER_OUTFIT)
|
|
PRELOAD_OUTFIT(PLAYER_PED_ID(), OUTFIT_P2_TENNIS)
|
|
CDEBUG2LN(DEBUG_TENNIS, "LAUNCHER_CUSTOM_APPROACH_WAIT :: PRELOAD_OUTFIT(PLAYER_PED_ID(), OUTFIT_P2_TENNIS) ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// IF LAUNCHER_TENNIS_IS_FRIEND_WITH_PLAYER() // if we're on a friend activity
|
|
// IF LAUNCHER_TENNIS_IS_FRIEND_LAMAR() // if we're with lamar
|
|
// PRINTLN("Lamar has been detected so terminating launcher...")
|
|
// GENERIC_LAUNCHER_FORCE_WAIT_TERMINATE_AND_CLEAR_STATIC_BLIP(eLauncherStaticBlip)
|
|
// EXIT
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
IF (eThisCourtLoc = TENNIS_MichaelsHouse)
|
|
IF NOT bLaunchedWifeTennis
|
|
IF (Get_Current_Event_For_FamilyMember(FM_MICHAEL_WIFE) = FE_M_WIFE_playing_tennis)
|
|
IF NOT bScriptRequested
|
|
REQUEST_SCRIPT("tennis_family")
|
|
bScriptRequested = TRUE
|
|
ELSE
|
|
IF HAS_SCRIPT_LOADED("tennis_family")
|
|
START_NEW_SCRIPT("tennis_family", MULTIPLAYER_MISSION_STACK_SIZE)
|
|
SET_SCRIPT_AS_NO_LONGER_NEEDED("tennis_family")
|
|
bLaunchedWifeTennis = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// If tennis has stopped, undo all of this.
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("tennis_family")) = 0
|
|
bLaunchedWifeTennis = FALSE
|
|
bScriptRequested = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Check if we're at michael's house. Kill the blip and the launcher not on a friend activity and if we're between family 5 and 6 or the char is franklin
|
|
IF NOT LAUNCHER_TENNIS_IS_FRIEND_WITH_PLAYER()
|
|
IF LAUNCHER_TENNIS_IS_MISSION_FLOW_AFTER_FAMILY_5() AND LAUNCHER_TENNIS_IS_MISSION_FLOW_BEFORE_FAMILY_6()
|
|
PRINTLN("Can't play at Michael's between FAMILY_5 and FAMILY_6...")
|
|
GENERIC_LAUNCHER_FORCE_WAIT_TERMINATE_AND_CLEAR_STATIC_BLIP(eLauncherStaticBlip)
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(PLAYER_PED_ID())
|
|
CDEBUG2LN(DEBUG_TENNIS, "HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(PLAYER_PED_ID()) = FALSE ", GET_FRAME_COUNT()) //", PICK_STRING(HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(PLAYER_PED_ID()), "TRUE ", "FALSE "), GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC LAUNCHER_CUSTOM_SPAWN_SCENE()
|
|
// Setup your scene here.
|
|
// Steal wife, get her on court, run any start tennis/init funcs here.
|
|
IF bAllowTennis AND GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("tennis_ambient")) = 0
|
|
// If we're in Venice, spawn a few courts playing Tennis.
|
|
IF (eThisCourtLoc = TENNIS_Venice)
|
|
TennisLaunchData sTennisData
|
|
|
|
//Get a random number of games, between MIN_AMBIENT_TENNIS_COURTS and MAX_AMBIENT_TENNIS_COURTS
|
|
INT iNumGames = GET_RANDOM_INT_IN_RANGE( MIN_AMBIENT_TENNIS_COURTS, MAX_AMBIENT_TENNIS_COURTS + 1 )
|
|
INT iCourts[ MAX_AMBIENT_TENNIS_COURTS ]
|
|
|
|
iCourts[0] = GET_RANDOM_INT_IN_RANGE( MIN_AMBIENT_COURT_INDEX, MAX_AMBIENT_COURT_INDEX + 1 ) // 0 is reserved for the player and 1 off limits so balls from the other game don't interrupt the player.
|
|
|
|
INT i = 1
|
|
WHILE i < iNumGames AND i < MAX_AMBIENT_TENNIS_COURTS
|
|
|
|
iCourts[ i ] = GET_RANDOM_INT_IN_RANGE_NOT_IN_ARRAY(iCourts, MAX_AMBIENT_TENNIS_COURTS, MIN_AMBIENT_COURT_INDEX, MAX_AMBIENT_COURT_INDEX)
|
|
|
|
i++
|
|
|
|
ENDWHILE
|
|
|
|
CPRINTLN( DEBUG_TENNIS, "Playing ", iNumGames, " games!")
|
|
#IF IS_DEBUG_BUILD
|
|
i = 0
|
|
WHILE i < iNumGames AND i < MAX_AMBIENT_TENNIS_COURTS
|
|
CPRINTLN( DEBUG_TENNIS, "Playing on iCourts[", i, "]=", iCourts[i] )
|
|
i++
|
|
ENDWHILE
|
|
#ENDIF
|
|
|
|
i = 0
|
|
WHILE i < iNumGames AND i < MAX_AMBIENT_TENNIS_COURTS
|
|
|
|
IF iCourts[ i ] > 0
|
|
sTennisData.eCourtToLaunch = INT_TO_ENUM(TENNISCOURT_LOCATION, iCourts[ i ])
|
|
START_NEW_SCRIPT_WITH_ARGS("tennis_ambient", sTennisData, SIZE_OF(sTennisData), MULTIPLAYER_MISSION_STACK_SIZE)
|
|
ENDIF
|
|
|
|
i++
|
|
|
|
ENDWHILE
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC LAUNCHER_CUSTOM_SCRIPT_INIT()
|
|
eMinigame = MINIGAME_TENNIS
|
|
|
|
|
|
scriptName = "tennis"
|
|
iStackSize = MISSION_STACK_SIZE
|
|
|
|
SET_BITMASK_ENUM_AS_ENUM(launcherFlags, LAUNCHER_FRIEND_ACTIVITY)
|
|
helpButtonPress = "PLAY_TENNIS"
|
|
|
|
// Figure out which court we're trying to run.
|
|
// !!!! must do this first so we know where we are
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
eThisCourtLoc = INT_TO_ENUM(TENNIS_LOCATION, TENNIS_GET_NEAREST_LAUNCHER_LOCATION(vLaunchLocation))
|
|
ENDIF
|
|
|
|
eLauncherStaticBlip = TENNIS_GET_CLOSEST_TENNIS_STATIC_BLIP(vLaunchLocation)
|
|
|
|
PRINTLN("Initializing court")
|
|
|
|
bAllowTennis = TRUE
|
|
|
|
enumCharacterList ePlayer = GET_PLAYER_PED_ENUM(PLAYER_PED_ID())
|
|
|
|
|
|
IF ePlayer = CHAR_FRANKLIN
|
|
PRINTLN("Franklin is not allowed to play")
|
|
SET_BITMASK_ENUM_AS_ENUM(launcherFlags, LAUNCHER_SHUTDOWN_FORCED_ON_INIT)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF LAUNCHER_TENNIS_IS_FRIEND_WITH_PLAYER()
|
|
AND NOT LAUNCHER_CAN_RUN_FRIEND_ACTIVITY()
|
|
PRINTLN("[Tennis Launcher] We're on a friend activity and this court is disabled!")
|
|
SET_BITMASK_ENUM_AS_ENUM(launcherFlags, LAUNCHER_SHUTDOWN_FORCED_ON_INIT)
|
|
EXIT
|
|
ENDIF
|
|
|
|
// If we're loading Mike's house, and the wife isn't playing Tennis, NO TENNIS!
|
|
INT iHour = GET_CLOCK_HOURS()
|
|
SWITCH eThisCourtLoc
|
|
CASE TENNIS_MichaelsHouse
|
|
|
|
IF NOT IS_PLAYER_PED_AVAILABLE(CHAR_MICHAEL) //make sure michael is available since we're at his house
|
|
PRINTLN("NOT IS_PLAYER_PED_AVAILABLE(CHAR_MICHAEL) detected, terminating launcher...")
|
|
SET_BITMASK_ENUM_AS_ENUM(launcherFlags, LAUNCHER_SHUTDOWN_FORCED_ON_INIT)
|
|
EXIT
|
|
ENDIF
|
|
|
|
//Check if we're at michael's house. Kill the blip and the launcher if we're alone between family 5 and 6
|
|
IF LAUNCHER_TENNIS_IS_FRIEND_WITH_PLAYER() //we're with a friend
|
|
PRINTLN("We're on a friend activity so don't shut down early...")
|
|
ELSE //we're not with a friend
|
|
PRINTLN("We're not on a friend activity...")
|
|
PRINTLN("Seeing who the player is...")
|
|
IF ePlayer = CHAR_MICHAEL
|
|
PRINTLN("Player is Michael")
|
|
PRINTLN("Checking to see if we're between FAMILY_5 and FAMILY_6...")
|
|
IF LAUNCHER_TENNIS_IS_MISSION_FLOW_AFTER_FAMILY_5() AND LAUNCHER_TENNIS_IS_MISSION_FLOW_BEFORE_FAMILY_6()
|
|
PRINTLN("Can't play at Michael's between FAMILY_5 and FAMILY_6 without a friend ped...")
|
|
SET_BITMASK_ENUM_AS_ENUM(launcherFlags, LAUNCHER_SHUTDOWN_FORCED_ON_INIT)
|
|
EXIT
|
|
ELSE
|
|
PRINTLN("Flow is not between FAMILY_5 and FAMILY_6 so we should be okay to play...")
|
|
ENDIF
|
|
ELIF ePlayer = CHAR_TREVOR
|
|
PRINTLN("Player is Trevor")
|
|
PRINTLN("Checking to see if we're AFTER FAMILY_6...")
|
|
IF LAUNCHER_TENNIS_IS_MISSION_FLOW_AFTER_FAMILY_5() AND LAUNCHER_TENNIS_IS_MISSION_FLOW_BEFORE_FAMILY_6()
|
|
PRINTLN("Can't play at Michael's between FAMILY_5 and FAMILY_6 without a friend ped...")
|
|
SET_BITMASK_ENUM_AS_ENUM(launcherFlags, LAUNCHER_SHUTDOWN_FORCED_ON_INIT)
|
|
EXIT
|
|
ELSE
|
|
PRINTLN("Flow is not between FAMILY_5 and FAMILY_6 so we should be okay to play...")
|
|
ENDIF
|
|
IF NOT LAUNCHER_TENNIS_IS_MISSION_FLOW_AFTER_FAMILY_4()
|
|
PRINTLN("Can't play at Michael's as Trevor before FAMILY_4 without a friend ped...")
|
|
SET_BITMASK_ENUM_AS_ENUM(launcherFlags, LAUNCHER_SHUTDOWN_FORCED_ON_INIT)
|
|
EXIT
|
|
ELSE
|
|
PRINTLN("Flow after FAMILY_4 so we should be okay to play...")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
PRINTLN("Setting up volume check at TENNIS_MichaelsHouse")
|
|
bAllowTennis = TRUE
|
|
|
|
// MIKE'S COURTS
|
|
vVolPt1 = <<-765.014, 154.244, 67.25>>
|
|
vVolPt2 = <<-782.014, 154.244, 67.25>>
|
|
fVolWidth = 28.0
|
|
fVolHeight = 2.0
|
|
BREAK
|
|
CASE TENNIS_Venice
|
|
PRINTLN("Setting up volume check at TENNIS_Venice")
|
|
// No ambient Tennis in Venice if it's early/late
|
|
IF (iHour < 6) OR (iHour > 18)
|
|
bAllowTennis = FALSE
|
|
ENDIF
|
|
|
|
// VENICE COURTS
|
|
vVolPt1 = <<-1164.957642,-1667.261719, 4.28>>
|
|
vVolPt2 = <<-1200.919312,-1615.872437, 4.28>>
|
|
fVolWidth = 65.50
|
|
fVolHeight = 5.0
|
|
BREAK
|
|
CASE TENNIS_VineWoordHotel1
|
|
PRINTLN("Setting up volume check at TENNIS_VineWoordHotel1")
|
|
IF (iHour < 6) OR (iHour > 18)
|
|
bAllowTennis = FALSE
|
|
ENDIF
|
|
|
|
// Vinewood Hotel 1
|
|
vVolPt1 = <<491.234802, -206.721466, 52.788494>>
|
|
vVolPt2 = <<469.683502, -266.506958, 53.786392>>
|
|
fVolWidth = 14.0
|
|
fVolHeight = 5.0
|
|
BREAK
|
|
CASE TENNIS_RichmanHotel1
|
|
PRINTLN("Setting up volume check at TENNIS_RichmanHotel1")
|
|
IF (iHour < 6) OR (iHour > 18)
|
|
bAllowTennis = FALSE
|
|
ENDIF
|
|
|
|
// Richman Hotel 1
|
|
vVolPt1 = <<-1218.938843, 321.684998, 79.029518>>
|
|
vVolPt2 = <<-1228.745972, 355.294708, 79.985886>>
|
|
fVolWidth = 20.0
|
|
fVolHeight = 2.0
|
|
BREAK
|
|
CASE TENNIS_RichmanHotel2
|
|
PRINTLN("Setting up volume check at TENNIS_RichmanHotel2")
|
|
IF (iHour < 6) OR (iHour > 18)
|
|
bAllowTennis = FALSE
|
|
ENDIF
|
|
|
|
// Richman Hotel 2
|
|
vVolPt1 = <<-1250.003418, 367.628326, 79.946281>>
|
|
vVolPt2 = <<-1216.369263, 377.550262 ,80.102127>>
|
|
fVolWidth = 20.0
|
|
fVolHeight = 2.0
|
|
BREAK
|
|
CASE TENNIS_LSUCourt1
|
|
PRINTLN("Setting up volume check at TENNIS_LSUCourt1")
|
|
IF (iHour < 6) OR (iHour > 18)
|
|
bAllowTennis = FALSE
|
|
ENDIF
|
|
|
|
// LSU Court
|
|
vVolPt1 = <<-1610.861816, 249.700623, 60.116802>>
|
|
vVolPt2 = <<-1626.516113, 282.946686, 59.830009>>
|
|
fVolWidth = 32.0
|
|
fVolHeight = 5.0
|
|
BREAK
|
|
CASE TENNIS_VespucciHotel
|
|
PRINTLN("Setting up volume check at TENNIS_VespucciHotel")
|
|
IF (iHour < 6) OR (iHour > 18)
|
|
bAllowTennis = FALSE
|
|
ENDIF
|
|
|
|
// Vespucci Hotel
|
|
vVolPt1 = <<-942.1958, -1251.2074, 7.1391>>
|
|
vVolPt2 = <<-930.3892, -1271.5867, 8.0366>>
|
|
fVolWidth = 12.0
|
|
fVolHeight = 5.0
|
|
BREAK
|
|
CASE TENNIS_WeazelCourt1
|
|
PRINTLN("Setting up volume check at TENNIS_WeazelCourt1")
|
|
IF (iHour < 6) OR (iHour > 18)
|
|
bAllowTennis = FALSE
|
|
ENDIF
|
|
|
|
// Weazel Court 1
|
|
vVolPt1 = <<-1373.602, -83.734, 50.0>>
|
|
vVolPt2 = <<-1369.198, -120.774, 50.0>>
|
|
fVolWidth = 20.840
|
|
fVolHeight = 5.0
|
|
fMaxTriggerDist = 19.60 // cut corners
|
|
BREAK
|
|
CASE TENNIS_ChumashHotel
|
|
PRINTLN("Setting up volume check at TENNIS_ChumashHotel")
|
|
IF (iHour < 6) OR (iHour > 18)
|
|
bAllowTennis = FALSE
|
|
ENDIF
|
|
|
|
// Chumash Hotel
|
|
vVolPt1 = <<-2860.7622, 13.3794, 10.6083>>
|
|
vVolPt2 = <<-2924.0659, 31.5452, 10.6083>>
|
|
fVolWidth = 28.0
|
|
fVolHeight = 5.0
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY)
|
|
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY_WITH_MG)
|
|
eTransMode = TM_ANY
|
|
ENDIF
|
|
// Set the outfit to preload if the launcher is starting up again
|
|
|
|
|
|
IF ePlayer = CHAR_MICHAEL
|
|
IF NOT IS_TENNIS_GLOBAL_FLAG_SET(TGF_PRELOADED_PLAYER_OUTFIT)
|
|
SET_TENNIS_GLOBAL_FLAG(TGF_PRELOADED_PLAYER_OUTFIT)
|
|
PRELOAD_OUTFIT(PLAYER_PED_ID(), OUTFIT_P0_TENNIS)
|
|
CDEBUG2LN(DEBUG_TENNIS, "LAUNCHER_CUSTOM_SCRIPT_INIT :: PRELOAD_OUTFIT(PLAYER_PED_ID(), OUTFIT_P0_TENNIS) ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ELIF ePlayer = CHAR_TREVOR
|
|
IF NOT IS_TENNIS_GLOBAL_FLAG_SET(TGF_PRELOADED_PLAYER_OUTFIT)
|
|
SET_TENNIS_GLOBAL_FLAG(TGF_PRELOADED_PLAYER_OUTFIT)
|
|
PRELOAD_OUTFIT(PLAYER_PED_ID(), OUTFIT_P2_TENNIS)
|
|
CDEBUG2LN(DEBUG_TENNIS, "LAUNCHER_CUSTOM_SCRIPT_INIT :: PRELOAD_OUTFIT(PLAYER_PED_ID(), OUTFIT_P2_TENNIS) ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Check the weather...
|
|
IF (GET_RAIN_LEVEL() + GET_SNOW_LEVEL() > 0.1)
|
|
bAllowTennis = FALSE
|
|
ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
// # 160088 - Rob was experiencing an issue with teleporting from one launcher point to the other.
|
|
// In debug only, allow multiple copies.
|
|
SET_BITMASK_ENUM_AS_ENUM(launcherFlags, LAUNCHER_SHUTDOWN_ALLOW_MULTIPLE_COPIES)
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
PROC LAUNCHER_CUSTOM_RELEASE_ASSETS()
|
|
CDEBUG2LN(DEBUG_TENNIS, "LAUNCHER_CUSTOM_RELEASE_ASSETS called")
|
|
CLEAR_TENNIS_GLOBAL_FLAG(TGF_PRELOADED_PLAYER_OUTFIT)
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
RELEASE_PRELOADED_OUTFIT(PLAYER_PED_ID())
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC LAUNCHER_CUSTOM_CLEANUP()
|
|
CDEBUG2LN(DEBUG_TENNIS, "LAUNCHER_CUSTOM_CLEANUP called")
|
|
CLEAR_TENNIS_GLOBAL_FLAG(TGF_PRELOADED_PLAYER_OUTFIT)
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
RELEASE_PRELOADED_OUTFIT(PLAYER_PED_ID())
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
USING "generic_launcher.sch"
|
|
|