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: Don - 2014. Október 06. - 15:24:23

Cím: Autó lekérésénél az elõzõleg lekért autó törlõdjön, hogyan?
Írta: Don - 2014. Október 06. - 15:24:23
Üdv mindenkinek! :)
Neharagudjatok, hogy ilyen (talán) alap dologgal fordulok hozzátok, csak teljesen tanácstalan vagyok ezügyben.
Azt szeretném megoldani, hogy ha valaki másodszor lekér egy autót, akkor az elõzõ eltörlõdjön, így megelõzve a feleslegess lagg-okat.
Viszont sajnos fogalmam sincs, hogy tudnám megoldani, mert nekem minden kocsira külön parancs van és ezt szeretném is megtartani.
Valaki tudna segíteni? Elõre is köszönöm! :)
Cím: Autó lekérésénél az elõzõleg lekért autó törlõdjön, hogyan?
Írta: Dfoglalo - 2014. Október 06. - 16:03:21
Semmi probléma, kérdezz bátran, akár alap dolgokat is, ezért is van ez a fórumrész.
 
new Jarmu[MAX_PLAYERS]; // Deklarálás
Jarmu[playerid] = CreateVehicle/AddStaticVehicle(Ex)(...); // A jármû létrehozása
DestroyVehicle(Jarmu[playerid]); // A létrehozott jármû törlése
Jarmu[playerid] = CreateVehicle/AddStaticVehicle(Ex)(...); // Új jármû létrehozása
Cím: Autó lekérésénél az elõzõleg lekért autó törlõdjön, hogyan?
Írta: Don - 2014. Október 06. - 16:36:19
És ezt hova is kell beillesztenem?
Cím: Autó lekérésénél az elõzõleg lekért autó törlõdjön, hogyan?
Írta: rayle - 2014. Október 06. - 16:52:31
new Jarmu[MAX_PLAYERS];

Ezt a mod elejére, gondolom van több globális változód.
 
Jarmu[playerid] = CreateVehicle/AddStaticVehicle(Ex)(...);

Ezt pedig amikor a megadott paranccsal létrehozod neki a jármûvet, pl. látom írtad hogy minden kocsira külön parancsod van, tehát jelenleg egy parancs hasonlóan nézhet ki:
 
CMD:infernus(playerid, params[])
{
    GetPlayerPos(...);
    CreateVehicle(...);
    return 1;
}

A jármû létrehozásakor a CreateVehicle függvény visszatér a létrehozott jármû azonosítójával, így azt kell eltárolni a Jarmu változóba minden játékosnak. Tehát:
 
CMD:infernus(playerid, params[])
{
    GetPlayerPos(...);
    Jarmu[playerid] = CreateVehicle(...);
    return 1;
}

 
Majd a parancs beírásánál le kell ellenõrzni, hogy a játékos hozott -e létre jármûvet, és ha igen, töröljük.
 
CMD:infernus(playerid, params[])
{
    GetPlayerPos(...);
    if(IsValidVehicle(Jarmu[playerid])) DestroyVehicle(Jarmu[playerid]); // ha van létrehozott jármûve, töröljük
    Jarmu[playerid] = CreateVehicle(...);
    return 1;
}

 
Illetve célszerû kilépésnél is törölni a létrehozott jármûvet:
 
public OnPlayerDisconnect(playerid, reason)
{
    if(IsValidVehicle(Jarmu[playerid])) DestroyVehicle(Jarmu[playerid]); // ha van létrehozott jármûve, töröljük
    return 1;
}

 



Ha az IsValidVehicle függvényre hibát írna ki, írd a mod elejére:
 
native IsValidVehicle(vehicleid);
Cím: Autó lekérésénél az elõzõleg lekért autó törlõdjön, hogyan?
Írta: Don - 2014. Október 06. - 17:02:05
Köszi a választ!
Nálam egy kocsi lekérése így néz ki pontosan:
 
CMD:leviathan(playerid, params [])
{
new Float:X;
new Float:Y;
new Float:Z;
new Float:A;
GetPlayerPos(playerid,X,Y,Z);
GetPlayerFacingAngle(playerid,A);
Car = CreateVehicle(417,X,Y,Z,A,-1,-1,-1);
PutPlayerInVehicle(playerid,Car,0);
return 1;
}

 
Nekem ott van, hogy Car = Create Vehicle(...);
Most akkor írjam oda mégegyszer, hogy Jarmu = CreateVehicle(...); ?
Aztán a car az csak úgy van a mód elején, hogy \"new Car;\"
Cím: Autó lekérésénél az elõzõleg lekért autó törlõdjön, hogyan?
Írta: rayle - 2014. Október 06. - 17:07:59
Mod eleje:
new Jarmu[MAX_PLAYERS];

 
Parancs:
 

CMD:leviathan(playerid, params [])
{
new Float:X;
new Float:Y;
new Float:Z;
new Float:A;
GetPlayerPos(playerid,X,Y,Z);
GetPlayerFacingAngle(playerid,A);
if(IsValidVehicle(Jarmu[playerid])) DestroyVehicle(Jarmu[playerid]);
Jarmu[playerid] = CreateVehicle(417,X,Y,Z,A,-1,-1,-1);
PutPlayerInVehicle(playerid,Jarmu[playerid],0);
return 1;
}

Ennek mintájára kell a többi parancsot is megcsinálnod.
Cím: Autó lekérésénél az elõzõleg lekért autó törlõdjön, hogyan?
Írta: Don - 2014. Október 06. - 17:18:50
Az \"if(IsValidVehicle...\" sorban elég sok hibát talál:
 
error 017: undefined symbol \"IsValidVehicle\"
warning 215: expression has no effect
error 001: expected token: \";\", but found \")\"
error 029: invalid expression, assumed zero
fatal error 107: too many error messages on one line

 
[mod]Kitettem helyetted a

taget![/mod]
Cím: Autó lekérésénél az elõzõleg lekért autó törlõdjön, hogyan?
Írta: rayle - 2014. Október 06. - 17:59:11
Idézetet írta: rayle date=1412607151\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"50888\" data-ipsquote-contentclass=\"forums_Topic
Ha az IsValidVehicle függvényre hibát írna ki, írd a mod elejére:
 
native IsValidVehicle(vehicleid);

 

Ha még ezután is hibát ír, másold be a parancsot.
Cím: Autó lekérésénél az elõzõleg lekért autó törlõdjön, hogyan?
Írta: Flash - 2014. Október 08. - 22:11:29
#include a_samp
#include zcmd
new Jarmu[MAX_PLAYERS];
public OnPlayerDisconnect(playerid, reason) {
if(GetVehicleModel(GetPVarInt(playerid, \"LastVeh\") != 0)) DestroyVehicle(GetPVarInt(playerid, \"LastVeh\"));
return 1;
}
CMD:leviathan(playerid, params []) {
    new Float:pos[4];
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    GetPlayerFacingAngle(playerid, pos[3]);
if(GetVehicleModel(GetPVarInt(playerid, \"LastVeh\") != 0)) DestroyVehicle(GetPVarInt(playerid, \"LastVeh\"));
    Jarmu[playerid] = CreateVehicle(417, pos[0], pos[1], pos[2], pos[3], -1, -1, -1);
    PutPlayerInVehicle(playerid, Jarmu[playerid], 0);
SetPVarInt(playerid, \"LastVeh\", Jarmu[playerid]);
    return 1;
}

 
Én így oldanám meg, de kinek a pap kinek a paplan :\')