Čaute PVary boli pridané od sa-mp verzie 0.3a
Celá SAMP scéna prešla na PVary iba SK/CZ scéna nie (teda vačšina).
Čo to PVary sú ?
Pvary sú tiež premeny ale iba pre hráča (global PVars existujú iba ako plugin...). Čiže žiadne new Admin[MAX_PLAYERS];
Výhody PVarov sú?
Hlavná výhoda je, že neexistujú "prázdne miesta" ktoré "žerú" RAM-ku.
Lebo ak dáte new a[MAX_PLAYERS] = {-1,...}; tak to vytvorí 500 premien s hodnotou -1. A keď máte na servery 5 ľudí, tak aj tak je na servery 500 premien... No pri PVaroch je iba 5. Pretože každému hráčovy vytvorí automaticky vlastnú, a pri odchode ju zmaže (Takže žiadne nulovanie premien v OnPlayerConnect (a DisConnect)).
Nevýhody PVarov sú?
Výrazne pomalšie ako obyčajné premeny hlavne pri cykloch (kde sa to opakuje). Ale zase šetríte RAM ku...
Funkcie
Nastavovacie funkcie (Set)
SetPVarInt(playerid, varname[], int_value)
playerid = id hráča, ktorému chceme uložiť hodntu
varname = string, toto je hlavná časť ! Podľa názvu sa ukladajú hodnoty čiže npr. "Admin"
int_value = hodnota npr. 5
SetPVarString(playerid, varname[], string_value[])
playerid = id hráča, ktorému chceme uložiť hodntu
varname = string, toto je hlavná časť ! Podľa názvu sa ukladajú hodnoty čiže npr. "Nick"
string_value = text, npr. "QWER"
SetPVarFloat(playerid, varname[], Float:float_value)
playerid = id hráča, ktorému chceme uložiť hodntu
varname = string, toto je hlavná časť ! Podľa názvu sa ukladajú hodnoty čiže npr. "Health"
float_value = float hodnota... (desatinné číslo) npr. GetPlayerHealthEx(playerid);
Zistovacie funkcie (Get)
GetPVarInt(playerid, varname[])
playerid = id hráča, ktorému chceme zistiť návratovú hodnotu
varname = názov uloženej hodnoty ako sme použili "Admin"
GetPVarString(playerid, varname[], string_return[], len)
playerid = id hráča, ktorému chceme zistiť návratovú hodnotu
varname = názov uloženej hodnoty ako sme použili "Nick"
string_return = názov stringového pola (new string[100]
len = max. počet znakov
GetPVarFloat(playerid, varname[])
playerid = id hráča, ktorému chceme zistiť návratovú hodnotu
varname = názov uloženej hodnoty ako sme použili "Health"
Mazacie funkcie (Del)
DeletePVar(playerid, varname[])
playerid = id hráča, ktorému chceme zistiť návratovú hodnotu
varname = názov uloženej hodnoty ako sme použili "Health"
Deletne premenu, takže nebude existovať (ani zaberať miesto v RAM-ke) BTW Pri odchode zo serveru (disconnect) sa automaticky zmažú, takže ich nemusíte mazať manuálne.
Využitie
Využitie je také obrovske, ako pri obyčajných premenách pre všetkých hráčov... npr. taký príkaz loc & toloc (často objavovaný v módoch (myslím súkromný teleport))
Cez obyčajné premeny
Áno, ale tie sú iba lokálne a existujú iba niekoľko milisekund (presnejšie 6 milisekund) no pri prvej možnosti existovaly celý chod servera (od zapnutia po vypnutie) a bolo ich 500 (32 bytových premien) a tu sme vytvorili 4 (32 bytové premena) na 6 milisekund.
Jednoduché nie ?
Pri stringu vám sem dám jeden stock, čo uľahčí prácu s GetPVarString...
Dajú sa ukladať stringy, takže nemusíte stále používať GetPlayerName alebo pawn ekvivalent PlayerName (== Jmeno)
a to týmto spôsobom
QWER sa smeje lamám (/lol)
SetPVarInt je ako obyčajná premena... takže dúfam nemusím vysvetlovať.
Toto je pre túto chvíľu všetko. Dúfam že ste sa niečomu priučili, a začnete používať PVary.
S pozdravom
QWER
Celá SAMP scéna prešla na PVary iba SK/CZ scéna nie (teda vačšina).
Čo to PVary sú ?
Pvary sú tiež premeny ale iba pre hráča (global PVars existujú iba ako plugin...). Čiže žiadne new Admin[MAX_PLAYERS];
Výhody PVarov sú?
Hlavná výhoda je, že neexistujú "prázdne miesta" ktoré "žerú" RAM-ku.
Lebo ak dáte new a[MAX_PLAYERS] = {-1,...}; tak to vytvorí 500 premien s hodnotou -1. A keď máte na servery 5 ľudí, tak aj tak je na servery 500 premien... No pri PVaroch je iba 5. Pretože každému hráčovy vytvorí automaticky vlastnú, a pri odchode ju zmaže (Takže žiadne nulovanie premien v OnPlayerConnect (a DisConnect)).
Nevýhody PVarov sú?
Výrazne pomalšie ako obyčajné premeny hlavne pri cykloch (kde sa to opakuje). Ale zase šetríte RAM ku...
Funkcie
Nastavovacie funkcie (Set)
SetPVarInt(playerid, varname[], int_value)
playerid = id hráča, ktorému chceme uložiť hodntu
varname = string, toto je hlavná časť ! Podľa názvu sa ukladajú hodnoty čiže npr. "Admin"
int_value = hodnota npr. 5
SetPVarString(playerid, varname[], string_value[])
playerid = id hráča, ktorému chceme uložiť hodntu
varname = string, toto je hlavná časť ! Podľa názvu sa ukladajú hodnoty čiže npr. "Nick"
string_value = text, npr. "QWER"
SetPVarFloat(playerid, varname[], Float:float_value)
playerid = id hráča, ktorému chceme uložiť hodntu
varname = string, toto je hlavná časť ! Podľa názvu sa ukladajú hodnoty čiže npr. "Health"
float_value = float hodnota... (desatinné číslo) npr. GetPlayerHealthEx(playerid);
Zistovacie funkcie (Get)
GetPVarInt(playerid, varname[])
playerid = id hráča, ktorému chceme zistiť návratovú hodnotu
varname = názov uloženej hodnoty ako sme použili "Admin"
GetPVarString(playerid, varname[], string_return[], len)
playerid = id hráča, ktorému chceme zistiť návratovú hodnotu
varname = názov uloženej hodnoty ako sme použili "Nick"
string_return = názov stringového pola (new string[100]
len = max. počet znakov
GetPVarFloat(playerid, varname[])
playerid = id hráča, ktorému chceme zistiť návratovú hodnotu
varname = názov uloženej hodnoty ako sme použili "Health"
Mazacie funkcie (Del)
DeletePVar(playerid, varname[])
playerid = id hráča, ktorému chceme zistiť návratovú hodnotu
varname = názov uloženej hodnoty ako sme použili "Health"
Deletne premenu, takže nebude existovať (ani zaberať miesto v RAM-ke) BTW Pri odchode zo serveru (disconnect) sa automaticky zmažú, takže ich nemusíte mazať manuálne.
Využitie
Využitie je také obrovske, ako pri obyčajných premenách pre všetkých hráčov... npr. taký príkaz loc & toloc (často objavovaný v módoch (myslím súkromný teleport))
Cez obyčajné premeny
- kód:
Hore medzi new
new Float:pos[4][MAX_PLAYERS];
public OnPlayerCommandText...
if(!strcmp("/loc",cmdtext,true)){
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
GetPlayerAngle(playerid,pos[3]);
}
if(!strcmp("/toloc",cmdtext,true)){
SetPlayerPos(playerid,pos[0],pos[1],pos[2]);
SetPlayerAngle(playerid,pos[3]);
}
- kód:
if(!strcmp("/loc",cmdtext,true)){
new Float:x,Float:y,Float:z,Float:a;
GetPlayerPos(playerid,x,y,z);
GetPlayerAngle(playerid,a)
SetPVarFloat(playerid,"PosX",x);
SetPVarFloat(playerid,"PosY",y);
SetPVarFloat(playerid,"PosZ",z);
SetPVarFloat(playerid,"PosA",a);
}
if(!strcmp("/toloc",cmdtext,true)){
SetPlayerPos(playerid,GetPVarFloat(playerid,"PosX"),GetPVarFloat(playerid,"PosY"),GetPVarFloat(playerid,"PosZ"));
SetPlayerAngle(playerid,GetPVarFloat(playerid,"PosA"));
}
Áno, ale tie sú iba lokálne a existujú iba niekoľko milisekund (presnejšie 6 milisekund) no pri prvej možnosti existovaly celý chod servera (od zapnutia po vypnutie) a bolo ich 500 (32 bytových premien) a tu sme vytvorili 4 (32 bytové premena) na 6 milisekund.
Jednoduché nie ?
Pri stringu vám sem dám jeden stock, čo uľahčí prácu s GetPVarString...
- kód:
stock ReturnPVarString(playerid, msg[]){
new ReturnMSG[256];
GetPVarString(playerid, msg, ReturnMSG,256);
return ReturnMSG;
}
Dajú sa ukladať stringy, takže nemusíte stále používať GetPlayerName alebo pawn ekvivalent PlayerName (== Jmeno)
a to týmto spôsobom
- kód:
public OnPlayerConnect...{
new nick[MAX_PLAYER_NAME];
GetPlayerName(playerid,nick,MAX_PLAYER_NAME);
SetPVarString(playerid,"Name",nick);
}
- kód:
if(strcmp(...)){
new s[100];
format(s,100,"%s sa smeje lamám (/lol)",ReturnPVarString(playerid,"Nick"));
}
QWER sa smeje lamám (/lol)
SetPVarInt je ako obyčajná premena... takže dúfam nemusím vysvetlovať.
Toto je pre túto chvíľu všetko. Dúfam že ste sa niečomu priučili, a začnete používať PVary.
S pozdravom
QWER