PoA_PRC8/_module/nss/livingstatue37.nss

73 lines
3.3 KiB
Plaintext
Raw Permalink Normal View History

2022-10-07 14:20:31 -04:00
#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);
}
}
}