424 lines
13 KiB
Python
Executable File
424 lines
13 KiB
Python
Executable File
// Do nothing in release mode
|
|
#IF IS_FINAL_BUILD
|
|
SCRIPT
|
|
ENDSCRIPT
|
|
#ENDIF
|
|
|
|
// Only include in debug mode
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
//╒═════════════════════════════════════════════════════════════════════════════╕
|
|
//│ Author: Jorge O'Valle Date: 25/03/11 │
|
|
//╞═════════════════════════════════════════════════════════════════════════════╡
|
|
//│ │
|
|
//│ Testing the V ambisonics │
|
|
//│ │
|
|
//│ │
|
|
//╘═════════════════════════════════════════════════════════════════════════════╛
|
|
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
|
|
USING "commands_audio.sch"
|
|
USING "commands_camera.sch"
|
|
USING "commands_clock.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_script.sch"
|
|
USING "commands_streaming.sch"
|
|
USING "commands_task.sch"
|
|
USING "commands_vehicle.sch"
|
|
USING "commands_interiors.sch"
|
|
USING "commands_weapon.sch"
|
|
USING "commands_fire.sch"
|
|
|
|
USING "flow_public_core_override.sch"
|
|
USING "model_enums.sch"
|
|
USING "script_player.sch"
|
|
USING "selector_public.sch"
|
|
USING "player_ped_public.sch"
|
|
|
|
|
|
//Variables etc
|
|
MODEL_NAMES modelShooter = G_M_M_ChiBoss_01//A_M_Y_GENASIAN01
|
|
MODEL_NAMES lastModelShooter = G_M_M_ChiBoss_01//A_M_Y_GENASIAN01
|
|
WEAPON_TYPE shooterGun
|
|
WIDGET_GROUP_ID widgetDebug
|
|
|
|
//BOOL b_shooter_respawning = FALSE
|
|
BOOL weaponsAllowed[8]
|
|
//BOOL finish = FALSE
|
|
VECTOR playerPos
|
|
INT testSoundId = GET_SOUND_ID()
|
|
//INT i_GunManRespawnTime = 5
|
|
INT shooterTimeToNewTarget = 10
|
|
INT i
|
|
INT modelNumber = 0
|
|
//INT currentShooter
|
|
CONST_INT numberOfShooters 2
|
|
FLOAT f_shooter_min_dist = 5.0
|
|
FLOAT f_shooter_max_dist = 15.0
|
|
FLOAT shooterBurstLength = 3.0
|
|
FLOAT shooterAimOffset = 1.0
|
|
PED_INDEX ShootersPedIndex[numberOfShooters]
|
|
BLIP_INDEX ShootersBlipIndex[numberOfShooters]
|
|
BOOL ShootersArmed[numberOfShooters]
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Init Camera
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
PROC InitCamera()
|
|
SET_DEBUG_CAM_ACTIVE(TRUE)
|
|
SET_CAM_COORD(GET_DEBUG_CAM (),GET_ENTITY_COORDS(PLAYER_PED_ID()) + <<0.0,0.0,288.0>>)
|
|
SET_CAM_ROT(GET_DEBUG_CAM (), <<270.0,0.0,0.0>>)
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Aux
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
PROC CreateWidgets()
|
|
|
|
//SETUP INITIAL WEAPONS FOR GUNMEN
|
|
//"WEAPONTYPE_PISTOL"
|
|
weaponsAllowed[0] = TRUE
|
|
//"WEAPONTYPE_SMG"
|
|
weaponsAllowed[1] = TRUE
|
|
//"WEAPONTYPE_ASSAULTRIFLE"
|
|
weaponsAllowed[2] = TRUE
|
|
//"WEAPONTYPE_PUMPSHOTGUN"
|
|
weaponsAllowed[3] = TRUE
|
|
//"WEAPONTYPE_HEAVYSNIPER"
|
|
weaponsAllowed[4] = TRUE
|
|
//"WEAPONTYPE_GRENADELAUNCHER"
|
|
weaponsAllowed[5] = FALSE
|
|
//"WEAPONTYPE_RPG"
|
|
weaponsAllowed[6] = FALSE
|
|
//"WEAPONTYPE_STUNGUN"
|
|
weaponsAllowed[7] = FALSE
|
|
|
|
widgetDebug = START_WIDGET_GROUP("Audio Test")
|
|
START_WIDGET_GROUP("Shooters")
|
|
START_NEW_WIDGET_COMBO()
|
|
ADD_TO_WIDGET_COMBO("A_M_Y_MUSCLBEAC_01")
|
|
ADD_TO_WIDGET_COMBO("S_M_M_HighSec_01")
|
|
ADD_TO_WIDGET_COMBO("S_M_M_UPS_01")
|
|
ADD_TO_WIDGET_COMBO("S_M_M_HighSec_01")
|
|
ADD_TO_WIDGET_COMBO("A_F_Y_BEACH_01")
|
|
ADD_TO_WIDGET_COMBO("A_F_M_BevHills_02")
|
|
ADD_TO_WIDGET_COMBO("A_M_Y_CYCLIST_01")
|
|
ADD_TO_WIDGET_COMBO("S_M_Y_COP_01")
|
|
ADD_TO_WIDGET_COMBO("S_F_Y_HOOKER_01")
|
|
ADD_TO_WIDGET_COMBO("S_M_Y_MARINE_01")
|
|
ADD_TO_WIDGET_COMBO("S_M_Y_SWAT_01")
|
|
ADD_TO_WIDGET_COMBO("S_M_Y_SWAT_01")
|
|
STOP_WIDGET_COMBO("Enemy Ped", modelNumber)
|
|
ADD_WIDGET_FLOAT_SLIDER("Min Distance", f_shooter_min_dist, 0.0, 200.0, 1)
|
|
ADD_WIDGET_FLOAT_SLIDER("Max Distance", f_shooter_max_dist, 0.0, 200.0, 1)
|
|
|
|
START_WIDGET_GROUP("Multiple Shooters")
|
|
// ADD_WIDGET_BOOL("Timed Respawns", b_shooter_respawning)
|
|
// ADD_WIDGET_INT_SLIDER("Respawn Time", i_GunManRespawnTime, 1, 20, 1)
|
|
ADD_WIDGET_INT_SLIDER("Time before target change", shooterTimeToNewTarget, 1, 20, 1)
|
|
ADD_WIDGET_BOOL("WEAPONTYPE_PISTOL",weaponsAllowed[0])
|
|
ADD_WIDGET_BOOL("WEAPONTYPE_SMG",weaponsAllowed[1])
|
|
ADD_WIDGET_BOOL("WEAPONTYPE_ASSAULTRIFLE",weaponsAllowed[2])
|
|
ADD_WIDGET_BOOL("WEAPONTYPE_PUMPSHOTGUN",weaponsAllowed[3])
|
|
ADD_WIDGET_BOOL("WEAPONTYPE_HEAVYSNIPER",weaponsAllowed[4])
|
|
ADD_WIDGET_BOOL("WEAPONTYPE_GRENADELAUNCHER",weaponsAllowed[5])
|
|
ADD_WIDGET_BOOL("WEAPONTYPE_RPG",weaponsAllowed[6])
|
|
ADD_WIDGET_BOOL("WEAPONTYPE_STUNGUN",weaponsAllowed[7])
|
|
STOP_WIDGET_GROUP()
|
|
STOP_WIDGET_GROUP()
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
PROC DestroyWidgets()
|
|
IF DOES_WIDGET_GROUP_EXIST(widgetDebug)
|
|
DELETE_WIDGET_GROUP(widgetDebug)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Weapons
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
FUNC WEAPON_TYPE GetWeaponType(INT k)
|
|
WEAPON_TYPE chosenGun
|
|
SWITCH k
|
|
CASE 0
|
|
chosenGun = WEAPONTYPE_PISTOL
|
|
BREAK
|
|
CASE 1
|
|
chosenGun = WEAPONTYPE_SMG
|
|
BREAK
|
|
CASE 2
|
|
chosenGun = WEAPONTYPE_ASSAULTRIFLE
|
|
BREAK
|
|
CASE 3
|
|
chosenGun = WEAPONTYPE_PUMPSHOTGUN
|
|
BREAK
|
|
CASE 4
|
|
chosenGun = WEAPONTYPE_HEAVYSNIPER
|
|
BREAK
|
|
CASE 5
|
|
chosenGun = WEAPONTYPE_GRENADELAUNCHER
|
|
BREAK
|
|
CASE 6
|
|
chosenGun = WEAPONTYPE_RPG
|
|
BREAK
|
|
CASE 7
|
|
chosenGun = WEAPONTYPE_STUNGUN
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN chosenGun
|
|
|
|
ENDFUNC
|
|
FUNC WEAPON_TYPE GetAGunForShooter()
|
|
BOOL NotAGoodGun = TRUE
|
|
INT TriesToGetAGoodGun = 0
|
|
INT temp
|
|
WHILE NotAGoodGun
|
|
temp = GET_RANDOM_INT_IN_RANGE(0,7)
|
|
IF weaponsAllowed[temp]
|
|
NotAGoodGun = FALSE
|
|
ELSE
|
|
IF TriesToGetAGoodGun > 10
|
|
//FALL BACK TO PISTOL
|
|
temp = 0
|
|
NotAGoodGun = FALSE
|
|
ENDIF
|
|
temp++
|
|
ENDIF
|
|
ENDWHILE
|
|
RETURN GetWeaponType(temp)
|
|
ENDFUNC
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Shooters
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
PROC InitShooters()
|
|
WHILE NOT HAS_MODEL_LOADED(modelShooter)
|
|
REQUEST_MODEL(modelShooter)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDPROC
|
|
PROC CleanupShooters()
|
|
FOR i = 0 to numberOfShooters - 1
|
|
IF DOES_BLIP_EXIST(ShootersBlipIndex[i])
|
|
REMOVE_BLIP(ShootersBlipIndex[i])
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(ShootersPedIndex[i])
|
|
DELETE_PED(ShootersPedIndex[i])
|
|
ENDIF
|
|
ENDFOR
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(modelShooter)
|
|
ENDPROC
|
|
FUNC BOOL IsShooting(PED_INDEX shooter)
|
|
IF NOT IS_PED_INJURED(shooter)
|
|
SCRIPTTASKSTATUS taskStatus = GET_SCRIPT_TASK_STATUS(shooter, SCRIPT_TASK_PERFORM_SEQUENCE)
|
|
IF taskStatus = FINISHED_TASK
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
FUNC FLOAT GetHeadingBetweenVectors(VECTOR A, VECTOR B)
|
|
RETURN GET_HEADING_FROM_VECTOR_2D(B.x-A.x,B.y-A.y)
|
|
ENDFUNC
|
|
PROC updateTheModel()
|
|
lastModelShooter = modelShooter
|
|
SWITCH modelNumber
|
|
CASE 0
|
|
modelShooter = A_M_Y_MUSCLBEAC_01
|
|
BREAK
|
|
CASE 1
|
|
modelShooter = S_M_M_HighSec_01//A_M_M_BUSINESS01
|
|
BREAK
|
|
CASE 2
|
|
modelShooter = S_M_M_UPS_01//A_M_O_GENLATINO01
|
|
BREAK
|
|
CASE 3
|
|
modelShooter = S_M_M_HighSec_01
|
|
BREAK
|
|
CASE 4
|
|
modelShooter = A_F_Y_BEACH_01
|
|
BREAK
|
|
CASE 5
|
|
modelShooter = A_F_M_BevHills_02
|
|
BREAK
|
|
CASE 6
|
|
modelShooter = A_M_Y_CYCLIST_01
|
|
BREAK
|
|
CASE 7
|
|
modelShooter = S_M_Y_COP_01
|
|
BREAK
|
|
CASE 8
|
|
modelShooter = S_F_Y_HOOKER_01
|
|
BREAK
|
|
CASE 9
|
|
modelShooter = S_M_Y_MARINE_01
|
|
BREAK
|
|
CASE 10
|
|
modelShooter = S_M_Y_SWAT_01
|
|
BREAK
|
|
CASE 11
|
|
modelShooter = S_M_Y_SWAT_01
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF modelShooter != lastModelShooter
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(lastModelShooter)
|
|
ENDIF
|
|
|
|
IF NOT HAS_MODEL_LOADED(modelShooter)
|
|
REQUEST_MODEL(modelShooter)
|
|
ENDIF
|
|
ENDPROC
|
|
PROC makeMeAShooter(INT k)
|
|
playerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
|
|
VECTOR newShooterPos = SHOOTER_POS_IN_SECTOR(2,7)//(GET_RANDOM_INT_IN_RANGE(1,8),GET_RANDOM_INT_IN_RANGE(1,8))
|
|
ShootersPedIndex[k] = CREATE_PED(PEDTYPE_CRIMINAL, modelShooter, newShooterPos,GetHeadingBetweenVectors(newShooterPos, playerPos))
|
|
ShootersArmed[k] = FALSE
|
|
ENDPROC
|
|
PROC removeDeadGunMenBlips()
|
|
FOR i = 0 to numberOfShooters - 1
|
|
IF DOES_BLIP_EXIST(ShootersBlipIndex[i])
|
|
IF IS_ENTITY_DEAD(ShootersPedIndex[i])
|
|
PRINTSTRING("PED ")
|
|
PRINTINT(i)
|
|
PRINTSTRING(" IS DEAD - REMOVING BLIP")
|
|
PRINTNL()
|
|
REMOVE_BLIP(ShootersBlipIndex[i])
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
ENDPROC
|
|
FUNC PED_INDEX getSafeCombatTarget(INT j)
|
|
INT fightTarget
|
|
INT guesses = 0
|
|
WHILE guesses < 10
|
|
fightTarget = GET_RANDOM_INT_IN_RANGE(0,COUNT_OF(ShootersPedIndex))
|
|
IF DOES_ENTITY_EXIST(ShootersPedIndex[fightTarget])
|
|
IF NOT(fightTarget = COUNT_OF(ShootersPedIndex) OR fightTarget = j OR IS_ENTITY_DEAD(ShootersPedIndex[fightTarget]))
|
|
RETURN ShootersPedIndex[fightTarget]
|
|
ENDIF
|
|
ENDIF
|
|
ENDWHILE
|
|
RETURN PLAYER_PED_ID()
|
|
ENDFUNC
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Finish script
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
PROC CleanUp()
|
|
CleanupShooters()
|
|
RELEASE_SOUND_ID(testSoundId)
|
|
UNREGISTER_SCRIPT_WITH_AUDIO()
|
|
DestroyWidgets()
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
PROC FinishScript()
|
|
Mission_Flow_Mission_Failed()
|
|
CleanUp()
|
|
ENDPROC
|
|
|
|
PROC UpdateGunFight()
|
|
|
|
updateTheModel()
|
|
|
|
IF HAS_MODEL_LOADED(modelShooter)
|
|
// IF shooterRespawning
|
|
// IF TIMERA()>i_GunManRespawnTime*1000
|
|
// MakeAGunMan()
|
|
// ENDIF
|
|
// removeDeadGunMenBlips()
|
|
// ELSE
|
|
FOR i = 0 to numberOfShooters -1
|
|
IF DOES_ENTITY_EXIST(ShootersPedIndex[i])
|
|
IF IS_ENTITY_DEAD(ShootersPedIndex[i])
|
|
SET_PED_AS_NO_LONGER_NEEDED(ShootersPedIndex[i])
|
|
IF DOES_BLIP_EXIST(ShootersBlipIndex[i])
|
|
REMOVE_BLIP(ShootersBlipIndex[i])
|
|
ENDIF
|
|
makeMeAShooter(i)
|
|
ELSE
|
|
IF NOT ShootersArmed[i]
|
|
//shooterGun = GetAGunForShooter()
|
|
shooterGun = GetWeaponType(0)
|
|
ShootersBlipIndex[i] = ADD_BLIP_FOR_ENTITY(ShootersPedIndex[i])
|
|
SET_PED_ACCURACY(ShootersPedIndex[i],GET_RANDOM_INT_IN_RANGE(0,100))
|
|
GIVE_WEAPON_TO_PED(ShootersPedIndex[i], shooterGun, 100, true)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ShootersPedIndex[i], true)
|
|
SET_CURRENT_PED_WEAPON(ShootersPedIndex[i], shooterGun, true)
|
|
SET_PED_CURRENT_WEAPON_VISIBLE(ShootersPedIndex[i],TRUE)
|
|
SET_PED_SHOOT_RATE(ShootersPedIndex[i],100)
|
|
SET_PED_INFINITE_AMMO(ShootersPedIndex[i],TRUE)
|
|
SET_PED_COMBAT_ABILITY(ShootersPedIndex[i], CAL_PROFESSIONAL)
|
|
// SET_ENTITY_INVINCIBLE(ShootersPedIndex[i],TRUE)
|
|
//TASK_COMBAT_PED_TIMED(ShootersPedIndex[i],getSafeCombatTarget(i),shooterTimeToNewTarget*1000)
|
|
//WAIT( 5000)
|
|
TASK_SHOOT_AT_COORD(ShootersPedIndex[i],playerPos + <<0,0,shooterAimOffset>>, floor(shooterBurstLength*1000), FIRING_TYPE_1_THEN_AIM)
|
|
ShootersArmed[i] = TRUE
|
|
ELSE
|
|
//IF GET_SCRIPT_TASK_STATUS(ShootersPedIndex[i],SCRIPT_TASK_COMBAT)= FINISHED_TASK
|
|
// TASK_COMBAT_PED_TIMED(ShootersPedIndex[i],getSafeCombatTarget(i),shooterTimeToNewTarget*1000)
|
|
IF GET_SCRIPT_TASK_STATUS(ShootersPedIndex[i],SCRIPT_TASK_SHOOT_AT_COORD)= FINISHED_TASK
|
|
TASK_SHOOT_AT_COORD(ShootersPedIndex[i],playerPos + <<0,0,shooterAimOffset>>, floor(shooterBurstLength*1000), FIRING_TYPE_1_BURST)
|
|
//EXPLODE_PED_HEAD(ShootersPedIndex[i])
|
|
// finish = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
makeMeAShooter(i)
|
|
ENDIF
|
|
ENDFOR
|
|
ENDIF
|
|
ENDPROC
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Init
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
PROC Init()
|
|
REGISTER_SCRIPT_WITH_AUDIO()
|
|
CreateWidgets()
|
|
InitCamera()
|
|
InitShooters()
|
|
ENDPROC
|
|
|
|
|
|
// ===========================================================================================================
|
|
// Script Loop
|
|
// ===========================================================================================================
|
|
SCRIPT
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(500)
|
|
ENDIF
|
|
Init()
|
|
IF HAS_FORCE_CLEANUP_OCCURRED()
|
|
PRINTSTRING("...Placeholder Mission Force Cleanup")
|
|
PRINTNL()
|
|
Mission_Flow_Mission_Force_Cleanup()
|
|
CleanUp()
|
|
ENDIF
|
|
WHILE (TRUE)
|
|
DRAW_GUN_FIGHT_GRID()
|
|
// IF NOT finish
|
|
UpdateGunFight()
|
|
// ENDIF
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
|
|
FinishScript()
|
|
ENDIF
|
|
WAIT(0)
|
|
ENDWHILE
|
|
// Script should never reach here. Always terminate with cleanup function.
|
|
ENDSCRIPT
|
|
|
|
#ENDIF // IS_DEBUG_BUILD
|
|
|
|
|