From 79104964dba6e1f3aae47c101ea4ec785f5e7044 Mon Sep 17 00:00:00 2001
From: Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com>
Date: Sun, 24 Aug 2025 12:47:34 -0400
Subject: [PATCH] 2025/08/24 Afternoon Update
Blood in the Water now has proper duration for non-Bloodclaw Masters.
GetIsOnHitCastSpell() now tracks if something is a weapon better.
Fixed bad line breaks in TLK.
---
nwn/nwnprc/trunk/include/prc_inc_onhit.nss | 21 +++++-
.../trunk/newspellbook/tob_tgcw_bldwtr.nss | 73 ++++++++++++++++++-
nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml | 26 +++----
3 files changed, 100 insertions(+), 20 deletions(-)
diff --git a/nwn/nwnprc/trunk/include/prc_inc_onhit.nss b/nwn/nwnprc/trunk/include/prc_inc_onhit.nss
index 3f0da674..ab688875 100644
--- a/nwn/nwnprc/trunk/include/prc_inc_onhit.nss
+++ b/nwn/nwnprc/trunk/include/prc_inc_onhit.nss
@@ -808,7 +808,24 @@ int GetIsOnHitCastSpell(object oSpellTarget = OBJECT_INVALID, object oSpellCastI
if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is armor; attacker = "+GetName(oAttacker)+", defender = "+GetName(oDefender));
}
// is the spell type item a weapon?
- else if (iWeaponType == StringToInt(Get2DACache("baseitems", "WeaponType", iBaseType)))
+ int nWT = StringToInt(Get2DACache("baseitems", "WeaponType", iBaseType));
+ if (nWT > 0)
+ {
+ if (oSpellTarget == OBJECT_INVALID)
+ oSpellTarget = PRCGetSpellTargetObject(oSpellOrigin);
+
+ oAttacker = oSpellOrigin;
+ oDefender = oSpellTarget;
+
+ if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is weapon [WT="+IntToString(nWT)+"]; attacker="+GetName(oAttacker)+", defender="+GetName(oDefender));
+ }
+ else
+ {
+ if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is neither weapon nor armor; returning FALSE");
+ return FALSE;
+ }
+
+/* else if (iWeaponType == StringToInt(Get2DACache("baseitems", "WeaponType", iBaseType)))
{
// determine the target, if not already given
if (oSpellTarget == OBJECT_INVALID)
@@ -823,7 +840,7 @@ int GetIsOnHitCastSpell(object oSpellTarget = OBJECT_INVALID, object oSpellCastI
{
if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is neither weapon nor armor; returning FALSE");
return FALSE;
- }
+ } */
// the spell origin must possess the item that cast the spell (at least for the aurora engine, in prc_inc_combat that may differ)
diff --git a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_bldwtr.nss b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_bldwtr.nss
index 57e3d5f6..2d1f2c70 100644
--- a/nwn/nwnprc/trunk/newspellbook/tob_tgcw_bldwtr.nss
+++ b/nwn/nwnprc/trunk/newspellbook/tob_tgcw_bldwtr.nss
@@ -28,6 +28,77 @@
//#include "prc_alterations"
void main()
+{
+ if (!PreManeuverCastCode())
+ {
+ // If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
+ return;
+ }
+
+ // End of Spell Cast Hook
+ object oInitiator = OBJECT_SELF;
+ object oTarget = PRCGetSpellTargetObject();
+ struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
+
+ if(move.bCanManeuver)
+ {
+ object oItem = IPGetTargetedOrEquippedMeleeWeapon();
+ // Add the OnHit
+ IPSafeAddItemProperty(
+ oItem,
+ ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1),
+ 9999.0,
+ X2_IP_ADDPROP_POLICY_KEEP_EXISTING,
+ FALSE,
+ FALSE
+ );
+
+ // build stance effects
+ effect eDur;
+ effect eTmp;
+ int nHasEffect = 0;
+
+ // --- add harmless anchor so chain persists ---
+ eDur = EffectLinkEffects(EffectAttackIncrease(1), EffectAttackDecrease(1));
+ nHasEffect = 1;
+
+ if (GetHasDefensiveStance(oInitiator, DISCIPLINE_TIGER_CLAW))
+ {
+ eTmp = EffectSavingThrowIncrease(SAVING_THROW_ALL, 2, SAVING_THROW_TYPE_ALL);
+ if (nHasEffect == 0) { eDur = eTmp; nHasEffect = 1; }
+ else eDur = EffectLinkEffects(eDur, eTmp);
+ }
+
+ if (GetLevelByClass(CLASS_TYPE_BLOODCLAW_MASTER, oInitiator) >= 2)
+ {
+ eTmp = EffectMovementSpeedIncrease(33);
+ if (nHasEffect == 0) { eDur = eTmp; nHasEffect = 1; }
+ else eDur = EffectLinkEffects(eDur, eTmp);
+
+ eTmp = EffectACIncrease(1);
+ if (nHasEffect == 0) { eDur = eTmp; nHasEffect = 1; }
+ else eDur = EffectLinkEffects(eDur, eTmp);
+ }
+
+ if (GetLocalInt(oInitiator, "TigerFangSharpClaw"))
+ {
+ eTmp = EffectDamageIncrease(DAMAGE_BONUS_1, DAMAGE_TYPE_BASE_WEAPON);
+ if (nHasEffect == 0) { eDur = eTmp; nHasEffect = 1; }
+ else eDur = EffectLinkEffects(eDur, eTmp);
+ }
+
+ // apply stance bonuses permanently (cleared by your stance removal code elsewhere)
+ if (nHasEffect)
+ SPApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(eDur), oTarget);
+
+ // stance activation VFX, lasts one round only
+ effect eVFX = EffectVisualEffect(VFX_DUR_PROTECTION_EVIL_MAJOR);
+ SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVFX, oTarget, RoundsToSeconds(1));
+ }
+}
+
+
+/* void main()
{
if (!PreManeuverCastCode())
{
@@ -59,4 +130,4 @@ void main()
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(eDur), oTarget);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVFX, oTarget, 6.0f);
}
-}
\ No newline at end of file
+} */
\ No newline at end of file
diff --git a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
index 0080be64..f8fee5b6 100644
--- a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
+++ b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
@@ -73549,8 +73549,7 @@ Badger
Dire Rat
Dog
Hawk
-Tiny Viper
-
+Tiny Viper
Summon Dire Badger
Summon Dire Rat
Summon Dog
@@ -73581,8 +73580,7 @@ Dire Badger
Cooshee
Wolf
Small Viper
-Black Bear
-
+Black Bear
Summon Dire Boar
Summon Cooshee
Summon Wolf
@@ -73612,8 +73610,7 @@ Brown Bear
Dire Wolf
Large Viper
Leopard
-Satyr [without pipes]
-
+Satyr [without pipes]
Summon Brown Bear
Summon Dire Wolf
Summon Large Viper
@@ -73673,8 +73670,7 @@ Medium Air Elemental
Medium Earth Elemental
Medium Fire Elemental
Medium Water Elemental
-Dire Bear
-
+Dire Bear
Summon Medium Air Elemental
Summon Medum Earth Elemental
Summon Medium Fire Elemental
@@ -73704,8 +73700,7 @@ Large Air Elemental
Large Earth Elemental
Large Fire Elemental
Large Water Elemental
-Dire Tiger
-
+Dire Tiger
Summon Large Air Elemental
Summon Large Earth Elemental
Summon Large Fire Elemental
@@ -73718,8 +73713,7 @@ Dire Tiger
Summon Nature's Ally VI (15)
Summon Nature's Ally VI (20)
****
- Summon Nature's Ally VII
-
+ Summon Nature's Ally VII
Conjuration (Summoning)
Level: Druid 7, Shaman 7
Components: V, S, DF
@@ -73749,8 +73743,7 @@ Manitcore
Summon Nature's Ally VII (15)
Summon Nature's Ally VII (20)
****
- Summon Nature's Ally VIII
-
+ Summon Nature's Ally VIII
Conjuration (Summoning)
Level: Druid 8, Shaman 8
Components: V, S, DF
@@ -75687,8 +75680,7 @@ Use: Automatic
Type of Feat: Item Creation
You store a divine spell within a specially prepared herb
Prerequisites: Lore 4 ranks, divine spellcaster level 3rd.
-Benefit: You create an infusion of any divine spell available to you. Infusing an herb with a spell takes one day. When you create an infusion, you set the caster level,
-which must be sufficient to cast the spell in question but not higher than your own level. The base price of an infusion is its spell level times its caster level times 50 gp. To create an infusion, you must spend 1/25 of this base price in XP and use up raw materials costing one-half this base price. Any infusion that stores a spell with a costly material component or an XP cost also carries a commensurate cost. In addition to the costs derived from the base price, you must also expend the material component or pay the XP when creating the infusion
+Benefit: You create an infusion of any divine spell available to you. Infusing an herb with a spell takes one day. When you create an infusion, you set the caster level, which must be sufficient to cast the spell in question but not higher than your own level. The base price of an infusion is its spell level times its caster level times 50 gp. To create an infusion, you must spend 1/25 of this base price in XP and use up raw materials costing one-half this base price. Any infusion that stores a spell with a costly material component or an XP cost also carries a commensurate cost. In addition to the costs derived from the base price, you must also expend the material component or pay the XP when creating the infusion
Magical Artisian: Create Infusion
****
Mundane Herb
@@ -76235,4 +76227,4 @@ Specifics: You gain a +4 perfection bonus on Will saving throws against charm an
Type of Feat: Exalted
Prerequisite: Wis 13+
Specifics: You gain a +2 bonus on saving throws to resist any fear effect, despair effect (such as the crushing despair spell), or similar mind-affecting condition, but not charms or compulsions (such as the charm person and dominate person spells)
-
+
\ No newline at end of file