Clear out experimental .35 files

Clear out experimental .35 files
This commit is contained in:
Jaysyn904
2024-02-11 13:04:14 -05:00
parent 2112b92e24
commit 618cd42b82
22356 changed files with 0 additions and 1248956 deletions

View File

@@ -1,30 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "_ev_onitemactiv"
/* Purpose: Event handler script for module's OnItemActivated event.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
void main()
{
object oItem = GetItemActivated();
object oPC = GetItemActivator();
// One of the Epic Seed books.
if (GetStringLeft(GetTag(oItem), 8) == "EPIC_SD_")
ExecuteScript("activate_seeds", oPC);
// One of the Epic Spell books.
if (GetStringLeft(GetResRef(oItem), 8) == "epic_sp_")
ExecuteScript("activate_epspell", oPC);
// "A Gem Caged Creature" item received from the epic spell Gem Cage.
if (GetTag(oItem) == "IT_GEMCAGE_GEM")
ExecuteScript("run_gemcage_gem", oPC);
// "Whip of Shar" item received from the epic spell Whip of Shar.
if (GetTag(oItem) == "WhipofShar")
ExecuteScript("run_whipofshar", oPC);
}

View File

@@ -1,123 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "_plc_rsrch_ep_sp"
/* Purpose: This is the OnDisturbed event handler script for a placeable.
When an epic spell's book is placed into the inventory, it will search
and determine validity of the item, and then proceed with the proper
researching functions.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
// This constant sets who may or may not research spells from the placeable
// this script is attached to. For example, if you only want arcane casters
// to be able to research from a lab, and not druids or clerics, you must
// determine the exclusivity for the placebale with this constant.
//
// You should save the script under a different name once constant is set....
//
// Keywords to use for this constant:
// For CLERICS ONLY ---- "CLERIC"
// For DRUIDS ONLY ---- "DRUID"
// For HEALERS ONLY ---- "HEALER"
// For FAVOURED SOULS ONLY ---- "FAVSOUL"
// For ALL DIVINE ---- "DIVINE"
// For SORCERERS AND WIZARDS ONLY ---- "ARCANE"
// For EVERYONE ---- "ALL"
string WHO_CAN_RESEARCH = "ALL";
void main()
{
if (GetInventoryDisturbType() == INVENTORY_DISTURB_TYPE_ADDED)
{
object oBook = GetInventoryDisturbItem();
object oPC = GetLastDisturbed();
if(DEBUG) DoDebug("Player Name: " + GetName(oPC));
string sBook = GetTag(oBook);
if(GetStringLeft(GetResRef(oBook), 8) == "epic_sp_")
{
if(DEBUG) DoDebug("Book Tag: " + sBook);
//remove the "EPIC_SP_" part
//sBook = GetStringRight(sBook, GetStringLength(sBook)-8);
if(DEBUG) DoDebug("Book Tag after Editing: " + sBook);
int nEpicSpell = GetSpellFromAbrev(sBook);
if(DEBUG) DoDebug("SpellID: " + IntToString(nEpicSpell));
int nDC = GetDCForSpell(nEpicSpell);
int nIP = GetResearchIPForSpell(nEpicSpell);
int nFE = GetResearchFeatForSpell(nEpicSpell);
int nR1 = GetR1ForSpell(nEpicSpell);
int nR2 = GetR2ForSpell(nEpicSpell);
int nR3 = GetR3ForSpell(nEpicSpell);
int nR4 = GetR4ForSpell(nEpicSpell);
int nS1 = GetS1ForSpell(nEpicSpell);
int nS2 = GetS2ForSpell(nEpicSpell);
int nS3 = GetS3ForSpell(nEpicSpell);
int nS4 = GetS4ForSpell(nEpicSpell);
int nS5 = GetS5ForSpell(nEpicSpell);
string sSc = GetSchoolForSpell(nEpicSpell);
// Make sure the player is allowed to research from this placeable.
int nAllowed = FALSE;
// check they have the epic spellcasting feat
if (GetHasFeat(FEAT_EPIC_SPELLCASTING, oPC))
{
if (WHO_CAN_RESEARCH == "ALL") nAllowed = TRUE;
else if (WHO_CAN_RESEARCH == "CLERIC" && (GetIsEpicCleric(oPC) || GetIsEpicUrPriest(oPC))) nAllowed = TRUE;
else if (WHO_CAN_RESEARCH == "DRUID" && (GetIsEpicDruid(oPC) || GetIsEpicBlighter(oPC))) nAllowed = TRUE;
else if (WHO_CAN_RESEARCH == "HEALER" && GetIsEpicHealer(oPC)) nAllowed = TRUE;
else if (WHO_CAN_RESEARCH == "FAVSOUL" && GetIsEpicFavSoul(oPC)) nAllowed = TRUE;
else if (WHO_CAN_RESEARCH == "DIVINE" &&
(GetIsEpicCleric(oPC) || GetIsEpicDruid(oPC) ||
GetIsEpicHealer(oPC) || GetIsEpicFavSoul(oPC) ||
GetIsEpicShaman(oPC) || GetIsEpicArchivist(oPC))) nAllowed = TRUE;
else if (WHO_CAN_RESEARCH == "ARCANE" && (GetIsEpicSorcerer(oPC) ||
GetIsEpicWizard(oPC) || GetIsEpicWarmage(oPC) || GetIsEpicDreadNecromancer(oPC) ||
GetIsEpicWitch(oPC) || GetIsEpicSublimeChord(oPC) || GetIsEpicBeguiler(oPC))) nAllowed = TRUE;
}
if (nAllowed == TRUE)
{
// Make sure the player doesn't already know this spell.
if (!GetHasEpicSpellKnown(nEpicSpell, oPC))
{
// If applicable, adjust the spell's DC.
if (GetPRCSwitch(PRC_EPIC_FOCI_ADJUST_DC) == TRUE)
nDC -= GetDCSchoolFocusAdjustment(oPC, sSc);
// Does the player have enough gold?
if (GetHasEnoughGoldToResearch(oPC, nDC))
{
// Does the player have enough extra experience?
if (GetHasEnoughExperienceToResearch(oPC, nDC))
{
// Does the player have all of the other requirements?
if (GetHasRequiredFeatsForResearch(oPC, nR1, nR2, nR3, nR4, nS1, nS2, nS3, nS4, nS5))
{
DoSpellResearch(oPC, nDC, nEpicSpell, sSc, oBook);
return;
}
else
SendMessageToPC(oPC, GetName(oPC) + " " + MES_NOT_HAVE_REQ_FEATS);
}
else
SendMessageToPC(oPC, GetName(oPC) + " " + MES_NOT_ENOUGH_XP);
}
else
SendMessageToPC(oPC, GetName(oPC) + " " + MES_NOT_ENOUGH_GOLD);
}
else
SendMessageToPC(oPC, GetName(oPC) + " " + MES_KNOW_SPELL);
}
else
SendMessageToPC(oPC, GetName(oPC) + " " + MES_CANNOT_RESEARCH_HERE);
//couldnt research, give the book back.
CopyItem(oBook, oPC, TRUE);
DestroyObject(oBook);
}
else
{
if(DEBUG) DoDebug("Item is not an epic spell's book!");
}
}
}

View File

@@ -1,88 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "activate_epspell"
/* Purpose: This is the script that gets called by the OnItemActivated event
when the item is one of the Epic Spell books. It essentially displays
all relevant information on the epic spell, so that a player may make
an informed decision on whether to research the spell or not.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
if(DEBUG) DoDebug("activate_epspell executing");
object oBook = GetItemActivated();
string sBook = GetTag(oBook);
string sName, sDesc;
int nEpicSpell = GetSpellFromAbrev(sBook);
int nDC = GetDCForSpell(nEpicSpell);
int nIP = GetResearchIPForSpell(nEpicSpell);
int nFE = GetResearchFeatForSpell(nEpicSpell);
int nR1 = GetR1ForSpell(nEpicSpell);
int nR2 = GetR2ForSpell(nEpicSpell);
int nR3 = GetR3ForSpell(nEpicSpell);
int nR4 = GetR4ForSpell(nEpicSpell);
int nS1 = GetS1ForSpell(nEpicSpell);
int nS2 = GetS2ForSpell(nEpicSpell);
int nS3 = GetS3ForSpell(nEpicSpell);
int nS4 = GetS4ForSpell(nEpicSpell);
int nS5 = GetS5ForSpell(nEpicSpell);
int nXC = GetCastXPForSpell(nEpicSpell);
string sSc = GetSchoolForSpell(nEpicSpell);
// If applicable, adjust the spell's DC.
if(GetPRCSwitch(PRC_EPIC_FOCI_ADJUST_DC))
nDC -= GetDCSchoolFocusAdjustment(OBJECT_SELF, sSc);
int nGP = nDC * GetPRCSwitch(PRC_EPIC_GOLD_MULTIPLIER);
int nXP = nGP / GetPRCSwitch(PRC_EPIC_XP_FRACTION);
sName = GetStringByStrRef(StringToInt(Get2DACache("feat", "feat", nFE)));
sDesc = GetStringByStrRef(StringToInt(Get2DACache("feat", "description", nFE)));
// Information message sent to player about the Epic Spell.
SendMessageToPC(OBJECT_SELF, "-------------------------------------------");
SendMessageToPC(OBJECT_SELF, "Requirements for the research of the " + sName + ":");
SendMessageToPC(OBJECT_SELF, " - You must be an epic level spellcaster.");
SendMessageToPC(OBJECT_SELF, " - The DC for you to research/cast is " + IntToString(nDC) + ".");
SendMessageToPC(OBJECT_SELF, " - The XP cost for you to research is " + IntToString(nXP) + ".");
SendMessageToPC(OBJECT_SELF, " - The gold cost for you to research is " + IntToString(nGP) + ".");
if (nS1 != -1)
SendMessageToPC(OBJECT_SELF, " - " + GetStringByStrRef(StringToInt
(Get2DACache("feat", "feat", StringToInt(Get2DACache("epicspellseeds", "FeatID", nS1))))));
if (nS2 != -1)
SendMessageToPC(OBJECT_SELF, " - " + GetStringByStrRef(StringToInt
(Get2DACache("feat", "feat", StringToInt(Get2DACache("epicspellseeds", "FeatID", nS2))))));
if (nS3 != -1)
SendMessageToPC(OBJECT_SELF, " - " + GetStringByStrRef(StringToInt
(Get2DACache("feat", "feat", StringToInt(Get2DACache("epicspellseeds", "FeatID", nS3))))));
if (nS4 != -1)
SendMessageToPC(OBJECT_SELF, " - " + GetStringByStrRef(StringToInt
(Get2DACache("feat", "feat", StringToInt(Get2DACache("epicspellseeds", "FeatID", nS4))))));
if (nS5 != -1)
SendMessageToPC(OBJECT_SELF, " - " + GetStringByStrRef(StringToInt
(Get2DACache("feat", "feat", StringToInt(Get2DACache("epicspellseeds", "FeatID", nS5))))));
if (nR1 != 0)
SendMessageToPC(OBJECT_SELF, " - " + GetStringByStrRef(StringToInt
(Get2DACache("feat", "feat", nR1))));
if (nR2 != 0)
SendMessageToPC(OBJECT_SELF, " - " + GetStringByStrRef(StringToInt
(Get2DACache("feat", "feat", nR2))));
if (nR3 != 0)
SendMessageToPC(OBJECT_SELF, " - " + GetStringByStrRef(StringToInt
(Get2DACache("feat", "feat", nR3))));
if (nR4 != 0)
SendMessageToPC(OBJECT_SELF, " - " + GetStringByStrRef(StringToInt
(Get2DACache("feat", "feat", nR4))));
if (nXC != 0 && GetPRCSwitch(PRC_EPIC_XP_COSTS) == TRUE)
SendMessageToPC(OBJECT_SELF, " - Additionally, " + IntToString(nXC) +
" experience points are spent per casting.");
SendMessageToPC(OBJECT_SELF, " ");
SendMessageToPC(OBJECT_SELF, "Spell Description:");
SendMessageToPC(OBJECT_SELF, sDesc);
SendMessageToPC(OBJECT_SELF, "-------------------------------------------");
}

View File

@@ -1,55 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "activate_seeds"
/* Purpose: This is the script that gets called by the OnItemActivated event
when the item is one of the Epic Spell Seed books.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
if(DEBUG) DoDebug("activate_seeds executing");
object oPC = OBJECT_SELF;
object oBook = GetItemActivated();
int nSeed = GetSeedFromAbrev(GetTag(oBook));
//int nFE = GetFeatForSeed(nSeed);
//int nIP = GetIPForSeed(nSeed);
// Give the seed if the player is able to comprehend it, doesn't already
// have it, and is allowed to learn it.
if(GetCanLearnSeed(oPC, nSeed))
{
if(!GetHasEpicSeedKnown(nSeed, oPC))
{
int nDC = GetDCForSeed(nSeed);
if (GetSpellcraftSkill(oPC) >= nDC)
{
if (PLAY_SPELLSEED_CUT == TRUE)
ExecuteScript(SPELLSEEDS_CUT, oPC);
SetEpicSeedKnown(nSeed, oPC, TRUE);
SendMessageToPC(oPC, MES_LEARN_SEED);
DoBookDecay(oBook, oPC);
}
else
{
SendMessageToPC(oPC, GetName(oPC) + " " + MES_NOT_ENOUGH_SKILL);
SendMessageToPC(oPC, "You need a spellcraft skill of " +
IntToString(nDC) + " or greater.");
}
}
else
{
SendMessageToPC(oPC, MES_KNOW_SEED);
}
}
else
{
SendMessageToPC(oPC, MES_CLASS_NOT_ALLOWED);
}
}

View File

@@ -1,46 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "aoe_rainfire_ent"
/* Purpose: AoE Rain of Fire spell's OnEnter script.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
#include "prc_add_spell_dc"
void main()
{
object oTarget = GetEnteringObject();
object oCaster = GetAreaOfEffectCreator();
int nDC = GetEpicSpellSaveDC(oCaster, oTarget, SPELL_EPIC_RAINFIR);
SetAllAoEInts(4054, OBJECT_SELF, PRCGetSaveDC(oTarget, oCaster));
int nDamage;
effect eDam;
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
float fDelay;
if (oTarget != oCaster &&
!GetIsDM(oTarget))
{
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_INCENDIARY_CLOUD) );
if(!PRCDoResistSpell(oCaster, oTarget, GetTotalCastingLevel(oCaster)+SPGetPenetr(oCaster), fDelay))
{
fDelay = PRCGetRandomDelay(0.5, 2.0);
nDamage = d6(1);
eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
if(!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC, SAVING_THROW_TYPE_FIRE, oCaster, fDelay))
{
DelayCommand(fDelay,
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
DelayCommand(fDelay,
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
}
}
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "aoe_rainfire_ext"
/* Purpose: AoE Rain of Fire's OnExit script.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
void main()
{
}

View File

@@ -1,57 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "aoe_rainfire_hb"
/* Purpose: AoE Rain of Fire's Heartbeat script.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
#include "prc_add_spell_dc"
void main()
{
SetAllAoEInts(4054, OBJECT_SELF, GetSpellSaveDC());
int nDamage;
effect eDam;
object oTarget;
object oCaster = GetAreaOfEffectCreator();
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
float fDelay;
oTarget = GetFirstInPersistentObject
(OBJECT_SELF, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
while(GetIsObjectValid(oTarget))
{
if (oTarget != oCaster &&
!GetIsDM(oTarget))
{
fDelay = PRCGetRandomDelay(0.5, 2.0);
if(!PRCDoResistSpell(oCaster, oTarget, GetTotalCastingLevel(oCaster)+SPGetPenetr(oCaster), fDelay))
{
SignalEvent(oTarget,
EventSpellCastAt(oCaster, SPELL_INCENDIARY_CLOUD));
nDamage = d6(1);
eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
int nDC = GetEpicSpellSaveDC(oCaster, oTarget, SPELL_EPIC_RAINFIR);
if(!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC, SAVING_THROW_TYPE_FIRE, oCaster, fDelay))
{
DelayCommand(fDelay,
SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eDam, oTarget));
DelayCommand(fDelay,
SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eVis, oTarget));
}
}
}
oTarget = GetNextInPersistentObject
(OBJECT_SELF, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contingentreu"
/* Purpose: This calls the "contingent_reun" script, which is the true script
for the Contingent Reunion spell.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
ExecuteScript("contingent_reun", GetPCSpeaker());
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contre0_reset"
/* Purpose: Dispels any active Contingent Reunion Zero's cast by oPC.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
DeleteLocalInt(oPC, "nContingentReunion0");
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contre1_reset"
/* Purpose: Dispels any active Contingent Reunion One's cast by oPC.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
DeleteLocalInt(oPC, "nContingentReunion1");
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contre2_reset"
/* Purpose: Dispels any active Contingent Reunion Two's cast by oPC.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
DeleteLocalInt(oPC, "nContingentReunion2");
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contre3_reset"
/* Purpose: Dispels any active Contingent Reunion Three's cast by oPC.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
DeleteLocalInt(oPC, "nContingentReunion3");
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contre4_reset"
/* Purpose: Dispels any active Contingent Reunion Four's cast by oPC.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
DeleteLocalInt(oPC, "nContingentReunion4");
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contre5_reset"
/* Purpose: Dispels any active Contingent Reunion Five's cast by oPC.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
DeleteLocalInt(oPC, "nContingentReunion5");
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 5);
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 4);
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 0);
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 1);
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 2);
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 3);
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 15);
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 14);
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 10);
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 11);
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 12);
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contreu_*****"
/* Purpose: These scripts set the variable for use in the Contingent Reunion
spell. The variable is the condition that will trigger the teleportation
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetLocalInt(GetPCSpeaker(), "nReunionTrigger", 13);
}

View File

@@ -1,24 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_contrez_reset"
/* Purpose: Dispels any active Contingent Resurrections cast by oPC.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
object oPC = GetPCSpeaker();
int nSlotsUsed = GetLocalInt(oPC, "nContingentRez");
// Restore all used slots
while(nSlotsUsed-- > 0)
RestoreSpellSlotForCaster(oPC);
SetLocalInt(oPC, "nContingentRez", 0);
}

View File

@@ -1,14 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_council_npca"
/* Purpose:
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 13, 2004
//:://////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
ExecuteScript("council_npca", oPC);
}

View File

@@ -1,14 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_council_npcb"
/* Purpose:
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 13, 2004
//:://////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
ExecuteScript("council_npcb", oPC);
}

View File

@@ -1,15 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_dest_whipshar"
/* Purpose: This destroys the Whip of Shar item, enabling the player to be
rid of the No-Drop item.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank, with credit to Nron Ksr for the spell itself
//:: Last Updated On: March 17, 2004
//:://////////////////////////////////////////////
void main()
{
object oWhip = GetLocalObject(GetPCSpeaker(), "oWhip");
DestroyObject(oWhip);
DeleteLocalObject(GetPCSpeaker(), "oWhip");
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_destroyself"
/* Purpose:
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
void main()
{
SetPlotFlag(OBJECT_SELF, FALSE);
DestroyObject(OBJECT_SELF, 2.0);
}

View File

@@ -1,14 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_fwords_npca"
/* Purpose:
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 13, 2004
//:://////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
ExecuteScript("fwords_npca", oPC);
}

View File

@@ -1,14 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_fwords_npcb"
/* Purpose:
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 13, 2004
//:://////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
ExecuteScript("fwords_npcb", oPC);
}

View File

@@ -1,17 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_ident_items"
/* Purpose: This goes into the OnPlayerRest's conversation node in the
ActionTaken tab for the "I'll try to ID my items." selection.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 13, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
void main()
{
object oPC = GetPCSpeaker();
AssignCommand(oPC, TryToIDItems());
}

View File

@@ -1,13 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "at_runmymartyr"
/* Purpose: This is an ActionTaken script, intended for use as a positive
answer in the 'Allied Martyr' spell's conversation.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
void main()
{
ExecuteScript("run_all_martyr", GetPCSpeaker());
}

View File

@@ -1,308 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "contingent_reun"
/* Purpose: This is the true spell script for Contingent Reunion. The other
castable script calls the conversation where the player must choose
a trigger, which then gets transferred to this script, which executes
the spell effects and results.
NOTE: This contingency will last indefinitely, unless it triggers or the
player dispels it in the pre-rest conversation.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
void MonitorForDeath(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC);
void MonitorForDying(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC);
void MonitorForIncapacitated(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC);
void MonitorForNearDeath(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC);
void MonitorForBadlyWounded(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC);
void MonitorForAfflicted(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC);
void JumpDeadToLocation(object oJumper, location lTarget);
void main()
{
object oPC = OBJECT_SELF;
object oTarget = GetLocalObject(oPC, "oSpellTarget");
location lJumpTo = GetLocalLocation(oPC, "lSpellTarget");
int nTrigger = GetLocalInt(oPC, "nReunionTrigger");
// Debug
SendMessageToPC(oPC, IntToString(nTrigger));
DeleteLocalObject(oPC, "oSpellTarget");
DeleteLocalLocation(oPC, "lSpellTarget");
DeleteLocalInt(oPC, "nReunionTrigger");
DeleteLocalInt(oPC, "nMyTargetIsACreature");
PenalizeSpellSlotForCaster(oPC);
// Start monitoring the chosen condition.
switch (nTrigger)
{
// Monitoring self.
case 0: SetLocalInt(oPC, "nContingentReunion0", TRUE);
MonitorForDeath(oPC, 1, oTarget, lJumpTo, oPC);
break;
case 1: SetLocalInt(oPC, "nContingentReunion1", TRUE);
MonitorForDying(oPC, 1, oTarget, lJumpTo, oPC);
break;
case 2: SetLocalInt(oPC, "nContingentReunion2", TRUE);
MonitorForIncapacitated(oPC, 1, oTarget, lJumpTo, oPC);
break;
case 3: SetLocalInt(oPC, "nContingentReunion3", TRUE);
MonitorForNearDeath(oPC, 1, oTarget, lJumpTo, oPC);
break;
case 4: SetLocalInt(oPC, "nContingentReunion4", TRUE);
MonitorForBadlyWounded(oPC, 1, oTarget, lJumpTo, oPC);
break;
case 5: SetLocalInt(oPC, "nContingentReunion5", TRUE);
MonitorForAfflicted(oPC, 1, oTarget, lJumpTo, oPC);
break;
// Monitoring target.
case 10: SetLocalInt(oPC, "nContingentReunion0", TRUE);
MonitorForDeath(oTarget, 1, oTarget, lJumpTo, oPC);
break;
case 11: SetLocalInt(oPC, "nContingentReunion1", TRUE);
MonitorForDying(oTarget, 1, oTarget, lJumpTo, oPC);
break;
case 12: SetLocalInt(oPC, "nContingentReunion2", TRUE);
MonitorForIncapacitated(oTarget, 1, oTarget, lJumpTo, oPC);
break;
case 13: SetLocalInt(oPC, "nContingentReunion3", TRUE);
MonitorForNearDeath(oTarget, 1, oTarget, lJumpTo, oPC);
break;
case 14: SetLocalInt(oPC, "nContingentReunion4", TRUE);
MonitorForBadlyWounded(oTarget, 1, oTarget, lJumpTo, oPC);
break;
case 15: SetLocalInt(oPC, "nContingentReunion5", TRUE);
MonitorForAfflicted(oTarget, 1, oTarget, lJumpTo, oPC);
break;
}
}
void MonitorForDeath(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC)
{
if (GetLocalInt(oPC, "nContingentReunion0") == TRUE) // Is the contingency still active?
{ // If the target isn't dead.
if (!GetIsDead(oMonitor) && oMonitor != OBJECT_INVALID)
{
if (nCount >= 10) nCount = 0;
if (nCount == 1)
FloatingTextStringOnCreature("*Contingency active*", oPC, FALSE);
if (oJumpTo != OBJECT_INVALID) // Update the JumpTo location each time through.
lJumpTo = GetLocation(oJumpTo);
nCount++;
DelayCommand(6.0, MonitorForDeath(oMonitor, nCount, oJumpTo, lJumpTo, oPC));
}
else // Jump oMonitor to the target, and end the contingency.
{
FloatingTextStringOnCreature("*Contingency triggered*", oMonitor);
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis,
GetLocation(oPC));
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lJumpTo);
if (GetIsDead(oPC))
JumpDeadToLocation(oPC, lJumpTo);
else
AssignCommand(oPC, JumpToLocation(lJumpTo));
DeleteLocalInt(oPC, "nContingentReunion0");
MonitorForDeath(oMonitor, nCount, oJumpTo, lJumpTo, oPC);
}
}
else // Restore the lost spell slot.
RestoreSpellSlotForCaster(oPC);
}
void MonitorForDying(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC)
{
int nHP = GetCurrentHitPoints(oMonitor);
if (GetLocalInt(oPC, "nContingentReunion1") == TRUE) // Is the contingency still active?
{ // If the target isn't dying.
if (nHP >= 1 && oMonitor != OBJECT_INVALID)
{
if (nCount >= 10) nCount = 0;
if (nCount == 1)
FloatingTextStringOnCreature("*Contingency active*", oPC, FALSE);
if (oJumpTo != OBJECT_INVALID) // Update the JumpTo location each time through.
lJumpTo = GetLocation(oJumpTo);
nCount++;
DelayCommand(4.0, MonitorForDying(oMonitor, nCount, oJumpTo, lJumpTo, oPC));
}
else // Jump oMonitor to the target, and end the contingency.
{
FloatingTextStringOnCreature("*Contingency triggered*", oMonitor);
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis,
GetLocation(oPC));
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lJumpTo);
if (GetIsDead(oPC))
JumpDeadToLocation(oPC, lJumpTo);
else
AssignCommand(oPC, JumpToLocation(lJumpTo));
DeleteLocalInt(oPC, "nContingentReunion1");
MonitorForDying(oMonitor, nCount, oJumpTo, lJumpTo, oPC);
}
}
else // Restore the lost spell slot.
RestoreSpellSlotForCaster(oPC);
}
void MonitorForIncapacitated(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC = OBJECT_SELF)
{
if (GetLocalInt(oPC, "nContingentReunion2") == TRUE) // Is the contingency still active?
{
// Is oMonitor incapacitated?
int nInc;
effect eX = GetFirstEffect(oMonitor);
while (GetIsEffectValid(eX))
{
if (GetEffectType(eX) == EFFECT_TYPE_PARALYZE) nInc = TRUE;
if (GetEffectType(eX) == EFFECT_TYPE_PETRIFY) nInc = TRUE;
if (GetEffectType(eX) == EFFECT_TYPE_SLEEP) nInc = TRUE;
if (GetEffectType(eX) == EFFECT_TYPE_STUNNED) nInc = TRUE;
eX = GetNextEffect(oMonitor);
}
// If the target isn't incapacitated.
if (nInc != TRUE && oMonitor != OBJECT_INVALID)
{
if (nCount >= 10) nCount = 0;
if (nCount == 1)
FloatingTextStringOnCreature("*Contingency active*", oPC, FALSE);
if (oJumpTo != OBJECT_INVALID) // Update the JumpTo location each time through.
lJumpTo = GetLocation(oJumpTo);
nCount++;
DelayCommand(3.0, MonitorForIncapacitated(oMonitor, nCount, oJumpTo, lJumpTo, oPC));
}
else // Jump oMonitor to the target, and end the contingency.
{
FloatingTextStringOnCreature("*Contingency triggered*", oMonitor);
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis,
GetLocation(oPC));
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lJumpTo);
AssignCommand(oPC, JumpToLocation(lJumpTo));
DeleteLocalInt(oPC, "nContingentReunion2");
MonitorForIncapacitated(oMonitor, nCount, oJumpTo, lJumpTo, oPC);
}
}
else // Restore the lost spell slot.
RestoreSpellSlotForCaster(oPC);
}
void MonitorForNearDeath(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC = OBJECT_SELF)
{
int nHP = GetCurrentHitPoints(oMonitor);
int nX = GetMaxHitPoints(oMonitor) / 4;
if (GetLocalInt(oPC, "nContingentReunion3") == TRUE) // Is the contingency still active?
{ // If the target isn't near death.
if (nHP > nX && oMonitor != OBJECT_INVALID)
{
if (nCount >= 30) nCount = 0;
if (nCount == 1)
FloatingTextStringOnCreature("*Contingency active*", oPC, FALSE);
if (oJumpTo != OBJECT_INVALID) // Update the JumpTo location each time through.
lJumpTo = GetLocation(oJumpTo);
nCount++;
DelayCommand(2.0, MonitorForNearDeath(oMonitor, nCount, oJumpTo, lJumpTo, oPC));
}
else // Jump oMonitor to the target, and end the contingency.
{
FloatingTextStringOnCreature("*Contingency triggered*", oMonitor);
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis,
GetLocation(oPC));
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lJumpTo);
AssignCommand(oPC, JumpToLocation(lJumpTo));
DeleteLocalInt(oPC, "nContingentReunion3");
MonitorForNearDeath(oMonitor, nCount, oJumpTo, lJumpTo, oPC);
}
}
else // Restore the lost spell slot.
RestoreSpellSlotForCaster(oPC);
}
void MonitorForBadlyWounded(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC = OBJECT_SELF)
{
int nHP = GetCurrentHitPoints(oMonitor);
int nX = GetMaxHitPoints(oMonitor) / 2;
if (GetLocalInt(oPC, "nContingentReunion4") == TRUE) // Is the contingency still active?
{ // If the target isn't badly wounded.
if (nHP > nX && oMonitor != OBJECT_INVALID)
{
if (nCount >= 30) nCount = 0;
if (nCount == 1)
FloatingTextStringOnCreature("*Contingency active*", oPC, FALSE);
if (oJumpTo != OBJECT_INVALID) // Update the JumpTo location each time through.
lJumpTo = GetLocation(oJumpTo);
nCount++;
DelayCommand(2.0, MonitorForBadlyWounded(oMonitor, nCount, oJumpTo, lJumpTo, oPC));
}
else // Jump oMonitor to the target, and end the contingency.
{
FloatingTextStringOnCreature("*Contingency triggered*", oMonitor);
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis,
GetLocation(oPC));
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lJumpTo);
AssignCommand(oPC, JumpToLocation(lJumpTo));
DeleteLocalInt(oPC, "nContingentReunion4");
MonitorForBadlyWounded(oMonitor, nCount, oJumpTo, lJumpTo, oPC);
}
}
else // Restore the lost spell slot.
RestoreSpellSlotForCaster(oPC);
}
void MonitorForAfflicted(object oMonitor, int nCount, object oJumpTo, location lJumpTo, object oPC = OBJECT_SELF)
{
if (GetLocalInt(oPC, "nContingentReunion5") == TRUE) // Is the contingency still active?
{
// Is oMonitor afflicted?
int nInc;
effect eX = GetFirstEffect(oMonitor);
while (GetIsEffectValid(eX))
{
if (GetEffectType(eX) == EFFECT_TYPE_CURSE) nInc = TRUE;
if (GetEffectType(eX) == EFFECT_TYPE_DISEASE) nInc = TRUE;
if (GetEffectType(eX) == EFFECT_TYPE_NEGATIVELEVEL) nInc = TRUE;
if (GetEffectType(eX) == EFFECT_TYPE_POISON) nInc = TRUE;
eX = GetNextEffect(oMonitor);
}
// If the target isn't incapacitated.
if (nInc != TRUE && oMonitor != OBJECT_INVALID)
{
if (nCount >= 10) nCount = 0;
if (nCount == 1)
FloatingTextStringOnCreature("*Contingency active*", oPC, FALSE);
if (oJumpTo != OBJECT_INVALID) // Update the JumpTo location each time through.
lJumpTo = GetLocation(oJumpTo);
nCount++;
DelayCommand(6.0, MonitorForAfflicted(oMonitor, nCount, oJumpTo, lJumpTo, oPC));
}
else // Jump oMonitor to the target, and end the contingency.
{
FloatingTextStringOnCreature("*Contingency triggered*", oMonitor);
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis,
GetLocation(oPC));
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lJumpTo);
AssignCommand(oPC, JumpToLocation(lJumpTo));
DeleteLocalInt(oPC, "nContingentReunion5");
MonitorForAfflicted(oMonitor, nCount, oJumpTo, lJumpTo, oPC);
}
}
else // Restore the lost spell slot.
RestoreSpellSlotForCaster(oPC);
}
void JumpDeadToLocation(object oJumper, location lTarget)
{
//Debug
SendMessageToPC(oJumper, "Jumping dead");
int nDam = 2;
effect eRez = EffectResurrection();
effect eKill = EffectDamage(nDam);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eRez, oJumper);
DelayCommand(0.1, AssignCommand(oJumper, JumpToLocation(lTarget)));
DelayCommand(0.2, ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oJumper));
}

View File

@@ -1,46 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "council_npca"
/* Purpose:
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "x0_i0_position"
#include "prc_alterations"
#include "inc_dispel"
#include "inc_epicspells"
location GetOppositeLoc(object oTarget);
void main()
{
object oPC = OBJECT_SELF;
float fDur = 1200.0f; // 20 minutes
// Create the NPC celestial in front of oPC.
location lNPC = GetOppositeLoc(oPC);
object oNPC = CreateObject(OBJECT_TYPE_CREATURE, "council_npca", lNPC);
effect eGhost = EffectCutsceneGhost();
effect eEther = EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE);
effect eHold = EffectCutsceneImmobilize();
effect eLink = EffectLinkEffects(eGhost, eEther);
eLink = EffectLinkEffects(eLink, eHold);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oNPC, fDur, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
SetPlotFlag(oNPC, TRUE);
// Initiate a conversation with the PC.
AssignCommand(oNPC, ActionStartConversation(oPC, "", TRUE, FALSE));
// After the maximum duration, destroy the NPC (sever the connection).
DelayCommand(fDur, SetPlotFlag(oNPC, FALSE));
DelayCommand(fDur, DestroyObject(oNPC));
}
location GetOppositeLoc(object oTarget)
{
float fDir = GetFacing(oTarget);
float fAngleOpposite = GetOppositeDirection(fDir);
return GenerateNewLocation(oTarget,
1.5f,
fDir,
fAngleOpposite);
}

View File

@@ -1,46 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "council_npcb"
/* Purpose:
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "x0_i0_position"
#include "prc_alterations"
#include "inc_dispel"
#include "inc_epicspells"
location GetOppositeLoc(object oTarget);
void main()
{
object oPC = OBJECT_SELF;
float fDur = 1200.0f; // 20 minutes max, or NPC destroys self at end of conv
// Create the NPC celestial in front of oPC.
location lNPC = GetOppositeLoc(oPC);
object oNPC = CreateObject(OBJECT_TYPE_CREATURE, "council_npcb", lNPC);
effect eGhost = EffectCutsceneGhost();
effect eEther = EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE);
effect eHold = EffectCutsceneImmobilize();
effect eLink = EffectLinkEffects(eGhost, eEther);
eLink = EffectLinkEffects(eLink, eHold);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oNPC, fDur, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
SetPlotFlag(oNPC, TRUE);
// Initiate a conversation with the PC.
AssignCommand(oNPC, ActionStartConversation(oPC, "", TRUE, FALSE));
// After the maximum duration, destroy the NPC (sever the connection).
DelayCommand(fDur, SetPlotFlag(oNPC, FALSE));
DelayCommand(fDur, DestroyObject(oNPC));
}
location GetOppositeLoc(object oTarget)
{
float fDir = GetFacing(oTarget);
float fAngleOpposite = GetOppositeDirection(fDir);
return GenerateNewLocation(oTarget,
1.5f,
fDir,
fAngleOpposite);
}

View File

@@ -1,55 +0,0 @@
//::///////////////////////////////////////////////
//:: Epic Spell: Eternal Freedom
//:: Author: Boneshank (Don Armstrong)
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
#include "inc_dispel"
void main()
{
//Declare major variables
object oTarget = OBJECT_SELF;
object oSkin;
itemproperty ip1 = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_PARALYSIS);
itemproperty ip2 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENTANGLE);
itemproperty ip3 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLOW);
itemproperty ip4 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HOLD_MONSTER);
itemproperty ip5 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HOLD_PERSON);
itemproperty ip6 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
itemproperty ip7 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HOLD_ANIMAL);
itemproperty ip8 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_POWER_WORD_STUN);
itemproperty ip9 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
effect eDur = EffectVisualEffect(VFX_DUR_FREEDOM_OF_MOVEMENT);
//Search for and remove the above negative effects
effect eLook = GetFirstEffect(oTarget);
while(GetIsEffectValid(eLook))
{
if(GetEffectType(eLook) == EFFECT_TYPE_PARALYZE ||
GetEffectType(eLook) == EFFECT_TYPE_ENTANGLE ||
GetEffectType(eLook) == EFFECT_TYPE_SLOW ||
GetEffectType(eLook) == EFFECT_TYPE_MOVEMENT_SPEED_DECREASE ||
GetEffectType(eLook) == EFFECT_TYPE_PETRIFY ||
GetEffectType(eLook) == EFFECT_TYPE_SLEEP ||
GetEffectType(eLook) == EFFECT_TYPE_STUNNED)
{
RemoveEffect(oTarget, eLook);
}
eLook = GetNextEffect(oTarget);
}
//Apply properties.
oSkin = GetPCSkin(oTarget);
IPSafeAddItemProperty(oSkin, ip1);
IPSafeAddItemProperty(oSkin, ip2);
IPSafeAddItemProperty(oSkin, ip3);
IPSafeAddItemProperty(oSkin, ip4);
IPSafeAddItemProperty(oSkin, ip5);
IPSafeAddItemProperty(oSkin, ip6);
IPSafeAddItemProperty(oSkin, ip7);
IPSafeAddItemProperty(oSkin, ip8);
IPSafeAddItemProperty(oSkin, ip9);
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eDur), oTarget);
}

View File

@@ -1,46 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "fwords_npca"
/* Purpose:
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "x0_i0_position"
#include "prc_alterations"
#include "inc_dispel"
#include "inc_epicspells"
location GetOppositeLoc(object oTarget);
void main()
{
object oPC = OBJECT_SELF;
float fDur = 1200.0f; // 20 minutes max, or NPC destroys self at end of conv
// Create the NPC fiend in front of oPC.
location lNPC = GetOppositeLoc(oPC);
object oNPC = CreateObject(OBJECT_TYPE_CREATURE, "fiendw_npca", lNPC);
effect eGhost = EffectCutsceneGhost();
effect eEther = EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE);
effect eHold = EffectCutsceneImmobilize();
effect eLink = EffectLinkEffects(eGhost, eEther);
eLink = EffectLinkEffects(eLink, eHold);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oNPC, fDur, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
SetPlotFlag(oNPC, TRUE);
// Initiate a conversation with the PC.
AssignCommand(oNPC, ActionStartConversation(oPC, "", TRUE, FALSE));
// After the maximum duration, destroy the NPC (sever the connection).
DelayCommand(fDur, SetPlotFlag(oNPC, FALSE));
DelayCommand(fDur, DestroyObject(oNPC));
}
location GetOppositeLoc(object oTarget)
{
float fDir = GetFacing(oTarget);
float fAngleOpposite = GetOppositeDirection(fDir);
return GenerateNewLocation(oTarget,
1.5f,
fDir,
fAngleOpposite);
}

View File

@@ -1,46 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "fwords_npcb"
/* Purpose:
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "x0_i0_position"
#include "prc_alterations"
#include "inc_dispel"
#include "inc_epicspells"
location GetOppositeLoc(object oTarget);
void main()
{
object oPC = OBJECT_SELF;
float fDur = 1200.0f; // 20 minutes max, or NPC destroys self at end of conv
// Create the NPC fiend in front of oPC.
location lNPC = GetOppositeLoc(oPC);
object oNPC = CreateObject(OBJECT_TYPE_CREATURE, "fiendw_npcb", lNPC);
effect eGhost = EffectCutsceneGhost();
effect eEther = EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE);
effect eHold = EffectCutsceneImmobilize();
effect eLink = EffectLinkEffects(eGhost, eEther);
eLink = EffectLinkEffects(eLink, eHold);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oNPC, fDur, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
SetPlotFlag(oNPC, TRUE);
// Initiate a conversation with the PC.
AssignCommand(oNPC, ActionStartConversation(oPC, "", TRUE, FALSE));
// After the maximum duration, destroy the NPC (sever the connection).
DelayCommand(fDur, SetPlotFlag(oNPC, FALSE));
DelayCommand(fDur, DestroyObject(oNPC));
}
location GetOppositeLoc(object oTarget)
{
float fDir = GetFacing(oTarget);
float fAngleOpposite = GetOppositeDirection(fDir);
return GenerateNewLocation(oTarget,
1.5f,
fDir,
fAngleOpposite);
}

View File

@@ -1,54 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "run_all_martyr"
/* Purpose: For "Allied Martyr" spell - This is the actual functional body of
the spell, but needs to be called seperately due to the need of a
player's permission.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_dispel"
void RunMyMartyrdom(object oAlly, int nDuration, object oMartyr = OBJECT_SELF);
void main()
{
// Who is my ally that I am helping?
object oAlly = GetLocalObject(OBJECT_SELF, "oAllyForMyMartyrdom");
// How long do I have to do this for?
int nDuration = GetLocalInt(OBJECT_SELF,
"nTimeForMartyrdomFor");
// Begin the martyrdom.
RunMyMartyrdom(oAlly, nDuration, OBJECT_SELF);
}
void RunMyMartyrdom(object oAlly, int nDuration, object oMartyr = OBJECT_SELF)
{
int nAllyCurrentHP = GetCurrentHitPoints(oAlly);
int nAllyMaxHP = GetMaxHitPoints(oAlly);
int nMyHP = GetCurrentHitPoints(OBJECT_SELF);
int nTransfer = nAllyMaxHP - nAllyCurrentHP;
effect eVisDown = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
effect eVisUp = EffectVisualEffect(VFX_IMP_HEALING_L);
effect eHPLoss = EffectDamage(nTransfer);
effect eHPGain = EffectHeal(nTransfer);
effect eLink1 = EffectLinkEffects(eVisDown, eHPLoss);
effect eLink2 = EffectLinkEffects(eVisUp, eHPGain);
// If the spell's duration has not expired yet.
if (!GetIsDead(OBJECT_SELF) &&
!GetIsDead(oAlly) &&
GetIsObjectValid(oAlly) &&
nTransfer > 0 )
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink1, OBJECT_SELF);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink2, oAlly);
}
if (nDuration > 0)
{
nDuration -= 1;
DelayCommand(3.0, RunMyMartyrdom(oAlly, nDuration, OBJECT_SELF));
}
}

View File

@@ -1,35 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "run_gemcage_gem"
/* Purpose: This will uncage the creature associated with the particular gem.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "nw_i0_generic"
void main()
{
object oItem = GetItemActivated();
object oCre;
string sName = GetLocalString(oItem, "sNameOfCreature");
string sRef = GetLocalString(oItem, "sCagedCreature");
if (PRCGetSpellTargetObject() == OBJECT_SELF)
{
FloatingTextStringOnCreature("Inside this gem, " + sName +
" is safely caged.", OBJECT_SELF);
}
else
{
location lTarget = GetItemActivatedTargetLocation();
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lTarget);
oCre = CreateObject(OBJECT_TYPE_CREATURE, sRef, lTarget);
FloatingTextStringOnCreature(sName + " has been set free!", OBJECT_SELF);
DestroyObject(oItem);
AssignCommand(oCre, DetermineCombatRound());
}
}

View File

@@ -1,17 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "run_whipofshar"
/* Purpose: This is the OnItemActivated script for the Whip of Shar item
greanted to a player who casts the spell of the same name. It starts a
conversation where the player can choose to destroy the whip, since
it has lost its bonuses.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank, with credits to Nron Ksr for the spell itself.
//:: Last Updated On: March 17, 2004
//:://////////////////////////////////////////////
void main()
{
SetLocalObject(OBJECT_SELF, "oWhip", GetItemActivated());
AssignCommand(OBJECT_SELF, ActionStartConversation(OBJECT_SELF,
"whipofshar", TRUE, FALSE));
}

View File

@@ -1,17 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_cont_reunion"
/* Purpose: This is the conditional script that allows the appearance of
any of the "target" options of the Contingent Reunion conversation
when the target of the spell is a creature. This is so the caster can
choose who will trigger the teleportation, the caster ot the target.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
int StartingConditional()
{
if (!GetLocalInt(GetPCSpeaker(), "nMyTargetIsACreature") == TRUE)
return FALSE;
return TRUE;
}

View File

@@ -1,16 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_contreu0_yes"
/* Purpose: Returns TRUE if GetPCSpeaker() has a Contingent Reunion Zero
active.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
int StartingConditional()
{
object oPC = GetPCSpeaker();
if (GetLocalInt(oPC, "nContingentReunion0") > 0)
return TRUE;
return FALSE;
}

View File

@@ -1,16 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_contreu1_yes"
/* Purpose: Returns TRUE if GetPCSpeaker() has a Contingent Reunion One
active.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
int StartingConditional()
{
object oPC = GetPCSpeaker();
if (GetLocalInt(oPC, "nContingentReunion1") > 0)
return TRUE;
return FALSE;
}

View File

@@ -1,16 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_contreu2_yes"
/* Purpose: Returns TRUE if GetPCSpeaker() has a Contingent Reunion Two
active.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
int StartingConditional()
{
object oPC = GetPCSpeaker();
if (GetLocalInt(oPC, "nContingentReunion2") > 0)
return TRUE;
return FALSE;
}

View File

@@ -1,16 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_contreu3_yes"
/* Purpose: Returns TRUE if GetPCSpeaker() has a Contingent Reunion Three
active.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
int StartingConditional()
{
object oPC = GetPCSpeaker();
if (GetLocalInt(oPC, "nContingentReunion3") > 0)
return TRUE;
return FALSE;
}

View File

@@ -1,16 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_contreu4_yes"
/* Purpose: Returns TRUE if GetPCSpeaker() has a Contingent Reunion Four
active.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
int StartingConditional()
{
object oPC = GetPCSpeaker();
if (GetLocalInt(oPC, "nContingentReunion4") > 0)
return TRUE;
return FALSE;
}

View File

@@ -1,16 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_contreu5_yes"
/* Purpose: Returns TRUE if GetPCSpeaker() has a Contingent Reunion Five
active.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
int StartingConditional()
{
object oPC = GetPCSpeaker();
if (GetLocalInt(oPC, "nContingentReunion5") > 0)
return TRUE;
return FALSE;
}

View File

@@ -1,16 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_contrez_yes"
/* Purpose: Returns TRUE if GetPCSpeaker() has a Contingent Resurrection
active.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
int StartingConditional()
{
object oPC = GetPCSpeaker();
if (GetLocalInt(oPC, "nContingentRez") > 0)
return TRUE;
return FALSE;
}

View File

@@ -1,17 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_epicradial_0"
/* Purpose: Starting conditional that returns FALSE if no spells are on radial
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
int StartingConditional()
{
if (GetCastableFeatCount(GetPCSpeaker()) != 0)
return TRUE;
return FALSE;
}

View File

@@ -1,18 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_epicradial_ok"
/* Purpose: Starting conditional check to make sure player has 7 or less
spells assigned to their epic spell radial menu (prevents CRASH)
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
int StartingConditional()
{
if (GetCastableFeatCount(GetPCSpeaker()) < 7)
return TRUE;
return FALSE;
}

View File

@@ -1,13 +0,0 @@
//::///////////////////////////////////////////////
//:: FileName sc_has_loreskill
//:://////////////////////////////////////////////
int StartingConditional()
{
// Perform skill checks
if(!(GetSkillRank(SKILL_LORE, GetPCSpeaker()) >= 0))
return FALSE;
return TRUE;
}

View File

@@ -1,18 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_isepiccaster"
/* Purpose: Starting conditional, returns TRUE if the player is an epic caster.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
int StartingConditional()
{
object oPC = GetPCSpeaker();
if (GetIsEpicSpellcaster(oPC))
return TRUE;
return FALSE;
}

View File

@@ -1,11 +0,0 @@
//::///////////////////////////////////////////////
//:: FileName sc_ret_false
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Script Wizard
//:: Created On: 4/10/2004 7:29:53 PM
//:://////////////////////////////////////////////
int StartingConditional()
{
return FALSE;
}

View File

@@ -1,15 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "sc_runmartyr"
/* Purpose: This sets a CUSTOM TOKEN to be used in the conversation.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
int StartingConditional()
{
string sName = GetLocalString(GetPCSpeaker(), "sAllyForMyMartyrdom");
SendMessageToPC(GetPCSpeaker(), "The name is " + sName + ".");
SetCustomToken(3000, sName); // For conv.
return TRUE;
}

View File

@@ -1,79 +0,0 @@
//::///////////////////////////////////////////////
//:: Achille's Heel
//:: tm_s0_epachilles.nss
//:://////////////////////////////////////////////
/*
Grants the caster immunity to all spells level 9 and lower
at the price of CON: dropping to 3.
*/
//:://////////////////////////////////////////////
//:: Created By: Nron Ksr
//:: Created On: March 9, 2004
//:://////////////////////////////////////////////
/*
March 17, 2004- Boneshank - added RunHeel() func to keep CON penalty
*/
#include "prc_alterations"
#include "inc_epicspells"
#include "inc_dispel"
//#include "x2_inc_spellhook"
void RunHeel(object oTarget, int nDuration);
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ABJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_ACHHEEL))
{
//Declare major variables
object oPC = OBJECT_SELF;
effect eVis = EffectVisualEffect( VFX_DUR_SPELLTURNING );
effect eVis2 = EffectVisualEffect( VFX_DUR_GLOBE_INVULNERABILITY );
effect eDur = EffectVisualEffect( VFX_DUR_CESSATE_NEGATIVE );
int nDuration = 20;
//Link Effects
// effect eAbsorb = EffectSpellLevelAbsortption( 9, 0, SPELL_SCHOOL_GENERAL );
effect eAbsorb = EffectSpellImmunity( SPELL_ALL_SPELLS );
effect eLink = EffectLinkEffects( eVis, eAbsorb );
eLink = EffectLinkEffects( eLink, eVis2 );
eLink = EffectLinkEffects( eLink, eDur );
//Fire cast spell at event for the specified target
// SignalEvent( oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellID(), FALSE) );
SignalEvent(oPC,
EventSpellCastAt(OBJECT_SELF, SPELL_GREATER_SPELL_MANTLE, FALSE));
//Apply the VFX impact and effects
// * Can not be dispelled
eLink = ExtraordinaryEffect(eLink);
SPApplyEffectToObject( DURATION_TYPE_TEMPORARY, eLink,
oPC, RoundsToSeconds(nDuration), TRUE, -1, GetTotalCastingLevel(OBJECT_SELF) );
RunHeel(oPC, nDuration);
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}
void RunHeel(object oTarget, int nDuration)
{
int nPen = GetAbilityScore(oTarget, ABILITY_CONSTITUTION) - 3;
effect eCon = EffectAbilityDecrease(ABILITY_CONSTITUTION, nPen);
if (nDuration > 0)
{
UnequipAnyImmunityItems(oTarget, IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN);
DelayCommand(1.0, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY,
eCon, oTarget, 6.0, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
nDuration -= 1;
DelayCommand(6.0, RunHeel(oTarget, nDuration));
}
}

View File

@@ -1,85 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_allhoplost"
/* Purpose: All Hope Lost - causes all enemies within the area to make a will
save or resist the spell to avoid losing all courage and drop their items.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
#include "prc_add_spell_dc"
//#include "x2_inc_spellhook"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ENCHANTMENT);
if (!X2PreSpellCastCode() )
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_ALLHOPE))
{
int nCasterLevel = GetTotalCastingLevel(OBJECT_SELF);
float fDuration = RoundsToSeconds(20);
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
effect eFear = EffectFrightened();
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
float fDelay;
effect eLink = EffectLinkEffects(eFear, eMind);
eLink = EffectLinkEffects(eLink, eDur);
object oTarget, oWeap, oOffhand, oNewR, oNewL;
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,
eImpact, GetLocation(OBJECT_SELF));
oTarget = GetFirstObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF), TRUE);
while(GetIsObjectValid(oTarget))
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE,
OBJECT_SELF) && oTarget != OBJECT_SELF)
{
fDelay = PRCGetRandomDelay();
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_FEAR));
if(!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF), fDelay))
{
int nSaveDC = GetEpicSpellSaveDC(OBJECT_SELF, oTarget, SPELL_EPIC_ALLHOPE) + 10;
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nSaveDC,
SAVING_THROW_TYPE_FEAR, OBJECT_SELF, fDelay))
{
if (GetIsCreatureDisarmable(oTarget) && !GetPRCSwitch(PRC_PNP_DISARM))
{
oWeap = GetItemInSlot
(INVENTORY_SLOT_RIGHTHAND, oTarget);
oOffhand = GetItemInSlot
(INVENTORY_SLOT_LEFTHAND, oTarget);
if (oWeap != OBJECT_INVALID &&
GetDroppableFlag(oWeap))
{
CopyObject(oWeap, GetLocation(oTarget));
DelayCommand(2.0, DestroyObject(oWeap));
}
if (oOffhand != OBJECT_INVALID &&
GetDroppableFlag(oOffhand))
{
CopyObject(oOffhand, GetLocation(oTarget));
DelayCommand(2.0, DestroyObject(oOffhand));
}
}
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
}
}
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF), TRUE);
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,64 +0,0 @@
// The error code 5 prevention entry. Comment out or uncomment as necessary.
//Part Deux, Primogenitor 05/07/05
//const int COMPILER_BREAKS_ON_ME_OR_NOT_AGAIN = 0xffffffff;
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_alliedmart"
/* Purpose: Allied Martyr - The subject of this spell willingly allows all
damage suffered by the caster to be transfered to the subject.
NOTE: It is ASSUMED that any NPC partymember is automatically willing.
Other party members who are actual players will have a conversation
pop up where they are asked if they are willing to let it happen.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
#include "inc_dispel"
//#include "x2_inc_spellhook"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_CONJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_AL_MART))
{
object oTarget = PRCGetSpellTargetObject();
// Twice per round, for 20 hours.
int nDuration = FloatToInt(HoursToSeconds(20) / 3);
// Is the target an ally (in the caster's party)?
effect eVis = EffectVisualEffect(VFX_IMP_HOLY_AID);
if (GetFactionEqual(oTarget, OBJECT_SELF))
{
SetLocalObject(oTarget, "oAllyForMyMartyrdom", OBJECT_SELF);
SetLocalString(oTarget,
"sAllyForMyMartyrdom", GetName(OBJECT_SELF));
SetLocalInt(oTarget, "nTimeForMartyrdomFor", nDuration);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
// Is the party member another player?
if (GetIsPC(oTarget))
{
//We have to get the player's permission for this.
// A "Yes" from the player will use ActionTaken to run script.
AssignCommand(oTarget, ActionStartConversation(OBJECT_SELF,
"ss_alliedmartyr", TRUE, FALSE));
}
// The party member is NOT a player.
else
{
ExecuteScript("run_all_martyr", oTarget);
}
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,84 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_anarchys"
/* Purpose: Anarchy's Call - all non-chaotic targets are confused, and all
chaotic targets get 5 attacks per round and +10 saves vs. law.
Non-chaotic casters have alignment shift to law by d10, and spell fails.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
//#include "prc_add_spell_dc"
//#include "x2_inc_spellhook"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ENCHANTMENT);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_ANARCHY))
{
int nCasterLevel = GetTotalCastingLevel(OBJECT_SELF);
float fDuration = RoundsToSeconds(20);
effect eVis = EffectVisualEffect(VFX_FNF_HOWL_MIND );
effect eConf = PRCEffectConfused();
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eAtt = EffectModifyAttacks(5);
effect eST = EffectSavingThrowIncrease(SAVING_THROW_ALL, 10,
SAVING_THROW_TYPE_LAW);
effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eLink = EffectLinkEffects(eVis, eConf);
eLink = EffectLinkEffects(eLink, eDur);
effect eLink2 = EffectLinkEffects(eAtt, eVis);
eLink2 = EffectLinkEffects(eLink2, eDur2);
eLink2 = EffectLinkEffects(eLink2, eST);
float fDelay;
// Chaotic casters cast normally. All others go to ELSE.
if (GetAlignmentLawChaos(OBJECT_SELF) == ALIGNMENT_CHAOTIC)
{
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF), TRUE);
while(GetIsObjectValid(oTarget))
{
fDelay = PRCGetRandomDelay();
if (GetAlignmentLawChaos(oTarget) != ALIGNMENT_CHAOTIC)
{
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF,
SPELL_CONFUSION));
if(!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF), fDelay))
{
int nSaveDC = GetEpicSpellSaveDC(OBJECT_SELF, oTarget, SPELL_EPIC_ANARCHY);
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nSaveDC,
SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
{
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_TEMPORARY, eLink, oTarget,
fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
}
}
}
else
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_TEMPORARY, eLink2, oTarget, fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
oTarget = GetNextObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF), TRUE);
}
}
else // A non-chaotic caster will sway towards chaos on a casting.
{
FloatingTextStringOnCreature("*Spell fails. You are not chaotic*",
OBJECT_SELF, FALSE);
AdjustAlignment(OBJECT_SELF, ALIGNMENT_CHAOTIC, d10(), FALSE);
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,135 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_animusblas"
/* Purpose: Animus Blast
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
#include "nw_i0_generic"
void DoAnimationBit(location lTarget, object oCaster, int nCasterLvl);
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_ANBLAST))
{
int nCasterLvl = PRCGetCasterLevel();
float fDelay;
int nDam;
effect eExplode = EffectVisualEffect(VFX_IMP_PULSE_COLD);
effect eVis = EffectVisualEffect(VFX_IMP_FROST_L);
effect eDam, eLink;
location lTarget = PRCGetSpellTargetLocation();
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
DelayCommand(0.3,
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget));
DelayCommand(0.6,
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget));
DelayCommand(0.9,
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget));
DelayCommand(1.2,
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget));
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_HUGE, lTarget);
while (GetIsObjectValid(oTarget))
{
if (oTarget != OBJECT_SELF && !GetIsDM(oTarget) &&
!GetFactionEqual(oTarget) && spellsIsTarget(oTarget,
SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
{
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF,
PRCGetSpellId()));
fDelay = PRCGetRandomDelay();
if(!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF), fDelay))
{
nDam = d6(10);
// Reflex save for half damage.
if(PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget),
SAVING_THROW_TYPE_SPELL, OBJECT_SELF, fDelay))
nDam /= 2;
eDam = EffectDamage(nDam, DAMAGE_TYPE_COLD);
eLink = EffectLinkEffects(eDam, eVis);
eLink = EffectLinkEffects(eExplode, eLink);
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eLink, oTarget));
// Do the animation bit if the target dies from blast.
if (!MatchNonliving(MyPRCGetRacialType(oTarget)))
{
SetLocalInt(oTarget, "nAnBlasCheckMe", TRUE);
}
}
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_HUGE, lTarget);
}
DelayCommand(3.0, DoAnimationBit(lTarget, OBJECT_SELF, nCasterLvl));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}
void DoSpawnBit(object oCaster, object oTarget, string sSkel, int nCasterLvl)
{
if(GetPRCSwitch(PRC_MULTISUMMON))
{
//only create a new one if less than maximum count
int nMaxHDControlled = nCasterLvl * 4;
int nTotalControlled = GetControlledUndeadTotalHD(oCaster);
if(nTotalControlled < nMaxHDControlled)
{
MultisummonPreSummon(oCaster);
AssignCommand(oCaster, ApplyEffectAtLocation(DURATION_TYPE_PERMANENT,
EffectSummonCreature(sSkel, VFX_FNF_SUMMON_UNDEAD), GetLocation(oTarget)));
}
}
else
{
SetMaxHenchmen(999);
object oSkel = CreateObject(OBJECT_TYPE_CREATURE, sSkel,
GetLocation(oTarget));
AddHenchman(oCaster, oSkel);
SetAssociateListenPatterns(oSkel);
DetermineCombatRound(oSkel);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD), GetLocation(oTarget));
}
}
void DoAnimationBit(location lTarget, object oCaster, int nCasterLvl)
{
int nX = 0;
int nM = GetMaxHenchmen();
int nH = nM;
string sSkel = "NW_S_SKELWARR";
object oSkel;
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_HUGE, lTarget);
while (GetIsObjectValid(oTarget))
{
if (nX < 12)
{
if (GetIsDead(oTarget) &&
GetLocalInt(oTarget, "nAnBlasCheckMe") == TRUE)
{
float fDelay = IntToFloat(Random(60))/10.0;
DelayCommand(fDelay, DoSpawnBit(oCaster, oTarget, sSkel, nCasterLvl));
nX++;
}
}
DeleteLocalInt(oTarget, "nAnBlasCheckMe");
oTarget = GetNextObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_HUGE, lTarget);
}
DelayCommand(10.0, SetMaxHenchmen(nM));
}

View File

@@ -1,135 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_animusbliz"
/* Purpose: Animus Blizzard
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
#include "nw_i0_generic"
void DoAnimationBit(location lTarget, object oCaster, int nCastLevel);
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_ANBLIZZ))
{
int nCasterLvl = PRCGetCasterLevel();
float fDelay;
int nDam;
effect eExplode = EffectVisualEffect(VFX_IMP_PULSE_COLD);
effect eShake = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
effect eVis = EffectVisualEffect(VFX_IMP_FROST_L);
effect eDam, eLink;
location lTarget = PRCGetSpellTargetLocation();
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
DelayCommand(0.1,
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eShake, lTarget));
DelayCommand(0.3,
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget));
DelayCommand(0.6,
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget));
DelayCommand(0.9,
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget));
DelayCommand(1.0,
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eShake, lTarget));
DelayCommand(1.2,
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget));
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_HUGE, lTarget);
while (GetIsObjectValid(oTarget))
{
if (oTarget != OBJECT_SELF && !GetIsDM(oTarget) &&
!GetFactionEqual(oTarget) && spellsIsTarget(oTarget,
SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
{
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF,
PRCGetSpellId()));
fDelay = PRCGetRandomDelay();
if(!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF), fDelay))
{
nDam = d6(20);
// Reflex save for half damage.
if(PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget),
SAVING_THROW_TYPE_SPELL, OBJECT_SELF, fDelay))
nDam /= 2;
eDam = EffectDamage(nDam, DAMAGE_TYPE_COLD);
eLink = EffectLinkEffects(eDam, eVis);
eLink = EffectLinkEffects(eExplode, eLink);
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eLink, oTarget));
// Do the animation bit if the target dies from blast.
if (!MatchNonliving(MyPRCGetRacialType(oTarget)))
{
SetLocalInt(oTarget, "nAnBlizCheckMe", TRUE);
}
}
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_HUGE, lTarget);
}
DelayCommand(3.0, DoAnimationBit(lTarget, OBJECT_SELF, nCasterLvl));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}
void DoAnimationBit(location lTarget, object oCaster, int nCasterLvl)
{
int nX = 0;
int nM = GetMaxHenchmen();
int nH = nM;
string sWight = "NW_S_WIGHT";
object oWight;
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_HUGE, lTarget);
while (GetIsObjectValid(oTarget))
{
if (nX < 5)
{
if (GetIsDead(oTarget) &&
GetLocalInt(oTarget, "nAnBlizCheckMe") == TRUE)
{
if(GetPRCSwitch(PRC_MULTISUMMON))
{
//only create a new one if less than maximum count
int nMaxHDControlled = nCasterLvl * 4;
int nTotalControlled = GetControlledUndeadTotalHD(oCaster);
if(nTotalControlled < nMaxHDControlled)
{
MultisummonPreSummon(oCaster);
AssignCommand(oCaster, ApplyEffectAtLocation(DURATION_TYPE_PERMANENT,
EffectSummonCreature(sWight, VFX_FNF_SUMMON_UNDEAD), GetLocation(oTarget)));
}
}
else
{
nH++;
SetMaxHenchmen(nH);
oWight = CreateObject(OBJECT_TYPE_CREATURE, sWight,
GetLocation(oTarget));
AddHenchman(oCaster, oWight);
SetAssociateListenPatterns(oWight);
DetermineCombatRound(oWight);
}
nX++;
}
}
DeleteLocalInt(oTarget, "nAnBlizCheckMe");
oTarget = GetNextObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_HUGE, lTarget);
}
SetMaxHenchmen(nM);
}

View File

@@ -1,67 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_armyunfall"
/* Purpose: Army Unfallen epic spell - heals/resurrects all allies.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
#include "nw_i0_generic"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_CONJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_ARMY_UN))
{
effect eRez, eHeal, eBLD, eLink;
effect eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
effect eVis2 = EffectVisualEffect(VFX_FNF_PWSTUN);
effect eVis3 = EffectVisualEffect(VFX_IMP_HEALING_G);
int nX, nAlly, nBLD;
object oTarget = GetFirstFactionMember(OBJECT_SELF, FALSE);
while (GetIsObjectValid(oTarget))
{
nX = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget);
if(nX < 0) //account for temporary HP
nX = 0;
eRez = EffectResurrection();
eHeal = EffectHeal(nX);
eLink = EffectLinkEffects(eHeal, eVis);
eLink = EffectLinkEffects(eLink, eVis2);
eLink = EffectLinkEffects(eLink, eVis3);
if (nX && //make sure they can be healed
!MatchNonliving(MyPRCGetRacialType(oTarget)))
{
if (nX > 0)
{
if (GetIsDead(oTarget))
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eRez, oTarget);
ExecuteScript("prc_pw_armyunfall", oTarget);
if(GetPRCSwitch(PRC_PW_DEATH_TRACKING) && GetIsPC(oTarget))
SetPersistantLocalInt(oTarget, "persist_dead", FALSE);
}
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
nAlly++;
}
}
oTarget = GetNextFactionMember(OBJECT_SELF, FALSE);
}
if (GetPRCSwitch(PRC_EPIC_BACKLASH_DAMAGE) == TRUE)
{
nBLD = d6(nAlly);
eBLD = EffectDamage(nBLD);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eBLD, oTarget);
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,64 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_audi_stone"
/* Purpose: Audience of Stone - all enemies in the spell's radius makes a
FORT save or else turn to stone.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 13, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_A_STONE))
{
float fDelay;
effect eExplode = EffectVisualEffect(VFX_FNF_NATURES_BALANCE);
effect eVis = EffectVisualEffect(VFX_COM_CHUNK_STONE_MEDIUM);
effect eStone = EffectPetrify();
effect eLink = EffectLinkEffects(eVis, eStone);
location lTarget = PRCGetSpellTargetLocation();
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_LARGE, lTarget);
while (GetIsObjectValid(oTarget))
{
if (oTarget != OBJECT_SELF && !GetIsDM(oTarget) &&
!GetFactionEqual(oTarget) && spellsIsTarget(oTarget,
SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
{
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF,
PRCGetSpellId()));
fDelay = PRCGetRandomDelay(1.5, 2.5);
if(!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF), fDelay))
{
//Use bioware petrify command
PRCDoPetrification(PRCGetCasterLevel(), OBJECT_SELF, oTarget, PRCGetSpellId(), GetEpicSpellSaveDC(OBJECT_SELF, oTarget));
/*
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget),
SAVING_THROW_TYPE_SPELL, OBJECT_SELF, fDelay))
{
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eLink, oTarget));
}
*/
}
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_LARGE, lTarget);
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,33 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_celestcoun"
/* Purpose: Celestial Council - summons a "ghost" of a celestial NPC, which
then starts a conversation with the caster.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
//#include "x2_inc_spellhook"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_DIVINATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_CELCOUN))
{
DelayCommand(5.0, AssignCommand(OBJECT_SELF,
ActionStartConversation(OBJECT_SELF,
"ss_celestialcoun", TRUE, FALSE)));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,55 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_champvalor"
/* Purpose: Champion's Valor - grants the target immunity to mind-affecting
spells, knockdown, sneak attacks, and critical hits for 20 hours.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 11, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_CHAMP_V))
{
object oTarget = PRCGetSpellTargetObject();
int nCasterLvl = GetTotalCastingLevel(OBJECT_SELF);
int nDuration = nCasterLvl / 4;
if (nDuration < 5)
nDuration = 5;
float fDuration = TurnsToSeconds(nDuration);
if(GetPRCSwitch(PRC_PNP_CHAMPIONS_VALOR))
{
fDuration = HoursToSeconds(20);
}
effect eImm1 = EffectImmunity(IMMUNITY_TYPE_KNOCKDOWN);
effect eImm2 = EffectImmunity(IMMUNITY_TYPE_SNEAK_ATTACK);
effect eImm3 = EffectImmunity(IMMUNITY_TYPE_CRITICAL_HIT);
effect eImm4 = EffectImmunity(IMMUNITY_TYPE_MIND_SPELLS);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eVis = EffectVisualEffect(VFX_DUR_GLOW_WHITE);
effect eVis2 = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MINOR );
effect eLink = EffectLinkEffects(eImm1, eImm2);
eLink = EffectLinkEffects(eLink, eImm3);
eLink = EffectLinkEffects(eLink, eImm4);
eLink = EffectLinkEffects(eLink, eDur);
eLink = EffectLinkEffects(eLink, eVis);
eLink = EffectLinkEffects(eLink, eVis2);
eLink = ExtraordinaryEffect(eLink); // No dispelling it.
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget,
fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,111 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_cont_resur"
/* Purpose: Contingent Resurrection - sets a variable on the target, so that
in the case of their death, they will automatically resurrect.
NOTE: This contingency will last indefinitely, unless it triggers or the
player dispels it in the pre-rest conversation.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 13, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
// Brings oPC back to life, via the contingency of 'Contingent Resurrection'.
void ContingencyResurrect(object oTarget, int nCount, object oCaster);
void main()
{
object oCaster = OBJECT_SELF;
DeleteLocalInt(oCaster, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(oCaster, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_CONJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(oCaster, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(oCaster, SPELL_EPIC_CON_RES))
{
object oTarget = PRCGetSpellTargetObject();
location lTarget = GetLocation(oTarget);
effect eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_20);
effect eVisFail = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
// If the target is of a race that could be resurrected, go ahead.
int bRaise = FALSE;
int nMyRace = MyPRCGetRacialType(oTarget);
int nRace = GetRacialType(oTarget);
// PRC Shifting Polymorph -caused racial type override. Stored with offset +1 to differentiate value 0 from non-existence
int nShiftingTrueRace = GetPersistantLocalInt(oCaster, "PRC_ShiftingTrue_Race");
if(nShiftingTrueRace)
nMyRace = nShiftingTrueRace - 1;
if(nMyRace == RACIAL_TYPE_UNDEAD || nMyRace == RACIAL_TYPE_CONSTRUCT)
bRaise = FALSE;
else
bRaise = TRUE;
if(bRaise)
{
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lTarget);
PenalizeSpellSlotForCaster(oCaster);
// Start the contingency.
SetLocalInt(oCaster, "nContingentRez", GetLocalInt(oCaster, "nContingentRez") + 1);
ContingencyResurrect(oTarget, 1, oCaster);
}
else
{
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVisFail, lTarget);
SendMessageToPC(oCaster, "Spell failed - Invalid target!");
}
}
DeleteLocalInt(oCaster, "X2_L_LAST_SPELLSCHOOL_VAR");
}
void ContingencyResurrect(object oTarget, int nCount, object oCaster)
{
// If the contingency has been turned off, terminate HB
if(!GetLocalInt(oCaster, "nContingentRez"))
return;
// If the target isn't dead, just toss out a notice that the heartbeat is running
if(!GetIsDead(oTarget))
{
nCount++;
if((nCount % 20) == 0)
FloatingTextStringOnCreature("*Contingency active*", oTarget, FALSE);
}
else // Resurrect the target, and end the contingency.
{
nCount = 0;
effect eRez = EffectResurrection();
effect eHea = EffectHeal(GetMaxHitPoints(oTarget) + 10);
effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD);
// Resurrect the target
FloatingTextStringOnCreature("*Contingency triggered*", oTarget);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eRez, oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eHea, oTarget);
// Bookkeeping of epic spell slots in contingent use
RestoreSpellSlotForCaster(oCaster);
SetLocalInt(oCaster, "nContingentRez", GetLocalInt(oCaster, "nContingentRez") - 1);
// PW death stuff
ExecuteScript("prc_pw_contress", oTarget);
if(GetPRCSwitch(PRC_PW_DEATH_TRACKING) && GetIsPC(oTarget))
SetPersistantLocalInt(oTarget, "persist_dead", FALSE);
}
DelayCommand(6.0, ContingencyResurrect(oTarget, nCount, oCaster)); //Schedule next heartbeat (it will terminate itself if no longer needed)
}

View File

@@ -1,57 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_continreun"
/* Purpose: Contingent Reunion - upon casting this at a target, the caster
must choose a condition which will later trigger the teleportation to
the target.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
//#include "x2_inc_spellhook"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_CON_REU))
{
// Is the target a place, creature, or object?
object oTarget = PRCGetSpellTargetObject();
location lTarget = PRCGetSpellTargetLocation();
effect eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_20);
if (oTarget != OBJECT_INVALID)
{
if (oTarget == OBJECT_SELF) // If target is self, becomes location
{
SetLocalLocation(OBJECT_SELF, "lSpellTarget", lTarget);
SetLocalObject(OBJECT_SELF, "oSpellTarget", OBJECT_INVALID);
}
else
{
SetLocalObject(OBJECT_SELF, "oSpellTarget", oTarget);
if (GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
SetLocalInt(OBJECT_SELF, "nMyTargetIsACreature", TRUE);
}
}
else
{
SetLocalLocation(OBJECT_SELF, "lSpellTarget", lTarget);
SetLocalObject(OBJECT_SELF, "oSpellTarget", OBJECT_INVALID);
}
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lTarget);
AssignCommand(OBJECT_SELF, ActionStartConversation(OBJECT_SELF,
"ss_cont_reunion", TRUE, FALSE));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,45 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_deadeye"
/* Purpose: Deadeye Sense - Increases the target's AB by +20 for 20 hours.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 11, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
if (!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oCaster = OBJECT_SELF;
if(GetCanCastSpell(oCaster, SPELL_EPIC_DEADEYE))
{
object oTarget = PRCGetSpellTargetObject();
int nCasterLvl = GetTotalCastingLevel(oCaster);
int nDuration = nCasterLvl / 4;
if(nDuration < 5)
nDuration = 5;
effect eVis = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eAttack = EffectAttackIncrease(20);
effect eLink = EffectLinkEffects(eAttack, eDur);
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_HOLY_30);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget);
if(GetIsReactionTypeFriendly(oTarget) || GetFactionEqual(oTarget))
{
float fDelay = PRCGetRandomDelay(0.4, 1.1);
//Fire spell cast at event for target
SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_BLESS, FALSE));
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, TurnsToSeconds(nDuration), TRUE, -1, nCasterLvl));
}
}
PRCSetSchool();
}

View File

@@ -1,105 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_direwinter"
/* Purpose: Dire Winter - turns entire area the spell was cast in into a
winter-wonderland.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
void DoWinterCheck(object oArea, float fDuration);
const int X2_TL_GROUNDTILE_ICE = 426;
void TLChangeAreaGroundTiles(object oArea, int nGroundTileConst, int nColumns, int nRows, float fZOffset = -0.4f )
{
// Author: Brad "Cutscene" Prince
// * flood area with tiles
object oTile;
// * put ice everywhere
vector vPos;
vPos.x = 5.0;
vPos.y = 0.0;
vPos.z = fZOffset;
float fFace = 0.0;
location lLoc;
// * fill x axis
int i, j;
for (i=0 ; i <= nColumns; i++)
{
vPos.y = -5.0;
// fill y
for (j=0; j <= nRows; j++)
{
vPos.y = vPos.y + 10.0;
lLoc = Location(oArea, vPos, fFace);
// Ice tile (even though it says water).
oTile = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_invisobj", lLoc,FALSE, "x2_tmp_tile");
SetPlotFlag(oTile,TRUE);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(nGroundTileConst), oTile);
}
vPos.x = vPos.x + 10.0;
}
}
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_DIREWIN))
{
object oArea = GetArea(OBJECT_SELF);
float fDuration = HoursToSeconds(20) - 6.0;
TLChangeAreaGroundTiles(oArea, X2_TL_GROUNDTILE_ICE, 32, 32, 0.3);
SetWeather(oArea, WEATHER_SNOW);
// Add icy look to all placeables in area.
effect eIce = EffectVisualEffect(VFX_DUR_ICESKIN);
object oItem = GetFirstObjectInArea(oArea);
while (oItem != OBJECT_INVALID)
{
if (GetObjectType(oItem) == OBJECT_TYPE_PLACEABLE)
{
float fDelay = PRCGetRandomDelay();
DelayCommand(fDelay,
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY,
eIce, oItem, fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
}
oItem = GetNextObjectInArea(oArea);
}
DelayCommand(6.0, DoWinterCheck(oArea, fDuration));
DelayCommand(fDuration, SetWeather(oArea, WEATHER_USE_AREA_SETTINGS));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}
void DoWinterCheck(object oArea, float fDuration)
{
int nDam;
effect eDam;
object oTarget = GetFirstObjectInArea(oArea);
while (oTarget != OBJECT_INVALID)
{
if (GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
{
nDam = d6(2);
eDam = EffectDamage(nDam, DAMAGE_TYPE_COLD);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
}
oTarget = GetNextObjectInArea(oArea);
}
fDuration -= 6.0;
if (fDuration > 1.0)
DelayCommand(6.0, DoWinterCheck(oArea, fDuration));
}

View File

@@ -1,51 +0,0 @@
//::///////////////////////////////////////////////
//:: Dragon Knight
//:: X2_S2_DragKnght
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Summons an adult red dragon for you to
command.
*/
//:://////////////////////////////////////////////
//:: Created By: Andrew Nobbs
//:: Created On: Feb 07, 2003
//:://////////////////////////////////////////////
/*
Altered by Boneshank, for purposes of the Epic Spellcasting project.
*/
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_CONJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_DRG_KNI))
{
//Declare major variables
int nDuration = 20;
string sSummon = "x2_s_drgred001";
effect eSummon = EffectSummonCreature(sSummon,481,0.0f,TRUE);
effect eVis = EffectVisualEffect(460);
// * make it so dragon cannot be dispelled
eSummon = ExtraordinaryEffect(eSummon);
//Apply the summon visual and summon the dragon.
MultisummonPreSummon();
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon,PRCGetSpellTargetLocation(), RoundsToSeconds(nDuration));
DelayCommand(1.0f,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis,PRCGetSpellTargetLocation()));
DelayCommand(0.5, AugmentSummonedCreature(sSummon));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,141 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_dreamscape"
/* Purpose: Dreamscape - This is a PLOT spell. A module builder MUST take
this spell into consideration when designing their module, or else they
should exclude it. It depends completely on the builder placing
something relevant into the module for it. Read comments in coding for
hints and details.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void NoValidWP(object oPC);
void TeleportPartyToLocation(object oPC, location lWP);
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_DREAMSC))
{
// Declarations.
location lDestination;
location lWP;
object oWP;
// Check for how many "successful" castings there have been. It is up
// to the MODULE BUILDER to increment or decrement this number!!!!
int nNumCasts = GetLocalInt(OBJECT_SELF, "nDreamscapeCount");
// Where will the Dreamscape take you this time?
switch (nNumCasts)
{
case 0: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
// I have added extra cases. It will never reach them unless you
// increment the local int "nDreamscapeCount" somewhere along the
// way. If you do not do this, the case will ALWAYS be zero.
case 1: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
case 2: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
case 3: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
case 4: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
case 5: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
case 6: oWP = GetWaypointByTag("YOUR_WAYPOINTS_TAG");
if (oWP == OBJECT_INVALID) // There is no WP by that TAG.
{
// Start up a conversation instead.
NoValidWP(OBJECT_SELF);
break;
}
lWP = GetLocation(oWP);
TeleportPartyToLocation(OBJECT_SELF, lWP);
break;
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}
void NoValidWP(object oPC)
{
// This is the back-up plan. If there is no waypoint to go to, maybe you
// have an event happening in a conversation that will send them somewhere.
ActionStartConversation(OBJECT_SELF, "ss_dreamscape", TRUE, FALSE);
}
void TeleportPartyToLocation(object oPC, location lWP)
{
effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON);
// Cycle through all party members and teleport them to the waypoint.
object oMem = GetFirstFactionMember(oPC, FALSE);
while (oMem != OBJECT_INVALID)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oMem);
FloatingTextStringOnCreature("*begins to dream...*", oMem);
DelayCommand(3.0, AssignCommand(oMem, JumpToLocation(lWP)));
oMem = GetNextFactionMember(oPC, FALSE);
}
}

View File

@@ -1,64 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_dullblades"
/* Purpose: Dullblades - grants 100% protection against slashing
damage for 24 hours.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ABJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_DULBLAD))
{
object oTarget = PRCGetSpellTargetObject();
int nCasterLvl = GetTotalCastingLevel(OBJECT_SELF);
int nDuration = 10 + nCasterLvl;
float fDuration = RoundsToSeconds(nDuration);
effect eVis = EffectVisualEffect(VFX_IMP_AC_BONUS);
effect eDur = EffectVisualEffect(VFX_DUR_GLOW_WHITE);
effect eProt = EffectDamageImmunityIncrease(DAMAGE_TYPE_SLASHING, 50);
if(GetPRCSwitch(PRC_PNP_DULLBLADES))
{
eProt = EffectDamageImmunityIncrease
(DAMAGE_TYPE_SLASHING, 100);
fDuration = HoursToSeconds(20);
}
effect eLink = EffectLinkEffects(eProt, eDur);
// if this option has been enabled, the caster will take backlash damage
if (GetPRCSwitch(PRC_EPIC_BACKLASH_DAMAGE) == TRUE)
{
int nDamage = d6(10);
effect eDamVis = EffectVisualEffect(VFX_IMP_SONIC);
effect eDam = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL);
DelayCommand(2.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT,
eDamVis, OBJECT_SELF));
DelayCommand(2.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT,
eDam, OBJECT_SELF));
}
if(GetIsReactionTypeFriendly(oTarget) || GetFactionEqual(oTarget))
{
//Fire spell cast at event for target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(),
FALSE));
SPApplyEffectToObject(DURATION_TYPE_INSTANT,
eVis, oTarget);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY,
eLink, oTarget, fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,65 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_dweomerthf"
/* Purpose: Dweomer Thief - the target loses a spell from the highest level,
which subsequently turns into a scroll in the caster's inventory.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
//#include "x2_inc_spellhook"
#include "prc_getbest_inc"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ABJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_DWEO_TH))
{
object oTarget = PRCGetSpellTargetObject();
int nTargetSpell;
effect eVis = EffectVisualEffect(VFX_IMP_DISPEL);
effect eVis2 = EffectVisualEffect(VFX_IMP_DOOM);
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, PRCGetSpellId()));
if (GetObjectType(oTarget) == OBJECT_TYPE_CREATURE &&
oTarget != OBJECT_SELF)
{
if (!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF)))
{
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget)+5,
SAVING_THROW_TYPE_NONE))
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT,
eVis, oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT,
eVis2, oTarget);
nTargetSpell = GetBestAvailableSpell(oTarget);
if (nTargetSpell != 99999)
{
int nSpellIP = StringToInt(Get2DACache
("des_crft_spells", // Name of the 2DA file.
"IPRP_SpellIndex", // The column.
nTargetSpell)); // The row.
object oScroll = CreateItemOnObject("it_dweomerthief",
OBJECT_SELF);
AddItemProperty(DURATION_TYPE_PERMANENT,
ItemPropertyCastSpell(nSpellIP,
IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE),
oScroll);
DecrementRemainingSpellUses(oTarget, nTargetSpell);
}
}
}
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,78 +0,0 @@
//::///////////////////////////////////////////////
//:: Epic Spell: Enslave
//:: Author: Boneshank (Don Armstrong)
#include "prc_alterations"
#include "inc_epicspells"
void RemoveDomination(object oCreature, object oSlaver = OBJECT_SELF)
{
effect eComp = SupernaturalEffect(EffectCutsceneDominated());
effect e = GetFirstEffect(oCreature);
while (GetIsEffectValid(e))
{
if (GetEffectType(e) == GetEffectType(eComp) && GetEffectCreator(e) == oSlaver)
{
RemoveEffect(oCreature, e);
}
e = GetNextEffect(oCreature);
}
}
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ENCHANTMENT);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_ENSLAVE))
{
//Declare major variables
object oTarget = PRCGetSpellTargetObject();
object oOldSlave = GetLocalObject(OBJECT_SELF, "EnslavedCreature");
effect eDom = EffectCutsceneDominated();
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATED);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
//Link domination and persistant VFX
effect eLink = EffectLinkEffects(eMind, eDom);
eLink = EffectLinkEffects(eLink, eDur);
effect eLink2 = SupernaturalEffect(eLink);
effect eVis = EffectVisualEffect(VFX_IMP_DOMINATE_S);
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_DOMINATE_MONSTER, FALSE));
//Make sure the target is a monster
if(!GetIsReactionTypeFriendly(oTarget))
{
//Make SR Check
if (!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF)) && !GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS) && !GetIsImmune(oTarget, IMMUNITY_TYPE_DOMINATE) && !GetIsPC(oTarget))
{
//Make a Will Save
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget), SAVING_THROW_TYPE_MIND_SPELLS))
{
//Release old slave
if (GetIsObjectValid(oOldSlave)) RemoveDomination(oOldSlave);
//Apply linked effects and VFX Impact
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink2, oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
SetLocalObject(OBJECT_SELF, "EnslavedCreature", oTarget);
}
else
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE), oTarget);
}
else
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE), oTarget);
}
else
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE), oTarget);
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,35 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_epicrepuls"
/* Purpose: Epic Repulsion - repel a specific creature type for 24 hours.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On:
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
//#include "x2_inc_spellhook"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ABJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_EP_RPLS))
{
object oTarget = PRCGetSpellTargetObject();
location lTarget = GetLocation(oTarget);
effect eVis = EffectVisualEffect(VFX_FNF_PWSTUN);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lTarget);
SetLocalObject(OBJECT_SELF, "oRepulsionTarget", oTarget);
AssignCommand(OBJECT_SELF, ActionStartConversation(OBJECT_SELF,
"ss_ep_repulsion", TRUE, FALSE));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,75 +0,0 @@
//::///////////////////////////////////////////////
//:: Epic Spell: Eternal Freedom
//:: Author: Boneshank (Don Armstrong)
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
#include "inc_dispel"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ABJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_ET_FREE))
{
//Declare major variables
object oTarget = PRCGetSpellTargetObject();
object oSkin;
itemproperty ip1 = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_PARALYSIS);
itemproperty ip2 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENTANGLE);
itemproperty ip3 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLOW);
itemproperty ip4 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HOLD_MONSTER);
itemproperty ip5 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HOLD_PERSON);
itemproperty ip6 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
itemproperty ip7 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HOLD_ANIMAL);
itemproperty ip8 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_POWER_WORD_STUN);
itemproperty ip9 = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
effect eDur = EffectVisualEffect(VFX_DUR_FREEDOM_OF_MOVEMENT);
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_FREEDOM_OF_MOVEMENT, FALSE));
//Search for and remove the above negative effects
effect eLook = GetFirstEffect(oTarget);
while(GetIsEffectValid(eLook))
{
if(GetEffectType(eLook) == EFFECT_TYPE_PARALYZE ||
GetEffectType(eLook) == EFFECT_TYPE_ENTANGLE ||
GetEffectType(eLook) == EFFECT_TYPE_SLOW ||
GetEffectType(eLook) == EFFECT_TYPE_MOVEMENT_SPEED_DECREASE ||
GetEffectType(eLook) == EFFECT_TYPE_PETRIFY ||
GetEffectType(eLook) == EFFECT_TYPE_SLEEP ||
GetEffectType(eLook) == EFFECT_TYPE_STUNNED)
{
RemoveEffect(oTarget, eLook);
}
eLook = GetNextEffect(oTarget);
}
//Apply properties.
oSkin = GetPCSkin(oTarget);
IPSafeAddItemProperty(oSkin, ip1);
IPSafeAddItemProperty(oSkin, ip2);
IPSafeAddItemProperty(oSkin, ip3);
IPSafeAddItemProperty(oSkin, ip4);
IPSafeAddItemProperty(oSkin, ip5);
IPSafeAddItemProperty(oSkin, ip6);
IPSafeAddItemProperty(oSkin, ip7);
IPSafeAddItemProperty(oSkin, ip8);
IPSafeAddItemProperty(oSkin, ip9);
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eDur), oTarget);
DelayCommand(6.0, GiveFeat(oTarget, 398));
FloatingTextStringOnCreature("You have gained the ability " +
"to move freely at all times!", oTarget, FALSE);
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,33 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_fiendwords"
/* Purpose: Fiendish Words - summons a "ghost" of a fiend NPC, which
then starts a conversation with the caster.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
//#include "x2_inc_spellhook"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_DIVINATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_FIEND_W))
{
DelayCommand(5.0, AssignCommand(OBJECT_SELF,
ActionStartConversation(OBJECT_SELF,
"ss_fiendishwords", TRUE, FALSE)));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,51 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_fleetness"
/* Purpose: Fleetness of Foot - grants the target double the movement rate
for 20 hours. Yowza!
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 11, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_FLEETNS))
{
object oTarget = PRCGetSpellTargetObject();
int nDuration = 20;
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eVis = EffectVisualEffect(VFX_IMP_HASTE);
effect eImpact = EffectVisualEffect(VFX_IMP_GOOD_HELP);
effect eSpeed = EffectMovementSpeedIncrease(99);
effect eLink = EffectLinkEffects(eSpeed, eDur);
float fDelay;
if(GetIsReactionTypeFriendly(oTarget) || GetFactionEqual(oTarget))
{
fDelay = PRCGetRandomDelay(0.4, 1.1);
//Fire spell cast at event for target
SignalEvent(oTarget, EventSpellCastAt
(OBJECT_SELF, SPELL_EXPEDITIOUS_RETREAT, FALSE));
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eImpact, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eVis, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_TEMPORARY, eLink, oTarget,
HoursToSeconds(nDuration), TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,157 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_gem_cage"
/* Purpose: Gem Cage - You attempt to trap the target into a gem. The spell
first looks at the HD of the target creature, then looks for a gem
valuable enough to entrap the target in. If successful, you will then be
able to release that creature again at some other place and time.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
int GetNeededGemValue(int nHD);
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_GEMCAGE))
{
object oTarget = PRCGetSpellTargetObject();
if (!GetPlotFlag(oTarget) && // Plot creatures cannot be Caged, ever.
!GetIsDM(oTarget) && // Neither can DM's.
!GetIsPC(oTarget)) // And neither can other players.
{
int nHD = GetHitDice(oTarget);
int nTestVal, nCurrentVal, nTargVal;
// How valuable of a gem do we need to Gem Cage the target?
nTargVal = GetNeededGemValue(nHD);
string sTarget = GetResRef(oTarget);
string sName = GetName(oTarget);
if (sTarget == "") sTarget = "";
itemproperty ipGemCage =
ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER,
IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE);
object oGem, oCopy;
// Look for an appropriate gem in the caster's inventory.
object oItem = GetFirstItemInInventory(OBJECT_SELF);
while (oItem != OBJECT_INVALID)
{ // Is the item a gem?
if (GetBaseItemType(oItem) == BASE_ITEM_GEM)
{
int nStack = GetNumStackedItems(oItem);
// What's the value of the gem?
int nTestVal = GetGoldPieceValue(oItem) /nStack;
// Is the gem's value greater than the target value?
if(nTestVal >= nTargVal)
{ // If this is the first viable gem, state it.
if (oGem == OBJECT_INVALID) oGem = oItem;
else // If not the first viable gem, compare them.
{ // What's the value of least valuable but still
// viable gem?
nCurrentVal = GetGoldPieceValue(oGem);
// Is the new gem less valuable? If so, use it.
if (nTestVal <= nCurrentVal)
oGem = oItem;
}
}
}
oItem = GetNextItemInInventory(OBJECT_SELF);
}
if (oGem != OBJECT_INVALID)
{ // Onward! Cast the spell on the target.
// Spell Resistance check:
if (!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF), 1.0))
{ // Will Saving Throw.
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget)))
{ // Choose the Gem Cage VFX based on gem value.
int nStack = GetNumStackedItems(oGem);
int nVis = 799;
if (GetGoldPieceValue(oGem) > 1600) nVis = 800;
if (GetGoldPieceValue(oGem) > 3500) nVis = 798;
effect eVis = EffectVisualEffect(nVis);
effect eImp = EffectVisualEffect(VFX_IMP_DESTRUCTION);
// Do fancy visual.
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis,
oTarget);
DelayCommand(0.2,
SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eImp, oTarget));
DelayCommand(1.2,
SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eImp, oTarget));
DelayCommand(2.2,
SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eImp, oTarget));
// Cage the target.
DelayCommand(2.8, DestroyObject(oTarget));
if (nStack > 1)
DelayCommand(2.6, SetItemStackSize (oGem, --nStack));
else
DelayCommand(2.6, DestroyObject(oGem));
// Create the new item, readying it for use later.
oCopy = CreateItemOnObject
("it_gemcage_gem", OBJECT_SELF);
SetLocalString(oCopy, "sCagedCreature", sTarget);
SetLocalString(oCopy, "sNameOfCreature", sName);
// Debug message
SendMessageToPC(OBJECT_SELF,
GetLocalString(oCopy, "sCagedCreature"));
}
}
}
else
FloatingTextStringOnCreature("*Spell failed! No viable gems.*",
OBJECT_SELF, FALSE);
}
else
FloatingTextStringOnCreature("*Spell failed! Invalid target.*",
OBJECT_SELF, FALSE);
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}
int GetNeededGemValue(int nHD)
{
int nValue;
switch (nHD)
{
case 1: case 2:
nValue = 250;
break;
case 3: case 4: case 5: case 6:
nValue = 1000;
break;
case 7: case 8: case 9:
nValue = 1500;
break;
case 10: case 11: case 12:
nValue = 2000;
break;
case 13: case 14: case 15: case 16: case 17:
nValue = 3000;
break;
case 18: case 19: case 20: case 21:
nValue = 4000;
break;
case 22: case 23: case 24:
nValue = 6000;
break;
default:
nValue = 10000;
break;
}
return nValue;
}

View File

@@ -1,98 +0,0 @@
//::///////////////////////////////////////////////
//:: Epic Spell: Godsmite
//:: Author: Boneshank (Don Armstrong)
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
#include "x0_i0_position"
void main()
{
if (!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
object oCaster = OBJECT_SELF;
if(GetCanCastSpell(oCaster, SPELL_EPIC_GODSMIT))
{
//Declare major variables
object oTarget = PRCGetSpellTargetObject();
int nSpellPower = GetTotalCastingLevel(oCaster);
int nDam, iCAling, iTAling;
object oArea = GetArea(oTarget);
location lTarget;
// if this option has been enabled, the caster will take backlash damage
if(GetPRCSwitch(PRC_EPIC_BACKLASH_DAMAGE))
{
effect eCast = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY);
int nDamage = d4(nSpellPower);
effect eDam = EffectDamage(nDamage, DAMAGE_TYPE_DIVINE);
DelayCommand(3.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, oCaster));
DelayCommand(3.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oCaster));
}
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(oCaster, PRCGetSpellId()));
//Roll damage
iCAling = GetAlignmentGoodEvil(oCaster);
iTAling = GetAlignmentGoodEvil(oTarget);
if(iCAling == iTAling)
nDam = d4(nSpellPower);
else if(iCAling == ALIGNMENT_NEUTRAL || iTAling == ALIGNMENT_NEUTRAL)
nDam = d6(nSpellPower);
else
nDam = d8(nSpellPower);
iCAling = GetAlignmentLawChaos(oCaster);
iTAling = GetAlignmentLawChaos(oTarget);
if(iCAling == iTAling)
nDam += d4(nSpellPower);
else if(iCAling == ALIGNMENT_NEUTRAL || iTAling == ALIGNMENT_NEUTRAL)
nDam += d6(nSpellPower);
else
nDam += d8(nSpellPower);
//Set damage effect
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, GetEpicSpellSaveDC(oCaster, oTarget), SAVING_THROW_TYPE_SPELL, oCaster))
{
nDam /=2;
// This script does nothing if it has Mettle, bail
if(GetHasMettle(oTarget, SAVING_THROW_FORT))
nDam = 0;
}
effect eDam = EffectDamage(nDam, DAMAGE_TYPE_DIVINE, DAMAGE_POWER_PLUS_TWENTY);
lTarget = GetRandomLocation(oArea, oTarget, 4.0);
DelayCommand(0.4, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget));
lTarget = GetRandomLocation(oArea, oTarget, 3.5);
DelayCommand(0.8, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget));
lTarget = GetRandomLocation(oArea, oTarget, 3.0);
DelayCommand(1.2, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget));
lTarget = GetRandomLocation(oArea, oTarget, 2.5);
DelayCommand(1.6, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget));
lTarget = GetRandomLocation(oArea, oTarget, 2.0);
DelayCommand(2.0, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget));
lTarget = GetRandomLocation(oArea, oTarget, 1.5);
DelayCommand(2.4, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget));
lTarget = GetRandomLocation(oArea, oTarget, 1.0);
DelayCommand(2.7, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget));
lTarget = GetRandomLocation(oArea, oTarget, 0.5);
DelayCommand(3.0, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget));
ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oTarget));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_BIGBYS_INTERPOSING_HAND), oTarget, 0.75, TRUE, -1, nSpellPower);
DelayCommand(0.75, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_BIGBYS_GRASPING_HAND), oTarget, 1.0, TRUE, -1, nSpellPower));
DelayCommand(1.75, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_BIGBYS_CLENCHED_FIST), oTarget, 0.75, TRUE, -1, nSpellPower));
DelayCommand(2.5, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_BIGBYS_CRUSHING_HAND), oTarget, 1.0, TRUE, -1, nSpellPower));
DelayCommand(3.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_HIT_DIVINE), oTarget));
DelayCommand(3.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_CHUNK_STONE_MEDIUM), oTarget));
DelayCommand(3.1, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
}
PRCSetSchool();
}

View File

@@ -1,64 +0,0 @@
//::///////////////////////////////////////////////
//:: Greater Ruin
//:: X2_S2_Ruin
//:: Copyright (c) 2003 Bioware Corp.
//:://////////////////////////////////////////////
/*
// The caster deals 35d6 damage to a single target
fort save for half damage
*/
//:://////////////////////////////////////////////
//:: Created By: Andrew Nobbs
//:: Created On: Nov 18, 2002
//:://////////////////////////////////////////////
/*
Altered by Boneshank, for purposes of the Epic Spellcasting project.
*/
#include "prc_alterations"
//#include "inc_dispel"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_GR_RUIN))
{
//Declare major variables
object oTarget = PRCGetSpellTargetObject();
float fDist = GetDistanceBetween(OBJECT_SELF, oTarget);
float fDelay = fDist/(3.0 * log(fDist) + 2.0);
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, PRCGetSpellId()));
//Roll damage
int nDam = d6(35);
//Set damage effect
if (PRCMySavingThrow(SAVING_THROW_FORT,oTarget,GetEpicSpellSaveDC(OBJECT_SELF, oTarget),SAVING_THROW_TYPE_SPELL,OBJECT_SELF) != 0 )
{
nDam /=2;
if (GetHasMettle(oTarget, SAVING_THROW_FORT))
// This script does nothing if it has Mettle, bail
nDam = 0;
}
effect eDam = EffectDamage(nDam, DAMAGE_TYPE_POSITIVE, DAMAGE_POWER_PLUS_TWENTY);
ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oTarget));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(487), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_BLOOD_CRT_RED), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_CHUNK_BONE_MEDIUM), oTarget);
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,36 +0,0 @@
//::///////////////////////////////////////////////
//:: Epic Spell: Greater Spell Resistance
//:: Author: Boneshank (Don Armstrong)
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_GR_SP_RE))
{
object oTarget = PRCGetSpellTargetObject();
effect eSR = EffectSpellResistanceIncrease(35);
effect eVis = EffectVisualEffect(VFX_IMP_MAGIC_PROTECTION);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eDur2 = EffectVisualEffect(249);
effect eLink = EffectLinkEffects(eSR, eDur);
eLink = EffectLinkEffects(eLink, eDur2);
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_SPELL_RESISTANCE, FALSE));
//Apply VFX impact and SR bonus effect
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, HoursToSeconds(20), TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,71 +0,0 @@
//::///////////////////////////////////////////////
//:: Time Stop
//:: NW_S0_TimeStop.nss
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_grtimestop"
/* Purpose: Greater Timestop - in all ways this spell is the same as
Timestop except for the duration, which is doubled.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 11, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_timestop"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
int nDuration = d4(2)+2;
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_GR_TIME))
{
location lTarget = PRCGetSpellTargetLocation();
effect eVis = EffectVisualEffect(VFX_FNF_TIME_STOP);
effect eTime = EffectTimeStop();
float fDuration = RoundsToSeconds(nDuration);
if(GetPRCSwitch(PRC_TIMESTOP_BIOWARE_DURATION))
fDuration = 18.0;
if(GetPRCSwitch(PRC_TIMESTOP_LOCAL))
{
eTime = EffectAreaOfEffect(VFX_PER_NEW_TIMESTOP);
eTime = EffectLinkEffects(eTime, EffectEthereal());
if(GetPRCSwitch(PRC_TIMESTOP_NO_HOSTILE))
{
object oCaster = OBJECT_SELF;
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCaster),fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCaster),fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_BULLETS, oCaster),fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_ARROWS, oCaster),fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_BOLTS, oCaster),fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oCaster),fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oCaster),fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oCaster),fDuration);
DelayCommand(fDuration, RemoveTimestopEquip());
/*
string sSpellscript = PRCGetUserSpecificSpellScript();
DelayCommand(fDuration, PRCSetUserSpecificSpellScript(sSpellscript));
PRCSetUserSpecificSpellScript("tsspellscript");
now in main spellhook*/
}
}
SignalEvent(OBJECT_SELF, EventSpellCastAt(OBJECT_SELF, SPELL_TIME_STOP, FALSE));
DelayCommand(0.75, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTime, OBJECT_SELF, fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lTarget);
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,114 +0,0 @@
//::///////////////////////////////////////////////
//:: Hellball
//:: X2_S2_HELLBALL
//:: Copyright (c) 2003 Bioware Corp.
//:://////////////////////////////////////////////
//:: Created By: Andrew Noobs, Georg Zoeller
//:: Created On: 2003-08-20
//:://////////////////////////////////////////////
/*
Altered by Boneshank, for purposes of the Epic Spellcasting project.
*/
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_HELBALL))
{
//Declare major variables
int nDamage1, nDamage2, nDamage3, nDamage4;
float fDelay;
effect eExplode = EffectVisualEffect(464);
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
effect eVis2 = EffectVisualEffect(VFX_IMP_ACID_L);
effect eVis3 = EffectVisualEffect(VFX_IMP_SONIC);
// if this option has been enabled, the caster will take damage for casting
// epic spells, as descripbed in the ELHB
if (GetPRCSwitch(PRC_EPIC_BACKLASH_DAMAGE) == TRUE)
{
effect eCast = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
int nDamage5 = d6(10);
effect eDam5 = EffectDamage(nDamage5, DAMAGE_TYPE_NEGATIVE);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, OBJECT_SELF);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam5, OBJECT_SELF);
}
effect eDam1, eDam2, eDam3, eDam4, eDam5, eKnock;
eKnock= EffectKnockdown();
location lTarget = PRCGetSpellTargetLocation();
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 20.0f, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
int nTotalDamage;
while (GetIsObjectValid(oTarget))
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
{
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, PRCGetSpellId()));
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20 + 0.5f;
//Roll damage for each target
nDamage1 = d6(10);
nDamage2 = d6(10);
nDamage3 = d6(10);
nDamage4 = d6(10);
// no we don't care about evasion. there is no evasion to hellball
if (PRCMySavingThrow(SAVING_THROW_REFLEX,oTarget,GetEpicSpellSaveDC(OBJECT_SELF, oTarget),SAVING_THROW_TYPE_SPELL,OBJECT_SELF,fDelay) >0)
{
nDamage1 /=2;
nDamage2 /=2;
nDamage3 /=2;
nDamage4 /=2;
}
nTotalDamage = nDamage1+nDamage2+nDamage3+nDamage4;
//Set the damage effect
eDam1 = EffectDamage(nDamage1, DAMAGE_TYPE_ACID);
eDam2 = EffectDamage(nDamage2, DAMAGE_TYPE_ELECTRICAL);
eDam3 = EffectDamage(nDamage3, DAMAGE_TYPE_FIRE);
eDam4 = EffectDamage(nDamage4, DAMAGE_TYPE_SONIC);
if(nTotalDamage > 0)
{
if (nTotalDamage > 50)
{
DelayCommand(fDelay+0.3f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnock, oTarget,3.0f, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
}
// Apply effects to the currently selected target.
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam1, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam2, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam3, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam4, oTarget));
//This visual effect is applied to the target object not the location as above. This visual effect
//represents the flame that erupts on the target not on the ground.
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
DelayCommand(fDelay+0.2f, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
DelayCommand(fDelay+0.5f, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis3, oTarget));
}
}
//Select the next target within the spell shape.
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 20.0f, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,64 +0,0 @@
/////////////////////////////////////////////////
// Herculean Alliance
//-----------------------------------------------
// Created By: Nron Ksr
// Created On: 03/06/2004
// Description: This script changes someone's ability scores
/////////////////////////////////////////////////
/*
Boneshank - copied Herculean Empowerment, and converted to area/ally spell.
*/
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_HERCALL))
{
//Declare major variables
int nCasterLvl = GetTotalCastingLevel(OBJECT_SELF); // Boneshank - changed.
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 10.0,
PRCGetSpellTargetLocation());
while (GetIsObjectValid(oTarget))
{
if (GetFactionEqual(oTarget, OBJECT_SELF))
{
int nModify = d4() + 5;
float fDuration = HoursToSeconds(nCasterLvl);
effect eVis = EffectVisualEffect(VFX_IMP_IMPROVE_ABILITY_SCORE);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH,nModify);
effect eDex = EffectAbilityIncrease(ABILITY_DEXTERITY,nModify);
effect eCon = EffectAbilityIncrease(ABILITY_CONSTITUTION,nModify);
//Signal the spell cast at event
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
//Link major effects
effect eLink = EffectLinkEffects(eStr, eDex);
eLink = EffectLinkEffects(eLink, eCon);
eLink = EffectLinkEffects(eLink, eDur);
// * Making extraodinary so cannot be dispelled (optional)
eLink = ExtraordinaryEffect(eLink);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 10.0,
PRCGetSpellTargetLocation());
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,52 +0,0 @@
/////////////////////////////////////////////////
// Herculean Empowerment
//-----------------------------------------------
// Created By: Nron Ksr
// Created On: 03/06/2004
// Description: This script changes someone's ability scores
/////////////////////////////////////////////////
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_HERCEMP))
{
//Declare major variables
object oTarget = PRCGetSpellTargetObject();
int nCasterLvl = GetTotalCastingLevel(OBJECT_SELF); // Boneshank - changed.
int nModify = d4() + 5;
float fDuration = HoursToSeconds(nCasterLvl);
effect eVis = EffectVisualEffect(VFX_IMP_IMPROVE_ABILITY_SCORE);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH,nModify);
effect eDex = EffectAbilityIncrease(ABILITY_DEXTERITY,nModify);
effect eCon = EffectAbilityIncrease(ABILITY_CONSTITUTION,nModify);
//Signal the spell cast at event
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
//Link major effects
effect eLink = EffectLinkEffects(eStr, eDex);
eLink = EffectLinkEffects(eLink, eCon);
eLink = EffectLinkEffects(eLink, eDur);
// * Making extraodinary so cannot be dispelled (optional)
eLink = ExtraordinaryEffect(eLink);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,64 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_impenetrab"
/* Purpose: Impenetrability - grants 100% protection against piercing
damage for 24 hours.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ABJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_IMPENET))
{
object oTarget = PRCGetSpellTargetObject();
int nCasterLvl = GetTotalCastingLevel(OBJECT_SELF);
int nDuration = nCasterLvl + 10;
float fDuration = RoundsToSeconds(nDuration);
effect eVis = EffectVisualEffect(VFX_IMP_AC_BONUS);
effect eDur = EffectVisualEffect(VFX_DUR_GLOW_PURPLE);
effect eProt = EffectDamageImmunityIncrease(DAMAGE_TYPE_PIERCING, 50);
if(GetPRCSwitch(PRC_PNP_IMPENETRABILITY))
{
eProt = EffectDamageImmunityIncrease
(DAMAGE_TYPE_PIERCING, 100);
fDuration = HoursToSeconds(20);
}
effect eLink = EffectLinkEffects(eProt, eDur);
// if this option has been enabled, the caster will take backlash damage
if (GetPRCSwitch(PRC_EPIC_BACKLASH_DAMAGE) == TRUE)
{
int nDamage = d6(10);
effect eDamVis = EffectVisualEffect(VFX_IMP_SONIC);
effect eDam = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL);
DelayCommand(2.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT,
eDamVis, OBJECT_SELF));
DelayCommand(2.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT,
eDam, OBJECT_SELF));
}
if(GetIsReactionTypeFriendly(oTarget) || GetFactionEqual(oTarget))
{
//Fire spell cast at event for target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(),
FALSE));
SPApplyEffectToObject(DURATION_TYPE_INSTANT,
eVis, oTarget);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY,
eLink, oTarget, fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,51 +0,0 @@
/////////////////////////////////////////////////
// Tolodine's Killing Wind
//-----------------------------------------------
// Created By: Nron Ksr
// Created On: 03/07/2004
// Description: This script causes an AOE Death Spell for 10 rnds.
// Fort. save -4 to resist
/////////////////////////////////////////////////
// Last Updated: 03/16/2004, Nron Ksr
/////////////////////////////////////////////////
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_NECROMANCY);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_TOLO_KW))
{
//Declare variables
int nCasterLevel = GetTotalCastingLevel(OBJECT_SELF);
int nToAffect = nCasterLevel;
location lTarget = PRCGetSpellTargetLocation();
// Visual effect creations
effect eImpact = EffectVisualEffect( 262 );
effect eImpact2 = EffectVisualEffect( VFX_FNF_GAS_EXPLOSION_MIND );
effect eImpact3 = EffectVisualEffect( VFX_FNF_HOWL_WAR_CRY );
effect eImpact4 = EffectVisualEffect( VFX_FNF_SOUND_BURST );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eImpact, lTarget );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eImpact2, lTarget );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eImpact3, lTarget );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eImpact4, lTarget );
effect eAOE = EffectAreaOfEffect
( AOE_PER_FOG_OF_BEWILDERMENT, "tm_s0_epkillwnda", "tm_s0_epkillwndb", "****" );
//Create an instance of the AOE Object
ApplyEffectAtLocation( DURATION_TYPE_TEMPORARY, eAOE, lTarget, RoundsToSeconds(10) );
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,54 +0,0 @@
/////////////////////////////////////////////////
// Leech Field
// tm_s0_epleech.nss
//-----------------------------------------------
// Created By: Nron Ksr
// Created On: 03/12/2004
// Description: An AoE that saps the life of those in the
// field and transfers it to the caster.
/////////////////////////////////////////////////
// Last Updated: 03/16/2004, Nron Ksr
/////////////////////////////////////////////////
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_NECROMANCY);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_LEECH_F))
{
//Declare variables
int nCasterLevel = GetTotalCastingLevel(OBJECT_SELF);
int nToAffect = nCasterLevel;
location lTarget = PRCGetSpellTargetLocation();
// Visual effect creations
effect eImpact = EffectVisualEffect( VFX_FNF_GAS_EXPLOSION_EVIL );
effect eImpact2 = EffectVisualEffect( VFX_FNF_LOS_EVIL_30 );
effect eImpact3 = EffectVisualEffect( VFX_FNF_SUMMON_UNDEAD );
// Linking visuals
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eImpact, lTarget );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eImpact2, lTarget );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eImpact3, lTarget );
effect eAOE = EffectAreaOfEffect
( AOE_PER_EVARDS_BLACK_TENTACLES,
"tm_s0_epleecha", "tm_s0_epleechb", "****" );
//Create an instance of the AOE Object
ApplyEffectAtLocation( DURATION_TYPE_TEMPORARY, eAOE,
lTarget, RoundsToSeconds(nCasterLevel) );
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,55 +0,0 @@
//::///////////////////////////////////////////////
//:: Epic Mage Armor
//:: X2_S2_EpMageArm
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Gives the target +20 AC Bonus to Deflection,
Armor Enchantment, Natural Armor and Dodge.
*/
//:://////////////////////////////////////////////
//:: Created By: Andrew Nobbs
//:: Created On: Feb 07, 2003
//:://////////////////////////////////////////////
/*
Altered by Boneshank, for purposes of the Epic Spellcasting project.
*/
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_CONJURATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_EP_M_AR))
{
object oTarget = PRCGetSpellTargetObject();
int nDuration = GetTotalCastingLevel(OBJECT_SELF);
effect eVis = EffectVisualEffect(495);
effect eAC;
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
//Set the four unique armor bonuses
eAC = EffectACIncrease(20, AC_ARMOUR_ENCHANTMENT_BONUS);
effect eDur = EffectVisualEffect(VFX_DUR_SANCTUARY);
PRCRemoveEffectsFromSpell(oTarget, GetSpellId());
// * Brent, Nov 24, making extraodinary so cannot be dispelled
eAC = ExtraordinaryEffect(eAC);
//Apply the armor bonuses and the VFX impact
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAC, oTarget, HoursToSeconds(nDuration), TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget,1.0, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,93 +0,0 @@
/////////////////////////////////////////////////
// Magma Burst
// tm_s0_epMagmaBu.nss
//-----------------------------------------------
// Created By: Nron Ksr
// Created On: 03/12/2004
// Description: Initial explosion (20d8) reflex save, then AoE of lava (10d8),
// fort save. If more then 5 rnds in the cloud cumulative, you turn to stone
// as the lava hardens (fort save).
/////////////////////////////////////////////////
// Last Updated: 03/16/2004, Nron Ksr
/////////////////////////////////////////////////
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION);
// Spell Cast Hook
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_MAGMA_B))
{
// Declare major variables
object oCaster = OBJECT_SELF;
object oTarget;
// Boneshank - Added in the nDC formula.
float fDelay;
int nDamage;
int nCasterLvl = GetTotalCastingLevel(OBJECT_SELF);
effect eAOE = EffectAreaOfEffect
( AOE_PER_FOGFIRE, "tm_s0_epmagmabua", "tm_s0_epmagmabub", "tm_s0_epmagmabuc" );
location lTarget = PRCGetSpellTargetLocation();
int nDuration = GetTotalCastingLevel(OBJECT_SELF) / 5; //B- changed.
effect eImpact = EffectVisualEffect( VFX_FNF_GAS_EXPLOSION_FIRE );
effect eImpact2 = EffectVisualEffect( VFX_FNF_IMPLOSION );
effect eImpact3 = EffectVisualEffect( VFX_FNF_STRIKE_HOLY );
effect eImpact4 = EffectVisualEffect( VFX_FNF_FIRESTORM );
effect eVis = EffectVisualEffect( VFX_IMP_FLAME_M );
effect eDam;
// Direct Impact is handled first. (20d8) - reflex.
// Apply the explosion at the location captured above.
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eImpact, lTarget );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eImpact2, lTarget );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eImpact3, lTarget );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, eImpact4, lTarget );
// Declare the spell shape, size and the location. Capture the first target .
oTarget = GetFirstObjectInShape
( SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE );
// Cycle through the targets within the spell shape until an invalid object is captured.
while( GetIsObjectValid(oTarget) )
{
if( spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF) )
{
//Fire cast spell at event for the specified target
SignalEvent( oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_FIREBALL) );
// Set the delay for the explosion.
fDelay = PRCGetRandomDelay( 0.5f, 2.0f );
if( !PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF), fDelay) )
{
nDamage = d8(20);
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
nDamage = PRCGetReflexAdjustedDamage( nDamage, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget), SAVING_THROW_TYPE_FIRE );
//Set the damage effect
eDam = EffectDamage( nDamage, DAMAGE_TYPE_FIRE );
if( nDamage > 0 )
{
// Apply effects to the currently selected target (dmg & visual)
DelayCommand( fDelay,
SPApplyEffectToObject( DURATION_TYPE_INSTANT, eDam, oTarget) );
DelayCommand( fDelay,
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget) );
}
}
}
//Select the next target within the spell shape.
oTarget = GetNextObjectInShape
( SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE );
}
//Create the AoE object at the location for the next effects
ApplyEffectAtLocation( DURATION_TYPE_TEMPORARY, eAOE, lTarget, RoundsToSeconds(nDuration) );
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,99 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_maspenguin"
/* Purpose: Mass Penguin - turns all creatures in the target area into
penguins!
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "pnp_shft_poly"
#include "inc_epicspells"
#include "prc_compan_inc"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_MASSPEN))
{
float fDelay;
int nDuration = 20;
effect eExplode = EffectVisualEffect(VFX_FNF_MYSTICAL_EXPLOSION);
effect eDuration = EffectVisualEffect(VFX_DUR_PIXIEDUST);
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
effect ePolymorph = EffectPolymorph(POLYMORPH_TYPE_PENGUIN, TRUE);
effect eLink = EffectLinkEffects(eDuration, ePolymorph);
location lTarget = PRCGetSpellTargetLocation();
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eDuration,
lTarget, 10.0);
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_LARGE, lTarget);
// Cycle through the targets within the spell shape
// until an invalid object is captured.
while (GetIsObjectValid(oTarget))
{
if (oTarget != OBJECT_SELF)
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF,
PRCGetSpellId()));
fDelay = PRCGetRandomDelay(1.5, 2.5);
if(!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF), fDelay) && PRCGetIsAliveCreature(oTarget))
{
if(PRCGetCreatureSize(oTarget) == CREATURE_SIZE_TINY ||
PRCGetCreatureSize(oTarget) == CREATURE_SIZE_SMALL ||
PRCGetCreatureSize(oTarget) == CREATURE_SIZE_MEDIUM)
{
// Targets all get a Fortitude saving throw
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget),
SAVING_THROW_TYPE_SPELL, OBJECT_SELF, fDelay))
{
//this command will make shore that polymorph plays nice with the shifter
ShifterCheck(oTarget);
//companion has multi-sized penguins :)
if(GetPRCSwitch(MARKER_PRC_COMPANION))
{
int nRandom = d100();
if(nRandom < 25)
ePolymorph = EffectPolymorph(POLYMORPH_TYPE_PENGUIN, TRUE);
else if(nRandom < 40)
ePolymorph = EffectPolymorph(PRC_COMP_POLYMORPH_TYPE_PENGUIN_150, TRUE);
else if(nRandom < 55)
ePolymorph = EffectPolymorph(PRC_COMP_POLYMORPH_TYPE_PENGUIN_200, TRUE);
else if(nRandom < 70)
ePolymorph = EffectPolymorph(PRC_COMP_POLYMORPH_TYPE_PENGUIN_300, TRUE);
else if(nRandom < 85)
ePolymorph = EffectPolymorph(PRC_COMP_POLYMORPH_TYPE_PENGUIN_400, TRUE);
else
ePolymorph = EffectPolymorph(PRC_COMP_POLYMORPH_TYPE_PENGUIN_500, TRUE);
eLink = EffectLinkEffects(eDuration, ePolymorph);
}
// Apply effects to the currently selected target.
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_TEMPORARY, eLink, oTarget,
HoursToSeconds(nDuration), TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eVis, oTarget));
}
}
}
}
//Select the next target within the spell shape.
oTarget = GetNextObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_LARGE, lTarget);
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,59 +0,0 @@
//::///////////////////////////////////////////////
//:: Epic Spell: Momento Mori
//:: Author: Boneshank (Don Armstrong)
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_NECROMANCY);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_MORI))
{
//Declare major variables
object oTarget = PRCGetSpellTargetObject();
int nDamage;
effect eDam;
effect eVis = EffectVisualEffect(VFX_IMP_DEATH_L);
effect eVis2 = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, PRCGetSpellId()));
if (GetObjectType(oTarget) == OBJECT_TYPE_CREATURE &&
GetHitDice(oTarget) < 50 && oTarget != OBJECT_SELF)
{
//Make SR check
if (!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF)))
{
//Make Fortitude save
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget)+10, SAVING_THROW_TYPE_DEATH))
{
DeathlessFrenzyCheck(oTarget);
//Apply the death effect and VFX impact
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), oTarget);
//SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
else
{
//Roll damage
nDamage = d6(3) + 20;
if (GetHasMettle(oTarget, SAVING_THROW_FORT))
// This script does nothing if it has Mettle, bail
nDamage = 0;
//Set damage effect
eDam = EffectDamage(nDamage, DAMAGE_TYPE_NEGATIVE);
//Apply damage effect and VFX impact
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget);
}
}
}
else SendMessageToPC(OBJECT_SELF, "Spell failure - the target was not valid.");
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,41 +0,0 @@
//::///////////////////////////////////////////////
//:: Mummy Dust
//:: X2_S2_MumDust
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Summons a strong warrior mummy for you to
command.
*/
//:://////////////////////////////////////////////
//:: Created By: Andrew Nobbs
//:: Created On: Feb 07, 2003
//:://////////////////////////////////////////////
/*
Altered by Boneshank, for purposes of the Epic Spellcasting project.
*/
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_NECROMANCY);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_MUMDUST))
{
effect eSummon;
eSummon = EffectSummonCreature("X2_S_MUMMYWARR",496,1.0f);
eSummon = ExtraordinaryEffect(eSummon);
//Apply the summon visual and summon the undead.
MultisummonPreSummon();
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eSummon, PRCGetSpellTargetLocation());
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,49 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_nailedsky"
/* Purpose: Nailed to the Sky - the target, if it fails its Will save, is
thrust into the sky, where it dies in a vacuum
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 11, 2004
//:://////////////////////////////////////////////
// Fixed by Strat because Boneshank was a bloody idiot
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
#include "prc_inc_teleport"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
object oTarget = PRCGetSpellTargetObject();
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_NAILSKY))
{
//Declare major variables
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, PRCGetSpellId()));
// Teleportation spell, so can be prevented by teleportation blocking effects
if(GetCanTeleport(oTarget, GetLocation(oTarget), FALSE, TRUE, TRUE))
{
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget)) && !GetIsDead(oTarget))
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDeath(TRUE)), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(9999)), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(9999)), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(9999)), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(9999)), oTarget);
}
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,82 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_orderresto"
/* Purpose: Order Restored - all unlawful targets are stunned, and all
lawful targets get 5 attacks per round and +10 saves vs. chaos.
Unlawful casters have alignment shift to law by d10, and spell fails.
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_ENCHANTMENT);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_ORDER_R))
{
int nCasterLevel = GetTotalCastingLevel(OBJECT_SELF);
float fDuration = RoundsToSeconds(20);
effect eVis = EffectVisualEffect(VFX_FNF_HOWL_ODD);
effect eStun = EffectStunned();
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eAtt = EffectModifyAttacks(5);
effect eST = EffectSavingThrowIncrease(SAVING_THROW_ALL, 10,
SAVING_THROW_TYPE_CHAOS);
effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eLink = EffectLinkEffects(eVis, eStun);
eLink = EffectLinkEffects(eLink, eDur);
effect eLink2 = EffectLinkEffects(eAtt, eVis);
eLink2 = EffectLinkEffects(eLink2, eDur2);
eLink2 = EffectLinkEffects(eLink2, eST);
float fDelay;
// Lawful casters cast normally. All others go to ELSE.
if (GetAlignmentLawChaos(OBJECT_SELF) == ALIGNMENT_LAWFUL)
{
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF), TRUE);
while(GetIsObjectValid(oTarget))
{
fDelay = PRCGetRandomDelay();
if (GetAlignmentLawChaos(oTarget) != ALIGNMENT_LAWFUL)
{
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF,
SPELL_CONFUSION));
if(!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF), fDelay))
{
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget),
SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
{
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_TEMPORARY, eLink, oTarget,
fDuration, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
}
}
}
else
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_TEMPORARY, eLink2, oTarget, fDuration));
oTarget = GetNextObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF), TRUE);
}
}
else // An unlawful caster will sway towards law on a casting.
{
FloatingTextStringOnCreature("*Spell fails. You are not lawful*",
OBJECT_SELF, FALSE);
AdjustAlignment(OBJECT_SELF, ALIGNMENT_LAWFUL, d10(), FALSE);
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -1,42 +0,0 @@
//:://////////////////////////////////////////////
//:: FileName: "ss_ep_pathsknown"
/* Purpose: Paths Become Known - Explores the area and reveals the entire map
for the area the caster is currently in. As well, the caster gains a
bonus of +50 to both Spot and Search skills, but only for 30 seconds!
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
//#include "x2_inc_spellhook"
#include "inc_epicspells"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_DIVINATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_PATHS_B))
{
object oArea = GetArea(OBJECT_SELF);
effect eVis = EffectVisualEffect(VFX_DUR_ULTRAVISION);
effect eVis2 = EffectVisualEffect(VFX_IMP_HEAD_MIND);
effect eSkill = EffectSkillIncrease(SKILL_SEARCH, 50);
effect eSkill2 = EffectSkillIncrease(SKILL_SPOT, 50);
effect eLink = EffectLinkEffects(eVis, eSkill);
eLink = EffectLinkEffects(eLink, eSkill2);
DelayCommand(1.5, SPApplyEffectToObject(DURATION_TYPE_INSTANT,
eVis2, OBJECT_SELF));
DelayCommand(1.5, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY,
eLink, OBJECT_SELF, 30.0, TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
DelayCommand(6.0, ExploreAreaForPlayer(oArea, OBJECT_SELF));
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

Some files were not shown because too many files have changed in this diff Show More