Files
gtav-src/script/dev_ng/singleplayer/scripts/temp/pickupTest.sc
T
2025-09-29 00:52:08 +02:00

349 lines
11 KiB
Python
Executable File

// Includes
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_camera.sch"
USING "commands_pad.sch"
USING "commands_misc.sch"
USING "commands_script.sch"
USING "commands_streaming.sch"
USING "script_player.sch"
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : pickupTest.sc
// AUTHOR :
// DESCRIPTION :
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
#IF IS_DEBUG_BUILD
// -----------------------------------------------------------------------------------------------------------
// Variable declaration
// -----------------------------------------------------------------------------------------------------------
// Pickup widgets
WIDGET_GROUP_ID widgetGroup
PICKUP_INDEX piPickup
INT iPickupType = 0
FLOAT fPos[3]
FLOAT fRot[3]
INT iFlags = 0
BOOL bSnapFlag = FALSE
BOOL bOrientFlag = FALSE
BOOL bUprightFlag = FALSE
BOOL bApplyRotate = FALSE
BOOL bApplyFlags = FALSE
BOOL bLiveUpdate = FALSE
BOOL bUpdateOnce = FALSE
BOOL bMouseMode = FALSE
BOOL bGetPedCoords = FALSE
BOOL bDumpToDebug = FALSE
// -----------------------------------------------------------------------------------------------------------
// Script Cleanup
// -----------------------------------------------------------------------------------------------------------
// Unload all pickup models
PROC UNLOAD_MODELS
SET_MODEL_AS_NO_LONGER_NEEDED(PROP_LD_SCRAP)
SET_MODEL_AS_NO_LONGER_NEEDED(PROP_POWER_CELL)
ENDPROC
// Load all pickup models
PROC LOAD_MODELS
REQUEST_MODEL(PROP_LD_SCRAP)
REQUEST_MODEL(PROP_POWER_CELL)
WHILE NOT HAS_MODEL_LOADED(PROP_LD_SCRAP)
AND NOT HAS_MODEL_LOADED(PROP_POWER_CELL)
REQUEST_MODEL(PROP_LD_SCRAP)
REQUEST_MODEL(PROP_POWER_CELL)
WAIT(0)
ENDWHILE
ENDPROC
/// PURPOSE: Deletes widget box
PROC CLEANUP_WIDGET()
IF DOES_PICKUP_EXIST(piPickup)
REMOVE_PICKUP(piPickup)
ENDIF
IF DOES_WIDGET_GROUP_EXIST(widgetGroup)
DELETE_WIDGET_GROUP(widgetGroup)
ENDIF
ENDPROC
PROC DUMP_VECTOR_TEXT(FLOAT pkx, FLOAT pky, FLOAT pkz)
SAVE_STRING_TO_DEBUG_FILE("<< ")
SAVE_FLOAT_TO_DEBUG_FILE(pkx)
SAVE_STRING_TO_DEBUG_FILE(", ")
SAVE_FLOAT_TO_DEBUG_FILE(pky)
SAVE_STRING_TO_DEBUG_FILE(", ")
SAVE_FLOAT_TO_DEBUG_FILE(pkz)
SAVE_STRING_TO_DEBUG_FILE(" >>")
ENDPROC
PROC DUMP_PICKUP_TEXT()
OPEN_DEBUG_FILE()
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("------------PICKUP-------------")
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("Coords: ")
DUMP_VECTOR_TEXT(fPos[0],fPos[1],fPos[2])
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("Angles: ")
DUMP_VECTOR_TEXT(fRot[0],fRot[1],fRot[2])
SAVE_NEWLINE_TO_DEBUG_FILE()
CLOSE_DEBUG_FILE()
ENDPROC
#ENDIF
/// PURPOSE: Removes any active models, anims and resets camera
PROC SCRIPT_CLEANUP()
CPRINTLN(DEBUG_AMBIENT, "PickupTest: Cleanup")
#IF IS_DEBUG_BUILD
UNLOAD_MODELS()
CLEANUP_WIDGET()
#ENDIF
TERMINATE_THIS_THREAD()
ENDPROC
#IF IS_DEBUG_BUILD
/// PURPOSE: Checks for player pressing debug key to cancel script
PROC CHECK_DEBUG_CLEANUP()
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S))
OR (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
OR (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J))
SCRIPT_CLEANUP()
ENDIF
ENDPROC
/// PURPOSE: Create pickup instance at specified coords and heading
FUNC PICKUP_TYPE GET_PICKUP_TYPE()
SWITCH iPickupType
CASE 0 RETURN PICKUP_ARMOUR_STANDARD BREAK
CASE 1 RETURN PICKUP_HEALTH_STANDARD BREAK
CASE 2 RETURN PICKUP_CUSTOM_SCRIPT BREAK
CASE 3 RETURN PICKUP_CUSTOM_SCRIPT BREAK
CASE 4 RETURN PICKUP_WEAPON_ASSAULTRIFLE BREAK
CASE 5 RETURN PICKUP_WEAPON_GRENADE BREAK
CASE 6 RETURN PICKUP_WEAPON_GRENADELAUNCHER BREAK
CASE 7 RETURN PICKUP_WEAPON_MG BREAK
CASE 8 RETURN PICKUP_WEAPON_MINIGUN BREAK
CASE 9 RETURN PICKUP_WEAPON_PISTOL BREAK
CASE 10 RETURN PICKUP_WEAPON_RPG BREAK
CASE 11 RETURN PICKUP_WEAPON_PUMPSHOTGUN BREAK
CASE 12 RETURN PICKUP_WEAPON_SMG BREAK
CASE 13 RETURN PICKUP_WEAPON_SNIPERRIFLE BREAK
CASE 14 RETURN PICKUP_WEAPON_STICKYBOMB BREAK
CASE 15 RETURN PICKUP_WEAPON_ASSAULTSHOTGUN BREAK
CASE 16 RETURN PICKUP_WEAPON_SAWNOFFSHOTGUN BREAK
CASE 17 RETURN PICKUP_WEAPON_CROWBAR BREAK
CASE 18 RETURN PICKUP_WEAPON_BAT BREAK
// Exile
CASE 19 RETURN PICKUP_WEAPON_APPISTOL BREAK
CASE 20 RETURN PICKUP_WEAPON_COMBATMG BREAK
ENDSWITCH
RETURN PICKUP_CUSTOM_SCRIPT
ENDFUNC
/// PURPOSE: Returns custom model type for selected pickup (if applicable)
FUNC MODEL_NAMES GET_PICKUP_MODEL()
SWITCH iPickupType
CASE 2 RETURN PROP_LD_SCRAP BREAK
CASE 3 RETURN PROP_POWER_CELL BREAK
ENDSWITCH
RETURN DUMMY_MODEL_FOR_SCRIPT
ENDFUNC
/// PURPOSE: Create pickup instance at specified coords and heading
PROC UPDATE_PICKUP()
IF DOES_PICKUP_EXIST(piPickup)
REMOVE_PICKUP(piPickup)
ENDIF
IF bLiveUpdate
iFlags = 0
bSnapFlag = FALSE
bOrientFlag = FALSE
bUprightFlag = FALSE
bApplyFlags = FALSE
ENDIF
CLEAR_BIT(iFlags, ENUM_TO_INT(PLACEMENT_FLAG_SNAP_TO_GROUND))
CLEAR_BIT(iFlags, ENUM_TO_INT(PLACEMENT_FLAG_ORIENT_TO_GROUND))
CLEAR_BIT(iFlags, ENUM_TO_INT(PLACEMENT_FLAG_UPRIGHT))
IF bApplyFlags
IF bSnapFlag SET_BIT(iFlags, ENUM_TO_INT(PLACEMENT_FLAG_SNAP_TO_GROUND)) ENDIF
IF bOrientFlag SET_BIT(iFlags, ENUM_TO_INT(PLACEMENT_FLAG_ORIENT_TO_GROUND)) ENDIF
IF bUprightFlag SET_BIT(iFlags, ENUM_TO_INT(PLACEMENT_FLAG_UPRIGHT)) ENDIF
ENDIF
IF bApplyRotate
IF GET_PICKUP_MODEL() = DUMMY_MODEL_FOR_SCRIPT
piPickup = CREATE_PICKUP_ROTATE(GET_PICKUP_TYPE(), <<fPos[0],fPos[1],fPos[2]>>, <<fRot[0],fRot[1],fRot[2]>>, iFlags, -1, EULER_YXZ, TRUE)
ELSE
piPickup = CREATE_PICKUP_ROTATE(GET_PICKUP_TYPE(), <<fPos[0],fPos[1],fPos[2]>>, <<fRot[0],fRot[1],fRot[2]>>, iFlags, -1, EULER_YXZ, TRUE, GET_PICKUP_MODEL())
ENDIF
ELSE
IF GET_PICKUP_MODEL() = DUMMY_MODEL_FOR_SCRIPT
piPickup = CREATE_PICKUP(GET_PICKUP_TYPE(), <<fPos[0],fPos[1],fPos[2]>>, iFlags, -1, TRUE)
ELSE
piPickup = CREATE_PICKUP(GET_PICKUP_TYPE(), <<fPos[0],fPos[1],fPos[2]>>, iFlags, -1, TRUE, GET_PICKUP_MODEL())
ENDIF
ENDIF
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Initialisation
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE: Initialise widgets with initial values
PROC SETUP_WIDGETS()
// Setup widget
widgetGroup = START_WIDGET_GROUP("Pickup Placement Helper")
START_NEW_WIDGET_COMBO()
ADD_TO_WIDGET_COMBO("Ambient - Body Armour")
ADD_TO_WIDGET_COMBO("Ambient - Health Pack")
ADD_TO_WIDGET_COMBO("Ambient - Letter Scrap")
ADD_TO_WIDGET_COMBO("Ambient - Spaceship Part")
ADD_TO_WIDGET_COMBO("Weapon - Assault Rifle")
ADD_TO_WIDGET_COMBO("Weapon - Grenade")
ADD_TO_WIDGET_COMBO("Weapon - Grenade Launcher")
ADD_TO_WIDGET_COMBO("Weapon - Machine Gun")
ADD_TO_WIDGET_COMBO("Weapon - Minigun")
ADD_TO_WIDGET_COMBO("Weapon - Pistol")
ADD_TO_WIDGET_COMBO("Weapon - RPG")
ADD_TO_WIDGET_COMBO("Weapon - Shotgun")
ADD_TO_WIDGET_COMBO("Weapon - SMG")
ADD_TO_WIDGET_COMBO("Weapon - Sniper Rifle")
ADD_TO_WIDGET_COMBO("Weapon - Sticky Bomb")
ADD_TO_WIDGET_COMBO("Weapon - Assault Shotgun")
ADD_TO_WIDGET_COMBO("Weapon - Sawn-Off Shotgun")
ADD_TO_WIDGET_COMBO("Weapon - Crowbar")
ADD_TO_WIDGET_COMBO("Weapon - Bat")
ADD_TO_WIDGET_COMBO("EXILE - AP Pistol")
ADD_TO_WIDGET_COMBO("EXILE - Combat MG")
STOP_WIDGET_COMBO("Pickup Type", iPickupType)
START_WIDGET_GROUP("Pickup Location")
ADD_WIDGET_FLOAT_SLIDER("Pos X", fPos[0], -7000, 7000, 0.01)
ADD_WIDGET_FLOAT_SLIDER("Pos Y", fPos[1], -7000, 7000, 0.01)
ADD_WIDGET_FLOAT_SLIDER("Pos Z", fPos[2], -7000, 7000, 0.01)
ADD_WIDGET_FLOAT_SLIDER("Rot X", fRot[0], -360, 360, 1.0)
ADD_WIDGET_FLOAT_SLIDER("Rot Y", fRot[1], -360, 360, 1.0)
ADD_WIDGET_FLOAT_SLIDER("Rot Z", fRot[2], -360, 360, 1.0)
STOP_WIDGET_GROUP()
ADD_WIDGET_STRING("Set coordinates - OVERWRITES EXISTING VALUES!")
ADD_WIDGET_BOOL("Set to player coordinates", bGetPedCoords)
ADD_WIDGET_BOOL("Fuzzy mode (Experimental, dodgy. Need to enable debug in script tools)", bMouseMode)
START_WIDGET_GROUP("Placement Flags")
ADD_WIDGET_BOOL("Snap to Ground", bSnapFlag)
ADD_WIDGET_BOOL("Orient to Ground", bOrientFlag)
ADD_WIDGET_BOOL("Set as Upright", bUprightFlag)
STOP_WIDGET_GROUP()
ADD_WIDGET_STRING("Create Pickup")
ADD_WIDGET_BOOL("Apply Rotate", bApplyRotate)
ADD_WIDGET_BOOL("Apply Flags", bApplyFlags)
ADD_WIDGET_BOOL("Live Update (flags have no effect)", bLiveUpdate)
ADD_WIDGET_BOOL("Update Once (flags should work)", bUpdateOnce)
ADD_WIDGET_STRING("Output")
ADD_WIDGET_BOOL("Dump to temp_debug.txt", bDumpToDebug)
STOP_WIDGET_GROUP()
ENDPROC
/// PURPOSE: Update pickup widgets
PROC UPDATE_WIDGETS()
IF bMouseMode
bApplyRotate = FALSE
bSnapFlag = TRUE
IF IS_MOUSE_BUTTON_PRESSED(MB_LEFT_BTN)
VECTOR vTmp
vTmp = GET_SCRIPT_MOUSE_POINTER_IN_WORLD_COORDS()
fPos[0] = vTmp.x
fPos[1] = vTmp.y
fPos[2] = vTmp.z + 0.4
ENDIF
ENDIF
IF bGetPedCoords
VECTOR vTmp
vTmp = GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)
fPos[0] = vTmp.x
fPos[1] = vTmp.y
fPos[2] = vTmp.z
bGetPedCoords = FALSE
ENDIF
IF bLiveUpdate
UPDATE_PICKUP()
ELIF bUpdateOnce
UPDATE_PICKUP()
bUpdateOnce = FALSE
ENDIF
IF bDumpToDebug
DUMP_PICKUP_TEXT()
bDumpToDebug = FALSE
ENDIF
ENDPROC
#ENDIF
/// Main script loop
SCRIPT
// Fade in screen if necessary
CPRINTLN(DEBUG_AMBIENT, "PickupTest: Launched")
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(500)
ENDIF
// Check for force cleanup of script
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_DEBUG_MENU|FORCE_CLEANUP_FLAG_SP_TO_MP)
CPRINTLN(DEBUG_AMBIENT, "PickupTest: Force Cleanup")
SCRIPT_CLEANUP()
ENDIF
// Create widgets and load pickup models
#IF IS_DEBUG_BUILD
SETUP_WIDGETS()
LOAD_MODELS()
#ENDIF
// Main loop
WHILE (TRUE)
#IF IS_DEBUG_BUILD
UPDATE_WIDGETS()
CHECK_DEBUG_CLEANUP()
#ENDIF
WAIT(0)
ENDWHILE
// Script should never reach here. Always terminate with cleanup function.
ENDSCRIPT