73 lines
3.3 KiB
Plaintext
73 lines
3.3 KiB
Plaintext
|
#include "NW_I0_GENERIC"
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
if(!GetFleeToExit())
|
||
|
{
|
||
|
if(!GetSpawnInCondition(NW_FLAG_SET_WARNINGS))
|
||
|
{
|
||
|
if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget()))
|
||
|
{
|
||
|
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL))
|
||
|
{
|
||
|
DetermineSpecialBehavior(GetLastDamager());
|
||
|
}
|
||
|
|
||
|
else if(GetIsObjectValid(GetLastDamager()))
|
||
|
{
|
||
|
DetermineCombatRound();
|
||
|
if(!GetIsFighting(OBJECT_SELF))
|
||
|
{
|
||
|
object oTarget = GetLastDamager();
|
||
|
if(!GetObjectSeen(oTarget) && GetArea(OBJECT_SELF) == GetArea(oTarget))
|
||
|
{
|
||
|
ActionMoveToLocation(GetLocation(oTarget), TRUE);
|
||
|
ActionDoCommand(DetermineCombatRound());
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else if (!GetIsObjectValid(GetAttemptedSpellTarget()))
|
||
|
{
|
||
|
object oTarget = GetAttackTarget();
|
||
|
if(!GetIsObjectValid(oTarget))
|
||
|
{
|
||
|
|
||
|
oTarget = GetAttemptedAttackTarget();
|
||
|
}
|
||
|
object oAttacker = GetLastHostileActor();
|
||
|
if (GetIsObjectValid(oAttacker) && oTarget != oAttacker && GetIsEnemy(oAttacker) &&
|
||
|
(GetTotalDamageDealt() > (GetMaxHitPoints(OBJECT_SELF) / 4) ||
|
||
|
(GetHitDice(oAttacker) - 2) > GetHitDice(oTarget) ) )
|
||
|
{
|
||
|
DetermineCombatRound(oAttacker);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
if(GetSpawnInCondition(NW_FLAG_DAMAGED_EVENT))
|
||
|
{
|
||
|
SignalEvent(OBJECT_SELF, EventUserDefined(1006));
|
||
|
}
|
||
|
//Check to see if weapon type is valid: not ranged, or too far away.
|
||
|
object oAttacker = GetLastDamager();
|
||
|
object oWeapon = GetLastWeaponUsed(oAttacker);
|
||
|
if (GetTag(oWeapon) == "DancingBlade"){return;}
|
||
|
if (GetWeaponRanged(oWeapon) == TRUE ||
|
||
|
|
||
|
GetAbilityModifier(ABILITY_STRENGTH, oAttacker) + d20(1) > 26 ||
|
||
|
GetDistanceToObject(oAttacker) > 5.0)
|
||
|
return;
|
||
|
else if (oWeapon != OBJECT_INVALID)
|
||
|
{
|
||
|
SpeakString("Your weapon has been absorbed into the Living Statue!");
|
||
|
DestroyObject(oWeapon); // after script is done.
|
||
|
if (GetItemPossessedBy(OBJECT_SELF, GetTag(oWeapon)) == OBJECT_INVALID){
|
||
|
CopyObject(oWeapon,GetLocation(OBJECT_SELF),OBJECT_SELF);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|