B_CombatReactToDamage.d
func void B_CombatReactToDamage ()
{
miecz();
PrintDebugNpc (PD_ZS_FRAME, "B_CombatReactToDamage" );
PrintGlobals (PD_ZS_CHECK);
if (Npc_IsPlayer(other) &&((self.npctype==NPCTYPE_FRIEND)||(Npc_GetPermAttitude(self,other)==ATT_FRIENDLY)))
{
return;
};
if (Npc_IsInFightMode(other,FMODE_FAR) || Npc_IsInFightMode(other,FMODE_MAGIC))
{
self.aivar[AIV_LASTHITBYRANGEDWEAPON] = TRUE;
}
else
{
self.aivar[AIV_LASTHITBYRANGEDWEAPON] = FALSE;
};
if ( Npc_IsPlayer( other ) )
{
Npc_SetTempAttitude (self, ATT_HOSTILE);
if ( (Npc_GetAttitude( self, other ) == ATT_HOSTILE) || (Npc_GetAttitude( self, other ) == ATT_ANGRY) )
{
Npc_SetTarget (self, other);
};
};
if (self.aivar[AIV_SPECIALCOMBATDAMAGEREACTION])
{
B_SpecialCombatDamageReaction();
};
};
ZS_ReactToDamage.d
func void ZS_ReactToDamage ()
{
miecz();
PrintDebugNpc (PD_ZS_FRAME, "ZS_ReactToDamage" );
PrintGlobals (PD_ZS_CHECK);
C_ZSInit();
Npc_PercEnable (self, PERC_ASSESSMAGIC , B_AssessMagic );
Npc_PercEnable (self, PERC_ASSESSMURDER , B_CombatAssessMurder );
Npc_PercEnable (self, PERC_ASSESSDEFEAT , B_CombatAssessDefeat );
B_WhirlAround (self, other);
if (self.aivar[AIV_SPECIALCOMBATDAMAGEREACTION])
{
B_SpecialCombatDamageReaction();
};
if (Npc_IsInFightMode(other,FMODE_FAR) || Npc_IsInFightMode(other,FMODE_MAGIC))
{
self.aivar[AIV_LASTHITBYRANGEDWEAPON] = TRUE;
}
else
{
self.aivar[AIV_LASTHITBYRANGEDWEAPON] = FALSE;
};
if (!C_NpcIsMonster(other))
{
if (Npc_IsPlayer(other))
{
self.aivar[AIV_BEENATTACKED] = 1;
if ((Npc_GetTempAttitude(self,other)==ATT_FRIENDLY) || (self.npctype==NPCTYPE_FRIEND))
{
PrintDebugNpc (PD_ZS_CHECK, "...NSC FRIENDLY zum Angreifer");
C_LookAtNpc (self, other);
B_Say (self, other, "WHATAREYOUDOING");
Npc_SetTempAttitude (self, ATT_ANGRY);
AI_ContinueRoutine (self);
return;
}
else
{
PrintDebugNpc (PD_ZS_CHECK, "...NSC nicht FRIENDLY zum Angreifer!");
if (Npc_GetPermAttitude(self,other) != ATT_HOSTILE)
{
Npc_SetPermAttitude (self, ATT_ANGRY);
};
Npc_SetTempAttitude (self, ATT_HOSTILE);
};
};
AI_StartState (self, ZS_AssessEnemy, 0, "" );
}
else
{
AI_StartState (self, ZS_AssessMonster, 0, "" );
};
};
B_Orc_AssessDamage.d
func void B_Orc_AssessDamage()
{
miecz();
PrintDebugNpc( PD_ORC_FRAME, "B_Orc_AssessDamage" );
AI_TurnToNpc( self, other );
//wenn Gegner weit weg, hinspringen!
if ( Npc_GetDistToNpc( self, other ) > 500 )
{
PrintDebugNpc( PD_ORC_FRAME, "B_Orc_AssessDamage: Gegner weit weg -> hinspringen" );
AI_PlayAni( self, "T_STAND_2_JUMP" );
};
B_FullStop (self);
Npc_SendPassivePerc (self, PERC_ASSESSWARN, self, other);
Npc_SetTempAttitude (self, ATT_HOSTILE );
Npc_SetTarget (self, other);
AI_StartState (self, ZS_Orc_Attack, 0, "" );
};