Files
2025-09-29 00:52:08 +02:00

405 lines
11 KiB
Python
Executable File

#IF IS_FINAL_BUILD
SCRIPT
ENDSCRIPT
#ENDIF
#IF IS_DEBUG_BUILD
//
// Author: Fraser Morgan Date: 30/07/2012
//
//
// Ped Walking Script
//
//
//
CONST_INT NUMBER_OF_PEDS 50
USING "rage_builtins.sch"
USING "globals.sch"
USING "brains.sch"
USING "script_player.sch"
USING "script_ped.sch"
USING "commands_script.sch"
USING "commands_pad.sch"
USING "commands_ped.sch"
USING "commands_graphics.sch"
USING "commands_camera.sch"
USING "commands_streaming.sch"
USING "commands_interiors.sch"
USING "commands_task.sch"
USING "commands_object.sch"
USING "commands_physics.sch"
USING "commands_player.sch"
USING "commands_misc.sch"
USING "flow_public_core_override.sch"
USING "weapon_enums.sch"
VECTOR vFront, vSide, vUp, vPos
VECTOR vPedPos, vTransformedPedPos
VECTOR vFrontPed, vSidePed, vUpPed, vPosPed
VECTOR vLeftSide
VECTOR vPedOrigin
VECTOR vCircumference
VECTOR vHeadHere
VECTOR vClickPos
FLOAT fDeltaPos = 1
FLOAT fPedPos = 3
FLOAT fPedDistance = 10
FLOAT fDist
FLOAT fHead
FLOAT fRadius = 1
INT iWalk
INT timeCheck
INT iLODPed
INT iCircle
INT iShoes
INT randomTime[NUMBER_OF_PEDS]
BOOL bCreatePed
BOOL bDeletePed
BOOL bWalkInLine
BOOL bSniper
BOOL bLODPed
BOOL bWalkInCircle
BOOL bControlPed
BOOL bTerminate
BOOL bNotFrank
BOOL bSinglePed
BOOL bTimer
PED_INDEX WALKING_PED[NUMBER_OF_PEDS]
INT iCurrentPedIndex
WIDGET_GROUP_ID createPedWalkingWidgets
// TEXT_WIDGET_ID twid_pedselection
MODEL_NAMES ped_selection
PROC MISSION_CLEANUP()
REQUEST_MODEL(PLAYER_ONE)
IF DOES_WIDGET_GROUP_EXIST(createPedWalkingWidgets)
DELETE_WIDGET_GROUP(createPedWalkingWidgets)
ENDIF
INT i = 0
REPEAT iCurrentPedIndex i
IF DOES_ENTITY_EXIST(WALKING_PED[i])
DELETE_PED(WALKING_PED[i])
ENDIF
ENDREPEAT
IF bNotFrank = TRUE
REQUEST_MODEL(PLAYER_ONE)
IF NOT HAS_MODEL_LOADED(PLAYER_ONE)
WAIT(2500)
ENDIF
SET_PLAYER_MODEL(GET_PLAYER_INDEX(), PLAYER_ONE)
ENDIF
SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), FALSE)
TERMINATE_THIS_THREAD()
ENDPROC
PROC CREATE_PED_WIDGETS()
createPedWalkingWidgets = START_WIDGET_GROUP("Walking Ped")
START_WIDGET_GROUP("Ped Creation")
START_NEW_WIDGET_COMBO()
ADD_TO_WIDGET_COMBO("BARE")
ADD_TO_WIDGET_COMBO("FLIPFLOPS ")
ADD_TO_WIDGET_COMBO("SHOES")
ADD_TO_WIDGET_COMBO("TRAINERS")
ADD_TO_WIDGET_COMBO("HIGH HEELS")
ADD_TO_WIDGET_COMBO("BOOTS")
ADD_TO_WIDGET_COMBO("GOLF")
ADD_TO_WIDGET_COMBO("CLOWN")
ADD_TO_WIDGET_COMBO("FLIPPERS")
STOP_WIDGET_COMBO("Ped Shoe Type:", iShoes)
ADD_WIDGET_BOOL("Create Single Ped with Click?", bSinglePed)
// twid_pedselection = ADD_TEXT_WIDGET("Ped Selection")
// SET_CONTENTS_OF_TEXT_WIDGET(twid_pedselection, "A_F_Y_BEACH_01")
ADD_WIDGET_BOOL("Become the ped", bControlPed)
ADD_WIDGET_STRING("")
ADD_WIDGET_BOOL("Create Ped at set loaction", bCreatePed)
ADD_WIDGET_FLOAT_SLIDER("Ped dist. from player", fPedPos, 0, 2000, 1)
ADD_WIDGET_BOOL("Delete Ped", bDeletePed)
ADD_WIDGET_STRING("")
ADD_WIDGET_BOOL("Walk in line", bWalkInLine)
ADD_WIDGET_FLOAT_SLIDER("Distance to walk", fPedDistance, 1, 200, 1)
ADD_WIDGET_STRING("")
ADD_WIDGET_BOOL("Walk in a circle", bWalkInCircle)
ADD_WIDGET_FLOAT_SLIDER("Radius of circle", fRadius, 1, 20, 1)
ADD_WIDGET_STRING("")
ADD_WIDGET_BOOL("Enable ped LOD", bLODPed)
ADD_WIDGET_INT_SLIDER("LOD level:", iLODPed, 0, 50, 1)
ADD_WIDGET_STRING("")
ADD_WIDGET_BOOL("Give player a sniper", bSniper)
ADD_WIDGET_BOOL("Terminate Script", bTerminate)
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
ENDPROC
PROC SHOE_UPDATER()
SWITCH iShoes
CASE 0
ped_selection = A_F_Y_BEACH_01
BREAK
CASE 1
ped_selection = A_M_Y_STWHI_01
BREAK
CASE 2
ped_selection = A_M_Y_BUSINESS_01
BREAK
CASE 3
ped_selection = A_M_Y_POLYNESIAN_01
BREAK
CASE 4
ped_selection = A_F_M_BEVHILLS_01
BREAK
CASE 5
ped_selection = A_M_M_PROLHOST_01
BREAK
CASE 6
ped_selection = A_F_Y_GOLFER_01
BREAK
CASE 7
ped_selection = S_M_Y_CLOWN_01
BREAK
CASE 8
ped_selection = PLAYER_ONE
BREAK
ENDSWITCH
ENDPROC
PROC CLICK_UPDATER()
INT i = 0
IF IS_MOUSE_BUTTON_JUST_PRESSED(MB_LEFT_BTN)
vClickPos = GET_SCRIPT_MOUSE_POINTER_IN_WORLD_COORDS()
IF bSinglePed
REPEAT iCurrentPedIndex i
IF DOES_ENTITY_EXIST(WALKING_PED[i])
DELETE_PED(WALKING_PED[i])
ENDIF
ENDREPEAT
ENDIF
REQUEST_MODEL(ped_selection)
IF NOT HAS_MODEL_LOADED(ped_selection)
WAIT(2500)
ENDIF
IF (iCurrentPedIndex < NUMBER_OF_PEDS)
IF iShoes = 8
WALKING_PED[iCurrentPedIndex] = CREATE_PED(PEDTYPE_GANG1, ped_selection, vClickPos)
randomTime[iCurrentPedIndex] = GET_RANDOM_INT_IN_RANGE(0, 5000)
SET_PED_COMPONENT_VARIATION(WALKING_PED[iCurrentPedIndex], PED_COMP_FEET, 2, 0)
SET_ENTITY_HEADING(WALKING_PED[iCurrentPedIndex], (GET_ENTITY_HEADING(PLAYER_PED_ID())))
iCurrentPedIndex ++
ELSE WALKING_PED[iCurrentPedIndex] = CREATE_PED(PEDTYPE_GANG1, ped_selection, vClickPos)
randomTime[iCurrentPedIndex] = GET_RANDOM_INT_IN_RANGE(0, 5000)
SET_ENTITY_HEADING(WALKING_PED[iCurrentPedIndex], (GET_ENTITY_HEADING(PLAYER_PED_ID())))
iCurrentPedIndex ++
ENDIF
ENDIF
iWalk = 0
iCircle = 0
ENDIF
IF IS_MOUSE_BUTTON_PRESSED(MB_LEFT_BTN)
AND DOES_ENTITY_EXIST(WALKING_PED[iCurrentPedIndex])
vClickPos = GET_SCRIPT_MOUSE_POINTER_IN_WORLD_COORDS()
SET_ENTITY_COORDS(WALKING_PED[iCurrentPedIndex], vClickPos, TRUE)
ENDIF
ENDPROC
PROC PED_BEHAVIOURS()
INT i = 0
REPEAT iCurrentPedIndex i
IF DOES_ENTITY_EXIST(WALKING_PED[i])
AND NOT IS_ENTITY_DEAD(WALKING_PED[i])
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(WALKING_PED[i], TRUE)
SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(WALKING_PED[i], FALSE)
SET_ENTITY_INVINCIBLE(WALKING_PED[i], TRUE)
ENDIF
ENDREPEAT
ENDPROC
PROC WALKING_IN_LINE()
IF DOES_ENTITY_EXIST(WALKING_PED[0])
INT i = 0
REPEAT iCurrentPedIndex i
SWITCH iWalk
CASE 0
GET_ENTITY_MATRIX(WALKING_PED[i], vFrontPed, vSidePed, vUpPed, vPosPed)
vLeftSide = vPosPed - fPedDistance * vSidePed
TASK_TURN_PED_TO_FACE_COORD(WALKING_PED[i], vLeftSide, -1)
TASK_GO_STRAIGHT_TO_COORD(WALKING_PED[i], vLeftSide, 1.0)
vPedOrigin = GET_ENTITY_COORDS(WALKING_PED[i], TRUE)
iWalk = 1
BREAK
CASE 1
IF IS_ENTITY_AT_COORD(WALKING_PED[i], vLeftSide, <<0.5, 0.5, 0.5>>, TRUE)
TASK_GO_STRAIGHT_TO_COORD(WALKING_PED[i], vPedOrigin, 1.0)
iWalk = 2
ENDIF
BREAK
CASE 2
IF IS_ENTITY_AT_COORD(WALKING_PED[i], vPedOrigin, <<0.5, 0.5, 0.5>>, TRUE)
TASK_GO_STRAIGHT_TO_COORD(WALKING_PED[i], vLeftSide, 1.0)
iWalk = 1
ENDIF
BREAK
ENDSWITCH
ENDREPEAT
ENDIF
ENDPROC
PROC WALKING_IN_CIRCLE()
INT i = 0
IF DOES_ENTITY_EXIST(WALKING_PED[0])
REPEAT iCurrentPedIndex i
IF (GET_GAME_TIMER() - timeCheck) > randomTime[i]
SWITCH iCircle
CASE 0
GET_ENTITY_MATRIX(WALKING_PED[i], vFrontPed, vSidePed, vUpPed, vPosPed)
vLeftSide = vPosPed - fRadius * vSidePed
iCircle++
BREAK
CASE 1
GET_ENTITY_MATRIX(WALKING_PED[i], vFrontPed, vSidePed, vUpPed, vPosPed)
vCircumference = vPosPed + vFrontPed * 1.0 // -
fDist = GET_DISTANCE_BETWEEN_COORDS(vLeftSide, vCircumference)
fHead = fRadius - fDist
vHeadHere = vCircumference + vSidePed * fHead
TASK_GO_STRAIGHT_TO_COORD(WALKING_PED[i], vHeadHere, 1.0)
BREAK
ENDSWITCH
ENDIF
ENDREPEAT
ENDIF
ENDPROC
SCRIPT
IF HAS_FORCE_CLEANUP_OCCURRED()
MISSION_CLEANUP()
ENDIF
CREATE_PED_WIDGETS()
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
ENDIF
iCurrentPedIndex = 0
WHILE TRUE
// Main Loop
WAIT(0)
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), TRUE)
ENDIF
GET_ENTITY_MATRIX(PLAYER_PED_ID(), vFront, vSide, vUp, vPos)
vTransformedPedPos = vPos + fDeltaPos * vSide
vPedPos = vTransformedPedPos + vFront * fPedPos
PED_BEHAVIOURS()
SHOE_UPDATER()
CLICK_UPDATER()
INVALIDATE_IDLE_CAM()
IF IS_PLAYER_WANTED_LEVEL_GREATER(GET_PLAYER_INDEX(), 0)
CLEAR_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX())
ENDIF
IF bCreatePed
INT i = 0
REPEAT iCurrentPedIndex i
IF DOES_ENTITY_EXIST(WALKING_PED[i])
DELETE_PED(WALKING_PED[i])
ENDIF
ENDREPEAT
// ped_selection = INT_TO_ENUM(MODEL_NAMES, GET_HASH_KEY(GET_CONTENTS_OF_TEXT_WIDGET(twid_pedselection)))
REQUEST_MODEL(ped_selection)
IF NOT HAS_MODEL_LOADED(ped_selection)
WAIT(2500)
ENDIF
IF (iCurrentPedIndex < NUMBER_OF_PEDS)
WALKING_PED[iCurrentPedIndex] = CREATE_PED(PEDTYPE_GANG1, ped_selection, vPedPos)
SET_ENTITY_HEADING(WALKING_PED[0], (GET_ENTITY_HEADING(PLAYER_PED_ID())))
iCurrentPedIndex++
ENDIF
iWalk = 0
iCircle = 0
bCreatePed = FALSE
ENDIF
IF bWalkInLine = TRUE
WALKING_IN_LINE()
ELSE iWalk = 0
ENDIF
IF bWalkInCircle = TRUE
IF bTimer = FALSE
timeCheck = GET_GAME_TIMER()
bTimer = TRUE
ENDIF
WALKING_IN_CIRCLE()
ELSE iCircle = 0
bTimer = FALSE
ENDIF
IF bSniper
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_SNIPERRIFLE, 5000, TRUE, TRUE)
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_HEAVYSNIPER, 5000, FALSE, FALSE)
bSniper = FALSE
ENDIF
IF bLODPed
SET_ENTITY_LOD_DIST(WALKING_PED[0], iLODPed)
bLODPed = FALSE
ENDIF
IF bControlPed
// ped_selection = INT_TO_ENUM(MODEL_NAMES, GET_HASH_KEY(GET_CONTENTS_OF_TEXT_WIDGET(twid_pedselection)))
REQUEST_MODEL(ped_selection)
IF NOT HAS_MODEL_LOADED(ped_selection)
WAIT(2500)
ENDIF
SET_PLAYER_MODEL(GET_PLAYER_INDEX(), ped_selection)
bControlPed = FALSE
bNotFrank = TRUE
ENDIF
IF bDeletePed
INT i = 0
REPEAT iCurrentPedIndex i
IF DOES_ENTITY_EXIST(WALKING_PED[i])
DELETE_PED(WALKING_PED[i])
ENDIF
ENDREPEAT
iCurrentPedIndex = 0
bDeletePed = FALSE
ENDIF
IF bTerminate
MISSION_CLEANUP()
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)
MISSION_CLEANUP()
ENDIF
ENDWHILE
ENDSCRIPT
#ENDIF // IS_DEBUG_BUILD