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

Zapis nvault nie działa.


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
30 odpowiedzi w tym temacie

#1 Black004

    Wszechpomocny

  • Użytkownik

Reputacja: 14
Początkujący

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

Napisano 17.05.2019 22:34

Witam, mam problem z zapisem nvault, chodzi o to że zedytowałem plugin na pety w cs 1.6. Chciałbym teraz dodać że zapisuję się jakiego peta wybraliśmy, ale to nie działa, a w nvault tworzy się normalnie wpis.

 

KOD:

public pet_menu(id)
{      

	if(is_user_connected(id) &&  (get_user_flags(id) & (VIP | SVIP | HERO)))
	{

	new menu;
	menu = menu_create("\yWybierz swojego towarzysza!", "knifemenu_premium")
	
	menu_additem(menu, "\yUsun zwierzątko^n");
	menu_additem(menu, "KRAB");
	menu_additem(menu, "SZCZUR");
	menu_additem(menu, "NIETOPERZ");
	menu_additem(menu, "FROG");
	menu_additem(menu, "GRUNT");
	menu_additem(menu, "RYBA");
	
	menu_setprop(menu, MPROP_EXITNAME, "Wyjscie");

	menu_display(id, menu);
	}
	else	
	{
		ColorChat(id, RED,"[ZWIERZATKA] Tylko rangi VIP,SVIP,HERO maja dostep do tego. Zeby kupic te rangi napisz do wlasciciela")
	}
	return PLUGIN_CONTINUE;
}

public knifemenu_premium(id, menu, item) 
{

	if(!is_user_connected(id))
		return PLUGIN_HANDLED;
		
	if(item == MENU_EXIT)
	{
		menu_destroy(id);
		return PLUGIN_HANDLED;
	}
	
	switch(item) 
	{
		case 0:
		{
		if(pet[id]) client_print(id,print_chat,"[AMXX] %L",id,"MSG_REMOVEPET")
		else client_print(id,print_chat,"[AMXX] %L",id,"MSG_NOREMOVEPET")
		handle_DeathMsg(id)
		pet2[id] = 0
		}
		case 1:{
		pet_cmd_handle(id,0)
		pet2[id] = 1
		}
		case 2:{
		pet_cmd_handle(id,1)
		pet2[id] = 2
		}
		case 3:{
		pet_cmd_handle(id,2)
		pet2[id] = 3
		}
		case 4:{
		pet_cmd_handle(id,3)
		pet2[id] = 4
		}
		case 5:{
		pet_cmd_handle(id,4)
		pet2[id] = 5
		}
		case 6:{
		pet_cmd_handle(id,9)
		pet2[id] = 6
		}
		case 7:{
		pet_cmd_handle(id,8)
		pet2[id] = 7
		}
	}
	save_pet(id)
	menu_destroy(menu);
	return PLUGIN_HANDLED
}
public Poczatek_Rundy(id){

if(pet2[id] == 0){

	handle_DeathMsg(id)
	return PLUGIN_CONTINUE
}

if(pet2[id] == 1){

	pet_cmd_handle(id,0)
	return PLUGIN_CONTINUE
}

if(pet2[id] == 2){

	pet_cmd_handle(id,1)
	return PLUGIN_CONTINUE
}

if(pet2[id] == 3){

	pet_cmd_handle(id,2)
	return PLUGIN_CONTINUE
}

if(pet2[id] == 4){

	pet_cmd_handle(id,3)
	return PLUGIN_CONTINUE
}

if(pet2[id] == 5){

	pet_cmd_handle(id,4)
	return PLUGIN_CONTINUE
}

if(pet2[id] == 6){

	pet_cmd_handle(id,9)
	return PLUGIN_CONTINUE
}

if(pet2[id] == 7){

	pet_cmd_handle(id,8)
	return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public plugin_init()
{
	register_logevent("Poczatek_Rundy", 2, "1=Round_Start")
}

A tutaj daje sam zapis i oczyt:

save_pet(id)
{ 
	
	get_user_name(id, name, 31)
	
	new vaultkey[64]
	new vaultdata[64]
	
	format(vaultkey, 63, "pet_%s", name)
	format(vaultdata, 63, "%d", pet[id])
	set_vaultdata(vaultkey, vaultdata)
}

load_pet(id) 
{ 

	get_user_name(id, name, 31)
	
	new vaultkey[64], vaultdata[64]
	
	format(vaultkey, 63, "pet_%s", name)
	get_vaultdata(vaultkey, vaultdata, 63)
	pet[id] = str_to_num(vaultdata)
	
}

  • +
  • -
  • 0

#2 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 17.05.2019 22:39

użyj nvault a nie vault, IMO lepsze i nowsze

 

Podejrzyj co jest w pliku czy dobrze zapisało. Wyprintuj sobie wartości jakie wczytuje/zapisuje twój plugin.

 

 

A i kod sobie sformatuj bo wygląda jak kupcia 

 

Spoiler

Użytkownik TibacK edytował ten post 17.05.2019 22:39

  • +
  • -
  • 1

#3 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

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

Napisano 18.05.2019 07:37

W konsoli wyświetla się:

[jail_zwierzeta.amxx] zaladuj_pet: 49
[jail_zwierzeta.amxx] zapisz_pet: 49

Nie wiem dlaczego takie duże liczby powychodziły :/

 

A tak zrobiłem ten zapis:

public pet_zapisz(id)
{

	get_user_name(id, name, 31)
	new vaultkey[64],vaultdata[128];
	formatex(vaultkey, 63,"pet_%s", name);
		
	formatex(vaultdata, 127,"%d", pet[id]);
	nvault_set(vault,vaultkey,vaultdata);
	
	log_amx("zapisz_pet: %d",vaultdata);
	
}


public pet_zaladuj(id)
{
	get_user_name(id, name, 31)
	new vaultkey[64], vaultdata[128]
	formatex(vaultkey, 63, "pet_%s", name);
	

	if(nvault_get(vault,vaultkey,vaultdata,127)){
	new skingracza[16];
	
	parse(vaultdata, skingracza, 31);
	
	pet[id] = str_to_num(skingracza);
	
	log_amx("zaladuj_pet: %d",vaultdata);
	
	}
	return PLUGIN_CONTINUE;
} 

  • +
  • -
  • 0

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 18.05.2019 08:12

Po pierwsze znów Ci się rozmiary tablic rozjechały, mówię o pet_zaladuj - rzuć okiem to zobaczysz.

Przy wypisywaniu używasz %d a ono służy do wypisywania liczb całkowitych. Ty zaś podajesz tam stringa (vaultdata)
  • +
  • -
  • 1

#5 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

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

Napisano 18.05.2019 09:08

Po pierwsze znów Ci się rozmiary tablic rozjechały, mówię o pet_zaladuj - rzuć okiem to zobaczysz.

Przy wypisywaniu używasz %d a ono służy do wypisywania liczb całkowitych. Ty zaś podajesz tam stringa (vaultdata)

 

Rozmiary tablic chyba naprawiłem:

public pet_zaladuj(id)
{
	get_user_name(id, name, 31)
	new vaultkey[64], vaultdata[128]
	formatex(vaultkey, 63, "pet_%s", name);
	

	if(nvault_get(vault,vaultkey,vaultdata,127)){
	new skingracza[16];
	
	parse(vaultdata, skingracza, 15);
	
	pet[id] = str_to_num(skingracza);
	
	log_amx("zaladuj_pet: %d",vaultdata);
	
	}
	return PLUGIN_CONTINUE;
} 

Ale nie rozumiem cię z tym stringiem, chyba chodzi ci o to:

	log_amx("zaladuj_pet: %d",vaultdata);

Ale jak nawet %d zamienia na %s to się wyświetla ciągle 0 w te miejsce


  • +
  • -
  • 0

#6 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 18.05.2019 09:39

zamiast bawić się w rozmiary pisane na sztywno możesz zrobić cos takiego:

	new skingracza[16];
	
	parse(vaultdata, skingracza, charsmax(skingracza));

Poczytaj tu:

https://amxx.pl/doku...e;string,format

 

Tu masz tabelke itp.

Jesli chcesz wypisać liczbe dajesz:

log_amx("asdf %d", twojaLiczba);

jeśli string:

log_amx("asdf %s", twojString);

jeśli liczbe zmiennoprzecinkowa z  dwoma miejscami po przecinku:

log_amx("asdf %0.2f", twojFloat);


Ale jak nawet %d zamienia na %s to się wyświetla ciągle 0 w te miejsce


 

No to co to może oznaczać?

Nie wczytało się z pliku.

Dobrze utworzyłeś uchwyt do nvault za pomocą nvault_open?

 

 

Dodam, że jeśli w funkcji zapisującej jest zapisywane '0' do pliku to potem odczyta się też zero - normalna sprawa


  • +
  • -
  • 1

#7 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

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

Napisano 18.05.2019 09:51

	vault = nvault_open("skin_system2")

Tak wygląda nvault_open. i 0 jest zawsze wyświetlane

 

Ja już sam nie wiem teraz w konsoli jak zrobiłem te %s to wyświetla się to:

L 05/18/2019 - 10:14:22: [jail_zwierzeta.amxx] zaladuj_pet: 48
L 05/18/2019 - 10:14:22: [jail_zwierzeta.amxx] zapisz_pet: 48

Masz tutaj w ogóle całe .sma może coś zaradzisz..

 

http://wklejto.pl/740345


Użytkownik Black004 edytował ten post 18.05.2019 10:21

  • +
  • -
  • 0

#8 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 18.05.2019 10:25

Zobaczyłem w kod

Zmienna pet[id] przechowywuje numer enta. To nie jest żaden typ peta ani nic. To po prostu identyfikator bytu. Z tego zapisu nie zrobisz w taki sposób.

pettype trzyma Ci typ peta.


  • +
  • -
  • 1

#9 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

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

Napisano 18.05.2019 10:37

Zobaczyłem w kod

Zmienna pet[id] przechowywuje numer enta. To nie jest żaden typ peta ani nic. To po prostu identyfikator bytu. Z tego zapisu nie zrobisz w taki sposób.

pettype trzyma Ci typ peta.

 

To jak to bym musiał zrobić z pettype ? 

 

Musze usunąć zmienną pet2, początek rundy i dać zapis na pettype ?


  • +
  • -
  • 0

#10 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 18.05.2019 10:55

Musiałbyś zrobić tak:

Zapisujesz do nvault zmienną pettype.

Odczytujesz też.

I jak np gracz jest zespawnowany i nie ma utworzonego peta (zmienna pet[id] jest równa -1 wtedy) to tworzysz mu peta używając kodu z pet_cmd_handle


  • +
  • -
  • 1

#11 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

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

Napisano 18.05.2019 11:11

Takie coś ?

public Poczatek_Rundy(id){
 
if(pet2[id] == -1){
 
 pet_cmd_handle(id)
	
	}	
}

Nie moge tego skompilować :/ Jest błąd.


  • +
  • -
  • 0

#12 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 18.05.2019 11:36

Czym jest pet2 u Ciebie? Nie widze żadnego zastosowania (dobrego) jego.

 


I jak np gracz jest zespawnowany i nie ma utworzonego peta (zmienna pet[id] jest równa -1 wtedy) to tworzysz mu peta używając kodu z pet_cmd_handle

 

Bardziej chodziło mi o użycie Ham_Spawn

 

 

Dodam, że pet_cmd_handle jako pierwszy parametr przyjmuje ID gracza, a jako drugi typ zwierzątka.

Spędź troche czasu, poczytaj, doucz się troche i bez problemu przeróbki bedziesz czaskać

 


  • +
  • -
  • 0

#13 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

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

Napisano 18.05.2019 14:28

Czym jest pet2 u Ciebie? Nie widze żadnego zastosowania (dobrego) jego.

 

 

 


I jak np gracz jest zespawnowany i nie ma utworzonego peta (zmienna pet[id] jest równa -1 wtedy) to tworzysz mu peta używając kodu z pet_cmd_handle

 

Bardziej chodziło mi o użycie Ham_Spawn

 

 

Dodam, że pet_cmd_handle jako pierwszy parametr przyjmuje ID gracza, a jako drugi typ zwierzątka.

Spędź troche czasu, poczytaj, doucz się troche i bez problemu przeróbki bedziesz czaskać

 

 

Dodałem:

RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
public Odrodzenie(id){
 
if(pet[id] == -1){
 
 pet_cmd_handle(id, pettype[id])
	
	}	
}
public pet_zapisz(id)
{

	get_user_name(id, name, 31)
	new vaultkey[64],vaultdata[128];
	formatex(vaultkey, 63,"pet_%s", name);
		
	formatex(vaultdata, 127,"%d", pettype[id]);
	nvault_set(vault,vaultkey,vaultdata);
	
	log_amx("zapisz_pet: %s",vaultdata);
	
}


public pet_zaladuj(id)
{
	get_user_name(id, name, 31)
	new vaultkey[64], vaultdata[128]
	formatex(vaultkey, 63, "pet_%s", name);
	

	if(nvault_get(vault,vaultkey,vaultdata,127)){
	new skingracza[16];
	
	parse(vaultdata, skingracza, 15);
	
	pettype[id] = str_to_num(skingracza);
	
	log_amx("zaladuj_pet: %s",vaultdata);
	
	}
	return PLUGIN_CONTINUE;
}

Wszystko ładnie, działa w konsoli normalnie mam numer danego zwierza, tylko jak wchodze na serwer to nie daje mi go :/


Użytkownik Black004 edytował ten post 18.05.2019 14:31

  • +
  • -
  • 0

#14 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 18.05.2019 14:35

Zrób sobie funkcję tworzącą zwierze, czyli z tego:

                        pet[id] = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
                        set_pev(pet[id],pev_classname,"GHW_Pet")
                        pettype[id] = num
                        engfunc(EngFunc_SetModel,pet[id],pet_models[pettype[id]])
                        new Float:origin[3]
                        pev(id,pev_origin,origin)
                        if(is_user_crouching(id)) origin[2] -= pet_minus_z_crouching[pettype[id]]
                        else origin[2] -= pet_minus_z_standing[pettype[id]]
                        set_pev(pet[id],pev_origin,origin)
                        set_pev(pet[id],pev_solid,SOLID_NOT)
                        set_pev(pet[id],pev_movetype,MOVETYPE_FLY)
                        set_pev(pet[id],pev_owner,33)
                        set_pev(pet[id],pev_nextthink,1.0)
                        set_pev(pet[id],pev_sequence,0)
                        set_pev(pet[id],pev_gaitsequence,0)
                        set_pev(pet[id],pev_framerate,1.0)

Zrób funkcję przyjmującą id gracza oraz numer (num) zwierzaka.

 

Potem jak zrobisz już tą funkcję to zamiast wywoływać pet_cmd_handle w Ham_Spawn wywołaj sobie nowo utworzoną funkcję. na przykład

CreatePet(id, pettype[id]);

No i jak zrobisz sobie tą funkcję to możesz zmienić sobie tez ten kod, który tworzy entity z pet_cmd_handle, żeby nie dublować kodu. A w miejsce kodu, który usuniesz  dodasz sobie wywołanie swojej funkcji z odpowiednimi parametrami ;)

 

Dasz rade ;)


Użytkownik TibacK edytował ten post 18.05.2019 14:36

  • +
  • -
  • 0

#15 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

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

Napisano 18.05.2019 14:51

hah Ty mówisz, tak to spokojnie, że tu trzeba zrobić to, a tu to, a tak na prawdę to zatrzymałem się na tym :^D :

public CreatePet(id,num)
{
	if(pet[id])
	{
		handle_DeathMsg(id)
		//client_print(id,print_chat,"[AMXX] %L",id,"MSG_NOGIVEPET_HAVE")
	}
	else if(!is_user_alive(id))
	{
		client_print(id,print_chat,"[AMXX] %L",id,"MSG_NOGIVEPET_DEAD")
	}
	else
	{
		{
			pet[id] = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
			set_pev(pet[id],pev_classname,"GHW_Pet")
			pettype[id] = num
			engfunc(EngFunc_SetModel,pet[id],pet_models[pettype[id]])
			new Float:origin[3]
			pev(id,pev_origin,origin)
			if(is_user_crouching(id)) origin[2] -= pet_minus_z_crouching[pettype[id]]
			else origin[2] -= pet_minus_z_standing[pettype[id]]
			set_pev(pet[id],pev_origin,origin)
			set_pev(pet[id],pev_solid,SOLID_NOT)
			set_pev(pet[id],pev_movetype,MOVETYPE_FLY)
			set_pev(pet[id],pev_owner,33)
			set_pev(pet[id],pev_nextthink,1.0)
			set_pev(pet[id],pev_sequence,0)
			set_pev(pet[id],pev_gaitsequence,0)
			set_pev(pet[id],pev_framerate,1.0)
		}
	}
}

Czyli zmienieniu nazwy publicu, nie wiem kompletnie co mam usunąć, a co dodać.  :facepalm2:


  • +
  • -
  • 0

#16 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 18.05.2019 15:17

kod w załączniku, tak to mniej więcej ma wyglądać (zapis nie poprawiany).

zmienna pet2 jest bez sensu, nie wiem co ona ma sugerować.

 

Tu się moja pomoc kończy, wcześniej wszystko wyjaśnione jak na tacy. Teraz tylko zostało Ci się nauczyć podstaw i samemu zrealizować reszte.

Załączone pliki


  • +
  • -
  • 0

#17 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

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

Napisano 18.05.2019 15:28

kod w załączniku, tak to mniej więcej ma wyglądać (zapis nie poprawiany).

zmienna pet2 jest bez sensu, nie wiem co ona ma sugerować.

 

Tu się moja pomoc kończy, wcześniej wszystko wyjaśnione jak na tacy. Teraz tylko zostało Ci się nauczyć podstaw i samemu zrealizować reszte.

 

Dzięki! Poradziłem sobię z resztą tylko jest kłopot bo on się, co runde respi (ten zwierzak), a dokładniej co kazde moje odrodzenie się jest nowy, jak to można zablokować?


  • +
  • -
  • 0

#18 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

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

Napisano 18.05.2019 17:17

Dałem sobie rade, jeszcze raz dzięki. Można zamknąć.


  • +
  • -
  • 0

#19 Black004

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 14
Początkujący

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

Napisano 18.05.2019 18:42

Kurde, jednak nie można zamknąć, nadal od czasu do czasu te zwierzęta nie znikają i jest ich coraz wiecej na mapie.


  • +
  • -
  • 0

#20 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 18.05.2019 18:53

A tworzysz je tylko raz?

A usuwasz je przy zmianie zwierzaka?


  • +
  • -
  • 0




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

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