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