Szerző Téma: FCNPC busz megállítása!  (Megtekintve 1248 alkalommal)

FCNPC busz megállítása!
« Dátum: 2015. Március 20. - 16:29:44 »
0 Show voters
Sziasztok egy olyan kérdésem lenne, hogy fcnpc-vel hogyan lehet azt megoldani hogyha az npc busz előtt van egy játékos akkor a busz ne üsse el hanem álljon meg ?
A segítségeket előre is köszönöm!
« Utoljára szerkesztve: 2015. Március 20. - 16:37:41 írta RusH. »

Nem elérhető Tomasz

  • 123
    • Profil megtekintése
FCNPC busz megállítása!
« Válasz #1 Dátum: 2015. Április 03. - 17:50:18 »
0 Show voters
Egy timerrel lekéred a buszos pozícióját majd egy ciklussal végig mész az online játékosokon, majd használod az IsPlayerInRangeOfPoint és amennyiben az egyik jatékos egy adott távolságon belül van a lekéred a buszos kocsiját majd a SetPlayerVelocity (nem biztos) függvénnyel megállítod a járművet.
Arra már viszont nincsen tippem hogy hogyan indítsd el újra a buszt úgy hogy a kijelölt útvonalon haladjon.

FCNPC busz megállítása!
« Válasz #2 Dátum: 2015. Április 05. - 16:25:55 »
0 Show voters
Kedves Tomasz!
A SetPlayerVelocity nem hatásos az NPC-kre, mivel azok ugyanúgy fogják utána is követni a nekik adott utat.

Nem elérhető gbr333

  • 670
    • Profil megtekintése
FCNPC busz megállítása!
« Válasz #3 Dátum: 2015. Április 05. - 18:16:04 »
0 Show voters

//
// 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();
}
 
//------------------------------------------
 

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal