←  Tutoriale

AMXX.pl: Support AMX Mod X i SourceMod

»

Troche o nVault

  • +
  • -
G[o]Q - zdjęcie G[o]Q 07.05.2010

Chcialbym opisac tutaj jeden ze sposobow zapisu danych jaki mozemy uzyc tworzac nasze pluginy.

1. Opis uzywanych funkcji - opisze funkcje ktore beda nam nie zbedne
Spoiler



2. Przykladowe uzycie:

powiedzmy ze do zapisu i odczytu mamy liczbe fragow gracza ktora musi zostac zapisana przy rozlaczeniu i wczytana przy polaczeniu dodatkowo zapisujemy liczbe dead'ow. Przy okazji jest też pokazany sposób zapisania ciągu znaków, w tym przypadku nick gracza.
(wazniejsze linie maja komentarze)

Spoiler

Użytkownik sebul edytował ten post 19.05.2012 10:33
Odpowiedz

  • +
  • -
sbstn - zdjęcie sbstn 07.05.2010

Już prawie miałem napisany tutorial o nVault! Wyprzedziłeś!! ;)

Poradnik ok, ale ja jakoś inaczej używam tego nVaulta. Bez 'nvault_close(plik_vault)' i w ogóle...

Dam plusa ;)
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 07.05.2010

w zasadzie jesli sie cos otworzylo to kultura wymaga zeby to zamknac :D

pisalem ze mozna tez uzywac nvault_get/set przypisujac je do zmiennej
Odpowiedz

  • +
  • -
sbstn - zdjęcie sbstn 07.05.2010

Każdy robi jak chcę (albo jak przyzwyczajenie dyktuje!) ;)
Jeśli GoQ pozwolisz, pokażę kod robiony w nVault wg mnie ;)
(Dane dla odmiany zapisują się na steam_id, a nie jak u GoQ na nick ;)
#include <amxmodx>
#include <amxmisc>
#include <nvault>

#define PLUGIN "Frags&Deaths"
#define VERSION "1.0"
#define AUTHOR "sbstn for AMXX.pl"

new stats_vault
new player_frags[33]
new player_deaths[33]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
stats_vault=nvault_open("Frags&Deaths")
register_event("DeathMsg","Death","a")
}

public Load_Data(id)
{
new steam_id[35]
get_user_authid(id,steam_id,34)
new vaultkey[64]
new vaultdata[256]

format(vaultkey,63,"%s-stats",steam_id)
format(vaultdata,255,"%i#%i#",player_frags[id],player_deaths[id])

nvault_get(stats_vault,vaultkey,vaultdata,255)
replace_all(vaultdata,255,"#"," ")
new p_f[32]
new p_d[32]
parse(vaultdata,p_f,31,p_d,31)
player_frags[id]=str_to_num(p_f)
player_deaths[id]=str_to_num(p_d)

return PLUGIN_CONTINUE
}

public Save_Data(id)
{
new steam_id[35]
get_user_authid(id,steam_id,34)
new vaultkey[64]
new vaultdata[256]

format(vaultkey,63,"%s-stats",steam_id)
format(vaultdata,255,"%i#%i#",player_frags[id],player_deaths[id])

nvault_set(stats_vault,vaultkey,vaultdata)

return PLUGIN_CONTINUE
}

public client_connect(id)
{

Load_Data(id)

}

public client_disconnect(id)
{
Save_Data(id)
}

public Death()
{
new killer=read_data(1)
new victim=read_data(2)

if(killer==victim)
{
return PLUGIN_HANDLED
}
else
{
player_frags[killer]+=1
player_deaths[victim]+=1
}
return PLUGIN_HANDLED
}

public client_putinserver(id)
{
set_task(1.0,"HUD",id,_,_,"b")
}

public HUD(id)
{
set_hudmessage(255,255,255,0.60,0.97,0,8.0,1.5,0.1,0.1,-1)
show_hudmessage(id, "Frags:%i | Deaths:%i",player_frags[id],player_deaths[id])
}


EDIT: Plugin nie działa tak jak GoQ, bo plugin GoQ pokazuje ostatnie nasze fragi sprzed zapisu. Mój kod to takjakby statystyki. Liczy wszystkie fragi i smierci od pierwszego wejscia gracza na serwer do konca ;)
Użytkownik sbstn edytował ten post 07.05.2010 21:26
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 07.05.2010

nie chce nic mowic ale dales taki kod jak ja tylko zmieniles nazwy zmiennych i %i na %d :P
Odpowiedz

  • +
  • -
sbstn - zdjęcie sbstn 07.05.2010

Faktycznie :wstyd: , aczkolwiek chodziło mi o regułę mijania tego 'close'.
Nie ma tego:
 if (plik_vault == INVALID_HANDLE)
set_fail_state( "Nie moge otworzyc pliku :/");

... Co do pluginu to możemy odpowiednio dodać kod z tutoriala ( http://amxx.pl/opera...czu-t24028.html ) i mamy funkcję dawającą daną liczbę fragów lub śmierci przez admina :wstyd: (No bo po co to komu? :|)

Dobra, dobra, bez offtopu, poradnik zajeb**** ;)
Użytkownik sbstn edytował ten post 07.05.2010 21:31
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 07.05.2010

mozemy a tamten kod co podales jest poprostu po to zeby wydrukowac blad jesli nie uda sie otwarcie pliku np zle chmody
Odpowiedz

  • +
  • -
sbstn - zdjęcie sbstn 07.05.2010

OK. Porządności trzeba uczyć ;)

EDIT:
Jeszcze jakbyś GoQ jakiś tutek o MySQL naskrobał, to byłby pełen sukces ;) (Przyda się :] )
Użytkownik sbstn edytował ten post 07.05.2010 21:48
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 07.05.2010

moze kiedys jak zaczne uzywac w pluginach :D chociaz vault szybsze i stabilniejsze
Odpowiedz

  • +
  • -
sbstn - zdjęcie sbstn 08.05.2010

moze kiedys jak zaczne uzywac w pluginach :D chociaz vault szybsze i stabilniejsze


A właśnie.. Masz jakiś sposób na robienie rankingów z plików *.vault?
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 11.06.2010

nom looknij sobie na cod stats :D
Odpowiedz

  • +
  • -
sbstn - zdjęcie sbstn 14.06.2010

Miesiąc czekałem ;)
Odpowiedz

  • +
  • -
Monsulito - zdjęcie Monsulito 19.06.2010

Mam 1 pytanko, jezeli
 stats_vault=nvault_open("Frags&Deaths") 
To jak nie bedzie pliku samo go utworzy?
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 19.06.2010

tak
Odpowiedz

  • +
  • -
Lunatic - zdjęcie Lunatic 17.08.2010

Ja mam takie 2 amatorskie pytanie.
1. Czy nie lepiej pobrać nick raz w public client_connect??
1. Jak zapisuje do nVault exp to jak go poźniej zresetować??
Użytkownik Lunatic edytował ten post 17.08.2010 00:54
Odpowiedz

  • +
  • -
Vertricus - zdjęcie Vertricus 17.08.2010

1. To plugin pokazowy jak używamy tylko przy zapisie odczytu to nie trza pamięci marnować.
Jednak z drugiej strony gracz moze zmienic nick w trakcie więc lepiej jakby zapisywalo na ten na który wszedł.

2. Tworzysz komendę, w której: to tylko przykład "nvault_set(TWOJE_VAULT,"VERT_EXP","0")" innymi słowy zerujesz ^^. W zależności co masz w jako trzeci argument.
Odpowiedz

  • +
  • -
Lunatic - zdjęcie Lunatic 17.08.2010

Dzięki mam jeszcze 1 pytanie jak miałem zapis exp na baze msql to po crashu serwera nie było leveli dopiero po zmianie mapy były czy tutaj będzie tak samo??
Odpowiedz

  • +
  • -
Vertricus - zdjęcie Vertricus 17.08.2010

To najprawdopodobniej problem z bazą jak jest dobrze napisany plugin to aniu tu ani tu nie powinno być problemów.
Odpowiedz

  • +
  • -
Boluus - zdjęcie Boluus 12.12.2011

Witam.Chciałbym zmienić zapis z Sql na zpis nvault jak mogę to zrobić ? co musze zrobić z kodem ? lub plikami
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 13.12.2011

załóż nowy temat
Odpowiedz