Please for the love of god let this be the last time I have to shove even more safeguards in the FlakAccumulator class.

This commit is contained in:
Marisa the Magician 2019-10-03 01:25:31 +02:00
commit 692ba81111

View file

@ -117,23 +117,40 @@ Class FlakAccumulator : Thinker
override void Tick() override void Tick()
{ {
Super.Tick(); Super.Tick();
// so many damn safeguards in this
if ( !victim )
{
Destroy();
return;
}
int gibhealth = victim.GetGibHealth(); int gibhealth = victim.GetGibHealth();
// おまえはもう死んでいる // おまえはもう死んでいる
if ( victim.health-total <= gibhealth ) inflictor.bEXTREMEDEATH = true; if ( victim.health-total <= gibhealth )
{
// safeguard for inflictors that have somehow ceased to exist, which apparently STILL CAN HAPPEN
if ( inflictor ) inflictor.bEXTREMEDEATH = true;
else type = 'Extreme';
}
// make sure accumulation isn't reentrant
if ( inflictor && (inflictor is 'FlakChunk') ) inflictor.bAMBUSH = true;
// 何? // 何?
inflictor.bAMBUSH = true;
for ( int i=0; i<amounts.Size(); i++ ) for ( int i=0; i<amounts.Size(); i++ )
{ {
if ( !victim ) break; if ( !victim ) break;
victim.DamageMobj(inflictor,source,amounts[i],type,DMG_THRUSTLESS); victim.DamageMobj(inflictor,source,amounts[i],type,DMG_THRUSTLESS);
} }
inflictor.bAMBUSH = false; // clean up
inflictor.bEXTREMEDEATH = false; if ( inflictor )
{
if ( inflictor is 'FlakChunk' ) inflictor.bAMBUSH = false;
inflictor.bEXTREMEDEATH = false;
}
Destroy(); Destroy();
} }
static void Accumulate( Actor victim, int amount, Actor inflictor, Actor source, Name type ) static void Accumulate( Actor victim, int amount, Actor inflictor, Actor source, Name type )
{ {
if ( !victim ) return;
let ti = ThinkerIterator.Create("FlakAccumulator",STAT_USER); let ti = ThinkerIterator.Create("FlakAccumulator",STAT_USER);
FlakAccumulator a, match = null; FlakAccumulator a, match = null;
while ( a = FlakAccumulator(ti.Next()) ) while ( a = FlakAccumulator(ti.Next()) )