PRC8/nwn/nwnprc/trunk/smp/phs_s_deathwatch.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

103 lines
3.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*:://////////////////////////////////////////////
//:: Spell Name Deathwatch
//:: Spell FileName PHS_S_Deathwatch
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
30ft range (10M), Instant duration. Cone-shaped emanation.
Using the foul sight granted by the powers of unlife, you can determine the
condition of creatures near death within the spells range. You instantly
know whether each creature within the area is dead, fragile (alive and
wounded, with 3 or fewer hit points left), fighting off death (alive with 4
or more hit points), undead, or neither alive nor dead (such as a construct).
Deathwatch sees through any spell or ability that allows creatures to feign
death.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
I think the duration part can be removed.
As above:
dead <= -10
fragile <= 3
fighting off death >= 4
undead = undead
construct = construct
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell hook check
if(!PHS_SpellHookCheck(PHS_SPELL_DEATHWATCH)) return;
// Declare major variables
object oCaster = OBJECT_SELF;
location lTarget = GetSpellTargetLocation();
float fDelay;
string sString;
int nHP;
// Get the first target in the area - 30ft, 10M range.
object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTarget, TRUE);
while(GetIsObjectValid(oTarget))
{
// Start string as name
sString = GetName(oTarget);
// Determine race
switch(GetRacialType(oTarget))
{
// Undead
case RACIAL_TYPE_UNDEAD:
{
// Add on: " is an undead creature"
sString += " is an undead creature.";
}
break;
// Constructs
case RACIAL_TYPE_CONSTRUCT:
{
// Add on: " is an construct"
sString += " is an construct.";
}
break;
// Anything else
default:
{
// 3 states: "dead, dying, not dead"
nHP = GetCurrentHitPoints(oTarget);
// Dead: Must be actually dead (not dying!)
if(nHP <= -10)
{
sString += " is a dead creature.";
}
// Fragile - 3 or less, but not dead, can be dying.
else if(nHP <= 3)
{
sString += " is a fragile creature.";
}
// fighting off death - everything else, oddly enough.
else
{
sString += " is a creature fighting off death.";
}
}
break;
}
// Get delay - quite a big one.
fDelay = GetDistanceToObject(oTarget)/2.0;
// Send message to PC based on range.
DelayCommand(fDelay, SendMessageToPC(oCaster, "[Deathwatch] " + GetName(oTarget) + " is " + sString));
// Get next target
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTarget, TRUE);
}
}