Szerző Téma: Offline játékos lekérdezése  (Megtekintve 1437 alkalommal)

Nem elérhető 1Mark6

  • 437
    • Profil megtekintése
Offline játékos lekérdezése
« Dátum: 2016. április 06. - 14:27:48 »
0 Show voters
Sziasztok!
Egy játékmódon dolgozok, és ott a parancsoknál szükségem lenne, egy olyanra, hogy ha olyan játékos Nevét/ID-jét irja be aki offline, nincs fent a szerveren akkor hibaüzenetet irjon.
Erre tökéletesen jó lenne a :
 
if(IsPlayerConnected(playerid))

 
függvény, azonban ez csak a csatlakozott játékost ellenörzi le, viszont nekem az kéne,hogyha be is van jelentekzve,
erre van egy, ilyen változóm :
 
Belepve[playerid]

 
Itt a kód :
 
CMD:adminad(playerid,params[])
{
new kinek,szint;
if(!Admin(playerid,4)) return NincsJog(playerid);
if(sscanf(params,\"ui\",kinek,szint)) return Uzenet(playerid,\"Használat: /adminad <Név/ID> <Szint>\");
{   
if(!Belepve[kinek]) return NemOnline(playerid);
if(szint < 1 || szint > 5) return Uzenet(playerid,\"Az Admin szintnek 1 és 5 között kell lennie !\");
Uzenet(kinek,\"Admint kaptál\");
JatekosInfo[kinek][pAdmin] = szint;
}
return 1;
}

 

if(!Belepve[kinek]) return NemOnline(playerid); // Így csak az online playereknek enged adni admint, offline játékos ID-t irok be vagy egy kitalált nevet, akkor SERVER:Unknow command, gondolom mert a például beirom, az 5-s ID-t és az ha nem online akkor Belepve[5] és ennek nincs értéke ezért irja ki hogy Unknow command.
if(IsPlayerConnected(kinek)) // Így viszont müködik, mert gondolom itt úgy fut le, hogy IsPlayerConnected(5) és itt letudja ellenőrözni.

 
Na most nekem a Belepve[kinek]-el kéne valami megoldás, hiszen ha nincs bejelentkezve a játékos akkor még nem kaphat admint stb.
Ötletek?

Offline játékos lekérdezése
« Válasz #1 Dátum: 2016. április 06. - 14:34:40 »
0 Show voters
if(IsPlayerConnected(kinek) && Belepve[kinek])

 
http://nyelvek.inf.elte.hu/leirasok/Pawn/index.php?chapter=4#section_2
Kicsit tekerj lejjebb, és nézd meg a logikai operátorokat
« Utoljára szerkesztve: 2016. április 06. - 14:36:30 írta blackdog476 »

Nem elérhető 1Mark6

  • 437
    • Profil megtekintése
Offline játékos lekérdezése
« Válasz #2 Dátum: 2016. április 06. - 15:17:50 »
0 Show voters
Itt is az IsPlayerConnected miatt az egyik része jó, de az és(&&) miatt kellene a Belepve[kinek] is, de ahogyan említettem, beírok egy random ID-t pl. 5 és akkor
if(Belepve[5])

 Mivel nincs 5-s IDjű játékos akinek ilyen értéke lenne ezért SERVER : Unknown command :(

Dupla hozzászólás automatikusan összefûzve. ( 2016. április 06. - 15:25:35 )

CMD:teszt1(playerid,params[])
{
new kinek;
if(sscanf(params,\"u\",kinek)) return Uzenet(playerid,\"Használat: /teszt < JÁTÉKOS NÉV / JÁTÉKOS ID >\");
{
if(IsPlayerConnected(kinek))
{
   Uzenet(playerid,\"Bejelentkezve\");
}
else Uzenet(playerid,\"Nem online\");
}
return 1;
}
CMD:teszt2(playerid,params[])
{
new kinek;
if(sscanf(params,\"u\",kinek)) return Uzenet(playerid,\"Használat: /teszt < JÁTÉKOS NÉV / JÁTÉKOS ID >\");
{
if(Belepve[kinek])
{
   Uzenet(playerid,\"Bejelentkezve\");
}
else Uzenet(playerid,\"Nem online\");
}
return 1;
}

 
Ittvan két kód, hogy lehessen látni közöttük a különbséget. Ha /teszt1 1Mark6-t irsz be akkor kiirja, hogy bejelentkezve, ha /teszt Sajt(nem online játékos) akkor kiirja, hogy nem online. Nos ez lenne az IsPlayerConnect, na de most /teszt2-vel ugyanezeket megcsinálva, amikor beirod pl. /teszt2 Sajt => SERVER:UNKNOWN COMMAND.
« Utoljára szerkesztve: 2016. április 06. - 15:25:35 írta 1Mark6 »

Offline játékos lekérdezése
« Válasz #3 Dátum: 2016. április 06. - 19:49:26 »
0 Show voters

if(IsPlayerConnected(kinek)) {
    if(!Belepve[kinek]) return SCM(playerid,-1,\"heloszia\");
    // ur scrt code hr
}

Nem elérhető 1Mark6

  • 437
    • Profil megtekintése
Offline játékos lekérdezése
« Válasz #4 Dátum: 2016. április 06. - 20:13:37 »
0 Show voters
Sajnos ezzel a módszerrel sem müködik, viszont rájöttem valamire.
Az \'u\' egy speciális értéket kezel, ami lehet a játékos neve és a játékos ID-je.
Az IsPlayerConnected() - Mindkét esetet tudja kezelni, IsPlayerConnected(20) vagy IsPlayerConnected(\"1Mark6\") <- ezt a programkód hibásnak irja, de a parancs lefutásakor logikailag ez helyetesítődik.
A változó \"Belepve[playerid]\" - Viszont csak az ID-t tudja kezelni, Belepve[20], a nevet nem tudja, még csupán logikailag sem, -> Belepve[1Mark6].
Ehhez kellene valami ötlet, hogy csak az olyan játékosokon tudja használni a parancsot, akiknél a Belepve[playerid] = true, jöhet a felvetés használj \'u\' helyett, \'d,i\' igen ezekkel tisztában vagyok, azonban nekem kényelmesebbnek tünne úgy, hogy ha a játékos nevét lehetne beirni.

Nem elérhető CMike

  • 332
  • FB.COM/sampdayrpg
    • Profil megtekintése
Offline játékos lekérdezése
« Válasz #5 Dátum: 2016. április 06. - 21:18:36 »
0 Show voters
Egyszerű, ha nevet írsz be, akkor végigfutsz minden játékoson egy ciklussal, majd lekéred a nevüket, ha valaki neve egyezik a beírt névvel, akkor eltárolod az ID-t
Ha nincs olyan név akkor visszatérsz INVALID_PLAYER_ID-vel vagy amivel éppen akarsz. a visszatérés értéke alapján pedig elágazásokkal csinálod tovább!
Egy új project-en dolgozom!
server28.clans.hu:7793
FB.COM/UJSAMP

Offline játékos lekérdezése
« Válasz #6 Dátum: 2016. április 06. - 21:24:52 »
0 Show voters
Sokkal egyszerűbb egy enumba létrehozni változót, majd egy tömböt létrehozni minden játékosnak és mikor belép, akkor 1-re, true-ra, vagy akármire állítani az értékét.
Gyakorlatban:
 

enum jatekosinfo
{
bool:pBelepve
}
new pInfo[MAX_PLAYERS][jatekosinfo];
//és mikor belép a játékos
pInfo[playerid][pBelepve] = true;

 
Egy hátránya van szerintem, ez akkor jó, ha sok változója van egy játékosnak. De ez a legjobb módszer. Szerintem. Jobb mint a ciklus :D
Aztán mikor le akarod kérni, hogy be van-e lépve:
 
if(pInfo[playerid][pBelepve])
{
//belépve
}
else
{
//nincs belépve
}

Nem elérhető 1Mark6

  • 437
    • Profil megtekintése
Offline játékos lekérdezése
« Válasz #7 Dátum: 2016. április 07. - 17:40:18 »
0 Show voters
Igazad van enumba használva kényelmesebb, azonban a probléma továbbra is fent áll, ha olyan játékos nevét / ID-t irom be aki nem online, kapom a SERVER:UNKNOWN COMMAND hibaüzenet, azonban ha az online játékos nevét / ID-t irom akkor müködik.

Offline játékos lekérdezése
« Válasz #8 Dátum: 2016. április 07. - 19:11:28 »
0 Show voters
https://wiki.sa-mp.com/wiki/GetPlayerID
Ha nem számot írt be, kérd le az ID-jét és utána már le tudod ellenőrizni.

Nem elérhető CMike

  • 332
  • FB.COM/sampdayrpg
    • Profil megtekintése
Offline játékos lekérdezése
« Válasz #9 Dátum: 2016. április 08. - 12:04:55 »
0 Show voters
Idézetet írta: CMike date=1459970316\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"60073\" data-ipsquote-contentclass=\"forums_Topic
Egyszerű, ha nevet írsz be, akkor végigfutsz minden játékoson egy ciklussal, majd lekéred a nevüket, ha valaki neve egyezik a beírt névvel, akkor eltárolod az ID-t
Ha nincs olyan név akkor visszatérsz INVALID_PLAYER_ID-vel vagy amivel éppen akarsz. a visszatérés értéke alapján pedig elágazásokkal csinálod tovább!
 
Ez a megoldás pont arra szolgál, higy névvel is mukodjon
Egy új project-en dolgozom!
server28.clans.hu:7793
FB.COM/UJSAMP

Offline játékos lekérdezése
« Válasz #10 Dátum: 2016. április 08. - 14:02:37 »
+1 Show voters
Na szóval. Nem kell ciklus, ugyanis szerintem itt te rontottál el valamit. Magyarázat:
Az \"u\" elválasztó azért speciális, mert ha te egy nevet, vagyis stringet írsz be, akkor is az ID-vel, vagyis intigerrel tér vissza. Gyakorlati példa:
Van fent 2 játékos, legyen Te és Én. A Te ID-d a 0(1Mark6), az enyém az 1(Ryan). Parancs, amivel teszteljük:
 
CMD:teszt(playerid, params[])
{
new id;
sscanf(params, \"u\", id);
printf(\"%d\", id);
return true;
}

 
Én beírom, hogy /teszt 1Mark6, akkor ezt fogja kiadni:
 
nulla, azaz 0

 
Mivel a Te ID-d az 0. Ugyanez van más esetnél is, amikor a csatlakozott játékos van. De ha azt írom be, hogy Sajt, akkor ezt fogja kiprintelni:
 
65535

 
mivel Sajt nincs fent így INVALID_PLAYER_ID-vel tért vissza. Tehát mindig intigerrel tér vissza, ha nevet vagy név töredéket írsz be.
Így nem az a hiba, hanem valami más.
Szerintem próbáld meg így:
 
CMD:adminad(playerid,params[])
{
new kinek,szint;
if(!Admin(playerid,4))
return NincsJog(playerid);
if(sscanf(params,\"ui\",kinek,szint))
return Uzenet(playerid,\"Használat: /adminad <Név/ID> <Szint>\");
if(!Belepve[kinek])
return NemOnline(playerid);
if(szint < 1 || szint > 5)
return Uzenet(playerid,\"Az Admin szintnek 1 és 5 között kell lennie !\");
Uzenet(kinek,\"Admint kaptál\");
JatekosInfo[kinek][pAdmin] = szint;
return true;
}

 
Ennyit tudtam segíteni, ha ez sem jó, akkor tanácstalan vagyok.  :shurg:

Nem elérhető 1Mark6

  • 437
    • Profil megtekintése
Offline játékos lekérdezése
« Válasz #11 Dátum: 2016. április 08. - 15:14:12 »
0 Show voters
Köszönöm szépen a segitséget, amit irtál azon elgondolkozva ez a megoldás született :
 
if(!IsPlayerConnected(kinek) || !Belepve[kinek]) return NemOnline(playerid);

 
Szóval ha a játékos nincs felcsatlakozva a szerverre, akkor kiirja neki, ez a BUGFIX mert ez képes az INVALID PLAYER ID-t is kezelni, és ha fentvan a szerveren átugrik a másik feltételre, hogyha a Belepve változója hamis, és mivel felvan csatlakozva így már létezik az a változó index ID. Szóval köszönöm szépen :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal