Szerző Téma: || és && jelek  (Megtekintve 1857 alkalommal)

|| és && jelek
« Dátum: 2012. október 16. - 21:20:15 »
0 Show voters
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..
« Utoljára szerkesztve: 2012. október 16. - 21:24:55 írta Johnies00 »

|| és && jelek
« Válasz #1 Dátum: 2012. október 16. - 21:25:16 »
0 Show voters
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;
}

|| és && jelek
« Válasz #2 Dátum: 2012. október 16. - 21:33:31 »
0 Show voters
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??)
« Utoljára szerkesztve: 2012. október 16. - 21:44:26 írta Johnies00 »

|| és && jelek
« Válasz #3 Dátum: 2012. október 16. - 21:42:23 »
0 Show voters
Idézetet írta: Johnies00 date=1350416011\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"28680\" data-ipsquote-contentclass=\"forums_Topic
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.

|| és && jelek
« Válasz #4 Dátum: 2012. október 16. - 21:45:58 »
0 Show voters
Rosszul írtam kadaram.. szerkesztettem a hozzászólást erre próbálj meg légyszíves indokot adni..  :noexpression:

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
|| és && jelek
« Válasz #5 Dátum: 2012. október 17. - 12:41:23 »
0 Show voters
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...
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

|| és && jelek
« Válasz #6 Dátum: 2012. október 17. - 14:56:45 »
0 Show voters
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?
« Utoljára szerkesztve: 2012. október 17. - 15:00:10 írta Johnies00 »

|| és && jelek
« Válasz #7 Dátum: 2012. október 17. - 15:02:13 »
0 Show voters
A || azt jelenti, hogy vagy az egyik vagy a másik.

|| és && jelek
« Válasz #8 Dátum: 2012. október 17. - 15:04:56 »
0 Show voters
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.

|| és && jelek
« Válasz #9 Dátum: 2012. október 17. - 15:21:39 »
0 Show voters
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;
}

|| és && jelek
« Válasz #10 Dátum: 2012. október 17. - 15:27:05 »
0 Show voters
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.. :|
« Utoljára szerkesztve: 2012. október 17. - 16:02:19 írta Johnies00 »

|| és && jelek
« Válasz #11 Dátum: 2012. október 17. - 16:18:10 »
0 Show voters
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.

|| és && jelek
« Válasz #12 Dátum: 2012. október 17. - 16:56:52 »
0 Show voters
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. :/

\"Nevtelen-2.png\"
 

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;
}

Nem elérhető Casamiro

  • 1046
    • Profil megtekintése
|| és && jelek
« Válasz #13 Dátum: 2012. október 17. - 17:05:58 »
0 Show voters
 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;
}

|| és && jelek
« Válasz #14 Dátum: 2012. október 17. - 17:06:23 »
0 Show voters
Mert VAGY( || ) feltételt futtattál le és ( && ) feltétel helyett. Ezért csak az egyiket veszi figyelembe nem pedig mindkettõt.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal