// Modified By Deva Winblood. //:://///////////////////////////////////////////// //:: Gate //:: NW_S0_Gate.nss //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// //:: Summons a Balor to fight for the caster. //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: April 12, 2001 //::////////////////////////////////////////////// void CreateBalor(); #include "x2_inc_spellhook" void fnWatch(object oMaster) { // PURPOSE: For summone critter to know when to despawn effect eUnsum=EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_1); object oMe=OBJECT_SELF; SetLocalInt(oMe,"bWatcher",TRUE); //SendMessageToPC(oMaster,"DEBUG: '"+GetName(oMe)+"' Watching"); if (GetIsObjectValid(oMaster)==TRUE) { // valid master if (GetIsDead(oMaster)||GetCurrentAction(oMaster)==ACTION_REST||GetLocalInt(oMe,"bUnsummon")) { // despawn ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eUnsum,GetLocation(oMe),4.0); RemoveHenchman(oMaster,oMe); SetIsDestroyable(TRUE,FALSE,FALSE); DelayCommand(1.0,DestroyObject(oMe)); } // despawn DelayCommand(6.0,fnWatch(oMaster)); } // valid master else { // destroy self ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eUnsum,GetLocation(oMe),4.0); RemoveHenchman(oMaster,oMe); SetIsDestroyable(TRUE,FALSE,FALSE); DelayCommand(1.0,DestroyObject(oMe)); DelayCommand(6.0,fnWatch(oMaster)); } // destroy self } // fnWatch() void fnSetWatchers(object oMaster,float fDur) { // PURPOSE: Fire the watcher routines int nN=1; object oSum; oSum=GetAssociate(ASSOCIATE_TYPE_SUMMONED,oMaster,nN); while(GetIsObjectValid(oSum)) { // check for watch //SendMessageToPC(oMaster,"DEBUG: Summoned '"+GetName(oSum)+"'"); if (GetLocalInt(oSum,"bWatcher")!=TRUE) { // fire watch AssignCommand(oSum,fnWatch(oMaster)); DelayCommand(fDur,SetLocalInt(oSum,"bUnsummon",TRUE)); } // fire watch nN++; oSum=GetAssociate(ASSOCIATE_TYPE_SUMMONED,oMaster,nN); } // check for watch } // fnSetWatchers() void main() { /* Spellcast Hook Code Added 2003-06-20 by Georg If you want to make changes to all spells, check x2_inc_spellhook.nss to find out more */ if (!X2PreSpellCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } // End of Spell Cast Hook //Declare major variables int nMetaMagic = GetMetaMagicFeat(); int nCasterLevel = GetCasterLevel(OBJECT_SELF); int nDuration = GetCasterLevel(OBJECT_SELF); effect eSummon; effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_GATE); //Make metamagic extend check if (nMetaMagic == METAMAGIC_EXTEND) { nDuration = nDuration *2; //Duration is +100% } if (nDuration>24) nDuration=24; //Summon the Balor and apply the VFX impact //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation()); location lSpellTargetLOC = GetSpellTargetLocation(); if(GetHasSpellEffect(SPELL_PROTECTION_FROM_EVIL) || GetHasSpellEffect(SPELL_MAGIC_CIRCLE_AGAINST_EVIL) || GetHasSpellEffect(SPELL_HOLY_AURA)) { eSummon = EffectSummonCreature("sumbalor",VFX_FNF_SUMMON_GATE,3.0); float fSeconds = RoundsToSeconds(nDuration); DelayCommand(3.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, lSpellTargetLOC, fSeconds)); } else { ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lSpellTargetLOC); DelayCommand(3.0, CreateBalor()); } DelayCommand(3.0,fnSetWatchers(OBJECT_SELF,HoursToSeconds(nDuration))); } void CreateBalor() { CreateObject(OBJECT_TYPE_CREATURE, "NW_S_BALOR_EVIL", GetSpellTargetLocation()); }