HiddenTradition_PRC8/_module/nss/i420_cr_nyth_dmg.nss
2024-06-20 15:47:42 -04:00

61 lines
3.0 KiB
Plaintext

///////////////////////////////////////////////////////////////////////////////
//
// Invizible420's Nyth
// Created On: 3/15/03
//
// Script Name: i420_cr_nyth_dmg
// Nyth OnDamaged Event
// Bug Reports: Digiddy777@yahoo.com
///////////////////////////////////////////////////////////////////////////////
//
// Checks last damage dealt to oNyth for fire/electrical damage, if
// there has been fire/electical damage, heal that damage and then
// give temporary hitpoints for that amount, if the tempHP
// has exceeded the total HP
#include "prc_inc_racial"
void main()
{
if (GetLastSpell() == SPELL_MAGIC_MISSILE) {
int iMMDmg = GetDamageDealtByType(DAMAGE_TYPE_MAGICAL);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(iMMDmg),OBJECT_SELF);
}
int iFDmg = GetDamageDealtByType(DAMAGE_TYPE_FIRE);
int iEDmg = GetDamageDealtByType(DAMAGE_TYPE_ELECTRICAL);
if (iFDmg > 0) {
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(iFDmg),OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectTemporaryHitpoints(iFDmg*10),OBJECT_SELF);
}
if (iEDmg > 0) {
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(iEDmg),OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectTemporaryHitpoints(iEDmg*10),OBJECT_SELF);
}
if (GetCurrentHitPoints(OBJECT_SELF) > 60) {
if (GetLocalInt(OBJECT_SELF,"SPAWNED_ONCE") != 1) {
SendMessageToPC(GetLastDamager(),"The "+GetName(OBJECT_SELF)+" fissures into two.");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_FROST_L),GetLocation(OBJECT_SELF));
// Loop through all the living creatures in the in (30 ft radius) apply
// visual light effects, and shoot magic missles at the targets
object oMMTarget;
oMMTarget = GetFirstObjectInShape(SHAPE_SPHERE,30.0,GetLocation(OBJECT_SELF),FALSE,OBJECT_TYPE_CREATURE);
ClearAllActions(TRUE);
while (oMMTarget != OBJECT_INVALID) {
if (MyPRCGetRacialType(oMMTarget) != RACIAL_TYPE_UNDEAD) {
ActionCastSpellAtObject(SPELL_MAGIC_MISSILE,oMMTarget,METAMAGIC_ANY,TRUE,Random(2),PROJECTILE_PATH_TYPE_DEFAULT,TRUE);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_FROST_L),GetLocation(OBJECT_SELF));
AssignCommand(OBJECT_SELF,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(d4(1)+1*Random(3)+1),oMMTarget));
}
oMMTarget = GetNextObjectInShape(SHAPE_SPHERE,30.0,GetLocation(OBJECT_SELF),FALSE,OBJECT_TYPE_CREATURE);
}
DestroyObject(OBJECT_SELF,0.4);
DelayCommand(0.75,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_FROST_L),GetLocation(OBJECT_SELF)));
DelayCommand(1.25,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_BREACH),GetLocation(OBJECT_SELF)));
CreateObject(OBJECT_TYPE_CREATURE, "i420_cr_nyth2",GetLocation(OBJECT_SELF));
CreateObject(OBJECT_TYPE_CREATURE, "i420_cr_nyth2",GetLocation(OBJECT_SELF));
SetLocalInt(OBJECT_SELF,"SPAWNED_ONCE",1);
}
}
}