NWScript:
#include "NW_I0_GENERIC"
void main()
{
object oPC = GetMaster (OBJECT_SELF);
object oParty = GetFirstFactionMember (oPC, TRUE);
while (GetIsObjectValid (oParty))
{
int HPMax = GetMaxHitPoints (oParty);
int HPCurrent = GetCurrentHitPoints (oParty);
if(HPCurrent < ((HPMax/4)*3))
{
if (GetHasSpell (SPELL_HEAL, OBJECT_SELF))
{
ActionCastSpellAtObject (SPELL_HEAL, oParty, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE);
return;
}
if (GetHasSpell (SPELL_CURE_CRITICAL_WOUNDS, OBJECT_SELF))
{
ActionCastSpellAtObject (SPELL_CURE_CRITICAL_WOUNDS, oParty, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE);
return;
}
if (GetHasSpell (SPELL_CURE_SERIOUS_WOUNDS, OBJECT_SELF))
{
ActionCastSpellAtObject (SPELL_CURE_SERIOUS_WOUNDS, oParty, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE);
return;
}
if (GetHasSpell (SPELL_CURE_MODERATE_WOUNDS, OBJECT_SELF))
{
ActionCastSpellAtObject (SPELL_CURE_MODERATE_WOUNDS, oParty, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE);
return;
}
if (GetHasSpell (SPELL_CURE_LIGHT_WOUNDS, OBJECT_SELF))
{
ActionCastSpellAtObject (SPELL_CURE_LIGHT_WOUNDS, oParty, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE);
return;
}
}
oParty = GetNextFactionMember (oPC, TRUE);
}
object oHench = GetFirstFactionMember (oPC, FALSE);
while (GetIsObjectValid (oHench))
{
int HPMax = GetMaxHitPoints (oHench);
int HPCurrent = GetCurrentHitPoints (oHench);
if(HPCurrent < ((HPMax/4)*3))
{
if (GetHasSpell (SPELL_HEAL, OBJECT_SELF))
{
ActionCastSpellAtObject (SPELL_HEAL, oHench, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE);
return;
}
if (GetHasSpell (SPELL_CURE_CRITICAL_WOUNDS, OBJECT_SELF))
{
ActionCastSpellAtObject (SPELL_CURE_CRITICAL_WOUNDS, oHench, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE);
return;
}
if (GetHasSpell (SPELL_CURE_SERIOUS_WOUNDS, OBJECT_SELF))
{
ActionCastSpellAtObject (SPELL_CURE_SERIOUS_WOUNDS, oHench, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE);
return;
}
if (GetHasSpell (SPELL_CURE_MODERATE_WOUNDS, OBJECT_SELF))
{
ActionCastSpellAtObject (SPELL_CURE_MODERATE_WOUNDS, oHench, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE);
return;
}
if (GetHasSpell (SPELL_CURE_LIGHT_WOUNDS, OBJECT_SELF))
{
ActionCastSpellAtObject (SPELL_CURE_LIGHT_WOUNDS, oHench, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, FALSE);
return;
}
}
oHench = GetNextFactionMember (oPC, FALSE);
}
if(!GetAssociateState (NW_ASC_IS_BUSY))
{
object oMaster = GetMaster();
object oTrap = GetNearestTrapToObject();
if(GetIsObjectValid(oTrap) && GetDistanceToObject (oTrap) < 15.0 && GetDistanceToObject (oTrap) > 0.0)
{
object oTrapSaved = GetLocalObject(OBJECT_SELF, "NW_ASSOCIATES_LAST_TRAP");
int nTrapDC = GetTrapDisarmDC (oTrap);
int nSkill = GetSkillRank(SKILL_DISABLE_TRAP);
nSkill = nSkill + 20 - nTrapDC;
if(nSkill > 0 && GetSkillRank(SKILL_DISABLE_TRAP) > 0)
{
if( GetIsObjectValid (oMaster)
&& nSkill > 0
&& !IsInConversation (OBJECT_SELF)
&& !GetIsInCombat()
&& GetCurrentAction (OBJECT_SELF) != ACTION_REST
&& GetCurrentAction (OBJECT_SELF) != ACTION_DISABLETRAP)
{
ClearAllActions();
ActionUseSkill (SKILL_DISABLE_TRAP, oTrap);
ActionDoCommand (SetCommandable(TRUE));
ActionDoCommand (PlayVoiceChat (VOICE_CHAT_TASKCOMPLETE));
SetCommandable(FALSE);
return;
}
}
else if(oTrap != oTrapSaved && GetSkillRank (SKILL_DISABLE_TRAP) > 0)
{
PlayVoiceChat (VOICE_CHAT_CANTDO);
SetLocalObject (OBJECT_SELF, "NW_ASSOCIATES_LAST_TRAP", oTrap);
}
}
if(GetIsObjectValid (oMaster) &&
GetCurrentAction (OBJECT_SELF) != ACTION_FOLLOW &&
GetCurrentAction (OBJECT_SELF) != ACTION_DISABLETRAP &&
GetCurrentAction (OBJECT_SELF) != ACTION_OPENLOCK &&
GetCurrentAction (OBJECT_SELF) != ACTION_REST &&
GetCurrentAction (OBJECT_SELF) != ACTION_ATTACKOBJECT)
{
if(
!GetIsObjectValid (GetAttackTarget()) &&
!GetIsObjectValid (GetAttemptedSpellTarget()) &&
!GetIsObjectValid (GetAttemptedAttackTarget()) &&
!GetIsObjectValid (GetNearestCreature (CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN))
)
{
if (GetDistanceToObject (GetMaster()) > 6.0)
{
if(GetAssociateState (NW_ASC_HAVE_MASTER))
{
if(!GetIsFighting (OBJECT_SELF))
{
if(!GetAssociateState (NW_ASC_MODE_STAND_GROUND))
{
if(GetDistanceToObject (GetMaster()) > GetFollowDistance())
{
ClearAllActions();
if(GetAssociateState (NW_ASC_AGGRESSIVE_STEALTH) || GetAssociateState (NW_ASC_AGGRESSIVE_SEARCH))
{
if (GetAssociateState(NW_ASC_AGGRESSIVE_STEALTH))
{
}
if(GetAssociateState (NW_ASC_AGGRESSIVE_SEARCH))
{
ActionUseSkill (SKILL_SEARCH, OBJECT_SELF);
}
MyPrintString("GENERIC SCRIPT DEBUG STRING ********** " + "Assigning Force Follow Command with Search and/or Stealth");
ActionForceFollowObject (oMaster, GetFollowDistance());
}
else
{
MyPrintString ("GENERIC SCRIPT DEBUG STRING ********** " + "Assigning Force Follow Normal");
ActionForceFollowObject (oMaster, GetFollowDistance());
}
}
}
}
}
}
else if(!GetAssociateState (NW_ASC_MODE_STAND_GROUND))
{
if(GetIsObjectValid (oMaster))
{
if(GetCurrentAction (oMaster) != ACTION_REST)
{
ClearAllActions();
if(GetAssociateState (NW_ASC_AGGRESSIVE_STEALTH) || GetAssociateState (NW_ASC_AGGRESSIVE_SEARCH))
{
if(GetAssociateState (NW_ASC_AGGRESSIVE_STEALTH))
{
}
if(GetAssociateState (NW_ASC_AGGRESSIVE_SEARCH))
{
ActionUseSkill (SKILL_SEARCH, OBJECT_SELF);
}
MyPrintString ("GENERIC SCRIPT DEBUG STRING ********** " + "Assigning Force Follow Command with Search and/or Stealth");
ActionForceFollowObject (oMaster, GetFollowDistance());
}
else
{
MyPrintString ("GENERIC SCRIPT DEBUG STRING ********** " + "Assigning Force Follow Normal");
ActionForceFollowObject (oMaster, GetFollowDistance());
}
}
}
}
}
else if(!GetIsObjectValid (GetAttackTarget()) &&
!GetIsObjectValid (GetAttemptedSpellTarget()) &&
!GetIsObjectValid (GetAttemptedAttackTarget()) &&
!GetAssociateState (NW_ASC_MODE_STAND_GROUND))
{
}
}
if(GetSpawnInCondition (NW_FLAG_HEARTBEAT_EVENT))
{
SignalEvent (OBJECT_SELF, EventUserDefined(1001));
}
}
}