Sziasztok.
Olyan problémám lenne, hogy van egy olyan scriptem, amiben az NPC buszok megállnak, ha valakit érzékelnek maguk elõtt.
A problémám vele az, hogy ha NPC van elõttük, akkor is megállnak. Van két buszom, ami egymás mellett elmegy és úgy is érzékel ha a busz orra mellett van valaki így ha elmennek egymás mellett a buszok akkor megállnak és az istenért se akarnak tovább menni.
A kérdésem a következõ:
Hogy tudnám megoldani, hogy ha NPC van elõttük akkor ne álljon meg?
itt a script
#define RECORDING \"npc_buszfeher1\"
#define RECORDING_TYPE 1
#include <a_npc>
new gStoppedForTraffic = 0;
new megallo = 0;
#define AHEAD_OF_CAR_DISTANCE 8.0
#define SCAN_RADIUS 8.0
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++;
}
while(x!=MAX_VEHICLES)
{
if(IsPlayerInRangeOfPoint(x,SCAN_RADIUS,X,Y,Z)) {
return 1;
}
x++;
}
return 0;
}
forward ScanTimer();
public ScanTimer()
{
if(megallo == 0)
{
new ReasonToPause = LookForAReasonToPause();
if(ReasonToPause && !gStoppedForTraffic)
{
//Megáll
PauseRecordingPlayback();
gStoppedForTraffic = 1;
}
else if(!ReasonToPause && gStoppedForTraffic)
{
//Tovább megy
ResumeRecordingPlayback();
gStoppedForTraffic = 0;
}
}
}
public OnRecordingPlaybackEnd ( )
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
return 0;
}
public OnNPCEnterVehicle ( vehicleid, seatid )
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
return 0;
}
public OnNPCExitVehicle ( )
{
StopRecordingPlayback ( );
return 0;
}
new bool:Debug=true;
stock egyezik(string1[], string2[], bool:betumeretmindegy = true)
{
return !strcmp(string1, string2, betumeretmindegy);
}
stock PlayerNameEx(playerid)
{
new nev[MAX_PLAYER_NAME];
GetPlayerName(playerid, nev, sizeof(nev));
return nev;
}
public OnClientMessage(color, text[])
{
if(egyezik(text,\"szünet\") || egyezik(text,\"szunet\"))
{
PauseRecordingPlayback();
megallo = 1;
if(Debug)
printf(\"NPC: %s - Szüneteltetve\",RECORDING);
}
else if(egyezik(text,\"folytat\"))
{
ResumeRecordingPlayback();
megallo = 0;
if(Debug)
printf(\"NPC: %s - Folytatva\",RECORDING);
}
else if(egyezik(text,\"stop\"))
{
StopRecordingPlayback();
megallo = 1;
if(Debug)
printf(\"NPC: %s - Megállítva\",RECORDING);
}
else if(egyezik(text,\"play\"))
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
megallo = 0;
if(Debug)
printf(\"NPC: %s - elindítva\",RECORDING);
}
}
Sziasztok.
Olyan problémám lenne, hogy van egy olyan scriptem, amiben az NPC buszok megállnak, ha valakit érzékelnek maguk elõtt.
A problémám vele az, hogy ha NPC van elõttük, akkor is megállnak. Van két buszom, ami egymás mellett elmegy és úgy is érzékel ha a busz orra mellett van valaki így ha elmennek egymás mellett a buszok akkor megállnak és az istenért se akarnak tovább menni.
A kérdésem a következõ:
Hogy tudnám megoldani, hogy ha NPC van elõttük akkor ne álljon meg?
itt a script
#define RECORDING \"npc_buszfeher1\"
#define RECORDING_TYPE 1
#include <a_npc>
new gStoppedForTraffic = 0;
new megallo = 0;
#define AHEAD_OF_CAR_DISTANCE 8.0
#define SCAN_RADIUS 8.0
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++;
}
while(x!=MAX_VEHICLES)
{
if(IsPlayerInRangeOfPoint(x,SCAN_RADIUS,X,Y,Z)) {
return 1;
}
x++;
}
return 0;
}
forward ScanTimer();
public ScanTimer()
{
if(megallo == 0)
{
new ReasonToPause = LookForAReasonToPause();
if(ReasonToPause && !gStoppedForTraffic)
{
//Megáll
PauseRecordingPlayback();
gStoppedForTraffic = 1;
}
else if(!ReasonToPause && gStoppedForTraffic)
{
//Tovább megy
ResumeRecordingPlayback();
gStoppedForTraffic = 0;
}
}
}
public OnRecordingPlaybackEnd ( )
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
return 0;
}
public OnNPCEnterVehicle ( vehicleid, seatid )
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
return 0;
}
public OnNPCExitVehicle ( )
{
StopRecordingPlayback ( );
return 0;
}
new bool:Debug=true;
stock egyezik(string1[], string2[], bool:betumeretmindegy = true)
{
return !strcmp(string1, string2, betumeretmindegy);
}
stock PlayerNameEx(playerid)
{
new nev[MAX_PLAYER_NAME];
GetPlayerName(playerid, nev, sizeof(nev));
return nev;
}
public OnClientMessage(color, text[])
{
if(egyezik(text,\"szünet\") || egyezik(text,\"szunet\"))
{
PauseRecordingPlayback();
megallo = 1;
if(Debug)
printf(\"NPC: %s - Szüneteltetve\",RECORDING);
}
else if(egyezik(text,\"folytat\"))
{
ResumeRecordingPlayback();
megallo = 0;
if(Debug)
printf(\"NPC: %s - Folytatva\",RECORDING);
}
else if(egyezik(text,\"stop\"))
{
StopRecordingPlayback();
megallo = 1;
if(Debug)
printf(\"NPC: %s - Megállítva\",RECORDING);
}
else if(egyezik(text,\"play\"))
{
StartRecordingPlayback ( RECORDING_TYPE, RECORDING );
megallo = 0;
if(Debug)
printf(\"NPC: %s - elindítva\",RECORDING);
}
}