DUŽINA STRINGOVA
Uvod
Većina PAWN skriptera je nekako zakljuÄila da dužina svakog stringa mora biti 256. Isto tako su zakljuÄili da je najveći mogući string veliÄine 256. Za to su najverovatnije kriv GodFather koji je skoro najviÅ¡e koriÅ¡teni gamemod u SA:MPu. U GodFatheru su SVI stringovi 256. I kada pocetnik skripter promatra skriptu vjerovatno je to svjesno ili nesvjesno uoÄio i sad to koristi
Objašnjenje stringa
String u PAWNu je zapravo array slova. On je null terminated odnosno završava s \0 (ASCII kod: 0)
new
string = "Pozdrav";
Taj string je zapravo dug 8 Äelija zbog toga jer je duljina teksta 7 Äelija te joÅ¡ jednu Äeliju zauzima /0.
To se može napisati i ovako
new
string = {'P','o','z', 'd','r', 'a','v','\0'};
Ili:
new
string = {80, 111, 122, 100, 114, 97, 118, 0};
ZnaÄi 80,111,122,100,114,97 i 118 su slova a 0 je null terminator koji zavrÅ¡ava string.
Kada vi napravite ovo:
new
string;
Vi zapravo svaki cell od njih 256 stavljate na 0 što traje
Zašto ne koristiti 256?
format(string,sizeof(string),"Moj admin level je %i", adminlvl);
I sad imamo 20Äelija teksta + MAXIMALNO 4Äelija koje nam trebaju za adminlvl + 1Äelija za null(/0)
ZnaÄi da nam treba MAKSIMALNO 25 Äelija. Ako vi stavite 256 onda zauzmete 924bajta u serverskoj memoriji koji vam za niÅ¡ta ne služe (to je skoro kilobajt !!!)
Uvod
Većina PAWN skriptera je nekako zakljuÄila da dužina svakog stringa mora biti 256. Isto tako su zakljuÄili da je najveći mogući string veliÄine 256. Za to su najverovatnije kriv GodFather koji je skoro najviÅ¡e koriÅ¡teni gamemod u SA:MPu. U GodFatheru su SVI stringovi 256. I kada pocetnik skripter promatra skriptu vjerovatno je to svjesno ili nesvjesno uoÄio i sad to koristi
Objašnjenje stringa
String u PAWNu je zapravo array slova. On je null terminated odnosno završava s \0 (ASCII kod: 0)
new
string = "Pozdrav";
Taj string je zapravo dug 8 Äelija zbog toga jer je duljina teksta 7 Äelija te joÅ¡ jednu Äeliju zauzima /0.
To se može napisati i ovako
new
string = {'P','o','z', 'd','r', 'a','v','\0'};
Ili:
new
string = {80, 111, 122, 100, 114, 97, 118, 0};
ZnaÄi 80,111,122,100,114,97 i 118 su slova a 0 je null terminator koji zavrÅ¡ava string.
Kada vi napravite ovo:
new
string;
Vi zapravo svaki cell od njih 256 stavljate na 0 što traje
Zašto ne koristiti 256?
Sporo je:
Netreba vam:
format(string,sizeof(string),"Moj admin level je %i", adminlvl);
I sad imamo 20Äelija teksta + MAXIMALNO 4Äelija koje nam trebaju za adminlvl + 1Äelija za null(/0)
ZnaÄi da nam treba MAKSIMALNO 25 Äelija. Ako vi stavite 256 onda zauzmete 924bajta u serverskoj memoriji koji vam za niÅ¡ta ne služe (to je skoro kilobajt !!!)
Maksimalni input u SA:MPu je 128
Maksimalni output u SA:MPu je 128
Netreba vam (2)
public OnPlayerCommandText(playerid, cmdtext[])
{
new
string,
cmd;
cmd = strtok(cmdtext, idx);
if (strcmp(cmd, "/broj", true) == 0)
{
format(string, sizeof (string), "Nasumicni broj: %d", random(27));
SendClientMessage(playerid, 0xFF0000AA, string);
}
}
Ovdje je puno stvari loÅ¡e napravljeno. Za poÄetak koristi se strtok i loÅ¡ procesor komandi. Ali to ću obraditi sljedeći put.
new
string,
cmd;
ZaÅ¡to dvije, kada već server zna koja komanda je stisnuta zaÅ¡to ponovo ne iskoristiti isti string kada vam viÅ¡e netreba. Samo povecavate duljinu i koliÄinu podataka na serveru.
new
string;
Zašto 256 kad je najveći input/output SA:MPa 128.
Bolja verzija bi bila
public OnPlayerCommandText(playerid, cmdtext[])
{
new
string; // cmdtext nikad neće biti veći od 128
string = strtok(cmdtext, idx);
if (strcmp(string, "/broj", true) == 0)
{
format(string, sizeof (string), "Nasumicni broj: %d", random(27));
SendClientMessage(playerid, 0xFF0000AA, string);
}
}
Kada da koristim 256?
Kada je potrebno, ponekad su veliki stringovi i viÅ¡e nego potrebni. NajÄešće u SQL queryima i Äitanju podataka, ali i onda vrijedi sve ovo gore.
SQL
ÄŒitanje fajlova
CREDITS: LordShigi - Pisanje Tutoriala
Y-Less pisanje tutoriala na engleskom s kojeg su preuzeti mnogi sadržaji.
