Register for your free account! | Forgot your password?

You last visited: Today at 12:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[c++] Timer Bugfix

Discussion on [c++] Timer Bugfix within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.

Reply
 
Old   #1
 
elite*gold: 26
Join Date: Oct 2011
Posts: 1,262
Received Thanks: 1,062
[c++] Timer Bugfix

Viele von euch haben sich ja sicher schon gefragt, wieso man in einem timer questblock keinen weiteren timer starten kann, der den selben Namen trägt.

Bevor wir zum fix kommen sollten wir uns erst mal anschauen, wieso der Fehler überhaupt auftritt...

1) Ihr startet in eurer Quest einen timer.
2) Dies erstellt ein neues timer event. (questevent.cpp//quest_timer_event), welches eurem charakter zugeordnet wird. q.GetCurrentPC()->AddTimer
3) Wenn der timer "fällig" wird, wird der "when [...].timer" block in der quest ausgeführt.
4) In unserer quest versuchen wir, einen timer mit dem selben namen neu zu erstellen
5) Dies führt wieder q.GetCurrentPC()->AddTimer([...], quest_create_timer_event(...), [...]) aus
6) In AddTimer, wird bevor ein neuer timer hinzugefügt wird, der alte gecancelt (falls einer existent sein sollte)
7) Im CancelTimerEvent wird zum einen das event gecancelt, als auch quest_event_info::name gelöscht.
8) Der neue Timer, der in unserer quest im timer block erstellt wurde ist aktiv. (siehe sylog: QUEST add timer 0x3581e140 1)
9) Da unser "when [...].timer" block erfolgreich ausgeführt wurde, wird versucht, den timer in der EVENTFUNC aufzuräumen.
10) Timer versucht, auf quest_event_info::name zuzugreifen, um sich damit zu löschen. (RemoveTimerNotCancel(info->name))
11) Check, ob quest_event_info::name NULL ist, fehlt -> Server crasht.

Fix:
Code:
EVENTFUNC(quest_timer_event)
{
	quest_event_info * info = dynamic_cast<quest_event_info *>( event->info );
	if (info == NULL)
	{
		sys_err( "quest_timer_event> <Factor> Null pointer" );
		return 0;
	}

	CQuestManager & q = CQuestManager::instance();

	if (CHARACTER_MANAGER::instance().FindByPID(info->player_id))
	{
		if (!CQuestManager::instance().Timer(info->player_id, info->npc_id))
			return (passes_per_sec / 2 + 1);

		if (info->time_cycle != 0)
			return info->time_cycle;
	}

	if (info->name != NULL)
	{
		PC * pPC = q.GetPC(info->player_id);
		if (pPC)
			pPC->RemoveTimerNotCancel(info->name);
		else
			sys_err("quest::PC pointer null. player_id: %u", info->player_id);

		M2_DELETE_ARRAY(info->name);
		info->name = NULL;
	}
	return 0;
}
Beispiel zum Crash:

Code:
quest crash_test begin
	state start begin
		when login begin
			timer("test", 2)
			syschat("timer läuft.")
		end
		when test.timer begin
			syschat("timer ausgeführt.")
			cleartimer("test")
			timer("test", 2)
			syschat("timer läuft wieder.")
		end
	end
end
Fix ist experimentell+untested.
He3o Crysis is offline  
Thanks
10 Users
Old 08/21/2017, 16:20   #2
 
Gl0bal's Avatar
 
elite*gold: 8
Join Date: Oct 2010
Posts: 564
Received Thanks: 906
Nice Release Thanks Izz da.
Wird man hoffentlich auch auf deinem neuen Server sehen

MfG Gl0bal
Gl0bal is offline  
Thanks
1 User
Old 08/22/2017, 17:38   #3
 
elite*gold: 0
Join Date: Dec 2011
Posts: 11
Received Thanks: 0
So sweet :3
TY
VIPDANGER is offline  
Old 09/25/2017, 14:31   #4
 
elite*gold: 150
Join Date: Feb 2009
Posts: 643
Received Thanks: 613
Bug getestet. Bug gefixxt.

Dankeschön!

MfG
Cyber
Cyber36 is offline  
Old 09/25/2017, 19:21   #5
 
HKwork's Avatar
 
elite*gold: 0
Join Date: Sep 2017
Posts: 10
Received Thanks: 0
Thank, nice work.
HKwork is offline  
Old 10/02/2017, 12:27   #6
 
'Crusher's Avatar
 
elite*gold: 8
Join Date: Mar 2015
Posts: 1,176
Received Thanks: 355
Nice Release, Danke.
'Crusher is offline  
Reply


Similar Threads Similar Threads
Job Timer (Taxi Timer, etc)
09/01/2011 - SRO Hacks, Bots, Cheats & Exploits - 2 Replies
A small utility to keep track of jobs that need timing. http://img834.imageshack.us/img834/6076/jt01.png Always read the changelog! To get access to Job Timer, register at "www.error- soft.net" ( without the spaces between the - ) Press thanks if this helps at all.
Wartungsarbeiten + Bugfix 29.07.08
07/30/2008 - Metin2 - 29 Replies
Metin2 Forum | News - Game | Wartungsarbeiten + Bugfix 29.07.08 was sagt ihr dazu -.-'



All times are GMT +1. The time now is 12:40.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.