PRC8/nwn/nwnprc/trunk/scripts/wol_sla_bully.nss
Jaysyn904 4f8ad7c575 Revamped Bullybasher's Gauntlets
Revamped Bullybasher's Gauntlets to be closer to pen and paper: Enhancement instead of AC bonus, Giant Bearing is now an at-will activatable ability, Stone Gathering doesn't work unless Giant Bearing is active.  Stone Gathering is usable more than once a day.  Fixed Ghoul Touch to register w/ placeables.  Updated release archive.
2024-12-21 01:44:24 -05:00

108 lines
3.8 KiB
Plaintext

/**
* @file
* Spellscript for Bullybasher's Gauntlets SLAs
*
*/
#include "prc_inc_template"
#include "prc_inc_combat"
void main()
{
object oPC = OBJECT_SELF;
int nCasterLevel, nDC, nSpell, nUses;
int nSLA = GetSpellId();
effect eNone;
int nInstant = FALSE;
object oWOL = GetItemPossessedBy(oPC, "WOL_Bullybashers");
// You get nothing if you aren't wielding the item
if(oWOL != GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)) return;
switch(nSLA){
case WOL_BULLY_SILLY:
{
nUses = 2;
// Check uses per day.
if (nUses > GetLegacyUses(oPC, nSLA))
{
object oTarget = PRCGetSpellTargetObject();
PerformAttackRound(oTarget, oPC, eNone, 0.0, 0, 0, 0, FALSE, "Knock Silly Hit", "Knock Silly Miss");
SetLegacyUses(oPC, nSLA);
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
ActionCastSpell(SPELL_TOUCH_OF_IDIOCY, 5, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, TRUE, oTarget);
}
break;
}
case WOL_BULLY_GIANT:
{
effect eLOS;
if(GetGender(OBJECT_SELF) == GENDER_FEMALE)
{
eLOS = EffectVisualEffect(290);
}
else
{
eLOS = EffectVisualEffect(VFX_FNF_HOWL_WAR_CRY);
}
effect eLink = EffectLinkEffects(EffectAbilityIncrease(ABILITY_STRENGTH, 2), EffectAbilityDecrease(ABILITY_DEXTERITY, 2));
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_IMP_HEAD_SONIC));
eLink = EffectLinkEffects(eLink, eLOS);
eLink = EffectLinkEffects(eLink, EffectAttackDecrease(1));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oPC, 600.0);
nUses = 999;
break;
}
case WOL_BULLY_STONE:
{
if(!GetHasSpellEffect(WOL_BULLY_GIANT, oPC))
{
SendMessageToPC(oPC, "Giant Bearing must be active to use this ability");
return;
}
object oTarget = PRCGetSpellTargetObject();
int nAtk = GetAttackRoll(oTarget, oPC, OBJECT_INVALID);
if (nAtk)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, ExtraordinaryEffect(EffectDamage(d6(2*nAtk), DAMAGE_TYPE_BLUDGEONING)), oTarget);
FloatingTextStringOnCreature("Stone Throw Hit", oPC, FALSE);
}
nUses = 999;
break;
}
case WOL_BULLY_CHAIN:
{
nUses = 1;
// Check uses per day.
if (nUses > GetLegacyUses(oPC, nSLA))
{
object oTarget = PRCGetSpellTargetObject();
PerformAttackRound(oTarget, oPC, eNone, 0.0, 0, 0, 0, FALSE, "Lightning Punch Hit", "Lightning Punch Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{
//ActionCastSpell(SPELL_TOUCH_OF_IDIOCY, 5, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, TRUE, oTarget);
DoRacialSLA(SPELL_CHAIN_LIGHTNING, 15, max(19, 16 + GetAbilityModifier(ABILITY_CHARISMA, oPC)), TRUE);
SetLegacyUses(oPC, nSLA);
}
}
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);
}
}