←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Źle odczytanie wartości w nvault

Zablokowany

  • +
  • -
Andrzejek - zdjęcie 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 )

Odpowiedz

  • +
  • -
O'Zone - zdjęcie 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?

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie 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ą

Odpowiedz

  • +
  • -
O'Zone - zdjęcie 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.

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 09.07.2013

To samo

Odpowiedz

  • +
  • -
O'Zone - zdjęcie O'Zone 09.07.2013

Najlepiej będzie jak pokażesz twój kod, będzie łatwiej zauważyć ewentualny błąd.

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie 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);
}

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 10.07.2013

Daj w enumie WYRZUC=0, tak dla pewności. Nie widzę użycia zmiennej w tym kodzie...

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie 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ą ;)

Odpowiedz

Gość_21977_* 10.07.2013

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany