PRC8/nwn/nwnprc/trunk/newspellbook/tob_ssn_balance.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

96 lines
3.5 KiB
Plaintext

#include "tob_inc_move"
#include "tob_movehook"
////#include "prc_alterations"
#include "prc_inc_combat"
void SSNNegAttack(object oTarget, object oInitiator)
{
int nLevels = GetLocalInt(oInitiator, "SSN_NEG_LEVELS");
effect eNone, eLink, eVis;
PerformAttackRound(oTarget, oInitiator, eNone);
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{
eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
eLink = SupernaturalEffect(EffectNegativeLevel(1));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, HoursToSeconds(1));
// Heal us
eVis = EffectVisualEffect(VFX_IMP_HEALING_L);
eLink = SupernaturalEffect(EffectHeal(5));
eLink = EffectLinkEffects(eVis, eLink);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oInitiator);
// Tally hits
SetLocalInt(oInitiator, "SSN_NEG_LEVELS", ++nLevels);
}
}
void BalanceLightDarkCon(object oInitiator)
{
int nDam = GetLocalInt(oInitiator, "SSN_NEG_LEVELS");
if(DEBUG) DoDebug("Negative attack hits: " + IntToString(nDam));
if(nDam > 0)
{
// Con damage
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
effect eLink = EffectAbilityDecrease(ABILITY_CONSTITUTION, nDam);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oInitiator);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oInitiator, HoursToSeconds(1));
}
}
void main()
{
int nEvent = GetRunningEvent();
int nID = GetSpellId();
int nCount;
object oInitiator = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
if(nID == SSN_BALANCELD_ATTACK)
{
if(!GetLocalInt(oInitiator, "SSN_BalanceLD_Activated"))
{
FloatingTextStringOnCreature("*You are not transformed by Balance of Light and Dark*", oInitiator, FALSE);
return;
}
if(!GetIsUnarmed(oInitiator))
{
FloatingTextStringOnCreature("*You must be unarmed to use this ability*", oInitiator, FALSE);
return;
}
SSNNegAttack(oTarget, oInitiator);
return; // Skip the rest
}
if (GetWeaponRanged(oItem))
{
FloatingTextStringOnCreature("You must use a melee weapon for this ability", oInitiator, FALSE);
return;
} // Has to be a melee weapon
// We aren't being called from any event, perform setup
if(nEvent == FALSE)
{
if(!TakeSwiftAction(oInitiator)) return;
effect eCritImmune = EffectImmunity(IMMUNITY_TYPE_CRITICAL_HIT);
effect eMindImmune = EffectImmunity(IMMUNITY_TYPE_MIND_SPELLS);
effect eDeathImmune = EffectImmunity(IMMUNITY_TYPE_DEATH);
effect ePoisonImmune = EffectImmunity(IMMUNITY_TYPE_POISON);
effect eHide = EffectSkillIncrease(SKILL_HIDE, 8);
effect eAOE = EffectVisualEffect(VFX_DUR_DARKNESS);
effect eLink = EffectLinkEffects(eMindImmune, eCritImmune);
eLink = EffectLinkEffects(eLink, eDeathImmune);
eLink = EffectLinkEffects(eLink, ePoisonImmune);
eLink = EffectLinkEffects(eLink, eHide);
eLink = EffectLinkEffects(eLink, eAOE);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oInitiator, TurnsToSeconds(1));
// Let us use the attack
SetLocalInt(oInitiator, "SSN_BalanceLD_Activated", TRUE);
DelayCommand(TurnsToSeconds(1), BalanceLightDarkCon(oInitiator));
}
}