Zanima me koja je razlika izmedju GetPVarInt UloganIgrac i IsplayerConnected, moze li se uloganigrac provjera izbrisati jer ima ih dosta?
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
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
[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]
@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]
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
Realno mogo bi da pocne xD
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
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)
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
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
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
//wrong tema
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 :)
Pa? Integrated je u sam y_bit, svakako foreach je YSI funkcija, rekli smo cist SAMP PAWN vs YSI primer :D
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
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
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
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
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
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
Ops ja sam za
"foreach(new i : Bits(just_a_bit))" procitao "foreach(new i : Player)" zbog toga sam te pitao koliko igraca ima
https://prnt.sc/ovposf
ZnaÄi vidiÅ¡, u drugoj funkciji sam ispisao 1023 puta jedan tekst i opet je bila brža nego default
http://prntscr.com/ovquvu
vs
http://prntscr.com/ovqw4x
kao sto rece tamo, "cirkus"
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
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