hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.28. 13:42



Jelenlévő felhasználók

Jelenleg 233 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 233 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 16 hozzászólás ]  Oldal 1 2 Következő
Szerző Üzenet
 Hozzászólás témája: Fájl mentés
HozzászólásElküldve: 2015.11.21. 22:41 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2014.09.08. 22:21
Hozzászólások: 3014
Megköszönt másnak: 96 alkalommal
Megköszönték neki: 555 alkalommal
[kozep]Fájl mentés tutorial
by mforce[/kozep]


Leírás:
Egyszerű fájl mentés tutorial, fvault-ból felhasznált stockokkal az egyszerűség kedvéért.
Így nem kell include és a fájl is akárhova helyezhető.


Fájl helyének meghatározása:
Alapértelmezettként a /configs/ mappa van megadva (amxx_configsdir), ezután szerkeszthető a fájlnév a format résznél.
A filename tömbnek fontos, hogy kívül legyen minden függvényből, mert a stockok is ez alapján azonosítanak, tehát a fájl elérési helyét letároljuk map indításkor a globális filename tömbbe, hogy többször ne kelljen utána járni.

SMA Forráskód: [ Mindet kijelol ]
  1. new filename[128];
  2.  
  3. public plugin_init() {
  4. // blabla
  5. get_localinfo("amxx_configsdir", filename, charsmax(filename))
  6. format(filename, charsmax(filename), "%s/mforce_fajlmentes.ini", filename)
  7. }


Persze lehet módosítani, ha nem a configs mappát szeretnénk, akkor segítség:
amxx_configsdir addons/amxmodx/configs ( ugye ez az alap )
amxx_datadir addons/amxmodx/data ( Ha erre módosítod: amxx_datadir, akkor a data mappába kerül a fájl. )

Alap stockok:

Ezek nélkül el se kezdjük. Be kell másolni ezeket a stockokat a pluginba.
SMA Forráskód: [ Mindet kijelol ]
  1. stock get_data(const key[], data[], len) {
  2. new vault = fopen(filename, "rt");
  3. new _data[512], _key[64];
  4.  
  5. while( !feof(vault) ) {
  6. fgets(vault, _data, charsmax(_data));
  7. parse(_data, _key, charsmax(_key), data, len);
  8.  
  9. if( equal(_key, key) ) {
  10. fclose(vault);
  11. return 1;
  12. }
  13. }
  14.  
  15. fclose(vault);
  16. copy(data, len, "");
  17.  
  18. return 0;
  19. }
  20.  
  21. stock set_data(const key[], const data[]) {
  22. static const temp_vault_name[] = "set_data.txt";
  23. new file = fopen(temp_vault_name, "wt");
  24.  
  25. new vault = fopen(filename, "rt");
  26. new _data[512], _key[64], _other[32];
  27. new bool:replaced = false;
  28.  
  29. while( !feof(vault) ) {
  30. fgets(vault, _data, charsmax(_data));
  31. parse(_data, _key, charsmax(_key), _other, charsmax(_other));
  32.  
  33. if( equal(_key, key) && !replaced ) {
  34. fprintf(file, "^"%s^" ^"%s^"^n", key, data);
  35.  
  36. replaced = true;
  37. }
  38. else {
  39. fputs(file, _data);
  40. }
  41. }
  42.  
  43. if( !replaced ) {
  44. fprintf(file, "^"%s^" ^"%s^"^n", key, data);
  45. }
  46.  
  47. fclose(file);
  48. fclose(vault);
  49.  
  50. delete_file(filename);
  51.  
  52. while( !rename_file(temp_vault_name, filename, 1) ) { }
  53.  
  54. //delete_file(temp_vault_name);
  55. }


Mentés:

SteamID-re. ( Ha ID_LAN, akkor IP-re. )
SMA Forráskód: [ Mindet kijelol ]
  1. public client_disconnect(id) {
  2. if(!is_user_bot(id) && !is_user_hltv(id)) {
  3. save(id);
  4. }
  5. }
  6.  
  7. public save(id) {
  8. new szData[128];
  9. new steamid[32]; get_user_authid(id, steamid, charsmax(steamid));
  10. if(contain(steamid, "_ID_LAN") != -1) get_user_ip(id, steamid, charsmax(steamid), 1);
  11.  
  12. formatex(szData, charsmax(szData), "%i %i", valtozo[id], valtozo2[id]);
  13. set_data(steamid, szData)
  14. }


Névre: ( ehhez le kell tiltanod a névváltást egy pluginnal. )
SMA Forráskód: [ Mindet kijelol ]
  1. public client_disconnect(id) {
  2. if(!is_user_bot(id) && !is_user_hltv(id)) {
  3. save(id);
  4. valtozo[id] = 0; // nullázzuk a változókat a mentés után
  5. valtozo2[id] = 0;
  6. }
  7. }
  8.  
  9. public save(id) {
  10. new szData[128];
  11. new name[32]; get_user_name(id, name, charsmax(name));
  12.  
  13. formatex(szData, charsmax(szData), "%i %i", valtozo[id], valtozo2[id]);
  14. set_data(name, szData)
  15. }


A formatex rész számít, ahol számoknak integert adunk (%i), szövegnek (%s), és a vessző után a menteni való változókat beírjuk.
Figyelembe vesszük az szData tömb karakterértékét, tehát ha kevés, akkor feljebb emeljük. Nagyobb szövegek mentését nagyon nem ajánlatos egyébként fájlba menteni.

Betöltés:

SteamID-re. ( Ha ID_LAN, akkor IP-re. )
SMA Forráskód: [ Mindet kijelol ]
  1. public client_authorized(id) {
  2. if(!is_user_bot(id) && !is_user_hltv(id)) {
  3. load(id);
  4. }
  5. }
  6.  
  7. public load(id) {
  8. new szData[128];
  9. new steamid[32]; get_user_authid(id, steamid, charsmax(steamid));
  10. if(contain(steamid, "_ID_LAN") != -1) get_user_ip(id, steamid, charsmax(steamid), 1);
  11.  
  12. if(get_data(steamid, szData, charsmax(szData))) {
  13. new valami[32], valami2[32];
  14. parse(szData, valami, charsmax(valami), valami2, charsmax(valami2);
  15. valtozo[id] = str_to_num(valami)
  16. valtozo2[id] = str_to_num(valami2)
  17. }
  18. }


Névre: ( ehhez le kell tiltanod a névváltást egy pluginnal. )
SMA Forráskód: [ Mindet kijelol ]
  1. public client_authorized(id) {
  2. if(!is_user_bot(id) && !is_user_hltv(id)) {
  3. load(id);
  4. }
  5. }
  6.  
  7. public load(id) {
  8. new szData[128];
  9. new name[32]; get_user_name(id, name, charsmax(name));;
  10.  
  11. if(get_data(name, szData, charsmax(szData))) {
  12. new valami[32], valami2[32];
  13. parse(szData, valami, charsmax(valami), valami2, charsmax(valami2);
  14. valtozo[id] = str_to_num(valami)
  15. valtozo2[id] = str_to_num(valami2)
  16. }
  17. }


Itt a parse rész után érdemes odafigyelni, hogy ha számokról van szó, akkor ezt használjuk:
SMA Forráskód: [ Mindet kijelol ]
  1. valtozo[id] = str_to_num(valami)

Ha szövegről, akkor meg:
SMA Forráskód: [ Mindet kijelol ]
  1. copy(valtozo[id], charsmax(valtozo[]), valami)


Itt is érvényes:
Figyelembe vesszük az szData tömb karakterértékét, tehát ha kevés, akkor feljebb emeljük. Nagyobb szövegek mentését nagyon nem ajánlatos egyébként fájlba menteni.
Az if(get_data rész meg annyit takar, hogy ha megtalálta a fájlban a klienst, akkor az történik. Ha nem, akkor semmi. Tehát egy else ágban is lehetőség van a változók nullázására például, ha úgy tetszik.

Még több változóhoz segítség a formatex (mentés) részen kívül a betöltéshez:
létrehozunk több tömböt tárolásra.
SMA Forráskód: [ Mindet kijelol ]
  1. new valami3[32], valami4[32]

Itt 32 a karakterszámot jelenti, ami persze levehető számoknál pl. a tiny integer alapértékére [8].
Én fentebb alapból 32-t írtam mindenhez, a biztonság kedvéért, mert nem tudhatom, hogy számok vagy szövegek mentésére van szükség.
Parse résznél a további változókhoz folytatjuk a sort.
SMA Forráskód: [ Mindet kijelol ]
  1. parse(szData, valami, charsmax(valami), valami2, charsmax(valami2), valtozo3, charsmax(valami3), valtozo4, charsmax(valami4))

Ugyanígy használjuk a
SMA Forráskód: [ Mindet kijelol ]
  1. valtozo3[id] = str_to_num(valami3)
  2. valtozo4[id] = str_to_num(valami4)

parancsokat számok betöltésénél.
Vagy
SMA Forráskód: [ Mindet kijelol ]
  1. copy(valtozo3[id], charsmax(valtozo3[]), valami3)
  2. copy(valtozo4[id], charsmax(valtozo4[]), valami4)

szövegek betöltésénél.

Ha van még kérdés, akkor itt legyetek szívesek feltenni, ne nyissatok 100 témát ilyen dolgoknak.

_________________
GitHub - mforce

Ők köszönték meg mforce nek ezt a hozzászólást (összesen 2): jokypapa (2015.12.03. 14:26) • LyleChriss (2015.12.11. 14:23)
  Népszerűség: 4.55%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Fájl mentés
HozzászólásElküldve: 2015.11.24. 17:28 
Offline
Jómunkásember

Csatlakozott: 2013.10.01. 19:07
Hozzászólások: 319
Megköszönt másnak: 50 alkalommal
Megköszönték neki: 23 alkalommal
Szia mforce megnéznéd hogy ebbe mi a hiba mert sajnos pár cucott ment és betölt de a többi valami oknál fogva nem köszönöm a miharabbi választ :D

SMA Forráskód: [ Mindet kijelol ]
  1. public client_authorized(id) {
  2. if(!is_user_bot(id) && !is_user_hltv(id)) {
  3. load(id);
  4.  
  5. }
  6. }
  7.  
  8.  
  9. public client_disconnect(id) {
  10. if(!is_user_bot(id) && !is_user_hltv(id)) {
  11. save(id);
  12.  
  13. }
  14. }
  15. public save(id) {
  16. new szData[256];
  17. new steamid[32]; get_user_authid(id, steamid, charsmax(steamid));
  18. if(contain(steamid, "_ID_LAN") != -1) get_user_ip(id, steamid, charsmax(steamid), 1);
  19.  
  20. formatex(szData, charsmax(szData), "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i",pont[id],kulcs[id],knifeskin[1][id],knifeskin[2][id],
  21. knifeskin[3][id],knifeskin[4][id],knifeskin[5][id],knifeskin[6][id],knifeskin[7][id],szinlada2[id],huntlada[id],esportlada[id],operlada[id],operblada[id],szinlada[id]);
  22. set_data(steamid, szData)
  23. }
  24.  
  25.  
  26. public load(id) {
  27. new szData[256];
  28. new steamid[32]; get_user_authid(id, steamid, charsmax(steamid));
  29. if(contain(steamid, "_ID_LAN") != -1) get_user_ip(id, steamid, charsmax(steamid), 1);
  30.  
  31. if(get_data(steamid, szData, charsmax(szData))) {
  32. new fpont[32],fkulcs[32],fknife[32],fknife1[32],fknife2[32],fknife3[32],fknife4[32],fknife5[32],fknife6[32],fknife7[32],lada_mny1[32],lada_mny2[32],lada_mny3[32],lada_mny4[32],lada_mny5[32],lada_mny6[32]
  33. parse(szData,fpont,charsmax(fpont),fkulcs,charsmax(fkulcs),fknife,charsmax(fknife),fknife1,charsmax(fknife1),fknife2,charsmax(fknife2),fknife3,charsmax(fknife3),fknife4,charsmax(fknife4),fknife5,charsmax(fknife5),fknife6,charsmax(fknife6),
  34. fknife7,charsmax(fknife7),lada_mny1,charsmax(lada_mny1),lada_mny2,charsmax(lada_mny2),lada_mny3,charsmax(lada_mny3),lada_mny4,charsmax(lada_mny4),lada_mny5,charsmax(lada_mny5),lada_mny6,charsmax(lada_mny6))
  35. pont[id] = str_to_num(fpont)
  36. kulcs[id] = str_to_num(fkulcs)
  37. knifeskin[1][id] = str_to_num(fknife)
  38. knifeskin[2][id] = str_to_num(fknife1)
  39. knifeskin[3][id] = str_to_num(fknife2)
  40. knifeskin[4][id] = str_to_num(fknife3)
  41. knifeskin[5][id] = str_to_num(fknife4)
  42. knifeskin[6][id] = str_to_num(fknife5)
  43. knifeskin[7][id] = str_to_num(fknife6)
  44. szinlada2[id] = str_to_num(lada_mny1)
  45. huntlada[id] = str_to_num(lada_mny2)
  46. esportlada[id] = str_to_num(lada_mny3)
  47. operlada[id] = str_to_num(lada_mny4)
  48. operblada[id] = str_to_num(lada_mny5)
  49. szinlada[id] = str_to_num(lada_mny6)
  50.  
  51.  
  52. }
  53. }
  54.  

_________________
[kozep]Kép[/kozep]
[kozep]Naponta fejlesztések ezért is megéri fel jonni!:)[/kozep]
[kozep]Troy ~ 1337. CFG[/kozep]


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Fájl mentés
HozzászólásElküldve: 2015.11.24. 17:43 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2014.09.08. 22:21
Hozzászólások: 3014
Megköszönt másnak: 96 alkalommal
Megköszönték neki: 555 alkalommal
Így nem látok benne hibát, de ennyi változóhoz amúgy se ajánlott fájl mentés, majd lesz SQL tutoriál is. Amúgy fájl mentés is ideális, de max memóriacelákkal (array), ha 1x olvasod be map váltáskor, azt kész.

amúgy számokról van szó, ahogy látom ott a new valami[32], inkább [8] vagy [11] legyen.

_________________
GitHub - mforce


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Fájl mentés
HozzászólásElküldve: 2015.11.24. 17:57 
Offline
Jómunkásember

Csatlakozott: 2013.10.01. 19:07
Hozzászólások: 319
Megköszönt másnak: 50 alkalommal
Megköszönték neki: 23 alkalommal
Ebbe is meglehetne oldani hogy ne buggoljon? Vagy hgyam es maj sql-be?

_________________
[kozep]Kép[/kozep]
[kozep]Naponta fejlesztések ezért is megéri fel jonni!:)[/kozep]
[kozep]Troy ~ 1337. CFG[/kozep]


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Fájl mentés
HozzászólásElküldve: 2015.12.02. 17:04 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2014.09.08. 22:21
Hozzászólások: 3014
Megköszönt másnak: 96 alkalommal
Megköszönték neki: 555 alkalommal
Most látom maga az index és a tömb sem tiszta, hát 0-ról kezdünk, meg fordítva van + miért nem enumeráció akkor? Azt 0-ázni is 1sor lenne.

SMA Forráskód: [ Mindet kijelol ]
  1. enum _:knives
  2. {
  3. knife1,
  4. knife2
  5. }
  6.  
  7. new data[33][knives];
  8.  
  9. // és akkor így néz ki:
  10. data[id][knife1]
  11.  
  12. // összes nullázása:
  13. arrayset(data[id] , 0 , sizeof(data[]));

_________________
GitHub - mforce


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Fájl mentés
HozzászólásElküldve: 2015.12.04. 07:49 
Offline
Jómunkásember

Csatlakozott: 2014.10.30. 10:18
Hozzászólások: 468
Megköszönt másnak: 235 alkalommal
Megköszönték neki: 34 alkalommal
mforce írta:
Most látom maga az index és a tömb sem tiszta, hát 0-ról kezdünk, meg fordítva van + miért nem enumeráció akkor? Azt 0-ázni is 1sor lenne.

SMA Forráskód: [ Mindet kijelol ]enum _:knives{ knife1, knife2} new data[33][knives]; // és akkor így néz ki:data[id][knife1] // összes nullázása:arrayset(data[id] , 0 , sizeof(data[]));



Köszi a leírást! Mforce tudnád módosítani a témanevet, mondjuk írd már hozzá légy szíves h [TuT] vagy tutorial vagy valami :) Mert már négyszer néztem meg a témát, mindig azt hiszem h valami hibának a javítása :)


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Fájl mentés
HozzászólásElküldve: 2015.12.04. 09:17 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2014.09.08. 22:21
Hozzászólások: 3014
Megköszönt másnak: 96 alkalommal
Megköszönték neki: 555 alkalommal
Nem igazán tervezek a szerkesztéshez nyúlni, mert összeugrik az egész :D

_________________
GitHub - mforce


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Fájl mentés
HozzászólásElküldve: 2015.12.04. 12:27 
Offline
Jómunkásember

Csatlakozott: 2014.10.30. 10:18
Hozzászólások: 468
Megköszönt másnak: 235 alkalommal
Megköszönték neki: 34 alkalommal
mforce írta:
Nem igazán tervezek a szerkesztéshez nyúlni, mert összeugrik az egész :D


:) Igen tudom :) Csak reménykedtem h témanév módosításnál nem kell hozzányúlni :)


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Fájl mentés
HozzászólásElküldve: 2016.01.03. 18:01 
Offline
Senior Tag

Csatlakozott: 2015.06.28. 13:00
Hozzászólások: 295
Megköszönt másnak: 20 alkalommal
Megköszönték neki: 10 alkalommal
Miért nem menti le az öléseket?

  1. public client_authorized(id)
  2. {
  3.     if(!is_user_bot(id) && !is_user_hltv(id))
  4.     {
  5.         Betoltes(id)
  6.     }
  7. }
  8. public client_disconnect(id)
  9. {
  10.     if(!is_user_bot(id) && !is_user_hltv(id))
  11.     {
  12.         Mentes(id)
  13.     }
  14. }
  15. public Mentes(id)
  16. {
  17.     new szData[128], ip[32]
  18.     get_user_ip(id, ip, charsmax(id))
  19.    
  20.     formatex(szData, charsmax(szData), "%i", oles[id])
  21.     set_data(ip, szData)
  22. }
  23. public Betoltes(id)
  24. {
  25.     new szData[128], ip[32]
  26.     get_user_ip(id, ip, charsmax(ip))
  27.    
  28.     if(get_data(ip, szData, charsmax(szData)))
  29.     {
  30.         new oles1[32]
  31.         parse(szData, oles1, charsmax(oles1))
  32.         oles[id] = str_to_num(oles1)
  33.     }
  34. }

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Fájl mentés
HozzászólásElküldve: 2016.01.03. 18:47 
Offline
Fanatikus
Avatar

Csatlakozott: 2015.07.21. 00:49
Hozzászólások: 178
Megköszönt másnak: 23 alkalommal
Megköszönték neki: 20 alkalommal
get_user_ip(id, ip, charsmax(id))

---->

get_user_ip(id, ip, charsmax(ip))

Ők köszönték meg V!RUSHĐ nek ezt a hozzászólást: PistaCFG (2016.01.03. 18:50)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 16 hozzászólás ]  Oldal 1 2 Következő


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole