-
Eddig úgy tudtam hogy a && azt jelenti hogy ha mind a 2 (vagy több) változó igaz akkor lefut az eljárás, ha valamelyik nem akkor nem.
A || pedig ha egyik vagy a másik változó aktív akkor lefut az eljárás, ha egyik se akkor nem.
Viszont most kétségek között vagyok, ugyanis:
CMD:admin(playerid, params[])
{
if(Info[playerid][adminszint] == 1 && IsPlayerAdmin(playerid))
{
print(\"Admin + RCON vagy\");
} else {
print(\"Nem vagy mindketto egyszerre.\");
}
return 1;
}
Ez azt jelenti hogy ha az admin szintem 1 és rconba is bent vagyok akkor lefut az elsõ eljárás, ha valamelyikbe nem akkor a második.
Viszont mind a kettõ igaz (ez biztos!) mégis a második eljárás fut le, ötlet??
U.I.: Disconnectnél az Info[playerid][adminszint] változóm 0 lesz, pedig az van disconnectnél hogy az épp aktuális értéket mentse le az ini-be, és az aktuális az az 1, ezt se értem miért van..
-
Háát én inkább ezt a logikai elvet javasolnám:
CMD:admin(playerid, params[])
{
if(Info[playerid][adminszint] == 1 && IsPlayerAdmin(playerid))
{
print(\"Admin + RCON vagy\");
}
else
{
print(\"Nem vagy mindketto egyszerre.\");
}
return 1;
}
-
Ez ugyan az csak az indentáció más, viszont így mûködik, de akkor se értem..
CMD:admin(playerid, params[])
{
if(Info[playerid][adminszint] != 1 || !IsPlayerAdmin(playerid)) return SendClientMessage(playerid, BLUE, \"Nem vagy: Vagy Rcon, vagy belsõ admin\");
SendClientMessage(playerid, BLUE, \"Aktív valamelyik: Belsõ admin vagy RCON\");
return 1;
}
az adminszintem tuti 1, nem vagyok rconba bejelentkezve és azt írja egyik se aktív. (ha rconba is bejelentkezek akkor lefut a második eljárás.. rossz szkriptileg??)
-
Ez ugyan az csak az indentáció más, viszont így mûködik, de akkor se értem.. egy másik szkriptben ugyanígy van megcsinálva.
if(valtozo[playerid][valami] == 1 && valtozo[playerid][valami] == 2) return SendClientMessage(asd,asd, \"nem vagy 1 és 2\");
És ott mûködik... :||
Hát egyszerre 1 változónak nem lehet 2 értéke,persze hogy nem jó. :D
&& helyett || kell.Mivel a || jel az azt jelenti,hogy vagy az egyik vagy a másik.
-
Rosszul írtam kadaram.. szerkesztettem a hozzászólást erre próbálj meg légyszíves indokot adni.. :noexpression:
-
a ! a negáció...ugye itt az ellenõrzésnek IGEN vagy NEM \'értéke\' van...
&& = és
|| = vagy
írok pár példát segítségnek:
if(ar == 5000) // HA az ár EGYENLÕ 5000-el
if(ar != 5000) // HA az ár NEM EGYENLÕ 5000-el
if(IsPlayerAdmin(playerid)) // HA a játékos admin
if(!IsPlayerAdmin(playerid)) // HA a játékos NEM admin
if(!IsPlayerAdmin(playerid) && ar == 5000) // HA a játékos NEM admin ÉS az ár EGYENLÕ 5000-el
if(!IsPlayerAdmin(playerid) && ar != 5000) // HA a játékos NEM admin ÉS az ár NEM EGYENLÕ 5000-el
// ezt kicsit nehezebb lehet megérteni...
if(!(IsPlayerAdmin(playerid) && ar == 5000)) // HA a játékos NEM admin ÉS az ár NEM EGYENLÕ 5000-el
if(!IsPlayerAdmin(playerid) || ar == 5000) // HA a játékos NEM admin VAGY az ár EGYENLÕ 5000-el
if(!IsPlayerAdmin(playerid) || ar != 5000) // HA a játékos NEM admin VAGY az ár NEM EGYENLÕ 5000-el
és ezt még elég jól lehet bonyolítani :)
azért nem admint írtam hogy az RCON és a változóval tárolt admin ne zavarhasson össze...
-
Akkor jól tudtam még is..
CMD:admin(playerid, params[])
{
if(Info[playerid][adminszint] != 1 || !IsPlayerAdmin(playerid)) return SendClientMessage(playerid, BLUE, \"Nem vagy se RCON, se Belsõ admin.\");
SendClientMessage(playerid, BLUE, \"Vagy RCON vagy, vagy Belsõ admin.\");
return 1;
}
Jelen esetben az adminszint-em 1, rcon-ba nem vagyok bejelentkezve mégis azt írja hogy \"Vagy RCON vagy, vagy Belsõ admin.\"
Miért?
Valamint miért van az hogyha lelépek a szerverrõl a megfelelõ ini fájlba a változók lenullázódnak?
Például átírom az ini -be az adminszintem 1 re, belépek a szerveren lekérdezem az értéket és 1-et ír, lelépek a szerverrõl megnézem az ini fájl-t és az adminszintem 0.
public OnPlayerDisconnect(playerid, reason)
{
new file[128];
GetPlayerName(playerid, plName, sizeof(plName));
format(file, sizeof(file), \"/Weed-Admin/Jatekosok/%s.ini\", plName);
if(fexist(file))
{
dini_IntSet(file, \"Adminszint\", Info[playerid][adminszint]);
dini_IntSet(file, \"Penz\", Info[playerid][penz]);
dini_IntSet(file, \"Olesek\", Info[playerid][olesek]);
}
return 1;
}
Lehetséges hogy nem futnak le az eljárások mert már lecsatlakoztam?
-
A || azt jelenti, hogy vagy az egyik vagy a másik.
-
Tudom, és azt is akarom.
Vagy RCON vagy Belsõ admin -nak fusson le a 2. Üzenet.
Valamint ellenõriztem a Disconnect-es fgv-eket, lefutnak ez biztos, tehát gõzöm sincs mi a probléma.
-
CMD:admin(playerid, params[])
{
if(Info[playerid][adminszint] = 1 || !IsPlayerAdmin(playerid))
{
SendClientMessage(playerid, BLUE, \"Vagy RCON vagy, vagy Belsõ admin.\");
}
else SendClientMessage(playerid, BLUE, \"Nem vagy se RCON, se Belsõ admin.\");
return 1;
}
-
Hibás + én az egysoros megoldással szerettem volna megoldani.. de mindegy akkor kiveszem az RCON részt úgy mûködik.
Viszont a másik problémám: reloadfs weedadmin után az iniben lenullázódik minden.. :|
-
A dini végett, ez a legnagyobb hibája.
Amúgy a legelsõ posztod is mûködik, csak a regisztrációs fájlban lévõ lenullázódás miatt gondolod úgy hogy rossz a kód.
Mivel te azt gondolod hogy a loginnál ez a változó (Info[playerid][adminszint]) megkapta az egyes(1) értéket, és aszerint várod a mûködését, holott mint írtad lenullázódnak az értékek a regisztrációs fájlban.
Megint csak azt tudom mondani hogy printf használata sokat segít.
printf(\"Info[playerid][adminszint] = %d\", Info[playerid][adminszint]);
És ezt beleírod a a parancsba és úgy tesztelsz, és meglesed a server_log.txt fájlt.
-
Félre értettél ;D
Loginoláskor az ini ben tárolt értéket kapja meg.
Am mégis kellene ez a francos funkció mert így vagy csak 1-es/2-es/3-as (stb) admin használhatja a parancsot. :/

CMD:adminszint(playerid, params[])
{
new str[128];
format(str, sizeof(str), \"PlayerInfo[playerid][adminszint] értéke: %d\", Info[playerid][adminszint]);
SendClientMessage(playerid, GREEN, str);
return 1;
}
CMD:admin(playerid, params[])
{
if(Info[playerid][adminszint] != 1 || Info[playerid][adminszint] != 2012) return SendClientMessage(playerid, RED, \"Nem vagy admin!\");
SendClientMessage(playerid, ORANGE, \"1 es vagy 2012es szintû admin vagy!\");
return 1;
}
-
CMD:admin(playerid, params[])
{
if(Info[playerid][adminszint] != 1 && Info[playerid][adminszint] != 2012) return SendClientMessage(playerid, RED, \"Nem vagy admin!\");
SendClientMessage(playerid, ORANGE, \"1 es vagy 2012es szintû admin vagy!\");
return 1;
}
-
Mert VAGY( || ) feltételt futtattál le és ( && ) feltétel helyett. Ezért csak az egyiket veszi figyelembe nem pedig mindkettõt.
-
De ha a || \"VAGY\" akkor: Ha(adminszint != 1 \"VAGY\" adminszint != 2012) return \"nem vagy admin\"
Amit Kovacs írt pont az ellenkezõje.. ???
De lényeg hogy && - el mûködik, köszi zárok. :)
-
Már meg is van a hiba && operátornál mindkét oldalán igaz vagyis true értéknek kell lennie, akkor írja ki ezt az üzenetet : print(\"Admin + RCON vagy\");
Amit postoltál képet azon az érték 2012 akkor ne várd hogy ez mûködjön:
CMD:admin(playerid, params[])
{
if(Info[playerid][adminszint] == 1 && IsPlayerAdmin(playerid))
{
print(\"Admin + RCON vagy\");
} else {
print(\"Nem vagy mindketto egyszerre.\");
}
return 1;
}
Ez csak akkor mûködik ha az Info[playerid][adminszint] értéke 1 és rconként be van jelentkezve a játékos.