Clear out experimental .35 files
Clear out experimental .35 files
This commit is contained in:
@@ -1,365 +0,0 @@
|
||||
/**
|
||||
* @file
|
||||
* Spellscript for Bright Evening Star SLAs
|
||||
*
|
||||
*/
|
||||
//::By ebonfowl for the PRC
|
||||
//::Dedicated to Edgar, the real Ebonfowl
|
||||
|
||||
#include "prc_inc_template"
|
||||
#include "prc_inc_combat"
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void DispelMonitor(object oCaster, object oTarget, int nSpellID, int nBeatsRemaining)
|
||||
{
|
||||
if((--nBeatsRemaining == 0) ||
|
||||
PRCGetDelayedSpellEffectsExpired(nSpellID, oTarget, oCaster)
|
||||
)
|
||||
{
|
||||
if(DEBUG) DoDebug("sp_hypattern: Spell expired, clearing");
|
||||
PRCRemoveEffectsFromSpell(oTarget, nSpellID);
|
||||
|
||||
}
|
||||
else
|
||||
DelayCommand(6.0f, DispelMonitor(oCaster, oTarget, nSpellID, nBeatsRemaining));
|
||||
}
|
||||
|
||||
void ConcentrationHB(object oCaster, object oTarget, int nSpellID, int nBeatsRemaining)
|
||||
{
|
||||
if(GetBreakConcentrationCheck(oCaster))
|
||||
{
|
||||
//FloatingTextStringOnCreature("Crafting: Concentration lost!", oPC);
|
||||
//DeleteLocalInt(oPC, PRC_CRAFT_HB);
|
||||
//return;
|
||||
DispelMonitor(oCaster, oTarget, nSpellID, nBeatsRemaining);
|
||||
}
|
||||
else
|
||||
DelayCommand(6.0f, ConcentrationHB(oCaster, oTarget, nSpellID, nBeatsRemaining));
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPC = OBJECT_SELF;
|
||||
object oArea = GetArea(oPC);
|
||||
int nCasterLevel, nDC, nSpell, nUses;
|
||||
int nSLA = GetSpellId();
|
||||
effect eNone;
|
||||
int nInstant = FALSE;
|
||||
|
||||
object oWOL = GetItemPossessedBy(oPC, "WOL_BrtEvnStar");
|
||||
|
||||
// You get nothing if you aren't wielding the item
|
||||
if(oWOL != GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC) && oWOL != GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC)) return;
|
||||
|
||||
switch(nSLA){
|
||||
case WOL_BES_FIRE_OF_THE_HEART:
|
||||
{
|
||||
nCasterLevel = 5;
|
||||
nSpell = SPELL_FAERIE_FIRE;
|
||||
nUses = 999;
|
||||
break;
|
||||
}
|
||||
case WOL_BES_ENTHRALLING_LIGHT:
|
||||
{
|
||||
nUses = 3;
|
||||
if (nUses > GetLegacyUses(oPC, nSLA))
|
||||
{
|
||||
object oCaster = OBJECT_SELF;
|
||||
nCasterLevel = 5;
|
||||
int nSpellID = PRCGetSpellId();
|
||||
PRCSetSchool(GetSpellSchool(nSpellID));
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
object oTarget;// = PRCGetSpellTargetObject();
|
||||
location lLocation = PRCGetSpellTargetLocation();
|
||||
int nSaveDC = 11;
|
||||
if (11 + GetAbilityModifier(ABILITY_CHARISMA, oPC) > nSaveDC)
|
||||
nSaveDC = 11 + GetAbilityModifier(ABILITY_CHARISMA, oPC);
|
||||
float fDuration = RoundsToSeconds(nCasterLevel); //modify if necessary
|
||||
|
||||
effect eLink = EffectFascinate();
|
||||
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE));
|
||||
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE));
|
||||
|
||||
int nHDBonus = nCasterLevel;
|
||||
if (nHDBonus > 10) nHDBonus = 10;
|
||||
int nMaxHD = d4(2) + nHDBonus;
|
||||
int nSumHD = 0;
|
||||
float nRadius = RADIUS_SIZE_HUGE;
|
||||
int i, nHD, nKillSwitch;
|
||||
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, nRadius, lLocation, TRUE);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_RAINBOW_PATTERN), lLocation);
|
||||
|
||||
while(GetIsObjectValid(oTarget) && nKillSwitch == 0)
|
||||
{
|
||||
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster))
|
||||
{
|
||||
nHD = GetHitDice(oTarget);
|
||||
nSumHD = nSumHD + nHD;
|
||||
if (nSumHD <= nMaxHD)
|
||||
{
|
||||
PRCSignalSpellEvent(oTarget, FALSE);
|
||||
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget);
|
||||
DelayCommand(6.0f, ConcentrationHB(oCaster, oTarget, nSpellID, FloatToInt(fDuration)));
|
||||
}
|
||||
else nKillSwitch = 1;
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, nRadius, lLocation, TRUE);
|
||||
}
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
||||
SetLegacyUses(oPC, nSLA);
|
||||
break;
|
||||
}
|
||||
case WOL_BES_COLOR_SPRAY:
|
||||
{
|
||||
nCasterLevel = 5;
|
||||
nSpell = SPELL_COLOR_SPRAY;
|
||||
nUses = 3;
|
||||
nDC = 11;
|
||||
if (11 + GetAbilityModifier(ABILITY_CHARISMA, oPC) > nDC)
|
||||
nDC = 11 + GetAbilityModifier(ABILITY_CHARISMA, oPC);
|
||||
break;
|
||||
}
|
||||
case WOL_BES_BLINDING_FLASH:
|
||||
{
|
||||
nUses = 3;
|
||||
if (nUses > GetLegacyUses(oPC, nSLA))
|
||||
{
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
|
||||
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
|
||||
|
||||
//Declare major varibles
|
||||
object oCaster = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int CasterLvl = 5;
|
||||
nDC = 13;
|
||||
if (12 + GetAbilityModifier(ABILITY_CHARISMA, oPC) > nDC)
|
||||
nDC = 12 + GetAbilityModifier(ABILITY_CHARISMA, oPC);
|
||||
|
||||
float fDuration = RoundsToSeconds(CasterLvl);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_BLIND_DEAF_M);
|
||||
|
||||
effect eBlind = EffectBlindness();
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eBlind, eDur);
|
||||
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
//Fire cast spell at event
|
||||
SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_BES_BLINDING_FLASH));
|
||||
//Do SR check
|
||||
if (!PRCDoResistSpell(oCaster, oTarget) && PRCGetIsAliveCreature(oTarget))
|
||||
{
|
||||
// Make Fortitude save to negate
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
|
||||
//Apply visual and effects
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration, TRUE, SPELL_BES_BLINDING_FLASH, CasterLvl);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
||||
SetLegacyUses(oPC, nSLA);
|
||||
break;
|
||||
}
|
||||
case WOL_BES_SHOOTING_STARS:
|
||||
{
|
||||
nCasterLevel = 10;
|
||||
nSpell = SPELL_MAGIC_MISSILE;
|
||||
nUses = 2;
|
||||
break;
|
||||
}
|
||||
case WOL_BES_GLITTERING_MOTES:
|
||||
{
|
||||
nCasterLevel = 5;
|
||||
nSpell = SPELL_GLITTERDUST;
|
||||
nUses = 1;
|
||||
nDC = 13;
|
||||
if (12 + GetAbilityModifier(ABILITY_CHARISMA, oPC) > nDC)
|
||||
nDC = 12 + GetAbilityModifier(ABILITY_CHARISMA, oPC);
|
||||
break;
|
||||
}
|
||||
case WOL_BES_TWINKLE:
|
||||
{
|
||||
nCasterLevel = 11;
|
||||
nSpell = SPELL_BLINK;
|
||||
nUses = 3;
|
||||
break;
|
||||
}
|
||||
case WOL_BES_SILVER_STARLIGHT:
|
||||
{
|
||||
nUses = 1;
|
||||
if (nUses > GetLegacyUses(oPC, nSLA))
|
||||
{
|
||||
DeleteLocalInt(oPC, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
SetLocalInt(oPC, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION);
|
||||
/*
|
||||
Spellcast Hook Code
|
||||
Added 2003-06-20 by Georg
|
||||
If you want to make changes to all spells,
|
||||
check x2_inc_spellhook.nss to find out more
|
||||
|
||||
*/
|
||||
|
||||
if (!X2PreSpellCastCode())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
//Declare major variables
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
effect eVis2 = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
|
||||
effect eStrike = EffectVisualEffect(VFX_FNF_SUNBEAM);
|
||||
effect eDam;
|
||||
effect eBlind = EffectBlindness();
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eLink = EffectLinkEffects(eBlind, eDur);
|
||||
int CasterLvl = 15;
|
||||
int nDamage;
|
||||
int nOrgDam;
|
||||
int nMax;
|
||||
float fDelay;
|
||||
int nBlindLength = 3;
|
||||
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eStrike, PRCGetSpellTargetLocation());
|
||||
//Get the first target in the spell area
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, PRCGetSpellTargetLocation());
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
|
||||
nCasterLevel= CasterLvl;
|
||||
//Limit caster level
|
||||
if (nCasterLevel > 20)
|
||||
{
|
||||
nCasterLevel = 20;
|
||||
}
|
||||
|
||||
// Make a faction check
|
||||
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oPC))
|
||||
{
|
||||
fDelay = PRCGetRandomDelay(1.0, 2.0);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oPC, SPELL_BES_SILVER_STARLIGHT));
|
||||
//Make an SR check
|
||||
if (!PRCDoResistSpell(oPC, oTarget, nCasterLevel, 1.0))
|
||||
{
|
||||
//Extra effects to undead, oozes and shapechangers
|
||||
if (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OOZE
|
||||
|| MyPRCGetRacialType(oTarget) == RACIAL_TYPE_SHAPECHANGER)
|
||||
{
|
||||
//Roll damage and save
|
||||
nDamage = d6(nCasterLevel);
|
||||
nMax = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Roll damage and save
|
||||
nDamage = d6(3);
|
||||
nOrgDam = nDamage;
|
||||
nMax = 6;
|
||||
nCasterLevel = 3;
|
||||
//Get the adjusted damage due to Reflex Save, Evasion or Improved Evasion
|
||||
}
|
||||
|
||||
nDamage += SpellDamagePerDice(oPC, nCasterLevel);
|
||||
nDC = 20;
|
||||
if (17 + GetAbilityModifier(ABILITY_CHARISMA, oPC) > nDC)
|
||||
nDC = 17 + GetAbilityModifier(ABILITY_CHARISMA, oPC);
|
||||
|
||||
//Check that a reflex save was made.
|
||||
if(PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, (nDC), SAVING_THROW_TYPE_DIVINE, oPC, 1.0) == 0)
|
||||
{
|
||||
DelayCommand(1.0, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nBlindLength),TRUE,-1,CasterLvl));
|
||||
}
|
||||
else
|
||||
{
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, 0, SAVING_THROW_TYPE_DIVINE);
|
||||
}
|
||||
//Set damage effect
|
||||
eDam = PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_DIVINE);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
//Apply the damage effect and VFX impact
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
|
||||
PRCBonusDamage(oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get the next target in the spell area
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, PRCGetSpellTargetLocation());
|
||||
}
|
||||
|
||||
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
// Getting rid of the integer used to hold the spells spell school
|
||||
}
|
||||
SetLegacyUses(oPC, nSLA);
|
||||
break;
|
||||
}
|
||||
case WOL_BES_STARLIGHT_DISPELLING:
|
||||
{
|
||||
nCasterLevel = 15;
|
||||
if(GetIsObjectValid(oArea)
|
||||
&& !GetIsDay()
|
||||
&& GetIsAreaAboveGround(oArea) == AREA_ABOVEGROUND
|
||||
&& !GetIsAreaInterior(oArea))
|
||||
{
|
||||
nCasterLevel = 20;
|
||||
}
|
||||
nSpell = SPELL_GREATER_DISPELLING;
|
||||
nUses = 1;
|
||||
break;
|
||||
}
|
||||
case WOL_BES_TALES_IN_THE_SKY:
|
||||
{
|
||||
if(GetIsObjectValid(oArea)
|
||||
&& !GetIsDay()
|
||||
&& GetIsAreaAboveGround(oArea) == AREA_ABOVEGROUND
|
||||
&& !GetIsAreaInterior(oArea))
|
||||
{
|
||||
nCasterLevel = 15;
|
||||
nSpell = SPELL_LEGEND_LORE;
|
||||
nUses = 1;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
PrintString("Tales in the Sky is only usable outside at night.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
case WOL_BES_CALL_DOWN_A_STAR:
|
||||
{
|
||||
nCasterLevel = 17;
|
||||
nSpell = SPELL_SUMMON_CREATURE_IX_FIRE;
|
||||
nUses = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Check uses per day
|
||||
if (GetLegacyUses(oPC, nSLA) >= nUses)
|
||||
{
|
||||
FloatingTextStringOnCreature("You have used " + GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSLA))) + " the maximum amount of times today.", oPC, FALSE);
|
||||
return;
|
||||
}
|
||||
if (nSpell > 0)
|
||||
{
|
||||
DoRacialSLA(nSpell, nCasterLevel, nDC, nInstant);
|
||||
SetLegacyUses(oPC, nSLA);
|
||||
FloatingTextStringOnCreature("You have "+IntToString(nUses - GetLegacyUses(oPC, nSLA))+ " uses of " + GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSLA))) + " remaining today.", oPC, FALSE);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user