1073 lines
35 KiB
Python
Executable File
1073 lines
35 KiB
Python
Executable File
USING "buildtype.sch"
|
|
USING "rage_builtins.sch"
|
|
|
|
// Do nothing in release mode
|
|
#IF IS_FINAL_BUILD
|
|
SCRIPT
|
|
ENDSCRIPT
|
|
#ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
// Only include in debug mode
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
|
|
|
|
//
|
|
USING "stack_sizes.sch"
|
|
|
|
// game commands
|
|
USING "commands_camera.sch"
|
|
USING "commands_debug.sch"
|
|
USING "commands_graphics.sch"
|
|
USING "commands_hud.sch"
|
|
USING "commands_misc.sch"
|
|
USING "commands_object.sch"
|
|
USING "commands_pad.sch"
|
|
USING "commands_ped.sch"
|
|
USING "commands_player.sch"
|
|
USING "commands_streaming.sch"
|
|
USING "commands_xml.sch"
|
|
USING "script_PLAYER.sch"
|
|
USING "commands_script.sch"
|
|
USING "commands_network.sch"
|
|
USING "net_include.sch"
|
|
USING "net_events.sch"
|
|
|
|
// global files
|
|
USING "globals.sch"
|
|
USING "script_debug.sch"
|
|
USING "script_XML.sch"
|
|
|
|
|
|
CONST_INT VEHICLE_LOD_TEST_CAM_SPEED 4500
|
|
|
|
|
|
BOOl bKillXMLMenusScript
|
|
|
|
// ped and vehicle used on menus, done as global to script so it can be deleted
|
|
VEHICLE_INDEX xmlVehicle
|
|
PED_INDEX xmlPed
|
|
OBJECT_INDEX xmlObject
|
|
NETWORK_INDEX netVehicle
|
|
BOOL bNetScript
|
|
|
|
BOOL bSearchVehicle
|
|
INT iVehicleSearchStage
|
|
|
|
BOOL bVehicleLodTest
|
|
INT iVehicleLodTestStage
|
|
INT iVehicleLodTestCam
|
|
//INT iVehicleLodTestTimer
|
|
FLOAT fVehicleLodTestSpeedMultiplier
|
|
|
|
CAMERA_INDEX camID_LodTest
|
|
TIME_DATATYPE tdDisableInputTimer
|
|
|
|
PROC SETUP_MENUS()
|
|
#IF NOT DEFINE_NM_BUILD_MODE
|
|
|
|
PRINTSTRING("running SETUP_MENUS ")
|
|
PRINTNL()
|
|
|
|
xmlMenuInfo[XML_MENU_LIST_SHARED_WARPS].xml = "debug/dbg_SharedGta5Warps.xml"
|
|
xmlMenuInfo[XML_MENU_LIST_PERSONAL_WARPS].xml = "debug/dbg_MyGta5Warps.xml"
|
|
xmlMenuInfo[XML_MENU_LIST_CODE_ACTIONS].xml = "debug/dbg_Tests.xml"
|
|
|
|
xmlMenuInfo[XML_MENU_LIST_SHARED_WARPS].active = TRUE
|
|
xmlMenuInfo[XML_MENU_LIST_PERSONAL_WARPS].active = TRUE
|
|
xmlMenuInfo[XML_MENU_LIST_CODE_ACTIONS].active = TRUE
|
|
|
|
|
|
// set shared xml files
|
|
xmlMenuInfo[XML_MENU_LIST_VEHICLES].xml = "debug/dbg_vehicles.xml"
|
|
xmlMenuInfo[XML_MENU_LIST_VEHICLES].active = TRUE
|
|
|
|
xmlMenuInfo[XML_MENU_LIST_PEDS].xml = "debug/dbg_peds.xml"
|
|
xmlMenuInfo[XML_MENU_LIST_PEDS].active = TRUE
|
|
|
|
xmlMenuInfo[XML_MENU_LIST_OBJECTS].xml = "debug/dbg_objects.xml"
|
|
xmlMenuInfo[XML_MENU_LIST_OBJECTS].active = TRUE
|
|
|
|
//add the xml menu for triggering MoVE minigame scripts
|
|
xmlMenuInfo[XML_MENU_LIST_MOVE].xml = "debug/dbg_move_minigames.xml"
|
|
xmlMenuInfo[XML_MENU_LIST_MOVE].active = TRUE
|
|
|
|
// reset mission one
|
|
xmlMenuInfo[XML_MENU_LIST_MISSION].xml = ""
|
|
xmlMenuInfo[XML_MENU_LIST_MISSION].active = FALSE
|
|
|
|
// keys to activate menus
|
|
xmlMenuInfo[XML_MENU_LIST_SHARED_WARPS].button = ENUM_TO_INT(KEY_2)
|
|
xmlMenuInfo[XML_MENU_LIST_PERSONAL_WARPS].button = ENUM_TO_INT(KEY_3)
|
|
xmlMenuInfo[XML_MENU_LIST_CODE_ACTIONS].button = ENUM_TO_INT(KEY_4)
|
|
xmlMenuInfo[XML_MENU_LIST_VEHICLES].button = ENUM_TO_INT(KEY_5)
|
|
xmlMenuInfo[XML_MENU_LIST_PEDS].button = ENUM_TO_INT(KEY_6)
|
|
xmlMenuInfo[XML_MENU_LIST_MOVE].button = ENUM_TO_INT(KEY_7)
|
|
//xmlMenuInfo[XML_MENU_LIST_OBJECTS].button = ENUM_TO_INT(KEY_R)
|
|
//xmlMenuInfo[XML_MENU_LIST_MISSION].button = ENUM_TO_INT(KEY_R)
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// Cleanup
|
|
// ===========================================================================================================
|
|
|
|
// PURPOSE: Ensures that the script gets a chance to cleanup under specific circumstances (ie: moving from SP to MP)
|
|
//
|
|
PROC Script_Cleanup()
|
|
|
|
// CURRENTLY NOTHING TO CLEANUP
|
|
IF bVehicleLodTest
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
|
|
ENDIF
|
|
|
|
IF DOES_CAM_EXIST(camID_LodTest)
|
|
DESTROY_CAM(camID_LodTest)
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(xmlVehicle)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(xmlVehicle)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF bNetScript
|
|
TERMINATE_THIS_MULTIPLAYER_THREAD_NO_ARGS()
|
|
ELSE
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
//
|
|
PROC loadScriptForXMLMenu(STRING scriptName, INT args = -1)
|
|
|
|
IF DOES_SCRIPT_EXIST(scriptName)
|
|
|
|
REQUEST_SCRIPT(scriptName)
|
|
WHILE NOT HAS_SCRIPT_LOADED(scriptName)
|
|
WAIT(0)
|
|
REQUEST_SCRIPT(scriptName)
|
|
ENDWHILE
|
|
|
|
IF args <> -1
|
|
START_NEW_SCRIPT_WITH_ARGS(scriptName, args, SIZE_OF(args), DEFAULT_STACK_SIZE)
|
|
ELSE
|
|
START_NEW_SCRIPT(scriptName, DEFAULT_STACK_SIZE)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC createDebugVehicle(INT vehicleEnumValue, BOOL warpPlayerInside = FALSE, BOOL keepInVehicle = TRUE, BOOL freezePosition = FALSE, BOOL cleanupVehicle = TRUE, BOOL defaultColours = FALSE)
|
|
|
|
VECTOR vehiclePosition
|
|
FLOAT vehicleHeading
|
|
BOOL playerWasInCar = FALSE
|
|
|
|
IF IS_MODEL_IN_CDIMAGE(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue))
|
|
REQUEST_MODEL(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue))
|
|
WHILE NOT HAS_MODEL_LOADED(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue))
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
WAIT(0)
|
|
REQUEST_MODEL(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue))
|
|
ENDWHILE
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
|
|
IF NETWORK_IS_GAME_IN_PROGRESS()
|
|
|
|
VEHICLE_INDEX tempVeh
|
|
|
|
IF NETWORK_DOES_NETWORK_ID_EXIST(netVehicle)
|
|
IF NETWORK_HAS_CONTROL_OF_NETWORK_ID(netVehicle)
|
|
IF NOT IS_ENTITY_DEAD(NET_TO_VEH(netVehicle))
|
|
IF IS_NET_PLAYER_OK(PLAYER_ID(), TRUE, FALSE)
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), NET_TO_VEH(netVehicle))
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
playerWasInCar = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
tempVeh = NET_TO_VEH(netVehicle)
|
|
DELETE_VEHICLE(tempVeh)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
vehiclePosition = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), << 0.0, 3.5, 0.0 >>)
|
|
vehicleHeading = (GET_ENTITY_HEADING(PLAYER_PED_ID()) + 90.0)
|
|
|
|
CREATE_NET_VEHICLE(netVehicle, INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue), vehiclePosition, vehicleHeading, FALSE)
|
|
|
|
SCRIPT_EVENT_DATA_TICKER_MESSAGE cheatTickerEventData
|
|
IF IS_THIS_MODEL_A_PLANE(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue))
|
|
cheatTickerEventData.dataInt = ciCHEAT_TICKER_PLANE
|
|
ELIF IS_THIS_MODEL_A_HELI(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue))
|
|
cheatTickerEventData.dataInt = ciCHEAT_TICKER_HELI
|
|
ELIF IS_THIS_MODEL_A_BOAT(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue))
|
|
cheatTickerEventData.dataInt = ciCHEAT_TICKER_BOAT
|
|
ELIF IS_THIS_MODEL_A_BIKE(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue))
|
|
cheatTickerEventData.dataInt = ciCHEAT_TICKER_BIKE
|
|
ELIF IS_THIS_MODEL_A_BICYCLE(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue))
|
|
cheatTickerEventData.dataInt = ciCHEAT_TICKER_BICYCLE
|
|
ENDIF
|
|
cheatTickerEventData.TickerEvent = TICKER_EVENT_PLAYER_CHEATED_U
|
|
cheatTickerEventData.playerID = PLAYER_ID()
|
|
BROADCAST_TICKER_EVENT(cheatTickerEventData, ALL_PLAYERS())
|
|
|
|
IF defaultColours
|
|
SET_VEHICLE_COLOUR_COMBINATION(NET_TO_VEH(netVehicle), 0)
|
|
ENDIF
|
|
|
|
IF (playerWasInCar AND keepInVehicle)
|
|
OR (warpPlayerInside)
|
|
TASK_ENTER_VEHICLE(PLAYER_PED_ID(), NET_TO_VEH(netVehicle), -1, VS_DRIVER, PEDMOVE_SPRINT, ECF_WARP_PED)
|
|
ENDIF
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue))
|
|
|
|
IF cleanupVehicle
|
|
tempVeh = NET_TO_VEH(netVehicle)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(tempVeh)
|
|
ELSE
|
|
xmlVehicle = NET_TO_VEH(netVehicle)
|
|
ENDIF
|
|
ELSE
|
|
IF DOES_ENTITY_EXIST(xmlVehicle)
|
|
IF NOT IS_ENTITY_DEAD(xmlVehicle)
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), xmlVehicle)
|
|
vehiclePosition = GET_ENTITY_COORDS(xmlVehicle)
|
|
vehicleHeading = GET_ENTITY_HEADING(xmlVehicle)
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<vehiclePosition.x, vehiclePosition.y, vehiclePosition.z+4.0>>)
|
|
playerWasInCar = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
DELETE_VEHICLE(xmlVehicle)
|
|
ENDIF
|
|
|
|
IF NOT playerWasInCar
|
|
vehiclePosition = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), << 0.0, 3.5, 0.0 >>)
|
|
vehicleHeading = (GET_ENTITY_HEADING(PLAYER_PED_ID()) + 90.0)
|
|
ENDIF
|
|
|
|
xmlVehicle = CREATE_VEHICLE(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue), vehiclePosition, vehicleHeading, FALSE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(xmlVehicle)
|
|
IF NETWORK_IS_GAME_IN_PROGRESS()
|
|
SET_VEHICLE_IS_SPRAYED(xmlVehicle)
|
|
ENDIF
|
|
SET_VEHICLE_IS_STOLEN(xmlVehicle, FALSE)
|
|
|
|
IF defaultColours
|
|
SET_VEHICLE_COLOUR_COMBINATION(xmlVehicle, 0)
|
|
ENDIF
|
|
|
|
IF (playerWasInCar AND keepInVehicle)
|
|
OR (warpPlayerInside)
|
|
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), xmlVehicle, VS_DRIVER)
|
|
SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_FRONTEND_SELECT)
|
|
SET_CINEMATIC_MODE_ACTIVE(FALSE)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING (0.0)
|
|
ENDIF
|
|
|
|
IF freezePosition
|
|
FREEZE_ENTITY_POSITION(xmlVehicle, TRUE)
|
|
ENDIF
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(INT_TO_ENUM(MODEL_NAMES, vehicleEnumValue))
|
|
|
|
IF cleanupVehicle
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(xmlVehicle)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC createDebugPed(INT pedEnumValue)
|
|
|
|
VECTOR pedPosition
|
|
FLOAT pedHeading
|
|
|
|
IF IS_MODEL_IN_CDIMAGE(INT_TO_ENUM(MODEL_NAMES, pedEnumValue))
|
|
REQUEST_MODEL(INT_TO_ENUM(MODEL_NAMES, pedEnumValue))
|
|
WHILE NOT HAS_MODEL_LOADED(INT_TO_ENUM(MODEL_NAMES, pedEnumValue))
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
WAIT(0)
|
|
REQUEST_MODEL(INT_TO_ENUM(MODEL_NAMES, pedEnumValue))
|
|
ENDWHILE
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
|
|
IF DOES_ENTITY_EXIST(xmlPed)
|
|
DELETE_PED(xmlPed)
|
|
ENDIF
|
|
|
|
pedPosition = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), << 0.0, 3.0, 0.0 >>)
|
|
pedHeading = (GET_ENTITY_HEADING(PLAYER_PED_ID()) + 180.0)
|
|
GET_GROUND_Z_FOR_3D_COORD(pedPosition, pedPosition.z)
|
|
xmlPed = CREATE_PED(PEDTYPE_MISSION, INT_TO_ENUM(MODEL_NAMES, pedEnumValue), pedPosition, pedHeading)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(INT_TO_ENUM(MODEL_NAMES, pedEnumValue))
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC createDebugObject(INT objectEnumValue)
|
|
|
|
VECTOR objectPosition
|
|
// FLOAT objectHeading
|
|
|
|
IF IS_MODEL_IN_CDIMAGE(INT_TO_ENUM(MODEL_NAMES, objectEnumValue))
|
|
REQUEST_MODEL(INT_TO_ENUM(MODEL_NAMES, objectEnumValue))
|
|
WHILE NOT HAS_MODEL_LOADED(INT_TO_ENUM(MODEL_NAMES, objectEnumValue))
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
WAIT(0)
|
|
REQUEST_MODEL(INT_TO_ENUM(MODEL_NAMES, objectEnumValue))
|
|
ENDWHILE
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
|
|
IF DOES_ENTITY_EXIST(xmlObject)
|
|
DELETE_OBJECT(xmlObject)
|
|
ENDIF
|
|
|
|
objectPosition = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), << 0.0, 3.0, 0.0 >>)
|
|
// objectHeading = (GET_ENTITY_HEADING(PLAYER_PED_ID()) + 180.0)
|
|
GET_GROUND_Z_FOR_3D_COORD(objectPosition, objectPosition.z)
|
|
xmlObject = CREATE_OBJECT(INT_TO_ENUM(MODEL_NAMES, objectEnumValue), objectPosition)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(INT_TO_ENUM(MODEL_NAMES, objectEnumValue))
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL DOES_STRING_CONTAIN_STRING(TEXT_LABEL_15 &tlLabel, TEXT_LABEL_15 &tlKey, BOOL bGrabTextFromLabel = FALSE)
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(tlLabel)
|
|
AND DOES_TEXT_LABEL_EXIST(tlLabel)
|
|
|
|
TEXT_LABEL_63 tlMain = tlLabel
|
|
IF bGrabTextFromLabel
|
|
tlMain = GET_STRING_FROM_TEXT_FILE(tlLabel)
|
|
ENDIF
|
|
|
|
INT iKeyHash = GET_HASH_KEY(tlKey)
|
|
|
|
INT iLengthMain = GET_LENGTH_OF_LITERAL_STRING(tlMain)
|
|
INT iLengthKey = GET_LENGTH_OF_LITERAL_STRING(tlKey)
|
|
|
|
INT iChar
|
|
|
|
FOR iChar = 0 TO iLengthMain-1
|
|
IF iChar+iLengthKey > iLengthMain
|
|
RETURN FALSE
|
|
ELIF GET_HASH_KEY(GET_STRING_FROM_STRING(tlMain, iChar, iChar+iLengthKey)) = iKeyHash
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDFOR
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
|
|
// MAIN SCRIPT
|
|
SCRIPT
|
|
|
|
// This script needs to cleanup only when the game moves from SP to MP
|
|
IF (HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP|FORCE_CLEANUP_FLAG_MAGDEMO))
|
|
PRINTSTRING("...xml_menus.sc has been forced to cleanup (SP to MP)")
|
|
PRINTNL()
|
|
|
|
Script_Cleanup()
|
|
ENDIF
|
|
|
|
// PROCESS_PRE_GAME
|
|
IF NETWORK_IS_GAME_IN_PROGRESS()
|
|
NETWORK_SET_THIS_SCRIPT_IS_NETWORK_SCRIPT(NUM_NETWORK_PLAYERS, FALSE)
|
|
RESERVE_NETWORK_MISSION_VEHICLES(1)
|
|
|
|
// This makes sure the net script is active, waits untull it is.
|
|
HANDLE_NET_SCRIPT_INITIALISATION()
|
|
|
|
SET_THIS_SCRIPT_CAN_BE_PAUSED(FALSE)
|
|
bNetScript = TRUE
|
|
ENDIF
|
|
|
|
|
|
BOOL bCommandLineBlock = FALSE
|
|
IF GET_COMMANDLINE_PARAM_EXISTS("sc_DisableVehicleSpawnMenu")
|
|
bCommandLineBlock = TRUE
|
|
ENDIF
|
|
|
|
WHILE bCommandLineBlock
|
|
WAIT(0)
|
|
// dont allow it to work.
|
|
ENDWHILE
|
|
|
|
|
|
|
|
// RESET ALL THE GLOBAL XML MENU DATA
|
|
resetAllXMLmenuData()
|
|
|
|
SETUP_MENUS()
|
|
|
|
// widget
|
|
xmlMenuData.size = 0.725
|
|
START_WIDGET_GROUP("XML Menus")
|
|
ADD_WIDGET_FLOAT_SLIDER("Menu Size", xmlMenuData.size, 0.2, 1.0, 0.05)
|
|
ADD_WIDGET_BOOL("Kill Script", bKillXMLMenusScript)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
// MAIN SCRIPT LOOP
|
|
WHILE TRUE
|
|
|
|
WAIT(0)
|
|
|
|
// If we have a match end event, bail.
|
|
IF bNetScript
|
|
IF SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()
|
|
Script_Cleanup()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bKillXMLMenusScript
|
|
Script_Cleanup()
|
|
ENDIF
|
|
|
|
IF (NETWORK_IS_GAME_IN_PROGRESS() AND ABSI(GET_TIME_DIFFERENCE(GET_NETWORK_TIME(), tdDisableInputTimer)) < 1000)
|
|
PRINTLN("INPUT_VEH_CIN_CAM Blocked by script ", GET_THIS_SCRIPT_NAME())
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_CIN_CAM)
|
|
ENDIF
|
|
|
|
IF IS_XML_MENU_ON_SCREEN()
|
|
|
|
BOOL bRemoveXMLMenu = TRUE
|
|
|
|
IF bSearchVehicle
|
|
|
|
INT iItem
|
|
TEXT_LABEL_15 tlLabel, tlSearch
|
|
INT iTempCurrent, iTempTop
|
|
BOOL bItemFound = FALSE
|
|
|
|
SWITCH iVehicleSearchStage
|
|
CASE 0
|
|
SHOW_ONSCREEN_KEYBOARD("WEB_SEARCH", "", 15)
|
|
iVehicleSearchStage++
|
|
BREAK
|
|
CASE 1
|
|
SWITCH UPDATE_ONSCREEN_KEYBOARD()
|
|
CASE OSK_SUCCESS
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(GET_ONSCREEN_KEYBOARD_RESULT())
|
|
|
|
tlSearch = GET_ONSCREEN_KEYBOARD_RESULT()
|
|
|
|
iTempCurrent = xmlMenuData.current
|
|
iTempTop = xmlMenuData.top
|
|
|
|
// To save on memory the vehicle menu only holds data for small portion so we need to process each block.
|
|
iItem = 0
|
|
xmlMenuData.current = 0
|
|
|
|
WHILE xmlMenuData.current < xmlMenuData.total AND NOT bItemFound
|
|
|
|
xmlMenuData.top = xmlMenuData.current
|
|
loadXmlIntoGlobalStruct(xmlMenuInfo[xmlMenuData.choosenMenu].xml, xmlMenuData.choosenMenu)
|
|
|
|
REPEAT TOTAL_XML_ITEMS_ON_SCREEN iItem
|
|
IF xmlMenuData.current < xmlMenuData.total
|
|
|
|
IF IS_MODEL_VALID((INT_TO_ENUM(MODEL_NAMES, xmlMenuData.items[iItem].value)))
|
|
tlLabel = GET_MODEL_NAME_FOR_DEBUG(INT_TO_ENUM(MODEL_NAMES, xmlMenuData.items[iItem].value))
|
|
IF DOES_STRING_CONTAIN_STRING(tlLabel, tlSearch, TRUE)
|
|
OR DOES_STRING_CONTAIN_STRING(tlLabel, tlSearch, FALSE)
|
|
bItemFound = TRUE
|
|
BREAKLOOP
|
|
ENDIF
|
|
ELSE
|
|
tlLabel = xmlMenuData.items[iItem].modelName
|
|
IF DOES_STRING_CONTAIN_STRING(tlLabel, tlSearch, FALSE)
|
|
bItemFound = TRUE
|
|
BREAKLOOP
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
xmlMenuData.current++
|
|
ENDREPEAT
|
|
ENDWHILE
|
|
|
|
IF NOT bItemFound
|
|
xmlMenuData.current = iTempCurrent
|
|
xmlMenuData.top = iTempTop
|
|
loadXmlIntoGlobalStruct(xmlMenuInfo[xmlMenuData.choosenMenu].xml, xmlMenuData.choosenMenu)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
SET_KEYBOARD_MODE(KEYBOARD_MODE_DEBUG)
|
|
|
|
bSearchVehicle = FALSE
|
|
BREAK
|
|
CASE OSK_CANCELLED
|
|
CASE OSK_FAILED
|
|
#IF IS_DEBUG_BUILD
|
|
SET_KEYBOARD_MODE(KEYBOARD_MODE_DEBUG)
|
|
#ENDIF
|
|
bSearchVehicle = FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
SWITCH getXmlMenuInput()
|
|
|
|
CASE XML_MENU_INPUT_UP
|
|
moveUpXMLMenu()
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_DOWN
|
|
moveDownXMLMenu()
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_LEFT
|
|
IF xmlMenuData.choosenMenu = XML_MENU_LIST_VEHICLES
|
|
INT i
|
|
REPEAT TOTAL_XML_ITEMS_ON_SCREEN i
|
|
moveUpXMLMenu(FALSE)
|
|
ENDREPEAT
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_RIGHT
|
|
IF xmlMenuData.choosenMenu = XML_MENU_LIST_VEHICLES
|
|
INT i
|
|
REPEAT TOTAL_XML_ITEMS_ON_SCREEN i
|
|
moveDownXMLMenu(FALSE)
|
|
ENDREPEAT
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_SEARCH
|
|
SWITCH xmlMenuData.choosenMenu
|
|
CASE XML_MENU_LIST_VEHICLES
|
|
IF NOT bSearchVehicle
|
|
bSearchVehicle = TRUE
|
|
iVehicleSearchStage = 0
|
|
ENDIF
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_ACCEPT
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
SWITCH xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].type
|
|
|
|
CASE XML_MENU_OPTION_WARP
|
|
SET_PED_COORDS_KEEP_VEHICLE(PLAYER_PED_ID(), xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].warp)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].heading)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING (0.0)
|
|
BREAK
|
|
|
|
CASE XML_MENU_OPTION_SCRIPT
|
|
loadScriptForXMLMenu(xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].scriptName)
|
|
BREAK
|
|
|
|
CASE XML_MENU_OPTION_VALUE
|
|
|
|
SWITCH xmlMenuData.choosenMenu
|
|
|
|
CASE XML_MENU_LIST_VEHICLES
|
|
// spawn vehicle
|
|
IF IS_MODEL_IN_CDIMAGE(INT_TO_ENUM(MODEL_NAMES, xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].value))
|
|
createDebugVehicle(xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].value)
|
|
ELSE
|
|
bRemoveXMLMenu = FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE XML_MENU_LIST_PEDS
|
|
// spawn ped
|
|
createDebugPed(xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].value)
|
|
BREAK
|
|
|
|
CASE XML_MENU_LIST_OBJECTS
|
|
// spawn object
|
|
createDebugObject(xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].value)
|
|
BREAK
|
|
|
|
CASE XML_MENU_LIST_MISSION
|
|
xmlMenuData.missionValue = xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].value
|
|
BREAK
|
|
|
|
CASE XML_MENU_LIST_CODE_ACTIONS
|
|
loadScriptForXMLMenu("debug_launcher", xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].value)
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
|
|
IF bRemoveXMLMenu
|
|
REMOVE_XML_MENU()
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_ACCEPT2
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
|
|
SWITCH xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].type
|
|
|
|
CASE XML_MENU_OPTION_VALUE
|
|
|
|
SWITCH xmlMenuData.choosenMenu
|
|
|
|
CASE XML_MENU_LIST_VEHICLES
|
|
|
|
IF IS_MODEL_IN_CDIMAGE(INT_TO_ENUM(MODEL_NAMES, xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].value))
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
IF NETWORK_IS_GAME_IN_PROGRESS()
|
|
tdDisableInputTimer = GET_NETWORK_TIME()
|
|
ENDIF
|
|
|
|
// spawn vehicle with player inside
|
|
createDebugVehicle(xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].value, TRUE)
|
|
ELSE
|
|
bRemoveXMLMenu = FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
|
|
IF bRemoveXMLMenu
|
|
REMOVE_XML_MENU()
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_ACCEPT3
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF IS_MODEL_IN_CDIMAGE(INT_TO_ENUM(MODEL_NAMES, xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].value))
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
bVehicleLodTest = TRUE
|
|
iVehicleLodTestStage = 0
|
|
iVehicleLodTestCam = 0
|
|
//iVehicleLodTestTimer = -1
|
|
fVehicleLodTestSpeedMultiplier = 1.0
|
|
ELSE
|
|
bRemoveXMLMenu = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bRemoveXMLMenu
|
|
REMOVE_XML_MENU()
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_CANCEL
|
|
|
|
REMOVE_XML_MENU()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_NEXT_MENU
|
|
GRAB_NEXT_XML_MENU()
|
|
RESET_AND_RELOAD_XML_MENU()
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_PREVIOUS_MENU
|
|
GRAB_PREVIOUS_XML_MENU()
|
|
RESET_AND_RELOAD_XML_MENU()
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_NEW_MENU
|
|
RESET_AND_RELOAD_XML_MENU()
|
|
BREAK
|
|
|
|
CASE XML_MENU_INPUT_KEYPRESS
|
|
//jumpToXMLMenuKey()
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
// ------------------------------------------------------
|
|
// DRAW MENU
|
|
// ------------------------------------------------------
|
|
|
|
IF IS_XML_MENU_ON_SCREEN()
|
|
drawXMLMenu()
|
|
ENDIF
|
|
|
|
ELIF bVehicleLodTest
|
|
|
|
IF DOES_ENTITY_EXIST(xmlVehicle)
|
|
AND IS_VEHICLE_DRIVEABLE(xmlVehicle)
|
|
IF GET_CLOCK_HOURS() >= 8 AND GET_CLOCK_HOURS() < 18
|
|
SET_VEHICLE_LIGHTS(xmlVehicle, FORCE_VEHICLE_LIGHTS_OFF)
|
|
ELSE
|
|
SET_VEHICLE_LIGHTS(xmlVehicle, FORCE_VEHICLE_LIGHTS_ON)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
VECTOR vOffset1, vOffset2, vMinDim, vMaxDim
|
|
FLOAT fFarOffset
|
|
|
|
IF IS_BUTTON_JUST_PRESSED(PAD1, CROSS)
|
|
moveDownXMLMenu()
|
|
iVehicleLodTestStage = 0
|
|
ELIF IS_BUTTON_JUST_PRESSED(PAD1, CIRCLE)
|
|
iVehicleLodTestCam--
|
|
IF iVehicleLodTestCam < 0
|
|
iVehicleLodTestCam = 3
|
|
ENDIF
|
|
iVehicleLodTestStage = 0
|
|
ELIF IS_BUTTON_JUST_PRESSED(PAD1, SQUARE)
|
|
iVehicleLodTestCam++
|
|
IF iVehicleLodTestCam > 3
|
|
iVehicleLodTestCam = 0
|
|
ENDIF
|
|
iVehicleLodTestStage = 0
|
|
ELIF IS_BUTTON_JUST_PRESSED(PAD1, TRIANGLE)
|
|
iVehicleLodTestStage = 99
|
|
ELIF IS_BUTTON_JUST_PRESSED(PAD1, LEFTSHOULDER1)
|
|
fVehicleLodTestSpeedMultiplier -= 0.5
|
|
ELIF IS_BUTTON_JUST_PRESSED(PAD1, RIGHTSHOULDER1)
|
|
fVehicleLodTestSpeedMultiplier += 0.5
|
|
ENDIF
|
|
|
|
// Cap the speeds
|
|
IF fVehicleLodTestSpeedMultiplier < 0.5
|
|
fVehicleLodTestSpeedMultiplier = 0.5
|
|
ENDIF
|
|
IF fVehicleLodTestSpeedMultiplier > 2.0
|
|
fVehicleLodTestSpeedMultiplier = 2.0
|
|
ENDIF
|
|
|
|
INT iFinalCamSpeed = FLOOR((VEHICLE_LOD_TEST_CAM_SPEED)/fVehicleLodTestSpeedMultiplier)
|
|
|
|
SWITCH iVehicleLodTestStage
|
|
// Warp the player to the airport, create vehicle, start camera
|
|
CASE 0
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), << 1466.5885, 3187.7419, 39.4116 >>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 105.0)
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), FALSE)
|
|
ENDIF
|
|
|
|
IF DOES_CAM_EXIST(camID_LodTest)
|
|
DESTROY_CAM(camID_LodTest)
|
|
ENDIF
|
|
|
|
CLEAR_AREA(<< 1466.5885, 3187.7419, 39.4116 >>, 500.0, TRUE)
|
|
|
|
createDebugVehicle(xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].value, FALSE, FALSE, TRUE, FALSE, TRUE)
|
|
|
|
IF DOES_ENTITY_EXIST(xmlVehicle)
|
|
AND IS_VEHICLE_DRIVEABLE(xmlVehicle)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
IF iVehicleLodTestCam = 0 // Front
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID()))
|
|
ELIF iVehicleLodTestCam = 1 // Right
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID())+90.0)
|
|
ELIF iVehicleLodTestCam = 2 // Rear
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID())+180.0)
|
|
ELIF iVehicleLodTestCam = 3 // Left
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID())-90.0)
|
|
ENDIF
|
|
|
|
camID_LodTest = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE)
|
|
POINT_CAM_AT_ENTITY(camID_LodTest, xmlVehicle, <<0,0,0.5>>, TRUE)
|
|
SET_CAM_FOV(camID_LodTest, 50)
|
|
|
|
vOffset1 = <<0,0,0>>
|
|
vOffset2 = <<0,0,0>>
|
|
vMinDim = <<0,0,0>>
|
|
vMaxDim = <<0,0,0>>
|
|
GET_MODEL_DIMENSIONS(GET_ENTITY_MODEL(xmlVehicle), vMinDim, vMaxDim)
|
|
|
|
fFarOffset = 50.0
|
|
|
|
IF iVehicleLodTestCam = 0 // Front
|
|
vOffset1 = << 0.0, 5.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << 0, fFarOffset, 0 >>
|
|
ELIF iVehicleLodTestCam = 1 // Right
|
|
vOffset1 = << 5.0, 0.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << fFarOffset, 0, 0 >>
|
|
ELIF iVehicleLodTestCam = 2 // Rear
|
|
vOffset1 = << 0.0, -5.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << 0, -fFarOffset, 0 >>
|
|
ELIF iVehicleLodTestCam = 3 // Left
|
|
vOffset1 = << -5.0, 0.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << -fFarOffset, 0, 0 >>
|
|
ENDIF
|
|
|
|
SET_CAM_PARAMS(camID_LodTest, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(xmlVehicle, vOffset1), <<0,0,0>>, 50.0, 0)
|
|
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
|
|
//iVehicleLodTestTimer = -1
|
|
iVehicleLodTestStage++
|
|
ELSE
|
|
iVehicleLodTestStage = 99
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Pause for a seconds then interp to 100m
|
|
CASE 1
|
|
IF DOES_CAM_EXIST(camID_LodTest)
|
|
IF NOT IS_CAM_INTERPOLATING(camID_LodTest)
|
|
|
|
// IF iVehicleLodTestTimer = -1
|
|
// iVehicleLodTestTimer = GET_GAME_TIMER()
|
|
// ELIF (GET_GAME_TIMER() - iVehicleLodTestTimer) > 1000
|
|
|
|
IF DOES_ENTITY_EXIST(xmlVehicle)
|
|
AND IS_VEHICLE_DRIVEABLE(xmlVehicle)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
IF iVehicleLodTestCam = 0 // Front
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID()))
|
|
ELIF iVehicleLodTestCam = 1 // Right
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID())+90.0)
|
|
ELIF iVehicleLodTestCam = 2 // Rear
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID())+180.0)
|
|
ELIF iVehicleLodTestCam = 3 // Left
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID())-90.0)
|
|
ENDIF
|
|
|
|
vOffset1 = <<0,0,0>>
|
|
vOffset2 = <<0,0,0>>
|
|
vMinDim = <<0,0,0>>
|
|
vMaxDim = <<0,0,0>>
|
|
GET_MODEL_DIMENSIONS(GET_ENTITY_MODEL(xmlVehicle), vMinDim, vMaxDim)
|
|
|
|
fFarOffset = 100.0
|
|
|
|
IF iVehicleLodTestCam = 0 // Front
|
|
vOffset1 = << 0.0, 5.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << 0, fFarOffset, 0 >>
|
|
ELIF iVehicleLodTestCam = 1 // Right
|
|
vOffset1 = << 5.0, 0.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << fFarOffset, 0, 0 >>
|
|
ELIF iVehicleLodTestCam = 2 // Rear
|
|
vOffset1 = << 0.0, -5.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << 0, -fFarOffset, 0 >>
|
|
ELIF iVehicleLodTestCam = 3 // Left
|
|
vOffset1 = << -5.0, 0.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << -fFarOffset, 0, 0 >>
|
|
ENDIF
|
|
|
|
SET_CAM_PARAMS(camID_LodTest,GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(xmlVehicle, vOffset2), <<0,0,0>>, 50.0, iFinalCamSpeed)
|
|
|
|
//iVehicleLodTestTimer = -1
|
|
iVehicleLodTestStage++
|
|
ELSE
|
|
iVehicleLodTestStage = 99
|
|
ENDIF
|
|
// ENDIF
|
|
ENDIF
|
|
ELSE
|
|
iVehicleLodTestStage = 99
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Interp back to start
|
|
CASE 2
|
|
IF DOES_CAM_EXIST(camID_LodTest)
|
|
IF NOT IS_CAM_INTERPOLATING(camID_LodTest)
|
|
|
|
// IF iVehicleLodTestTimer = -1
|
|
// iVehicleLodTestTimer = GET_GAME_TIMER()
|
|
// ELIF (GET_GAME_TIMER() - iVehicleLodTestTimer) > 1000
|
|
|
|
IF DOES_ENTITY_EXIST(xmlVehicle)
|
|
AND IS_VEHICLE_DRIVEABLE(xmlVehicle)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
IF iVehicleLodTestCam = 0 // Front
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID()))
|
|
ELIF iVehicleLodTestCam = 1 // Right
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID())+90.0)
|
|
ELIF iVehicleLodTestCam = 2 // Rear
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID())+180.0)
|
|
ELIF iVehicleLodTestCam = 3 // Left
|
|
SET_ENTITY_HEADING(xmlVehicle, GET_ENTITY_HEADING(PLAYER_PED_ID())-90.0)
|
|
ENDIF
|
|
|
|
vOffset1 = <<0,0,0>>
|
|
vOffset2 = <<0,0,0>>
|
|
vMinDim = <<0,0,0>>
|
|
vMaxDim = <<0,0,0>>
|
|
GET_MODEL_DIMENSIONS(GET_ENTITY_MODEL(xmlVehicle), vMinDim, vMaxDim)
|
|
|
|
fFarOffset = 100.0
|
|
|
|
IF iVehicleLodTestCam = 0 // Front
|
|
vOffset1 = << 0.0, 5.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << 0, fFarOffset, 0 >>
|
|
ELIF iVehicleLodTestCam = 1 // Right
|
|
vOffset1 = << 5.0, 0.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << fFarOffset, 0, 0 >>
|
|
ELIF iVehicleLodTestCam = 2 // Rear
|
|
vOffset1 = << 0.0, -5.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << 0, -fFarOffset, 0 >>
|
|
ELIF iVehicleLodTestCam = 3 // Left
|
|
vOffset1 = << -5.0, 0.0, 1.0 >>
|
|
vOffset2 = vOffset1 + << -fFarOffset, 0, 0 >>
|
|
ENDIF
|
|
|
|
SET_CAM_PARAMS(camID_LodTest, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(xmlVehicle, vOffset1), <<0,0,0>>, 50.0, iFinalCamSpeed)
|
|
|
|
//iVehicleLodTestTimer = -1
|
|
iVehicleLodTestStage = 1
|
|
ELSE
|
|
iVehicleLodTestStage = 99
|
|
ENDIF
|
|
// ENDIF
|
|
ENDIF
|
|
ELSE
|
|
iVehicleLodTestStage = 99
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Cleanup and return to menu
|
|
CASE 99
|
|
IF DOES_ENTITY_EXIST(xmlVehicle)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(xmlVehicle)
|
|
ENDIF
|
|
|
|
IF DOES_CAM_EXIST(camID_LodTest)
|
|
DESTROY_CAM(camID_LodTest)
|
|
ENDIF
|
|
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
bVehicleLodTest = FALSE
|
|
|
|
CLEAR_HELP()
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
|
|
ENDIF
|
|
|
|
RESET_AND_RELOAD_XML_MENU()
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
|
|
SET_TEXT_SCALE(0.0000, 0.35)
|
|
SET_TEXT_WRAP(0.0, 1.0)
|
|
SET_TEXT_CENTRE(FALSE)
|
|
SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0)
|
|
SET_TEXT_EDGE(0, 0, 0, 0, 0)
|
|
|
|
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("XML_VEH_LOD")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_LITERAL_STRING(GET_MODEL_NAME_FOR_DEBUG(INT_TO_ENUM(MODEL_NAMES, xmlMenuData.items[GET_CURRENT_XML_MENU_ARRAY_POS()].value)))
|
|
ADD_TEXT_COMPONENT_FLOAT(fVehicleLodTestSpeedMultiplier, 1)
|
|
END_TEXT_COMMAND_DISPLAY_TEXT(0.05, 0.05)
|
|
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
|
|
ELSE
|
|
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
|
|
INT i
|
|
|
|
// check if any of the menu buttons are being pressed
|
|
FOR i = 0 TO (ENUM_TO_INT(TOTAL_XML_MENUS)-1)
|
|
|
|
IF xmlMenuInfo[i].active
|
|
|
|
// [SP] Hack for Oculus
|
|
IF INT_TO_ENUM(XML_MENU_LIST, i) = XML_MENU_LIST_VEHICLES
|
|
AND IS_DISABLED_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_SCRIPT_SELECT)
|
|
AND IS_DISABLED_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_SCRIPT_RS)
|
|
AND IS_DISABLED_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_SCRIPT_RT)
|
|
|
|
//PRINTSTRING("Testing 1,2,3")
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
IF loadXmlIntoGlobalStruct(xmlMenuInfo[i].xml, XML_MENU_LIST_VEHICLES)
|
|
xmlMenuData.choosenMenu = XML_MENU_LIST_VEHICLES
|
|
xmlMenuData.menuIsBeingDrawn = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF xmlMenuInfo[i].button != 0
|
|
AND IS_KEYBOARD_KEY_JUST_PRESSED(INT_TO_ENUM(KEY_NUMBER, xmlMenuInfo[i].button))
|
|
|
|
// For now, only allow the vehicle menu in multiplayer
|
|
IF (g_bInMultiplayer AND INT_TO_ENUM(XML_MENU_LIST, i) = XML_MENU_LIST_VEHICLES)
|
|
OR (NOT g_bInMultiplayer)
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
IF loadXmlIntoGlobalStruct(xmlMenuInfo[i].xml, INT_TO_ENUM(XML_MENU_LIST, i))
|
|
xmlMenuData.choosenMenu = INT_TO_ENUM(XML_MENU_LIST, i)
|
|
i = ENUM_TO_INT(TOTAL_XML_MENUS)
|
|
xmlMenuData.menuIsBeingDrawn = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDWHILE
|
|
|
|
ENDSCRIPT
|
|
|
|
|
|
#ENDIF // IS_DEBUG_BUILD
|
|
|
|
|