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.
This commit is contained in:
Jaysyn904
2024-12-21 01:44:24 -05:00
parent 7307efab11
commit 4f8ad7c575
75 changed files with 57673 additions and 54037 deletions

View File

@@ -15,15 +15,25 @@ LEGACY ITEM BONUSES
LEGACY ITEM ABILITIES
Sturdy Grip (Su): At 5th level, while wearing Bullybasher<65>s Gauntlets, you gain a +4 bonus on grapple checks.
Knock Silly (Su): At 6th level and higher, when you deal damage to an opponent with Bullybasher<65>s Gauntlets, that opponent is affected as if by the touch of idiocy spell. You must decide whether or not to use this ability before making the attack roll, and if you miss, the attempt is wasted for the day. This ability is usable two times per day. Caster level 5th.
Solitary Warrior (Su): Starting at 7th level, when you are adjacent to at least two foes and no ally is within 30 feet, the effective enhancement bonus of Bullybasher<65>s Gauntlets increases by 1 and you deal an extra 1d6 points of damage with each successful attack made with the gauntlets.
Cheat Death (Su): At 8th level and higher, you automatically heal 1 hit point if your hit points drop to between <20>1 and <20>9. This ability functions once per day.
Power of One (Su): At 10th level, Bullybasher<65>s Gauntlets grant a +2 enhancement bonus to your Constitution score. At 14th level, the bonus rises to +4. It rises to +6 at 18th level.
Rough and Tumble (Su): At 11th level, you gain damage reduction 5/magic.
Giant Bearing (Su): Beginning at 13th level, you gain a +2 bonus to Strength, a <20>2 penalty to Dexterity (to a minimum of 1), a <20>1 penalty on attack rolls, and a +4 bonus on grapple checks.
Stone Gathering (Su): At 15th level and higher, you can hurl rocks. The rocks deal 2d6 (plus Strength modifier) points of bludgeoning damage.
Frightful Presence (Su): Starting at 17th level, you unsettle surrounding foes when you are attacking or charging. Creatures within a radius of 30 feet are subject to the effect if they have fewer Hit Dice than you. A potentially affected creature that succeeds on a Will save (DC 10 + 1/2 your character level + your Charisma modifier) suffers no ill effect and is immune to your frightful presence for 24 hours. Those who fail the save become shaken for 4d6 rounds.
No Wound Too Big (Su): At 18th level and higher, while wearing Bullybasher<65>s Gauntlets, you heal 2 points of damage every hour.
Lightning Punch (Su): Beginning at 19th level, once per day on command, you can charge Bullybasher<65>s Gauntlets with chain lightning. The next creature struck by the gauntlets is the target of the spell, and secondary bolts can strike other foes within 30 feet. A charge is maintained until the gauntlets strike a creature. The save DC is 19, or 16 + your Charisma modifier, whichever is higher. Caster level 15th.
*/
@@ -67,11 +77,142 @@ void main()
if(oWOL != GetItemInSlot(INVENTORY_SLOT_ARMS, oPC))
{
SetCompositeAttackBonus(oPC, "Bullybashers_Atk", 0, ATTACK_BONUS_MISC);
SetCompositeBonus(oSkin, "Bullybashers_Con", 0, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON);
return;
SetCompositeBonus(oSkin, "Bullybashers_Con", 0, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON);
return;
}
//:: We aren't being called from any event, instead from EvalPRCFeats
if(nEvent == FALSE)
{
int nAttackPenalty = 0;
int nSkillPenalty = 0;
int nHPPenalty = 0;
// Determine penalties based on highest applicable level
if (nHD >= 19) nSkillPenalty = 6;
else if (nHD >= 16) nSkillPenalty = 5;
else if (nHD >= 15) nSkillPenalty = 4;
else if (nHD >= 10) nSkillPenalty = 3;
else if (nHD >= 6) nSkillPenalty = 1;
if (nHD >= 18) nHPPenalty = 8;
else if (nHD >= 14) nHPPenalty = 6;
else if (nHD >= 10) nHPPenalty = 4;
else if (nHD >= 6) nHPPenalty = 2;
if (nHD >= 13) nAttackPenalty = -2;
else if (nHD >= 7) nAttackPenalty = -1;
// Apply penalties
if (nSkillPenalty > 0)
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT, TagEffect(ExtraordinaryEffect(EffectSkillDecrease(SKILL_ALL_SKILLS, nSkillPenalty)), "WOLEffect"), oPC);
}
if (nAttackPenalty < 0)
{
SetCompositeAttackBonus(oPC, "Bullybashers_Atk", nAttackPenalty, ATTACK_BONUS_MISC);
}
nHPPen += nHPPenalty;
// 5th to 10th level abilities
if (GetHasFeat(FEAT_LEAST_LEGACY, oPC))
{
if (nHD >= 5)
{
SetLocalInt(oPC, "BullybashersGrapple", TRUE);
}
if (nHD >= 6)
{
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_BULLY_SILLY), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
if (nHD >= 7)
{
AddEventScript(oPC, EVENT_ONHEARTBEAT, "wol_m_bully", TRUE, FALSE);
}
if (nHD >= 8)
{
SetLocalInt(oPC, "BullybashersDeath", TRUE);
}
if (nHD >= 10)
{
SetCompositeBonus(oSkin, "Bullybashers_Con", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON);
}
}
// 11th to 16th level abilities
if (GetHasFeat(FEAT_LESSER_LEGACY, oPC))
{
if (nHD >= 11)
{
IPSafeAddItemProperty(oSkin, ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1, IP_CONST_DAMAGESOAK_5_HP), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
if (nHD >= 12)
{
//IPSafeAddItemProperty(oWOL, ItemPropertyACBonus(2)); <-- Gauntlets get weapon enhancement.
IPSafeAddItemProperty(oWOL, ItemPropertyEnhancementBonus(2), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING , FALSE, TRUE);
//RemoveSpecificProperty(oWOL, ITEM_PROPERTY_ENHANCEMENT_BONUS, 1, -1, 1, "", -1, DURATION_TYPE_PERMANENT);
}
if(nHD >= 13)
{
AddEventScript(oPC, EVENT_ONPLAYEREQUIPITEM, "wol_m_bully", TRUE, FALSE);
AddEventScript(oPC, EVENT_ONPLAYERUNEQUIPITEM, "wol_m_bully", TRUE, FALSE);
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_BULLY_GIANT), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//ActionCastSpell(WOL_BULLY_GIANT, 5, 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, TRUE, oPC, TRUE, FALSE);
SetLocalInt(oPC, "BullybashersGiant", TRUE);
}
if (nHD >= 14)
{
SetCompositeBonus(oSkin, "Bullybashers_Con", 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON);
}
if (nHD >= 15)
{
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_BULLY_STONE), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
if (nHD >= 16)
{
//IPSafeAddItemProperty(oWOL, ItemPropertyACBonus(3)); // <-- Gauntlets get weapon enhancement.
IPSafeAddItemProperty(oWOL, ItemPropertyEnhancementBonus(3), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING , FALSE, TRUE);
//RemoveSpecificProperty(oWOL, ITEM_PROPERTY_ENHANCEMENT_BONUS, 2, -1, 1, "", -1, DURATION_TYPE_PERMANENT);
}
}
// 17th+ level abilities
if (GetHasFeat(FEAT_GREATER_LEGACY, oPC))
{
if (nHD >= 17)
{
AddEventScript(oWOL, EVENT_ITEM_ONHIT, "wol_m_bully", TRUE, FALSE);
IPSafeAddItemProperty(oWOL, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
if (nHD >= 18)
{
SetCompositeBonus(oSkin, "Bullybashers_Con", 6, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON);
}
if (nHD >= 19)
{
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_BULLY_CHAIN), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
if (nHD >= 20)
{
IPSafeAddItemProperty(oWOL, ItemPropertyEnhancementBonus(4), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING , FALSE, TRUE);
//IPSafeAddItemProperty(oWOL, ItemPropertyACBonus(4));
}
}
SetLocalInt(oPC, "WoLHealthPenalty", nHPPen);
if (!GetLocalInt(oPC, "WoLHealthPenaltyHB") && nHPPen > 0)
{
WoLHealthPenaltyHB(oPC);
SetLocalInt(oPC, "WoLHealthPenaltyHB", TRUE);
}
}
// We aren't being called from any event, instead from EvalPRCFeats
/* // We aren't being called from any event, instead from EvalPRCFeats //:: <== LOL, good work on the stacking skill penalty.
if(nEvent == FALSE)
{
// 5th to 10th level abilities
@@ -184,41 +325,34 @@ void main()
SetLocalInt(oPC, "WoLHealthPenaltyHB", TRUE);
}
}
// We are called from the OnPlayerEquipItem eventhook. Add OnHitCast: Unique Power to oPC's weapon
*/
//:: We are called from the OnPlayerEquipItem eventhook. Add OnHitCast: Unique Power to oPC's weapon
else if(nEvent == EVENT_ONPLAYEREQUIPITEM)
{
oPC = GetItemLastEquippedBy();
oItem = GetItemLastEquipped();
if(DEBUG) DoDebug("wol_m_bully - OnEquip\n"
+ "oPC = " + DebugObject2Str(oPC) + "\n"
+ "oItem = " + DebugObject2Str(oItem) + "\n"
);
// Only applies to weapons
// IPGetIsMeleeWeapon is bugged and returns true on items it should not
if(oItem == oWOL)
{
// Add eventhook to the item
AddEventScript(oItem, EVENT_ITEM_ONHIT, "wol_m_bully", TRUE, FALSE);
if(nHD >= 17)
{
oPC = GetItemLastEquippedBy();
oItem = GetItemLastEquipped();
if(DEBUG) DoDebug("wol_m_bully - OnEquip\n"
+ "oPC = " + DebugObject2Str(oPC) + "\n"
+ "oItem = " + DebugObject2Str(oItem) + "\n"
);
// Only applies to weapons
// IPGetIsMeleeWeapon is bugged and returns true on items it should not
if(oItem == oWOL)
{
// Add eventhook to the item
AddEventScript(oItem, EVENT_ITEM_ONHIT, "wol_m_bully", TRUE, FALSE);
// Add the OnHitCastSpell: Unique needed to trigger the event
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
// Only applies to weapons
// IPGetIsMeleeWeapon is bugged and returns true on items it should not
/*if(oItem == GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) ||
oItem == GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC) ||
oItem == GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC) ||
oItem == GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC) ||
(oItem == GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC) && !GetIsShield(oItem)))
{
// Add eventhook to the item
AddEventScript(oItem, EVENT_ITEM_ONHIT, "wol_m_bully", TRUE, FALSE);
// Add the OnHitCastSpell: Unique needed to trigger the event
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}*/
// Add the OnHitCastSpell: Unique needed to trigger the event
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
}
}
// We are called from the OnPlayerUnEquipItem eventhook. Remove OnHitCast: Unique Power from oPC's weapon
else if(nEvent == EVENT_ONPLAYERUNEQUIPITEM)
@@ -230,24 +364,17 @@ void main()
+ "oItem = " + DebugObject2Str(oItem) + "\n"
);
// Only applies to weapons
/*if(IPGetIsMeleeWeapon(oItem) || GetBaseItemType(oItem) == BASE_ITEM_CBLUDGWEAPON ||
GetBaseItemType(oItem) == BASE_ITEM_CPIERCWEAPON || GetBaseItemType(oItem) == BASE_ITEM_CSLASHWEAPON ||
GetBaseItemType(oItem) == BASE_ITEM_CSLSHPRCWEAP)
{
// Add eventhook to the item
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "wol_m_bully", TRUE, FALSE);
PRCRemoveSpellEffects(WOL_BULLY_GIANT, oPC, oPC);
// Remove the temporary OnHitCastSpell: Unique
RemoveSpecificProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL, IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 0, 1, "", -1, DURATION_TYPE_TEMPORARY);
}*/
IPSafeAddItemProperty(oWOL, ItemPropertyEnhancementBonus(1), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING , FALSE, TRUE);
if(oItem == oWOL)
{
// Add eventhook to the item
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "wol_m_bully", TRUE, FALSE);
// Remove the temporary OnHitCastSpell: Unique
RemoveSpecificProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL, IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 0, 1, "", -1, DURATION_TYPE_TEMPORARY);
RemoveSpecificProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL, IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 0, 1, "", -1, DURATION_TYPE_TEMPORARY);
}
}
else if(nEvent == EVENT_ITEM_ONHIT)
@@ -341,7 +468,8 @@ void main()
//FloatingTextStringOnCreature("Solitary Warrior Test nCount "+IntToString(nCount), oPC, FALSE);
if (nCount >= 2 && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))) // Need to be unarmed for this to apply
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectLinkEffects(EffectACIncrease(1, AC_DODGE_BONUS), EffectDamageIncrease(DAMAGE_BONUS_1d6, DAMAGE_TYPE_BLUDGEONING)), oPC, 6.0);
//ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectLinkEffects(EffectACIncrease(1, AC_DODGE_BONUS), EffectDamageIncrease(DAMAGE_BONUS_1d6, DAMAGE_TYPE_BLUDGEONING)), oPC, 6.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectLinkEffects(EffectAttackIncrease(1), EffectDamageIncrease(DAMAGE_BONUS_1d6, DAMAGE_TYPE_BLUDGEONING)), oPC, 6.0);
FloatingTextStringOnCreature("Solitary Warrior Active", oPC, FALSE);
}
}// end if - Running HB event

View File

@@ -37,21 +37,40 @@ void main()
}
case WOL_BULLY_GIANT:
{
effect eLink = EffectLinkEffects(EffectAbilityIncrease(ABILITY_STRENGTH, 2), EffectAbilityDecrease(ABILITY_DEXTERITY, 2));
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, 9999.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oPC, 600.0);
nUses = 999;
break;
}
case WOL_BULLY_STONE:
{
object oTarget = PRCGetSpellTargetObject();
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: