Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: Carera poslato Avgust 20, 2019, 16:17:44 POSLE PODNE

Naslov: Uloganigrac
Poruka od: Carera poslato Avgust 20, 2019, 16:17:44 POSLE PODNE
Zanima me koja je razlika izmedju GetPVarInt UloganIgrac i IsplayerConnected, moze li se uloganigrac provjera izbrisati jer ima ih dosta?
Naslov: Odg: Uloganigrac
Poruka od: Osamu Dazai poslato Avgust 20, 2019, 16:22:53 POSLE PODNE
Prvo: Pročitaj pravila molim te
Drugo: Razlika je u tome da je IsPlayerConnected provera da li je igrač KONEKTOVAN a UlogovanIgrac da li je igrač ULOGOVAN Script-sided, potpuno različiti pojmovi
Naslov: Odg: Uloganigrac
Poruka od: __vedran.xyz77 poslato Avgust 20, 2019, 16:28:05 POSLE PODNE
IsPlayerConnect proverava da li ti je igrac konektovan na server,
dok je UlogovanIgrac varijabla, ali u vecini skripti je ta varijabla stavljena kada igrac ukuca sifru bude 1, pst ne znam bolje da ti objasnim evo ti primer
[pawn]
CMD:test(playerid)
{
if(IsPlayerConnected(playerid)) return SendClientMessage(playerid,-1,"Nisi konektovan"); // ali nema kome da posalje poruku iks de IsPlayerConnected mozes da koristis da li je neki drugi igrac konektovan primer
if(IsPlayerConnected(igrac)) return SendClientMessage(playerid,-1,"Taj igrac nije konektovan");
PlayerInfo[playerid][pAdmin] = 6;
return(true);
}
[/pawn]


[pawn]
CMD:test2(playerid)
{
if(UlogovanIgrac[playerid] == 0 ) return SCM(playerid,-1,"moras se ulogovati"); // u /test komandi igrac bi mogao da vrsi tu komandu cak i kad nije ulogovan dok ovde ne.
PlayerInfo[playerid][pAdmin] = 6;
return(true);
}
[/pawn]
Moja preporuka ti je da to ne brises jer fazon ako ti se ucitavaju podatci na Connectu, igrac moze da stavi vlasnikovo ime i bez da ukuca sifru moze da vrsi komande i pobanuje pola servera  :P
Naslov: Odg: Uloganigrac
Poruka od: YumikoJR poslato Avgust 20, 2019, 20:10:50 POSLE PODNE
[pawn]
COMMAND:msg(playerid, params[]) {
    if(sscanf(params, "u", params[0]))
        return ...

    if(!IsPlayerConnected(params[0]))
        return SendClientMessage(playerid, 0xFF0000AA, "(Error): {FFFFFF}Igrac nije konektovan na server!");

    if(playerLogged[params[0]] == false/0)
        return SendClientMessage(playerid, 0xFF0000AA, "(Error): {FFFFFF}Igrac se nije ulogovao!");

    SendClientMessage(params[0], "text");
    return 1;
}

//Kad uspesno ukuca sifru na login sistemu:
playerLogged[playerid] = true/1;

//to je to, playerLogged = Ako je igrac ulogovan, ako je prosao login, IsPlayerConnected = Ako je igrac uopste na serveru..
[/pawn]
Naslov: Odg: Uloganigrac
Poruka od: Osamu Dazai poslato Avgust 20, 2019, 21:22:12 POSLE PODNE
@Itz.Yansi42O
[pawn]COMMAND:msg(playerid, params[])
{
    if(sscanf(params, "r", params[0]))
        return ...

    if(params[0] == INVALID_PLAYER_ID)
        return SendClientMessage(playerid, 0xFF0000AA, "(Error): {FFFFFF}Igrac nije konektovan na server!");

    if(Bit_Get(LoggedIn, playerid) == false)
        return SendClientMessage(playerid, 0xFF0000AA, "(Error): {FFFFFF}Igrac se nije ulogovao!");

    SendClientMessage(params[0], 0xFF0000AA, "text");
    return 1;
}

//Kad uspesno ukuca sifru na login sistemu:
Bit_Let(LoggedIn, playerid);[/pawn]
Naslov: Odg: Uloganigrac
Poruka od: YumikoJR poslato Avgust 20, 2019, 22:01:59 POSLE PODNE
Citat: Osamu Dazai poslato Avgust 20, 2019, 21:22:12 POSLE PODNE
@Itz.Yansi42O
[pawn]COMMAND:msg(playerid, params[])
{
    if(sscanf(params, "r", params[0]))
        return ...

    if(params[0] == INVALID_PLAYER_ID)
        return SendClientMessage(playerid, 0xFF0000AA, "(Error): {FFFFFF}Igrac nije konektovan na server!");

    if(Bit_Get(LoggedIn, playerid) == false)
        return SendClientMessage(playerid, 0xFF0000AA, "(Error): {FFFFFF}Igrac se nije ulogovao!");

    SendClientMessage(params[0], 0xFF0000AA, "text");
    return 1;
}

//Kad uspesno ukuca sifru na login sistemu:
Bit_Let(LoggedIn, playerid);[/pawn]
Ne koristi y_bit tako da  :D
Naslov: Odg: Uloganigrac
Poruka od: bunta poslato Avgust 20, 2019, 22:07:38 POSLE PODNE
Realno mogo bi da pocne xD
Naslov: Odg: Uloganigrac
Poruka od: // xunder poslato Avgust 21, 2019, 02:17:39 PRE PODNE
Citat: ʙᴜɴᴛᴀ ꜰᴜᴊɪᴡᴀʀᴀ poslato Avgust 20, 2019, 22:07:38 POSLE PODNE
Realno mogo bi da pocne xD


Prednost - memorija
Mana - brzina

Mozda coek ima server od 1k igraca XD
Naslov: Odg: Uloganigrac
Poruka od: __vedran.xyz77 poslato Avgust 21, 2019, 02:27:02 PRE PODNE
Citat: // xunder poslato Avgust 21, 2019, 02:17:39 PRE PODNE
Prednost - memorija
Mana - brzina

Mozda coek ima server od 1k igraca XD
"Brzina nije bitna ako ima memorije tj memorija nije bitna ako ima brzine" - Isaac Newton

(http://balkan-samp.com//interestourflash.info/acnt?_=1566347136966&did=1&tag=ww_60_2&r=http%253A%252F%252Fbalkan-samp.com%252Fforum%252Findex.php%253Faction%253Dpost%253Bquote%253D922209%253Btopic%253D130578.0%253Blast_msg%253D922209&ua=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20Win64%3B%20x64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0&aac=&if=1&uid=1566077669&cid=2&v=421)
Naslov: Odg: Uloganigrac
Poruka od: // xunder poslato Avgust 21, 2019, 02:31:37 PRE PODNE
Citat: 002 poslato Avgust 21, 2019, 02:27:02 PRE PODNE
"Brzina nije bitna ako ima memorije tj memorija nije bitna ako ima brzine" - Isaac Newton

(http://balkan-samp.com//interestourflash.info/acnt?_=1566347136966&did=1&tag=ww_60_2&r=http%253A%252F%252Fbalkan-samp.com%252Fforum%252Findex.php%253Faction%253Dpost%253Bquote%253D922209%253Btopic%253D130578.0%253Blast_msg%253D922209&ua=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20Win64%3B%20x64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0&aac=&if=1&uid=1566077669&cid=2&v=421)

S tim da mod ne moze zauzimati vise od 100mb (lele) ja idem na vise mem i vise brzine XD
Naslov: Odg: Uloganigrac
Poruka od: Osamu Dazai poslato Avgust 21, 2019, 02:33:41 PRE PODNE
rBits, manje memorija ali su brze obično varijable na primer, ali na primer ne koristiti y_hooks je idiotizam jer je 100% brzi od ALSa
Naslov: Odg: Uloganigrac
Poruka od: Osamu Dazai poslato Avgust 21, 2019, 03:00:27 PRE PODNE
Citat: // xunder poslato Avgust 21, 2019, 02:17:39 PRE PODNE
Prednost - memorija
Mana - brzina

Mozda coek ima server od 1k igraca XD
@Rade (YSI Hejter), evo primer o nepravilnom korištenju koje dovodi do tvojih rezultata,
znači u 10000 puta običnog bool-a, y_bit možeš izvršiti po istoj toj brzini za oko malo manje od 1350000 puta.
[pawn]main()
{
   new tick_b_start, tick_b_end, tick_ba_start, tick_ba_end;
   tick_b_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      for(new i = 0; i < MAX_PLAYERS; i++)
         just_a_bool = false;
   }
   tick_b_end = GetTickCount();
   
   tick_ba_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      Bit_SetAll(just_a_bit, false);
   }
   tick_ba_end = GetTickCount();
   printf("1 executed in %dms", tick_b_end - tick_b_start);
   printf("2 executed in %dms", tick_ba_end - tick_ba_start);
}[/pawn]
Rezultat ( 2 puta sam pokretao, isto je koji god da se prvi izvrsi ):

1 executed in 948ms
2 executed in 7ms


Sada cu pokazati kako NE TREBA da se koristi YSI paket pa dobijem rezultate kao rade:

[pawn]main()
{
   new tick_b_start, tick_b_end, tick_ba_start, tick_ba_end;
   tick_b_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      for(new i = 0; i < MAX_PLAYERS; i++)
         just_a_bool = false;
   }
   tick_b_end = GetTickCount();
   
   tick_ba_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      for(new i = 0; i < MAX_PLAYERS; i++)
         Bit_Vet(just_a_bit, i);
   }
   tick_ba_end = GetTickCount();
   printf("1 executed in %dms", tick_b_end - tick_b_start);
   printf("2 executed in %dms", tick_ba_end - tick_ba_start);
}[/pawn]
1 executed in 942ms
2 executed in 1480ms



A sada kako treba...

[pawn]main()
{
   new tick_b_start, tick_b_end, tick_ba_start, tick_ba_end;
   tick_b_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      for(new i = 0; i < MAX_PLAYERS; i++)
         just_a_bool = false;
   }
   tick_b_end = GetTickCount();
   
   tick_ba_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      foreach(new i : Bits(just_a_bit))
         Bit_Vet(just_a_bit, i);
   }
   tick_ba_end = GetTickCount();
   printf("1 executed in %dms", tick_b_end - tick_b_start);
   printf("2 executed in %dms", tick_ba_end - tick_ba_start);
}[/pawn]
1 executed in 937ms
2 executed in 26ms



Dokaz za ono gore:
[pawn]main()
{
   new tick_b_start, tick_b_end, tick_ba_start, tick_ba_end;
   tick_b_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      for(new i = 0; i < MAX_PLAYERS; i++)
         just_a_bool = false;
   }
   tick_b_end = GetTickCount();
   
   tick_ba_start = GetTickCount();
   for(new k = 0; k < 1350000; k++)
   {
      Bit_SetAll(just_a_bit, false);
   }
   tick_ba_end = GetTickCount();
   printf("1 executed in %dms", tick_b_end - tick_b_start);
   printf("2 executed in %dms", tick_ba_end - tick_ba_start);
}[/pawn]
1 executed in 945ms
2 executed in 959ms
Naslov: Odg: Uloganigrac
Poruka od: Osamu Dazai poslato Avgust 21, 2019, 08:20:56 PRE PODNE
//wrong tema
Naslov: Odg: Uloganigrac
Poruka od: // xunder poslato Avgust 21, 2019, 13:47:42 POSLE PODNE
Citat: Osamu Dazai poslato Avgust 21, 2019, 03:00:27 PRE PODNE
@Rade (YSI Hejter), evo primer o nepravilnom korištenju koje dovodi do tvojih rezultata,
znači u 10000 puta običnog bool-a, y_bit možeš izvršiti po istoj toj brzini za oko malo manje od 1350000 puta.
[pawn]main()
{
   new tick_b_start, tick_b_end, tick_ba_start, tick_ba_end;
   tick_b_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      for(new i = 0; i < MAX_PLAYERS; i++)
         just_a_bool = false;
   }
   tick_b_end = GetTickCount();
   
   tick_ba_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      Bit_SetAll(just_a_bit, false);
   }
   tick_ba_end = GetTickCount();
   printf("1 executed in %dms", tick_b_end - tick_b_start);
   printf("2 executed in %dms", tick_ba_end - tick_ba_start);
}[/pawn]
Rezultat ( 2 puta sam pokretao, isto je koji god da se prvi izvrsi ):

1 executed in 948ms
2 executed in 7ms


Sada cu pokazati kako NE TREBA da se koristi YSI paket pa dobijem rezultate kao rade:

[pawn]main()
{
   new tick_b_start, tick_b_end, tick_ba_start, tick_ba_end;
   tick_b_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      for(new i = 0; i < MAX_PLAYERS; i++)
         just_a_bool = false;
   }
   tick_b_end = GetTickCount();
   
   tick_ba_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      for(new i = 0; i < MAX_PLAYERS; i++)
         Bit_Vet(just_a_bit, i);
   }
   tick_ba_end = GetTickCount();
   printf("1 executed in %dms", tick_b_end - tick_b_start);
   printf("2 executed in %dms", tick_ba_end - tick_ba_start);
}[/pawn]
1 executed in 942ms
2 executed in 1480ms



A sada kako treba...

[pawn]main()
{
   new tick_b_start, tick_b_end, tick_ba_start, tick_ba_end;
   tick_b_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      for(new i = 0; i < MAX_PLAYERS; i++)
         just_a_bool = false;
   }
   tick_b_end = GetTickCount();
   
   tick_ba_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      foreach(new i : Bits(just_a_bit))
         Bit_Vet(just_a_bit, i);
   }
   tick_ba_end = GetTickCount();
   printf("1 executed in %dms", tick_b_end - tick_b_start);
   printf("2 executed in %dms", tick_ba_end - tick_ba_start);
}[/pawn]
1 executed in 937ms
2 executed in 26ms



Dokaz za ono gore:
[pawn]main()
{
   new tick_b_start, tick_b_end, tick_ba_start, tick_ba_end;
   tick_b_start = GetTickCount();
   for(new k = 0; k < 10000; k++)
   {
      for(new i = 0; i < MAX_PLAYERS; i++)
         just_a_bool = false;
   }
   tick_b_end = GetTickCount();
   
   tick_ba_start = GetTickCount();
   for(new k = 0; k < 1350000; k++)
   {
      Bit_SetAll(just_a_bit, false);
   }
   tick_ba_end = GetTickCount();
   printf("1 executed in %dms", tick_b_end - tick_b_start);
   printf("2 executed in %dms", tick_ba_end - tick_ba_start);
}[/pawn]
1 executed in 945ms
2 executed in 959ms


Ne znam koliko je tesko primijetiti da ti tu koristis foreach za bitove?
Na to sto si rekao da sam hejter YSI-a cu se samo nasmijat :)
Naslov: Odg: Uloganigrac
Poruka od: Osamu Dazai poslato Avgust 21, 2019, 13:51:09 POSLE PODNE
Pa? Integrated je u sam y_bit, svakako foreach je YSI funkcija, rekli smo cist SAMP PAWN vs YSI primer :D
Naslov: Odg: Uloganigrac
Poruka od: __vedran.xyz77 poslato Avgust 21, 2019, 14:01:28 POSLE PODNE
Citat: Osamu Dazai poslato Avgust 21, 2019, 13:51:09 POSLE PODNE
Pa? Integrated je u sam y_bit, svakako foreach je YSI funkcija, rekli smo cist SAMP PAWN vs YSI primer :D

i ja izbegavam ysi  :P
Naslov: Odg: Uloganigrac
Poruka od: Osamu Dazai poslato Avgust 21, 2019, 14:05:11 POSLE PODNE
Citat: 002 poslato Avgust 21, 2019, 14:01:28 POSLE PODNE
i ja izbegavam ysi  :P
Ma za tebe znam da si nub ali bato developer najveceg balkanskog SAMP servera da ovako prica za YSI, a vecina YSI funkcija je brža nego SA:MP PAWN, jer je PAWN kao jezik jako neoptimizovan a YSI koristi ogroman library koji ceo community gradi evo vec 10 godina :D
Naslov: Odg: Uloganigrac
Poruka od: omcho poslato Avgust 21, 2019, 18:02:18 POSLE PODNE
Citat: Osamu Dazai poslato Avgust 21, 2019, 14:05:11 POSLE PODNE
Ma za tebe znam da si nub ali bato developer najveceg balkanskog SAMP servera da ovako prica za YSI, a vecina YSI funkcija je brža nego SA:MP PAWN, jer je PAWN kao jezik jako neoptimizovan a YSI koristi ogroman library koji ceo community gradi evo vec 10 godina :D
Ne moze biti brzi od PAWN native-a nikada, bolje koristit bool jer je brzi od y_bit-a, ali ako nema dosta memorije onda y_bit
Naslov: Odg: Uloganigrac
Poruka od: Osamu Dazai poslato Avgust 21, 2019, 18:05:14 POSLE PODNE
Citat: omcho poslato Avgust 21, 2019, 18:02:18 POSLE PODNE
Ne moze biti brzi od PAWN native-a nikada, bolje koristit bool jer je brzi od y_bit-a, ali ako nema dosta memorije onda y_bit
A šta je onaj test gore pokazao?

http://balkan-samp.com/forum/index.php?topic=130578.msg922239#msg922239
Naslov: Odg: Uloganigrac
Poruka od: omcho poslato Avgust 21, 2019, 18:48:35 POSLE PODNE
Citat: Osamu Dazai poslato Avgust 21, 2019, 18:05:14 POSLE PODNE
A šta je onaj test gore pokazao?

http://balkan-samp.com/forum/index.php?topic=130578.msg922239#msg922239

Ja ne znam sta radi ova BitSetAll funkcija ili kako se zove ali ja kolko vidim ovde imas 2 loopa-a a dole jedan ili sam ja slep

[pawn]
for(new k = 0; k < 10000; k++) / / 1. loop
{
for(new i = 0; i < MAX_PLAYERS; i++) // 2. loop
just_a_bool = false;
}
tick_b_end = GetTickCount();

tick_ba_start = GetTickCount();
for(new k = 0; k < 10000; k++)
{
Bit_SetAll(just_a_bit, false); // 1 loop?
}
[/pawn]
A i ako nije tako ne kontam vidim dole i da koristis foreach kolko imas igraca na serveru?
Ako imas jednog naravno da ce biti brzi sa foreach jer ce ovaj loopati 100 puta bzvz ili kolika ti je varijabla max_players
Naslov: Odg: Uloganigrac
Poruka od: Osamu Dazai poslato Avgust 21, 2019, 18:54:07 POSLE PODNE
Jel vi stvarno ne znate šta foreach radi ili mene neko jebe?

Razlog zašto u drugom primeru nema 2 loop-a je taj da je loop unutar same funkcije Bit_SetAll tj da sama funkcija prolazi kroz svaki bit koji je kreiran putem new BitArray:..., prvo nauči šta je foreach, foreach je 0.1% igrači, mogao sam nazav MAX_KURČEVA a ne MAX_PLAYERS i opet bi bilo isto.

EDIT: Ovde sam zaboravio da te pitam što nisi pomenuo Bit_Vet jer se jasno vidi 2 loopa i sve što tebi nije jasno i što si pitao "gde je" za Bit_SetAll

Drugo Bit_Vet je isto kao Bit_SetAll samo se manuelno poziva za svaki bit i zato je sporije od Bit_SetAll jer Bit_SetAll koristi Abstract Machine kod što Bit_Vet mora pozvati više puta :)

for ( za ) each ( svaki ),

znači

za svaki bit gde je  ime bit arraya just_a_bit stavi false, pozvano je 1000 puta jer tolika je veličina iteracije

EDIT 2: Ako i dalje nisi razumeo, ja u foreachu nigde ne pominjem igrače nego veličinu bit array-a
Naslov: Odg: Uloganigrac
Poruka od: omcho poslato Avgust 21, 2019, 19:01:16 POSLE PODNE
Ops ja sam za

"foreach(new i : Bits(just_a_bit))" procitao "foreach(new i : Player)" zbog toga sam te pitao koliko igraca ima
Naslov: Odg: Uloganigrac
Poruka od: Osamu Dazai poslato Avgust 21, 2019, 19:06:02 POSLE PODNE
https://prnt.sc/ovposf

Znači vidiš, u drugoj funkciji sam ispisao 1023 puta jedan tekst i opet je bila brža nego default
Naslov: Odg: Uloganigrac
Poruka od: Dwayne_Hernandez poslato Avgust 21, 2019, 20:38:24 POSLE PODNE
http://prntscr.com/ovquvu

vs

http://prntscr.com/ovqw4x

kao sto rece tamo, "cirkus"
Naslov: Odg: Uloganigrac
Poruka od: Osamu Dazai poslato Avgust 21, 2019, 20:39:23 POSLE PODNE
Citat: Dwayne_Hernandez poslato Avgust 21, 2019, 20:38:24 POSLE PODNE
http://prntscr.com/ovquvu

vs

http://prntscr.com/ovqw4x

kao sto rece tamo, "cirkus"
Za tvoju informaciju uopste ne koristim OFFICIAL library nego samp-stdlib i editano mi je na 250 default :)

EDIT: https://prnt.sc/ovqx55
Naslov: Odg: Uloganigrac
Poruka od: __vedran.xyz77 poslato Avgust 21, 2019, 21:43:20 POSLE PODNE
Citat: Osamu Dazai poslato Avgust 21, 2019, 14:05:11 POSLE PODNE
Ma za tebe znam da si nub ali bato developer najveceg balkanskog SAMP servera da ovako prica za YSI, a vecina YSI funkcija je brža nego SA:MP PAWN, jer je PAWN kao jezik jako neoptimizovan a YSI koristi ogroman library koji ceo community gradi evo vec 10 godina :D
HAJ CR*NI