Initial upload.
Adding base PRC 4.19a files to repository.
This commit is contained in:
123
trunk/racescripts/race_deaththroes.nss
Normal file
123
trunk/racescripts/race_deaththroes.nss
Normal file
@@ -0,0 +1,123 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: 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.");
|
||||
}
|
||||
}*/
|
||||
}
|
Reference in New Issue
Block a user