I have a similar sort of thing happening for the next version of BadNews.
This bit is in MutatorTakeDamage, and causes InstigatedBy to find a new enemy, and
also sets the new enemy's Enemy to be the InstigatedBy pawn.
This gets called if the Victim is about to die...
Code: Select all
if (InstigatedBy.IsA('ScriptedPawn'))
{
if (Victim.bIsPlayer) Victim.PlayerReplicationInfo.Deaths += 1;
foreach RadiusActors(class'Pawn', aVictim, attackRadius, InstigatedBy.Location)
{
if ((!aVictim.isA('PlayerPawn')) && (aVictim != Victim) && (aVictim.Health > 0)
&& (InstigatedBy.Enemy != aVictim)&& (InstigatedBy != aVictim))
{
racnt++;
InstigatedBy.Enemy = aVictim;
if (aVictim.bIsPlayer) aVictim.Enemy = InstigatedBy;
else if (ScriptedPawn(aVictim) != None)
{
ScriptedPawn(aVictim).OldEnemy = aVictim.Enemy;
aVictim.Enemy = InstigatedBy;
ScriptedPawn(aVictim).Hated = InstigatedBy;
if (ScriptedPawn(aVictim).SetEnemy(InstigatedBy)) { ScriptedPawn(aVictim).GotoState('Attacking'); }
}
if ((ScriptedPawn(InstigatedBy).SetEnemy(aVictim)) || (aVictim.bIsPlayer))
{
if (InstigatedBy.Enemy != None) InstigatedBy.gotostate('Attacking'); else InstigatedBy.gotostate('Wandering');
break;
}
}
}
if (racnt == 0) attackRadius += attackRadius * 0.25; else attackRadius -= attackRadius * 0.25;
FClamp(attackRadius, 20.0, 12000.0);
// log("MTD --> attackRadius: "$attackRadius@" racnt: "$racnt);
}
Been working very well in testing so far, with both bots and scriptedpawns.