//
|
|
// A test driver NPC with very basic AI
|
|
// Kye 2009
|
|
//
|
|
|
|
#include <a_npc>
|
|
|
|
new gStoppedForTraffic = 0;
|
|
new gPlaybackActive = 0;
|
|
|
|
public ScanTimer();
|
|
|
|
#define AHEAD_OF_CAR_DISTANCE 11.0
|
|
#define SCAN_RADIUS 11.0
|
|
|
|
//------------------------------------------
|
|
|
|
main(){}
|
|
|
|
//------------------------------------------
|
|
|
|
stock GetXYInfrontOfMe(Float:distance, &Float:x, &Float:y)
|
|
{
|
|
new Float:z, Float:angle;
|
|
GetMyPos(x,y,z);
|
|
GetMyFacingAngle(angle);
|
|
x += (distance * floatsin(-angle, degrees));
|
|
y += (distance * floatcos(-angle, degrees));
|
|
}
|
|
|
|
//------------------------------------------
|
|
|
|
public OnNPCModeInit()
|
|
{
|
|
SetTimer("ScanTimer",200,1);
|
|
}
|
|
|
|
//------------------------------------------
|
|
|
|
LookForAReasonToPause()
|
|
{
|
|
new Float:X,Float:Y,Float:Z;
|
|
new x=0;
|
|
|
|
GetMyPos(X,Y,Z);
|
|
GetXYInfrontOfMe(AHEAD_OF_CAR_DISTANCE,X,Y);
|
|
|
|
while(x!=MAX_PLAYERS) {
|
|
if(IsPlayerConnected(x) && IsPlayerStreamedIn(x)) {
|
|
if( GetPlayerState(x) == PLAYER_STATE_DRIVER ||
|
|
GetPlayerState(x) == PLAYER_STATE_ONFOOT )
|
|
{
|
|
if(IsPlayerInRangeOfPoint(x,SCAN_RADIUS,X,Y,Z)) {
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
x++;
|
|
}
|
|
|
|
//new msg[256];
|
|
//new Float:angle;
|
|
//GetMyFacingAngle(angle);
|
|
//format(msg,256,"My yaw/heading = %f",angle);
|
|
//SendChat(msg);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
//------------------------------------------
|
|
|
|
public ScanTimer()
|
|
{
|
|
//new ticker = GetTickCount() - g_LastTick;
|
|
//printf("npctest: timer (%d)ms", ticker);
|
|
//g_LastTick = GetTickCount();
|
|
|
|
new ReasonToPause = LookForAReasonToPause();
|
|
|
|
if(ReasonToPause && !gStoppedForTraffic)
|
|
{
|
|
//SendChat("I'm pausing");
|
|
PauseRecordingPlayback();
|
|
gStoppedForTraffic = 1;
|
|
}
|
|
else if(!ReasonToPause && gStoppedForTraffic)
|
|
{
|
|
//SendChat("I'm resuming");
|
|
ResumeRecordingPlayback();
|
|
gStoppedForTraffic = 0;
|
|
}
|
|
}
|
|
|
|
|
|
//------------------------------------------
|
|
|
|
StartPlayback()
|
|
{
|
|
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER,"taxi_test_1282");
|
|
gStoppedForTraffic = 0;
|
|
gPlaybackActive = 1;
|
|
}
|
|
|
|
|
|
//------------------------------------------
|
|
|
|
public OnRecordingPlaybackEnd()
|
|
{
|
|
StartPlayback();
|
|
}
|
|
|
|
//------------------------------------------
|
|
|
|
public OnNPCEnterVehicle(vehicleid, seatid)
|
|
{
|
|
StartPlayback();
|
|
}
|
|
|
|
//------------------------------------------
|
|
|
|
public OnNPCExitVehicle()
|
|
{
|
|
StopRecordingPlayback();
|
|
}
|
|
|
|
//------------------------------------------
|