//:://///////////////////////////////////////////// //:: Animate Dead //:: NW_S0_AnimDead.nss //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* Summons a powerful skeleton or zombie depending on caster level. */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: April 11, 2001 //::////////////////////////////////////////////// //:: modified by mr_bumpkin Dec 4, 2003 #include "prc_alterations" #include "inv_inc_invfunc" #include "inv_invokehook" void main() { if (!PreInvocationCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } //Declare major variables int nCasterLevel = GetInvokerLevel(OBJECT_SELF, GetInvokingClass()); int nDuration = 24; effect eSummon; string sResRef; int nHD; //Summon the appropriate creature based on the summoner level if (nCasterLevel <= 5) { //Tyrant Fog Zombie eSummon = EffectSummonCreature("NW_S_ZOMBTYRANT",VFX_FNF_SUMMON_UNDEAD); sResRef = "NW_S_ZOMBTYRANT"; nHD = 4; } else if ((nCasterLevel >= 6) && (nCasterLevel <= 9)) { //Skeleton Warrior eSummon = EffectSummonCreature("NW_S_SKELWARR",VFX_FNF_SUMMON_UNDEAD); sResRef = "NW_S_SKELWARR"; nHD = 6; } else { //Skeleton Chieftain eSummon = EffectSummonCreature("NW_S_SKELCHIEF",VFX_FNF_SUMMON_UNDEAD); sResRef = "NW_S_SKELCHIEF"; nHD = 7; } //Apply the summon visual and summon the two undead. //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, PRCGetSpellTargetLocation()); MultisummonPreSummon(); if(GetPRCSwitch(PRC_PNP_ANIMATE_DEAD)) { int nMaxHD = nCasterLevel*4; int nTotalHD = GetControlledUndeadTotalHD(); if((nTotalHD+nHD)<=nMaxHD) { //eSummon = ExtraordinaryEffect(eSummon); //still goes away on rest, use supernatural instead eSummon = SupernaturalEffect(eSummon); ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eSummon, PRCGetSpellTargetLocation()); } else FloatingTextStringOnCreature("You cannot create more undead at this time.", OBJECT_SELF); FloatingTextStringOnCreature("Currently have "+IntToString(nTotalHD+nHD)+"HD out of "+IntToString(nMaxHD)+"HD.", OBJECT_SELF); } else ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, PRCGetSpellTargetLocation(), HoursToSeconds(nDuration)); }