-
Heló! Tudom kicsit értelmetlen a téma neve... Mindegy.
Egy olyan szkript kéne, hogy csak a megadott játékosok tudnak feljönni pl. a [lol] elõtaggal. Tehát ha van [lol]Davee, [lol]Michael meg [lol]George és õk bele vannak írva, akkor ha feljön valaki [lol]Lejaratomaklant névvel, akkor kickelje a szerver a [lol] jogosulatlan használata miatt (+ üzenet, de nem fontos majd beleírom).
-
Az egyik legegyszerûbb módja (ha 5-6 ember van a [lol] csapatban):
#include <a_samp>
public OnPlayerConnect(playerid)
{
new lolname[20];
GetPlayerName(playerid, lolname, 20);
if(!strcmp(lolname, \"[lol]Davee\") || !strcmp(lolname, \"[lol]Michael\") || !strcmp(lolname, \"[lol]George\"))
{
// Ha [lol] tag
}
else
{
// Ha nem
}
return 1;
}
Persze ennél sokkal egyszerûbb változatok is léteznek.
-
És a sort lehet folytatni?
-
És a sort lehet folytatni?
Persze.
-
Feltöltöttem a hostos szerveremre, de mindenkit kickel akinek nem a felsoroltak között van a neve.
-
És nem ez a lényege, te ész? :P
-
És nem ez a lényege, te ész? :P
NEM.
Az a lényeg, hogyha valaki [LOL]SADLASDASDAS -al jön fel, akkor kickelje, de ha Mambo néven megy fel, akkor nyugodtan játszhasson.
-
Tehát csak a megadott emberek tudjanak feljönni [lol] elõtagú névvel.
-
Tesztelésre nem volt idõm de ha nem mûködik írj és ezt a kód sorozatot frissíteni fogom.
public
OnPlayerConnect(playerid)
{
// Játékos név megállapítás
new
name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
// Ellenõrzés hogy szerepel-e a [lol] clan név a csatlakozott játékos nevében
if(strfind(name, \"[lol]\", true) != -1)
{ // Ha igen akkor újabb ellenõrzés hogy az engedélyezett játékos nevek szerepelnek-e a \"[lol]\" elõtag után erre már teljes összehasonlítást lehet alkalmazni strcmp
new
bool:enable = false;
for(new i = 0; i < sizeof lol_n; i++)
{
if(strcmp(name, lol_n, true) == 0)
{
// Mivel több nevet kell le ellenõrizni ezért egy else utasítással nem lehet megoldani hogy kickelje a nem engedélyezett névvel rendelkezõ játékost.
//ezért létre kell hozni egy bool típusu változót melyet igaz értékre állítunk legyen \"enable\" a neve ahhoz hogy a késõbb jövõ ellenõrzésen ne kickelje a csatlakozó játékost.
enable = true;
break; // Egy break utasítással kiugrunk a for ciklusból hogy elkerüljük a további ellenõrzéseket hiszen már van találat. (És így nem lép ki az egész OnPlayerConnect részbõl.)
}
}
// Most jön a kis bool: változó ellenõrzése ciklus folyamaton kivül
if(enable)
{
SendClientMessage(playerid, -1, \"Welcome to my samp server\");
} else {
Kick(playerid);
return 1;
}
}
return 1;
}
-
(542) : error 017: undefined symbol \"GetPlayerNameEx\"
(561) : error 017: undefined symbol \"lol_n\"
(563) : error 017: undefined symbol \"lol_n\"
(563) : warning 215: expression has no effect
(563) : error 001: expected token: \";\", but found \"]\"
(563) : error 029: invalid expression, assumed zero
(563) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
6 Errors.
Ezt írta ki :S
-
(542) : error 017: undefined symbol \"GetPlayerNameEx\"
(561) : error 017: undefined symbol \"lol_n\"
(563) : error 017: undefined symbol \"lol_n\"
(563) : warning 215: expression has no effect
(563) : error 001: expected token: \";\", but found \"]\"
(563) : error 029: invalid expression, assumed zero
(563) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
6 Errors.
Ezt írta ki :S
:D Tetszenek az ilyen bemásolások ezt írta ki.
Szerintem csak valami kis apróságot elírtál nézd át újra.
Esetleg ha ide másolnád a teljes egészet ahogy próbálod alkalmazni akkor többet tudnának segíteni.
Már csak abból gondolom mivel az általam írt példában egyáltalán nem szerepel GetPlayerNameEx funkció.
És hozzá teszem most is: nem teszteltem le. Viszont a fordító nálam hibátlanul átkonvertálja addig nem adok ki semmilyen kódot míg nálam a fordító hiba nélkül le nem fordítja.
-
public OnPlayerConnect(playerid)
{
// Játékos név megállapítás
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
// Ellenõrzés hogy szerepel-e a [lol] clan név a csatlakozott játékos nevében
if(strfind(name, \"[lol]\", true) != -1)
{ // Ha igen akkor újabb ellenõrzés hogy az engedélyezett játékos nevek szerepelnek-e a \"[lol]\" elõtag után erre már teljes összehasonlítást lehet alkalmazni strcmp
new bool:enable = false;
for(new i = 0; i < sizeof hx_n; i++)
{
if(strcmp(name, lol_n, true))
{
// Mivel több nevet kell le ellenõrizni ezért egy else utasítással nem lehet megoldani hogy kickelje a nem engedélyezett névvel rendelkezõ játékost.
//ezért létre kell hozni egy bool típusu változót melyet igaz értékre állítunk legyen \"enable\" a neve ahhoz hogy a késõbb jövõ ellenõrzésen ne kickelje a csatlakozó játékost.
enable = true;
break; // Egy break utasítással kiugrunk a for ciklusból hogy elkerüljük a további ellenõrzéseket hiszen már van találat. (És így nem lép ki az egész OnPlayerConnect részbõl.)
}
}
// Most jön a kis bool: változó ellenõrzése ciklus folyamaton kivül
if(enable)
{
SendClientMessage(playerid, -1, \"Welcome to my samp server\");
} else {
Kick(playerid);
return 1;
}
Így írtam bele.
-
Ennek a végérõl amit ide másoltál hiányzik egy
}
return 1;
}
rész.
Még egy két próbálkozás és talán jó lesz. Ha nem megy ne engem okolj, és hagyd ezt az egészet a fenébe én csak segíteni akartam. Olyan hibákat írsz ami csak egy rosszul bemásolt dologból adódik ez látszik is abból ahogy itt közlöd a gondod ebben a topicban. Rosszul vissza másolt dolgok olyan hibák szerepelnek aminek semmi köze sincs az adott funkcióhoz. Egyáltalán elkezdted megnézni az adott sorokat amikre hibát ír ki a fordító? Én ott kezdeném. De csak úgy mennek a dolgok minél többet próbálkozik az ember nem?
Sok sikert.
(542) : error 017: undefined symbol \"GetPlayerNameEx\"
-
GetPlayerNameEx tudtommal ellenõrzi hogy van benne \"_\". Vagyis RP szerverekre ideális, ezért inkább maradj a GetPlayerName-nél.
-
GetPlayerNameEx nem alap függvény, úgy kell megírni... egyébként annyit tesz tudtommal, ha a nevet visszatérési értékként közli...
-
new LOLs[][MAX_PLAYER_NAME] = {\"[lol]Davee\",\"[lol]Michael\",\"[lol]George\"};
public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
if(strfind(name, \"[lol]\", true) != -1)
{
new bool:Okay = false;
for(new i;i < sizeof(LOLs);i++)
{
if(!strcmp(name,LOLs, true)) Okay = true;
}
if(!Okay) return Kick(playerid);
}
return 1;
}
-
Tettem egy fölösleges visszatérést, de már jó :D Ki is próbálom.