152 lines
5.2 KiB
Scheme
Executable File
152 lines
5.2 KiB
Scheme
Executable File
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// SCRIPT NAME : flip_off_public.sch //
|
|
// AUTHOR : Rob Bray //
|
|
// DESCRIPTION : Common functions for flipping buddy peds off //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "commands_misc.sch"
|
|
USING "commands_pad.sch"
|
|
USING "commands_script.sch"
|
|
USING "commands_player.sch"
|
|
USING "commands_vehicle.sch"
|
|
USING "commands_object.sch"
|
|
USING "commands_graphics.sch"
|
|
USING "commands_physics.sch"
|
|
USING "commands_streaming.sch"
|
|
USING "commands_camera.sch"
|
|
USING "commands_audio.sch"
|
|
USING "script_player.sch"
|
|
|
|
ENUM FLIP_OFF_STATE_ENUM
|
|
FLIP_OFF_STATE_NOT_STARTED = 0,
|
|
FLIP_OFF_STATE_WAIT_FOR_REACT,
|
|
FLIP_OFF_STATE_REACTING,
|
|
FLIP_OFF_STATE_WAIT_FOR_CANCEL
|
|
ENDENUM
|
|
|
|
STRUCT FLIP_OFF_DATA
|
|
PED_INDEX ped
|
|
FLIP_OFF_STATE_ENUM state
|
|
INT iReactTime
|
|
ENDSTRUCT
|
|
|
|
PROC INIT_FLIP_OFF_PED(FLIP_OFF_DATA &flipOffData, PED_INDEX ped)
|
|
flipOffData.ped = ped
|
|
flipOffData.state = FLIP_OFF_STATE_NOT_STARTED
|
|
ENDPROC
|
|
|
|
// cancel flip off ped
|
|
PROC CANCEL_FLIP_OFF_PED(FLIP_OFF_DATA &flipOffData)
|
|
IF NOT IS_PED_INJURED(flipOffData.ped)
|
|
IF IS_PED_DOING_DRIVEBY(flipOffData.ped)
|
|
CLEAR_DRIVEBY_TASK_UNDERNEATH_DRIVING_TASK(flipOffData.ped)
|
|
// temp
|
|
//TASK_DRIVE_BY(flipOffData.ped, PLAYER_PED_ID(), NULL, <<0,0,0>>, 1, 100, TRUE)
|
|
ENDIF
|
|
flipOffData.state = FLIP_OFF_STATE_NOT_STARTED
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// is player targetting ped with a flip off
|
|
FUNC BOOL IS_PLAYER_TARGETTING_PED_FOR_FLIP_OFF(PED_INDEX targetPed, BOOL bCheckTargetCanSeePlayer)
|
|
IF NOT IS_PED_INJURED(targetPed)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF IS_PED_IN_ANY_VEHICLE(targetPed)
|
|
AND IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
WEAPON_TYPE weapon
|
|
GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), weapon)
|
|
IF weapon = WEAPONTYPE_UNARMED
|
|
VEHICLE_INDEX targetVehicle = GET_VEHICLE_PED_IS_USING(targetPed)
|
|
IF NOT IS_ENTITY_DEAD(targetVehicle)
|
|
IF IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), targetPed, <<25,25,2.5>>)
|
|
IF IS_PED_DOING_DRIVEBY(PLAYER_PED_ID())
|
|
VECTOR vOffset = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(targetPed, GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
IF vOffset.y > -12
|
|
OR NOT bCheckTargetCanSeePlayer
|
|
ENTITY_INDEX aimedEntity
|
|
IF GET_ENTITY_PLAYER_IS_FREE_AIMING_AT(PLAYER_ID(), aimedEntity)
|
|
IF aimedEntity = GET_ENTITY_FROM_PED_OR_VEHICLE(targetPed)
|
|
OR aimedEntity = GET_ENTITY_FROM_PED_OR_VEHICLE(targetVehicle)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// temp while 918205 getting fixed
|
|
/*
|
|
FLOAT fXPos
|
|
FLOAT fYPos
|
|
GET_SCREEN_COORD_FROM_WORLD_COORD(GET_ENTITY_COORDS(targetPed), fXPos, fYPos)
|
|
|
|
IF fXPos > 0.3
|
|
AND fXPos < 0.7
|
|
AND fYPos > 0.3
|
|
AND fYPos < 0.7
|
|
RETURN TRUE
|
|
ENDIF
|
|
*/
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
// handle flip off
|
|
PROC HANDLE_FLIP_OFF_PED(FLIP_OFF_DATA &flipOffData)
|
|
// flip off ped
|
|
IF NOT IS_PED_INJURED(flipOffData.ped)
|
|
SWITCH flipOffData.state
|
|
CASE FLIP_OFF_STATE_NOT_STARTED
|
|
IF IS_PLAYER_TARGETTING_PED_FOR_FLIP_OFF(flipOffData.ped, TRUE)
|
|
flipOffData.iReactTime = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(1000, 1500)
|
|
flipOffData.state = FLIP_OFF_STATE_WAIT_FOR_REACT
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE FLIP_OFF_STATE_WAIT_FOR_REACT
|
|
IF GET_GAME_TIMER() >= flipOffData.iReactTime
|
|
IF IS_PLAYER_TARGETTING_PED_FOR_FLIP_OFF(flipOffData.ped, FALSE)
|
|
SET_CURRENT_PED_WEAPON(flipOffData.ped, WEAPONTYPE_UNARMED, TRUE)
|
|
SET_CURRENT_PED_VEHICLE_WEAPON(flipOffData.ped, WEAPONTYPE_UNARMED)
|
|
TASK_DRIVE_BY(flipOffData.ped, PLAYER_PED_ID(), NULL, <<0,0,0>>, 30, 100, TRUE)
|
|
flipOffData.iReactTime = GET_GAME_TIMER()
|
|
flipOffData.state = FLIP_OFF_STATE_REACTING
|
|
ELSE
|
|
flipOffData.state = FLIP_OFF_STATE_NOT_STARTED
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE FLIP_OFF_STATE_REACTING
|
|
IF NOT IS_PED_DOING_DRIVEBY(flipOffData.ped)
|
|
AND GET_GAME_TIMER() >= flipOffData.iReactTime + 500
|
|
flipOffData.state = FLIP_OFF_STATE_NOT_STARTED
|
|
ELSE
|
|
IF NOT IS_PLAYER_TARGETTING_PED_FOR_FLIP_OFF(flipOffData.ped, FALSE)
|
|
AND GET_GAME_TIMER() >= flipOffData.iReactTime + 2000
|
|
flipOffData.iReactTime = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(1500, 3000)
|
|
flipOffData.state = FLIP_OFF_STATE_WAIT_FOR_CANCEL
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE FLIP_OFF_STATE_WAIT_FOR_CANCEL
|
|
IF IS_PLAYER_TARGETTING_PED_FOR_FLIP_OFF(flipOffData.ped, FALSE)
|
|
flipOffData.state = FLIP_OFF_STATE_REACTING
|
|
ELSE
|
|
IF GET_GAME_TIMER() >= flipOffData.iReactTime
|
|
CANCEL_FLIP_OFF_PED(flipOffData)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDPROC
|