2025/12/28 Early update
Wemics have 5 RHD. Fixed Whirling Blade. Factotum now regenerates Inspiration after logging off and back on in he same server session. Spellfire Wielder can't get extra spell levels from overcharging items. Only one Chilling Fog at a time, casting a new one destroys the old one. Heart of Fire now has a Chakra totem. Pearl of Black doubt should be a bit more accurate. Tweaked and tested psionic Keen Edge. Fixed reversed sign for Echoblade validity in prc_equip. Havoc Mage's Battlecast should clean up properly. Updated readme.
This commit is contained in:
@@ -21,7 +21,37 @@ level before dispersing.
|
||||
#include "inv_inc_invfunc"
|
||||
#include "inv_invokehook"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!PreInvocationCastCode()) return;
|
||||
|
||||
object oCaster = OBJECT_SELF;
|
||||
object oExistingFog = GetLocalObject(oCaster, "ChillingFog");
|
||||
|
||||
// Check if there's an existing fog and destroy it
|
||||
if(GetIsObjectValid(oExistingFog))
|
||||
{
|
||||
DestroyObject(oExistingFog);
|
||||
DeleteLocalObject(oCaster, "ChillingFog");
|
||||
}
|
||||
|
||||
//Declare major variables including Area of Effect Object
|
||||
location lTarget = PRCGetSpellTargetLocation();
|
||||
int CasterLvl = GetInvokerLevel(oCaster, GetInvokingClass());
|
||||
float fDuration = TurnsToSeconds(CasterLvl);
|
||||
effect eAOE = EffectAreaOfEffect(INVOKE_AOE_CHILLFOG);
|
||||
effect eImpact = EffectVisualEffect(257);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, lTarget);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAOE, lTarget, fDuration);
|
||||
|
||||
object oAoE = GetAreaOfEffectObject(lTarget, "INVOKE_AOE_CHILLFOG");
|
||||
SetAllAoEInts(INVOKE_CHILLING_FOG, oAoE, GetInvocationSaveDC(OBJECT_INVALID, OBJECT_SELF, INVOKE_CHILLING_FOG), 0, CasterLvl);
|
||||
SetLocalObject(oCaster, "ChillingFog", oAoE);
|
||||
}
|
||||
|
||||
|
||||
/* void main()
|
||||
{
|
||||
if(!PreInvocationCastCode()) return;
|
||||
|
||||
@@ -46,4 +76,4 @@ void main()
|
||||
object oAoE = GetAreaOfEffectObject(lTarget, "INVOKE_AOE_CHILLFOG");
|
||||
SetAllAoEInts(INVOKE_CHILLING_FOG, oAoE, GetInvocationSaveDC(OBJECT_INVALID, OBJECT_SELF, INVOKE_CHILLING_FOG), 0, CasterLvl);
|
||||
SetLocalObject(oCaster, "ChillingFog", oAoE);
|
||||
}
|
||||
} */
|
||||
@@ -43,5 +43,42 @@ void main()
|
||||
// Add eventhook to the armor
|
||||
IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CHEST, oMeldshaper), ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||
AddEventScript(GetItemInSlot(INVENTORY_SLOT_CHEST, oMeldshaper), EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
|
||||
}
|
||||
}
|
||||
else if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_TOTEM)
|
||||
{
|
||||
// Add fire damage to natural weapons/unarmed strikes
|
||||
object oTarget = GetItemInSlot(INVENTORY_SLOT_ARMS, oMeldshaper);
|
||||
|
||||
// If no gloves, apply to PC skin as fallback
|
||||
if (!GetIsObjectValid(oTarget))
|
||||
{
|
||||
oTarget = GetPCSkin(oMeldshaper);
|
||||
}
|
||||
|
||||
// Apply fire damage based on essentia invested
|
||||
int nDamageBonus = EssentiaToD4(nEssentia);
|
||||
if (nDamageBonus != -1)
|
||||
{
|
||||
IPSafeAddItemProperty(oTarget,
|
||||
ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE, nDamageBonus),
|
||||
9999.0,
|
||||
X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||
}
|
||||
}
|
||||
/* else if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_TOTEM)
|
||||
{
|
||||
// Add fire damage to natural weapons based on essentia invested
|
||||
int nDamageDice = nEssentia;
|
||||
if (nDamageDice > 0)
|
||||
{
|
||||
effect eDamage = EffectDamageIncrease(DAMAGE_BONUS_1d4, DAMAGE_TYPE_FIRE);
|
||||
// Stack the effect for each point of essentia
|
||||
int i;
|
||||
for (i = 1; i < nDamageDice; i++)
|
||||
{
|
||||
eDamage = EffectLinkEffects(eDamage, EffectDamageIncrease(DAMAGE_BONUS_1d4, DAMAGE_TYPE_FIRE));
|
||||
}
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eDamage), oMeldshaper, 9999.0);
|
||||
}
|
||||
} */
|
||||
}
|
||||
@@ -121,6 +121,13 @@ void main()
|
||||
|
||||
if (nBonus > 0)
|
||||
{
|
||||
if(GetLocalInt(oTarget, "PearlOfBlackDoubt_JustHit"))
|
||||
{
|
||||
DeleteLocalInt(oTarget, "PearlOfBlackDoubt_JustHit");
|
||||
// Skip this heartbeat's bonus calculation
|
||||
return;
|
||||
}
|
||||
|
||||
if(DEBUG) DoDebug("Applying AC Bonus: " + IntToString(nBonus));
|
||||
|
||||
effect eAC = EffectACIncrease(nBonus);
|
||||
|
||||
Reference in New Issue
Block a user