Ako želite napraviti neÅ¡to dobro za vaÅ¡u skriptu/server onda poÄnite koristiti PVar funkcije.
"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); (http://wiki.sa-mp.com/wiki/SetPVarInt)
Primjer:
/* stavljanje */
SetPVarInt(playerid, "Admin_Nivo", 5);
Funkcija (primanje):
GetPVarInt(playerid, varname[]); (http://wiki.sa-mp.com/wiki/GetPVarInt)
Primjer:
/* primanje */
if(GetPVarInt(playerid, "Admin_Nivo") == 5) SendClientMessage(playerid, 0xFFFFFFFF, "Vaš admin nivo je 5.");
STRING:
Funkcija (stavljanje):
SetPVarString(playerid, varname[], string_value[]); (http://wiki.sa-mp.com/wiki/SetPVarString)
Primjer:
/* stavljanje */
new
imeIgraca[MAX_PLAYER_NAME];
GetPlayerName(playerid, imeIgraca, MAX_PLAYER_NAME);
SetPVarString(playerid, "ime", imeIgraca);
Funkcija:
GetPVarString(playerid, varname[], string_return[], len); (http://wiki.sa-mp.com/wiki/GetPVarString)
Primjer (primanje):
/* primanje */
new
_imeIgraca[MAX_PLAYER_NAME][2];
GetPlayerName(playerid, _imeIgraca[0], MAX_PLAYER_NAME);
GetPVarString(playerid, "ime", _imeIgraca[1], MAX_PLAYER_NAME);
if(!strcmp(_imeIgraca[0], _imeIgraca[1], true)) SendClientMessage(playerid, 0xFFFFFFFF, "Vaš tekst.");
FLOAT:
Funkcija (stavljanje):
SetPVarFloat(playerid, varname[], Float:float_value); (http://wiki.sa-mp.com/wiki/SetPVarFloat)
Primjer:
/* stavljanje */
new
Float:pozicija[3];
GetPlayerPos(playerid, pozicija[0], pozicija[1], pozicija[2]);
SetPVarFloat(playerid, "pozicija_X", pozicija[0]);
SetPVarFloat(playerid, "pozicija_Y", pozicija[1]);
SetPVarFloat(playerid, "pozicija_Z", pozicija[2]);
Funkcija (primanje):
GetPVarFloat(playerid, varname[]); (http://wiki.sa-mp.com/wiki/GetPVarFloat)
Primjer:
/* primanje */
SetPlayerPos(playerid, GetPVarFloat(playerid, "pozicija_X"), GetPVarFloat(playerid, "pozicija_Y"), GetPVarFloat(playerid, "pozicija_Z"));
BRISANJE:
Funkcija (brisanje):
DeletePVar(playerid, varname[]); (http://wiki.sa-mp.com/wiki/DeletePVar)
Primjer:
/* brisanje */
DeletePVar(playerid, "Admin_Nivo");
Ostale funkcije (nisu toliko važne za vas, osim možda GetPVarType funkcije):
- GetPVarsUpperIndex
- GetPVarNameAtIndex
- GetPVarType
Correlli pomogao si mi puno, tj objasnio nes sta nisam mogao skuziti, bas sam neki dan poceo raditi sa PVar funkcijom i nesto jesam skuzio ali sada umjesto enuma mogu korisit ovo...Hvala jos jednom
Zanimljivo , ako budem pravio sta novo koristit cu ove funkcije , neda mi se gamemod transformisat :P
Citat: °[ ÑЧz0Ñ ]° poslato April 23, 2010, 14:18:30 POSLE PODNEneda mi se gamemod transformisat :P
Ali se isplati. To je isto kao da sa analogne tehnike prelaziš na digitalnu. :P
E sto je isplativije ovdje. Da napravim boolean za MAX_PLAYERS ili napravim PVarInt(s obzirom da nema bool-ova).
Ne kontam šta želiš? Nešto kao SetPVarBool ili šta? Takvu funkciju možeš i sam napraviti.
Mislim sto je vise optimizirano. Napraviti bool za MAX_PLAYERS ili napraviti PVarInt pa onda koristiti samo 0 i 1.
Citat: LordShigi poslato Avgust 05, 2010, 13:39:04 POSLE PODNE
Mislim sto je vise optimizirano.
Misliš nešto kao ovo?
Citat: LordShigi poslato Avgust 05, 2010, 13:39:04 POSLE PODNE
Napraviti bool za MAX_PLAYERS
new
bool:mojVar[MAX_PLAYERS];
Citat: LordShigi poslato Avgust 05, 2010, 13:39:04 POSLE PODNE
ili napraviti PVarInt pa onda koristiti samo 0 i 1.
SetPVarInt(playerid, "mojVar", 0);
SetPVarInt(playerid, "mojVar", 1);
Naravno da ti je bolje koristiti PVar funkcije.
Citat: Don Correlli poslato April 22, 2010, 23:09:41 POSLE PODNE
"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.
Tocno to, ok puno hvala.
Ispricavam se za refresh ali prije sam koristio obicni PlayerInfo kao na GF-u i sada prebacujem sve na pVar i sad me zanima kako bi ovo izgledalo u pVaru:
PlayerInfo[playerid][pRespekti] += 1 ;
ovo + me muci... da dodam ovako? ili?
SetPVarInt(playerid, "Respekti", +1);
Citat: â–º|Slick|Crack|â—,, poslato Oktobar 20, 2010, 21:51:00 POSLE PODNE
Ispricavam se za refresh ali prije sam koristio obicni PlayerInfo kao na GF-u i sada prebacujem sve na pVar i sad me zanima kako bi ovo izgledalo u pVaru:
PlayerInfo[playerid][pRespekti] += 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);
#define PovecajPvar(%0,%1,%2) SetPVarInt(%0, %1, GetPVarInt(%0, %1) + %2)
#define SmanjiPvar(%0,%1,%2) SetPVarInt(%0, %1, GetPVarInt(%0, %1) - %2)
PovecajPvar(playerid,"nesto",+iznos);
edit: srry correli odma iza tebe :S
Hvala vam puno ;)
sry na refreshu ali jeli to isplativo radit posto se nece na mom serveru koristiti fs? mislim i ovako je to sve dosta brzo na enumu... i zasto je to bolje?
Puno se lakse snaci(u modu) kad' koristis PVarove ..
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 (http://wiki.sa-mp.com/wiki/Per-player_variable_system)
ma razumijem ja pvar radio sam s njim vec samo po meni nema nikakve razlike... cak ako radi vise skriptera to je onda ludnica xD i da radim mod od 0 i mislim da cu ostat na enumu jer su skripteri vec navikli na to i lakse mi je (bar zato sto sam uvjek editao GF modove) upisat Playerinfo[playerid] pa onda sta hocu xD
Kako hoces,ali procitaj jos jednom i ovo sto je Correlli napisao,a i ono sa wikipedie..
A sta je tebi jednostavnije napisati:
if(PlayerInfo[playerid][AdminNivo] < 2) return SendClientMessage(playerid, Boja, "Tekst");
ili
if(GetPVarInt(playerid, "AdminNivo") < 2) return SendClientMessage(playerid, Boja, "Tekst");
Citat: Lucifer / Louis_Cyphere poslato Januar 09, 2011, 23:42:13 POSLE PODNE
ma razumijem ja pvar radio sam s njim vec samo po meni nema nikakve razlike... cak ako radi vise skriptera to je onda ludnica xD i da radim mod od 0 i mislim da cu ostat na enumu jer su skripteri vec navikli na to i lakse mi je (bar zato sto sam uvjek editao GF modove) upisat Playerinfo[playerid] pa onda sta hocu xD
Nemoj raditi u enumu... Ev ti ovo je meni Corelli pomogao i stvarno mu se zahvaljujem http://forum.sa-mp.com/showthread.php?t=208442 (http://forum.sa-mp.com/showthread.php?t=208442) ti ti je prikazano i spremanje i ucitavanje i stavljanje :)
extreme jesi voljan pomoc? jel imas msn? ak imas dodaj me arca16_sb@hotmail.com jer imo sam nekih problema sa ucitavanjem tih gluposti i nisam znao rijesiti? il ak neko to dobro zna da mi samo mrvicu pomogne? dodajte me
Citat: Lucifer / Louis_Cyphere poslato Januar 09, 2011, 23:42:13 POSLE PODNE
ma razumijem ja pvar radio sam s njim vec samo po meni nema nikakve razlike...
A ovde u svom sledecem postu pises drugo.. ???
nisam napiso da bas sve znam al razumijem neke osnove...