Problem(error/warning): Sta je bolje int ili bool? UlogovanProvera[playerid]==1 ili ==true
Dio skripte:
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log):
Slika/video ingame problema(obavezno ako je ingame problem):
Nema neke razlike u PAWN jeziku jer iirc isto imaju bitova (kec/true) (nula/false)
Svakako koristi bool za 0/1 vrednosti
Edit, evo sada cu videti asm kodove, samo da jedem
Okej, samo me je ovo zanima.
Ovo sam dobio za bool:
CODE 0 ; 0
;program exit point
halt 0
DATA 4 ; 0
dump 37030
DATA 0 ; 4
dump 1
CODE 0 ; 8
proc ; main
; line 6
break ; c
; line 7
break ; 10
load.pri 4
const.alt 1
eq
jzer 1c
;$exp
l.1c ; 30
zero.pri
retn
STKSIZE 1000
...a ovo za int
CODE 0 ; 0
;program exit point
halt 0
DATA 4 ; 0
dump 37030
DATA 0 ; 4
dump 1
CODE 0 ; 8
proc ; main
; line 6
break ; c
; line 7
break ; 10
load.pri 4
const.alt 1
eq
jzer 1c
;$exp
l.1c ; 30
zero.pri
retn
STKSIZE 1000
Znaci potpuno je isti koliko mogu videti :)
Ovo sam koristio za test:
[pawn]#include <a_samp>
new a = 1;
main()
{
if (a == 1)
{
//code
}
}[/pawn]
[pawn]#include <a_samp>
new bool:a = true;
main()
{
if (a == true)
{
//code
}
}[/pawn]
EDIT: I da, bila je ugasena optimizacija koda u compileru tako da nema greske
Znaci isti djavo
PS. Verovatno compajler pretvara bool u int ili tako nesto
Samo nemoj da koristis UlogovanProvera molim te.
Dao sam kao primer, i kao da je bitno sta koristis
Citat: // impact poslato Februar 11, 2020, 13:02:09 POSLE PODNE
Samo nemoj da koristis UlogovanProvera molim te.
To je samo ime funkcije, najbolje je primenjivati ENGLESKA imena za sve u modu (kao sto ja radim) ali svakako mu je potrebno i ovo za neke stvari :) (ne u svakoj komandi kao sto obicno rade haha)
[pawn]public OnPlayerCommandReceived(playerid, cmdtext[])
{
if(IgracUlogovan[playerid] == 0)
{
SCM(playerid, COLOR_GREY, "Niste se prijavili, te ne mozete koristiti komande!");
return 0;
}
return 1;
}[/pawn]
y_bit
[pawn]
new
BitArray:UlogovanProvera<MAX_PLAYERS>;
public OnPlayerConnect(playerid) {
Bit_Vet(UlogovanProvera, playerid); // Bit_Vet postavlja na false (0)
return 1;
}
public OnPlayerSpawn(playerid) {
Bit_Let(UlogovanProvera, playerid); // Bit_Let postavlja na true (1)
return 1;
}
// Ali nemas potrebe da koristis to 'UlogovanProvera' ja sam ti dao primer samo kako da koristis y_bit..
[/pawn]
Citat: YumikoJR poslato Februar 11, 2020, 13:08:57 POSLE PODNE
y_bit
[pawn]
new
BitArray:UlogovanProvera<MAX_PLAYERS>;
public OnPlayerConnect(playerid) {
Bit_Vet(UlogovanProvera, playerid); // Bit_Vet postavlja na false (0)
return 1;
}
public OnPlayerSpawn(playerid) {
Bit_Let(UlogovanProvera, playerid); // Bit_Let postavlja na true (1)
return 1;
}
// Ali nemas potrebe da koristis to 'UlogovanProvera' ja sam ti dao primer samo kako da koristis y_bit..
[/pawn]
Ne koristi se za to
y_bit :)
Citat: Kriso poslato Februar 11, 2020, 13:01:15 POSLE PODNE
PS. Verovatno compajler pretvara bool u int ili tako nesto
Edit: Ovu msg nisam video, ne, pawn je retardiran i ta dva imaju isto bitova (bool ima istu vrednost kao int koji ima vrednost 2mil+ (cellmax).., isto je ugl)
Ili to xd, da ne otvaram novu temu, evo sad sam bas prebacivao SCM u va_SCM, manje linija i lakse je deset puta.
E sad jel postoji neki compajler ili nesto da pronadje da li sam definisao ili nisam?
SCMF(playerid, -1, "Parametar: %d, %s",eBan[playerid][Admin]);
E sad posto nisam definisao sta je %s, jel postoji nesto da detektuje to?
Nema veze, sam vidi, pazi, nije bitno to toliko, i nikada ne koristi skracenice kao SCM/SDP/SCMTA/SCMF i slicno, ruzno je, bad code practice :)
va_SendClientMessage
Koristi ST 3 / VSC / VIM i sta sve ( Ja licno preporucujem ST 3 za PAWN jezik jer ima CTRL + B i mozes lagano da menjas Build System, kao i theme + Auto Complete (zbog toga ti ne treba SCM i ostalo) + Multi line editing + Fin UI + Sve zivo i nezivo, jede decu )
Koristim vec ST 3, sad sam prebacivao admin komande u va_SendClientMessage
[pawn]AGMPoruka(COLOR_LIGHTRED,"Server: Admin %s je dao warn igracu %s, razlog: %s;",GetName(playerid),GetName(pplayerid),reason);[/pawn]
Ovo je primer koda kada se realizuje
Ne prikazuje mi %s %d nista samo prazno prikaze u chat a ostalo prikaze, evo ovako
[pawn]Server: Admin je dao warn igracu , razlog: ;[/pawn]
[pawn]stock AGMPoruka(color, const string[],va_args<>)
{
foreach(new i : Player)
{
if(i != IPI)
{
if(PI[pGM] >= 1|| PI[pAdmin] >= 1)
{
if(IgracUlogovan == 1)
{
SCMF(i, color, string, va_start<3>);
}
}
}
}
}[/pawn]
PS. Prikazuje razlog, a nece GetName
[pawn]stock GetName(playerid) {
new ime[25];
GetPlayerName(playerid, ime, sizeof ime);
return ime;
}[/pawn]
[pawn]stock AGMPoruka(color, const string[], {Float,_}:...)
{
foreach(new i : Player) // Makao sam onu if(i == IPI) jer nikada u Player iteratoru ne mozes imati invalid id igraca
{
if(PI[pGM] <= 0 && PI[pAdmin] <= 0) // Takodje sam makao ulogovan proveru, samo restartuj varijable uredno
continue; // Nastavi loop, kao return samo ne prekida loop nego prelazi na sledeceg Player-a ako postoji
SendClientMessage(i, color, va_return(string, ___(2)));
// 2 a ne 3 kao sto si ti napisao, ako ne koristis YSI 5 samo gore stavi va_args<> umesto {Float,_}:... i ovde va_start<2> umesto ___(2)
}
}[/pawn]
Citat: malitoni poslato Februar 11, 2020, 22:36:55 POSLE PODNE
[pawn]stock AGMPoruka(color, const string[], {Float,_}:...)
{
foreach(new i : Player) // Makao sam onu if(i == IPI) jer nikada u Player iteratoru ne mozes imati invalid id igraca
{
if(PI[pGM] <= 0 && PI[pAdmin] <= 0) // Takodje sam makao ulogovan proveru, samo restartuj varijable uredno
continue; // Nastavi loop, kao return samo ne prekida loop nego prelazi na sledeceg Player-a ako postoji
SendClientMessage(i, color, va_return(string, ___(2)));
// 2 a ne 3 kao sto si ti napisao, ako ne koristis YSI 5 samo gore stavi va_args<> umesto {Float,_}:... i ovde va_start<2> umesto ___(2)
}
}[/pawn]
Hvala brat moj, radi <3