Files
HeroesStone_PRC8/_module/nss/jw_custom_spells.nss
Jaysyn904 1eefc84201 Initial Commit
Initial Commit.
2025-09-14 15:40:46 -04:00

617 lines
22 KiB
Plaintext

#include "prc_inc_spells"
#include "NW_I0_SPELLS"
// The creature running this script tries to use a medicine bag on oTarget
void medicinebag(object oTarget);
// Paladin uses holy symbol.
void UseHolySymbol(object oPC=OBJECT_SELF);
// Nlackguard uses unholy symbol.
void UseUnHolySymbol(object oPC=OBJECT_SELF);
void pipesharm()
{
PlaySound("as_cv_flute2");
//AssignCommand(oUser,SpeakString("I am a valid object"));
int nDuration=15;
int nCount=1;
location lTarget=GetLocation(OBJECT_SELF);
float fDelay;
effect eVis = EffectVisualEffect(VFX_IMP_CHARM);
object oThing;
//Get the spell target location as opposed to the spell target.
//Declare the spell shape, size and the location. Capture the first target object in the shape.
object oMob = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
//Cycle through the targets within the spell shape until an invalid object is captured.
while(GetIsObjectValid(oMob) && nCount != nDuration)
{
if(GetIsEnemy(oMob,OBJECT_SELF))
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oMob,300.0);
oThing=GetFirstFactionMember(OBJECT_SELF,FALSE);
while (GetIsObjectValid(oThing))
{
SetIsTemporaryFriend(oMob,oThing,TRUE,300.0);
SetIsTemporaryFriend(oThing,oMob,TRUE,300.0);
oThing=GetNextFactionMember(OBJECT_SELF,FALSE);
}
AssignCommand(oMob,ClearAllActions());
nCount++;
}
//Select the next target within the spell shape.
oMob = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
}
void cascade(object oTarget)
{
//Declare major variables
int nCasterLevel = 17;
int nDamage = d6(nCasterLevel);
int nDamStrike;
int nNumAffected = 0;
//Declare lightning effect connected the casters hands
effect eLightning = EffectBeam(VFX_BEAM_FIRE, OBJECT_SELF, BODY_NODE_HAND);;
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
effect eDamage;
object oFirstTarget = oTarget;
object oHolder;
object oTarget;
location lSpellLocation;
//Damage the initial target
if(!GetIsReactionTypeFriendly(oFirstTarget,OBJECT_SELF))
{
//Fire cast spell at event for the specified target
SignalEvent(oFirstTarget, EventSpellCastAt(OBJECT_SELF, SPELL_CHAIN_LIGHTNING));
//Make an SR Check
if (!ScrollResist(OBJECT_SELF, oFirstTarget))
{
//Adjust damage via Reflex Save or Evasion or Improved Evasion
nDamStrike = PRCGetReflexAdjustedDamage(nDamage, oFirstTarget, 24, SAVING_THROW_TYPE_FIRE);
//Set the damage effect for the first target
eDamage = EffectDamage(nDamStrike, DAMAGE_TYPE_FIRE);
//Apply damage to the first target and the VFX impact.
if(nDamStrike > 0)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oFirstTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oFirstTarget);
}
}
}
//Apply the lightning stream effect to the first target, connecting it with the caster
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLightning,oFirstTarget,0.5);
//Reinitialize the lightning effect so that it travels from the first target to the next target
eLightning = EffectBeam(VFX_BEAM_FIRE, oFirstTarget, BODY_NODE_CHEST);
//Halve the damage for all secondary targets beyond the first.
// eDamage = EffectDamage(nDamage/2, DAMAGE_TYPE_ELECTRICAL);
float fDelay = 0.2;
int nCnt;
//Get the first target in the spell shape
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oFirstTarget), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
while (GetIsObjectValid(oTarget) && nCnt < nCasterLevel)
{
//Make sure the caster's faction is not hit and the first target is not hit
if (oTarget != oFirstTarget && !GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF)
{
//Connect the new lightning stream to the older target and the new target
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLightning,oTarget,0.5));
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_CHAIN_LIGHTNING));
//Do an SR check
if (!ScrollResist(OBJECT_SELF, oTarget, fDelay))
{
nDamage = d6(nCasterLevel);
//Adjust damage via Reflex Save or Evasion or Improved Evasion
nDamStrike = PRCGetReflexAdjustedDamage(nDamage, oTarget, 24, SAVING_THROW_TYPE_FIRE);
//Apply the damage and VFX impact to the current target
eDamage = EffectDamage(nDamStrike, DAMAGE_TYPE_FIRE);
if(nDamStrike > 0) //age > 0)
{
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oTarget));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oTarget));
}
}
oHolder = oTarget;
//change the currect holder of the lightning stream to the current target
eLightning = EffectBeam(VFX_BEAM_FIRE, oHolder, BODY_NODE_CHEST);
fDelay = fDelay + 0.1f;
}
//Count the number of targets that have been hit.
if(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
{
nCnt++;
}
//Get the next target in the shape.
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oFirstTarget), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}
void forcewave()
{
ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2);
effect eLink = EffectKnockdown();
float fDelay;
int nDC = 16;
int nDuration=d2();
effect eImpact = EffectVisualEffect(VFX_FNF_HOWL_WAR_CRY);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, OBJECT_SELF);
//Get first target in spell area
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
while(GetIsObjectValid(oTarget))
{
if(!GetIsReactionTypeFriendly(oTarget) && !GetIsFriend(oTarget) && oTarget != OBJECT_SELF)
{
nDuration = GetScaledDuration(nDuration , oTarget);
//Fire cast spell at event for the specified target
//SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_HOWL_PARALYSIS));
fDelay = GetDistanceToObject(oTarget)/10;
//Make a saving throw check
if(PRCMySavingThrow(nDC,oTarget,SAVING_THROW_TYPE_SONIC)==0)
{
//Apply the VFX impact and effects
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
if (d2()==1)
{
AssignCommand(oTarget,PlaySound("as_wt_thunderds1"));
}
else
{
AssignCommand(oTarget,PlaySound("as_wt_thunderds2"));
}
}
}
//Get next target in spell area
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
}
}
void minorcascade(object oTarget)
{
//Declare major variables
int nCasterLevel = 6;
int nDamage = d6(nCasterLevel);
int nDamStrike;
int nNumAffected = 0;
//Declare lightning effect connected the casters hands
effect eLightning = EffectBeam(VFX_BEAM_FIRE, OBJECT_SELF, BODY_NODE_HAND);;
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
effect eDamage;
object oFirstTarget = oTarget;
object oHolder;
object oTarget;
location lSpellLocation;
//Damage the initial target
if(!GetIsReactionTypeFriendly(oFirstTarget,OBJECT_SELF))
{
//Fire cast spell at event for the specified target
SignalEvent(oFirstTarget, EventSpellCastAt(OBJECT_SELF, SPELL_CHAIN_LIGHTNING));
//Make an SR Check
if (!ScrollResist(OBJECT_SELF, oFirstTarget))
{
//Adjust damage via Reflex Save or Evasion or Improved Evasion
nDamStrike = PRCGetReflexAdjustedDamage(nDamage, oFirstTarget, 24, SAVING_THROW_TYPE_FIRE);
//Set the damage effect for the first target
eDamage = EffectDamage(nDamStrike, DAMAGE_TYPE_FIRE);
//Apply damage to the first target and the VFX impact.
if(nDamStrike > 0)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oFirstTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oFirstTarget);
}
}
}
//Apply the lightning stream effect to the first target, connecting it with the caster
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLightning,oFirstTarget,0.5);
//Reinitialize the lightning effect so that it travels from the first target to the next target
eLightning = EffectBeam(VFX_BEAM_FIRE, oFirstTarget, BODY_NODE_CHEST);
//Halve the damage for all secondary targets beyond the first.
// eDamage = EffectDamage(nDamage/2, DAMAGE_TYPE_ELECTRICAL);
float fDelay = 0.2;
int nCnt;
//Get the first target in the spell shape
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oFirstTarget), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
while (GetIsObjectValid(oTarget) && nCnt < nCasterLevel)
{
//Make sure the caster's faction is not hit and the first target is not hit
if (oTarget != oFirstTarget && !GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF)
{
//Connect the new lightning stream to the older target and the new target
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLightning,oTarget,0.5));
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_CHAIN_LIGHTNING));
//Do an SR check
if (!ScrollResist(OBJECT_SELF, oTarget, fDelay))
{
nDamage = d6(nCasterLevel);
//Adjust damage via Reflex Save or Evasion or Improved Evasion
nDamStrike = PRCGetReflexAdjustedDamage(nDamage, oTarget, 24, SAVING_THROW_TYPE_FIRE);
//Apply the damage and VFX impact to the current target
eDamage = EffectDamage(nDamStrike, DAMAGE_TYPE_FIRE);
if(nDamStrike > 0) //age > 0)
{
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oTarget));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oTarget));
}
}
oHolder = oTarget;
//change the currect holder of the lightning stream to the current target
eLightning = EffectBeam(VFX_BEAM_FIRE, oHolder, BODY_NODE_CHEST);
fDelay = fDelay + 0.1f;
}
//Count the number of targets that have been hit.
if(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
{
nCnt++;
}
//Get the next target in the shape.
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oFirstTarget), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}
void RunStrangle(int nStrength, int nSecondsRemaining, object oTarget)
{
if (GetIsDead(oTarget) == FALSE)
{
int nFree=0;
//Roll damage
int nDamage = d4()+Random(nStrength);
//check for metamagic
effect eDam = EffectDamage(nDamage,DAMAGE_TYPE_SLASHING,nStrength);
effect eVis = EffectVisualEffect(VFX_COM_SPARKS_PARRY);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
int nDC=14+(nStrength);
string sString=GetName(oTarget)+" has broken free of the garrote";
effect eCon=EffectAbilityDecrease(ABILITY_CONSTITUTION,1);
eCon=ExtraordinaryEffect(eCon);
if (FortitudeSave(oTarget,nDC,SAVING_THROW_TYPE_DEATH)==0)
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eCon,oTarget,240.0);
AssignCommand(oTarget,PlayVoiceChat(VOICE_CHAT_PAIN3));
SendMessageToPC(oTarget,"You are strangled by the cord");
}
else
{
FloatingTextStringOnCreature(sString,OBJECT_SELF);
FloatingTextStringOnCreature("You break free of the garrote",oTarget);
nSecondsRemaining==0;
nFree=1;
}
nSecondsRemaining=nSecondsRemaining-1;
if (nSecondsRemaining > 0&&nFree==0)
{
DelayCommand(1.0f,RunStrangle(nStrength, nSecondsRemaining,oTarget));
}
}
}
void garrote(object oTarget, int nStrength)
{
//Declare major variables
effect eArrow=EffectVisualEffect(VFX_IMP_MIRV);
float fDist = GetDistanceToObject(oTarget);
float fDelay = (fDist/10.0)+2.00;
if (GetIsReactionTypeFriendly(oTarget))
{
return;
}
//Make a touch attack
int nHit=TouchAttackRanged(oTarget);
// create the mirv effect
//ApplyEffectToObject(DURATION_TYPE_INSTANT, eArrow, oTarget);
// cast a fake spell
ClearAllActions();
if (!GetIsPC(OBJECT_SELF))
{
ActionCastFakeSpellAtObject(793,oTarget,PROJECTILE_PATH_TYPE_HOMING);
}
else
{
ActionCastSpellAtObject(793, oTarget, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_HOMING,TRUE);
}
if (nHit==0)
{
DelayCommand(fDelay,FloatingTextStringOnCreature("Missed",OBJECT_SELF));
return;
}
if (MyPRCGetRacialType(oTarget)==RACIAL_TYPE_UNDEAD)
{
DelayCommand(fDelay,FloatingTextStringOnCreature("Undead cannot be strangled",OBJECT_SELF));
return;
}
if (MyPRCGetRacialType(oTarget)==RACIAL_TYPE_ELEMENTAL)
{
DelayCommand(fDelay,FloatingTextStringOnCreature("Elementals cannot be strangled",OBJECT_SELF));
return;
}
if (MyPRCGetRacialType(oTarget)==RACIAL_TYPE_CONSTRUCT)
{
DelayCommand(fDelay,FloatingTextStringOnCreature("Constructs cannot be strangled",OBJECT_SELF));
return;
}
DelayCommand(fDelay,FloatingTextStringOnCreature("A length of cord is thrown at you and wraps itself around your neck",oTarget));
DelayCommand(fDelay,AssignCommand(oTarget,PlayVoiceChat(VOICE_CHAT_PAIN2)));
DelayCommand(fDelay,RunStrangle(nStrength, nStrength, oTarget));
}
void regeninst()
{
//Declare major variables
int nLevel = GetLevelByClass(CLASS_TYPE_BARD);
int nRanks = GetSkillRank(SKILL_PERFORM);
int nChr = GetAbilityModifier(ABILITY_CHARISMA);
int nPerform = nRanks;
int nDuration = 10+ nChr;
if (GetTag(GetItemInSlot(INVENTORY_SLOT_ARMS))=="jw_newitem2")
{
SendMessageToPC(OBJECT_SELF,"The elven gloves of the bard boost the power of your song.");
nPerform=nPerform+6;
nLevel=nLevel+3;
}
effect eRegen;
int nRegenAmount;
float fRegenTime;
//SpeakString("Level: " + IntToString(nLevel) + " Ranks: " + IntToString(nRanks));
if(nPerform >= 60 && nLevel > 20)
{
nRegenAmount=4;
fRegenTime=1.0;
}
if(nPerform >= 60 && nLevel >= 20)
{
nRegenAmount=5;
fRegenTime=2.0;
}
else if(nPerform >= 55 && nLevel >= 20)
{
nRegenAmount=4;
fRegenTime=2.0;
}
else if(nPerform >= 50 && nLevel >= 20)
{
nRegenAmount=4;
fRegenTime=2.0;
}
else if(nPerform >= 45 && nLevel >= 19)
{
nRegenAmount=3;
fRegenTime=2.0;
}
else if(nPerform >= 40 && nLevel >= 18)
{
nRegenAmount=3;
fRegenTime=2.0;
}
else if(nPerform >= 35 && nLevel >= 17)
{
nRegenAmount=2;
fRegenTime=2.0;
}
else if(nPerform >= 30 && nLevel >= 16)
{
nRegenAmount=2;
fRegenTime=2.0;
}
else if(nPerform >= 24 && nLevel >= 15)
{
nRegenAmount=4;
fRegenTime=4.0;
}
else if(nPerform >= 21 && nLevel >= 14)
{
nRegenAmount=4;
fRegenTime=4.0;
}
else if(nPerform >= 18 && nLevel >= 12)
{
nRegenAmount=3;
fRegenTime=4.0;
}
else if(nPerform >= 15 && nLevel >= 8)
{
nRegenAmount=3;
fRegenTime=4.0;
}
else if(nPerform >= 12 && nLevel >= 6)
{
nRegenAmount=2;
fRegenTime=4.0;
}
else if(nPerform >= 9 && nLevel >= 3)
{
nRegenAmount=2;
fRegenTime=4.0;
}
else if(nPerform >= 6 && nLevel >= 2)
{
nRegenAmount=1;
fRegenTime=4.0;
}
else if(nPerform >= 3 && nLevel >= 1)
{
nRegenAmount=1;
fRegenTime=4.0;
}
effect eVis = EffectVisualEffect(VFX_DUR_BARD_SONG);
eRegen=EffectRegenerate(nRegenAmount,fRegenTime);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eLink = EffectLinkEffects(eRegen, eDur);
effect eImpact = EffectVisualEffect(VFX_IMP_HEAD_NATURE);
effect eFNF = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, GetLocation(OBJECT_SELF));
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
eLink = ExtraordinaryEffect(eLink);
while(GetIsObjectValid(oTarget))
{
if(oTarget == OBJECT_SELF)
{
effect eLinkBard = EffectLinkEffects(eLink, eVis);
eLinkBard = ExtraordinaryEffect(eLinkBard);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLinkBard, oTarget, RoundsToSeconds(nDuration));
}
else if(GetIsFriend(oTarget))
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
}
}
void dwarfire()
{
object oPC=OBJECT_SELF;
effect eFear=EffectImmunity(IMMUNITY_TYPE_FEAR);
effect eVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_POSITIVE);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eLink = EffectLinkEffects(eFear, eMind);
eLink = EffectLinkEffects(eLink, eDur);
effect eWis=EffectAbilityDecrease(ABILITY_WISDOM,10);
effect eInt=EffectAbilityDecrease(ABILITY_INTELLIGENCE,10);
if (MyPRCGetRacialType(OBJECT_SELF)!=RACIAL_TYPE_DWARF)
{
if (FortitudeSave(OBJECT_SELF,22,SAVING_THROW_TYPE_POISON)==0)
{
eLink = EffectLinkEffects(eInt, eWis);
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE));
eVis = EffectVisualEffect(VFX_FNF_LOS_EVIL_10);
PlayVoiceChat(VOICE_CHAT_POISONED);
}
}
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF,240.0);
}
void medicinebag(object oTarget)
{
if (oTarget==OBJECT_SELF)
{
SendMessageToPC(OBJECT_SELF,"You cannot use this on yourself");
return;
}
if ((!GetIsObjectValid(oTarget))||(!GetIsPC(oTarget)))
{
SendMessageToPC(OBJECT_SELF,"Target the bandages on a dying character to use them");
return;
}
int nHP=GetCurrentHitPoints(oTarget);
if (nHP>0)
{
SendMessageToPC(OBJECT_SELF,"This character is not bleeding to death");
return;
}
if (GetIsInCombat(OBJECT_SELF))
{
int nSkill=GetSkillRank(SKILL_HEAL,OBJECT_SELF);
if (nSkill==-1)
{
nSkill=0;
}
int nRandom=d20();
int nTotal=nSkill+nRandom;
SendMessageToPC(OBJECT_SELF,"Skill check for using the medicine bag in combat: Rolled "+IntToString(nRandom)+" plus heal skill "+IntToString(nSkill)+" for a total of "+IntToString(nTotal)+" vs DC 15");
if (nTotal<15)
{
return;
}
}
int nHeal=2-nHP;
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(nHeal),oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_HEALING_S),oTarget);
}
void cormpot()
{
effect eAC=EffectACIncrease(4,AC_NATURAL_BONUS);
effect eDef=EffectACIncrease(4,AC_DEFLECTION_BONUS);
effect eLink=EffectLinkEffects(eAC,eDef);
effect eHP=EffectTemporaryHitpoints(15);
eLink=EffectLinkEffects(eHP,eLink);
effect eDam=EffectDamageIncrease(4,DAMAGE_TYPE_POSITIVE);
eLink=EffectLinkEffects(eDam,eLink);
effect eVis=EffectVisualEffect(VFX_DUR_MAGIC_RESISTANCE);
eLink=EffectLinkEffects(eVis,eLink);
effect eRegen=EffectRegenerate(2,1.0);
eLink=EffectLinkEffects(eRegen,eLink);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_SUPER_HEROISM),OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLink,OBJECT_SELF,RoundsToSeconds(15));
}
void UseHolySymbol(object oPC=OBJECT_SELF)
{
int nDur=10+GetAbilityModifier(ABILITY_CHARISMA,oPC);
effect eAOE = EffectAreaOfEffect(AOE_MOB_FIRE,"jw_empty_script","jw_palaur_hb","jw_empty_script");
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY), oPC);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAOE, oPC,RoundsToSeconds(nDur));
}
void UseUnHolySymbol(object oPC=OBJECT_SELF)
{
int nDur=10+GetAbilityModifier(ABILITY_CHARISMA,oPC);
effect eAOE = EffectAreaOfEffect(AOE_MOB_UNEARTHLY,"jw_empty_script","jw_blackaur_hb","jw_empty_script");
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HARM), oPC);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAOE, oPC,RoundsToSeconds(nDur));
}