Skripta koju koristim: Bezveze nesto od 0
Detaljan opis problema: Zanima me da li je ova komanda ispravna. Komanda u bazi namjesti admin level na koji ja hocu, ali u igri ne reaguje.
CMD:postaviadmina(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] > HEAD || !IsPlayerAdmin(playerid)) return NoPremission(playerid);
{
new id, kol;
if(sscanf(params, "ui", id, kol)) return SCM(playerid, GRAD3, "Koristite: /postaviadmina [Igracev ID] [Level 1-6)");
if(!IsPlayerConnected(id)) return SCM(playerid, CRVENA, "Taj igrac nije u igri");
new var[200];
format(var, sizeof(var), "Postavili ste %s za administratora level %d", id, kol);
SCM(playerid, ZELENA, var);
format(var, sizeof(var), "Postavljeni ste za administratora nivo %d, Admin: %s", kol, playerid);
SCM(id, SVETLOPLAVA, var);
PlayerInfo[id][pAdmin] = kol;
new Query[150];
format(Query, sizeof(Query), "UPDATE `korisnici` SET `Admin` = '%d' WHERE `Ime` = '%s' LIMIT 1", kol, ImeIgraca(id));
mysql_query(Query);
}
return 1;
}
kada ga iskucam u ovoj komandi, nece da izbaci
CMD:admini(playerid, params[])
{
new ime[MAX_PLAYER_NAME];
SCM(playerid, CRVENA, "________________ Administratori ________________");
foreach(Player, i)
{
if(PlayerInfo[i][pAdmin] > 0 && PlayerInfo[i][pAdmin] < HEAD && IsPlayerConnected(i))
{
GetPlayerName(i,ime,MAX_PLAYER_NAME);
format(CmdString, 128, "Admin: {FFFFFF}%s | {33CCFF}Nivo: {FFFFFF}%d", ime, PlayerInfo[i][pAdmin]);
SCM(playerid, CRVENA, CmdString);
}
}
return 1;
}
Dio skripte:
Neke slike/video za lakse dobivanje pomoci(neobavezno):
http://balkan-samp.com/forum/index.php?topic=15196.msg109693#msg109693 ProuÄi ovo.
Dakle vidi, ti si stavio ovu provjeru na komandu /admini if(PlayerInfo[i][pAdmin] > 0 && PlayerInfo[i][pAdmin] < HEAD && IsPlayerConnected(i))
To znaÄi ako je igraÄeva var veća od admina manja od head admina i joÅ¡ ako je konektovan. Nema logike.
Ovo ti je ispravno. CMD:admini(playerid, params[])
{
new ime[MAX_PLAYER_NAME];
SCM(playerid, CRVENA, "________________ Administratori ________________");
foreach(Player, i)
{
if(PlayerInfo[i][pAdmin] > 0 || PlayerInfo[i][pAdmin] < HEAD && IsPlayerConnected(i))
{
GetPlayerName(i,ime,MAX_PLAYER_NAME);
format(CmdString, 128, "Admin: {FFFFFF}%s | {33CCFF}Nivo: {FFFFFF}%d", ime, PlayerInfo[i][pAdmin]);
SCM(playerid, CRVENA, CmdString);
}
}
return 1;
}
Komanda /postaviadmina ti djeluje sasvim uredu.
if(PlayerInfo[i][pAdmin] > 0 || PlayerInfo[i][pAdmin] < HEAD && IsPlayerConnected(i))
fali ti nula poslije prve provjere, prije ILI. Ako si ubacio for petlju koja vrti od 0 do MAX_PLAYERS, Å¡ta će ti onda provjera da li je igraÄ konektovan?
Nije bilo potrebe da komentarišeš, to što on pravi duple provjere neke to je krajnje njegova stvar, ja sam samo editovo kod kako bi radio.
Da nije bilo potrebe za mojim komentarom, ne bi znao za 0 sigurno. Vidim kako si editovao, nimalo ne ÄitaÅ¡ kod, ofrljoke si kopirao samo, falio ti najbitniji dio. Samo ne znam koja svrha te provjere, kad provjera igraÄa od ID 0 do maksimalnog broja IDova, mislim stvarno, kranje ne potrebno.
Pa Å¡ta desilo se i Å¡ta, sluÄajno kako sam briso a nisam ni gledo. Pa provjera nema svrhe al' ako on tako radi nek radi Å¡ta mu mi možemo tu, nemoj dalje komentarisat bespotrebno je i spam.
Hvala radi, al sad mi je problem sto komande za admine ne rade, pise Nemate ovlastenje
CMD:postaviadmina(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] > HEAD || !IsPlayerAdmin(playerid)) return NoPremission(playerid);
{
new id, kol;
if(sscanf(params, "ui", id, kol)) return SCM(playerid, GRAD3, "Koristite: /postaviadmina [Igracev ID] [Level 1-6)");
if(!IsPlayerConnected(id)) return SCM(playerid, CRVENA, "Taj igrac nije u igri");
new var[200];
format(var, sizeof(var), "Postavili ste %s za administratora level %d", id, kol);
SCM(playerid, ZELENA, var);
format(var, sizeof(var), "Postavljeni ste za administratora nivo %d, Admin: %s", kol, playerid);
SCM(id, SVETLOPLAVA, var);
PlayerInfo[id][pAdmin] = kol;
new Query[150];
format(Query, sizeof(Query), "UPDATE `korisnici` SET `Admin` = '%d' WHERE `Ime` = '%s' LIMIT 1", kol, ImeIgraca(id));
mysql_query(Query);
}
return 1;
}
CMD:kick(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] > 1 && !IsPlayerAdmin(playerid)) return NoPremission(playerid);
{
new id, razlog[128];
if(sscanf(params, "us[128]", id, razlog)) return SCM(playerid, GRAD2, "Koristite: /kick [Igracev ID] [Razlog]");
if(!IsPlayerConnected(id)) return SCM(playerid, CRVENA, "Taj igrac nije u igri");
new kickstr[200];
format(kickstr, sizeof(kickstr), "Igrac %s je uspesko kikovan, Razlog: %s", ImeIgraca(id), razlog);
SCM(playerid, SVETLOCRVENA, kickstr);
format(kickstr, sizeof(kickstr), "Admin %s vas je kikovao sa servera. Razlog: %s", ImeIgraca(playerid), razlog);
SCM(playerid, SVETLOPLAVA, kickstr);
SetTimerEx("KickTimer", 1000, false, "i", id);
}
return 1;
}
Gresis provere da li je admin
Ti si uradio ovako
if(PlayerInfo[playerid][pAdmin] > 1 && !IsPlayerAdmin(playerid)) return NoPremission(playerid); // sto znaci da ako je Admin level 1 ili vise znaci da nema permisiju
A ovako treba :
if(PlayerInfo[playerid][pAdmin] < 1 && !IsPlayerAdmin(playerid)) return NoPremission(playerid); // ako je manji admin od 1 znaci da moze. Presudan ti je znak ">, < , ="
CMD:postaviadmina(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < HEAD || !IsPlayerAdmin(playerid)) return NoPremission(playerid);
{
new id, kol;
if(sscanf(params, "ui", id, kol)) return SCM(playerid, GRAD3, "Koristite: /postaviadmina [Igracev ID] [Level 1-6)");
if(!IsPlayerConnected(id)) return SCM(playerid, CRVENA, "Taj igrac nije u igri");
new var[200];
format(var, sizeof(var), "Postavili ste %s za administratora level %d", id, kol);
SCM(playerid, ZELENA, var);
format(var, sizeof(var), "Postavljeni ste za administratora nivo %d, Admin: %s", kol, playerid);
SCM(id, SVETLOPLAVA, var);
PlayerInfo[id][pAdmin] = kol;
new Query[150];
format(Query, sizeof(Query), "UPDATE `korisnici` SET `Admin` = '%d' WHERE `Ime` = '%s' LIMIT 1", kol, ImeIgraca(id));
mysql_query(Query);
}
return 1;
}
CMD:kick(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1 && !IsPlayerAdmin(playerid)) return NoPremission(playerid);
{
new id, razlog[128];
if(sscanf(params, "us[128]", id, razlog)) return SCM(playerid, GRAD2, "Koristite: /kick [Igracev ID] [Razlog]");
if(!IsPlayerConnected(id)) return SCM(playerid, CRVENA, "Taj igrac nije u igri");
new kickstr[200];
format(kickstr, sizeof(kickstr), "Igrac %s je uspesko kikovan, Razlog: %s", ImeIgraca(id), razlog);
SCM(playerid, SVETLOCRVENA, kickstr);
format(kickstr, sizeof(kickstr), "Admin %s vas je kikovao sa servera. Razlog: %s", ImeIgraca(playerid), razlog);
SCM(playerid, SVETLOPLAVA, kickstr);
SetTimerEx("KickTimer", 1000, false, "i", id);
}
return 1;
}