PoA_PRC8/_module/nss/x2_def_heartbeat.nss
Jaysyn904 c929e2ff75 Made sure Halloween skeletons are equipping their weapon
Made sure Halloween skeletons are equipping their weapon.  Cleaned extra script calls in NPC AI.  Full compile.  Updated release archive.
2024-10-28 16:42:06 -04:00

180 lines
5.2 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name x2_def_heartbeat
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Default Heartbeat script
*/
//:://////////////////////////////////////////////
//:: Created By: Keith Warner
//:: Created On: June 11/03
//:://////////////////////////////////////////////
#include "prc_inc_spells"
/*
Swarm, Berzerker Wasp: 10 HD ar_berzwasp001
Swarm, Berzerker Wasp: 14 HD ar_berzwasp002
Swarm, Locust: 08 HD ds_locustswarm01
Swarm, Mini Kank: 04 HD ds_minkankswrm01
Swarm, Reptilian Bat: 04 HD ds_repbatswrm001
*/
void FollowTarget(string sTargetTag, float fDistance);
void FollowTarget(string sTargetTag, float fDistance)
{
object oTarget = GetObjectByTag(sTargetTag);
if (GetIsObjectValid(oTarget))
{
vector vTargetPosition = GetPosition(oTarget);
vector vCurrentPosition = GetPosition(OBJECT_SELF);
float fDistanceToTarget = VectorMagnitude(vTargetPosition - vCurrentPosition);
// Move to the target if the distance is greater than the desired follow distance
if (fDistanceToTarget > fDistance)
{
AssignCommand(OBJECT_SELF, ActionMoveToObject(oTarget, TRUE, fDistance));
}
}
}
void main()
{
//:: Declare major variables
object oNPC = OBJECT_SELF;
object oArea = GetArea(oNPC);
string sResRef = GetResRef(oNPC);
string sAreaResRef = GetResRef(oArea);
int nTrampleScore = (GetLocalInt(oNPC, "TRAMPLER") + GetHasFeat(FEAT_CENTAUR_TRAMPLE, oNPC));
int nChargeScore = (GetLocalInt(oNPC, "CHARGER") +
GetHasFeat(FEAT_MINOTAUR_CHARGE, oNPC) +
GetHasFeat(FEAT_ACROBATIC_CHARGE, oNPC) +
GetHasFeat(FEAT_SHIELD_CHARGE ,oNPC) +
GetHasFeat(FEAT_POWERFUL_CHARGE, oNPC) +
GetHasFeat(FEAT_GREATER_POWERFUL_CHARGE, oNPC) +
GetHasFeat(FEAT_RHINO_TRIBE_CHARGE, oNPC) +
GetHasFeat(FEAT_FURIOUS_CHARGE, oNPC) +
GetHasFeat(FEAT_RECKLESS_CHARGE, oNPC) +
GetHasFeat(FEAT_COBALT_CHARGE, oNPC));
int nBullRushScore = (GetLocalInt(oNPC, "BULLRUSHER") +
GetHasFeat(FEAT_IMPROVED_BULLRUSH, oNPC) +
GetHasFeat(FEAT_RAMPAGING_BULL_RUSH, oNPC) +
GetHasFeat(5241, oNPC) + //:: Expert Bull Rush
GetHasFeat(5247, oNPC)); //:: Superior Bull Rush
int iAwesomeBlow = GetHasFeat(FEAT_AWESOME_BLOW, oNPC);
int iOverrun = GetHasFeat(FEAT_IMPROVED_OVERRUN, oNPC);
//:: Run Various Combat Maneuver Heartbeats
if(iOverrun)
{
if (GetLocalInt(oNPC, "OverrrunCooldown") != 1)
{
if(DEBUG) DoDebug( "x2_def_heartbeat: Creature w/ Overrun Detected");
DelayCommand(0.0f, ExecuteScript("overrunner_hb", oNPC));
}
else
if(DEBUG) DoDebug("x2_def_heartbeat: Overrun is on cooldown.");
}
if(iAwesomeBlow)
{
if (GetLocalInt(oNPC, "AwesomeBlowCooldown") != 1)
{
if(DEBUG) DoDebug("x2_def_heartbeat: Creature w/ Awesome Blow Detected");
DelayCommand(0.0f, ExecuteScript("awesomeblow_hb", oNPC));
}
else
if(DEBUG) DoDebug("x2_def_heartbeat: Awesome Blow is on cooldown.");
}
if(nTrampleScore)
{
if (GetLocalInt(oNPC, "TrampleCooldown") != 1)
{
if(DEBUG) DoDebug("x2_def_heartbeat: Trampler Detected");
DelayCommand(0.0f, ExecuteScript("trampler_hb", oNPC));
}
else
if(DEBUG) DoDebug("x2_def_heartbeat: Trample is on cooldown.");
}
if(nChargeScore)
{
if (GetLocalInt(oNPC, "ChargeCooldown") != 1)
{
if(DEBUG) DoDebug("x2_def_heartbeat: Charger Detected");
DelayCommand(0.0f, ExecuteScript("charger_hb", oNPC));
}
else
if(DEBUG) DoDebug("x2_def_heartbeat: Charge is on cooldown.");
}
if(nBullRushScore)
{
if (GetLocalInt(oNPC, "BullRushCooldown") != 1)
{
if(DEBUG) DoDebug("x2_def_heartbeat: Bull Rusher Detected");
DelayCommand(0.0f, ExecuteScript("bullrusher_hb", oNPC));
}
else
if(DEBUG) DoDebug("x2_def_heartbeat: Bull Rush is on cooldown.");
}
//:: Runs Malevolent Spirit HB
if (sResRef == "malev_spirit001" )
{
ExecuteScript("i420_ghost_hb", oNPC);
}
//:: Runs Mini-kank swarm HB
if (sResRef == "ds_minkankswrm01" )
{
ExecuteScript("cr_minikank_hb", oNPC);
}
//:: Runs Berzerker Wasp swarm HB
if (sResRef == "ar_berzwasp001" || sResRef == "ar_berzwasp002" )
{
ExecuteScript("cr_berzwasp_hb", oNPC);
}
//:: Runs special swarm HB
if (sResRef == "ds_repbatswrm001" || sResRef == "ds_locustswarm01")
{
ExecuteScript("cr_locust_hb", oNPC);
}
//: Handles NPCs that spawn in captivity. (Sand Raiders Quest)
if (sResRef == "npc_milos" || sResRef == "npc_flaron" || sResRef == "npc_alia")
{
if ((sAreaResRef == "alt_altaruk") || (sAreaResRef == "alt_wavircoster"))
{
SetLocalInt(oNPC, "FREED_NPC", 1);
}
if(GetLocalInt(oNPC, "FREED_NPC") == 0)
{
ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0, 7.0);
}
}
//:: Make NPC followers follow the NPC (Sand Raiders Quest)
if ((sAreaResRef != "alt_altaruk") && (sAreaResRef != "alt_wavircoster"))
{
if (sResRef == "npc_flaron" || sResRef == "npc_alia")
{
if(GetLocalInt(oNPC, "FREED_NPC") == 1)
{
FollowTarget("NPC_MILOS", 1.0f);
}
}
}
ExecuteScript("nw_c2_default1", oNPC);
}