1545 lines
50 KiB
Python
Executable File
1545 lines
50 KiB
Python
Executable File
|
|
// ________________________________________
|
|
//
|
|
// Game: GTAV - Testbed.sc
|
|
// Script: Testbed.sc
|
|
// Author: Robert Wright
|
|
// Description: Testbed mode
|
|
// ___________________________________________
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
USING "globals.sch"
|
|
USING "net_reset_MP_Globals.sch"
|
|
USING "freemode_header.sch"
|
|
USING "net_bot_utils.sch"
|
|
USING "net_bots.sch"
|
|
USING "net_stat_generator.sch"
|
|
USING "net_main_client.sch"
|
|
USING "net_main_server.sch"
|
|
//USING "freemode_stunt_jumps.sch"
|
|
USING "net_vote_at_blip.sch"
|
|
//USING "net_spectator_hud.sch"
|
|
USING "shop_private.sch"
|
|
USING "net_freemode_cut.sch"
|
|
#IF IS_DEBUG_BUILD
|
|
USING "net_debug.sch"
|
|
#ENDIF
|
|
|
|
// ----------------------------------- VARIABLES ---------------------------------------------------------------------
|
|
|
|
REL_GROUP_HASH rgFM_Default
|
|
REL_GROUP_HASH lrgFM_Team[NUM_NETWORK_PLAYERS]
|
|
|
|
BOOL bSetUpPlayer
|
|
//INT iAskForHelpTimer
|
|
|
|
//BOOL iIsNetPlayerOK
|
|
|
|
HEIST_ISLAND_TRAVEL_STRUCT sHeistIslandTravel
|
|
FM_RANDOM_EVENT_LOCAL_SCRIPT_EVENT sFMREScriptEventdata
|
|
|
|
// Widgets & Debug.
|
|
#IF IS_DEBUG_BUILD
|
|
MODEL_NAMES RandomModel
|
|
//For prints
|
|
TEXT_LABEL_31 tl31MissionName = " TestBed"
|
|
// BOOL bHasPlayerSwapped
|
|
BOOL bSetUpUsjs
|
|
// WIDGET_GROUP_ID missionTab
|
|
BOOL bHostEndGameNow
|
|
// BOOL bHostDoNotEndGame
|
|
// BOOL bHostAllLeave
|
|
BOOL bSwapSetUp
|
|
//sequence_index script variable
|
|
SEQUENCE_INDEX SequenceIndex
|
|
|
|
#ENDIF
|
|
|
|
// ----------------------------------- MAIN PROCS ----------------------------------------------------------------------
|
|
//Set Teams to Hate each other
|
|
PROC SET_TEAM_RELATIONSHIPS(RELATIONSHIP_TYPE relType, REL_GROUP_HASH relGroup)
|
|
INT i
|
|
|
|
REPEAT NUM_NETWORK_PLAYERS i
|
|
IF relGroup <> lrgFM_Team[i]
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(relType, relGroup, lrgFM_Team[i])
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
// ----------------------------------- DEBUGGERY ----------------------------------------------------------------------
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
PROC UPDATE_DEBUG
|
|
|
|
ENDPROC
|
|
/// PURPOSE:
|
|
/// Temporary hacky way of dealing with launching mission from debug menu. When the proper mission launching system is in place this will be removed.
|
|
PROC HANDLE_LAUNCHING_MISSIONS()
|
|
// STRING scriptName
|
|
// INT stackSize = MINI_STACK_SIZE
|
|
// SWITCH g_iDebugSelectedMission
|
|
// CASE 0
|
|
// // To keep it from spamming when there is no valid mission
|
|
// EXIT
|
|
// BREAK
|
|
// CASE 1
|
|
// scriptName = "FM_YOGA"
|
|
// BREAK
|
|
// CASE 2
|
|
// scriptName = "GOLF_MP_LAUNCHER"
|
|
// stackSize = DEFAULT_STACK_SIZE
|
|
// BREAK
|
|
// CASE 3
|
|
// scriptName = "RANGE_MODERN_MP"
|
|
// stackSize = SCRIPT_XML_STACK_SIZE
|
|
// BREAK
|
|
// CASE 4
|
|
// scriptName = "AM_Armwrestling"
|
|
// stackSize = SCRIPT_XML_STACK_SIZE
|
|
// BREAK
|
|
// CASE 5
|
|
// scriptName = "FM_Mission_Controller"
|
|
// stackSize = MULTIPLAYER_MISSION_STACK_SIZE
|
|
// BREAK
|
|
// CASE 6
|
|
// scriptName = "TENNIS_NETWORK_MP"
|
|
// stackSize = DEFAULT_STACK_SIZE
|
|
// BREAK
|
|
// CASE 7
|
|
// scriptName = "MPR_race_editor"
|
|
// stackSize = SCRIPT_XML_STACK_SIZE
|
|
// BREAK
|
|
// CASE 8
|
|
// scriptName = "MP_Races"
|
|
// stackSize = DEBUG_SCRIPT_STACK_SIZE
|
|
// BREAK
|
|
// CASE 10
|
|
// scriptName = "POOL_MP_LAUNCHER"
|
|
// stackSize = SCRIPT_XML_STACK_SIZE
|
|
// BREAK
|
|
// CASE 11
|
|
// scriptName = "AM_Darts"
|
|
// stackSize = SCRIPT_XML_STACK_SIZE
|
|
// BREAK
|
|
// DEFAULT
|
|
// NET_PRINT("Tried to start a mission that doesn't exist")PRINTNL()
|
|
// EXIT
|
|
// BREAK
|
|
// ENDSWITCH
|
|
// g_iDebugSelectedMission = 0
|
|
//
|
|
// EXIT
|
|
//
|
|
// IF GET_NUMBER_OF_THREADS_RUNNING_THIS_SCRIPT(scriptName) <= 0
|
|
// IF ARE_STRINGS_EQUAL(scriptName, "FM_Mission_Controller")
|
|
// MP_MISSION_DATA fmmcMissionData
|
|
// fmmcMissionData.iInstanceId = -1
|
|
// IF NET_LOAD_AND_LAUNCH_SCRIPT_FM(scriptName,stackSize, fmmcMissionData)
|
|
// g_iDebugSelectedMission = 0
|
|
// ENDIF
|
|
// ELSE
|
|
// IF NET_LOAD_AND_LAUNCH_SCRIPT(scriptName,stackSize)
|
|
// g_iDebugSelectedMission = 0
|
|
// ENDIF
|
|
// ENDIF
|
|
// ELSE
|
|
// //this script is already running reseting the g_iDebugSelectedMission variable
|
|
// g_iDebugSelectedMission = 0
|
|
// ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC UPDATE_WIDGETS()
|
|
//Update Player Damage Modifier
|
|
IF lw_bSetPlayerWeaponDamageModifier = TRUE
|
|
BROADCAST_UPDATE_PLAYER_WEAPON_DAMAGE_MODIFIER(lw_fPlayerWeaponDamageModifier, ALL_PLAYERS())
|
|
lw_bSetPlayerWeaponDamageModifier = FALSE
|
|
NET_PRINT(" - LES WIDGETS - BROADCAST_UPDATE_PLAYER_WEAPON_DAMAGE_MODIFIER - lw_bSetPlayerWeaponDamageModifier = ") NET_PRINT_FLOAT(lw_fPlayerWeaponDamageModifier) NET_NL()
|
|
ENDIF
|
|
|
|
//Update Ai Damage Modifier
|
|
IF lw_bSetAiDamageModifier = TRUE
|
|
BROADCAST_UPDATE_AI_DAMAGE_MODIFIER(lw_fAiDamageModifier, ALL_PLAYERS())
|
|
lw_bSetAiDamageModifier = FALSE
|
|
NET_PRINT(" - LES WIDGETS - BROADCAST_UPDATE_AI_DAMAGE_MODIFIER - lw_fAiDamageModifier = ") NET_PRINT_FLOAT(lw_fAiDamageModifier) NET_NL()
|
|
ENDIF
|
|
|
|
IF g_bProcessBots
|
|
//PROCESS_BOTS()
|
|
ENDIF
|
|
|
|
|
|
IF GlobalServerBD_FM.bSwapTeams = FALSE
|
|
IF bSwapSetUp = FALSE
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID(), rgFM_Default)
|
|
PRINTSTRING("Set player team: rgFM_Default")PRINTNL()
|
|
bSwapSetUp = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
IF NETWORK_IS_HOST_OF_THIS_SCRIPT()
|
|
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_T, KEYBOARD_MODIFIER_NONE, "FM Swap Teams")
|
|
GlobalServerBD_FM.bSwapTeams = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF bSwapSetUp = TRUE
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID(), lrgFM_Team[PARTICIPANT_ID_TO_INT()])
|
|
PRINTSTRING("Set player team: lrgFM_Team[PARTICIPANT_ID_TO_INT()]")PRINTNL()
|
|
bSwapSetUp = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
IF NETWORK_IS_HOST_OF_THIS_SCRIPT()
|
|
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_T, KEYBOARD_MODIFIER_NONE, "FM Swap Teams")
|
|
GlobalServerBD_FM.bSwapTeams = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
ENDPROC
|
|
|
|
//On all machines populate the sequence index with
|
|
// tasks (this done on all machines so if the ped migrates
|
|
// to another machine while performing the sequence it continues to work properly):
|
|
BOOL bOpenTaskSequence = FALSE
|
|
PROC FILL_SEQUENCE_TASK()
|
|
OPEN_SEQUENCE_TASK(SequenceIndex)
|
|
VECTOR playerCoord = GET_PLAYER_COORDS(PLAYER_ID())
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -43.19, -57.01, 1.0>>, PEDMOVE_SPRINT, 999999, 10.0)
|
|
TASK_PED_SLIDE_TO_COORD(NULL, << -43.19, -57.01, 1.0>>, 0.0)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, playerCoord, PEDMOVE_SPRINT, 999999, 10.0)
|
|
TASK_PED_SLIDE_TO_COORD(NULL, playerCoord, 0.0)
|
|
CLOSE_SEQUENCE_TASK(SequenceIndex)
|
|
bOpenTaskSequence = FALSE
|
|
ENDPROC
|
|
|
|
// On the machine in control of the ped you want to do the
|
|
// sequence, give the ped a task perform sequence and pass
|
|
// in the sequence index from above.
|
|
BOOL bStartTaskSequence = FALSE
|
|
PROC DEBUG_TASK_SEQUENCES()
|
|
// Start sequence if we have control of the focus ped.
|
|
PED_INDEX pedIndex = NETWORK_GET_FOCUS_PED_LOCAL_ID()
|
|
IF pedIndex <> INT_TO_NATIVE(PED_INDEX, -1)
|
|
AND pedIndex <> NULL
|
|
IF NETWORK_HAS_CONTROL_OF_ENTITY(pedIndex)
|
|
TASK_PERFORM_SEQUENCE(pedIndex, SequenceIndex)
|
|
ENDIF
|
|
ENDIF
|
|
bStartTaskSequence = FALSE
|
|
ENDPROC
|
|
|
|
//Add widgets for setting relationship groups
|
|
BOOL bSetToOwnTeam
|
|
PROC ADD_RELATIONSHIP_GROUP_WIDGETS()
|
|
START_WIDGET_GROUP("Player Teams")
|
|
ADD_WIDGET_BOOL("On Own Team", bSetToOwnTeam)
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
//Add widgets for temporary testing purposes
|
|
BOOL bTestRappelTask
|
|
BOOL bCreateTestPed
|
|
BOOL bCreateTestVehicle
|
|
BOOL bPlayAnimOnTestPed
|
|
BOOL bTestPedFleeFromPlayer
|
|
BOOL bTestPedFleeFromPoint
|
|
BOOL bTestPedFollowNavMesh
|
|
BOOL bTestPedGoToCoord
|
|
BOOL bTestPedStandStill
|
|
BOOL bTestPedThrowProjectile
|
|
BOOL bTestPedCombatHatedPeds
|
|
BOOL bTestPedGoToCoordAiming
|
|
BOOL bTestPedPerformSequence
|
|
BOOL bTestPedEnterVehicle
|
|
BOOL bTestPedLeaveVehicle
|
|
BOOL bTestPedDriveVehicleToCoord
|
|
BOOL bTestPedDriveVehicleWander
|
|
BOOL bTestPedDriveVehicleMission
|
|
BOOL bClearTestPedTasks
|
|
BOOL bClearTestPedTasksImmediately
|
|
BOOL bDisplayScriptTaskStatus
|
|
BOOL bGivePedWeapon
|
|
BOOL bGivePedGrenade
|
|
PROC ADD_TASK_DEBUG_WIDGETS()
|
|
START_WIDGET_GROUP("Task Debug Widgets")
|
|
ADD_WIDGET_BOOL("Test Rappel task", bTestRappelTask)
|
|
ADD_WIDGET_BOOL("Create Test Ped", bCreateTestPed)
|
|
ADD_WIDGET_BOOL("Create Test Vehicle", bCreateTestVehicle)
|
|
START_WIDGET_GROUP("Basic Tasks")
|
|
ADD_WIDGET_BOOL("Play Anim On Test Ped", bPlayAnimOnTestPed)
|
|
ADD_WIDGET_BOOL("Make Test Ped Flee From Player", bTestPedFleeFromPlayer)
|
|
ADD_WIDGET_BOOL("Make Test Ped Flee From Point", bTestPedFleeFromPoint)
|
|
ADD_WIDGET_BOOL("Make Test Ped Follow Nav Mesh", bTestPedFollowNavMesh)
|
|
ADD_WIDGET_BOOL("Make Test Ped Go To Coord", bTestPedGoToCoord)
|
|
ADD_WIDGET_BOOL("Make Test Ped Stand Still", bTestPedStandStill)
|
|
ADD_WIDGET_BOOL("Make Test Ped Throw Projectile", bTestPedThrowProjectile)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Combat Tasks")
|
|
ADD_WIDGET_BOOL("Make Test Ped Combat Hated Peds", bTestPedCombatHatedPeds)
|
|
ADD_WIDGET_BOOL("Make Test Ped Go To Coord Aiming", bTestPedGoToCoordAiming)
|
|
ADD_WIDGET_BOOL("Make Test Ped Perform Sequence", bTestPedPerformSequence)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Vehicle Tasks")
|
|
ADD_WIDGET_BOOL("Make Test Ped Enter Vehicle", bTestPedEnterVehicle)
|
|
ADD_WIDGET_BOOL("Make Test Ped Leave Vehicle", bTestPedLeaveVehicle)
|
|
ADD_WIDGET_BOOL("Make Test Drive Vehicle To Coord", bTestPedDriveVehicleToCoord)
|
|
ADD_WIDGET_BOOL("Make Test Ped Drive Vehicle Wander", bTestPedDriveVehicleWander)
|
|
ADD_WIDGET_BOOL("Make Test Ped Follow Vehicle Mission", bTestPedDriveVehicleMission)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Inventory")
|
|
ADD_WIDGET_BOOL("Give Test Ped Weapon", bGivePedWeapon)
|
|
ADD_WIDGET_BOOL("Give Test Ped Grenade", bGivePedGrenade)
|
|
STOP_WIDGET_GROUP()
|
|
ADD_WIDGET_BOOL("Clear test ped tasks", bClearTestPedTasks)
|
|
ADD_WIDGET_BOOL("Clear test ped tasks immediately", bClearTestPedTasksImmediately)
|
|
ADD_WIDGET_BOOL("Display Script Task Status", bDisplayScriptTaskStatus)
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
BOOL bTeamDoToggle
|
|
// //Process team relationships
|
|
PROC PROCESS_RELATIONSHIP_GROUPS()
|
|
IF bSetToOwnTeam=TRUE
|
|
IF bTeamDoToggle = FALSE
|
|
IF GET_PLAYER_TEAM(PLAYER_ID()) <> 1
|
|
AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
// NET_PRINT("PARTICIPANT_ID_TO_INT() ")NET_PRINT_INT(PARTICIPANT_ID_TO_INT())
|
|
SET_PLAYER_TEAM(PLAYER_ID(), 1)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID(), lrgFM_Team[1])
|
|
NET_PRINT(" -----> PLAYER SET TO OWN TEAM <----- \n")
|
|
bTeamDoToggle = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELIF bTeamDoToggle
|
|
IF GET_PLAYER_TEAM(PLAYER_ID()) <> -1
|
|
AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
bTeamDoToggle = FALSE
|
|
SET_PLAYER_TEAM(PLAYER_ID(), -1)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID(), rgFM_Default)
|
|
NET_PRINT(" -----> PLAYER SET TO DEFAULT TEAM <----- \n")
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//Process temporary test code
|
|
NETWORK_INDEX TestPed
|
|
NETWORK_INDEX TestVehicle
|
|
ROPE_INDEX TestRopeID
|
|
PROC PROCESS_TASK_DEBUG()
|
|
|
|
IF bTestRappelTask
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<29.23, 50, 11>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 286)
|
|
TestRopeID = ADD_ROPE(<<30, 50.75, 10.7>>, <<0,90,0>>, 20.0, PHYSICS_ROPE_DEFAULT)
|
|
TASK_RAPPEL_DOWN_WALL(PLAYER_PED_ID(), <<29.23, 50, 12>>, <<30, 50.75, 10.7>>, 2.5, TestRopeID)
|
|
bTestRappelTask = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ROPE_EXIST(TestRopeID)
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
SCRIPTTASKSTATUS iStatus = GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_RAPPEL_DOWN_WALL)
|
|
IF iStatus != WAITING_TO_START_TASK AND iStatus != PERFORMING_TASK
|
|
DELETE_ROPE(TestRopeID)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bCreateTestPed
|
|
IF REQUEST_LOAD_MODEL(A_M_Y_METHHEAD_01)
|
|
IF CREATE_NET_PED(TestPed, PEDTYPE_CIVMALE, A_M_Y_METHHEAD_01, <<14,-12,1>>, 180, FALSE)
|
|
|
|
bCreateTestPed = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bCreateTestVehicle
|
|
IF REQUEST_LOAD_MODEL(TAILGATER)
|
|
IF CREATE_NET_VEHICLE(TestVehicle, TAILGATER, <<6,-22,1>>, 0, FALSE)
|
|
bCreateTestVehicle = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//
|
|
// IF bPlayAnimOnTestPed
|
|
// IF NETWORK_DOES_NETWORK_ID_EXIST(TestPed)
|
|
// REQUEST_ANIM_DICT("mp_arresting")
|
|
// WHILE NOT HAS_ANIM_DICT_LOADED("mp_arresting")
|
|
// WAIT(0)
|
|
// ENDWHILE
|
|
// IF NOT IS_ENTITY_DEAD(NET_TO_PED(TestPed))
|
|
// TASK_PLAY_ANIM(NET_TO_PED(TestPed), "mp_arresting", "guard_handsup_loop", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING)
|
|
// bPlayAnimOnTestPed = FALSE
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
IF NETWORK_DOES_NETWORK_ID_EXIST(TestPed)
|
|
IF NOT IS_ENTITY_DEAD(NET_TO_PED(TestPed))
|
|
|
|
IF NETWORK_HAS_CONTROL_OF_ENTITY(NET_TO_PED(TestPed))
|
|
|
|
WEAPON_TYPE weaponType
|
|
|
|
IF bGivePedWeapon
|
|
weaponType = WEAPONTYPE_PISTOL
|
|
ELSE
|
|
IF bGivePedGrenade
|
|
weaponType = WEAPONTYPE_GRENADE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bGivePedWeapon OR bGivePedGrenade
|
|
IF NOT HAS_PED_GOT_WEAPON(NET_TO_PED(TestPed), weaponType)
|
|
GIVE_WEAPON_TO_PED(NET_TO_PED(TestPed), weaponType, -1, FALSE)
|
|
ENDIF
|
|
SET_CURRENT_PED_WEAPON(NET_TO_PED(TestPed), weaponType, TRUE)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF bTestPedFleeFromPlayer
|
|
TASK_SMART_FLEE_PED(NET_TO_PED(TestPed), PLAYER_PED_ID(), 100.0, 5000)
|
|
bTestPedFleeFromPlayer = FALSE
|
|
ENDIF
|
|
|
|
IF bTestPedFleeFromPoint
|
|
TASK_SMART_FLEE_COORD(NET_TO_PED(TestPed), <<14,-12,1>>, 100.0, 5000)
|
|
bTestPedFleeFromPoint = FALSE
|
|
ENDIF
|
|
|
|
IF bTestPedFollowNavMesh
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NET_TO_PED(TestPed), <<14,-12,1>>, PEDMOVE_WALK)
|
|
bTestPedFollowNavMesh = FALSE
|
|
ENDIF
|
|
IF bTestPedGoToCoord
|
|
TASK_GO_STRAIGHT_TO_COORD(NET_TO_PED(TestPed), <<14,-12,1>>, PEDMOVE_WALK)
|
|
bTestPedGoToCoord = FALSE
|
|
ENDIF
|
|
IF bTestPedStandStill
|
|
TASK_STAND_STILL(NET_TO_PED(TestPed), 5000)
|
|
bTestPedStandStill = FALSE
|
|
ENDIF
|
|
IF bTestPedThrowProjectile
|
|
TASK_THROW_PROJECTILE(NET_TO_PED(TestPed), <<13,-20,1>>)
|
|
bTestPedThrowProjectile = FALSE
|
|
ENDIF
|
|
|
|
IF bTestPedCombatHatedPeds
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(NET_TO_PED(TestPed), RELGROUPHASH_HATES_PLAYER)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID(), RELGROUPHASH_PLAYER)
|
|
TASK_COMBAT_HATED_TARGETS_AROUND_PED(NET_TO_PED(TestPed), 25.0)
|
|
bTestPedCombatHatedPeds = FALSE
|
|
ENDIF
|
|
IF bTestPedGoToCoordAiming
|
|
TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NET_TO_PED(TestPed), <<14,-12,1>>, <<14,-12,1>>, PEDMOVE_WALK, FALSE)
|
|
bTestPedGoToCoordAiming = FALSE
|
|
ENDIF
|
|
IF bTestPedPerformSequence
|
|
TASK_PERFORM_SEQUENCE(NET_TO_PED(TestPed), SequenceIndex)
|
|
bTestPedPerformSequence = FALSE
|
|
ENDIF
|
|
|
|
IF NETWORK_DOES_NETWORK_ID_EXIST(TestVehicle)
|
|
IF NOT IS_ENTITY_DEAD(NET_TO_VEH(TestVehicle))
|
|
IF bTestPedEnterVehicle
|
|
TASK_ENTER_VEHICLE(NET_TO_PED(TestPed), NET_TO_VEH(TestVehicle))
|
|
bTestPedEnterVehicle = FALSE
|
|
ENDIF
|
|
IF bTestPedLeaveVehicle
|
|
TASK_LEAVE_ANY_VEHICLE(NET_TO_PED(TestPed))
|
|
bTestPedLeaveVehicle = FALSE
|
|
ENDIF
|
|
IF bTestPedDriveVehicleToCoord
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NET_TO_PED(TestPed),
|
|
NET_TO_VEH(TestVehicle),
|
|
<<6,-22,1>>,
|
|
12.0,
|
|
DRIVINGSTYLE_NORMAL,
|
|
GET_ENTITY_MODEL(GET_VEHICLE_PED_IS_IN(NET_TO_PED(TestPed))),
|
|
DRIVINGMODE_AVOIDCARS,
|
|
1,
|
|
1)
|
|
bTestPedDriveVehicleToCoord = FALSE
|
|
ENDIF
|
|
IF bTestPedDriveVehicleWander
|
|
TASK_VEHICLE_DRIVE_WANDER(NET_TO_PED(TestPed),
|
|
NET_TO_VEH(TestVehicle),
|
|
12.0,
|
|
DRIVINGMODE_AVOIDCARS)
|
|
bTestPedDriveVehicleWander = FALSE
|
|
ENDIF
|
|
IF bTestPedDriveVehicleMission
|
|
TASK_VEHICLE_MISSION_COORS_TARGET(NET_TO_PED(TestPed),
|
|
NET_TO_VEH(TestVehicle),
|
|
<<6,-22,1>>,
|
|
MISSION_GOTO,
|
|
10.0,
|
|
DRIVINGMODE_AVOIDCARS,
|
|
-1,
|
|
-1)
|
|
bTestPedDriveVehicleMission = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bClearTestPedTasks
|
|
IF NETWORK_DOES_NETWORK_ID_EXIST(TestPed)
|
|
IF NOT IS_ENTITY_DEAD(NET_TO_PED(TestPed))
|
|
CLEAR_PED_TASKS(NET_TO_PED(TestPed))
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(NET_TO_PED(TestPed), RELGROUPHASH_PLAYER)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID(), rgFM_Default)
|
|
bClearTestPedTasks = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bClearTestPedTasksImmediately
|
|
IF NETWORK_DOES_NETWORK_ID_EXIST(TestPed)
|
|
IF NOT IS_ENTITY_DEAD(NET_TO_PED(TestPed))
|
|
CLEAR_PED_TASKS_IMMEDIATELY(NET_TO_PED(TestPed))
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(NET_TO_PED(TestPed), RELGROUPHASH_PLAYER)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID(), rgFM_Default)
|
|
bClearTestPedTasksImmediately = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bDisplayScriptTaskStatus
|
|
IF NETWORK_DOES_NETWORK_ID_EXIST(TestPed)
|
|
IF NOT IS_ENTITY_DEAD(NET_TO_PED(TestPed))
|
|
SCRIPTTASKSTATUS iStatus = GET_SCRIPT_TASK_STATUS(NET_TO_PED(TestPed), SCRIPT_TASK_PLAY_ANIM)
|
|
IF iStatus = WAITING_TO_START_TASK
|
|
NET_PRINT("TASK WAITING TO START") NET_NL()
|
|
ELSE
|
|
IF iStatus = PERFORMING_TASK
|
|
NET_PRINT("TASK RUNNING") NET_NL()
|
|
ELSE
|
|
NET_PRINT("TASK NOT RUNNING") NET_NL()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// PROC CREATE_TEST_SCRIPT_WIDGETS()
|
|
//
|
|
// INT iPlayer
|
|
// TEXT_LABEL_63 tl63
|
|
//
|
|
// IF NOT DOES_WIDGET_GROUP_EXIST(missionTab)
|
|
//
|
|
// missionTab = START_WIDGET_GROUP(tl31MissionName)
|
|
// ADD_WIDGET_BOOL( "bHasPlayerSwapped", bHasPlayerSwapped)
|
|
// ADD_WIDGET_BOOL( "bSetUpUsjs", bSetUpUsjs)
|
|
//
|
|
// START_WIDGET_GROUP( "Les Widgets")
|
|
// ADD_WIDGET_FLOAT_SLIDER("Player Weapon Damage Modifier", lw_fPlayerWeaponDamageModifier, 0.0, 100.0, 0.1)
|
|
// ADD_WIDGET_BOOL( "Set Player Weapon Damage Modifier", lw_bSetPlayerWeaponDamageModifier)
|
|
// STOP_WIDGET_GROUP()
|
|
//
|
|
//
|
|
// // Gameplay debug, sever only.
|
|
// START_WIDGET_GROUP("Server Only Gameplay")
|
|
// ADD_WIDGET_BOOL("All: Swap Teams", GlobalServerBD_FM.bSwapTeams)
|
|
// ADD_WIDGET_BOOL("All: End Match", bHostEndGameNow)
|
|
// ADD_WIDGET_BOOL("All: End Session", bHostAllLeave)
|
|
// ADD_WIDGET_BOOL("bHostDoNotEndGame", bHostDoNotEndGame)
|
|
// STOP_WIDGET_GROUP()
|
|
//
|
|
// // Data about the server
|
|
// START_WIDGET_GROUP("Server BD")
|
|
// ADD_WIDGET_INT_SLIDER("S. Game state", GlobalServerBD.iServerGameState,-1, HIGHEST_INT,1)
|
|
// STOP_WIDGET_GROUP()
|
|
//
|
|
// // Data about the clients. * = You.
|
|
// START_WIDGET_GROUP("Client BD")
|
|
// REPEAT NUM_NETWORK_PLAYERS iPlayer
|
|
// tl63 = "Player "
|
|
// tl63 += iPlayer
|
|
// IF iPlayer = PARTICIPANT_ID_TO_INT()
|
|
// tl63 += "*"
|
|
// ENDIF
|
|
// START_WIDGET_GROUP(tl63)
|
|
// ADD_WIDGET_INT_SLIDER("Game state", GlobalplayerBD[iPlayer].iGameState,-1, HIGHEST_INT,1)
|
|
//
|
|
// START_WIDGET_GROUP("Weapon swapping")
|
|
// ADD_WIDGET_INT_READ_ONLY("State", GlobalplayerBD[iPlayer].weaponSwappingData.iState)
|
|
// ADD_WIDGET_INT_READ_ONLY("Part interacting with", GlobalplayerBD[iPlayer].weaponSwappingData.iPlayerInteractingWith)
|
|
// ADD_WIDGET_INT_READ_ONLY("Ammo", GlobalplayerBD[iPlayer].weaponSwappingData.iAmmo)
|
|
// STOP_WIDGET_GROUP()
|
|
// STOP_WIDGET_GROUP()
|
|
// ENDREPEAT
|
|
//
|
|
// STOP_WIDGET_GROUP()
|
|
//
|
|
// START_WIDGET_GROUP("Debug Task Sequence")
|
|
// ADD_WIDGET_BOOL("Open", bOpenTaskSequence)
|
|
// ADD_WIDGET_BOOL("Start", bStartTaskSequence)
|
|
// STOP_WIDGET_GROUP()
|
|
//
|
|
// ADD_RELATIONSHIP_GROUP_WIDGETS()
|
|
//
|
|
// CREATE_BOT_WIDGET(TRUE)
|
|
//
|
|
// ADD_TASK_DEBUG_WIDGETS()
|
|
//
|
|
// Create_Main_Generic_Client_Widgets()
|
|
// Create_Main_Generic_Server_Widgets()
|
|
//
|
|
// STOP_WIDGET_GROUP()
|
|
//
|
|
// SET_CURRENT_WIDGET_GROUP(missionTab)
|
|
// ADD_SPAWNING_WIDGETS()
|
|
// CLEAR_CURRENT_WIDGET_GROUP(missionTab)
|
|
// ENDIF
|
|
// ENDPROC
|
|
#ENDIF
|
|
|
|
// ----------------------------------- STAGE FUNCTIONS
|
|
PROC SET_CLIENT_GAME_STATE(INT iStage)
|
|
SWITCH iStage
|
|
CASE MAIN_GAME_STATE_INI
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_INI ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_WAIT
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_WAIT ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_INITIAL_CAMERA_WORK
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_INITIAL_CAMERA_WORK ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_FIRST_SPAWN
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_FIRST_SPAWN ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_RUNNING
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_RUNNING ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_END
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_END ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_ALL_LEAVE
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_ALL_LEAVE ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_SWAP_TEAM
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_SWAP_TEAM ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_CHOOSE_ALTERNATIVE_TEAM
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_CHOOSE_ALTERNATIVE_TEAM ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_RUN_LOBBY
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_RUN_LOBBY ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_HOLD_FOR_TRANSITION
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_HOLD_FOR_TRANSITION ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_RUN_TRANSITION
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_CLIENT_GAME_STATE >>> MAIN_GAME_STATE_RUN_TRANSITION ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
|
|
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD
|
|
SCRIPT_ASSERT("SET_CLIENT_GAME_STATE Deathmath.sc invalid option")
|
|
#ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
GlobalplayerBD[NATIVE_TO_INT(PLAYER_ID())].iGameState = iStage
|
|
ENDPROC
|
|
|
|
PROC SET_SERVER_GAME_STATE(INT iStage)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
NET_SCRIPT_HOST_ONLY_COMMAND_ASSERT("SET_SERVER_GAME_STATE Called on client by mistake")
|
|
#ENDIF
|
|
|
|
SWITCH iStage
|
|
CASE MAIN_GAME_STATE_INI
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_SERVER_GAME_STATE >>> MAIN_GAME_STATE_INI ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_WAIT
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_SERVER_GAME_STATE >>> MAIN_GAME_STATE_WAIT ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_INITIAL_CAMERA_WORK
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_SERVER_GAME_STATE >>> MAIN_GAME_STATE_INITIAL_CAMERA_WORK ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_FIRST_SPAWN
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_SERVER_GAME_STATE >>> MAIN_GAME_STATE_FIRST_SPAWN ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_RUNNING
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_SERVER_GAME_STATE >>> MAIN_GAME_STATE_RUNNING ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_END
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_SERVER_GAME_STATE >>> MAIN_GAME_STATE_END ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_ALL_LEAVE
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_SERVER_GAME_STATE >>> MAIN_GAME_STATE_ALL_LEAVE ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_SWAP_TEAM
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_SERVER_GAME_STATE >>> MAIN_GAME_STATE_SWAP_TEAM ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_CHOOSE_ALTERNATIVE_TEAM
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_SERVER_GAME_STATE >>> MAIN_GAME_STATE_CHOOSE_ALTERNATIVE_TEAM ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MAIN_GAME_STATE_RUN_LOBBY
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_TIME() NET_PRINT_STRINGS("SET_SERVER_GAME_STATE >>> MAIN_GAME_STATE_RUN_LOBBY ", tl31MissionName) NET_NL()
|
|
#ENDIF
|
|
BREAK
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD
|
|
SCRIPT_ASSERT("SET_SERVER_GAME_STATE Deathmath.sc invalid option")
|
|
#ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
GlobalServerBD.iServerGameState = iStage
|
|
ENDPROC
|
|
|
|
//PROC RESET_FREEMODE_MISSION_PLAY_REQUEST_ARRAY()
|
|
// INT i
|
|
// FOR i = 0 TO (MAX_PENDING_PLAY_REQUESTS -1)
|
|
// g_sFM_play_request_detail[i].iMissionType = -1
|
|
// g_sFM_play_request_detail[i].iCreatorID = -1
|
|
// g_sFM_play_request_detail[i].iVariation = -1
|
|
// g_sFM_play_request_detail[i].vLocation = <<0.0, 0.0, 0.0>>
|
|
// g_sFM_play_request_detail[i].piFromPlayer = INT_TO_NATIVE(PLAYER_INDEX, -1)
|
|
// g_sFM_play_request_detail[i].iBitSet = 0
|
|
// ENDFOR
|
|
// g_iNumberStoredMessageRequests = 0
|
|
//ENDPROC
|
|
|
|
|
|
FUNC BOOL PROCESS_PRE_GAME()
|
|
INT i
|
|
|
|
NET_NL()NET_PRINT("PROCESS PREGAME - FREEMODE ")
|
|
// For this game, we can have 32 players. Other scripts may only have 8,12,16,24 ect players.
|
|
//RESET_FREEMODE_MISSION_PLAY_REQUEST_ARRAY()
|
|
|
|
// This makes sure the net script is active, waits untull it is.
|
|
HANDLE_NET_SCRIPT_INITIALISATION(FALSE, ENUM_TO_INT(GAMEMODE_FM))
|
|
|
|
RESERVE_NETWORK_MISSION_PEDS(1)
|
|
RESERVE_NETWORK_MISSION_VEHICLES(1)
|
|
|
|
// register the common broadcast data
|
|
NETWORK_REGISTER_HOST_BROADCAST_VARIABLES(GlobalServerBD, SIZE_OF(GlobalServerBD))
|
|
NETWORK_REGISTER_PLAYER_BROADCAST_VARIABLES(GlobalplayerBD, SIZE_OF(GlobalplayerBD))
|
|
|
|
NETWORK_REGISTER_HOST_BROADCAST_VARIABLES(GlobalServerBD_FM, SIZE_OF(GlobalServerBD_FM))
|
|
NETWORK_REGISTER_PLAYER_BROADCAST_VARIABLES(GlobalplayerBD_FM, SIZE_OF(GlobalplayerBD_FM))
|
|
|
|
// For the Missions Shared arrays
|
|
NETWORK_REGISTER_HOST_BROADCAST_VARIABLES(GlobalServerBD_MissionsShared, SIZE_OF(GlobalServerBD_MissionsShared))
|
|
|
|
// KGM: Wait for the first network broadcast before moving on
|
|
// (after Initialisation and Broadcast Variable Registration - Hosts can do this too)
|
|
IF NOT Wait_For_First_Network_Broadcast()
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
SET_PLAYER_DEFAULT_FRIENDLY_FIRE_OPTION() //NETWORK_SET_FRIENDLY_FIRE_OPTION(TRUE)
|
|
|
|
//Clean up every thing before the initilisation
|
|
RESET_GlobalplayerBD_FM_2()
|
|
//Register the Vote Boradcast data
|
|
NETWORK_REGISTER_PLAYER_BROADCAST_VARIABLES(GlobalplayerBD_FM_2, SIZE_OF(GlobalplayerBD_FM_2))
|
|
|
|
// This script will not be paused if another script calls PAUSE_GAME
|
|
SET_THIS_SCRIPT_CAN_BE_PAUSED(FALSE)
|
|
SET_INSTANCE_PRIORITY_MODE(INSTANCE_MODE_MULTIPLAYER)
|
|
|
|
//Clear the time
|
|
SET_TIME_OF_DAY(TIME_OFF, TRUE)
|
|
INIT_STATS()
|
|
|
|
SET_MAX_WANTED_LEVEL(6)
|
|
SET_WANTED_LEVEL_MULTIPLIER(0.0)
|
|
SET_CREATE_RANDOM_COPS(TRUE)
|
|
SET_DITCH_POLICE_MODELS(FALSE)
|
|
|
|
// switch on emergency services in freemode
|
|
ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, TRUE)
|
|
ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE)
|
|
ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE)
|
|
ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, TRUE)
|
|
ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE)
|
|
ENABLE_DISPATCH_SERVICE(DT_POLICE_RIDERS, TRUE)
|
|
ENABLE_DISPATCH_SERVICE(DT_POLICE_VEHICLE_REQUEST, TRUE)
|
|
ENABLE_DISPATCH_SERVICE(DT_POLICE_ROAD_BLOCK, TRUE)
|
|
ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, TRUE)
|
|
ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, TRUE)
|
|
ENABLE_DISPATCH_SERVICE(DT_SWAT_HELICOPTER, TRUE)
|
|
|
|
// In FM, make sure each player has their own colour, and not the common
|
|
// team colour.
|
|
USE_PLAYER_COLOUR_INSTEAD_OF_TEAM_COLOUR(TRUE)
|
|
|
|
// Setup rel groups
|
|
ADD_RELATIONSHIP_GROUP("rgFM_Default", rgFM_Default)
|
|
|
|
REPEAT NUM_NETWORK_PLAYERS i
|
|
TEXT_LABEL_63 tlRelGroup
|
|
tlRelGroup = "lrgFM_Team"
|
|
tlRelGroup += i
|
|
ADD_RELATIONSHIP_GROUP(tlRelGroup, lrgFM_Team[i])
|
|
ENDREPEAT
|
|
|
|
SET_TEAM_RELATIONSHIPS(ACQUAINTANCE_TYPE_PED_HATE, rgFM_Default)
|
|
REPEAT NUM_NETWORK_PLAYERS i
|
|
SET_TEAM_RELATIONSHIPS(ACQUAINTANCE_TYPE_PED_HATE, lrgFM_Team[i])
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, lrgFM_Team[i], rgFM_Default)
|
|
ENDREPEAT
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID(), rgFM_Default) //lrgFM_Team[PARTICIPANT_ID_TO_INT()]) //Put all players on default team to start with rgFM_Default#
|
|
//SET_CAN_ATTACK_FRIENDLY(PLAYER_PED_ID(), TRUE, TRUE)
|
|
PRINTLN("SET_CAN_ATTACK_FRIENDLY")
|
|
//SET_PED_CAN_BE_TARGETTED_BY_TEAM(PLAYER_PED_ID(), -1, TRUE)
|
|
ENDIF
|
|
|
|
UPDATE_ACTIVE_PLAYERS_IN_MP_LAUNCH_SCRIPT()
|
|
IF NETWORK_IS_HOST_OF_THIS_SCRIPT()
|
|
//NETWORK_SET_WEATHER("SMOG", 0, TRUE)
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT_STRING_INT("NATIVE_TO_INT(PLAYER_ID()) = ", NATIVE_TO_INT(PLAYER_ID())) NET_NL()
|
|
IF NOT CREATE_NETWORK_BOTS_RELATIONSHIP_GROUPS()
|
|
SCRIPT_ASSERT("NOT CREATE_NETWORK_BOTS_RELATIONSHIP_GROUPS")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
// Reset kill and death counters when player joins (CS)
|
|
INITIALISE_KILL_AND_DEATH_COUNTERS()
|
|
|
|
// Speirs added 07/07/11 to fix 153666
|
|
// Set frontend player blip name
|
|
BLIP_INDEX playerBlip = GET_MAIN_PLAYER_BLIP_ID()
|
|
IF DOES_BLIP_EXIST(playerBlip)
|
|
SET_BLIP_NAME_FROM_TEXT_FILE(playerBlip, "BLIP_PLAYER")
|
|
ENDIF
|
|
|
|
//Set it so people can attack me.
|
|
SET_EVERYONE_CAN_KILL_LOCAL_PLAYER(TRUE)
|
|
PRINTLN("Calling SET_EVERYONE_CAN_KILL_LOCAL_PLAYER")
|
|
|
|
SET_CLIENT_GAME_STATE(MAIN_GAME_STATE_INI)
|
|
INIT_STAT_TIMERS()
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
PROC MAINTAIN_CLEAN_UP_WHEN_NOT_ON_A_MISSION()
|
|
IF g_bFreemodeCleanUpAfterMission = TRUE
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID(), rgFM_Default) //lrgFM_Team[PARTICIPANT_ID_TO_INT()]) //Put all players on default team to start with rgFM_Default#
|
|
//SET_CAN_ATTACK_FRIENDLY(PLAYER_PED_ID(), TRUE, TRUE)
|
|
PRINTLN("SET_CAN_ATTACK_FRIENDLY Called")
|
|
//SET_PED_CAN_BE_TARGETTED_BY_TEAM(PLAYER_PED_ID(), -1, TRUE)
|
|
|
|
PRINTLN("MAINTAIN_CLEAN_UP_WHEN_NOT_ON_A_MISSION() Called")
|
|
g_bFreemodeCleanUpAfterMission = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC MAINTAIN_FREEMODE_DPAD_DOWN()
|
|
IF MAINTAIN_DPADDOWN_CHECK()
|
|
IF GET_DPADDOWN_ACTIVATION_STATE() != DPADDOWN_NONE
|
|
IF HAS_NET_TIMER_EXPIRED_ONE_FRAME(MPGlobalsHud.iOnMissionOverlayTimer, DPAD_DOWN_DISPLAY_TIME)
|
|
SET_DPADDOWN_ACTIVATION_STATE(DPADDOWN_NONE)
|
|
DPADDOWN_ONE_TIME_ACTIVE(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
////PURPOSE: Does a full 32 player repeat
|
|
//PROC MAINTAIN_32_PLYR_REPEAT()
|
|
// INT iParticipant
|
|
// PLAYER_INDEX PlayerId
|
|
// INT iCount
|
|
//
|
|
// #IF IS_DEBUG_BUILD
|
|
// ADD_SCRIPT_PROFILE_PRE_LOOP_MARKER("loop")
|
|
// #ENDIF
|
|
//
|
|
// REPEAT NETWORK_GET_MAX_NUM_PARTICIPANTS() iCount
|
|
//
|
|
// #IF IS_DEBUG_BUILD
|
|
// ADD_SCRIPT_PROFILE_MARKER("START OF REPEAT", 0)
|
|
// #ENDIF
|
|
//
|
|
// // if we are simulating max number of players then set the player id here
|
|
// iParticipant = iCount
|
|
// PlayerID = INVALID_PLAYER_INDEX()
|
|
// IF NETWORK_IS_PARTICIPANT_ACTIVE(INT_TO_PARTICIPANTINDEX(iParticipant))
|
|
// PlayerId = NETWORK_GET_PLAYER_INDEX(INT_TO_PARTICIPANTINDEX(iParticipant))
|
|
//
|
|
// MPGlobals.vWarpRequest[iCount] = <<0.0, 0.0, 0.0>> // reset these each frame
|
|
//
|
|
// IF IS_NET_PLAYER_OK(PlayerId, FALSE, FALSE)
|
|
//
|
|
// #IF IS_DEBUG_BUILD
|
|
// ADD_SCRIPT_PROFILE_MARKER("IS_NET_PLAYER_OK", 1)
|
|
// #ENDIF
|
|
//
|
|
// // INT iPlayersGlobalInt = NATIVE_TO_INT(PlayerId)
|
|
// // INT iLocalPlayersIdtoGlobalInt = NETWORK_PLAYER_ID_TO_INT()
|
|
//
|
|
// // --------------------------------------------------------------------------------//
|
|
// // Blips
|
|
// // --------------------------------------------------------------------------------//
|
|
//
|
|
// // Do blips for players.
|
|
// HANDLE_FM_PLAYER_BLIPS(iParticipant)
|
|
// #IF IS_DEBUG_BUILD
|
|
// ADD_SCRIPT_PROFILE_MARKER("HANDLE_PLAYER_BLIPS", 7)
|
|
// #ENDIF
|
|
//
|
|
// // -----------------------------------------------------------------------------------------------//
|
|
// // These procs and funcs were previously repeats that we had to move in here.
|
|
// // They set a temp flag that in turn sets a global flag for a specific command to check against.
|
|
// // -----------------------------------------------------------------------------------------------//
|
|
// IF PLAYER_ID() <> PlayerId
|
|
//
|
|
// // Check if I can offer this player my weapon
|
|
// CHECK_PLAYER_WEAPON_OFFERING(iParticipant, PlayerId)
|
|
// #IF IS_DEBUG_BUILD
|
|
// ADD_SCRIPT_PROFILE_MARKER("weapon swap", 17)
|
|
// #ENDIF
|
|
// ENDIF
|
|
//
|
|
// //DISPLAY_WEAPON_SWAP_HUD(iParticipant)
|
|
// ENDIF
|
|
// ENDIF
|
|
//
|
|
// ENDREPEAT
|
|
//
|
|
// #IF IS_DEBUG_BUILD
|
|
// ADD_SCRIPT_PROFILE_POST_LOOP_MARKER()
|
|
// #ENDIF
|
|
//
|
|
//ENDPROC
|
|
|
|
PROC SETUP_FM_USJS()
|
|
DISABLE_STUNT_JUMP_SET(ciSINGLE_PLAYER_SJS_GROUP)
|
|
PRINTLN("MPUSJ - DISABLE_STUNT_JUMP_SET(ciSINGLE_PLAYER_SJS_GROUP)")
|
|
ENABLE_STUNT_JUMP_SET(ciFREEMODE_PLAYER_SJS_GROUP)
|
|
PRINTLN("MPUSJ - ENABLE_STUNT_JUMP_SET(ciFREEMODE_PLAYER_SJS_GROUP)")
|
|
ENDPROC
|
|
|
|
PROC ACTIVATE_SHOPS_IN_FM()
|
|
SET_SHOP_IS_AVAILABLE(CLOTHES_SHOP_L_01_SC, TRUE)
|
|
SET_SHOP_IS_AVAILABLE(CLOTHES_SHOP_M_01_SM, TRUE)
|
|
SET_SHOP_IS_AVAILABLE(CLOTHES_SHOP_H_01_BH, TRUE)
|
|
SET_SHOP_IS_AVAILABLE(HAIRDO_SHOP_01_BH, TRUE)
|
|
SET_SHOP_IS_AVAILABLE(HAIRDO_SHOP_02_SC, TRUE)
|
|
SET_SHOP_IS_AVAILABLE(TATTOO_PARLOUR_01_HW, TRUE)
|
|
SET_SHOP_IS_AVAILABLE(CARMOD_SHOP_01_AP, TRUE)
|
|
SET_SHOP_IS_AVAILABLE(GUN_SHOP_01_DT, TRUE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_L_01_SC, FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_01_SM, FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_H_01_BH, FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(HAIRDO_SHOP_01_BH, FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(HAIRDO_SHOP_02_SC, FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(TATTOO_PARLOUR_01_HW, FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CARMOD_SHOP_01_AP, FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(GUN_SHOP_01_DT, FALSE)
|
|
ENDPROC
|
|
|
|
|
|
PROC SCRIPT_CLEANUP()
|
|
|
|
// Cleanup Widgets
|
|
#IF IS_DEBUG_BUILD
|
|
// Keith 14/12/11: Terminate The Generic Client and Server Routines
|
|
Destroy_Main_Generic_Client_Widgets()
|
|
Destroy_Main_Generic_Server_Widgets()
|
|
|
|
g_MainMissionScriptID = INT_TO_NATIVE(THREADID, -1)
|
|
g_bMainMissionScriptActive = FALSE
|
|
CLEANUP_BOTS()
|
|
|
|
NET_PRINT("...KGM MP: Cleaning Up MPTESTBED") NET_NL()
|
|
#ENDIF
|
|
|
|
Cleanup_Main_Generic_Client()
|
|
|
|
// Clean up police scanner radio. Allow ambient reports again.
|
|
SET_AUDIO_FLAG("OnlyAllowScriptTriggerPoliceScanner", FALSE)
|
|
|
|
CLEANUP_FM_BLIPS()
|
|
|
|
CLEAR_HELP()
|
|
CLEAR_PRINTS()
|
|
|
|
|
|
// TERMINATE_THIS_MULTIPLAYER_THREAD()
|
|
Cleanup_Main_Generic_Client() // call this just before the terminate (as it wipes the globals)
|
|
TERMINATE_THIS_MULTIPLAYER_THREAD_NO_ARGS()
|
|
ENDPROC
|
|
|
|
FUNC INT GET_NUM_FREEMODE_PLAYERS()
|
|
INT iParticipant
|
|
INT iPlayerCount
|
|
REPEAT NETWORK_GET_MAX_NUM_PARTICIPANTS() iParticipant
|
|
IF NETWORK_IS_PARTICIPANT_ACTIVE(INT_TO_PARTICIPANTINDEX(iParticipant))
|
|
|
|
iPlayerCount++
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN iPlayerCount
|
|
ENDFUNC
|
|
|
|
// Repeat through all clients
|
|
PROC MAINTAIN_FREEMODE_PLAYER_LOOP()
|
|
|
|
INT iParticipant
|
|
PLAYER_INDEX PlayerId
|
|
INT iCount
|
|
|
|
BOOL bIsDpaddownActive = (GET_DPADDOWN_ACTIVATION_STATE() != DPADDOWN_NONE)
|
|
|
|
|
|
REPEAT NETWORK_GET_MAX_NUM_PARTICIPANTS() iCount
|
|
|
|
|
|
iParticipant = iCount
|
|
|
|
// Gamertags above heads probably temp solution (Speirs 357426 17/02/2012)
|
|
IF NETWORK_IS_PARTICIPANT_ACTIVE(INT_TO_PARTICIPANTINDEX(iParticipant))
|
|
PlayerId = NETWORK_GET_PLAYER_INDEX(INT_TO_PARTICIPANTINDEX(iParticipant))
|
|
|
|
|
|
IF IS_NET_PLAYER_OK(PlayerId)
|
|
|
|
IF PlayerId != PLAYER_ID()
|
|
//IF GET_PLAYER_TEAM(PlayerId) >= 0
|
|
IF GET_PLAYER_TEAM(PlayerId) != GET_PLAYER_TEAM(PLAYER_ID())
|
|
NETWORK_SET_ANTAGONISTIC_TO_PLAYER(TRUE, PlayerId)
|
|
ENDIF
|
|
//ENDIF
|
|
ENDIF
|
|
IF IS_NET_PLAYER_OK(PLAYER_ID())
|
|
RUN_OVERALL_FREEMODE_LOGIC_CHECKS(PlayerId, iParticipant, bIsDpaddownActive )
|
|
PROCESS_PLAYER_NAME_DISPLAY_FM_DM_RC(PlayerId, iParticipant)
|
|
ELSE
|
|
HIDE_ALL_ABOVE_HEAD_DISPLAY_FOR_PLAYER_NOW(PlayerId, iParticipant)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
CLEANUP_ABOVE_HEAD_DISPLAY(iParticipant,PlayerId )
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
NETWORK_SET_ANTAGONISTIC_TO_PLAYER(TRUE, INVALID_PLAYER_INDEX())
|
|
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Routine to work through when trying to initially spawn the player
|
|
/// RETURNS:
|
|
/// True is spawn has happened
|
|
FUNC BOOL SPAWN_PLAYER_AT_TESTBED()
|
|
VECTOR vSpawnPosition = <<0.0, 0.0, 0.0>>
|
|
FLOAT fSpawnHeading = 0.0
|
|
|
|
NET_PRINT("SPAWN_PLAYER_AT_TESTBED() called...") NET_NL()
|
|
|
|
IF GET_SERVER_SCRIPT_GAME_STATE() > MAIN_GAME_STATE_INI
|
|
// Get a spawn position, then try to spawn the player
|
|
|
|
REQUEST_MODEL(MP_M_FREEMODE_01)
|
|
IF HAS_MODEL_LOADED(MP_M_FREEMODE_01)
|
|
IF HAS_GOT_SPAWN_LOCATION(vSpawnPosition, fSpawnHeading, SPAWN_LOCATION_NET_TEST_BED, FALSE)
|
|
// make sure there are no blips left from pevious lives
|
|
CLEANUP_ALL_PLAYER_BLIPS()
|
|
SET_NET_PLAYER_MODEL(MP_M_FREEMODE_01)
|
|
REQUEST_MODEL(MP_M_FREEMODE_01)
|
|
NET_SPAWN_PLAYER(vSpawnPosition , fSpawnHeading, SPAWN_REASON_MANUAL, SPAWN_LOCATION_AT_SPECIFIC_COORDS, FALSE, TRUE)
|
|
NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
IF NOT (IS_SCREEN_FADED_IN() OR IS_SCREEN_FADING_IN())
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
RETURN(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
USING "player_ped_public.sch"
|
|
FUNC BOOL HAS_PLAYER_PED_MODEL_SWAPPED()
|
|
MODEL_NAMES mnTemp
|
|
WHILE NOT IS_NET_PLAYER_OK(PLAYER_ID(), FALSE, FALSE)
|
|
PRINTLN("HAS_PLAYER_PED_MODEL_SWAPPED- IS_NET_PLAYER_OK")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
|
|
mnTemp = GET_ENTITY_MODEL(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF mnTemp = GET_PLAYER_PED_MODEL(CHAR_TREVOR)
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF mnTemp = GET_PLAYER_PED_MODEL(CHAR_MICHAEL)
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF mnTemp = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN)
|
|
RETURN FALSE
|
|
ENDIF
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL CORRECT_PLAYER_PED()//VECTOR &vSpawnCoords, FLOAT &fSpawnHeading)
|
|
IF RandomModel= DUMMY_MODEL_FOR_SCRIPT
|
|
IF (GET_RANDOM_INT_IN_RANGE(0,2) = 0)
|
|
RandomModel = GET_RANDOM_PED_MODEL(TRUE)
|
|
ELSE
|
|
RandomModel = GET_RANDOM_PED_MODEL(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
PRINTSTRING("CORRECT_PLAYER_PED called")
|
|
IF LOAD_AND_SET_PLAYER_MODEL(RandomModel)
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
//SET_CAN_ATTACK_FRIENDLY(PLAYER_PED_ID(), TRUE, TRUE)
|
|
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, 32)
|
|
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_ASSAULTRIFLE, 128)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
#ENDIF
|
|
|
|
#ENDIF
|
|
|
|
// ----------------------------------- MAIN LOOP ----------------------------------------------------------------------
|
|
SCRIPT
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
#IF IS_DEBUG_BUILD
|
|
NET_PRINT("\n\n >>>> MPTestBed: Script Launched..... \n\n ")
|
|
#ENDIF
|
|
|
|
PRINTLN("LOAD_ALL_UGC_CONTENT_FOR_GTA_V_ONLINE - REQUEST_SCRIPT(\"UGC_Global_Registration\")")
|
|
REQUEST_SCRIPT("UGC_Global_Registration")
|
|
REQUEST_SCRIPT("UGC_Global_Registration_2")
|
|
WHILE NOT HAS_SCRIPT_LOADED("UGC_Global_Registration")
|
|
AND NOT HAS_SCRIPT_LOADED("UGC_Global_Registration_2")
|
|
WAIT(0)
|
|
REQUEST_SCRIPT("UGC_Global_Registration")
|
|
REQUEST_SCRIPT("UGC_Global_Registration_2")
|
|
ENDWHILE
|
|
START_NEW_SCRIPT("UGC_Global_Registration", MICRO_STACK_SIZE)
|
|
START_NEW_SCRIPT("UGC_Global_Registration_2", MICRO_STACK_SIZE)
|
|
|
|
PRINTLN("Give UGC_Global_Registration.sc one frame to run before requesting and launching mpTestBed.")
|
|
|
|
WAIT(0)
|
|
|
|
CLEAR_ALL_MP_GLOBALS() // should be called first.
|
|
|
|
SET_CURRENT_GAMEMODE(GAMEMODE_MPTESTBED)
|
|
|
|
|
|
// VECTOR vSpawnCoords
|
|
// FLOAT fSpawnHeading
|
|
|
|
NETWORK_SET_THIS_SCRIPT_IS_NETWORK_SCRIPT(NUM_NETWORK_PLAYERS, FALSE)
|
|
|
|
|
|
SHUTDOWN_LOADING_SCREEN()
|
|
|
|
Initialise_Main_Generic_Server()
|
|
|
|
// Carry out all the initial game starting duties.
|
|
IF NOT PROCESS_PRE_GAME()
|
|
NET_PRINT("\n\n >>>> MPTestbed: Failed to receive initial broadcast data. Cleaning up..... \n\n ")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
//KM:
|
|
Initialise_Main_Generic_Client()
|
|
|
|
// initialising stat timers
|
|
INIT_STAT_TIMERS()
|
|
|
|
//Turn off/On StuntJumps
|
|
SETUP_FM_USJS()
|
|
|
|
ACTIVATE_SHOPS_IN_FM()
|
|
|
|
// Turn off ambient cop dispatch (turned back on in script cleanup)
|
|
SET_AUDIO_FLAG("OnlyAllowScriptTriggerPoliceScanner", TRUE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
g_MainMissionScriptID = GET_ID_OF_THIS_THREAD()
|
|
SET_CURRENT_GAMEMODE(GAMEMODE_FM)
|
|
NET_PRINT("\n\n >>>> Testbed: Started..... \n\n ")
|
|
#ENDIF
|
|
|
|
|
|
// Setup widgets
|
|
#IF IS_DEBUG_BUILD
|
|
g_bMainMissionScriptActive = TRUE
|
|
// CREATE_TEST_SCRIPT_WIDGETS()
|
|
//IF NOT HAS_PLAYER_PED_MODEL_SWAPPED()
|
|
// IF NETWORK_IS_IN_CODE_DEVELOPMENT_MODE()
|
|
// bHasPlayerSwapped = FALSE
|
|
PRINTSTRING(" HAS_PLAYER_PED_MODEL_SWAPPED bHasPlayerSwapped = FALSE")
|
|
// ELSE
|
|
// PRINTSTRING(" HAS_PLAYER_PED_MODEL_SWAPPED bHasPlayerSwapped = TRUE")
|
|
// bHasPlayerSwapped = TRUE
|
|
// ENDIF
|
|
#ENDIF
|
|
|
|
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
|
|
// Main loop.
|
|
WHILE TRUE
|
|
|
|
// One wait to rule them all. This can be the ONLY wait from here on in.....
|
|
WAIT(0)
|
|
|
|
// Speirs added 08/06/12 (428425)
|
|
IF NOT IS_LOCAL_PLAYER_ON_ANY_FM_MISSION()
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
//SET_CAN_ATTACK_FRIENDLY(PLAYER_PED_ID(), TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// If we have a match end event, bail.
|
|
IF SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
g_iMPTimer = GET_NETWORK_TIME()
|
|
|
|
Maintain_Main_Generic_Client_Start_Of_Frame_Every_Frame(sHeistIslandTravel, sFMREScriptEventdata)
|
|
|
|
//Updates list of active player (has to be done after events as that updates list when someone joins or leaves)
|
|
SET_PLAYER_COUNTS()
|
|
|
|
|
|
// Deal with the debug.
|
|
#IF IS_DEBUG_BUILD
|
|
PROCESS_RELATIONSHIP_GROUPS()
|
|
PROCESS_TASK_DEBUG()
|
|
|
|
UPDATE_WIDGETS()
|
|
|
|
IF bOpenTaskSequence
|
|
FILL_SEQUENCE_TASK()
|
|
bOpenTaskSequence = FALSE
|
|
ENDIF
|
|
|
|
IF bStartTaskSequence
|
|
DEBUG_TASK_SEQUENCES()
|
|
bStartTaskSequence = FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
// ----------------------------------- CLIENT
|
|
SWITCH GET_CLIENT_SCRIPT_GAME_STATE(PLAYER_ID())
|
|
|
|
// Wait until the server gives the all go before moving on.
|
|
CASE MAIN_GAME_STATE_INI
|
|
NET_NL()NET_PRINT("MAIN_GAME_STATE_INI")
|
|
IF GET_SERVER_SCRIPT_GAME_STATE() > MAIN_GAME_STATE_INI
|
|
/* BC: 08/05/2012 - Changed as I do all of this in the transition.
|
|
#IF IS_DEBUG_BUILD
|
|
IF g_UseNewTransitionSystem = FALSE
|
|
#ENDIF
|
|
IF LOAD_AND_SET_PLAYER_MODEL(RandomModel)
|
|
IF HAS_GOT_SPAWN_LOCATION(vSpawnCoords, fSpawnHeading, SPAWN_LOCATION_AUTOMATIC, FALSE)
|
|
//REQUEST_MODEL(GET_ENTITY_MODEL(PLAYER_PED_ID()))
|
|
//IF HAS_MODEL_LOADED(GET_ENTITY_MODEL(PLAYER_PED_ID()))
|
|
// NET_SPAWN_PLAYER(vSpawnCoords, fSpawnHeading)
|
|
ENABLE_STUNT_JUMP_SET(ciFREEMODE_PLAYER_SJS_GROUP)
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
SET_CAN_ATTACK_FRIENDLY(PLAYER_PED_ID(), TRUE, TRUE)
|
|
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, 32)
|
|
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_ASSAULTRIFLE, 128)
|
|
ENDIF
|
|
|
|
SET_CLIENT_GAME_STATE(MAIN_GAME_STATE_INITIAL_CAMERA_WORK)
|
|
|
|
//g_TransitionData.iTransitionStatsState = TRANSITION_STATS_STATE_SHUTDOWN
|
|
ENDIF
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
ENDIF
|
|
#ENDIF
|
|
*/
|
|
|
|
|
|
IF SPAWN_PLAYER_AT_TESTBED()
|
|
|
|
SET_GAME_STATE_ON_DEATH(AFTERLIFE_JUST_REJOIN)
|
|
SET_CLIENT_GAME_STATE(MAIN_GAME_STATE_RUN_TRANSITION)
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAIN_GAME_STATE_RUN_TRANSITION
|
|
NET_NL()NET_PRINT("MAIN_GAME_STATE_RUN_TRANSITION")
|
|
TRIGGER_TRANSITION_MENU_ACTIVE(FALSE) //Needs to be here so when DM_Deathmatch stops running, this can loop round and not instantly bring up the hud again.
|
|
SET_CLIENT_GAME_STATE(MAIN_GAME_STATE_HOLD_FOR_TRANSITION)
|
|
BREAK
|
|
|
|
CASE MAIN_GAME_STATE_HOLD_FOR_TRANSITION
|
|
NET_NL()NET_PRINT("MAIN_GAME_STATE_HOLD_FOR_TRANSITION")
|
|
// #IF IS_DEBUG_BUILD
|
|
// IF NOT bHasPlayerSwapped
|
|
// SET_CLIENT_GAME_STATE(MAIN_GAME_STATE_RUNNING)
|
|
// ENDIF
|
|
// IF NETWORK_IS_IN_CODE_DEVELOPMENT_MODE()
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
|
|
SET_PED_DEFAULT_COMPONENT_VARIATION(PLAYER_PED_ID())
|
|
|
|
ENDIF
|
|
|
|
SET_CLIENT_GAME_STATE(MAIN_GAME_STATE_RUNNING)
|
|
// ENDIF
|
|
// #ENDIF
|
|
BREAK
|
|
|
|
CASE MAIN_GAME_STATE_INITIAL_CAMERA_WORK
|
|
//HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
IF bSetUpPlayer = FALSE
|
|
//IF IS_GANG_INTERIOR_LOADED(GET_PLAYER_TEAM(PLAYER_ID()))
|
|
// IF SPAWN_PLAYER_AT_GANG_HOUSE()
|
|
bSetUpPlayer = TRUE
|
|
// In freemode, it's everyone against everyone
|
|
SET_PLAYER_TEAM(PLAYER_ID(), -1)
|
|
PRINTSTRING(" Testbed - bSetUpPlayer - DONE")
|
|
// ENDIF
|
|
// ENDIF
|
|
ELSE
|
|
//IF NET_WARP_TO_COORD(vSpawnCoords, fSpawnHeading, FALSE, FALSE)
|
|
IF SET_SKYSWOOP_DOWN()
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
|
|
SET_PED_DEFAULT_COMPONENT_VARIATION(PLAYER_PED_ID())
|
|
ENDIF
|
|
SET_CLIENT_GAME_STATE(MAIN_GAME_STATE_RUNNING)
|
|
PRINTSTRING(" TESTBED - MAIN_GAME_STATE_RUNNING - TESTBED INTRO CUTSCENE ALREADY DONE")
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Main gameplay state.
|
|
CASE MAIN_GAME_STATE_RUNNING
|
|
|
|
/*IF NOT HAS_FREEMODE_INTRO_BEEN_DONE()
|
|
IF RUN_FREEMODE_INTRO_CUTSCENE()
|
|
PRINTSTRING(" FREEMODE - MAIN_GAME_STATE_RUNNING - RUN_FREEMODE_INTRO_CUTSCENE - DONE - B")
|
|
ENDIF
|
|
ENDIF*/
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
|
|
ENDIF
|
|
|
|
//If we are in game develoipment the force the player ped
|
|
// #IF IS_DEBUG_BUILD
|
|
// IF NOT bHasPlayerSwapped
|
|
// IF CORRECT_PLAYER_PED()
|
|
// bHasPlayerSwapped = TRUE
|
|
// ENDIF
|
|
// ENDIF
|
|
// //Run the debug health bars
|
|
// RUN_ALL_OVERHEAD_HEALTHBARS()
|
|
// #ENDIF
|
|
//DEAL_WITH_TRIGGER_TICKER()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
Maintain_Main_Generic_Client_TESTBED()
|
|
#ENDIF
|
|
|
|
UPDATE_PLAYER_RESPAWN_STATE()
|
|
|
|
|
|
MAINTAIN_FREEMODE_PLAYER_LOOP()
|
|
|
|
MAINTAIN_CLEAN_UP_WHEN_NOT_ON_A_MISSION()
|
|
|
|
MAINTAIN_FREEMODE_DPAD_DOWN()
|
|
|
|
RUN_RADAR_MAP()
|
|
|
|
|
|
|
|
|
|
// Process swapping weapons with other players
|
|
/*MAINTAIN_PLAYER_WEAPON_SWAPPING(iIsNetPlayerOK)
|
|
#IF IS_DEBUG_BUILD
|
|
#IF SCRIPT_PROFILER_ACTIVE
|
|
ADD_SCRIPT_PROFILE_MARKER("MAINTAIN_PLAYER_WEAPON_SWAPPING")
|
|
#ENDIF
|
|
//TEST FOR LAUNCHING A MISSION FROM DEBUG MENU NOT FINAL
|
|
HANDLE_LAUNCHING_MISSIONS()
|
|
#ENDIF*/
|
|
|
|
// Look for the server say the game has ended.
|
|
IF GET_SERVER_SCRIPT_GAME_STATE() = MAIN_GAME_STATE_END
|
|
SET_CLIENT_GAME_STATE(MAIN_GAME_STATE_END)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAIN_GAME_STATE_END
|
|
IF NETWORK_IS_IN_SESSION()
|
|
AND NETWORK_CAN_SESSION_END()
|
|
NETWORK_SESSION_END()
|
|
ENDIF
|
|
BREAK
|
|
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD
|
|
SCRIPT_ASSERT("Testbed - invalid game state!!")
|
|
#ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// ----------------------------------- SERVER
|
|
IF NETWORK_IS_HOST_OF_THIS_SCRIPT()
|
|
|
|
|
|
SWITCH GET_SERVER_SCRIPT_GAME_STATE()
|
|
|
|
// For now just move straight into playing.
|
|
CASE MAIN_GAME_STATE_INI
|
|
SET_SERVER_GAME_STATE(MAIN_GAME_STATE_RUNNING)
|
|
BREAK
|
|
|
|
// Look for game end conditions.
|
|
CASE MAIN_GAME_STATE_RUNNING
|
|
//SET_INITIAL_DOOR_STATES()
|
|
Maintain_Main_Generic_Server()
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bHostEndGameNow
|
|
GlobalServerBD.iServerGameState = MAIN_GAME_STATE_END
|
|
ENDIF
|
|
#ENDIF
|
|
BREAK
|
|
|
|
CASE MAIN_GAME_STATE_END
|
|
|
|
// We'd want to upload scores here, show results, do whatever.
|
|
|
|
BREAK
|
|
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD
|
|
SCRIPT_ASSERT("Testbed.sc - SERVER invalid game state!!")
|
|
#ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
KEYPRESS_DEBUG()
|
|
UPDATE_WIDGETS()
|
|
UPDATE_DEBUG()
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_TALK)
|
|
|
|
IF bSetUpUsjs
|
|
//Turn off/On StuntJumps
|
|
SETUP_FM_USJS()
|
|
bSetUpUsjs = FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
|
|
ENDWHILE
|
|
#ENDIF
|
|
// End of Mission
|
|
ENDSCRIPT
|
|
|
|
|
|
|
|
|