[Hilfe] Debug Assertion Failed!

02/01/2014 10:57 RoFDokers#1
Hey ich hab seit 2-3 Tagen meinen Flyff Server für paar Freudne angemacht und wenn der Server ne Zeit lang läuft "crasht" er also es kommt folgendes fenster auf dem Dektop

[Only registered and activated users can see links. Click Here To Register...]


Die passende Sourcestelle dazu ist das:

Code:
int CMover::CalcDefenseNPC( CMover* pAttacker, DWORD dwAtkFlags )
{
	float	fDefense = 0.0f;
	
	MoverProp* pProp = GetProp();
	if( dwAtkFlags & AF_MAGIC ) 
	{
		fDefense = pProp->dwResisMgic / 7.0f + 1;
	}
	else
	{
		ASSERT( (dwAtkFlags & AF_MELEESKILL) == AF_MELEESKILL );
		fDefense = pProp->dwNaturalArmor / 7.0f + 1;
	}

	return (int)fDefense;
}
Ich weiß nicht mehr weiter egal was ich dann in dem erschienen Fenster drücke crasht mir der Worldserver und es entsteht ein Rollback.
02/01/2014 22:32 SeriouS'#2
Iwelche Ingameaktivitäten beobachtet? Vllt verursacht ja ein bestimmer Spieler diese komischen Crashes, wobei das eher unwahrscheinlich ist.
Naja, bin mal so frei und gebe dir ein test fix (glaube ich weis schon wo der Fehler liegt) hoffe es hilft dir :s
Quote:
int CMover::CalcDefenseNPC( CMover* pAttacker, DWORD dwAtkFlags )
{
float fDefense = 0.0f;

MoverProp* pProp = GetProp();
if( pProp == NULL || pAttacker == NULL )
return FALSE;

if( dwAtkFlags & AF_MAGIC )
{
fDefense = pProp->dwResisMgic / 7.0f + 1;
}
else
{
if( (dwAtkFlags & AF_MELEESKILL) != AF_MELEESKILL )
return FALSE;
//ASSERT( (dwAtkFlags & AF_MELEESKILL) == AF_MELEESKILL ); //ASSERT YO
fDefense = pProp->dwNaturalArmor / 7.0f + 1;
}

return (int)fDefense;
}
Lg SeriouS'
02/02/2014 16:46 Mognakor#3
Einen Assert einfach mal auszukommentieren ist nicht grade die professionelle Art auch wenn du das ganze durch ein return-Statement ersetzt (dass im übrigen eher 0 als false zurückgeben sollte auch wenn es intern gleich gehandhabt wird).

Der Server stürzt sicher nicht einfach so ab sondern es passiert etwas dass nicht passieren sollte, wegen etwas dass in der Source oder Ressource nicht passt, frag mal deine Freunde was sie gerade gemacht haben/wollten als es dazu kam.

Lass dir für den Fall das "dwAtkFlags & AF_MELEESKILL) == AF_MELEESKILL" false ergibt einen Error ausgeben mit Informationen über Attacker und flags dann kannst du den Verursacher weiter eingrenzen.