Jump to content

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

Posted Image Posted Image

Guest Message by DevFuse
 

Photo

[ROZWIĄZANE] Problem z resetem questów


Best Answer 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;
}
Go to the full post


  • This topic is locked This topic is locked
1 reply to this topic

#1 GoldenKill

    Guru

  • Power User

Reputacja: 507
Wszechwiedzący

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

Posted 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

Posted 04.06.2014 16:58   Best Answer

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




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users