GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: 1Mark6 - 2016. Január 24. - 19:51:01

Cím: NPC blokkolás?
Írta: 1Mark6 - 2016. Január 24. - 19:51:01
Sziasztok !
Érdekelne engem az a dolog, hogy hogyan lehet azt megcsinálni, hogyha valaki beáll az NPC elé, akkor Stopolja a Recordot, és csak akkor indul el, ha senki nem áll elötte.
Jó pár helyen láttam ezt, ezért gondoltam megkérdem !
Köszönöm a válaszokat !
Cím: NPC blokkolás?
Írta: BVZS - 2016. Január 24. - 23:05:14
// telo
Ha jol tudom van egy filterscript amiben ez a funkcio meg van irva. Ha letoltesz egy alap szervert akkor abban vagy az fs mappaban vagy npcmodes mappaban lesz, talav valami ls_ a neve
Cím: NPC blokkolás?
Írta: 1Mark6 - 2016. Január 25. - 16:49:48
#include <a_npc>
new MegAllt;
forward ScanTimer();
#define AHEAD_OF_CAR_DISTANCE    11
#define SCAN_RADIUS            11
public OnNPCModeInit()
{
SetTimer(\"ScanTimer\",100,1);
}
public OnNPCEnterVehicle(vehicleid,seatid)
{
StartPlayback();
return 0;
}
public OnNPCExitVehicle()
{
StopRecordingPlayback();
return 0;
}
public OnNPCSpawn()
{
StartPlayback();
return 0;
}
public OnRecordingPlaybackEnd()
{
StartPlayback();
return 0;
}
public ScanTimer()

    new ReasonToPause = LookForAReasonToPause();
   
if(ReasonToPause && MegAllt == 0)
{
PauseRecordingPlayback();
MegAllt = 1;
}
else if(!ReasonToPause && MegAllt == 1)
{
    ResumeRecordingPlayback();
    MegAllt = 0;
}
}
stock LookForAReasonToPause()
{
     new Float:X,Float:Y,Float:Z;
GetMyPos(X,Y,Z);
GetXYInfrontOfMe(AHEAD_OF_CAR_DISTANCE,X,Y);
for(new x = 0; x < MAX_PLAYERS; x++)
{
    if(IsPlayerConnected(x))
{
   if(GetPlayerState(x) == PLAYER_STATE_DRIVER || GetPlayerState(x) == PLAYER_STATE_ONFOOT)
   {
      if(IsPlayerInRangeOfPoint(x,SCAN_RADIUS,X,Y,Z))
      {
         return 1;
      }
   }
}
}
return 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));
}
stock StartPlayback()
{
StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER,\"BusNPC\");
MegAllt = 0;
}

 
Ez a kód van, kipróbáltam, azonban ha melette állok meg akkor is megáll, és ha elötte vagyok pl. kocsival akkor még el üt és csak utána ál meg.
Esetleg valami ötlet?
Cím: NPC blokkolás?
Írta: BVZS - 2016. Január 25. - 20:05:54
Igen ez azért van, mert jelen esetben nem a busz elejét nézi hanem a busz közepétől mért körzetet.
[include] Extended vehicle functions, ebből a
 
GetVehicleHood(vehicleid, &Float:x, &Float:y, &Float:z);

 
fog kelleni neked. Ezzel tudod csekkolni a járművek elejét.
Cím: NPC blokkolás?
Írta: 1Mark6 - 2016. Január 25. - 20:21:17
Az a baj, hogy nincs vehicleid-m. :(
Ahogy most kinéz :
\"70tK9yg.png\"
Ahogy kellene  :
\"exrrF4S.png\"
Valami ötlet?