BatisCorleone 1 Odesláno: 27. Květen, 2015 Share Odesláno: 27. Květen, 2015 (upraveno) Zdravím , chcel by som vám predstaviť môj include Addressed Variable System v1.0.5.Popis includu : - Tento include slúži na adresované ukladanie premenných typu INT,FLOAT,STRING.- Tento include má slúžiť na rýchlejšie a prehladnejšie písanie scriptov v jazyku Pawn.- Malo by to byť jednoduché na použitie pre začiatočníkov.Výhody includu : - Nemusíte vytvárať žiadne premenné. [ "new Premenna[100];" ]- Jednoducho viete vynulovať všetky premenné na jeden riadok pomocou funkcie DeleteAllVariables(playerid);. [ Hl.využitie na OnPlayerDisconnect(playerid,reason) ]- Núti vás zadefinovať potrebné premenné podľa potreby. [ Pre začiatočníkov , napr #MAX_PLAYERS_EX ]- Na uloženie reťazca ( stringu ) je potrebné 2x menej miesta.- Pamätá sa na každého hráča že koľko premenných má nastavených a práve preto neprebehne cyklus viac krát ako je potrebné.- Po vynulovaní adresy a hodnoty sa síce polia nezmažú ale nastavia sa ich hodnoty na nulu a pri nastavení novej premennej so zaťial nevytvorenou adresou pre daného hráča sa nájde prázdne miesto a údaje sa zapíšu tam.- Načítanie a Zápis údajov je rýchlejší ako cez PVary.- Ako môžete vedieť PVary sa dajú modifikovať a načítať mimo daného FS,premenné cez AVS nie.Taktiež premenné cez PVar na daného hráča sú obmedzené a v AVS si obmedzenia nastavujete vy podľa potreby.Nevýhody includu : - Kvôli adries sa vytvorí viac polí akoby ste použili obyčajnú metódu "new Premenna[100];"- Nakoľko sa hodnoty načítavajú z adries tak sú pomalšie ako obyčajné premenné. [ Cyklus for,volanie funkcie ]Funkcie includu :SetInt(playerid,VName[],i); - Uloží hodnotu i do adresy VName[] pre pole playerid.SetFloat(playerid,VName[],f); - Uloží hodnotu f do adresy VName[] pre pole playerid.SetString(playerid,VName[],s[]); - Uloží reťazec s do adresy VName[] pre pole playerid.GetInt(playerid,VName[]); - Zistí INT-ovú hodnotu z adresy VName[] pre pole playerid. GetFloat(playerid,VName[]); - Zistí FLOAT-ovú hodnotu z adresy VName[] pre pole playerid. GetString(playerid,VName[]); - Zistí reťazec z adresy VName[] pre pole playerid. DeleteVariable(playerid,VName[],VType); - Vymaže údaje a adresu z adresy VName[] pre pole playerid.DeleteAllVaraibles(playerid); - Vymaže všetky údaje a všetky adresy pre pole playerid.Porovnanie s PVarmi [ Rýchlosť ] :- Pri každom teste sa vytvorilo 800 premenných a následne sa zapísali do logu (printf). - Každý test sa vykonal 3xTesty s verziou v1.0 : - Intové premenné -Test 1:PVar : 176 msAVS : 120 msTest 2:PVar : 174 msAVS : 119 msTest 3:PVar : 176 msAVS : 124 ms- Reťazce -Test 1:PVar : 172 ms AVS : 140 ms Test 2: PVar : 170 ms AVS : 137 ms Test 3: PVar : 173 ms AVS : 138 ms Testy s verziou v1.0.5 : - Intové Premenné -Test 1:AVS : 107 msTest 2:AVS : 108 msTest 3:AVS : 108 ms- Reťazce -Test 1:AVS : 121 msTest 2:AVS : 119 msTest 3:AVS : 120 ms - FLOATy som netestoval z toho dôvodu že principialne fungujú rovnako ako INTy.- Pri týchto testoch AVS aj PVary ešte spomaloval cyklus for a funkcia printf takže v reálnom využití sú ešte rýchlejšie. [ Síce podľa mňa ani takto niesu pomalé. ]Changelog : AVS v1.0.5 :- V používaní funkcií pre používateľa sa nič nemenilo.- Táto verzia obsahuje viac optimalizácii čo sa týka rýchlosti a záťaže na CPU.- Funkcia SearchForFreeSpace(playerid,VType) bola nahradená novou funkciach ShiftVariableAddressess(playerid,AddressPos,VType).- Funkcia GetDigits(n) bola prerobená a viac násobne zrýchlená.- Na niektorých miestach bola funkcia format nahradená funkciou valstr.- Na zopár ďalších miestach boli niektoré funkcie nahradené/prerobené a tým pádom zrýchlené. AVS je teoreticky navrhnutý pre prácu s premennými pre hráčov,avšak nikde nie je obmedzené na playerid takže teoreticky je ho možné využiť aj na premenné ktoré nesúvisia s hráčom.Pokiaľ by ste nepochopili niečo z tohto popisu tak pred otázkou sa nezabudnite pozrieť do návodu ktorý je pribalený v .rar súbore. Podrobný návod na použitie nájdete pribalený v .rar súbore !Download tu : http://files.bcph.eu/download.php?file=AVS [ v1.0.5 ] Edited 30. Leden, 2016 by BatisCorleone 1 Link to comment Share on other sites More sharing options...
Administrátor Ewwe 434 Odesláno: 27. Květen, 2015 Administrátor Share Odesláno: 27. Květen, 2015 Ako môžete vedieť PVary sa dajú modifikovať a načítať mimo daného FS,premenné cez AVS nie.Taktiež premenné cez PVar na daného hráča sú obmedzené a v AVS si obmedzenia nastavujete vy podľa potreby. To mi nepřijde jako výhoda.. Tady je spíš výhoda na straně pvarů.. Jak jsou pVary omezené ? 1 Link to comment Share on other sites More sharing options...
BatisCorleone 1 Odesláno: 27. Květen, 2015 Author Share Odesláno: 27. Květen, 2015 To mi nepřijde jako výhoda.. Tady je spíš výhoda na straně pvarů.. - Predstav si situáciu že niekto spraví zadarmo dostupné GM/Admin System ktorý bude bežať na PVaroch. - Nakoľko bude zadarmo dostupné tak hociaké naivné dieťa si to GM/AS môže dať k sebe na server. - Nakoľko je to decko tak uverí povedzme dobrej duše ktorá mu dá scripty len tak zadarmo kde povedzme bude jednoducho "SetPVarInt(playerid,"AdminLevel",5);" a tým pádom si nastaví pre seba AdminLevel alebo hociaké iné hráčske skóre. Jak jsou pVary omezené ? - Neskúmal som presne ako sú obmedzené ale viem že sú. - Povedzme použi tento kód a uvidíš ako sú "obmedzené" : #include <a_samp> public OnPlayerConnect(playerid) { for(new s[4],i;i<1000;i++) { format(s,sizeof(s),"%d",i); SetPVarInt(playerid,s,i); printf("%d",GetPVarInt(playerid,s)); } return 1; } - Posledných 200 hodnôt ti vyprintuje ako 0. Link to comment Share on other sites More sharing options...
Administrátor Ewwe 434 Odesláno: 27. Květen, 2015 Administrátor Share Odesláno: 27. Květen, 2015 (upraveno) - Predstav si situáciu že niekto spraví zadarmo dostupné GM/Admin System ktorý bude bežať na PVaroch. - Nakoľko bude zadarmo dostupné tak hociaké naivné dieťa si to GM/AS môže dať k sebe na server. - Nakoľko je to decko tak uverí povedzme dobrej duše ktorá mu dá scripty len tak zadarmo kde povedzme bude jednoducho "SetPVarInt(playerid,"AdminLevel",5);" a tým pádom si nastaví pre seba AdminLevel alebo hociaké iné hráčske skóre. Tak to už je problém naivního dítěte když si nezmění jmena pvarů... To tamto vyzkouším Edited 27. Květen, 2015 by Ewwe Link to comment Share on other sites More sharing options...
BatisCorleone 1 Odesláno: 27. Květen, 2015 Author Share Odesláno: 27. Květen, 2015 Tak to už je problém naivního dítěte když si nezmění jmena pvarů... No tak z časti ano ale nie každý myslí na takéto potencionálne nebezpečenstvá , a kebyže niekto veľmi chce tak aj v AVS sa dá spraviť načítanie dát z iného scriptu Akurát to by už bolo pravdepodobne pomalšie ako cez PVary. Takže keď pre niekoho to je výhoda aby sa dali zistiť jeho premenné ( čo pre mňa je obrovská nevýhoda ) tak v tom prípade môže použiť aj PVary Link to comment Share on other sites More sharing options...
BatisCorleone 1 Odesláno: 29. Květen, 2015 Author Share Odesláno: 29. Květen, 2015 (upraveno) V include sa našlo zopár úsekov kde sa dalo vykonať zrýchlenie a práve preto som nahral novú verziu v1.0.5 , prosím prečítajte si changelog a poprípadne si stiahnite novú verziu. Edited 29. Květen, 2015 by BatisCorleone Link to comment Share on other sites More sharing options...
milous22 14 Odesláno: 29. Květen, 2015 Share Odesláno: 29. Květen, 2015 Jak jsou pVary omezené ? http://wiki.sa-mp.com/wiki/Limits Player Variables: 800 (0.3.7) 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now