[ROZWIĄZANE] Źle odczytanie wartości w nvault
Andrzejek
09.07.2013
Siemka, mam problem, zrobiłem sobie zapis zmiennej bool X i wszystko ładnie zapisuje i wczytuje, ale gdy chce żeby zablokowało np.
if(zmienna[id])return;
noi nie blokuje, a wartość dobrze wczytuje prawdziwą ( 1 - true )
O'Zone
09.07.2013
Jeśli zmienna jest dobrze odczytana, to warunek musi zostać poprawnie wykonany. Dodałeś w środku zmianę zmiennej na false, by nie powtarzało go w kolejnych rundach?
Andrzejek
09.07.2013
Własnie tylk w client_connect ustawiam wartość na false a nastepnie pobiera wartość z pliku nvault i ustawia na tą co gracz miał zapisaną
O'Zone
09.07.2013
W takim wypadku jeśli zmienisz gdziekolwiek graczowi wartość zmiennej na true, zawsze będzie miał taką wartość, bo zostanie zapisana w nvault.
Schemat powinien być taki:
W client_connect wartość false.
Potem załadowanie z nvault.
Jakaś funkcja sprawdzająca po spełnieniu wymagań ustawia zmienną na true, jeśli nie, pozostaje false.
Dalej sprawdzamy, czy zmienna ma wartość true, jeśli tak, wykonywany jest warunek i if'ie.
if(zmienna[id]{
<-wykonywany kod->
zmienna[id]=false; //By zapobiec powtórzeniu
}
Przy wyjściu gracza z serwera zapis do nvault.
O'Zone
09.07.2013
Najlepiej będzie jak pokażesz twój kod, będzie łatwiej zauważyć ewentualny błąd.
Andrzejek
09.07.2013
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Andrzejek"
#define ILOSC 1
new bool:umiejetnosc_zablokuj[33][ILOSC];
enum{
WYRZUC
};
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
// Add your code here...
}
public client_connect(id)
{
umiejetnosc_zablokuj[id][WYRZUC] = false;
get_user_name(id,nazwa_gracza[id],63)
WczytajDane(id)
}
public client_disconnect(id)
{
ZapiszDane(id);
}
public ZapiszDane(id)
{
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s", nazwa_gracza[id]);
format(vaultdata,255,"%i", umiejetnosc_zablokuj[id][WYRZUC]);
nvault_set(g_vault,vaultkey,vaultdata);
}
public WczytajDane(id)
{
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s", nazwa_gracza[id]);
nvault_get(g_vault,vaultkey,vaultdata,255);
replace_all(vaultdata, 255, "#", " ");
new umiejetnosc_zablokujWYRZUC[32];
parse(vaultdata, umiejetnosc_zablokujWYRZUC, 31);
umiejetnosc_zablokuj[id][WYRZUC] = str_to_num(umiejetnosc_zablokujWYRZUC);
}
GwynBleidD
10.07.2013
Daj w enumie WYRZUC=0, tak dla pewności. Nie widzę użycia zmiennej w tym kodzie...
Andrzejek
10.07.2013
No kodu expmoda bym nie dał bo jest chyba z 200 linijek od samych umiejętności, wiec dałem taką skróconą wersje jak ja zrobiłem
A co tego co napisałeś sprawdzę, dopisze
@Edit, też nic
Kolega napisał żebym zrobił tak: str_to_num(umiejetnosc_zablokujWYRZUC) == 1 ? true : false;
ale też nie reaguje
@Edit, działa, można zamknać, pomyliłem się ze zmienną
Gość_21977_* 10.07.2013
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz,

Z pozdrowieniami,
Zespół AMXX.PL