[TuT] Koristite PVar funkcije (PVar tutorial)
"Per-player variable system" ili skraćeno "PVar" je nova metoda stvaranja varijablova za igraÄe u PAWN jeziku za SA:MP mod na efikasno-dinamiÄki naÄin za kojeg su varijablovi stvoreni globalno, Å¡to znaÄi da se mogu koristiti u gamemodu i filterskriptama u isto vrijeme.
Ovaj novi sustav koji je moguć od SA:MP 0.3a R5 verzije pa naprijed ima nekoliko prednosti od obiÄnih polja sa MAX_PLAYERS veliÄinom.
PVar-ove možete dijeliti i pristupiti im preko gamemod skripta i filterskripta, što je lakše za modeliranje vaše kode,
PVar-ovi su automatsko izbrisani kad igraÄ napusti server, Å¡to znaÄi da ne trebate resetirati varijablove za svakog novog igraÄa koji se konekta na vaÅ¡ server,
nema potrebe za kompleksne enumerator strukture,
štedi memoriju tako da ne dodjeljuje memoriju pawn niza za playerid-ove koji vjerojatno nikada neće biti korišteni,
lahko možete enumerirati i uskladiÅ¡titi PVar listu - to je lakÅ¡e za otklanjanje greÅ¡aka i za skladiÅ¡tenje informacija za igraÄe,
iako PVar nije bio napravljen, vratit će vrijednost 0,
PVar-ovi mogu skladiÅ¡titi velike stringove koristeÄi dinamiÄki dodijeljenu memoriju.
Funkcije za stavljanje/primanje PVar-ova su:
INTEGER:
Funkcija (stavljanje):
SetPVarInt(playerid, varname[], int_value);
Primjer:
/* stavljanje */
SetPVarInt(playerid, "Admin_Nivo", 5);
Funkcija (primanje):
GetPVarInt(playerid, varname[]);
Primjer:
/* primanje */
if(GetPVarInt(playerid, "Admin_Nivo") == 5) SendClientMessage(playerid, 0xFFFFFFFF, "Vaš admin nivo je 5.");
STRING:
Funkcija (stavljanje):
SetPVarString(playerid, varname[], string_value[]);
Primjer:
/* stavljanje */
new
imeIgraca;
GetPlayerName(playerid, imeIgraca, MAX_PLAYER_NAME);
SetPVarString(playerid, "ime", imeIgraca);
Funkcija:
GetPVarString(playerid, varname[], string_return[], len);
Primjer (primanje):
/* primanje */
new
_imeIgraca;
GetPlayerName(playerid, _imeIgraca, MAX_PLAYER_NAME);
GetPVarString(playerid, "ime", _imeIgraca, MAX_PLAYER_NAME);
if(!strcmp(_imeIgraca, _imeIgraca, true)) SendClientMessage(playerid, 0xFFFFFFFF, "Vaš tekst.");
FLOAT:
Funkcija (stavljanje):
SetPVarFloat(playerid, varname[], Float:float_value);
Primjer:
/* stavljanje */
new
Float:pozicija;
GetPlayerPos(playerid, pozicija, pozicija, pozicija);
SetPVarFloat(playerid, "pozicija_X", pozicija);
SetPVarFloat(playerid, "pozicija_Y", pozicija);
SetPVarFloat(playerid, "pozicija_Z", pozicija);
Funkcija (primanje):
GetPVarFloat(playerid, varname[]);
Primjer:
/* primanje */
SetPlayerPos(playerid, GetPVarFloat(playerid, "pozicija_X"), GetPVarFloat(playerid, "pozicija_Y"), GetPVarFloat(playerid, "pozicija_Z"));
BRISANJE:
Funkcija (brisanje):
DeletePVar(playerid, varname[]);
Primjer:
/* brisanje */
DeletePVar(playerid, "Admin_Nivo");
Ostale funkcije (nisu toliko važne za vas, osim možda GetPVarType funkcije):
GetPVarsUpperIndex
GetPVarNameAtIndex
GetPVarType
° wrote on April 23, 2010, 12:18 pm:
Ali se isplati. To je isto kao da sa analogne tehnike prelaziÅ¡ na digitalnu. 😛
LordShigi wrote on August 5, 2010, 11:39 am:
Misliš nešto kao ovo?
LordShigi wrote on August 5, 2010, 11:39 am:
new
bool:mojVar;
LordShigi wrote on August 5, 2010, 11:39 am:
SetPVarInt(playerid, "mojVar", 0);
SetPVarInt(playerid, "mojVar", 1);
Naravno da ti je bolje koristiti PVar funkcije.
Don Correlli wrote on April 22, 2010, 9:09 pm:
Ovaj novi sustav koji je moguć od SA:MP 0.3a R5 verzije pa naprijed ima nekoliko prednosti od obiÄnih polja sa MAX_PLAYERS veliÄinom.
PVar-ove možete dijeliti i pristupiti im preko gamemod skripta i filterskripta, što je lakše za modeliranje vaše kode,
PVar-ovi su automatsko izbrisani kad igraÄ napusti server, Å¡to znaÄi da ne trebate resetirati varijablove za svakog novog igraÄa koji se konekta na vaÅ¡ server,
nema potrebe za kompleksne enumerator strukture,
štedi memoriju tako da ne dodjeljuje memoriju pawn niza za playerid-ove koji vjerojatno nikada neće biti korišteni,
lahko možete enumerirati i uskladiÅ¡titi PVar listu - to je lakÅ¡e za otklanjanje greÅ¡aka i za skladiÅ¡tenje informacija za igraÄe,
iako PVar nije bio napravljen, vratit će vrijednost 0,
PVar-ovi mogu skladiÅ¡titi velike stringove koristeÄi dinamiÄki dodijeljenu memoriju.
Balkan SA:MP
SA-MP Doprinos242 / 250 XP
PlayerInfo += 1 ;ovo + me muci... da dodam ovako? ili?
SetPVarInt(playerid, "Respekti", +1); â–º|Slick|Crack|â—„ wrote on October 20, 2010, 7:51 pm:
PlayerInfo += 1 ;ovo + me muci... da dodam ovako? ili?
SetPVarInt(playerid, "Respekti", +1); Ne.
Možeš ovako:
SetPVarInt(playerid, "Respekti", GetPVarInt(playerid, "Respekti") + 1);
Ili:
#define IncreasePVarInt(%0,%1,%2) SetPVarInt(%0, %1, GetPVarInt(%0, %1) + %2)
IncreasePVarInt(playerid, "Respekti", 1);
Balkan SA:MP
SA-MP Doprinos241 / 250 XP
#define SmanjiPvar(%0,%1,%2) SetPVarInt(%0, %1, GetPVarInt(%0, %1) - %2)
PovecajPvar(playerid,"nesto",+iznos);
edit: srry correli odma iza tebe :S
Balkan SA:MP
SA-MP Doprinos90 / 100 XP
Balkan SA:MP
SA-MP Doprinos240 / 250 XP
I naravno da se isplati,pogotovo ako radis mod od nule,a cini mi se da si napisao u nekoj temi da radis..
http://wiki.sa-mp.com/wiki/Per-player_variable_system
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava