Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Nie podmienia modelu broni.


  • Zamknięty Temat jest zamknięty
59 odpowiedzi w tym temacie

#21 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 13.03.2019 11:51

Jeżeli to ten public po wybraniu skina to zamień na to:

public handle_menuKNIVE(id, menu, item)
{ 
	if (item == MENU_EXIT){ 
		menu_destroy(menu); 
		return PLUGIN_HANDLED;
	}
	
	if(!sprawdz(id, noz_cena[item])){
		client_print(id, print_chat, "Nie stac cie na tego skina.");
		return PLUGIN_HANDLED;
	}
	
	client_print(id, print_chat, "Kupiles skin: %s", noz_skin[item]);
	zmiana1[id] = item;
	menu_destroy(menu); 
	return PLUGIN_HANDLED; 
}

Powinno pokazać też nazwę wybranego/kupionego skina.

 

Wszystko, pięknie śmiga. 

 

Teraz chciałbym się zająć dolarami, ponieważ chciałbym żeby się one zapisywały. Patrzyłem różne tutoriale, ale u mnie to nie działa, nawet nie tworzy się plik nvault..

 

Dobra, napisze teraz co zrobiłem żeby sie dolary zapisywały.

 

Dodałem to:

new jb_packi_nv

W plugin_init():

	jb_packi_nv = nvault_open("jb_packi")

w DeathMsg() zrobiłem tak:

public DeathMsg()
{
	new kid = read_data(1)
	new vid = read_data(2)
	new headshot = read_data(3)
	
	if(kid == vid)
	{
		return PLUGIN_HANDLED	
	}
	{
		new maxjp = get_cvar_num("jb_maxjp")
		if(ilosc_jbpack[kid]<maxjp)
		{
			{
				new pack_tt = get_cvar_num("jb_tt")
				ilosc_jbpack[kid] += pack_tt
				ColorChat(kid, GREEN, "%s ^x01 Dostales ^x04+%i ^x01 dolary", prefix, pack_tt);
			}
			if(headshot)
			{
				new pack_hs = get_cvar_num("jb_hs")
				ilosc_jbpack[kid] += pack_hs
				ColorChat(kid, GREEN, "%s ^x01 Dostales bonus za headshot ^x04+%i ^x01 dolary", prefix, pack_hs);
			}
		}
		else
		{
			ColorChat(kid, GREEN, "%s ^x01 Ilosc maksymalnej ilosci dolarów osiagnieta!", prefix);	
			return PLUGIN_CONTINUE
		}
		ColorChat(kid, GREEN, "%s ^x01 Twoja ilosc dolarów to: ^x04%i/%i", prefix, ilosc_jbpack[kid], maxjp);
		{
			zapisz_jbpack(kid)
		}
	}
	return PLUGIN_CONTINUE
}

I na końcu jest to:

public zaladuj_jbpack(id)
{
	new name[48]
	get_user_name(id,name,47)
	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%s-jbpack",name)
	
	if(nvault_get(jb_packi_nv,vaultkey,vaultdata,127)) {
		new jb_packii[16];
		parse(vaultdata, jb_packii, 15)
		
		ilosc_jbpack[id]=str_to_num(jb_packii)
	}
	
	return PLUGIN_CONTINUE
}  

public zapisz_jbpack(id) {	
	new name[48]
	get_user_name(id,name,47)
	new vaultkey[64],vaultdata[128]
	formatex(vaultkey,63,"%s-jbpack",name)
	formatex(vaultdata,127,"%d", ilosc_jbpack[id])
	nvault_set(jb_packi_nv,vaultkey,vaultdata)
	
	return PLUGIN_CONTINUE
}

public client_putinserver(id){
	{
		zaladuj_jbpack(id);
	}
}
public client_disconnect(id)
{
	{
		zapisz_jbpack(id)
	}
}

A i jescze to:

public return_jbpack(id)
{
	return ilosc_jbpack[id];
}
public set_jbpack(id, amount)
{
	ilosc_jbpack[id] = amount	
}

I mimo to nadal nie działa zapisywanie dolarów na mapy..


Użytkownik Black004 edytował ten post 13.03.2019 12:00

  • +
  • -
  • 0

#22 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 13.03.2019 13:53

Naprawione, wystarczyło zrobić 

public client_putinserver(id){
	{
		zaladuj_jbpack(id);
	}
}

--->

public client_putinserver(id){

    zaladuj_jbpack(id);

}

  • +
  • -
  • 0

#23 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 13.03.2019 14:44

Teraz chciałbym dodać zapis skinów żeby sie zapisywały.

 

Zrobiłem zmienną:

 

new kupiony1[33],

new g_name[33][48]
new g_vault  
 
w plugini_init() dodałem:
 
    g_vault = nvault_open("zapisskina")
 
Dodałem public:
 
public client_authorized(id){
    get_user_name(id, g_name[id], sizeof(g_name[]))  
    load_skin(id);
}

public load_skin(id)
{
        new vaultkey[64],vaultdata[128]
        formatex(vaultkey,63,"%s-skin", g_name[id])      
 
        new skintemp[4][4];
        parse(vaultdata, skintemp[0], sizeof(skintemp[]))
                
        kupiony1[id]=str_to_num(skintemp[0])
               
        return PLUGIN_CONTINUE
} 
 
public save_skin(id) {
 
        new vaultkey[64],vaultdata[128]
        formatex(vaultkey,63,"%s-skin",g_name[id])
        formatex(vaultdata,127,"%i", kupiony1[id])
        nvault_set(g_vault,vaultkey,vaultdata)
        
        return PLUGIN_CONTINUE
} 

W public handle_menuKNIVE(id, menu, item) dodałem:

 

kupiony1[id] = item;

 

a W public client_disconnect(id) dodałem:

 
    save_skin(id);
    kupiony1[id] = -1;

 

 

Tym razem tworzy sie plik zapisskin

 

Ale skiny nie są dawane dla gracza które wcześniej kupił

 


Użytkownik Black004 edytował ten post 13.03.2019 14:45

  • +
  • -
  • 0

#24 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 13.03.2019 15:39

w load skin nigdzie nie wczytujesz danych. Musisz użyć nvault_get
  • +
  • -
  • 0

#25 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 13.03.2019 15:57

w load skin nigdzie nie wczytujesz danych. Musisz użyć nvault_get

 

Z tego:

public load_skin(id)
{
        new vaultkey[64],vaultdata[128]
        formatex(vaultkey,63,"%s-skin", g_name[id])      
 
        new skintemp[4][4];
        parse(vaultdata, skintemp[0], sizeof(skintemp[]))
                
        kupiony1[id]=str_to_num(skintemp[0])
               
        return PLUGIN_CONTINUE
} 
 

Zrobiłem to:

public load_skin(id)
{
        new vaultkey[64],vaultdata[128]
        formatex(vaultkey,63,"%s-skin", g_name[id])     
		
	nvault_get(g_vault,vaultkey,vaultdata,127)
        new skintemp[4][4];
        parse(vaultdata, skintemp[0], sizeof(skintemp[]))
		
        kupiony1[id]=str_to_num(skintemp[0])
               
        return PLUGIN_CONTINUE
} 

Ale nie działa dalej.


  • +
  • -
  • 0

#26 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 13.03.2019 16:05

No to wypisz sobie vaultdata i zobacz.
Debugowanie przez printing. Wypisuj wartości i porównuj z tym co chcesz mieć
  • +
  • -
  • 0

#27 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 13.03.2019 16:11

Nie rozumiem za bardzo, mógłbyś powiedzieć bardziej szczegółowo co mam zrobić?


  • +
  • -
  • 0

#28 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 13.03.2019 17:19

Zrobiłem teraz tak, w kompilatorze bez błędów, ale dalej nie działa...

public load_skin(id)
{
		new vaultkey[64], vaultdata[256];
		format(vaultkey, 63, "%s-SKINYMOD", name[id]);
		nvault_get(g_vault, vaultkey, vaultdata,255);     
	
			replace_all(vaultdata, 255, "#", " ");
	
			new temp_skinknife[33];
	
			parse(vaultdata, temp_skinknife, 32);
			
			kupiony1[id]=str_to_num(temp_skinknife);
               
		return PLUGIN_CONTINUE
} 
 
public save_skin(id) {
 
        new vaultkey[64],vaultdata[256]
		format(vaultkey, 63, "%s-SKINYMOD", name[id]);
		format(vaultdata, 255, "%i#", kupiony1[id]);
        nvault_set(g_vault,vaultkey,vaultdata)
        
        return PLUGIN_CONTINUE
} 


  • +
  • -
  • 0

#29 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 13.03.2019 17:52

Zrobiłem jeszcze tak, ale też nie działa... Może to nie tego wina?

public load_skin(id)
{ 
	new name[48];
	get_user_name(id,name,47);
	new vaultkey[64], vaultdata[256];
	format(vaultkey, 63, "%s-skin", name);
	
	format(vaultdata,255,"#%i", kupiony1[id]);
	
	nvault_set(g_vault, vaultkey, vaultdata);
	
	return;
}
public save_skin(id)
{
	new name[48];
	get_user_name(id,name,47);
	new vaultkey[64], vaultdata[256];
	format(vaultkey, 63, "%s-skin", name);
	nvault_get(g_vault, vaultkey, vaultdata,255);                                                                                                                                         
	
	replace_all(vaultdata, 255, "#", " ");
	
	new temp_knifemodel[33];
	
	parse(vaultdata, temp_knifemodel,32);
	
	kupiony1[id] = str_to_num(temp_knifemodel);
	
	return;
}

Użytkownik Black004 edytował ten post 13.03.2019 17:53

  • +
  • -
  • 0

#30 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 13.03.2019 18:09

Zapisuj do logów sobie poszczególne zmienne to będziesz widział co się dzieje w programie.

W loadskin zapisz sobie vaultdata to będziesz widział czy dobrze nvault_get je pobrał czy nie. Jeśli dobrze to błąd gdzieś później jest. I tak aż dojdziesz do błędu

Teraz zauważyłem że w vaultkey masz niezgodność. To jest klucz po którym są odczytywane dane. Przy wczytywaniu i zapisywaniu muszą być takie same. U ciebie to jest nick-skin . Na listingu wyżej miałeś rozbieżność (ale już w tym bezpośrednio nad moim postem jest ok... Czy Ty wiesz co robisz?

Użytkownik TibacK edytował ten post 13.03.2019 18:12

  • +
  • -
  • 0

#31 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 13.03.2019 18:42

Zapisuj do logów sobie poszczególne zmienne to będziesz widział co się dzieje w programie.

W loadskin zapisz sobie vaultdata to będziesz widział czy dobrze nvault_get je pobrał czy nie. Jeśli dobrze to błąd gdzieś później jest. I tak aż dojdziesz do błędu

Teraz zauważyłem że w vaultkey masz niezgodność. To jest klucz po którym są odczytywane dane. Przy wczytywaniu i zapisywaniu muszą być takie same. U ciebie to jest nick-skin . Na listingu wyżej miałeś rozbieżność (ale już w tym bezpośrednio nad moim postem jest ok... Czy Ty wiesz co robisz?

 

naprawdę ja tak czytam, twoją odpowiedź i czytam kilka razy i nie wiem co robić :/ Ja z pawn'em od 5 miesięcy dopiero zaczynam się cosś szkolić i prosiłbym cie żebyś mi dał przykład jak to ma wyglądać, jakbyś mógł oczywiście.


  • +
  • -
  • 0

#32 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 13.03.2019 20:32

https://amxx.pl/doku...cja/f86/log-amx

log_amx("%s", vaultdata);

Logujesz sobie poszczególne zmienne i patrzysz co w nich siedzi. Po tym rozpoznasz co jest nie tak, na przykład vaultdata będzie puste - czyli nvault_get nie odczytal z pliku, więc szukasz wcześniej błędu. 5 miesięcy to wystarczająco dużo czasu, żeby ogarniać podstawy


  • +
  • -
  • 1

#33 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 14.03.2019 18:15

https://amxx.pl/doku...cja/f86/log-amx

log_amx("%s", vaultdata);

Logujesz sobie poszczególne zmienne i patrzysz co w nich siedzi. Po tym rozpoznasz co jest nie tak, na przykład vaultdata będzie puste - czyli nvault_get nie odczytal z pliku, więc szukasz wcześniej błędu. 5 miesięcy to wystarczająco dużo czasu, żeby ogarniać podstawy

 

Wyświetliło się takie coś w logach:

L 03/14/2019 - 18:13:58: [skin_system.amxx] #0

To oznacza że jest pusty?


  • +
  • -
  • 0

#34 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 14.03.2019 18:17

Nie, to oznacza, że odczytało z pliku wartość #0

dodaj sobie log przy zapisie tez zeby widziec co zapisuje do pliku

 

nvault_get - wczytuje

nvault_set - zapisuje


  • +
  • -
  • 0

#35 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 14.03.2019 18:17

Nie, to oznacza, że odczytało z pliku wartość #0

dodaj sobie log przy zapisie tez zeby widziec co zapisuje do pliku

 

nvault_get - wczytuje

nvault_set - zapisuje


  • +
  • -
  • 0

#36 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 14.03.2019 18:34

Nie, to oznacza, że odczytało z pliku wartość #0

dodaj sobie log przy zapisie tez zeby widziec co zapisuje do pliku

 

nvault_get - wczytuje

nvault_set - zapisuje

 

Zrobiłem tak i oto efekt:

L 03/14/2019 - 18:32:21: [skin_system.amxx]  0  ZAPISYWANIE
L 03/14/2019 - 18:32:26: [skin_system.amxx] #0  LADOWANIE
 
Gdzie pisze "LADOWANIE" to jest to od load_skin, a "ZAPISYWANIE" od save_skin.

Użytkownik Black004 edytował ten post 14.03.2019 18:36

  • +
  • -
  • 0

#37 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 14.03.2019 18:38

No to wyciągnij wnioski.

Zapisuje Ci zero, nie wiem jak sobie numerujesz skiny. moze zero to wlasciwy, a moze zero to brak skina. Musisz wypisywać więcej wartości i śledzić co jest nie tak


  • +
  • -
  • 0

#38 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 14.03.2019 19:00

No to wyciągnij wnioski.

Zapisuje Ci zero, nie wiem jak sobie numerujesz skiny. moze zero to wlasciwy, a moze zero to brak skina. Musisz wypisywać więcej wartości i śledzić co jest nie tak

 

Dodałem jeszcze skiny do innej broni i jest takie cos:

L 03/14/2019 - 18:46:45: [skin_system.amxx] #0#0  LADOWANIE
L 03/14/2019 - 18:50:14: [skin_system.amxx]  0 0  ZAPISYWANIE
Tutaj w disconnect mam ustawioną wartość na -1
public client_disconnect(id){

    save_skin(id);
		
    kupiony1[id] = -1;
    kupiony2[id] = -1;
}

A tutaj mam całe menu ze skinem i tutaj jest kupiony1[id] ustawiany.

public SkinKNIVE(id)
{ 
    {       
	new skin[64]
	new menu = menu_create("\wWybierz nóż","handle_menuKNIVE") 
	for(new i = 0; i<sizeof noz_skin; i++)
	{
    formatex(skin, charsmax(skin), "%s%s  \w|	Cena: \w%i$", (zmiana1[id]==i) ? "\r":"\y", noz_skin[i], noz_cena[i]);
    menu_additem(menu, skin);
    }
	menu_setprop(menu,MPROP_EXIT,MEXIT_ALL) 
	menu_display(id,menu,0)
	        return PLUGIN_HANDLED;
    }
}
 
public handle_menuKNIVE(id, menu, item){

	if (item == MENU_EXIT){ 
		menu_destroy(menu); 
		return PLUGIN_HANDLED;
	}
	
	if(!sprawdz(id, noz_cena[item])){
		client_print(id, print_chat, "Nie stac cie na tego skina.");
		return PLUGIN_HANDLED;
	}
	
	client_print(id, print_chat, "Kupiles skin: %s", noz_skin[item]);
	zmiana1[id] = item;
	kupiony1[id] = item;
	menu_destroy(menu); 
	return PLUGIN_HANDLED; 
}

Sam nie wiem czy 0 to brak skina czy dawanie go. :/


  • +
  • -
  • 0

#39 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 14.03.2019 19:11

pierwsza opcja w menu daje item=0 czyli wychodzi na to ze od zera masz skiny.

 

A i nie używaj '#' podczas zapisu/wczytania, po prostu spacje. Wtedy replace_all nie trzeba


  • +
  • -
  • 0

#40 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:371
  • GG:
  • Imię:Błażej
  • Lokalizacja:Polska
Offline

Napisano 14.03.2019 19:24

pierwsza opcja w menu daje item=0 czyli wychodzi na to ze od zera masz skiny.

 

A i nie używaj '#' podczas zapisu/wczytania, po prostu spacje. Wtedy replace_all nie trzeba

 

To jeszcze nie rozwiązuje problemu dlaczego nie działają :/


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych