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] Problem z resetem questów


Najlepsza odpowiedź BlackPerfum, 04.06.2014 16:58

I ty sie dziwisz że nikt ci nie pomógł. Chcesz pomocy nie skąp kodu. Zamien to:

public cod_class_changed(id, klasa)
{
	if(klasa)	zapisz_aktualny_quest(id,klasa)
	
	
	wczytaj_aktualny_quest(id,cod_get_user_class(id))
}

Na to:

public cod_class_changed(id, StaraKlasa)
{
    if(StaraKlasa)    zapisz_aktualny_quest(id,StaraKlasa)
	
    new Klasa = cod_get_user_class(id)
    if(Klasa)    wczytaj_aktualny_quest(id,Klasa)
}

Bo wczyta także gdy gracz wyjdzie z serwera klase o id = 0  ;)  

 

A nie możesz już wziąć drugi raz tego samego questa bo funkcja zapisz_questa wykonuje się także podczas brania questa. Jak to naprawić?

 

Znajdź funkcję danyquesty_zwrot

public danyquesty_zwrot(id,menu,item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[7],akt,quest
	menu_item_getinfo(menu, item, quest, data, charsmax(data), _, _, akt)
	quest = str_to_num(data)
	akt = floatround(float(quest)/100.0,floatround_floor)
	quest -= akt*100
	
	if(!item)
	{
		OpisQesta(id,NazwyQ[akt][quest],OpisyQ[akt][quest],CeleQ[akt][quest],akt,quest)
		menu_destroy(menu)
		return 0;
	}
	client_print(id,print_chat,"Przyjeles questa: %s | Teraz %s",NazwyQ[akt][quest], CeleQ[akt][quest])
	quest_gracza[id][Quest] = quest;
	quest_gracza[id][Akt] = akt;
	quest_gracza[id][Posiada] = 1;
	zapisz_questa(id,akt,quest) // < --- To usuń lub zakomentuj 
	menu_destroy(menu)
	return 0;
}
Przejdź do postu


  • Zamknięty Temat jest zamknięty
1 odpowiedź w tym temacie

#1 GoldenKill

    Guru

  • Power User

Reputacja: 507
Wszechwiedzący

  • Postów:792
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Trzebnica
Offline

Napisano 01.06.2014 19:43

Witam

 

Mam problem z resetowaniem questów, gdy go zresetujesz już potem nie możesz go wziąć (Zapis Nvault na Klasę)

 

Oto kod na zapis i reset

public cod_class_changed(id, klasa)
{
	if(klasa)	zapisz_aktualny_quest(id,klasa)
	
	
	wczytaj_aktualny_quest(id,cod_get_user_class(id))
}

public zapisz_questa(id,akt,quest){
	new name[64],klasname[32];
	get_user_name(id,name,63)
	cod_get_class_name(cod_get_user_class(id), klasname, 31)
	strtolower(name)
	new key[100];
	formatex(key,99,"questy-%s-%s-%i-%i",klasname,name,akt,quest);
	nvault_set(vault_questy,key,"1");
}

public zapisz_aktualny_quest(id,klasa){
	new name[64],klasname[32];
	get_user_name(id,name,63)
	cod_get_class_name(klasa, klasname, 31)
	strtolower(name)
	new key[100];
	format(key,99,"questy-%s-%s",klasname,name);
	new data[32]
	formatex(data,charsmax(data),"#%i#%d#%d#%i",quest_gracza[id][Akt],quest_gracza[id][Quest],quest_postep[id],quest_gracza[id][Posiada]);
	nvault_set(vault_questy2,key,data);
	quest_gracza[id][Akt] = 0
	quest_gracza[id][Quest] = 0
	quest_postep[id] = 0
	quest_gracza[id][Posiada] = 0
}

public wczytaj_aktualny_quest(id,klasa){
	new name[64],klasname[32];
	get_user_name(id,name,63)
	cod_get_class_name(klasa, klasname, 31)
	strtolower(name)
	new key[100];
	format(key,99,"questy-%s-%s",klasname,name);
	new data[32];
	nvault_get(vault_questy2,key,data,31);
	replace_all(data,31,"#"," ");
	new questt[32],ile[32],akt[10],posiada[10]
	parse(data,akt,9,questt,31,ile,31,posiada,9)
	quest_postep[id] = str_to_num(ile)
	quest_gracza[id][Quest] = str_to_num(questt)
	quest_gracza[id][Akt] = str_to_num(akt)
	quest_gracza[id][Posiada] = str_to_num(posiada)
}

public SprawdzQuesta(id,akt,quest){
	new name[64],klasname[32];
	get_user_name(id,name,63)
	cod_get_class_name(cod_get_user_class(id), klasname, 31)
	strtolower(name)
	new key[64];
	format(key,63,"questy-%s-%s-%i-%i",klasname,name,akt,quest);
	new data[64];
	nvault_get(vault_questy,key,data,63);
	return str_to_num(data);
}

public rq(id)
{
	if(!quest_gracza[id][Posiada])
	{
		client_print(id,print_chat,"Nie wykonujesz aktualnie zadnego questa")
		return 0;
	}
	new menu = menu_create("Chcesz zresetowac questa?","rq_zwrot")
	menu_additem(menu,"Tak")
	menu_additem(menu,"Nie")
	menu_setprop(menu,MPROP_EXIT,MEXIT_ALL)
	menu_setprop(menu,MPROP_EXITNAME,"Wyjscie")
	menu_display(id, menu,0);
	
	return 0;
}

public rq_zwrot(id,menu,item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	if(!item)
	{
		client_print(id,print_chat,"Zresetowales swojego questa")
		quest_gracza[id][Akt] = 0
		quest_gracza[id][Quest] = 0
		quest_gracza[id][Posiada] = 0
	}
	menu_destroy(menu)
	return PLUGIN_HANDLED
} 

  • +
  • -
  • 0

#2 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 04.06.2014 16:58   Najlepsza odpowiedź

I ty sie dziwisz że nikt ci nie pomógł. Chcesz pomocy nie skąp kodu. Zamien to:

public cod_class_changed(id, klasa)
{
	if(klasa)	zapisz_aktualny_quest(id,klasa)
	
	
	wczytaj_aktualny_quest(id,cod_get_user_class(id))
}

Na to:

public cod_class_changed(id, StaraKlasa)
{
    if(StaraKlasa)    zapisz_aktualny_quest(id,StaraKlasa)
	
    new Klasa = cod_get_user_class(id)
    if(Klasa)    wczytaj_aktualny_quest(id,Klasa)
}

Bo wczyta także gdy gracz wyjdzie z serwera klase o id = 0  ;)  

 

A nie możesz już wziąć drugi raz tego samego questa bo funkcja zapisz_questa wykonuje się także podczas brania questa. Jak to naprawić?

 

Znajdź funkcję danyquesty_zwrot

public danyquesty_zwrot(id,menu,item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[7],akt,quest
	menu_item_getinfo(menu, item, quest, data, charsmax(data), _, _, akt)
	quest = str_to_num(data)
	akt = floatround(float(quest)/100.0,floatround_floor)
	quest -= akt*100
	
	if(!item)
	{
		OpisQesta(id,NazwyQ[akt][quest],OpisyQ[akt][quest],CeleQ[akt][quest],akt,quest)
		menu_destroy(menu)
		return 0;
	}
	client_print(id,print_chat,"Przyjeles questa: %s | Teraz %s",NazwyQ[akt][quest], CeleQ[akt][quest])
	quest_gracza[id][Quest] = quest;
	quest_gracza[id][Akt] = akt;
	quest_gracza[id][Posiada] = 1;
	zapisz_questa(id,akt,quest) // < --- To usuń lub zakomentuj 
	menu_destroy(menu)
	return 0;
}

  • +
  • -
  • 2
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika




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

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