forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
94 lines
2.8 KiB
Plaintext
94 lines
2.8 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: OnHeartbeat NPC eventscript
|
|
//:: prc_npc_hb
|
|
//:://////////////////////////////////////////////
|
|
#include "inc_prc_npc"
|
|
#include "prc_inc_switch"
|
|
#include "inc_epicspellai"
|
|
|
|
int DoDeadHealingAI()
|
|
{
|
|
if(!GetPRCSwitch(PRC_PNP_DEATH_ENABLE))
|
|
return FALSE;
|
|
object oDead;
|
|
//test if you can heal stuff
|
|
talent tHeal = GetCreatureTalentRandom(TALENT_CATEGORY_BENEFICIAL_HEALING_TOUCH);
|
|
if(!GetIsTalentValid(tHeal))
|
|
tHeal = GetCreatureTalentRandom(TALENT_CATEGORY_BENEFICIAL_HEALING_AREAEFFECT);
|
|
if(GetIsTalentValid(tHeal))
|
|
{
|
|
//look for dying ones
|
|
int i = 1;
|
|
oDead = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE,
|
|
OBJECT_SELF, i,
|
|
CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND,
|
|
CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN);
|
|
while(GetIsObjectValid(oDead))
|
|
{
|
|
if(GetCurrentHitPoints(oDead) < 10
|
|
&& GetLocalInt(oDead, "DeadDying"))
|
|
{
|
|
break;
|
|
}
|
|
i++;
|
|
oDead = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE,
|
|
OBJECT_SELF, i,
|
|
CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND,
|
|
CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN);
|
|
}
|
|
if(GetIsObjectValid(oDead))
|
|
{
|
|
ClearAllActions();
|
|
ActionUseTalentOnObject(tHeal, oDead);
|
|
return TRUE;
|
|
}
|
|
}
|
|
//now look for dead things
|
|
oDead = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, FALSE,
|
|
OBJECT_SELF, 1,
|
|
CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND,
|
|
CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN);
|
|
if(GetIsObjectValid(oDead))
|
|
{
|
|
if(GetHasSpell(SPELL_RESURRECTION))
|
|
{
|
|
ClearAllActions();
|
|
ActionCastSpellAtObject(SPELL_RESURRECTION, oDead);
|
|
return TRUE;
|
|
}
|
|
else if(GetHasSpell(SPELL_RAISE_DEAD))
|
|
{
|
|
ClearAllActions();
|
|
ActionCastSpellAtObject(SPELL_RAISE_DEAD, oDead);
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
//NPC substiture for OnEquip
|
|
DoEquipTest();
|
|
|
|
if(DoEpicSpells())
|
|
{
|
|
ActionDoCommand(SetCommandable(TRUE));
|
|
SetCommandable(FALSE);
|
|
}
|
|
|
|
if(DoDeadHealingAI())
|
|
{
|
|
ActionDoCommand(SetCommandable(TRUE));
|
|
SetCommandable(FALSE);
|
|
}
|
|
|
|
if (!GetIsResting(OBJECT_SELF))
|
|
{
|
|
SetLocalInt(OBJECT_SELF, "PnP_Rest_InitialHP", GetCurrentHitPoints(OBJECT_SELF));
|
|
if(DEBUG) DoDebug("prc_npc_hb: HPs for " + DebugObject2Str(OBJECT_SELF) +" nCurrent: "+IntToString(GetCurrentHitPoints(OBJECT_SELF)));
|
|
}
|
|
|
|
//run the individual HB event script
|
|
ExecuteScript("prc_onhb_indiv", OBJECT_SELF);
|
|
} |