Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: Shaw Salcedo Februar 11, 2020, 12:46:13 posle podne

Naslov: Bool ili int
Poruka od: Shaw Salcedo Februar 11, 2020, 12:46:13 posle podne
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):
Naslov: Odg: Bool ili int
Poruka od: malitoni Februar 11, 2020, 12:48:13 posle podne
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
Naslov: Odg: Bool ili int
Poruka od: Shaw Salcedo Februar 11, 2020, 12:49:48 posle podne
Okej, samo me je ovo zanima.
Naslov: Odg: Bool ili int
Poruka od: malitoni Februar 11, 2020, 12:58:10 posle podne
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:
Pawno Code: [Izaberi]
#include <a_samp>

new a = 1;

main()
{
if (a == 1)
{
//code
}
}
Pawno Code: [Izaberi]
#include <a_samp>

new bool:a = true;

main()
{
if (a == true)
{
//code
}
}

EDIT: I da, bila je ugasena optimizacija koda u compileru tako da nema greske
Naslov: Odg: Bool ili int
Poruka od: Shaw Salcedo Februar 11, 2020, 12:59:57 posle podne
Znaci isti djavo
Naslov: Odg: Bool ili int
Poruka od: malitoni Februar 11, 2020, 13:00:31 posle podne
Znaci isti djavo
Kao sto mozes videti :P
Mozes lock temu
Naslov: Odg: Bool ili int
Poruka od: Shaw Salcedo Februar 11, 2020, 13:01:15 posle podne
PS. Verovatno compajler pretvara bool u int ili tako nesto
Naslov: Odg: Bool ili int
Poruka od: // impact Februar 11, 2020, 13:02:09 posle podne
Samo nemoj da koristis UlogovanProvera molim te.
Naslov: Odg: Bool ili int
Poruka od: Shaw Salcedo Februar 11, 2020, 13:02:44 posle podne
Dao sam kao primer, i kao da je bitno sta koristis
Naslov: Odg: Bool ili int
Poruka od: malitoni Februar 11, 2020, 13:03:17 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)
Naslov: Odg: Bool ili int
Poruka od: Shaw Salcedo Februar 11, 2020, 13:04:23 posle podne
Pawno Code: [Izaberi]
public OnPlayerCommandReceived(playerid, cmdtext[])
{
    if(IgracUlogovan[playerid] == 0)
{
        SCM(playerid, COLOR_GREY, "Niste se prijavili, te ne mozete koristiti komande!");
return 0;
}
    return 1;
}
Naslov: Odg: Bool ili int
Poruka od: YumikoJR Februar 11, 2020, 13:08:57 posle podne
y_bit

Pawno Code: [Izaberi]
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..
Naslov: Odg: Bool ili int
Poruka od: malitoni Februar 11, 2020, 13:09:52 posle podne
y_bit

Pawno Code: [Izaberi]
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..
Ne koristi se za to y_bit :)
Naslov: Odg: Bool ili int
Poruka od: YumikoJR Februar 11, 2020, 13:12:16 posle podne
Ne koristi se za to y_bit :)
Ali moze..
Naslov: Odg: Bool ili int
Poruka od: malitoni Februar 11, 2020, 14:59:24 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)
Naslov: Odg: Bool ili int
Poruka od: Shaw Salcedo Februar 11, 2020, 18:13:23 posle podne
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?
Naslov: Odg: Bool ili int
Poruka od: malitoni Februar 11, 2020, 20:39:27 posle podne
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 )
Naslov: Odg: Bool ili int
Poruka od: Shaw Salcedo Februar 11, 2020, 22:14:45 posle podne
Koristim vec ST 3, sad sam prebacivao admin komande u va_SendClientMessage
Pawno Code: [Izaberi]
AGMPoruka(COLOR_LIGHTRED,"Server: Admin %s je dao warn igracu %s, razlog: %s;",GetName(playerid),GetName(pplayerid),reason);Ovo je primer koda kada se realizuje
Ne prikazuje mi %s %d nista samo prazno prikaze u chat a ostalo prikaze, evo ovako
Pawno Code: [Izaberi]
Server: Admin    je dao warn igracu   , razlog:   ;
Pawno Code: [Izaberi]
stock AGMPoruka(color, const string[],va_args<>)
{
    foreach(new i : Player)
    {
        if(i != IPI)
        {
            if(PI[i][pGM] >= 1|| PI[i][pAdmin] >= 1)
            {
                if(IgracUlogovan[i] == 1)
                {
                    SCMF(i, color,  string, va_start<3>);
                }
            }
        }
    }
}

PS. Prikazuje razlog, a nece GetName

Pawno Code: [Izaberi]
stock GetName(playerid) {
    new ime[25];
    GetPlayerName(playerid, ime, sizeof ime);
    return ime;
}
Naslov: Odg: Bool ili int
Poruka od: malitoni Februar 11, 2020, 22:36:55 posle podne
Pawno Code: [Izaberi]
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[i][pGM] <= 0 && PI[i][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)
}
}
Naslov: Odg: Bool ili int
Poruka od: Shaw Salcedo Februar 11, 2020, 22:39:29 posle podne
Pawno Code: [Izaberi]
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[i][pGM] <= 0 && PI[i][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)
}
}
Hvala brat moj, radi <3