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.
This commit is contained in:
Jaysyn904 2025-08-24 12:47:34 -04:00
parent c86a6645b0
commit 79104964db
3 changed files with 100 additions and 20 deletions

View File

@ -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)); if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is armor; attacker = "+GetName(oAttacker)+", defender = "+GetName(oDefender));
} }
// is the spell type item a weapon? // 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 // determine the target, if not already given
if (oSpellTarget == OBJECT_INVALID) 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"); if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is neither weapon nor armor; returning FALSE");
return 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) // the spell origin must possess the item that cast the spell (at least for the aurora engine, in prc_inc_combat that may differ)

View File

@ -28,6 +28,77 @@
//#include "prc_alterations" //#include "prc_alterations"
void main() 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()) if (!PreManeuverCastCode())
{ {
@ -59,4 +130,4 @@ void main()
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(eDur), oTarget); SPApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(eDur), oTarget);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVFX, oTarget, 6.0f); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVFX, oTarget, 6.0f);
} }
} } */

View File

@ -73549,8 +73549,7 @@ Badger
Dire Rat Dire Rat
Dog Dog
Hawk Hawk
Tiny Viper Tiny Viper</entry>
</entry>
<entry id="199002" lang="en" sex="m">Summon Dire Badger</entry> <entry id="199002" lang="en" sex="m">Summon Dire Badger</entry>
<entry id="199003" lang="en" sex="m">Summon Dire Rat</entry> <entry id="199003" lang="en" sex="m">Summon Dire Rat</entry>
<entry id="199004" lang="en" sex="m">Summon Dog</entry> <entry id="199004" lang="en" sex="m">Summon Dog</entry>
@ -73581,8 +73580,7 @@ Dire Badger
Cooshee Cooshee
Wolf Wolf
Small Viper Small Viper
Black Bear Black Bear</entry>
</entry>
<entry id="199016" lang="en" sex="m">Summon Dire Boar</entry> <entry id="199016" lang="en" sex="m">Summon Dire Boar</entry>
<entry id="199017" lang="en" sex="m">Summon Cooshee</entry> <entry id="199017" lang="en" sex="m">Summon Cooshee</entry>
<entry id="199018" lang="en" sex="m">Summon Wolf</entry> <entry id="199018" lang="en" sex="m">Summon Wolf</entry>
@ -73612,8 +73610,7 @@ Brown Bear
Dire Wolf Dire Wolf
Large Viper Large Viper
Leopard Leopard
Satyr [without pipes] Satyr [without pipes]</entry>
</entry>
<entry id="199030" lang="en" sex="m">Summon Brown Bear</entry> <entry id="199030" lang="en" sex="m">Summon Brown Bear</entry>
<entry id="199031" lang="en" sex="m">Summon Dire Wolf</entry> <entry id="199031" lang="en" sex="m">Summon Dire Wolf</entry>
<entry id="199032" lang="en" sex="m">Summon Large Viper</entry> <entry id="199032" lang="en" sex="m">Summon Large Viper</entry>
@ -73673,8 +73670,7 @@ Medium Air Elemental
Medium Earth Elemental Medium Earth Elemental
Medium Fire Elemental Medium Fire Elemental
Medium Water Elemental Medium Water Elemental
Dire Bear Dire Bear</entry>
</entry>
<entry id="199058" lang="en" sex="m">Summon Medium Air Elemental</entry> <entry id="199058" lang="en" sex="m">Summon Medium Air Elemental</entry>
<entry id="199059" lang="en" sex="m">Summon Medum Earth Elemental</entry> <entry id="199059" lang="en" sex="m">Summon Medum Earth Elemental</entry>
<entry id="199060" lang="en" sex="m">Summon Medium Fire Elemental</entry> <entry id="199060" lang="en" sex="m">Summon Medium Fire Elemental</entry>
@ -73704,8 +73700,7 @@ Large Air Elemental
Large Earth Elemental Large Earth Elemental
Large Fire Elemental Large Fire Elemental
Large Water Elemental Large Water Elemental
Dire Tiger Dire Tiger</entry>
</entry>
<entry id="199072" lang="en" sex="m">Summon Large Air Elemental</entry> <entry id="199072" lang="en" sex="m">Summon Large Air Elemental</entry>
<entry id="199073" lang="en" sex="m">Summon Large Earth Elemental</entry> <entry id="199073" lang="en" sex="m">Summon Large Earth Elemental</entry>
<entry id="199074" lang="en" sex="m">Summon Large Fire Elemental</entry> <entry id="199074" lang="en" sex="m">Summon Large Fire Elemental</entry>
@ -73718,8 +73713,7 @@ Dire Tiger
<entry id="199081" lang="en" sex="m">Summon Nature's Ally VI (15)</entry> <entry id="199081" lang="en" sex="m">Summon Nature's Ally VI (15)</entry>
<entry id="199082" lang="en" sex="m">Summon Nature's Ally VI (20)</entry> <entry id="199082" lang="en" sex="m">Summon Nature's Ally VI (20)</entry>
<entry id="199083" lang="en" sex="m">****</entry> <entry id="199083" lang="en" sex="m">****</entry>
<entry id="199084" lang="en" sex="m">Summon Nature's Ally VII <entry id="199084" lang="en" sex="m">Summon Nature's Ally VII</entry>
</entry>
<entry id="199085" lang="en" sex="m">Conjuration (Summoning) <entry id="199085" lang="en" sex="m">Conjuration (Summoning)
Level: Druid 7, Shaman 7 Level: Druid 7, Shaman 7
Components: V, S, DF Components: V, S, DF
@ -73749,8 +73743,7 @@ Manitcore</entry>
<entry id="199095" lang="en" sex="m">Summon Nature's Ally VII (15)</entry> <entry id="199095" lang="en" sex="m">Summon Nature's Ally VII (15)</entry>
<entry id="199096" lang="en" sex="m">Summon Nature's Ally VII (20)</entry> <entry id="199096" lang="en" sex="m">Summon Nature's Ally VII (20)</entry>
<entry id="199097" lang="en" sex="m">****</entry> <entry id="199097" lang="en" sex="m">****</entry>
<entry id="199098" lang="en" sex="m">Summon Nature's Ally VIII <entry id="199098" lang="en" sex="m">Summon Nature's Ally VIII</entry>
</entry>
<entry id="199099" lang="en" sex="m">Conjuration (Summoning) <entry id="199099" lang="en" sex="m">Conjuration (Summoning)
Level: Druid 8, Shaman 8 Level: Druid 8, Shaman 8
Components: V, S, DF Components: V, S, DF
@ -75687,8 +75680,7 @@ Use: Automatic</entry>
<entry id="212001" lang="en" sex="m">Type of Feat: Item Creation <entry id="212001" lang="en" sex="m">Type of Feat: Item Creation
You store a divine spell within a specially prepared herb You store a divine spell within a specially prepared herb
Prerequisites: Lore 4 ranks, divine spellcaster level 3rd. 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, 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</entry>
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</entry>
<entry id="212002" lang="en" sex="m">Magical Artisian: Create Infusion</entry> <entry id="212002" lang="en" sex="m">Magical Artisian: Create Infusion</entry>
<entry id="212003" lang="en" sex="m">****</entry> <entry id="212003" lang="en" sex="m">****</entry>
<entry id="212004" lang="en" sex="m">Mundane Herb</entry> <entry id="212004" lang="en" sex="m">Mundane Herb</entry>