Szerző Téma: Jármű törlése játékos kiszállásakor  (Megtekintve 488 alkalommal)

Jármű törlése játékos kiszállásakor
« Dátum: 2015. július 02. - 14:41:58 »
0 Show voters
Sziasztok.
Lenne egy kérdésem felétek. Van egy parancs ami nem más mint a /acar. Az adminnak ledob egy járművet. Hogyan tudom azt megoldani, hogy az admin kiszállásakor a jármű törlödjön, mert nem kéne hogy a játékosok elhordják :) ;) . Előre is köszönöm a válaszotokat.
U.I.:
A parancs:
 

CMD:acar(playerid, params[])
{
if(pInfo[playerid][pAdmin] >= 3)
{
    new alma;
        new Float:asdX, Float:asdY, Float:asdZ;
        GetPlayerPos(playerid,asdX, asdY, asdZ);
        alma = CreateVehicle(411, Float:asdX, Float:asdY, Float:asdZ, 0, 1, 1, 0);
        PutPlayerInVehicle(playerid, alma, 0);
}
return 1;
}

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
Jármű törlése játékos kiszállásakor
« Válasz #1 Dátum: 2015. július 02. - 18:26:58 »
0 Show voters
Szia! A változóban vannak már problémák!
Tedd a programkódod elejére, a függvénykönyvtárak betallózása alá, a következő változó deklarációját;
 
new AdminVehicle[MAX_PLAYERS] = {INVALID_VEHICLE_ID, ...};

 
Ezek után az \"acar\" parancsodat írd át a következőre;
 
CMD:acar(playerid, params[])
{
if(pInfo[playerid][pAdmin] >= 3)
{
        CheckAdminVehicle(playerid);
new Float:asdX, Float:asdY, Float:asdZ;
GetPlayerPos(playerid,asdX, asdY, asdZ);
AdminVehicle[playerid] = CreateVehicle(411, Float:asdX, Float:asdY, Float:asdZ, 0, 1, 1, 0);
PutPlayerInVehicle(playerid, AdminVehicle[playerid], 0);
}
return 1;
}

 
És egy kis védelem gyanánt tedd még a következő kódot, az OnPlayerDisconnect callbackhoz, amely azt eredményezi, hogy amikor kilép egy admin, ellenőrzi, hogy le hívott-e adminjárművet, és ha igen, törli azt;
 
CheckAdminVehicle(playerid); //Igen, még akkor is ellenőrizzük, ha nem admin. (Hogyha időközben elvették volna az adminját akkor is törli.)

 
Továbbá akkor a kérésed teljesítéséhez az OnPlayerStateChange callback alá szúrd be az alábbi kódot:
 
if(oldstate == PLAYER_STATE_DRIVER) CheckAdminVehicle(playerid);

 
És persze a CheckAdminVehicle függvény:
 
stock CheckAdminVehicle(playerid) {
    if(AdminVehicle[playerid] != INVALID_VEHICLE_ID) {
        //Ha van neki adminjárműve..
        AdminVehicle[playerid] = INVALID_VEHICLE_ID;
        DestroyVehicle(AdminVehicle[playerid]);
    }
}

 
Spoiler for Külön scriptben megírva, hogy minden érthető legyen!:
#define FILTERSCRIPT
#include <a_samp>
#include <zcmd>
new AdminVehicle[MAX_PLAYERS] = {INVALID_VEHICLE_ID, ...};
CMD:acar(playerid, params[])
{
if(pInfo[playerid][pAdmin] >= 3)
{
        CheckAdminVehicle(playerid);
   new Float:asdX, Float:asdY, Float:asdZ;
   GetPlayerPos(playerid,asdX, asdY, asdZ);
   AdminVehicle[playerid] = CreateVehicle(411, Float:asdX, Float:asdY, Float:asdZ, 0, 1, 1, 0);
   PutPlayerInVehicle(playerid, AdminVehicle[playerid], 0);
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
CheckAdminVehicle(playerid); //Igen, még akkor is ellenőrizzük, ha nem admin. (Hogyha időközben elvették volna az adminját akkor is törli.)
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(oldstate == PLAYER_STATE_DRIVER) CheckAdminVehicle(playerid);
return 1;
}
stock CheckAdminVehicle(playerid) {
    if(AdminVehicle[playerid] != INVALID_VEHICLE_ID) {
        //Ha van neki adminjárműve..
        AdminVehicle[playerid] = INVALID_VEHICLE_ID;
        DestroyVehicle(AdminVehicle[playerid]);
    }
}
Eltolódások miatt pastebin link: http://pastebin.com/NNb6k0Ai
« Utoljára szerkesztve: 2015. július 02. - 18:28:32 írta Pedró »

Nem elérhető anGeL

  • Adminisztrátor
  • 2158
    • Profil megtekintése
Jármű törlése játékos kiszállásakor
« Válasz #2 Dátum: 2015. július 02. - 18:52:06 »
0 Show voters
[mod]Áthelyezve[/mod]

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal