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.
123 lines
5.0 KiB
Plaintext
123 lines
5.0 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Draconian Death Throes
|
|
//:: race_deaththroes.nss
|
|
//::///////////////////////////////////////////////
|
|
/*
|
|
Handles the after-death effects of Draconians
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Fox
|
|
//:: Created On: Feb 09, 2008
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_inc_spells"
|
|
|
|
//function to handle the damage from a kapak's acid pool
|
|
void DoKapakAcidDamage(object oPC, location lTarget)
|
|
{
|
|
float fRadius = FeetToMeters(5.0);
|
|
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oPC))
|
|
{
|
|
float fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
|
|
|
|
int nDamage = d6();
|
|
effect eDam = EffectDamage(nDamage, DAMAGE_TYPE_ACID);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
|
|
|
|
// Apply effects to the currently selected target.
|
|
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
|
|
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
|
}
|
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
|
}
|
|
}
|
|
|
|
void main()
|
|
{
|
|
/* int nEvent = GetRunningEvent();
|
|
if(DEBUG) DoDebug("race_deaththroes running, event: " + IntToString(nEvent));
|
|
|
|
// Init the PC.
|
|
object oPC;
|
|
|
|
// We aren't being called from any event, instead from EvalPRCFeats
|
|
if(nEvent == FALSE)
|
|
{
|
|
oPC = OBJECT_SELF;
|
|
// Hook in the events
|
|
if(DEBUG) DoDebug("race_deaththroes: Adding eventhooks");
|
|
AddEventScript(oPC, EVENT_ONPLAYERDEATH, "race_deaththroes", TRUE, FALSE);
|
|
}
|
|
else if(nEvent == EVENT_ONPLAYERDEATH)
|
|
{
|
|
oPC = GetLastPlayerDied();
|
|
object oEnemy = GetLastHostileActor();
|
|
if(DEBUG) DoDebug("race_deaththroes - OnDeath");
|
|
|
|
int nRace = GetRacialType(oPC);
|
|
if(nRace == RACIAL_TYPE_BOZAK)
|
|
{
|
|
location lTarget = GetLocation(oPC);
|
|
int nDC = 10 + GetAbilityModifier(ABILITY_CONSTITUTION, oPC);
|
|
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PULSE_FIRE), lTarget);
|
|
|
|
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
|
while (GetIsObjectValid(oTarget))
|
|
{
|
|
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oPC))
|
|
{
|
|
float fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
|
|
|
|
int nDamage = d6();
|
|
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_NONE);
|
|
if(nDamage)
|
|
{
|
|
effect eDam = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
|
|
|
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
|
|
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
|
}
|
|
}
|
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
|
}
|
|
}
|
|
else if(nRace == RACIAL_TYPE_KAPAK)
|
|
{
|
|
int nDuration = d6();
|
|
location lTarget = GetLocation(oPC);
|
|
|
|
//use a switch to set the proper amount of "pulses" of damage
|
|
switch(nDuration)
|
|
{
|
|
case 6:
|
|
DelayCommand(RoundsToSeconds(5), DoKapakAcidDamage(oPC, lTarget));
|
|
case 5:
|
|
DelayCommand(RoundsToSeconds(4), DoKapakAcidDamage(oPC, lTarget));
|
|
case 4:
|
|
DelayCommand(RoundsToSeconds(3), DoKapakAcidDamage(oPC, lTarget));
|
|
case 3:
|
|
DelayCommand(RoundsToSeconds(2), DoKapakAcidDamage(oPC, lTarget));
|
|
case 2:
|
|
DelayCommand(RoundsToSeconds(1), DoKapakAcidDamage(oPC, lTarget));
|
|
case 1:
|
|
DoKapakAcidDamage(oPC, lTarget); break;
|
|
}
|
|
}
|
|
else if(nRace == RACIAL_TYPE_BAAZ)
|
|
{
|
|
//disarm code
|
|
if(GetIsCreatureDisarmable(oEnemy) && !GetPRCSwitch(PRC_PNP_DISARM))
|
|
{
|
|
if(DEBUG) DoDebug("race_deaththroes: Disarming Enemy");
|
|
AssignCommand(oEnemy, ActionGiveItem(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oEnemy), oPC));
|
|
}
|
|
else
|
|
if(DEBUG) DoDebug("race_deaththroes: Enemy not disarmable.");
|
|
}
|
|
}*/
|
|
} |