349 lines
11 KiB
Python
Executable File
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
|