[RELEASE][ZEHPLUSPLUS][BUGFIX] OX-Event

05/27/2015 23:16 Yiv#1
Liebe Community,

ich release hier einen Fix für 'nen Bug im OX-Event, der es Spielern möglich macht, sich direkt nach dem teleportieren auszuloggen und sich dann nach auflösen einer Frage wieder an der gleichen Position einzuloggen und, trotz Logout, weiter am OX-Event teilzunehmen.

Code:
bool COXEventManager::EnterAttender(LPCHARACTER pkChar)
{
	// [...]
	if (GetStatus() != OXEVENT_OPEN)
	{
		sys_err("cannot join ox %u %s (oxevent is not open)", pkChar->GetPlayerID(), pkChar->GetName());
		return false;
	}
	// [...]
}
[Only registered and activated users can see links. Click Here To Register...]


MfG
05/27/2015 23:16 rollback#2
Schönes Ding, finde es gut, dass in letzter Zeit so viele Sicherheitsfixxes releast werden.
05/27/2015 23:16 Poccix#3
Hat der echt den Mist als Beschreibung genommen - ich packs nichtmehr :D
Hilft auf jeden Fall bei diesem Problem!
Klein aber Fein ;) Manchmal muss es nicht viel sein ! :)
05/27/2015 23:16 DasSchwarzeT#4
Gallery
Superduper Release
05/27/2015 23:17 .Kyomata#5
Nicht übel, super Arbeit!
05/27/2015 23:20 [-Lee-]#6
Da ist man mal 10min nicht im TS und schon fangen sie wieder an Drogen zu nehmen.. unerhört

Wundert mich, dass es bis heute keinem aufgefallen ist
05/27/2015 23:45 LxR'EsoZiaL#7
Sowas passiert wenn Kiddy Youtube auf Kiddy Mt2 knallt.
05/28/2015 00:22 Mijago#8
Der Bug passiert doch eh nur, wenn die OX-Quest fehlerhaft geschrieben ist, oder nicht? Wenn man es korrekt schreibt ( event status > 0 und != errorNum, erst dann enter), sollte doch nichts passieren.
05/28/2015 00:35 Lefloyd#9
Angenommen jemand loggt während eine Frage kommt aus und nach der Frage wieder ein, dann wäre er immernoch im OX egal wo er gestanden ist (vorausgesetzt dass er an exakt der Stelle wo er hingeportet wurde stehen bleibt). So könnte man sich durchs OX-Event durchbuggen.

Lefloyd
05/28/2015 00:41 Mijago#10
Aber das OX steht auf CLOSED, wenn eine Frage gestellt wurde.
OPEN ist nur, wenn man beitreten kann :D

Siehe Zeile 232:
Code:
			COXEventManager::instance().SetStatus(OXEVENT_CLOSE);
05/28/2015 01:00 Yiv#11
Quote:
Originally Posted by Mijago View Post
Aber das OX steht auf CLOSED, wenn eine Frage gestellt wurde.
OPEN ist nur, wenn man beitreten kann :D

Siehe Zeile 232:
Code:
			COXEventManager::instance().SetStatus(OXEVENT_CLOSE);
Code:
bool COXEventManager::Enter(LPCHARACTER pkChar)
{
	if (GetStatus() == OXEVENT_FINISH)
	{
		sys_log(0, "OXEVENT : map finished. but char enter. %s", pkChar->GetName());
		return false;
	}

	PIXEL_POSITION pos = pkChar->GetXYZ();

	if (pos.x == 896500 && pos.y == 24600)
	{
		return EnterAttender(pkChar);
	}
	else if (pos.x == 896300 && pos.y == 28900)
	{
		return EnterAudience(pkChar);
	}
	else
	{
		sys_log(0, "OXEVENT : wrong pos enter %d %d", pos.x, pos.y);
		return false;
	}

	return false;
}

bool COXEventManager::EnterAttender(LPCHARACTER pkChar)
{
	DWORD pid = pkChar->GetPlayerID();

	m_map_char.insert(std::make_pair(pid, pid));
	m_map_attender.insert(std::make_pair(pid, pid));

	return true;
}
Standardmäßig ist dort keine Abfrage enthalten, die abfragt, ob der Status OXEVENT_CLOSE oder OXEVENT_OPEN ist :P
05/28/2015 10:02 Mijago#12
Weil sie, wie schon gesagt, unnötig ist :)

Wenn die Quest korrekt geschrieben ist, dann kann man nur bei OPEN eintreten (habe auch schon geschrieben, dass es von der Quest abhängt!).

Zwischen den Fragen ist autom. Close, also sagt die Quest "Nö du kannst nicht beitreten" :D


Und wenn man sich abmeldet und neu anmeldet, greift das else der Abfrage..

Die zusätzliche Abfrage macht nur Sinn, wenn die Person genau an der Enter-Position steht. Das müsste man einfach mal ausprobieren :)

Over 'n out
05/28/2015 10:12 i[Remix]#13
pc.set_warp_location

mfg
05/28/2015 11:19 Yiv#14
Quote:
Originally Posted by Mijago View Post
Weil sie, wie schon gesagt, unnötig ist :)

Wenn die Quest korrekt geschrieben ist, dann kann man nur bei OPEN eintreten (habe auch schon geschrieben, dass es von der Quest abhängt!).

Zwischen den Fragen ist autom. Close, also sagt die Quest "Nö du kannst nicht beitreten" :D


Und wenn man sich abmeldet und neu anmeldet, greift das else der Abfrage..

Die zusätzliche Abfrage macht nur Sinn, wenn die Person genau an der Enter-Position steht. Das müsste man einfach mal ausprobieren :)

Over 'n out
Dann müsste aber immer gewährleistet sein, dass die Quest diese Abfrage enthält. Wenn dies aus irgendeinem Grund nicht der Fall ist, könnte man diesen Bug ausnutzen (und ja, das mit der Startposition ist natürlich richtig, man dürfte sich halt nicht bewegen).

Des Weiteren könnte es ja sein, dass es Leute gibt, die das OX-Event komplett automatisch im Source umsetzen bzw. umgesetzt haben und diese Abfrage, evtl. nicht gemacht haben, weil es normalerweise selbstverständlich ist, dass die in der Funktion stattfindet :)

MfG
05/28/2015 12:40 i[Remix]#15
Quote:
Originally Posted by Yiv View Post
Dann müsste aber immer gewährleistet sein, dass die Quest diese Abfrage enthält.

Des Weiteren könnte es ja sein, dass es Leute gibt, die das OX-Event komplett automatisch im Source umsetzen bzw. umgesetzt haben und diese Abfrage, evtl. nicht gemacht haben, weil es normalerweise selbstverständlich ist, dass die in der Funktion stattfindet :)

MfG
Und bei deiner Methode muss es nicht gewährleistet sein, dass man mit dem Source arbeitet + es einfügt?

Außerdem.. Wer macht den OX komplett im Source?
Ist richtig dumm.