2026/02/21 Update
Updated all soulmelds to allow double chakra binds. Updated Totemist soulmelds to allow double totem binds. Pearl of Black Doubt should play nice with Vow of Poverty.
This commit is contained in:
@@ -6474,9 +6474,12 @@ int TherapeuticMantle(object oCaster, int nSpellID)
|
|||||||
{
|
{
|
||||||
int nReturn;
|
int nReturn;
|
||||||
// Boosts Caster level with healing spells
|
// Boosts Caster level with healing spells
|
||||||
if (GetIsMeldBound(oCaster, MELD_THERAPEUTIC_MANTLE) == CHAKRA_SHOULDERS && GetIsOfSubschool(nSpellID, SUBSCHOOL_HEALING))
|
if (GetIsMeldBound(oCaster, MELD_THERAPEUTIC_MANTLE) == CHAKRA_SHOULDERS ||
|
||||||
|
GetIsMeldBound(oCaster, MELD_THERAPEUTIC_MANTLE) == CHAKRA_DOUBLE_SHOULDERS &&
|
||||||
|
GetIsOfSubschool(nSpellID, SUBSCHOOL_HEALING))
|
||||||
|
{
|
||||||
nReturn = GetEssentiaInvested(oCaster, MELD_THERAPEUTIC_MANTLE);
|
nReturn = GetEssentiaInvested(oCaster, MELD_THERAPEUTIC_MANTLE);
|
||||||
|
}
|
||||||
return nReturn;
|
return nReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -797,8 +797,27 @@ void _PostCharge(object oPC, object oTarget)
|
|||||||
{
|
{
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectStunned()), oTarget, 6.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectStunned()), oTarget, 6.0);
|
||||||
}
|
}
|
||||||
// Applies to all charges, Thunderstep Boots meld
|
|
||||||
if (GetHasSpellEffect(MELD_THUNDERSTEP_BOOTS, oPC) && nSucceed)
|
// Applies to all charges, Thunderstep Boots meld
|
||||||
|
if (GetHasSpellEffect(MELD_THUNDERSTEP_BOOTS, oPC) && nSucceed)
|
||||||
|
{
|
||||||
|
int nDice = GetEssentiaInvested(oPC, MELD_THUNDERSTEP_BOOTS) + 1;
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(d4(nDice), DAMAGE_TYPE_SONIC)), oTarget);
|
||||||
|
// Check Feet bind (regular or double)
|
||||||
|
int nBoundToFeet = FALSE;
|
||||||
|
if (GetIsMeldBound(oTarget, MELD_THUNDERSTEP_BOOTS) == CHAKRA_FEET ||
|
||||||
|
GetIsMeldBound(oTarget, MELD_THUNDERSTEP_BOOTS) == CHAKRA_DOUBLE_FEET)
|
||||||
|
nBoundToFeet = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToFeet)
|
||||||
|
{
|
||||||
|
int nDC = GetMeldshaperDC(oPC, CLASS_TYPE_SOULBORN, MELD_THUNDERSTEP_BOOTS);
|
||||||
|
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, 6.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if (GetHasSpellEffect(MELD_THUNDERSTEP_BOOTS, oPC) && nSucceed)
|
||||||
{
|
{
|
||||||
int nDice = GetEssentiaInvested(oPC, MELD_STRONGHEART_VEST) + 1;
|
int nDice = GetEssentiaInvested(oPC, MELD_STRONGHEART_VEST) + 1;
|
||||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(d4(nDice), DAMAGE_TYPE_SONIC)), oTarget);
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(d4(nDice), DAMAGE_TYPE_SONIC)), oTarget);
|
||||||
@@ -808,12 +827,12 @@ void _PostCharge(object oPC, object oTarget)
|
|||||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, 6.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, 6.0);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
// Applies to all charges, Urskan Greaves meld
|
// Applies to all charges, Urskan Greaves meld
|
||||||
if (GetHasSpellEffect(MELD_URSKAN_GREAVES, oPC) && nSucceed)
|
if (GetHasSpellEffect(MELD_URSKAN_GREAVES, oPC) && nSucceed)
|
||||||
{
|
{
|
||||||
int nDice = GetEssentiaInvested(oPC, MELD_URSKAN_GREAVES);
|
int nDice = GetEssentiaInvested(oPC, MELD_URSKAN_GREAVES);
|
||||||
if (GetIsMeldBound(oTarget, MELD_URSKAN_GREAVES) == CHAKRA_FEET)
|
if (GetIsMeldBound(oTarget, MELD_URSKAN_GREAVES) == CHAKRA_FEET || GetIsMeldBound(oTarget, MELD_URSKAN_GREAVES) == CHAKRA_DOUBLE_FEET)
|
||||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(d4(nDice), DAMAGE_TYPE_BLUDGEONING)), oTarget);
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(d4(nDice), DAMAGE_TYPE_BLUDGEONING)), oTarget);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -840,7 +859,7 @@ void _DoTrampleDamage(object oPC, object oTarget)
|
|||||||
|
|
||||||
void _HeartOfFireGrapple(object oPC, object oTarget)
|
void _HeartOfFireGrapple(object oPC, object oTarget)
|
||||||
{
|
{
|
||||||
if (GetIsMeldBound(oTarget, MELD_HEART_OF_FIRE) == CHAKRA_WAIST)
|
if (GetIsMeldBound(oTarget, MELD_HEART_OF_FIRE) == CHAKRA_WAIST || GetIsMeldBound(oTarget, MELD_HEART_OF_FIRE) == CHAKRA_DOUBLE_WAIST)
|
||||||
{
|
{
|
||||||
int nEssentia = GetEssentiaInvested(oPC, MELD_HEART_OF_FIRE);
|
int nEssentia = GetEssentiaInvested(oPC, MELD_HEART_OF_FIRE);
|
||||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(nEssentia), DAMAGE_TYPE_FIRE), oTarget);
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(nEssentia), DAMAGE_TYPE_FIRE), oTarget);
|
||||||
@@ -851,7 +870,7 @@ int _TotemAvatar(object oPC, int nCombatMove)
|
|||||||
{
|
{
|
||||||
int nReturn;
|
int nReturn;
|
||||||
|
|
||||||
if (GetIsMeldBound(oPC, MELD_HEART_OF_FIRE) == CHAKRA_FEET && nCombatMove != COMBAT_MOVE_GRAPPLE)
|
if (GetIsMeldBound(oPC, MELD_HEART_OF_FIRE) == CHAKRA_FEET || GetIsMeldBound(oPC, MELD_HEART_OF_FIRE) == CHAKRA_DOUBLE_FEET && nCombatMove != COMBAT_MOVE_GRAPPLE)
|
||||||
nReturn = 4;
|
nReturn = 4;
|
||||||
|
|
||||||
if (nCombatMove == COMBAT_MOVE_GRAPPLE ||
|
if (nCombatMove == COMBAT_MOVE_GRAPPLE ||
|
||||||
@@ -867,7 +886,7 @@ int _UrskanGreaves(object oPC)
|
|||||||
{
|
{
|
||||||
int nReturn;
|
int nReturn;
|
||||||
|
|
||||||
if (GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_TOTEM)
|
if (GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_TOTEM || GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_DOUBLE_TOTEM)
|
||||||
nReturn = 2 + GetEssentiaInvested(oPC, MELD_URSKAN_GREAVES);
|
nReturn = 2 + GetEssentiaInvested(oPC, MELD_URSKAN_GREAVES);
|
||||||
|
|
||||||
return nReturn;
|
return nReturn;
|
||||||
@@ -1129,7 +1148,7 @@ void DoCharge(object oPC, object oTarget, int nDoAttack = TRUE, int nGenerateAoO
|
|||||||
// Dread Carapace Totem Bind
|
// Dread Carapace Totem Bind
|
||||||
if(GetIsIncarnumUser(oPC))
|
if(GetIsIncarnumUser(oPC))
|
||||||
{
|
{
|
||||||
if (GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_TOTEM) // CHAKRA_TOTEM
|
if (GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_TOTEM || GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_DOUBLE_TOTEM) // CHAKRA_TOTEM
|
||||||
{
|
{
|
||||||
location lTargetLocation = GetLocation(oPC);
|
location lTargetLocation = GetLocation(oPC);
|
||||||
int nSaveDC = GetMeldshaperDC(oPC, CLASS_TYPE_TOTEMIST, MELD_DREAD_CARAPACE); // MELD_DREAD_CARAPACE
|
int nSaveDC = GetMeldshaperDC(oPC, CLASS_TYPE_TOTEMIST, MELD_DREAD_CARAPACE); // MELD_DREAD_CARAPACE
|
||||||
@@ -1148,7 +1167,8 @@ void DoCharge(object oPC, object oTarget, int nDoAttack = TRUE, int nGenerateAoO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GetIsMeldBound(oPC, MELD_SPHINX_CLAWS) == CHAKRA_HANDS && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))) // CHAKRA_HANDS, empty hand
|
if (GetIsMeldBound(oPC, MELD_SPHINX_CLAWS) == CHAKRA_HANDS || GetIsMeldBound(oPC, MELD_SPHINX_CLAWS) == CHAKRA_DOUBLE_HANDS &&
|
||||||
|
!GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))) // CHAKRA_HANDS, empty hand
|
||||||
nPounce = TRUE;
|
nPounce = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1981,7 +2001,7 @@ void DoOverrun(object oPC, object oTarget, location lTarget, int nGenerateAoO =
|
|||||||
float fLength = GetDistanceBetweenLocations(GetLocation(oPC), lTarget);
|
float fLength = GetDistanceBetweenLocations(GetLocation(oPC), lTarget);
|
||||||
vector vOrigin = GetPosition(oPC);
|
vector vOrigin = GetPosition(oPC);
|
||||||
|
|
||||||
if (GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_TOTEM)
|
if (GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_TOTEM || GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_DOUBLE_TOTEM)
|
||||||
nAvoid = FALSE;
|
nAvoid = FALSE;
|
||||||
if (GetHasFeat(FEAT_CENTAUR_TRAMPLE, oPC))
|
if (GetHasFeat(FEAT_CENTAUR_TRAMPLE, oPC))
|
||||||
nAvoid = FALSE;
|
nAvoid = FALSE;
|
||||||
@@ -2435,7 +2455,7 @@ void DoShieldCharge(object oPC, object oTarget, int nSlam = FALSE)
|
|||||||
// Dread Carapace Totem Bind
|
// Dread Carapace Totem Bind
|
||||||
if(GetIsIncarnumUser(oPC))
|
if(GetIsIncarnumUser(oPC))
|
||||||
{
|
{
|
||||||
if (GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_TOTEM) // CHAKRA_TOTEM
|
if (GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_TOTEM || GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_DOUBLE_TOTEM) // CHAKRA_TOTEM
|
||||||
{
|
{
|
||||||
location lTargetLocation = GetLocation(oPC);
|
location lTargetLocation = GetLocation(oPC);
|
||||||
int nSaveDC = GetMeldshaperDC(oPC, CLASS_TYPE_TOTEMIST, MELD_DREAD_CARAPACE); // MELD_DREAD_CARAPACE
|
int nSaveDC = GetMeldshaperDC(oPC, CLASS_TYPE_TOTEMIST, MELD_DREAD_CARAPACE); // MELD_DREAD_CARAPACE
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ void ApplyAbilityDamage(object oTarget, int nAbility, int nAmount, int nDuration
|
|||||||
if (GetLocalInt(oTarget, "IncarnumDefenseCE") && nAbility == ABILITY_STRENGTH)
|
if (GetLocalInt(oTarget, "IncarnumDefenseCE") && nAbility == ABILITY_STRENGTH)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (GetIsMeldBound(oTarget, MELD_VITALITY_BELT) == CHAKRA_WAIST && nAbility == ABILITY_CONSTITUTION)
|
if (GetIsMeldBound(oTarget, MELD_VITALITY_BELT) == CHAKRA_WAIST || GetIsMeldBound(oTarget, MELD_VITALITY_BELT) == CHAKRA_DOUBLE_WAIST && nAbility == ABILITY_CONSTITUTION)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (GetHasSpellEffect(VESTIGE_DAHLVERNAR, oTarget) && nAbility == ABILITY_WISDOM && GetLocalInt(oTarget, "ExploitVestige") != VESTIGE_DAHLVERNAR_MAD_SOUL)
|
if (GetHasSpellEffect(VESTIGE_DAHLVERNAR, oTarget) && nAbility == ABILITY_WISDOM && GetLocalInt(oTarget, "ExploitVestige") != VESTIGE_DAHLVERNAR_MAD_SOUL)
|
||||||
@@ -116,7 +116,7 @@ void ApplyAbilityDamage(object oTarget, int nAbility, int nAmount, int nDuration
|
|||||||
// If there's no damage, jump out.
|
// If there's no damage, jump out.
|
||||||
if (0 >= nAmount) return;
|
if (0 >= nAmount) return;
|
||||||
}
|
}
|
||||||
else if (GetIsMeldBound(oTarget, MELD_STRONGHEART_VEST) == CHAKRA_WAIST && !bHealable)
|
else if (GetIsMeldBound(oTarget, MELD_STRONGHEART_VEST) == CHAKRA_WAIST || GetIsMeldBound(oTarget, MELD_STRONGHEART_VEST) == CHAKRA_DOUBLE_WAIST && !bHealable)
|
||||||
{
|
{
|
||||||
int nEssentia = GetEssentiaInvested(oTarget, MELD_STRONGHEART_VEST);
|
int nEssentia = GetEssentiaInvested(oTarget, MELD_STRONGHEART_VEST);
|
||||||
nAmount = nAmount - (nEssentia + 1);
|
nAmount = nAmount - (nEssentia + 1);
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ int PRCGetSpellResistance(object oTarget, object oCaster)
|
|||||||
// Dread Carapace Heart Bind
|
// Dread Carapace Heart Bind
|
||||||
if(GetIsIncarnumUser(oTarget))
|
if(GetIsIncarnumUser(oTarget))
|
||||||
{
|
{
|
||||||
if (GetIsMeldBound(oTarget, MELD_DREAD_CARAPACE) == CHAKRA_CROWN)
|
if (GetIsMeldBound(oTarget, MELD_DREAD_CARAPACE) == CHAKRA_CROWN || GetIsMeldBound(oTarget, MELD_DREAD_CARAPACE) == CHAKRA_DOUBLE_CROWN)
|
||||||
{
|
{
|
||||||
int nCont = 5 + (4 * GetEssentiaInvested(oTarget, MELD_DREAD_CARAPACE));
|
int nCont = 5 + (4 * GetEssentiaInvested(oTarget, MELD_DREAD_CARAPACE));
|
||||||
if(nCont > iSpellRes)
|
if(nCont > iSpellRes)
|
||||||
|
|||||||
@@ -894,7 +894,7 @@ int GetTargetSpecificChangesToDamage(object oTarget, object oManifester, int nDa
|
|||||||
// Reasonable return values only
|
// Reasonable return values only
|
||||||
if(nDamage < 0) nDamage = 0;
|
if(nDamage < 0) nDamage = 0;
|
||||||
|
|
||||||
if (GetIsMeldBound(oManifester, MELD_PSYCHIC_FOCUS) == CHAKRA_THROAT && nDamage > 0 && !GetLocalInt(oManifester, "PsychicFocusMeld") && bIsHitPointDamage)
|
if (GetIsMeldBound(oManifester, MELD_PSYCHIC_FOCUS) == CHAKRA_THROAT || GetIsMeldBound(oManifester, MELD_PSYCHIC_FOCUS) == CHAKRA_DOUBLE_THROAT && nDamage > 0 && !GetLocalInt(oManifester, "PsychicFocusMeld") && bIsHitPointDamage)
|
||||||
{
|
{
|
||||||
SetLocalInt(oManifester, "PsychicFocusMeld", TRUE);
|
SetLocalInt(oManifester, "PsychicFocusMeld", TRUE);
|
||||||
DelayCommand(6.0, DeleteLocalInt(oManifester, "PsychicFocusMeld"));
|
DelayCommand(6.0, DeleteLocalInt(oManifester, "PsychicFocusMeld"));
|
||||||
|
|||||||
@@ -21,7 +21,36 @@
|
|||||||
/* Content Functions */
|
/* Content Functions */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
void BloodwarGauntlets(object oMeldshaper, object oItem, int nEvent)
|
void BloodwarGauntlets(object oMeldshaper, object oItem, int nEvent)
|
||||||
|
{
|
||||||
|
// Check if bound to Hands chakra (regular or double)
|
||||||
|
int nBoundToHands = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HANDS)) == MELD_BLOODWAR_GAUNTLETS ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HANDS)) == MELD_BLOODWAR_GAUNTLETS)
|
||||||
|
nBoundToHands = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToHands) return;
|
||||||
|
|
||||||
|
if(nEvent == EVENT_ONPLAYEREQUIPITEM)
|
||||||
|
{
|
||||||
|
itemproperty ip = ItemPropertyKeen();
|
||||||
|
ip = TagItemProperty(ip, "moi_BloodwarGauntletsKeen");
|
||||||
|
IPSafeAddItemProperty(oItem, ip, 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
else if(nEvent == EVENT_ONPLAYERUNEQUIPITEM)
|
||||||
|
{
|
||||||
|
// Remove only the tagged keen property
|
||||||
|
itemproperty ipCheck = GetFirstItemProperty(oItem);
|
||||||
|
while (GetIsItemPropertyValid(ipCheck))
|
||||||
|
{
|
||||||
|
if (GetItemPropertyTag(ipCheck) == "moi_BloodwarGauntletsKeen")
|
||||||
|
RemoveItemProperty(oItem, ipCheck);
|
||||||
|
ipCheck = GetNextItemProperty(oItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void BloodwarGauntlets(object oMeldshaper, object oItem, int nEvent)
|
||||||
{
|
{
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_BLOODWAR_GAUNTLETS) != CHAKRA_HANDS) return;
|
if (GetIsMeldBound(oMeldshaper, MELD_BLOODWAR_GAUNTLETS) != CHAKRA_HANDS) return;
|
||||||
|
|
||||||
@@ -34,7 +63,7 @@ void BloodwarGauntlets(object oMeldshaper, object oItem, int nEvent)
|
|||||||
{
|
{
|
||||||
RemoveSpecificProperty(oItem, ITEM_PROPERTY_KEEN, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY);
|
RemoveSpecificProperty(oItem, ITEM_PROPERTY_KEEN, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
void Bloodtalons(object oMeldshaper, object oItem, object oTarget)
|
void Bloodtalons(object oMeldshaper, object oItem, object oTarget)
|
||||||
{
|
{
|
||||||
@@ -74,7 +103,7 @@ void DreadCarapace(object oMeldshaper)
|
|||||||
IPSafeAddItemProperty(oBite, ItemPropertyDamageBonus(DAMAGE_TYPE_SLASHING, IPDamageConstant((nEssentia+1)*2)), 6.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
|
IPSafeAddItemProperty(oBite, ItemPropertyDamageBonus(DAMAGE_TYPE_SLASHING, IPDamageConstant((nEssentia+1)*2)), 6.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_DREAD_CARAPACE) == CHAKRA_ARMS)
|
if (GetIsMeldBound(oMeldshaper, MELD_DREAD_CARAPACE) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper, MELD_DREAD_CARAPACE) == CHAKRA_DOUBLE_ARMS)
|
||||||
{
|
{
|
||||||
if (GetIsObjectValid(oLeft)) IPSafeAddItemProperty(oLeft, ItemPropertyKeen(), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsObjectValid(oLeft)) IPSafeAddItemProperty(oLeft, ItemPropertyKeen(), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsObjectValid(oRight)) IPSafeAddItemProperty(oRight, ItemPropertyKeen(), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsObjectValid(oRight)) IPSafeAddItemProperty(oRight, ItemPropertyKeen(), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
@@ -243,7 +272,44 @@ void MantleOfFlameOnHit(object oMeldshaper, object oTarget)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhaseCloak(object oMeldshaper)
|
void PhaseCloak(object oMeldshaper)
|
||||||
|
{
|
||||||
|
// Check if bound to Shoulders chakra (regular or double)
|
||||||
|
int nBoundToShoulders = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == MELD_PHASE_CLOAK ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == MELD_PHASE_CLOAK)
|
||||||
|
nBoundToShoulders = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToShoulders) return;
|
||||||
|
|
||||||
|
// Check to see if the WP is valid
|
||||||
|
string sWPTag = "PhaseCloakWP_" + GetName(oMeldshaper);
|
||||||
|
object oTestWP = GetWaypointByTag(sWPTag);
|
||||||
|
if (!GetIsObjectValid(oTestWP))
|
||||||
|
{
|
||||||
|
// Create waypoint for the movement
|
||||||
|
CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", GetLocation(oMeldshaper), FALSE, sWPTag);
|
||||||
|
}
|
||||||
|
else // We have a test waypoint, now to check the distance
|
||||||
|
{
|
||||||
|
// Distance moved in the last round
|
||||||
|
float fDist = GetDistanceBetween(oMeldshaper, oTestWP);
|
||||||
|
// Distance needed to move
|
||||||
|
float fCheck = FeetToMeters(5.0);
|
||||||
|
|
||||||
|
// Now clean up the WP and create a new one for next round's check
|
||||||
|
DestroyObject(oTestWP);
|
||||||
|
CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", GetLocation(oMeldshaper), FALSE, sWPTag);
|
||||||
|
|
||||||
|
// Moved the distance
|
||||||
|
if (fDist >= fCheck)
|
||||||
|
{
|
||||||
|
SetIncorporeal(oMeldshaper, 3.0, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void PhaseCloak(object oMeldshaper)
|
||||||
{
|
{
|
||||||
// Check to see if the WP is valid
|
// Check to see if the WP is valid
|
||||||
string sWPTag = "PhaseCloakWP_" + GetName(oMeldshaper);
|
string sWPTag = "PhaseCloakWP_" + GetName(oMeldshaper);
|
||||||
@@ -270,7 +336,7 @@ void PhaseCloak(object oMeldshaper)
|
|||||||
SetIncorporeal(oMeldshaper, 3.0, 1);
|
SetIncorporeal(oMeldshaper, 3.0, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
void PlanarWard(object oMeldshaper, object oTarget)
|
void PlanarWard(object oMeldshaper, object oTarget)
|
||||||
{
|
{
|
||||||
@@ -297,10 +363,10 @@ void RidingBracers(object oMeldshaper)
|
|||||||
{
|
{
|
||||||
if (PRCHorseGetIsMounted(oMeldshaper))
|
if (PRCHorseGetIsMounted(oMeldshaper))
|
||||||
{
|
{
|
||||||
if(GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_ARMS)
|
if(GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_DOUBLE_ARMS)
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectLinkEffects(EffectACIncrease(2, AC_DODGE_BONUS), EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_BASE_WEAPON))), oMeldshaper, 6.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectLinkEffects(EffectACIncrease(2, AC_DODGE_BONUS), EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_BASE_WEAPON))), oMeldshaper, 6.0);
|
||||||
|
|
||||||
if(GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_TOTEM)
|
if(GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_DOUBLE_TOTEM)
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -430,7 +496,33 @@ void IncandescentAura(object oMeldshaper)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NecroVestmentsAura(object oMeldshaper)
|
void NecroVestmentsAura(object oMeldshaper)
|
||||||
|
{
|
||||||
|
// Validate bind state (regular or double Waist)
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) != CHAKRA_WAIST &&
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) != CHAKRA_DOUBLE_WAIST)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int nClass = GetMeldShapedClass(oMeldshaper, MELD_NECROCARNUM_VESTMENTS);
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_NECROCARNUM_VESTMENTS);
|
||||||
|
location lTarget = GetLocation(oMeldshaper);
|
||||||
|
object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||||
|
while(GetIsObjectValid(oAreaTarget))
|
||||||
|
{
|
||||||
|
if(oAreaTarget != oMeldshaper && // Not you
|
||||||
|
GetIsInMeleeRange(oMeldshaper, oAreaTarget) && // They must be in melee range
|
||||||
|
GetIsEnemy(oAreaTarget, oMeldshaper)) // Only enemies
|
||||||
|
{
|
||||||
|
int nDamage = d6();
|
||||||
|
if(!PRCMySavingThrow(SAVING_THROW_FORT, oAreaTarget, nDC, SAVING_THROW_TYPE_COLD))
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(nDamage, DAMAGE_TYPE_COLD)), oAreaTarget);
|
||||||
|
}
|
||||||
|
//Select the next target within the spell shape.
|
||||||
|
oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void NecroVestmentsAura(object oMeldshaper)
|
||||||
{
|
{
|
||||||
int nClass = GetMeldShapedClass(oMeldshaper, MELD_NECROCARNUM_VESTMENTS);
|
int nClass = GetMeldShapedClass(oMeldshaper, MELD_NECROCARNUM_VESTMENTS);
|
||||||
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_NECROCARNUM_VESTMENTS);
|
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_NECROCARNUM_VESTMENTS);
|
||||||
@@ -450,7 +542,7 @@ void NecroVestmentsAura(object oMeldshaper)
|
|||||||
//Select the next target within the spell shape.
|
//Select the next target within the spell shape.
|
||||||
oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
void NecrocarnumWeaponHands(object oMeldshaper, object oTarget, object oItem)
|
void NecrocarnumWeaponHands(object oMeldshaper, object oTarget, object oItem)
|
||||||
{
|
{
|
||||||
@@ -537,25 +629,39 @@ void main()
|
|||||||
// Only applies to armours
|
// Only applies to armours
|
||||||
if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR)
|
if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR)
|
||||||
{
|
{
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST)
|
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST || GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_DOUBLE_WAIST)
|
||||||
HeartOfFireOnHit(oMeldshaper, oTarget);
|
HeartOfFireOnHit(oMeldshaper, oTarget);
|
||||||
if (GetHasSpellEffect(MELD_MANTLE_OF_FLAME, oMeldshaper))
|
if (GetHasSpellEffect(MELD_MANTLE_OF_FLAME, oMeldshaper))
|
||||||
MantleOfFlameOnHit(oMeldshaper, oTarget);
|
MantleOfFlameOnHit(oMeldshaper, oTarget);
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_THROAT)
|
if (GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_THROAT || GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_DOUBLE_THROAT)
|
||||||
PlanarWard(oMeldshaper, oTarget);
|
PlanarWard(oMeldshaper, oTarget);
|
||||||
}
|
}
|
||||||
// Melee weapon checks
|
// Melee weapon checks
|
||||||
if(IPGetIsMeleeWeapon(oItem))
|
if(IPGetIsMeleeWeapon(oItem))
|
||||||
{
|
{
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_HANDS) NecrocarnumWeaponHands(oMeldshaper, oTarget, oItem);
|
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_HANDS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_DOUBLE_HANDS)
|
||||||
|
NecrocarnumWeaponHands(oMeldshaper, oTarget, oItem);
|
||||||
}
|
}
|
||||||
WorgPeltOnHit(oMeldshaper, oItem, oTarget);
|
WorgPeltOnHit(oMeldshaper, oItem, oTarget);
|
||||||
JaebrinOnHit(oMeldshaper, oItem, oTarget);
|
JaebrinOnHit(oMeldshaper, oItem, oTarget);
|
||||||
}// end if - Running OnHit event
|
}// end if - Running OnHit event
|
||||||
else if(nEvent == EVENT_ONPLAYEREQUIPITEM)
|
else if(nEvent == EVENT_ONPLAYEREQUIPITEM)
|
||||||
{
|
{
|
||||||
oMeldshaper = GetItemLastEquippedBy();
|
oMeldshaper = GetItemLastEquippedBy();
|
||||||
oItem = GetItemLastEquipped();
|
oItem = GetItemLastEquipped();
|
||||||
|
|
||||||
|
if (!GetHasSpellEffect(MELD_HEART_OF_FIRE, oMeldshaper) &&
|
||||||
|
!GetHasSpellEffect(MELD_MANTLE_OF_FLAME, oMeldshaper) &&
|
||||||
|
!GetHasSpellEffect(MELD_PLANAR_WARD, oMeldshaper) &&
|
||||||
|
!GetHasSpellEffect(MELD_BLOODWAR_GAUNTLETS, oMeldshaper) &&
|
||||||
|
!GetHasSpellEffect(MELD_INCARNATE_AVATAR, oMeldshaper) &&
|
||||||
|
!GetHasSpellEffect(MELD_NECROCARNUM_WEAPON, oMeldshaper) &&
|
||||||
|
!GetHasSpellEffect(MELD_MAULING_GAUNTLETS, oMeldshaper) &&
|
||||||
|
!GetHasSpellEffect(MELD_SIGHTING_GLOVES, oMeldshaper) &&
|
||||||
|
!GetIsMeldBound(oMeldshaper, MELD_LANDSHARK_BOOTS))
|
||||||
|
return;
|
||||||
|
|
||||||
if(DEBUG) DoDebug("moi_events - OnEquip\n"
|
if(DEBUG) DoDebug("moi_events - OnEquip\n"
|
||||||
+ "oMeldshaper = " + DebugObject2Str(oMeldshaper) + "\n"
|
+ "oMeldshaper = " + DebugObject2Str(oMeldshaper) + "\n"
|
||||||
+ "oItem = " + DebugObject2Str(oItem) + "\n"
|
+ "oItem = " + DebugObject2Str(oItem) + "\n"
|
||||||
@@ -563,9 +669,9 @@ void main()
|
|||||||
// Armor checks
|
// Armor checks
|
||||||
if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR)
|
if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR)
|
||||||
{
|
{
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST ||
|
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST || GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_DOUBLE_WAIST ||
|
||||||
GetHasSpellEffect(MELD_MANTLE_OF_FLAME, oMeldshaper) ||
|
GetHasSpellEffect(MELD_MANTLE_OF_FLAME, oMeldshaper) ||
|
||||||
GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_THROAT )
|
GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_THROAT || GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_DOUBLE_THROAT)
|
||||||
{
|
{
|
||||||
// Add eventhook to the armor
|
// Add eventhook to the armor
|
||||||
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
@@ -594,14 +700,14 @@ void main()
|
|||||||
{
|
{
|
||||||
IPSafeAddItemProperty(oItem, ItemPropertyAttackBonus(3), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
|
IPSafeAddItemProperty(oItem, ItemPropertyAttackBonus(3), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
|
||||||
IPSafeAddItemProperty(oItem, ItemPropertyAttackPenalty(3), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
|
IPSafeAddItemProperty(oItem, ItemPropertyAttackPenalty(3), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_HANDS)
|
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_HANDS || GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_DOUBLE_HANDS)
|
||||||
{
|
{
|
||||||
// Add eventhook to the armor
|
// Add eventhook to the armor
|
||||||
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
AddEventScript(oItem, EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
|
AddEventScript(oItem, EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_ARMS)
|
if (GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_DOUBLE_ARMS)
|
||||||
IPSafeAddItemProperty(oItem, ItemPropertyKeen(), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(oItem, ItemPropertyKeen(), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
}
|
||||||
// Ranged weapon checks
|
// Ranged weapon checks
|
||||||
@@ -624,7 +730,7 @@ void main()
|
|||||||
// Shields only
|
// Shields only
|
||||||
if(GetIsShield(oItem))
|
if(GetIsShield(oItem))
|
||||||
{
|
{
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_LANDSHARK_BOOTS) == CHAKRA_TOTEM)
|
if (GetIsMeldBound(oMeldshaper, MELD_LANDSHARK_BOOTS) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper, MELD_LANDSHARK_BOOTS) == CHAKRA_DOUBLE_TOTEM)
|
||||||
ForceUnequip(oMeldshaper, oItem, INVENTORY_SLOT_LEFTHAND);
|
ForceUnequip(oMeldshaper, oItem, INVENTORY_SLOT_LEFTHAND);
|
||||||
}
|
}
|
||||||
// Ammo checks
|
// Ammo checks
|
||||||
@@ -693,8 +799,16 @@ void main()
|
|||||||
else if(nEvent == EVENT_ONHEARTBEAT)
|
else if(nEvent == EVENT_ONHEARTBEAT)
|
||||||
{
|
{
|
||||||
if (GetIsMeldShaped(oMeldshaper, MELD_DREAD_CARAPACE, CLASS_TYPE_TOTEMIST)) DreadCarapace(oMeldshaper);
|
if (GetIsMeldShaped(oMeldshaper, MELD_DREAD_CARAPACE, CLASS_TYPE_TOTEMIST)) DreadCarapace(oMeldshaper);
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_FEARSOME_MASK) == CHAKRA_BROW) FearsomeMask(oMeldshaper);
|
|
||||||
|
//if (GetIsMeldBound(oMeldshaper, MELD_FEARSOME_MASK) == CHAKRA_BROW) FearsomeMask(oMeldshaper);
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_FEARSOME_MASK) == CHAKRA_BROW ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_FEARSOME_MASK) == CHAKRA_DOUBLE_BROW)
|
||||||
|
{
|
||||||
|
FearsomeMask(oMeldshaper);
|
||||||
|
}
|
||||||
|
|
||||||
//if (GetIsMeldBound(oMeldshaper, MELD_GIRALLON_ARMS) == CHAKRA_TOTEM) GirallonArms(oMeldshaper);
|
//if (GetIsMeldBound(oMeldshaper, MELD_GIRALLON_ARMS) == CHAKRA_TOTEM) GirallonArms(oMeldshaper);
|
||||||
|
|
||||||
if (GetHasSpellEffect(MELD_HEART_OF_FIRE, oMeldshaper)) HeartOfFire(oMeldshaper);
|
if (GetHasSpellEffect(MELD_HEART_OF_FIRE, oMeldshaper)) HeartOfFire(oMeldshaper);
|
||||||
/*if (GetHasSpellEffect(MELD_INCARNATE_AVATAR, oMeldshaper))
|
/*if (GetHasSpellEffect(MELD_INCARNATE_AVATAR, oMeldshaper))
|
||||||
{
|
{
|
||||||
@@ -702,25 +816,95 @@ void main()
|
|||||||
if (GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_GOOD)
|
if (GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_GOOD)
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectACIncrease(nEssentia), oMeldshaper, 6.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectACIncrease(nEssentia), oMeldshaper, 6.0);
|
||||||
}*/
|
}*/
|
||||||
// If you have the meld bound to the correct Chakra and there's nothing in your weapon hand
|
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_KRUTHIK_CLAWS) == CHAKRA_HANDS && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
|
// If you have the meld bound to the correct Chakra and there's nothing in your weapon hand
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_FINESSE), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
//if (GetIsMeldBound(oMeldshaper, MELD_KRUTHIK_CLAWS) == CHAKRA_HANDS && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_SHOULDERS) LammasuRepulsion(oMeldshaper);
|
//IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_FINESSE), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_ARMS) LammasuAllies(oMeldshaper);
|
if (GetIsMeldBound(oMeldshaper, MELD_KRUTHIK_CLAWS) == CHAKRA_HANDS ||
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_HANDS && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
|
GetIsMeldBound(oMeldshaper, MELD_KRUTHIK_CLAWS) == CHAKRA_DOUBLE_HANDS &&
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(GetEssentiaInvested(oMeldshaper, MELD_MAULING_GAUNTLETS)*2), DAMAGE_TYPE_BASE_WEAPON), oMeldshaper, 6.0);
|
!GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_PHASE_CLOAK) == CHAKRA_SHOULDERS) PhaseCloak(oMeldshaper);
|
{
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_RAGECLAWS) == CHAKRA_HANDS) RageClaws(oMeldshaper);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_FINESSE), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_TOTEM) RidingBracers(oMeldshaper);
|
}
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_SHOULDERS || GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_TOTEM) TotemAvatar(oMeldshaper);
|
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_WORG_PELT) == CHAKRA_HANDS) WorgPeltHB(oMeldshaper);
|
//if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_SHOULDERS) LammasuRepulsion(oMeldshaper);
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_SHOULDERS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_DOUBLE_SHOULDERS)
|
||||||
|
{
|
||||||
|
LammasuRepulsion(oMeldshaper);
|
||||||
|
}
|
||||||
|
|
||||||
|
//if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_ARMS) LammasuAllies(oMeldshaper);
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_ARMS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_DOUBLE_ARMS)
|
||||||
|
{
|
||||||
|
LammasuAllies(oMeldshaper);
|
||||||
|
}
|
||||||
|
|
||||||
|
//if (GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_HANDS && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
|
||||||
|
//ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(GetEssentiaInvested(oMeldshaper, MELD_MAULING_GAUNTLETS)*2), DAMAGE_TYPE_BASE_WEAPON), oMeldshaper, 6.0);
|
||||||
|
|
||||||
|
// If you have the meld bound to the correct Chakra and there's nothing in your weapon hand
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_HANDS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_DOUBLE_HANDS &&
|
||||||
|
!GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
|
||||||
|
{
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(GetEssentiaInvested(oMeldshaper, MELD_MAULING_GAUNTLETS)*2), DAMAGE_TYPE_BASE_WEAPON), oMeldshaper, 6.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//if (GetIsMeldBound(oMeldshaper, MELD_PHASE_CLOAK) == CHAKRA_SHOULDERS) PhaseCloak(oMeldshaper);
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_PHASE_CLOAK) == CHAKRA_SHOULDERS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_PHASE_CLOAK) == CHAKRA_DOUBLE_SHOULDERS)
|
||||||
|
{
|
||||||
|
PhaseCloak(oMeldshaper);
|
||||||
|
}
|
||||||
|
|
||||||
|
//if (GetIsMeldBound(oMeldshaper, MELD_RAGECLAWS) == CHAKRA_HANDS) RageClaws(oMeldshaper);
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_RAGECLAWS) == CHAKRA_HANDS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_RAGECLAWS) == CHAKRA_DOUBLE_HANDS)
|
||||||
|
{
|
||||||
|
RageClaws(oMeldshaper);
|
||||||
|
}
|
||||||
|
|
||||||
|
//if (GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_TOTEM) RidingBracers(oMeldshaper);
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_ARMS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_DOUBLE_ARMS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_TOTEM ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_DOUBLE_TOTEM)
|
||||||
|
{
|
||||||
|
RidingBracers(oMeldshaper);
|
||||||
|
}
|
||||||
|
|
||||||
|
//if (GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_SHOULDERS || GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_TOTEM) TotemAvatar(oMeldshaper);
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_SHOULDERS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_DOUBLE_SHOULDERS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_TOTEM ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_DOUBLE_TOTEM)
|
||||||
|
{
|
||||||
|
TotemAvatar(oMeldshaper);
|
||||||
|
}
|
||||||
|
|
||||||
|
//if (GetIsMeldBound(oMeldshaper, MELD_WORG_PELT) == CHAKRA_HANDS) WorgPeltHB(oMeldshaper);
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_WORG_PELT) == CHAKRA_HANDS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_WORG_PELT) == CHAKRA_DOUBLE_HANDS)
|
||||||
|
{
|
||||||
|
WorgPeltHB(oMeldshaper);
|
||||||
|
}
|
||||||
|
|
||||||
if (GetRacialType(oMeldshaper) == RACIAL_TYPE_JAEBRIN) JaebrinHB(oMeldshaper);
|
if (GetRacialType(oMeldshaper) == RACIAL_TYPE_JAEBRIN) JaebrinHB(oMeldshaper);
|
||||||
if (GetEssentiaInvestedFeat(oMeldshaper, FEAT_COBALT_EXPERTISE)) CobaltExpertise(oMeldshaper);
|
if (GetEssentiaInvestedFeat(oMeldshaper, FEAT_COBALT_EXPERTISE)) CobaltExpertise(oMeldshaper);
|
||||||
//if (GetEssentiaInvestedFeat(oMeldshaper, FEAT_COBALT_POWER)) CobaltPower(oMeldshaper); Commented out so it doesn't work with Bioware PA any more.
|
//if (GetEssentiaInvestedFeat(oMeldshaper, FEAT_COBALT_POWER)) CobaltPower(oMeldshaper); Commented out so it doesn't work with Bioware PA any more.
|
||||||
if (GetEssentiaInvestedFeat(oMeldshaper, FEAT_MIDNIGHT_DODGE)) MidnightDodge(oMeldshaper);
|
if (GetEssentiaInvestedFeat(oMeldshaper, FEAT_MIDNIGHT_DODGE)) MidnightDodge(oMeldshaper);
|
||||||
if (GetEssentiaInvested(oMeldshaper, MELD_INCANDESCENT_AURA)) IncandescentAura(oMeldshaper);
|
if (GetEssentiaInvested(oMeldshaper, MELD_INCANDESCENT_AURA)) IncandescentAura(oMeldshaper);
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) == CHAKRA_WAIST) NecroVestmentsAura(oMeldshaper);
|
|
||||||
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper)) ActionCastSpellOnSelf(SPELL_DETECT_UNDEAD);
|
//if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) == CHAKRA_WAIST) NecroVestmentsAura(oMeldshaper);
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) == CHAKRA_WAIST ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) == CHAKRA_DOUBLE_WAIST)
|
||||||
|
{
|
||||||
|
NecroVestmentsAura(oMeldshaper);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper)) ActionCastSpellOnSelf(SPELL_DETECT_UNDEAD);
|
||||||
if (GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper)) // This tells the PRC whether to check for a necrocarnate on NPC death or not. Only allows 1 necrocarnate at a time
|
if (GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper)) // This tells the PRC whether to check for a necrocarnate on NPC death or not. Only allows 1 necrocarnate at a time
|
||||||
{
|
{
|
||||||
SetLocalObject(GetModule(), "Necrocarnate", oMeldshaper);
|
SetLocalObject(GetModule(), "Necrocarnate", oMeldshaper);
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ void main()
|
|||||||
int nLevel = GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper);
|
int nLevel = GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper);
|
||||||
int nDur = 3 + GetAbilityModifier(ABILITY_CONSTITUTION, oMeldshaper);
|
int nDur = 3 + GetAbilityModifier(ABILITY_CONSTITUTION, oMeldshaper);
|
||||||
int nBonus = 1 + nLevel/5;
|
int nBonus = 1 + nLevel/5;
|
||||||
|
if (GetLocalInt(oMeldshaper, "PlanarChasuble_BrowBind")) nBonus += 1;
|
||||||
float fDur = RoundsToSeconds(nDur);
|
float fDur = RoundsToSeconds(nDur);
|
||||||
effect eLink;
|
effect eLink;
|
||||||
if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_LAWFUL) eLink = EffectAttackIncrease(nBonus);
|
if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_LAWFUL) eLink = EffectAttackIncrease(nBonus);
|
||||||
|
|||||||
@@ -23,10 +23,39 @@ Their power to deflect blows away from vital areas is increased.
|
|||||||
|
|
||||||
While binding adamant pauldrons, you gain immunity to critical hits.
|
While binding adamant pauldrons, you gain immunity to critical hits.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 22:34:54
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
effect eLink = EffectImmunity(IMMUNITY_TYPE_SNEAK_ATTACK);
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectDamageReduction(nEssentia, DAMAGE_POWER_PLUS_TWO));
|
||||||
|
|
||||||
|
// Shoulders bind (critical hit immunity) <20> check regular or double Shoulders
|
||||||
|
int nBoundToShoulders = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
|
||||||
|
nBoundToShoulders = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToShoulders) eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_CRITICAL_HIT));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ADAMANT_PAULDRONS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -37,4 +66,4 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ADAMANT_PAULDRONS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ADAMANT_PAULDRONS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -29,10 +29,65 @@ and close without any conscious direction. In battle, you can use these terrible
|
|||||||
|
|
||||||
You gain a bite attack that deals 1d8 points of damage. You can use this bite as a primary attack. Every point of essentia invested in this soulmeld adds 1d4 points of acid damage to your bite damage.
|
You gain a bite attack that deals 1d8 points of damage. You can use this bite as a primary attack. Every point of essentia invested in this soulmeld adds 1d4 points of acid damage to your bite damage.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 09:17:03
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 2 + nEssentia;
|
||||||
|
|
||||||
|
effect eLink = EffectACIncrease(nBonus, AC_ARMOUR_ENCHANTMENT_BONUS);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ANKHEG_BREASTPLATE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Throat bind (acid line) <20> check regular or double Throat
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToThroat)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ANKHEG_BREASTPLATE_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Totem bind (bite) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
string sResRef = "prc_hdarc_bite_";
|
||||||
|
int nSize = PRCGetCreatureSize(oMeldshaper);
|
||||||
|
sResRef += GetAffixForSize(nSize);
|
||||||
|
AddNaturalPrimaryWeapon(oMeldshaper, sResRef);
|
||||||
|
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackB", sResRef);
|
||||||
|
|
||||||
|
int nDamage = EssentiaToD4(nEssentia);
|
||||||
|
|
||||||
|
// All natural attacks end up here
|
||||||
|
if (nEssentia)
|
||||||
|
{
|
||||||
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID, nDamage), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -60,4 +115,4 @@ void main()
|
|||||||
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID, nDamage), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID, nDamage), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -22,10 +22,43 @@ When you bind apparition ribbon to your throat chakra, you gain the ability to b
|
|||||||
ability is a standard action, and your incorporealness lasts for 1 round plus 1 round per point of essentia invested in the soulmeld at the time
|
ability is a standard action, and your incorporealness lasts for 1 round plus 1 round per point of essentia invested in the soulmeld at the time
|
||||||
it was activated. Each day, you can spend a total number of rounds incorporeal equal to your meldshaper level.
|
it was activated. Each day, you can spend a total number of rounds incorporeal equal to your meldshaper level.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 09:54:24
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
effect eLink;
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
if (nEssentia) eLink = VersusRacialTypeEffect(EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(nEssentia)), RACIAL_TYPE_UNDEAD);
|
||||||
|
|
||||||
|
// Throat bind (incorporeal) <20> check regular or double Throat
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToThroat)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_APPARITION_RIBBON_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_APPARITION_RIBBON), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
#include "moi_inc_moifunc"
|
/* void main()
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -39,4 +72,4 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_APPARITION_RIBBON), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_APPARITION_RIBBON), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -20,10 +20,44 @@ Barely visible wisps of incarnum writhe from your arcane focus, tendrils of soul
|
|||||||
|
|
||||||
Whenever you cast a spell that deals damage to a single living creature, that creature must succeed on a Fortitude save (using the soulmeld<6C>s save DC, not the spell<6C>s) or be dazed for 1 round.
|
Whenever you cast a spell that deals damage to a single living creature, that creature must succeed on a Fortitude save (using the soulmeld<6C>s save DC, not the spell<6C>s) or be dazed for 1 round.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 16:15:04
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectVisualEffect(VFX_DUR_BAELN_EYES)), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARCANE_FOCUS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Throat bind (daze on single-target arcane damage) <20> check regular or double Throat
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToThroat)
|
||||||
|
{
|
||||||
|
int nClass = GetMeldShapedClass(oMeldshaper, MELD_ARCANE_FOCUS);
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_ARCANE_FOCUS);
|
||||||
|
SetLocalInt(oMeldshaper, "ArcaneFocusBound", nDC);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DeleteLocalInt(oMeldshaper, "ArcaneFocusBound");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
|
||||||
@@ -38,4 +72,4 @@ void main()
|
|||||||
|
|
||||||
SetLocalInt(oMeldshaper, "ArcaneFocusBound", nDC);
|
SetLocalInt(oMeldshaper, "ArcaneFocusBound", nDC);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -20,10 +20,44 @@ Incarnum flows from the bracers to envelop you and then fades into invisibility.
|
|||||||
|
|
||||||
You gain an insight bonus to your AC and on your saving throws equal to the number of points of essentia invested in your armguards of disruption. These bonuses apply only against attacks made by undead creatures.
|
You gain an insight bonus to your AC and on your saving throws equal to the number of points of essentia invested in your armguards of disruption. These bonuses apply only against attacks made by undead creatures.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 16:02:34
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink;
|
||||||
|
|
||||||
|
// Arms bind (AC/save vs undead) <20> check regular or double Arms
|
||||||
|
int nBoundToArms = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
|
||||||
|
nBoundToArms = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToArms)
|
||||||
|
eLink = EffectLinkEffects(
|
||||||
|
VersusRacialTypeEffect(EffectACIncrease(nEssentia), RACIAL_TYPE_UNDEAD),
|
||||||
|
VersusRacialTypeEffect(EffectSavingThrowIncrease(SAVING_THROW_ALL, nEssentia), RACIAL_TYPE_UNDEAD)
|
||||||
|
);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
if (nBoundToArms)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -34,4 +68,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -38,7 +38,14 @@ The vambraces extend down and cover your hands in ectoplasm.
|
|||||||
You gain two slam attacks, which act as primary natural weapons. The slam attacks deal 1d4 points of damage if you are Small,
|
You gain two slam attacks, which act as primary natural weapons. The slam attacks deal 1d4 points of damage if you are Small,
|
||||||
1d6 points of damage if you are Medium, or 1d8 points of damage if you are Large, plus your Strength bonus.
|
1d6 points of damage if you are Medium, or 1d8 points of damage if you are Large, plus your Strength bonus.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:44:37
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -48,7 +55,7 @@ void main()
|
|||||||
int nBonus = (1 + nEssentia) * 2;
|
int nBonus = (1 + nEssentia) * 2;
|
||||||
|
|
||||||
effect eLink = EffectDamageReduction(nBonus, DAMAGE_POWER_PLUS_ONE);
|
effect eLink = EffectDamageReduction(nBonus, DAMAGE_POWER_PLUS_ONE);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS)
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_ARMS)
|
||||||
{
|
{
|
||||||
int nChoice = GetLocalInt(oMeldshaper, "AstralVambraces");
|
int nChoice = GetLocalInt(oMeldshaper, "AstralVambraces");
|
||||||
//FloatingTextStringOnCreature("Astral Vambrace Arms Chakra nChoice "+IntToString(nChoice), oMeldshaper, FALSE);
|
//FloatingTextStringOnCreature("Astral Vambrace Arms Chakra nChoice "+IntToString(nChoice), oMeldshaper, FALSE);
|
||||||
@@ -68,7 +75,7 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ASTRAL_VAMBRACES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ASTRAL_VAMBRACES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS)
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_HANDS)
|
||||||
{
|
{
|
||||||
string sResRef = "prc_hdarc_slam_";
|
string sResRef = "prc_hdarc_slam_";
|
||||||
int nSize = PRCGetCreatureSize(oMeldshaper);
|
int nSize = PRCGetCreatureSize(oMeldshaper);
|
||||||
|
|||||||
@@ -26,10 +26,49 @@ Behind the mask, your eyes glow with a pale green radiance that is clearly visib
|
|||||||
|
|
||||||
By directing your gaze on a creature within 30 feet, you can temporarily turn that creature to stone (as the flesh to stone spell, except that the duration is only 1 round). A successful Fortitude save negates this effect.
|
By directing your gaze on a creature within 30 feet, you can temporarily turn that creature to stone (as the flesh to stone spell, except that the duration is only 1 round). A successful Fortitude save negates this effect.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 00:22:25
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectUltravision();
|
||||||
|
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SPOT, nEssentia * 2));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BASILISK_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Brow bind (Blind-Fight) <20> check regular or double Brow
|
||||||
|
int nBoundToBrow = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
|
||||||
|
nBoundToBrow = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToBrow)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (petrifying gaze) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BASILISK_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -41,4 +80,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BASILISK_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BASILISK_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BASILISK_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BASILISK_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -30,10 +30,64 @@ Sharp teeth fill your mouth, allowing you to bite your foes savagely in combat.
|
|||||||
|
|
||||||
You gain a bite attack that deals 1d8 points of damage. You can use this bite as a primary attack. Every point of essentia invested in this soulmeld adds 1d4 points of electricity damage to your bite damage.
|
You gain a bite attack that deals 1d8 points of damage. You can use this bite as a primary attack. Every point of essentia invested in this soulmeld adds 1d4 points of electricity damage to your bite damage.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 01:12:00
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_PROTECTION_ENERGY_ELECT);
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, 5 * nEssentia));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEHIR_GORGET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Throat bind (lightning line) <20> check regular or double Throat
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToThroat)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEHIR_GORGET_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (bite + electricity damage) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
string sResRef = "prc_hdarc_bite_";
|
||||||
|
int nSize = PRCGetCreatureSize(oMeldshaper);
|
||||||
|
sResRef += GetAffixForSize(nSize);
|
||||||
|
AddNaturalPrimaryWeapon(oMeldshaper, sResRef);
|
||||||
|
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackB", sResRef);
|
||||||
|
|
||||||
|
int nDamage = EssentiaToD4(nEssentia);
|
||||||
|
|
||||||
|
// All natural attacks end up here
|
||||||
|
if (nEssentia)
|
||||||
|
{
|
||||||
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, nDamage), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -61,4 +115,4 @@ void main()
|
|||||||
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, nDamage), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, nDamage), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -26,7 +26,15 @@ The skin of your hands becomes red-orange and scaly like the talons of a blood h
|
|||||||
|
|
||||||
You can make two claw attacks that each deal 1d4 points of damage plus your Strength modifier. On the round after you hit with a claw attack, the wounds bleed for an additional 1 point of damage per point of essentia you had invested in your bloodtalons when you made the attack. Nonliving creatures are immune to this blood loss effect. Every point of essentia invested in the bloodtalons grants a +1 enhancement bonus on attack rolls made with the claw attacks.
|
You can make two claw attacks that each deal 1d4 points of damage plus your Strength modifier. On the round after you hit with a claw attack, the wounds bleed for an additional 1 point of damage per point of essentia you had invested in your bloodtalons when you made the attack. Nonliving creatures are immune to this blood loss effect. Every point of essentia invested in the bloodtalons grants a +1 enhancement bonus on attack rolls made with the claw attacks.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 13:51:40
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void BloodtalonsTotem(object oMeldshaper, int nEssentia)
|
void BloodtalonsTotem(object oMeldshaper, int nEssentia)
|
||||||
@@ -39,7 +47,49 @@ void BloodtalonsTotem(object oMeldshaper, int nEssentia)
|
|||||||
AddEventScript(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
|
AddEventScript(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SPOT, nEssentia*2));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODTALONS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_DIEHARD), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Hands bind (Weapon Finesse) <20> check regular or double Hands
|
||||||
|
int nBoundToHands = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HANDS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HANDS)) == nMeldId)
|
||||||
|
nBoundToHands = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToHands)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_FINESSE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (claws) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
string sResRef = "prc_claw_1d6l_";
|
||||||
|
int nSize = PRCGetCreatureSize(oMeldshaper);
|
||||||
|
sResRef += GetAffixForSize(nSize);
|
||||||
|
AddNaturalPrimaryWeapon(oMeldshaper, sResRef, 2);
|
||||||
|
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackL", sResRef);
|
||||||
|
SetLocalInt(oMeldshaper, "ClearEventTotem", TRUE);
|
||||||
|
|
||||||
|
// All natural attacks end up here
|
||||||
|
DelayCommand(3.0, BloodtalonsTotem(oMeldshaper, nEssentia));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -63,4 +113,4 @@ void main()
|
|||||||
// All natural attacks end up here
|
// All natural attacks end up here
|
||||||
DelayCommand(3.0, BloodtalonsTotem(oMeldshaper, nEssentia));
|
DelayCommand(3.0, BloodtalonsTotem(oMeldshaper, nEssentia));
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -26,10 +26,43 @@ Your bloodwar gauntlets bind themselves to your hands, shrinking to better fit t
|
|||||||
|
|
||||||
Any weapon you equip gains the keen property
|
Any weapon you equip gains the keen property
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 21:23:36
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectAttackIncrease(1);
|
||||||
|
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(nEssentia), DAMAGE_TYPE_BASE_WEAPON));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODWAR_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Arms bind (blast) <20> check regular or double Arms
|
||||||
|
int nBoundToArms = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
|
||||||
|
nBoundToArms = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToArms)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODWAR_GAUNTLETS_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#include "moi_inc_moifunc"
|
|
||||||
|
|
||||||
void main()
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -40,4 +73,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODWAR_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODWAR_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODWAR_GAUNTLETS_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODWAR_GAUNTLETS_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -28,10 +28,49 @@ Your posture becomes slightly hunched, giving you the merest hint of a canine ap
|
|||||||
|
|
||||||
You can use the dimension door ability of this soulmeld as a move action.
|
You can use the dimension door ability of this soulmeld as a move action.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 20:55:58
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Heart bind (blink) <20> check regular or double Heart
|
||||||
|
int nBoundToHeart = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HEART)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HEART)) == nMeldId)
|
||||||
|
nBoundToHeart = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToHeart)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_HEART), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (move-action dimension door) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_DOOR_MV), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
else
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_DOOR_ST), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -48,4 +87,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_DOOR_MV), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_DOOR_MV), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
else
|
else
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_DOOR_ST), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_DOOR_ST), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -9,7 +9,14 @@ You gain the ability to teleport yourself (as dimension door) up to 10 feet at w
|
|||||||
|
|
||||||
Essentia: For every point of essentia invested, you can teleport an additional 10 feet.
|
Essentia: For every point of essentia invested, you can teleport an additional 10 feet.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:56:13
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "spinc_dimdoor"
|
#include "spinc_dimdoor"
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
@@ -21,7 +28,7 @@ void main()
|
|||||||
float fDist = GetDistanceBetweenLocations(lTarget, GetLocation(oMeldshaper));
|
float fDist = GetDistanceBetweenLocations(lTarget, GetLocation(oMeldshaper));
|
||||||
|
|
||||||
// It's a move action if done this way
|
// It's a move action if done this way
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_ACROBAT_BOOTS) == CHAKRA_TOTEM)
|
if (GetIsMeldBound(oMeldshaper, MELD_ACROBAT_BOOTS) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper, MELD_ACROBAT_BOOTS) == CHAKRA_DOUBLE_TOTEM)
|
||||||
if(!TakeMoveAction(oMeldshaper)) return;
|
if(!TakeMoveAction(oMeldshaper)) return;
|
||||||
|
|
||||||
// If it's within range
|
// If it's within range
|
||||||
|
|||||||
@@ -20,6 +20,14 @@ Your bluesteel bracers affix themselves to your arms, extending swirling pattern
|
|||||||
|
|
||||||
All allies within 30 feet gain the +2 bonus on initiative granted by this soulmeld.
|
All allies within 30 feet gain the +2 bonus on initiative granted by this soulmeld.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 08:43:46
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void BluesteelBracersHB(object oMeldshaper);
|
void BluesteelBracersHB(object oMeldshaper);
|
||||||
|
|
||||||
@@ -46,7 +54,32 @@ void BluesteelBracersHB(object oMeldshaper)
|
|||||||
if(GetHasSpellEffect(MELD_BLUESTEEL_BRACERS, oMeldshaper)) DelayCommand(6.0, BluesteelBracersHB(oMeldshaper));
|
if(GetHasSpellEffect(MELD_BLUESTEEL_BRACERS, oMeldshaper)) DelayCommand(6.0, BluesteelBracersHB(oMeldshaper));
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectSkillDecrease(SKILL_SPOT, 2);
|
||||||
|
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(nEssentia), DAMAGE_TYPE_BASE_WEAPON));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLUESTEEL_BRACERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLOODED), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Check if bound to Arms chakra (regular or double)
|
||||||
|
int nBoundToArms = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
|
||||||
|
nBoundToArms = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToArms)
|
||||||
|
{
|
||||||
|
BluesteelBracersHB(oMeldshaper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -59,4 +92,5 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLUESTEEL_BRACERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLUESTEEL_BRACERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLOODED), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLOODED), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) BluesteelBracersHB(oMeldshaper);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) BluesteelBracersHB(oMeldshaper);
|
||||||
}
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
|
||||||
|
} */
|
||||||
@@ -26,7 +26,14 @@ Your face blends into the mask, your jaws growing long and sprouting huge fangs.
|
|||||||
|
|
||||||
You gain a bite attack that deals 1d8 points of damage. You can use this bite as a primary attack. Every point of essentia invested in this soulmeld grants a +1 enhancement bonus on attack rolls and damage rolls made with the bite attack.
|
You gain a bite attack that deals 1d8 points of damage. You can use this bite as a primary attack. Every point of essentia invested in this soulmeld grants a +1 enhancement bonus on attack rolls and damage rolls made with the bite attack.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:18:04
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -40,8 +47,10 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BRASS_MANE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BRASS_MANE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BRASS_MANE_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_THROAT)
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM)
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BRASS_MANE_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_TOTEM)
|
||||||
{
|
{
|
||||||
string sResRef = "prc_hdarc_bite_";
|
string sResRef = "prc_hdarc_bite_";
|
||||||
int nSize = PRCGetCreatureSize(oMeldshaper);
|
int nSize = PRCGetCreatureSize(oMeldshaper);
|
||||||
|
|||||||
@@ -9,10 +9,57 @@ Your voice gets louder unless you make a conscious effort to keep it quiet.
|
|||||||
Once per minute, you can loose a devastating roar. All creatures within 10 feet must succeed on a Will save or become fatigued.
|
Once per minute, you can loose a devastating roar. All creatures within 10 feet must succeed on a Will save or become fatigued.
|
||||||
The range of this effect is extended by 10 feet for every point of essentia invested in the soulmeld.
|
The range of this effect is extended by 10 feet for every point of essentia invested in the soulmeld.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 19:18:18
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_BRASS_MANE;
|
||||||
|
|
||||||
|
// Check if bound to Throat chakra (regular or double)
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToThroat) return; // Exit if not bound to Throat
|
||||||
|
|
||||||
|
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_BRASS_MANE);
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_BRASS_MANE);
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_BRASS_MANE);
|
||||||
|
location lTarget = GetLocation(oMeldshaper);
|
||||||
|
float fRange = 10.0 + (10.0 * nEssentia);
|
||||||
|
effect eVis = EffectVisualEffect(VFX_IMP_SOUND_SYMBOL_STUNNING);
|
||||||
|
|
||||||
|
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(fRange), lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||||
|
while (GetIsObjectValid(oTarget))
|
||||||
|
{
|
||||||
|
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF) && oMeldshaper != oTarget)
|
||||||
|
{
|
||||||
|
SignalEvent(oTarget, EventSpellCastAt(oMeldshaper, MELD_BRASS_MANE));
|
||||||
|
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLevel))
|
||||||
|
{
|
||||||
|
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_SONIC))
|
||||||
|
{
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFatigue(), oTarget, 9999.0);
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(fRange), lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_BRASS_MANE);
|
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_BRASS_MANE);
|
||||||
@@ -42,4 +89,4 @@ void main()
|
|||||||
//Select the next target within the spell shape.
|
//Select the next target within the spell shape.
|
||||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(fRange), lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(fRange), lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|||||||
@@ -26,10 +26,45 @@ Instead of a gleaming silver band around your head, your beast tamer circlet man
|
|||||||
|
|
||||||
You gain the ability to use animal trance, as the spell. You can use this ability once per minute.
|
You gain the ability to use animal trance, as the spell. You can use this ability once per minute.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 19:12:16
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectSkillIncrease(SKILL_ANIMAL_EMPATHY, 2 + (nEssentia*2));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Crown bind (charm animals) <20> check regular or double Crown
|
||||||
|
int nBoundToCrown = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
|
||||||
|
nBoundToCrown = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToCrown) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (animal trance) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -39,4 +74,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -19,7 +19,14 @@ A dim silver glow emanates from your eyes. A brief flash, visible only to you, s
|
|||||||
|
|
||||||
When your charming veil is bound to your brow chakra, you gain a bonus on Sense Motive checks equal to the number of points of essentia invested in the veil. You also gain this bonus on saving throws to resist charm and compulsion effects targeting you.
|
When your charming veil is bound to your brow chakra, you gain a bonus on Sense Motive checks equal to the number of points of essentia invested in the veil. You also gain this bonus on saving throws to resist charm and compulsion effects targeting you.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:20:30
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -28,7 +35,7 @@ void main()
|
|||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW && nEssentia) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SENSE_MOTIVE, nEssentia));
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_BROW && nEssentia) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SENSE_MOTIVE, nEssentia));
|
||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CHARMING_VEIL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CHARMING_VEIL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|||||||
@@ -26,10 +26,56 @@ The embroidered patterns formed by raw incarnum in the front of your planar chas
|
|||||||
|
|
||||||
Once per week you can cast gate.
|
Once per week you can cast gate.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 12:59:00
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Fixed broken Brow bind.
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 10 + (5 * nEssentia);
|
||||||
|
int nType;
|
||||||
|
|
||||||
|
if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_CHAOTIC)
|
||||||
|
nType = DAMAGE_TYPE_ELECTRICAL;
|
||||||
|
else if (GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_EVIL)
|
||||||
|
nType = DAMAGE_TYPE_ACID;
|
||||||
|
else if (GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_GOOD)
|
||||||
|
nType = DAMAGE_TYPE_COLD;
|
||||||
|
else if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_LAWFUL)
|
||||||
|
nType = DAMAGE_TYPE_FIRE;
|
||||||
|
|
||||||
|
effect eLink = EffectDamageResistance(nType, nBonus);
|
||||||
|
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
|
||||||
|
SetLocalInt(oMeldshaper, "PlanarChasuble_BrowBind", TRUE);
|
||||||
|
else
|
||||||
|
DeleteLocalInt(oMeldshaper, "PlanarChasuble_BrowBind");
|
||||||
|
|
||||||
void main()
|
// Soul bind (gate) <20> check regular or double Soul
|
||||||
|
int nBoundToSoul = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SOUL)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SOUL)) == nMeldId)
|
||||||
|
nBoundToSoul = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToSoul)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PLANAR_CHASUBLE_SOUL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PLANAR_CHASUBLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -51,4 +97,4 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PLANAR_CHASUBLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PLANAR_CHASUBLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -8,7 +8,7 @@ Classes: Soulborn, totemist
|
|||||||
Chakra: Arms, hands (totem)
|
Chakra: Arms, hands (totem)
|
||||||
Saving Throw: None
|
Saving Throw: None
|
||||||
|
|
||||||
A pair of dragonlike units, wreathed in blue fire, hover above your own arms and mimic your actions. The arms have long, sharp talons of cerulean light.
|
A pair of dragonlike arms, wreathed in blue fire, hover above your own arms and mimic your actions. The arms have long, sharp talons of cerulean light.
|
||||||
|
|
||||||
This soulmeld draws on the most basic of draconic attack forms, granting you claws that deal damage of 1d6 points if you are Medium. 1d4 if you are Small, or 1d8 if you are Large.
|
This soulmeld draws on the most basic of draconic attack forms, granting you claws that deal damage of 1d6 points if you are Medium. 1d4 if you are Small, or 1d8 if you are Large.
|
||||||
|
|
||||||
@@ -32,10 +32,70 @@ The dragon arms become more fleshlike and animated, growing up toward your buck
|
|||||||
|
|
||||||
You gain a +8 bonus to Climb checks.
|
You gain a +8 bonus to Climb checks.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 12:15:04
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
string sResRef = "prc_claw_1d6m_";
|
||||||
|
int nSize = PRCGetCreatureSize(oMeldshaper);
|
||||||
|
|
||||||
|
// Hands bind (damage step up) <20> check regular or double Hands
|
||||||
|
int nBoundToHands = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HANDS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HANDS)) == nMeldId)
|
||||||
|
nBoundToHands = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToHands) nSize += 1;
|
||||||
|
sResRef += GetAffixForSize(nSize);
|
||||||
|
AddNaturalPrimaryWeapon(oMeldshaper, sResRef, 2);
|
||||||
|
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackL", sResRef);
|
||||||
|
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
// All natural attacks end up here
|
||||||
|
if (nEssentia)
|
||||||
|
{
|
||||||
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Arms bind (keen) <20> check regular or double Arms
|
||||||
|
int nBoundToArms = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
|
||||||
|
nBoundToArms = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToArms)
|
||||||
|
{
|
||||||
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyKeen(), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), ItemPropertyKeen(), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
|
}
|
||||||
|
// Totem bind (Climb bonus) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_CLIMB, 8));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CLAW_OF_THE_WYRM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -65,4 +125,4 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CLAW_OF_THE_WYRM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CLAW_OF_THE_WYRM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -24,19 +24,33 @@ Like the invisible power of magical force, your attacks slice through the bounda
|
|||||||
|
|
||||||
Your melee attacks gain the force descriptor, making them useful against incorporeal foes. [Turn this into Blind-Fight]
|
Your melee attacks gain the force descriptor, making them useful against incorporeal foes. [Turn this into Blind-Fight]
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:33:07
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:; Fixed broken Brow bind
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
|
||||||
effect eLink = EffectSavingThrowIncrease(SAVING_THROW_WILL, 2, SAVING_THROW_TYPE_MIND_SPELLS);
|
effect eLink = EffectSavingThrowIncrease(SAVING_THROW_WILL, 2, SAVING_THROW_TYPE_MIND_SPELLS);
|
||||||
|
|
||||||
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectACIncrease(nEssentia, AC_DEFLECTION_BONUS));
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectACIncrease(nEssentia, AC_DEFLECTION_BONUS));
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper)) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
//if (GetIsMeldBound(oMeldshaper)) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CRYSTAL_HELM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CRYSTAL_HELM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|||||||
@@ -20,12 +20,63 @@ The light from the headband becomes steady and constant, amplifying the contrast
|
|||||||
|
|
||||||
The diadem of purelight negates any concealment within a 20 ft radius.
|
The diadem of purelight negates any concealment within a 20 ft radius.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 00:58:50
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
void DiademHB(object oMeldshaper);
|
void DiademHB(object oMeldshaper);
|
||||||
|
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void DiademHB(object oMeldshaper)
|
void DiademHB(object oMeldshaper)
|
||||||
|
{
|
||||||
|
// Validate Crown bind (regular or double) before processing
|
||||||
|
int nBoundToCrown = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == MELD_DIADEM_OF_PURELIGHT ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == MELD_DIADEM_OF_PURELIGHT)
|
||||||
|
nBoundToCrown = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToCrown) return;
|
||||||
|
|
||||||
|
location lTarget = GetLocation(oMeldshaper);
|
||||||
|
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20.0), lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||||
|
while (GetIsObjectValid(oTarget))
|
||||||
|
{
|
||||||
|
PRCRemoveSpecificEffect(EFFECT_TYPE_CONCEALMENT, oTarget);
|
||||||
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(20.0), lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GetHasSpellEffect(MELD_DIADEM_OF_PURELIGHT, oMeldshaper)) DelayCommand(1.0, DiademHB(oMeldshaper));
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectSkillIncrease(SKILL_SPOT, 2 + (nEssentia * 2));
|
||||||
|
|
||||||
|
SetLocalInt(oMeldshaper, "PRCInLight", GetLocalInt(oMeldshaper, "PRCInLight") + 1);
|
||||||
|
SetLocalInt(oMeldshaper, "DiademPurelight", TRUE);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DIADEM_OF_PURELIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Crown bind (negate concealment in 20 ft) <20> check regular or double Crown
|
||||||
|
int nBoundToCrown = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
|
||||||
|
nBoundToCrown = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToCrown) DiademHB(oMeldshaper);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void DiademHB(object oMeldshaper)
|
||||||
{
|
{
|
||||||
location lTarget = GetLocation(oMeldshaper);
|
location lTarget = GetLocation(oMeldshaper);
|
||||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20.0), lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20.0), lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||||
@@ -38,9 +89,9 @@ void DiademHB(object oMeldshaper)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (GetHasSpellEffect(MELD_DIADEM_OF_PURELIGHT, oMeldshaper)) DelayCommand(1.0, DiademHB(oMeldshaper));
|
if (GetHasSpellEffect(MELD_DIADEM_OF_PURELIGHT, oMeldshaper)) DelayCommand(1.0, DiademHB(oMeldshaper));
|
||||||
}
|
} */
|
||||||
|
|
||||||
void main()
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -52,4 +103,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DIADEM_OF_PURELIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DIADEM_OF_PURELIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) DiademHB(oMeldshaper);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) DiademHB(oMeldshaper);
|
||||||
}
|
} */
|
||||||
@@ -26,10 +26,41 @@ Your face lengthens and shapes into the mask you wear, and the dangling tongue o
|
|||||||
|
|
||||||
You can use the long tongue of your disenchanter mask to make a melee touch attack as a standard action. If it hits, you suppress the opponent's primary weapon, if any, for ten rounds.
|
You can use the long tongue of your disenchanter mask to make a melee touch attack as a standard action. If it hits, you suppress the opponent's primary weapon, if any, for ten rounds.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
void main()
|
//:: Updated on: 2026-02-20 11:56:39
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK_DETECT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (tongue attack) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -39,4 +70,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK_DETECT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK_DETECT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -23,7 +23,14 @@ When using this soulmeld
|
|||||||
|
|
||||||
#include "prc_inc_s_det"
|
#include "prc_inc_s_det"
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 13:18:03
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
@@ -31,7 +38,7 @@ void main()
|
|||||||
int nRound = 0;
|
int nRound = 0;
|
||||||
float fRange = 10 + (10.0 * GetEssentiaInvested(oMeldshaper, MELD_DISENCHANTER_MASK));
|
float fRange = 10 + (10.0 * GetEssentiaInvested(oMeldshaper, MELD_DISENCHANTER_MASK));
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_DISENCHANTER_MASK) == CHAKRA_BROW) nRound = 3;
|
if (GetIsMeldBound(oMeldshaper, MELD_DISENCHANTER_MASK) == CHAKRA_BROW || GetIsMeldBound(oMeldshaper, MELD_DISENCHANTER_MASK) == CHAKRA_DOUBLE_BROW) nRound = 3;
|
||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_DETECT), oMeldshaper, fDuration);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_DETECT), oMeldshaper, fDuration);
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,15 @@ Your face lengthens and shapes into the mask you wear, and the dangling tongue o
|
|||||||
|
|
||||||
You can use the long tongue of your disenchanter mask to make a melee touch attack as a standard action. If it hits, you suppress the opponent's primary weapon, if any, for ten rounds.
|
You can use the long tongue of your disenchanter mask to make a melee touch attack as a standard action. If it hits, you suppress the opponent's primary weapon, if any, for ten rounds.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 11:56:39
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
#include "prc_inc_sp_tch"
|
#include "prc_inc_sp_tch"
|
||||||
|
|
||||||
@@ -126,7 +134,29 @@ void SuppressItem(object oTrueSpeaker, object oTarget, int nBeats)
|
|||||||
DelayCommand(6.0, SuppressItem(oTrueSpeaker, oTarget, nBeats - 1));
|
DelayCommand(6.0, SuppressItem(oTrueSpeaker, oTarget, nBeats - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_DISENCHANTER_MASK;
|
||||||
|
|
||||||
|
// Check if bound to Totem chakra (regular or double)
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToTotem) return; // Exit if not bound to Totem
|
||||||
|
|
||||||
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
|
if(PRCDoMeleeTouchAttack(oTarget))
|
||||||
|
{
|
||||||
|
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
||||||
|
if (GetIsObjectValid(oItem))
|
||||||
|
SuppressItem(oMeldshaper, oItem, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
object oTarget = PRCGetSpellTargetObject();
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
@@ -136,5 +166,5 @@ void main()
|
|||||||
if (GetIsObjectValid(oItem))
|
if (GetIsObjectValid(oItem))
|
||||||
SuppressItem(oMeldshaper, oItem, 10);
|
SuppressItem(oMeldshaper, oItem, 10);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
|
|||||||
@@ -42,10 +42,40 @@ When you charge, your visage suggests something utterly inhuman, striking fear i
|
|||||||
|
|
||||||
When you charge, all enemies within 60 feet who can see you become shaken for 1 round (Will negates).
|
When you charge, all enemies within 60 feet who can see you become shaken for 1 round (Will negates).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 00:30:44
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added here and in
|
||||||
|
//:: moi_events, prcsp_engine & prc_inc_combmove
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DREAD_CARAPACE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Feet bind (speed boost) <20> check regular or double Feet
|
||||||
|
int nBoundToFeet = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_FEET)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_FEET)) == nMeldId)
|
||||||
|
nBoundToFeet = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToFeet)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DREAD_CARAPACE_FEET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void main()
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -54,4 +84,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DREAD_CARAPACE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DREAD_CARAPACE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_FEET) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DREAD_CARAPACE_FEET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_FEET) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DREAD_CARAPACE_FEET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -32,10 +32,60 @@ The dragon head becomes a solid blue mask, forming a hollow shape that completel
|
|||||||
|
|
||||||
You can emanate an aura of frightful presence once per round as a swift action. All creatures within 10 feet with fewer Hit Dice than you become shaken for 1 round. A successful Will save negates the effect and renders the creature immune to the frightful presence of this soulmeld for 24 hours. For every point of essentia you have invested in your dragonfire mask, the radius of the frightful presence increases by 10 feet, and its duration increases by 1 round.
|
You can emanate an aura of frightful presence once per round as a swift action. All creatures within 10 feet with fewer Hit Dice than you become shaken for 1 round. A successful Will save negates the effect and renders the creature immune to the frightful presence of this soulmeld for 24 hours. For every point of essentia you have invested in your dragonfire mask, the radius of the frightful presence increases by 10 feet, and its duration increases by 1 round.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 00:13:35
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SPOT, 2 * nEssentia));
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Brow bind (darkvision) <20> check regular or double Brow
|
||||||
|
int nBoundToBrow = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
|
||||||
|
nBoundToBrow = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToBrow) eLink = EffectLinkEffects(eLink, EffectUltravision());
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (frightful presence) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Throat bind (breath weapon) <20> check regular or double Throat
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToThroat)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -48,4 +98,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -16,10 +16,91 @@ You can emanate an aura of frightful presence once per round as a swift action.
|
|||||||
A successful Will save negates the effect and renders the creature immune to the frightful presence of this soulmeld for 24 hours. For every point of essentia you
|
A successful Will save negates the effect and renders the creature immune to the frightful presence of this soulmeld for 24 hours. For every point of essentia you
|
||||||
have invested in your dragonfire mask, the radius of the frightful presence increases by 10 feet, and its duration increases by 1 round.
|
have invested in your dragonfire mask, the radius of the frightful presence increases by 10 feet, and its duration increases by 1 round.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 23:42:43
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_DRAGONFIRE_MASK;
|
||||||
|
|
||||||
|
// Check if bound to Totem chakra (regular or double)
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToTotem) return;
|
||||||
|
|
||||||
|
if(!TakeSwiftAction(oMeldshaper)) return;
|
||||||
|
|
||||||
|
// Do Frightful Presence
|
||||||
|
effect eShaken = SupernaturalEffect(EffectShaken());
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DRAGONFIRE_MASK);
|
||||||
|
|
||||||
|
float nDist = 10.0 + (10.0 * nEssentia);
|
||||||
|
float fRadius = FeetToMeters(nDist);
|
||||||
|
float fDuration = RoundsToSeconds(1+nEssentia);
|
||||||
|
|
||||||
|
int nPCHitDice = GetHitDice(oMeldshaper);
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_DRAGONFIRE_MASK);
|
||||||
|
int nTargetHitDice;
|
||||||
|
int bDoVFX = FALSE;
|
||||||
|
|
||||||
|
// The object ID for enforcing the 24h rule
|
||||||
|
string sPCOid = ObjectToString(oMeldshaper);
|
||||||
|
|
||||||
|
// Loop over creatures in range
|
||||||
|
location lTarget = GetLocation(oMeldshaper);
|
||||||
|
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE);
|
||||||
|
while (GetIsObjectValid(oTarget))
|
||||||
|
{
|
||||||
|
// Target validity check
|
||||||
|
if(oTarget != oMeldshaper && // Can't affect self
|
||||||
|
!GetLocalInt(oTarget, "DragonfireMask_SavedVs" + sPCOid) && // Hasn't saved successfully against this samurai's Frightful Presence in the last 24h
|
||||||
|
spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oMeldshaper) && // Only hostiles
|
||||||
|
nPCHitDice > GetHitDice(oTarget)) // Must have greater hit dice to affect the creature
|
||||||
|
{
|
||||||
|
// Set the marker that tells we tried to affect someone
|
||||||
|
bDoVFX = TRUE;
|
||||||
|
|
||||||
|
// Let the target know something hostile happened
|
||||||
|
SignalEvent(oTarget, EventSpellCastAt(oMeldshaper, -1, TRUE));
|
||||||
|
|
||||||
|
// Will save
|
||||||
|
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, oMeldshaper) &&
|
||||||
|
!GetIsImmune(oTarget, IMMUNITY_TYPE_FEAR, oMeldshaper)) // Explicit immunity check, because of the fucking stupid BW immunity handling
|
||||||
|
{
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eShaken, oTarget, fDuration);
|
||||||
|
}
|
||||||
|
// Successfull save, set marker and queue marker deletion
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetLocalInt(oTarget, "DragonfireMask_SavedVs" + sPCOid, TRUE);
|
||||||
|
|
||||||
|
// Add variable deletion to the target's queue. That way, if the samurai logs out, it will still get cleared
|
||||||
|
AssignCommand(oTarget, DelayCommand(HoursToSeconds(24), DeleteLocalInt(oTarget, "DragonfireMask_SavedVs" + sPCOid)));
|
||||||
|
}
|
||||||
|
}// end if - Target validity check
|
||||||
|
|
||||||
|
// Get next target in area
|
||||||
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE);
|
||||||
|
}// end while - Loop over creatures in 30ft area
|
||||||
|
|
||||||
|
// If we tried to affect someone, do war cry VFX
|
||||||
|
if(bDoVFX)
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(GetGender(oMeldshaper) == GENDER_FEMALE ? VFX_FNF_HOWL_WAR_CRY_FEMALE : VFX_FNF_HOWL_WAR_CRY), oMeldshaper);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
if(!TakeSwiftAction(oMeldshaper)) return;
|
if(!TakeSwiftAction(oMeldshaper)) return;
|
||||||
@@ -83,3 +164,4 @@ void main()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
@@ -32,10 +32,17 @@ Long, draconic wings sprout from the shoulders of your blue dragonhide plate arm
|
|||||||
|
|
||||||
You gain +4 on Jump checks for every point of essentia invested in your dragon mantle.
|
You gain +4 on Jump checks for every point of essentia invested in your dragon mantle.
|
||||||
|
|
||||||
Fixed by: Jaysyn
|
|
||||||
Fixed on: 2025-05-20 15:27:50
|
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 09:00:01
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//:: Fixed Dragon Mantle fast healing
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void DragonMantleHeal(object oMeldshaper);
|
void DragonMantleHeal(object oMeldshaper);
|
||||||
@@ -60,7 +67,79 @@ void DragonMantleHeal(object oMeldshaper)
|
|||||||
//DelayCommand(6.0, DragonMantleHeal(oMeldshaper));
|
//DelayCommand(6.0, DragonMantleHeal(oMeldshaper));
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
//Declare main variables.
|
||||||
|
int nEvent = GetRunningEvent();
|
||||||
|
int flag = 0;
|
||||||
|
object oMeldshaper;
|
||||||
|
switch(nEvent)
|
||||||
|
{
|
||||||
|
case EVENT_ONHEARTBEAT: oMeldshaper = OBJECT_SELF; break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
oMeldshaper = PRCGetSpellTargetObject(); //flag = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DRAGON_MANTLE);
|
||||||
|
int nBonus = 3 * nEssentia;
|
||||||
|
|
||||||
|
//if(flag == 1)
|
||||||
|
if(nEvent == FALSE)
|
||||||
|
{
|
||||||
|
effect eLink = EffectSavingThrowIncrease(SAVING_THROW_FORT, 2);
|
||||||
|
if (nEssentia)
|
||||||
|
{
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ACID, nBonus));
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_COLD, nBonus));
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, nBonus));
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_FIRE, nBonus));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for binds
|
||||||
|
int nBoundToShoulders = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
|
||||||
|
nBoundToShoulders = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToShoulders && nEssentia)
|
||||||
|
{
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectDamageReduction(nEssentia, DAMAGE_POWER_PLUS_ONE));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for binds
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem && nEssentia)
|
||||||
|
{
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_JUMP, nEssentia * 4));
|
||||||
|
}
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
AddEventScript(oMeldshaper, EVENT_ONHEARTBEAT, "moi_mld_drgnmntl", TRUE, FALSE);
|
||||||
|
}
|
||||||
|
else if(nEvent == EVENT_ONHEARTBEAT)
|
||||||
|
{
|
||||||
|
// Check for binds
|
||||||
|
int nBoundToHeart = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HEART)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HEART)) == nMeldId)
|
||||||
|
nBoundToHeart = TRUE;
|
||||||
|
|
||||||
|
if (GetHasSpellEffect(MELD_DRAGON_MANTLE, oMeldshaper) && nBoundToHeart)
|
||||||
|
{
|
||||||
|
DragonMantleHeal(oMeldshaper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
//Declare main variables.
|
//Declare main variables.
|
||||||
int nEvent = GetRunningEvent();
|
int nEvent = GetRunningEvent();
|
||||||
@@ -110,4 +189,4 @@ void main()
|
|||||||
DragonMantleHeal(oMeldshaper);
|
DragonMantleHeal(oMeldshaper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -32,10 +32,54 @@ The tail takes on the appearance of flesh and bone and becomes more agile and an
|
|||||||
|
|
||||||
As a standard action, you can make a tail sweep. All creatures adjacent to you automatically take damage as if they had been struck by your dragon tail (Reflex half).
|
As a standard action, you can make a tail sweep. All creatures adjacent to you automatically take damage as if they had been struck by your dragon tail (Reflex half).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 09:57:55
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
// Feet bind (Balance/Jump) <20> check regular or double Feet
|
||||||
|
int nBoundToFeet = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_FEET)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_FEET)) == nMeldId)
|
||||||
|
nBoundToFeet = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToFeet)
|
||||||
|
{
|
||||||
|
int nBonus = 2 + (nEssentia * 2);
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_BALANCE, nBonus));
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_JUMP, nBonus));
|
||||||
|
}
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL_SLAM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (sweep) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL_SWEEP), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -52,4 +96,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL_SLAM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL_SLAM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL_SWEEP), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL_SWEEP), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -31,10 +31,72 @@ The tail takes on the appearance of flesh and bone and becomes more agile and an
|
|||||||
|
|
||||||
As a standard action, you can make a tail sweep. All creatures adjacent to you automatically take damage as if they had been struck by your dragon tail (Reflex half).
|
As a standard action, you can make a tail sweep. All creatures adjacent to you automatically take damage as if they had been struck by your dragon tail (Reflex half).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 09:57:55
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "prc_inc_combat"
|
#include "prc_inc_combat"
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DRAGON_TAIL);
|
||||||
|
int nClass = GetMeldShapedClass(oMeldshaper, MELD_DRAGON_TAIL);
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_DRAGON_TAIL);
|
||||||
|
int nDamage;
|
||||||
|
|
||||||
|
// Helper to check if bound to Waist (regular or double)
|
||||||
|
int nBoundToWaist = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_WAIST)) == MELD_DRAGON_TAIL ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_WAIST)) == MELD_DRAGON_TAIL)
|
||||||
|
nBoundToWaist = TRUE;
|
||||||
|
|
||||||
|
if (GetSpellId() == MELD_DRAGON_TAIL_SWEEP)
|
||||||
|
{
|
||||||
|
location lTarget = GetLocation(oMeldshaper);
|
||||||
|
// Use the function to get the closest creature as a target
|
||||||
|
object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||||
|
while(GetIsObjectValid(oAreaTarget))
|
||||||
|
{
|
||||||
|
if(oAreaTarget != oMeldshaper && // Not you
|
||||||
|
GetIsInMeleeRange(oMeldshaper, oAreaTarget) && // They must be in melee range
|
||||||
|
GetIsEnemy(oAreaTarget, oMeldshaper)) // Only enemies
|
||||||
|
{
|
||||||
|
nDamage = d8() + GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper) + nEssentia;
|
||||||
|
if (nBoundToWaist) nDamage = d6(2) + FloatToInt(GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper)*1.5) + nEssentia;
|
||||||
|
nDamage = PRCGetReflexAdjustedDamage(nDamage, oAreaTarget, nDC, SAVING_THROW_TYPE_NONE);
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, ExtraordinaryEffect(EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING)), oAreaTarget);
|
||||||
|
}
|
||||||
|
//Select the next target within the spell shape.
|
||||||
|
oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // SLAM
|
||||||
|
{
|
||||||
|
int nAttack = GetAttackRoll(oTarget, oMeldshaper, OBJECT_INVALID, 0, nEssentia);
|
||||||
|
if(nAttack)
|
||||||
|
{
|
||||||
|
nDamage = d8()+GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper)+nEssentia;
|
||||||
|
if (nBoundToWaist) nDamage = d6(2)+ FloatToInt(GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper)*1.5) + nEssentia;
|
||||||
|
// Critical hit
|
||||||
|
if (nAttack == 2)
|
||||||
|
{
|
||||||
|
nDamage += d8()+GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper)+nEssentia;
|
||||||
|
if (nBoundToWaist) nDamage += d6(2)+ FloatToInt(GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper)*1.5) + nEssentia;
|
||||||
|
}
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, ExtraordinaryEffect(EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING)), oTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void main()
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
object oTarget = PRCGetSpellTargetObject();
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
@@ -79,4 +141,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, ExtraordinaryEffect(EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING)), oTarget);
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, ExtraordinaryEffect(EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING)), oTarget);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -26,7 +26,15 @@ A pair of tentacles extends from your shoulder blades. They end in pads ridged w
|
|||||||
|
|
||||||
As a full-round action, you can make two tentacle attacks using your full base attack bonus. Each tentacle deals 1d4 points of damage plus your Strength modifier. Every point of essentia invested in the displacer mantle grants you a +1 enhancement bonus on damage rolls made with the tentacle attacks.
|
As a full-round action, you can make two tentacle attacks using your full base attack bonus. Each tentacle deals 1d4 points of damage plus your Strength modifier. Every point of essentia invested in the displacer mantle grants you a +1 enhancement bonus on damage rolls made with the tentacle attacks.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:12:25
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -35,9 +43,9 @@ void main()
|
|||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
effect eLink = EffectSkillIncrease(SKILL_HIDE, 2 + (nEssentia*2));
|
effect eLink = EffectSkillIncrease(SKILL_HIDE, 2 + (nEssentia*2));
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SHOULDERS) eLink = EffectLinkEffects(eLink, EffectConcealment(20));
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_CROWN) eLink = EffectLinkEffects(eLink, EffectConcealment(20));
|
||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISPLACER_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISPLACER_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISPLACER_MANTLE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISPLACER_MANTLE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
}
|
||||||
@@ -14,11 +14,57 @@ A pair of tentacles extends from your shoulder blades. They end in pads ridged w
|
|||||||
|
|
||||||
As a full-round action, you can make two tentacle attacks using your full base attack bonus. Each tentacle deals 1d4 points of damage plus your Strength modifier. Every point of essentia invested in the displacer mantle grants you a +1 enhancement bonus on damage rolls made with the tentacle attacks.
|
As a full-round action, you can make two tentacle attacks using your full base attack bonus. Each tentacle deals 1d4 points of damage plus your Strength modifier. Every point of essentia invested in the displacer mantle grants you a +1 enhancement bonus on damage rolls made with the tentacle attacks.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 19:12:16
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
#include "prc_inc_combat"
|
#include "prc_inc_combat"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_DISPLACER_MANTLE;
|
||||||
|
|
||||||
|
// Check if bound to Totem chakra (regular or double)
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToTotem) return; // Exit if not bound to Totem
|
||||||
|
|
||||||
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DISPLACER_MANTLE);
|
||||||
|
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper);
|
||||||
|
|
||||||
|
// First tentacle attack
|
||||||
|
int nAtk = GetAttackRoll(oTarget, oMeldshaper, oWeap);
|
||||||
|
if (nAtk > 0)
|
||||||
|
{
|
||||||
|
int nDam = d4() + GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper) + nEssentia;
|
||||||
|
int nDamType = GetWeaponDamageType(oWeap);
|
||||||
|
effect eLink = EffectLinkEffects(EffectDamage(nDam * nAtk, nDamType), EffectVisualEffect(VFX_COM_HIT_ACID));
|
||||||
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Second tentacle attack
|
||||||
|
nAtk = GetAttackRoll(oTarget, oMeldshaper, oWeap);
|
||||||
|
if (nAtk > 0)
|
||||||
|
{
|
||||||
|
int nDam = d4() + GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper) + nEssentia;
|
||||||
|
int nDamType = GetWeaponDamageType(oWeap);
|
||||||
|
effect eLink = EffectLinkEffects(EffectDamage(nDam * nAtk, nDamType), EffectVisualEffect(VFX_COM_HIT_ACID));
|
||||||
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
object oTarget = PRCGetSpellTargetObject();
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
@@ -43,4 +89,4 @@ void main()
|
|||||||
effect eLink = EffectLinkEffects(EffectDamage(nDam * nAtk, nDamType), EffectVisualEffect(VFX_COM_HIT_ACID));
|
effect eLink = EffectLinkEffects(EffectDamage(nDam * nAtk, nDamType), EffectVisualEffect(VFX_COM_HIT_ACID));
|
||||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -20,10 +20,38 @@ Instead of a torc around your neck, the writhing shape of a twoheaded dragon arc
|
|||||||
|
|
||||||
When you use your ability to spit acid at an opponent, you also roll again for damage 1 round later.
|
When you use your ability to spit acid at an opponent, you also roll again for damage 1 round later.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 19:24:41
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE_SPIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Throat bind (delayed second damage) <20> check regular or double Throat
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToThroat)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE_SPIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -32,4 +60,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE_SPIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE_SPIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -20,7 +20,14 @@ Instead of a torc around your neck, the writhing shape of a twoheaded dragon arc
|
|||||||
|
|
||||||
When you use your ability to spit acid at an opponent, you also roll again for damage 1 round later.
|
When you use your ability to spit acid at an opponent, you also roll again for damage 1 round later.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 19:24:41
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
#include "prc_inc_sp_tch"
|
#include "prc_inc_sp_tch"
|
||||||
|
|
||||||
@@ -30,7 +37,41 @@ void DissolvingSpittleDelay(object oMeldshaper, object oTarget, int nAttack, int
|
|||||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_ACID_L), oTarget);
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_ACID_L), oTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_DISSOLVING_SPITTLE;
|
||||||
|
|
||||||
|
// Check if bound to Throat chakra (regular or double)
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DISSOLVING_SPITTLE);
|
||||||
|
int nDice = 1 + nEssentia;
|
||||||
|
effect eArrow = EffectVisualEffect(VFX_IMP_MIRV_DN_LAWNGREEN);
|
||||||
|
|
||||||
|
int nAttack = PRCDoRangedTouchAttack(oTarget);
|
||||||
|
if (nAttack > 0)
|
||||||
|
{
|
||||||
|
if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oMeldshaper))
|
||||||
|
{
|
||||||
|
int nDamage = d6(nDice);
|
||||||
|
ApplyTouchAttackDamage(oMeldshaper, oTarget, nAttack, nDamage, DAMAGE_TYPE_ACID);
|
||||||
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_ACID_L), oTarget);
|
||||||
|
|
||||||
|
if (nBoundToThroat)
|
||||||
|
{
|
||||||
|
nDamage = d6(nDice);
|
||||||
|
DelayCommand(6.0, DissolvingSpittleDelay(oMeldshaper, oTarget, nAttack, nDamage, DAMAGE_TYPE_ACID));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
object oTarget = PRCGetSpellTargetObject();
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
@@ -55,4 +96,4 @@ void main()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -26,10 +26,55 @@ The dragon becomes a symbol on a heraldic device of blue fire that settles onto
|
|||||||
|
|
||||||
You gain blindsense.
|
You gain blindsense.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 20:34:20
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 4 + (2 * nEssentia);
|
||||||
|
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_LORE, nBonus));
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_USE_MAGIC_DEVICE, nBonus));
|
||||||
|
|
||||||
|
// Crown bind (immunities + Intimidate) <20> check regular or double Crown
|
||||||
|
int nBoundToCrown = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
|
||||||
|
nBoundToCrown = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToCrown)
|
||||||
|
{
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_INTIMIDATE, nBonus));
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_SLEEP));
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_PARALYSIS));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Soul bind (blindsense via ultravision) <20> check regular or double Soul
|
||||||
|
int nBoundToSoul = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SOUL)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SOUL)) == nMeldId)
|
||||||
|
nBoundToSoul = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToSoul)
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectUltravision());
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ELDER_SPIRIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -48,4 +93,4 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ELDER_SPIRIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ELDER_SPIRIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -20,10 +20,39 @@ Your fellmist robe draws closer to your body, at the same time growing denser an
|
|||||||
|
|
||||||
Your fellmist robe provides its concealment against melee and ranged attackers.
|
Your fellmist robe provides its concealment against melee and ranged attackers.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 19:24:41
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nConceal = 10 + (nEssentia * 5);
|
||||||
|
if (nConceal > 50) nConceal = 50;
|
||||||
|
int nType = MISS_CHANCE_TYPE_VS_RANGED;
|
||||||
|
// Soul bind (normal concealment) <20> check regular or double Soul
|
||||||
|
int nBoundToSoul = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SOUL)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SOUL)) == nMeldId)
|
||||||
|
nBoundToSoul = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToSoul) nType = MISS_CHANCE_TYPE_NORMAL;
|
||||||
|
|
||||||
|
effect eLink = EffectConcealment(nConceal, nType);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FELLMIST_ROBE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -36,4 +65,4 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FELLMIST_ROBE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FELLMIST_ROBE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -20,10 +20,39 @@ Energy attacks are not simply absorbed and dispersed, but instead the energy is
|
|||||||
|
|
||||||
You can release a blast of fire from your flame cincture equal 1d6 plus 1d6 per point of essentia invested in the meld. A successful Reflex save reduces the damage by half.
|
You can release a blast of fire from your flame cincture equal 1d6 plus 1d6 per point of essentia invested in the meld. A successful Reflex save reduces the damage by half.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 08:43:46
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nResist = 10 + (nEssentia * 5);
|
||||||
|
|
||||||
|
effect eLink = EffectDamageResistance(DAMAGE_TYPE_FIRE, nResist);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FLAME_CINCTURE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Waist bind (fire blast) <20> check regular or double Waist
|
||||||
|
int nBoundToWaist = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_WAIST)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_WAIST)) == nMeldId)
|
||||||
|
nBoundToWaist = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToWaist)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FLAME_CINCTURE_WAIST), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -34,4 +63,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FLAME_CINCTURE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FLAME_CINCTURE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_WAIST) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FLAME_CINCTURE_WAIST), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_WAIST) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FLAME_CINCTURE_WAIST), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -7,10 +7,55 @@ Energy attacks are not simply absorbed and dispersed, but instead the energy is
|
|||||||
|
|
||||||
You can release a blast of fire from your flame cincture equal 1d6 plus 1d6 per point of essentia invested in the meld. A successful Reflex save reduces the damage by half.
|
You can release a blast of fire from your flame cincture equal 1d6 plus 1d6 per point of essentia invested in the meld. A successful Reflex save reduces the damage by half.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 18:56:13
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_FLAME_CINCTURE;
|
||||||
|
|
||||||
|
// Check if bound to Waist chakra (regular or double)
|
||||||
|
int nBoundToWaist = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_WAIST)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_WAIST)) == nMeldId)
|
||||||
|
nBoundToWaist = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToWaist) return; // Exit if not bound to Waist
|
||||||
|
|
||||||
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_FLAME_CINCTURE);
|
||||||
|
int nDice = 1 + nEssentia;
|
||||||
|
int nClass = GetMeldShapedClass(oMeldshaper, MELD_FLAME_CINCTURE);
|
||||||
|
int nMeldshaperLvl = GetMeldshaperLevel(oMeldshaper, nClass, MELD_FLAME_CINCTURE);
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_FLAME_CINCTURE);
|
||||||
|
|
||||||
|
// Exclude the caster from the damage effects
|
||||||
|
if (oTarget != oMeldshaper)
|
||||||
|
{
|
||||||
|
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oMeldshaper))
|
||||||
|
{
|
||||||
|
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLvl))
|
||||||
|
{
|
||||||
|
int nDamage = d6(nDice);
|
||||||
|
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
|
||||||
|
if(nDamage > 0)
|
||||||
|
{
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_FIRE), oTarget);
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void main()
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
object oTarget = PRCGetSpellTargetObject();
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
@@ -38,6 +83,5 @@ void main()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} */
|
||||||
}
|
|
||||||
@@ -26,10 +26,54 @@ Your frost helm fuses to your head and seems to spread downward, changing the ap
|
|||||||
|
|
||||||
As a standard action, you can produce a trilling sound that stuns opponents within 20 feet. You can target one creature plus one additional creature per point of essentia you invest in your frost helm. Targets must succeed on a Will save or be stunned for 1d4 rounds.
|
As a standard action, you can produce a trilling sound that stuns opponents within 20 feet. You can target one creature plus one additional creature per point of essentia you invest in your frost helm. Targets must succeed on a Will save or be stunned for 1d4 rounds.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 10:13:58
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_FROST_HELM);
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_COLD, nEssentia * 5));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_COLD_ENDURANCE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Crown bind (cold ray) <20> check regular or double Crown
|
||||||
|
int nBoundToCrown = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
|
||||||
|
nBoundToCrown = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToCrown)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Totem bind (stun) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_FROST_HELM);
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_FROST_HELM);
|
||||||
@@ -42,4 +86,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_FROST_HELM) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper, MELD_FROST_HELM) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_FROST_HELM) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper, MELD_FROST_HELM) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -32,7 +32,7 @@ You gain four claws that you can use as natural weapons, dealing 1d4 points of d
|
|||||||
//:: Updated on: 2025-12-02 15:04:22
|
//:: Updated on: 2025-12-02 15:04:22
|
||||||
//::
|
//::
|
||||||
//:: ItemPropertyTag() support added
|
//:: ItemPropertyTag() support added
|
||||||
//:: Double Chakra support added
|
//:: Double Chakra Bind support added
|
||||||
//::
|
//::
|
||||||
//::////////////////////////////////////////////////////////
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|||||||
@@ -22,7 +22,14 @@ The gloves merge with your hands, giving your hands a green cast. Your fingertip
|
|||||||
|
|
||||||
When gloves of the poisoned soul are bound to your hands chakra, the poison also deals Strength damage equal to the amount of Wisdom damage dealt (one save resists both effects).
|
When gloves of the poisoned soul are bound to your hands chakra, the poison also deals Strength damage equal to the amount of Wisdom damage dealt (one save resists both effects).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 00:17:52
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
#include "prc_inc_sp_tch"
|
#include "prc_inc_sp_tch"
|
||||||
|
|
||||||
@@ -51,7 +58,8 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_S), oTarget);
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_S), oTarget);
|
||||||
DelayCommand(60.0, ApplyAbilityDamage(oTarget, ABILITY_WISDOM, nDamage, DURATION_TYPE_TEMPORARY, TRUE, -1.0));
|
DelayCommand(60.0, ApplyAbilityDamage(oTarget, ABILITY_WISDOM, nDamage, DURATION_TYPE_TEMPORARY, TRUE, -1.0));
|
||||||
DelayCommand(60.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_S), oTarget));
|
DelayCommand(60.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_S), oTarget));
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_GLOVES_OF_THE_POISONED_SOUL) == CHAKRA_HANDS)
|
if (GetIsMeldBound(oMeldshaper, MELD_GLOVES_OF_THE_POISONED_SOUL) == CHAKRA_HANDS ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_GLOVES_OF_THE_POISONED_SOUL) == CHAKRA_DOUBLE_HANDS)
|
||||||
{
|
{
|
||||||
ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, nDamage, DURATION_TYPE_TEMPORARY, TRUE, -1.0);
|
ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, nDamage, DURATION_TYPE_TEMPORARY, TRUE, -1.0);
|
||||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DISENTIGRATION_SMP), oTarget);
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DISENTIGRATION_SMP), oTarget);
|
||||||
|
|||||||
@@ -26,10 +26,46 @@ The metallic scales of your gorgon mask extend down over your shoulders, lending
|
|||||||
|
|
||||||
You gain the ability to make a trample attack. As a full-round action, you can move up to twice your speed and literally run over any creature equal to your own size or smaller. Your trample attack deals 1d8 points of bludgeoning damage (or 1d6 points if you are Small) plus 1-1/2 times your Strength modifier. Opponents have a Reflex save for half damage.
|
You gain the ability to make a trample attack. As a full-round action, you can move up to twice your speed and literally run over any creature equal to your own size or smaller. Your trample attack deals 1d8 points of bludgeoning damage (or 1d6 points if you are Small) plus 1-1/2 times your Strength modifier. Opponents have a Reflex save for half damage.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 23:09:24
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 1 + nEssentia;
|
||||||
|
effect eLink = EffectSavingThrowIncrease(SAVING_THROW_FORT, nBonus);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Throat bind (petrifying breath) <20> check regular or double Throat
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToThroat) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (trample) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -40,4 +76,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -26,7 +26,14 @@ The heat of the blazing stone at your waist spreads through your body, lashing o
|
|||||||
|
|
||||||
Your natural weapons or unarmed strikes deal an additional 1d4 points of fire damage per point of essentia you invest in your heart of fire.
|
Your natural weapons or unarmed strikes deal an additional 1d4 points of fire damage per point of essentia you invest in your heart of fire.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 13:21:09
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -38,47 +45,10 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_HEART_OF_FIRE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_HEART_OF_FIRE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST)
|
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST || GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_DOUBLE_WAIST)
|
||||||
{
|
{
|
||||||
// Add eventhook to the armor
|
// 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);
|
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);
|
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);
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
}
|
}
|
||||||
@@ -26,10 +26,52 @@ There is no change to your own appearance or that of the circlet, but from your
|
|||||||
|
|
||||||
You gain the benefit of the Scent feature.
|
You gain the benefit of the Scent feature.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 09:53:28
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 2 + (nEssentia * 2);
|
||||||
|
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_HEAL, nBonus), EffectSkillIncrease(SKILL_SEARCH, nBonus));
|
||||||
|
|
||||||
|
// Totem bind (Spot/Listen bonuses) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SPOT, 4));
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_LISTEN, 4));
|
||||||
|
}
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_HUNTERS_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Crown bind (Track feat) <20> check regular or double Crown
|
||||||
|
int nBoundToCrown = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
|
||||||
|
nBoundToCrown = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToCrown)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_TRACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -45,4 +87,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_HUNTERS_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_HUNTERS_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_TRACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_TRACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -20,7 +20,14 @@ A dim blue glow emanates from your eyes. A brief flash, visible only to you, sca
|
|||||||
|
|
||||||
When your illusion veil is bound to your brow chakra, you can more easily perceive false reality. You can see invisibility, as the spell. You also gain an insight bonus on saves against illusion spells equal to the number of points of essentia invested in your illusion veil.
|
When your illusion veil is bound to your brow chakra, you can more easily perceive false reality. You can see invisibility, as the spell. You also gain an insight bonus on saves against illusion spells equal to the number of points of essentia invested in your illusion veil.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:26:09
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -29,7 +36,8 @@ void main()
|
|||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) eLink = EffectLinkEffects(eLink, EffectSeeInvisible());
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_CROWN)
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSeeInvisible());
|
||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ILLUSION_VEIL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ILLUSION_VEIL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|||||||
@@ -20,7 +20,14 @@ Your impulse boots merge with your feet, and extend their midnight-blue color in
|
|||||||
|
|
||||||
You gain the evasion ability.
|
You gain the evasion ability.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:33:07
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -34,5 +41,7 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_IMPULSE_BOOTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_IMPULSE_BOOTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_UNCANNY_DODGE1), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_UNCANNY_DODGE1), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_FEET) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
|
||||||
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_FEET || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_FEET)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,15 @@ Evil: You gain an enhancement bonus of +30 feet to your base land speed.
|
|||||||
Good: You gain an enhancement bonus of +30 feet to your base land speed.
|
Good: You gain an enhancement bonus of +30 feet to your base land speed.
|
||||||
Law: You gain immunity to daze, paralysis, and stun, as well as to any magical effect that would slow you.
|
Law: You gain immunity to daze, paralysis, and stun, as well as to any magical effect that would slow you.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:21:51
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
#include "prc_inc_combmove"
|
#include "prc_inc_combmove"
|
||||||
|
|
||||||
@@ -69,7 +77,7 @@ void main()
|
|||||||
if (GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_GOOD)
|
if (GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_GOOD)
|
||||||
eLink = EffectLinkEffects(eLink, EffectACIncrease(nEssentia));
|
eLink = EffectLinkEffects(eLink, EffectACIncrease(nEssentia));
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL)
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_SOUL)
|
||||||
{
|
{
|
||||||
if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_LAWFUL)
|
if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_LAWFUL)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,10 +8,76 @@ As a move action, you can charge the incarnate weapon with the stunning power of
|
|||||||
the target (as long as at least one component of its alignment is opposed to your devoted alignment) must succeed on a
|
the target (as long as at least one component of its alignment is opposed to your devoted alignment) must succeed on a
|
||||||
Fortitude saving throw or be stunned for one round.
|
Fortitude saving throw or be stunned for one round.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 19:24:41
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
int nEvent = GetRunningEvent();
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
object oItem;
|
||||||
|
int nMeldId = MELD_INCARNATE_WEAPON;
|
||||||
|
|
||||||
|
// We aren't being called from any event, instead from EvalPRCFeats
|
||||||
|
if(nEvent == FALSE)
|
||||||
|
{
|
||||||
|
// Check if bound to Arms chakra (regular or double)
|
||||||
|
int nBoundToArms = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
|
||||||
|
nBoundToArms = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToArms) return; // Exit if not bound to Arms
|
||||||
|
|
||||||
|
if(!TakeMoveAction(oMeldshaper)) return;
|
||||||
|
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper);
|
||||||
|
itemproperty ip = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1);
|
||||||
|
ip = TagItemProperty(ip, "moi_IncarnateWeaponCharge");
|
||||||
|
IPSafeAddItemProperty(oItem, ip, 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
AddEventScript(oItem, EVENT_ITEM_ONHIT, "moi_mld_incwpnft", TRUE, FALSE);
|
||||||
|
}
|
||||||
|
else if(nEvent == EVENT_ITEM_ONHIT)
|
||||||
|
{
|
||||||
|
oItem = GetSpellCastItem();
|
||||||
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
|
if(DEBUG) DoDebug("moi_mld_incwpnft: OnHit:\n"
|
||||||
|
+ "oMeldshaper = " + DebugObject2Str(oMeldshaper) + "\n"
|
||||||
|
+ "oItem = " + DebugObject2Str(oItem) + "\n"
|
||||||
|
+ "oTarget = " + DebugObject2Str(oTarget) + "\n"
|
||||||
|
);
|
||||||
|
// Validate bind state on hit as well
|
||||||
|
int nBoundToArms = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
|
||||||
|
nBoundToArms = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToArms) return;
|
||||||
|
|
||||||
|
if (GetAlignmentLawChaos(oMeldshaper) != GetAlignmentLawChaos(oTarget) || GetAlignmentGoodEvil(oMeldshaper) != GetAlignmentGoodEvil(oTarget))
|
||||||
|
{
|
||||||
|
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, GetMeldshaperDC(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_INCARNATE_WEAPON), SAVING_THROW_TYPE_NONE))
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, 6.0);
|
||||||
|
}
|
||||||
|
// Remove the temporary OnHitCastSpell: Unique by tag
|
||||||
|
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "moi_mld_incwpnft", TRUE, FALSE);
|
||||||
|
itemproperty ipCheck = GetFirstItemProperty(oItem);
|
||||||
|
while (GetIsItemPropertyValid(ipCheck))
|
||||||
|
{
|
||||||
|
if (GetItemPropertyTag(ipCheck) == "moi_IncarnateWeaponCharge")
|
||||||
|
RemoveItemProperty(oItem, ipCheck);
|
||||||
|
ipCheck = GetNextItemProperty(oItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
int nEvent = GetRunningEvent();
|
int nEvent = GetRunningEvent();
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
@@ -43,5 +109,5 @@ void main()
|
|||||||
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "moi_mld_incwpnft", TRUE, FALSE);
|
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "moi_mld_incwpnft", TRUE, FALSE);
|
||||||
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);
|
||||||
}// end if - Running OnHit event
|
}// end if - Running OnHit event
|
||||||
}
|
} */
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,14 @@ Bands of steel form around your forearms. When you hold your incarnate weapon, a
|
|||||||
|
|
||||||
As a move action, you can charge the incarnate weapon with the stunning power of pure conviction. If the next melee attack that you make is successful, the target (as long as at least one component of its alignment is opposed to your devoted alignment) must succeed on a Fortitude saving throw or be stunned for one round.
|
As a move action, you can charge the incarnate weapon with the stunning power of pure conviction. If the next melee attack that you make is successful, the target (as long as at least one component of its alignment is opposed to your devoted alignment) must succeed on a Fortitude saving throw or be stunned for one round.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:17:05
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -49,5 +56,7 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_INCARNATE_WEAPON), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_INCARNATE_WEAPON), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_INCARNATE_WEAPON_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
|
||||||
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_SOUL)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_INCARNATE_WEAPON_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
}
|
||||||
@@ -26,7 +26,14 @@ Neither your appearance nor that of your keeneye lenses changes at all, but the
|
|||||||
|
|
||||||
You see all things as they truly are, as if you were constantly under the effect of a true seeing spell.
|
You see all things as they truly are, as if you were constantly under the effect of a true seeing spell.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 20:09:46
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
|||||||
@@ -26,10 +26,47 @@ Your face becomes one with your krenshar mask, so all its muscles move to match
|
|||||||
|
|
||||||
You gain the ability to produce a loud screech (as a standard action) similar to that of a krenshar. In combination with the frightening aspect of the mask, this shriek causes one creature within 30 feet of you to become frightened for 1 round if it fails a Will save. This is a sonic, mind-affecting fear effect.
|
You gain the ability to produce a loud screech (as a standard action) similar to that of a krenshar. In combination with the frightening aspect of the mask, this shriek causes one creature within 30 feet of you to become frightened for 1 round if it fails a Will save. This is a sonic, mind-affecting fear effect.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 19:13:53
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 4 + (nEssentia * 2);
|
||||||
|
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_JUMP, nBonus), EffectSkillIncrease(SKILL_MOVE_SILENTLY, nBonus));
|
||||||
|
|
||||||
|
// Brow bind (Intimidate) <20> check regular or double Brow
|
||||||
|
int nBoundToBrow = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
|
||||||
|
nBoundToBrow = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToBrow)
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_INTIMIDATE, nBonus));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_KRENSHAR_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (screech) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_KRENSHAR_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
void main()
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -41,4 +78,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_KRENSHAR_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_KRENSHAR_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_KRENSHAR_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_KRENSHAR_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -9,10 +9,50 @@ you grow angry or enter combat, and a growling edge creeps into your voice.
|
|||||||
You gain the ability to produce a loud screech (as a standard action) similar to that of a krenshar. In combination with the frightening aspect of the mask,
|
You gain the ability to produce a loud screech (as a standard action) similar to that of a krenshar. In combination with the frightening aspect of the mask,
|
||||||
this shriek causes one creature within 30 feet of you to become frightened for 1 round if it fails a Will save. This is a sonic, mind-affecting fear effect.
|
this shriek causes one creature within 30 feet of you to become frightened for 1 round if it fails a Will save. This is a sonic, mind-affecting fear effect.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 19:13:24
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_KRENSHAR_MASK;
|
||||||
|
|
||||||
|
// Check if bound to Totem chakra (regular or double)
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToTotem) return; // Exit if not bound to Totem
|
||||||
|
|
||||||
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_KRENSHAR_MASK);
|
||||||
|
int nMeldshaperLvl = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_KRENSHAR_MASK);
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_KRENSHAR_MASK);
|
||||||
|
|
||||||
|
// Exclude the caster from the effects
|
||||||
|
if (oTarget != oMeldshaper)
|
||||||
|
{
|
||||||
|
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oMeldshaper))
|
||||||
|
{
|
||||||
|
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLvl))
|
||||||
|
{
|
||||||
|
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS))
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFrightened(), oTarget, 6.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
object oTarget = PRCGetSpellTargetObject();
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
@@ -31,6 +71,5 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFrightened(), oTarget, 6.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFrightened(), oTarget, 6.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} */
|
||||||
}
|
|
||||||
@@ -37,9 +37,9 @@ You can use your two claws as natural weapons that deal 1d6 points of damage plu
|
|||||||
//:: Updated by: Jaysyn
|
//:: Updated by: Jaysyn
|
||||||
//:: Updated on: 2025-12-02 15:04:22
|
//:: Updated on: 2025-12-02 15:04:22
|
||||||
//::
|
//::
|
||||||
//:: Hands / Weapon finesse added
|
//:: Hands / Weapon finesse fixed
|
||||||
//:: ItemPropertyTag() support added
|
//:: ItemPropertyTag() support added
|
||||||
//:: Double Chakra support added
|
//:: Double Chakra Bind support added
|
||||||
//::
|
//::
|
||||||
//::////////////////////////////////////////////////////////
|
//::////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
@@ -26,10 +26,58 @@ The lower part of your body below your lamia belt takes on the shape of a lion,
|
|||||||
|
|
||||||
You can make two claw attacks as natural secondary attacks after attacking with a weapon or another natural attack (such as a bite). These attacks take a <20>5 penalty from your full base attack bonus and deal 1d4 points of damage.
|
You can make two claw attacks as natural secondary attacks after attacking with a weapon or another natural attack (such as a bite). These attacks take a <20>5 penalty from your full base attack bonus and deal 1d4 points of damage.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on:2026-02-21 00:05:42
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 4 + (nEssentia * 2);
|
||||||
|
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_HIDE, nBonus), EffectSkillIncrease(SKILL_BLUFF, nBonus));
|
||||||
|
|
||||||
|
// Waist bind (speed + Spring Attack) <20> check regular or double Waist
|
||||||
|
int nBoundToWaist = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_WAIST)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_WAIST)) == nMeldId)
|
||||||
|
nBoundToWaist = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToWaist)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_SPRINGATTACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
SetLocalInt(oMeldshaper, "LamiaBeltSpeed", TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMIA_BELT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (claws) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
string sResRef = "prc_claw_1d6l_";
|
||||||
|
int nSize = PRCGetCreatureSize(oMeldshaper);
|
||||||
|
sResRef += GetAffixForSize(nSize);
|
||||||
|
AddNaturalSecondaryWeapon(oMeldshaper, sResRef, 2);
|
||||||
|
SetLocalString(oMeldshaper, "IncarnumSecondaryAttackL", sResRef);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -52,4 +100,4 @@ void main()
|
|||||||
AddNaturalSecondaryWeapon(oMeldshaper, sResRef, 2);
|
AddNaturalSecondaryWeapon(oMeldshaper, sResRef, 2);
|
||||||
SetLocalString(oMeldshaper, "IncarnumSecondaryAttackL", sResRef);
|
SetLocalString(oMeldshaper, "IncarnumSecondaryAttackL", sResRef);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -26,10 +26,41 @@ Additional embroidered designs, formed not of thread but of incarnum, appear dow
|
|||||||
|
|
||||||
You can bestow healing at will on any given creature.
|
You can bestow healing at will on any given creature.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 09:56:03
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS_HEAL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Arms bind (30-foot range heal) <20> check regular or double Arms
|
||||||
|
int nBoundToArms = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
|
||||||
|
nBoundToArms = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToArms)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -41,4 +72,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS_HEAL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS_HEAL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -28,7 +28,14 @@ Additional embroidered designs, formed not of thread but of incarnum, appear dow
|
|||||||
|
|
||||||
You can bestow healing at will on any given creature.
|
You can bestow healing at will on any given creature.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:48:43
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -39,7 +46,7 @@ void main()
|
|||||||
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_LIFEBOND_VESTMENTS);
|
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_LIFEBOND_VESTMENTS);
|
||||||
int nHeal = nMeldshaperLevel + (nEssentia * 5);
|
int nHeal = nMeldshaperLevel + (nEssentia * 5);
|
||||||
|
|
||||||
if (!GetLocalInt(oMeldshaper, "LifebondVestmentsTimer") || GetIsMeldBound(oMeldshaper, MELD_LIFEBOND_VESTMENTS) == CHAKRA_HEART)
|
if (!GetLocalInt(oMeldshaper, "LifebondVestmentsTimer") || GetIsMeldBound(oMeldshaper, MELD_LIFEBOND_VESTMENTS) == CHAKRA_HEART || GetIsMeldBound(oMeldshaper, MELD_LIFEBOND_VESTMENTS) == CHAKRA_DOUBLE_HEART)
|
||||||
{
|
{
|
||||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nHeal), oTarget);
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nHeal), oTarget);
|
||||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nHeal/2, DAMAGE_TYPE_POSITIVE), oTarget);
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nHeal/2, DAMAGE_TYPE_POSITIVE), oTarget);
|
||||||
|
|||||||
@@ -20,10 +20,40 @@ Your lightning gauntlets settle firmly around your hands. When you grip a weapon
|
|||||||
|
|
||||||
You can add the electricity damage dealt by lightning gauntlets to one attack per round made with a handheld weapon.
|
You can add the electricity damage dealt by lightning gauntlets to one attack per round made with a handheld weapon.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 00:25:27
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS_ZAP), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Hands bind (add electricity damage to weapon attacks) <20> check regular or double Hands
|
||||||
|
int nBoundToHands = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HANDS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HANDS)) == nMeldId)
|
||||||
|
nBoundToHands = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToHands)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS_HANDS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -35,4 +65,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS_ZAP), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS_ZAP), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS_HANDS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS_HANDS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -32,10 +32,41 @@ The golden-brown fur around your shoulders extends upward into an impressive man
|
|||||||
|
|
||||||
You can breathe a 15-foot cone of fire as a standard action. Creatures within the area take 1d4 points of fire damage, plus 1d4 points of fire damage per point of invested essentia (Reflex half).
|
You can breathe a 15-foot cone of fire as a standard action. Creatures within the area take 1d4 points of fire damage, plus 1d4 points of fire damage per point of invested essentia (Reflex half).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 21:30:51
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added in moi_events
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectACIncrease(2, AC_DEFLECTION_BONUS);
|
||||||
|
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, nEssentia));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusAlignmentEffect(eLink, ALIGNMENT_ALL, ALIGNMENT_EVIL)), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMMASU_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (fire cone) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMMASU_MANTLE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -47,4 +78,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMMASU_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMMASU_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMMASU_MANTLE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMMASU_MANTLE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -26,10 +26,55 @@ Your hands as well as your feet gain the heavy claws of a bulette, including one
|
|||||||
|
|
||||||
You can use the claws on your hands as natural weapons that deal 1d6 points of damage. You cannot use a shield while these claws are in place. For every point of essentia you invest in your landshark boots, you gain a +1 enhancement bonus on attack rolls and damage rolls with these claws. If you achieve a Jump check result good enough to jump over an opponent, you can attack that opponent with all four claws as a standard action. You cannot make any other attacks in the same round, whether from natural weapons or manufactured weapons.
|
You can use the claws on your hands as natural weapons that deal 1d6 points of damage. You cannot use a shield while these claws are in place. For every point of essentia you invest in your landshark boots, you gain a +1 enhancement bonus on attack rolls and damage rolls with these claws. If you achieve a Jump check result good enough to jump over an opponent, you can attack that opponent with all four claws as a standard action. You cannot make any other attacks in the same round, whether from natural weapons or manufactured weapons.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 09:08:54
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 4 + (nEssentia * 2);
|
||||||
|
effect eLink = EffectSkillIncrease(SKILL_JUMP, nBonus);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LANDSHARK_BOOTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Feet bind (sense closest creature) <20> check regular or double Feet
|
||||||
|
int nBoundToFeet = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_FEET)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_FEET)) == nMeldId)
|
||||||
|
nBoundToFeet = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToFeet)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LANDSHARK_BOOTS_FEET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (claws) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LANDSHARK_BOOTS_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
|
||||||
|
string sResRef = "prc_claw_1d6m_";
|
||||||
|
int nSize = PRCGetCreatureSize(oMeldshaper);
|
||||||
|
sResRef += GetAffixForSize(nSize);
|
||||||
|
AddNaturalPrimaryWeapon(oMeldshaper, sResRef, 2);
|
||||||
|
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackL", sResRef);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -49,4 +94,4 @@ void main()
|
|||||||
AddNaturalPrimaryWeapon(oMeldshaper, sResRef, 2);
|
AddNaturalPrimaryWeapon(oMeldshaper, sResRef, 2);
|
||||||
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackL", sResRef);
|
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackL", sResRef);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -26,10 +26,62 @@ Rather than actual gauntlets, this soulmeld transforms your hands into hard blue
|
|||||||
|
|
||||||
You gain a morale bonus on unarmed strike damage equal to the morale bonus on Strength checks granted by the mauling gauntlets. You also gain the benefit of the Improved Unarmed Strike feat.
|
You gain a morale bonus on unarmed strike damage equal to the morale bonus on Strength checks granted by the mauling gauntlets. You also gain the benefit of the Improved Unarmed Strike feat.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 14:57:34
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAULING_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Hands bind (IUS) <20> check regular or double Hands
|
||||||
|
int nBoundToHands = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HANDS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HANDS)) == nMeldId)
|
||||||
|
nBoundToHands = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToHands)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_IMPROVED_UNARMED_STRIKE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Arms bind (keen) <20> check regular or double Arms
|
||||||
|
int nBoundToArms = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
|
||||||
|
nBoundToArms = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToArms)
|
||||||
|
{
|
||||||
|
// Apply keen to equipped melee weapons with a tag for future use
|
||||||
|
object oWeapR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper);
|
||||||
|
if (GetIsObjectValid(oWeapR) && IPGetIsMeleeWeapon(oWeapR))
|
||||||
|
{
|
||||||
|
itemproperty ipKeen = ItemPropertyKeen();
|
||||||
|
ipKeen = TagItemProperty(ipKeen, "moi_MaulingGauntletsKeen");
|
||||||
|
IPSafeAddItemProperty(oWeapR, ipKeen, 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
|
||||||
|
}
|
||||||
|
object oWeapL = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oMeldshaper);
|
||||||
|
if (GetIsObjectValid(oWeapL) && IPGetIsMeleeWeapon(oWeapL))
|
||||||
|
{
|
||||||
|
itemproperty ipKeen = ItemPropertyKeen();
|
||||||
|
ipKeen = TagItemProperty(ipKeen, "moi_MaulingGauntletsKeen");
|
||||||
|
IPSafeAddItemProperty(oWeapL, ipKeen, 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#include "moi_inc_moifunc"
|
/* void main()
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -39,4 +91,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAULING_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAULING_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_IMPROVED_UNARMED_STRIKE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_IMPROVED_UNARMED_STRIKE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -20,10 +20,39 @@ Instead of spectacles perched on your nose, your mage
|
|||||||
|
|
||||||
You can cast read magic at will.
|
You can cast read magic at will.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 13:11:35
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 4 + (nEssentia * 2);
|
||||||
|
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_SPELLCRAFT, nBonus), EffectSkillIncrease(SKILL_USE_MAGIC_DEVICE, nBonus));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAGES_SPECTACLES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Brow bind (read magic at will) <20> check regular or double Brow
|
||||||
|
int nBoundToBrow = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
|
||||||
|
nBoundToBrow = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToBrow)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAGES_SPECTACLES_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -33,4 +62,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAGES_SPECTACLES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAGES_SPECTACLES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAGES_SPECTACLES_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAGES_SPECTACLES_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -7,13 +7,38 @@ Instead of spectacles perched on your nose, your mage
|
|||||||
|
|
||||||
You can cast read magic at will.
|
You can cast read magic at will.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 14:54:47
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_MAGES_SPECTACLES;
|
||||||
|
|
||||||
|
// Check if bound to Brow chakra (regular or double)
|
||||||
|
int nBoundToBrow = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
|
||||||
|
nBoundToBrow = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToBrow) return; // Exit if not bound to Brow
|
||||||
|
|
||||||
|
ActionDoCommand(SetLocalInt(oMeldshaper, "SpellIsSLA", TRUE));
|
||||||
|
ActionCastSpell(SPELL_READ_MAGIC, GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_MAGES_SPECTACLES), 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, FALSE, OBJECT_INVALID, FALSE);
|
||||||
|
ActionDoCommand(DeleteLocalInt(oMeldshaper, "SpellIsSLA"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
ActionDoCommand(SetLocalInt(oMeldshaper, "SpellIsSLA", TRUE));
|
ActionDoCommand(SetLocalInt(oMeldshaper, "SpellIsSLA", TRUE));
|
||||||
ActionCastSpell(SPELL_READ_MAGIC, GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_MAGES_SPECTACLES), 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, FALSE, OBJECT_INVALID, FALSE);
|
ActionCastSpell(SPELL_READ_MAGIC, GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_MAGES_SPECTACLES), 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, FALSE, OBJECT_INVALID, FALSE);
|
||||||
ActionDoCommand(DeleteLocalInt(oMeldshaper, "SpellIsSLA"));
|
ActionDoCommand(DeleteLocalInt(oMeldshaper, "SpellIsSLA"));
|
||||||
}
|
} */
|
||||||
@@ -26,10 +26,52 @@ A long, thick tail emerges from the back of your manticore belt, writhing and la
|
|||||||
|
|
||||||
As a standard action, you can snap your tail to loose a volley of spikes equal to the number of points of essentia you invest in your manticore belt. Make a ranged attack roll for each spike using your full base attack bonus. A successful hit deals 1d6 points of damage plus one-half your Strength modifier.
|
As a standard action, you can snap your tail to loose a volley of spikes equal to the number of points of essentia you invest in your manticore belt. Make a ranged attack roll for each spike using your full base attack bonus. A successful hit deals 1d6 points of damage plus one-half your Strength modifier.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 12:21:10
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 2 + (nEssentia * 2);
|
||||||
|
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_SPOT, nBonus), EffectSkillIncrease(SKILL_JUMP, nBonus));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTICORE_BELT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Waist bind (Spring Attack) <20> check regular or double Waist
|
||||||
|
int nBoundToWaist = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_WAIST)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_WAIST)) == nMeldId)
|
||||||
|
nBoundToWaist = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToWaist)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_SPRINGATTACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Totem bind (spike volley) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTICORE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -40,4 +82,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTICORE_BELT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTICORE_BELT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_WAIST) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_SPRINGATTACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_WAIST) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_SPRINGATTACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTICORE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTICORE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -7,11 +7,44 @@ A long, thick tail emerges from the back of your manticore belt, writhing and la
|
|||||||
|
|
||||||
As a standard action, you can snap your tail to loose a volley of spikes equal to the number of points of essentia you invest in your manticore belt. Make a ranged attack roll for each spike using your full base attack bonus. A successful hit deals 1d6 points of damage plus one-half your Strength modifier.
|
As a standard action, you can snap your tail to loose a volley of spikes equal to the number of points of essentia you invest in your manticore belt. Make a ranged attack roll for each spike using your full base attack bonus. A successful hit deals 1d6 points of damage plus one-half your Strength modifier.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 14:50:10
|
||||||
|
//::
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
#include "prc_inc_combat"
|
#include "prc_inc_combat"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_MANTICORE_BELT;
|
||||||
|
|
||||||
|
// Check if bound to Totem chakra (regular or double)
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToTotem) return; // Exit if not bound to Totem
|
||||||
|
|
||||||
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
|
int nStr = GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper);
|
||||||
|
int nBonus = GetAbilityModifier(ABILITY_DEXTERITY, oMeldshaper) - nStr; // It's a ranged attack
|
||||||
|
int nTotal = GetEssentiaInvested(oMeldshaper, MELD_MANTICORE_BELT);
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < nTotal; i++)
|
||||||
|
{
|
||||||
|
int nAttack = GetAttackRoll(oTarget, oMeldshaper, OBJECT_INVALID, 0, nBonus);
|
||||||
|
if (nAttack)
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage((d6() + nStr / 2) * nAttack, DAMAGE_TYPE_PIERCING), oTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
object oTarget = PRCGetSpellTargetObject();
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
@@ -25,4 +58,4 @@ void main()
|
|||||||
if (nAttack)
|
if (nAttack)
|
||||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage((d6()+nStr/2)*nAttack, DAMAGE_TYPE_PIERCING), oTarget);
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage((d6()+nStr/2)*nAttack, DAMAGE_TYPE_PIERCING), oTarget);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -20,10 +20,42 @@ Your mantle of flame burns particularly brightly around your shoulders, forming
|
|||||||
|
|
||||||
As a standard action, you can briefly expand the mantle of flame to encompass all adjacent squares. Any creatures in those squares take damage as if they had attacked you with a handheld weapon (Reflex half).
|
As a standard action, you can briefly expand the mantle of flame to encompass all adjacent squares. Any creatures in those squares take damage as if they had attacked you with a handheld weapon (Reflex half).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 14:48:04
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTLE_OF_FLAME), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
// Add eventhook to the armor
|
||||||
|
object oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oMeldshaper);
|
||||||
|
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
AddEventScript(oItem, EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
|
||||||
|
|
||||||
|
// Shoulders bind (fire burst) <20> check regular or double Shoulders
|
||||||
|
int nBoundToShoulders = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
|
||||||
|
nBoundToShoulders = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToShoulders)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTLE_OF_FLAME_SHOULDERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -38,4 +70,4 @@ void main()
|
|||||||
AddEventScript(oItem, EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
|
AddEventScript(oItem, EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SHOULDERS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTLE_OF_FLAME_SHOULDERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SHOULDERS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTLE_OF_FLAME_SHOULDERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -20,9 +20,70 @@ Your mantle of flame burns particularly brightly around your shoulders, forming
|
|||||||
|
|
||||||
As a standard action, you can briefly expand the mantle of flame to encompass all adjacent squares. Any creatures in those squares take damage as if they had attacked you with a handheld weapon (Reflex half).
|
As a standard action, you can briefly expand the mantle of flame to encompass all adjacent squares. Any creatures in those squares take damage as if they had attacked you with a handheld weapon (Reflex half).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 14:32:51
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_MANTLE_OF_FLAME;
|
||||||
|
|
||||||
|
// Check if bound to Shoulders chakra (regular or double)
|
||||||
|
int nBoundToShoulders = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
|
||||||
|
nBoundToShoulders = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToShoulders) return; // Exit if not bound to Shoulders
|
||||||
|
|
||||||
|
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_MANTLE_OF_FLAME);
|
||||||
|
int nDice = GetEssentiaInvested(oMeldshaper, MELD_MANTLE_OF_FLAME) + 1;
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_MANTLE_OF_FLAME);
|
||||||
|
location lTarget = PRCGetSpellTargetLocation();
|
||||||
|
int nDamage;
|
||||||
|
float fDelay;
|
||||||
|
effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL);
|
||||||
|
effect eDam;
|
||||||
|
|
||||||
|
//Apply the fireball explosion at the location captured above.
|
||||||
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
|
||||||
|
//Declare the spell shape, size and the location. Capture the first target object in the shape.
|
||||||
|
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||||
|
//Cycle through the targets within the spell shape until an invalid object is captured.
|
||||||
|
while (GetIsObjectValid(oTarget))
|
||||||
|
{
|
||||||
|
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF) && oMeldshaper != oTarget)
|
||||||
|
{
|
||||||
|
//Fire cast spell at event for the specified target
|
||||||
|
SignalEvent(oTarget, EventSpellCastAt(oMeldshaper, MELD_MANTLE_OF_FLAME));
|
||||||
|
//Get the distance between the explosion and the target to calculate delay
|
||||||
|
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
|
||||||
|
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLevel, fDelay))
|
||||||
|
{
|
||||||
|
nDamage = d6(nDice);
|
||||||
|
//Adjust damage based on Reflex Save, Evasion and Improved Evasion
|
||||||
|
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
|
||||||
|
if(nDamage > 0)
|
||||||
|
{
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_FIRE), oTarget);
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Select the next target within the spell shape.
|
||||||
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
@@ -63,4 +124,4 @@ void main()
|
|||||||
//Select the next target within the spell shape.
|
//Select the next target within the spell shape.
|
||||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|||||||
@@ -21,11 +21,69 @@ Chakra Bind (Arms)
|
|||||||
While necrocarnum touch is bound to your arms chakra, you can fire a ray of pure necrocarnum as a standard action. This ray requires a ranged touch attack to hit and has a range of
|
While necrocarnum touch is bound to your arms chakra, you can fire a ray of pure necrocarnum as a standard action. This ray requires a ranged touch attack to hit and has a range of
|
||||||
30 feet. If it strikes a living creature, it deals 1d8 points of damage for every point of essentia that you invest in the soulmeld (Fortitude half).
|
30 feet. If it strikes a living creature, it deals 1d8 points of damage for every point of essentia that you invest in the soulmeld (Fortitude half).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 14:32:51
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
#include "prc_inc_sp_tch"
|
#include "prc_inc_sp_tch"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_NECROCARNUM_TOUCH;
|
||||||
|
|
||||||
|
// Check if bound to Arms chakra (regular or double)
|
||||||
|
int nBoundToArms = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
|
||||||
|
nBoundToArms = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToArms) return; // Exit if not bound to Arms
|
||||||
|
|
||||||
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_NECROCARNUM_TOUCH);
|
||||||
|
int nClass = GetMeldShapedClass(oMeldshaper, MELD_NECROCARNUM_TOUCH);
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_NECROCARNUM_TOUCH);
|
||||||
|
int nAttack;
|
||||||
|
int nRanged = FALSE;
|
||||||
|
if (GetSpellId() == 18955) // MELD_NECROCARNUM_TOUCH_ARMS
|
||||||
|
{
|
||||||
|
nRanged = TRUE;
|
||||||
|
nAttack = PRCDoRangedTouchAttack(oTarget);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
nAttack = PRCDoMeleeTouchAttack(oTarget);
|
||||||
|
|
||||||
|
if (nAttack > 0)
|
||||||
|
{
|
||||||
|
// Only living creatures, and PvP check.
|
||||||
|
if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oMeldshaper) && PRCGetIsAliveCreature(oTarget))
|
||||||
|
{
|
||||||
|
int nDamage = d8(nEssentia);
|
||||||
|
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE))
|
||||||
|
{
|
||||||
|
nDamage /= 2;
|
||||||
|
|
||||||
|
if (GetHasMettle(oTarget, SAVING_THROW_FORT)) // Ignores partial effects
|
||||||
|
nDamage = 0;
|
||||||
|
}
|
||||||
|
if(nDamage)
|
||||||
|
{
|
||||||
|
ApplyTouchAttackDamage(oMeldshaper, oTarget, nAttack, nDamage, DAMAGE_TYPE_NEGATIVE);
|
||||||
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY), oTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (nRanged)
|
||||||
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_EVIL, OBJECT_SELF, BODY_NODE_HAND), oTarget, 1.7, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
object oTarget = PRCGetSpellTargetObject();
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
@@ -64,4 +122,4 @@ void main()
|
|||||||
}
|
}
|
||||||
if (nRanged)
|
if (nRanged)
|
||||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_EVIL, OBJECT_SELF, BODY_NODE_HAND), oTarget, 1.7, FALSE);
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_EVIL, OBJECT_SELF, BODY_NODE_HAND), oTarget, 1.7, FALSE);
|
||||||
}
|
} */
|
||||||
@@ -22,10 +22,42 @@ When you have necrocarnum vestments bound to your heart chakra, you are immune t
|
|||||||
Chakra Bind (Waist)
|
Chakra Bind (Waist)
|
||||||
When you have necrocarnum vestments bound to your waist chakra, any living creature adjacent to you at the end of your turn takes 1d6 points of cold damage (Fortitude negates).
|
When you have necrocarnum vestments bound to your waist chakra, any living creature adjacent to you at the end of your turn takes 1d6 points of cold damage (Fortitude negates).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 13:54:11
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_NECROCARNUM_VESTMENTS);
|
||||||
|
effect eLink = EffectDamageResistance(DAMAGE_TYPE_COLD, 5);
|
||||||
|
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectTemporaryHitpoints(nEssentia * 3));
|
||||||
|
|
||||||
|
// Heart bind (stun/death immunity) <20> check regular or double Heart
|
||||||
|
int nBoundToHeart = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HEART)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HEART)) == nMeldId)
|
||||||
|
nBoundToHeart = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToHeart)
|
||||||
|
{
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_STUN));
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_DEATH));
|
||||||
|
}
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_VESTMENTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_NECROCARNUM_VESTMENTS);
|
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_NECROCARNUM_VESTMENTS);
|
||||||
@@ -41,4 +73,4 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_VESTMENTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_VESTMENTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
Necrocarnum Circlet
|
Necrocarnum Circlet
|
||||||
|
|
||||||
Chakra Bind (Crown)
|
Chakra Bind (Crown)
|
||||||
@@ -6,12 +6,118 @@ Chakra Bind (Crown)
|
|||||||
A matching coil of necrocarnum forms around the head of a corpse. Filled with the dark power of necrocarnum, the corpse shambles to its feet, its flesh and mind overtaken by the curse of undeath.
|
A matching coil of necrocarnum forms around the head of a corpse. Filled with the dark power of necrocarnum, the corpse shambles to its feet, its flesh and mind overtaken by the curse of undeath.
|
||||||
|
|
||||||
When you shape this soulmeld and bind it to your crown chakra, you can animate an undead creature. This requires a full-round action and provokes attacks of opportunity; in addition, you take
|
When you shape this soulmeld and bind it to your crown chakra, you can animate an undead creature. This requires a full-round action and provokes attacks of opportunity; in addition, you take
|
||||||
damage equal to the necrocarnum zombie<EFBFBD>s Hit Dice, which may not be healed as long as the zombie remains animated. You may only have one zombie.
|
damage equal to the necrocarnum zombie's Hit Dice, which may not be healed as long as the zombie remains animated. You may only have one zombie.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 14:03:39
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void NecroCircletHB(object oMeldshaper, object oCreature)
|
void NecroCircletHB(object oMeldshaper, object oCreature)
|
||||||
|
{
|
||||||
|
int nCurHP = GetCurrentHitPoints(oMeldshaper);
|
||||||
|
int nMaxHP = GetMaxHitPoints(oMeldshaper);
|
||||||
|
int nPen = GetLocalInt(oMeldshaper, "NecrocarnumCircletPen");
|
||||||
|
|
||||||
|
// Does the PC have too many hit points?
|
||||||
|
if (nCurHP > (nMaxHP - nPen))
|
||||||
|
{
|
||||||
|
int nHP = nMaxHP - nPen;
|
||||||
|
if (!GetIsResting(oMeldshaper)) SetCurrentHitPoints(oMeldshaper, nHP);
|
||||||
|
}
|
||||||
|
// Keep it going or...
|
||||||
|
int nBoundToCrown = FALSE;
|
||||||
|
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_CIRCLET) == CHAKRA_CROWN ||
|
||||||
|
GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_CIRCLET) == CHAKRA_DOUBLE_CROWN)
|
||||||
|
nBoundToCrown = TRUE;
|
||||||
|
|
||||||
|
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper) && nBoundToCrown)
|
||||||
|
DelayCommand(0.25, NecroCircletHB(oMeldshaper, oCreature));
|
||||||
|
else
|
||||||
|
DestroyObject(oCreature);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_NECROCARNUM_CIRCLET;
|
||||||
|
|
||||||
|
// Check if bound to Crown chakra (regular or double)
|
||||||
|
int nBoundToCrown = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
|
||||||
|
nBoundToCrown = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToCrown) return; // Exit if not bound to Crown
|
||||||
|
|
||||||
|
int nClass = GetMeldShapedClass(oMeldshaper, MELD_NECROCARNUM_CIRCLET);
|
||||||
|
int nLevel = GetMeldshaperLevel(oMeldshaper, nClass, MELD_NECROCARNUM_CIRCLET);
|
||||||
|
int nNecro = GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper);
|
||||||
|
|
||||||
|
int i, nCount;
|
||||||
|
for(i = 1; i <= 10; i++)
|
||||||
|
{
|
||||||
|
object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, OBJECT_SELF, i);
|
||||||
|
if (GetResRef(oHench) == "prc_sum_dbl" ||
|
||||||
|
GetResRef(oHench) == "prc_sum_dk" ||
|
||||||
|
GetResRef(oHench) == "prc_sum_vamp2" ||
|
||||||
|
GetResRef(oHench) == "prc_sum_bonet" ||
|
||||||
|
GetResRef(oHench) == "prc_sum_wight" ||
|
||||||
|
GetResRef(oHench) == "prc_sum_vamp1" ||
|
||||||
|
GetResRef(oHench) == "prc_sum_grav" ||
|
||||||
|
GetResRef(oHench) == "prc_sum_sklch" ||
|
||||||
|
GetResRef(oHench) == "prc_sum_zlord" ||
|
||||||
|
GetResRef(oHench) == "prc_sum_mohrg" ||
|
||||||
|
GetResRef(oHench) == "prc_tn_fthug")
|
||||||
|
{
|
||||||
|
nCount += 1;
|
||||||
|
if (nCount == 1 && nNecro >= 13) // Do nothing
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("You already the maximum number of necrocarnum zombies", oMeldshaper, FALSE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string sSummon;
|
||||||
|
effect eSummonB = EffectVisualEffect(VFX_FNF_LOS_EVIL_30);
|
||||||
|
object oCreature;
|
||||||
|
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
|
||||||
|
|
||||||
|
if (nLevel > 37) sSummon = "prc_sum_dbl";
|
||||||
|
else if (nLevel > 34) sSummon = "prc_sum_dk";
|
||||||
|
else if (nLevel > 31) sSummon = "prc_sum_vamp2";
|
||||||
|
else if (nLevel > 28) sSummon = "prc_sum_bonet";
|
||||||
|
else if (nLevel > 25) sSummon = "prc_sum_wight";
|
||||||
|
else if (nLevel > 22) sSummon = "prc_sum_vamp1";
|
||||||
|
else if (nLevel > 19) sSummon = "prc_sum_grav";
|
||||||
|
else if (nLevel > 16) sSummon = "prc_tn_fthug";
|
||||||
|
else if (nLevel > 13) sSummon = "prc_sum_sklch";
|
||||||
|
else if (nLevel > 10) sSummon = "prc_sum_zlord";
|
||||||
|
else sSummon = "prc_sum_mohrg";
|
||||||
|
|
||||||
|
oCreature = CreateObject(OBJECT_TYPE_CREATURE, sSummon, GetSpellTargetLocation());
|
||||||
|
int nMaxHenchmen = GetMaxHenchmen();
|
||||||
|
SetMaxHenchmen(99);
|
||||||
|
AddHenchman(oMeldshaper, oCreature);
|
||||||
|
int nHP = GetHitDice(oCreature);
|
||||||
|
if (nNecro >= 6) nHP /= 2;
|
||||||
|
SetLocalInt(oMeldshaper, "NecrocarnumCircletPen", nHP + GetLocalInt(oMeldshaper, "NecrocarnumCircletPen"));
|
||||||
|
NecroCircletHB(oMeldshaper, oCreature);
|
||||||
|
SetMaxHenchmen(nMaxHenchmen);
|
||||||
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void NecroCircletHB(object oMeldshaper, object oCreature)
|
||||||
{
|
{
|
||||||
int nCurHP = GetCurrentHitPoints(oMeldshaper);
|
int nCurHP = GetCurrentHitPoints(oMeldshaper);
|
||||||
int nMaxHP = GetMaxHitPoints(oMeldshaper);
|
int nMaxHP = GetMaxHitPoints(oMeldshaper);
|
||||||
@@ -90,4 +196,4 @@ void main()
|
|||||||
NecroCircletHB(oMeldshaper, oCreature);
|
NecroCircletHB(oMeldshaper, oCreature);
|
||||||
SetMaxHenchmen(nMaxHenchmen);
|
SetMaxHenchmen(nMaxHenchmen);
|
||||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation());
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation());
|
||||||
}
|
} */
|
||||||
@@ -21,34 +21,20 @@ A matching coil of necrocarnum forms around the head of a corpse. Filled with th
|
|||||||
When you shape this soulmeld and bind it to your crown chakra, you can animate an undead creature. This requires a full-round action and provokes attacks of opportunity; in addition, you take
|
When you shape this soulmeld and bind it to your crown chakra, you can animate an undead creature. This requires a full-round action and provokes attacks of opportunity; in addition, you take
|
||||||
damage equal to the necrocarnum zombie<69>s Hit Dice, which may not be healed as long as the zombie remains animated. You may only have one zombie.
|
damage equal to the necrocarnum zombie<69>s Hit Dice, which may not be healed as long as the zombie remains animated. You may only have one zombie.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 13:54:11
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
#include "prc_inc_s_det"
|
|
||||||
void NecroDetect(object oMeldshaper, int bFirstRun = FALSE);
|
void NecroDetect(object oMeldshaper);
|
||||||
void CircTurnRes(object oMeldshaper);
|
void CircTurnRes(object oMeldshaper);
|
||||||
|
|
||||||
void NecroDetect(object oMeldshaper, int bFirstRun = FALSE)
|
void NecroDetect(object oMeldshaper)
|
||||||
{
|
|
||||||
if (!GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (bFirstRun)
|
|
||||||
{
|
|
||||||
// First activation: show detection cone VFX briefly
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_DETECT), oMeldshaper, 3.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Always apply ioun stone VFX for continuous effect
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IOUN_STONE_RED), oMeldshaper, 6.0);
|
|
||||||
|
|
||||||
// Run the actual detection logic
|
|
||||||
DetectRaceAura(0, RACIAL_TYPE_UNDEAD, GetLocation(oMeldshaper), VFX_BEAM_ODD, FeetToMeters(60.0));
|
|
||||||
|
|
||||||
// Schedule next run with bFirstRun = FALSE
|
|
||||||
DelayCommand(6.0, NecroDetect(oMeldshaper, FALSE));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* void NecroDetect(object oMeldshaper)
|
|
||||||
{
|
{
|
||||||
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper))
|
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper))
|
||||||
{
|
{
|
||||||
@@ -56,7 +42,7 @@ void NecroDetect(object oMeldshaper, int bFirstRun = FALSE)
|
|||||||
DelayCommand(6.0, NecroDetect(oMeldshaper));
|
DelayCommand(6.0, NecroDetect(oMeldshaper));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
void CircTurnRes(object oMeldshaper)
|
void CircTurnRes(object oMeldshaper)
|
||||||
{
|
{
|
||||||
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper))
|
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper))
|
||||||
@@ -81,7 +67,31 @@ void CircTurnRes(object oMeldshaper)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_GR_AURA_UNDEAD);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
|
||||||
|
if (nEssentia) CircTurnRes(oMeldshaper);
|
||||||
|
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Crown bind (zombie animation) <20> check regular or double Crown
|
||||||
|
int nBoundToCrown = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
|
||||||
|
nBoundToCrown = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToCrown)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECRO_CIRCLET_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -94,4 +104,4 @@ void main()
|
|||||||
|
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECRO_CIRCLET_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECRO_CIRCLET_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -19,10 +19,38 @@ Chakra Bind (Throat)
|
|||||||
|
|
||||||
As long as the necrocarnum mantle is bound to your throat chakra, you gain immunity to poison.
|
As long as the necrocarnum mantle is bound to your throat chakra, you gain immunity to poison.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 21:08:02
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
effect eLink = EffectLinkEffects(EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE), EffectImmunity(IMMUNITY_TYPE_DISEASE));
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, nEssentia, SAVING_THROW_TYPE_MIND_SPELLS));
|
||||||
|
|
||||||
|
// Throat bind (poison immunity) <20> check regular or double Throat
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToThroat) eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_POISON));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -32,4 +60,4 @@ void main()
|
|||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_POISON));
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_POISON));
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -10,19 +10,30 @@ Saving Throw: See text
|
|||||||
|
|
||||||
A deadening field of necrocarnum radiates from you, filling the air around you with faint, shadowy tendrils.
|
A deadening field of necrocarnum radiates from you, filling the air around you with faint, shadowy tendrils.
|
||||||
|
|
||||||
You gain a +1 profane bonus on attack rolls and damage rolls any time a living creature takes damage while adjacent to you. This bonus lasts for 1 round. If a living creature dies while adjacent to you, the bonus instead lasts for a number of rounds equal to the creature<72>s Hit Dice.
|
You gain a +1 profane bonus on attack rolls and damage rolls any time a living creature takes damage while adjacent to you. This bonus lasts for 1 round. If a living creature dies while adjacent to you, the
|
||||||
|
bonus instead lasts for a number of rounds equal to the creature<72>s Hit Dice.
|
||||||
|
|
||||||
Essentia: If you invest essentia in the necrocarnum shroud, the area encompassed by the life-draining field expands. Any living creature who takes damage (or dies) within 5 feet plus 5 feet per point of essentia invested triggers the bonus.
|
Essentia: If you invest essentia in the necrocarnum shroud, the area encompassed by the life-draining field expands. Any living creature who takes damage (or dies) within 5 feet plus 5 feet per point of
|
||||||
|
essentia invested triggers the bonus.
|
||||||
|
|
||||||
Chakra Bind (Soul)
|
Chakra Bind (Soul)
|
||||||
|
|
||||||
While you have necrocarnum shroud bound to your soul chakra, you can take a standard action to strike a living foe with the raw evil of necrocarnum. When you use this ability, you must make a successful melee touch attack against the intended victim. If successful, your touch bestows 1d4 negative levels on the target (Fortitude half). For each negative level bestowed, you gain 1 temporary point of essentia and 5 temporary hit points. The temporary essentia lasts until the end of your next turn. The temporary hit points fade after 1 hour.
|
While you have necrocarnum shroud bound to your soul chakra, you can take a standard action to strike a living foe with the raw evil of necrocarnum. When you use this ability, you must make a
|
||||||
|
successful melee touch attack against the intended victim. If successful, your touch bestows 1d4 negative levels on the target (Fortitude half). For each negative level bestowed, you gain 1 temporary point of essentia
|
||||||
|
and 5 temporary hit points. The temporary essentia lasts until the end of your next turn. The temporary hit points fade after 1 hour.
|
||||||
|
|
||||||
Chakra Bind (Waist)
|
Chakra Bind (Waist)
|
||||||
|
|
||||||
At the beginning of your turn, any creature within the area of your life-draining field becomes shaken for 1 round (Will negates).
|
At the beginning of your turn, any creature within the area of your life-draining field becomes shaken for 1 round (Will negates).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 13:20:18
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void ShroudPulse(object oMeldshaper);
|
void ShroudPulse(object oMeldshaper);
|
||||||
@@ -82,6 +93,9 @@ void main()
|
|||||||
ShroudPulse(oMeldshaper);
|
ShroudPulse(oMeldshaper);
|
||||||
|
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_SHROUD), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_SHROUD), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_SHROUD_SOUL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_SOUL)
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_WAIST) ShroudShaken(oMeldshaper);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_SHROUD_SOUL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_WAIST || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_WAIST)
|
||||||
|
ShroudShaken(oMeldshaper);
|
||||||
}
|
}
|
||||||
@@ -21,10 +21,42 @@ Chakra Bind (Arms)
|
|||||||
While necrocarnum touch is bound to your arms chakra, you can fire a ray of pure necrocarnum as a standard action. This ray requires a ranged touch attack to hit and has a range of
|
While necrocarnum touch is bound to your arms chakra, you can fire a ray of pure necrocarnum as a standard action. This ray requires a ranged touch attack to hit and has a range of
|
||||||
30 feet. If it strikes a living creature, it deals 1d8 points of damage for every point of essentia that you invest in the soulmeld (Fortitude half).
|
30 feet. If it strikes a living creature, it deals 1d8 points of damage for every point of essentia that you invest in the soulmeld (Fortitude half).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 08:44:53
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
|
||||||
|
effect eLink = EffectLinkEffects(EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE), EffectSkillIncrease(SKILL_PICK_POCKET, 4));
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
|
||||||
|
if (nEssentia) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH_ESS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Check if bound to Arms chakra (regular or double)
|
||||||
|
int nBoundToArms = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
|
||||||
|
nBoundToArms = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToArms)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
#include "moi_inc_moifunc"
|
/* void main()
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -35,4 +67,4 @@ void main()
|
|||||||
if (nEssentia) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH_ESS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (nEssentia) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH_ESS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -20,10 +20,38 @@ Settled directly on your shoulders, your incarnate pauldrons glow with a faint b
|
|||||||
|
|
||||||
You gain immunity to energy drain.
|
You gain immunity to energy drain.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 23:13:51
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectImmunity(IMMUNITY_TYPE_DISEASE);
|
||||||
|
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_FORT, nEssentia));
|
||||||
|
|
||||||
|
// Shoulders bind (energy drain immunity) <20> check regular or double Shoulders
|
||||||
|
int nBoundToShoulders = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
|
||||||
|
nBoundToShoulders = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToShoulders) eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_NEGATIVE_LEVEL));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PAULDRONS_OF_HEALTH), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
void main()
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -34,4 +62,4 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PAULDRONS_OF_HEALTH), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PAULDRONS_OF_HEALTH), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -26,10 +26,53 @@ A terrible spidery head extends like a hood from your phase cloak, covering your
|
|||||||
|
|
||||||
You gain a bite attack that deals 1d4 points of damage and injects a mild poison (Fortitude negates, damage 1d2 Con). Every point of essentia invested in this soulmeld grants a +1 enhancement bonus on attack rolls made with the bite attack.
|
You gain a bite attack that deals 1d4 points of damage and injects a mild poison (Fortitude negates, damage 1d2 Con). Every point of essentia invested in this soulmeld grants a +1 enhancement bonus on attack rolls made with the bite attack.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 21:15:45
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 4 + nEssentia;
|
||||||
|
|
||||||
|
effect eLink = EffectSkillIncrease(SKILL_CLIMB, nBonus);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PHASE_CLOAK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (bite attack) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
string sResRef = "prc_lizf_bite_";
|
||||||
|
int nSize = PRCGetCreatureSize(oMeldshaper);
|
||||||
|
sResRef += GetAffixForSize(nSize);
|
||||||
|
AddNaturalPrimaryWeapon(oMeldshaper, sResRef);
|
||||||
|
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackB", sResRef);
|
||||||
|
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_PHASE_CLOAK);
|
||||||
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyOnHitProps(IP_CONST_ONHIT_ITEMPOISON, IPOnHitSaveDC(nDC), IP_CONST_POISON_1D2_CONDAMAGE), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
|
if (nEssentia)
|
||||||
|
{
|
||||||
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyAttackBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -55,4 +98,4 @@ void main()
|
|||||||
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyAttackBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyAttackBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -26,7 +26,14 @@ Your frost helm fuses to your head and seems to spread downward, changing the ap
|
|||||||
|
|
||||||
As a standard action, you can create a momentary ring of fire that surrounds you. Creatures adjacent to you take 1d6 points of fire damage per point of essentia you invest in your phoenix belt. A successful Reflex save reduces this damage by half.
|
As a standard action, you can create a momentary ring of fire that surrounds you. Creatures adjacent to you take 1d6 points of fire damage per point of essentia you invest in your phoenix belt. A successful Reflex save reduces this damage by half.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:25:19
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -40,5 +47,7 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_HEAT_ENDURANCE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_HEAT_ENDURANCE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PHOENIX_BELT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PHOENIX_BELT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PHOENIX_BELT_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
|
||||||
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_TOTEM)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PHOENIX_BELT_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
}
|
||||||
@@ -27,10 +27,71 @@ Your frost helm fuses to your head and seems to spread downward, changing the ap
|
|||||||
As a standard action, you can create a momentary ring of fire that surrounds you. Creatures adjacent to you take 1d6 points of fire damage per point of essentia
|
As a standard action, you can create a momentary ring of fire that surrounds you. Creatures adjacent to you take 1d6 points of fire damage per point of essentia
|
||||||
you invest in your phoenix belt. A successful Reflex save reduces this damage by half.
|
you invest in your phoenix belt. A successful Reflex save reduces this damage by half.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 21:30:51
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_PHOENIX_BELT;
|
||||||
|
|
||||||
|
// Check if bound to Totem chakra (regular or double)
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToTotem) return;
|
||||||
|
|
||||||
|
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_PHOENIX_BELT);
|
||||||
|
int nDice = GetEssentiaInvested(oMeldshaper, MELD_PHOENIX_BELT);
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_PHOENIX_BELT);
|
||||||
|
location lTarget = PRCGetSpellTargetLocation();
|
||||||
|
int nDamage;
|
||||||
|
float fDelay;
|
||||||
|
effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL);
|
||||||
|
effect eDam;
|
||||||
|
|
||||||
|
//Apply the fireball explosion at the location captured above.
|
||||||
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
|
||||||
|
//Declare the spell shape, size and the location. Capture the first target object in the shape.
|
||||||
|
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||||
|
//Cycle through the targets within the spell shape until an invalid object is captured.
|
||||||
|
while (GetIsObjectValid(oTarget))
|
||||||
|
{
|
||||||
|
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF) && oMeldshaper != oTarget)
|
||||||
|
{
|
||||||
|
//Fire cast spell at event for the specified target
|
||||||
|
SignalEvent(oTarget, EventSpellCastAt(oMeldshaper, MELD_PHOENIX_BELT));
|
||||||
|
//Get the distance between the explosion and the target to calculate delay
|
||||||
|
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
|
||||||
|
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLevel, fDelay))
|
||||||
|
{
|
||||||
|
nDamage = d6(nDice);
|
||||||
|
//Adjust damage based on Reflex Save, Evasion and Improved Evasion
|
||||||
|
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
|
||||||
|
if(nDamage > 0)
|
||||||
|
{
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_FIRE), oTarget);
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Select the next target within the spell shape.
|
||||||
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_PHOENIX_BELT);
|
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_PHOENIX_BELT);
|
||||||
@@ -71,3 +132,4 @@ void main()
|
|||||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
@@ -27,9 +27,41 @@ You can emit a crimson ray from the mouth of your psion-killer mask to make a ra
|
|||||||
|
|
||||||
If you hit with the ray, you deal no damage but temporarily suppress the opponent's primary weapon, if any, for ten rounds.
|
If you hit with the ray, you deal no damage but temporarily suppress the opponent's primary weapon, if any, for ten rounds.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 08:43:46
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK_DETECT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Check if bound to Totem chakra (regular or double)
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* #include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
@@ -40,4 +72,4 @@ void main()
|
|||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK_DETECT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK_DETECT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -19,7 +19,14 @@ Your psion-killer mask binds to your forehead, and your eyes replace the red glo
|
|||||||
|
|
||||||
When using this soulmeld's detect psionics ability, you can instantly determine the number, strength, and location of each psionic aura present as if you had been concentrating for 3 rounds.
|
When using this soulmeld's detect psionics ability, you can instantly determine the number, strength, and location of each psionic aura present as if you had been concentrating for 3 rounds.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 08:43:46
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "prc_inc_s_det"
|
#include "prc_inc_s_det"
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
@@ -30,7 +37,14 @@ void main()
|
|||||||
int nRound = 0;
|
int nRound = 0;
|
||||||
float fRange = 10 + (10.0 * GetEssentiaInvested(oMeldshaper, MELD_PSIONKILLER_MASK));
|
float fRange = 10 + (10.0 * GetEssentiaInvested(oMeldshaper, MELD_PSIONKILLER_MASK));
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper, MELD_PSIONKILLER_MASK) == CHAKRA_BROW) nRound = 3;
|
//if (GetIsMeldBound(oMeldshaper, MELD_PSIONKILLER_MASK) == CHAKRA_BROW) nRound = 3;
|
||||||
|
|
||||||
|
int nBoundToBrow = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == MELD_PSIONKILLER_MASK ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == MELD_PSIONKILLER_MASK)
|
||||||
|
nBoundToBrow = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToBrow) nRound = 3;
|
||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_DETECT), oMeldshaper, fDuration);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_DETECT), oMeldshaper, fDuration);
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,15 @@ You can emit a crimson ray from the mouth of your psion-killer mask to make a ra
|
|||||||
|
|
||||||
If you hit with the ray, you deal no damage but temporarily suppress the opponent's primary weapon, if any, for ten rounds.
|
If you hit with the ray, you deal no damage but temporarily suppress the opponent's primary weapon, if any, for ten rounds.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 20:53:41
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
#include "prc_inc_sp_tch"
|
#include "prc_inc_sp_tch"
|
||||||
|
|
||||||
@@ -112,7 +120,26 @@ void RestoreAllProperties(object oItem, object oPC, int nSlot = -1)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SuppressItem(object oTrueSpeaker, object oTarget, int nBeats)
|
|
||||||
|
void SuppressItem(object oTrueSpeaker, object oTarget, int nBeats)
|
||||||
|
{
|
||||||
|
int nMeldId = MELD_PSIONKILLER_MASK;
|
||||||
|
int nBoundToTotem = (GetLocalInt(oTrueSpeaker, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oTrueSpeaker, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId);
|
||||||
|
if (!nBoundToTotem || GetBreakConcentrationCheck(oTrueSpeaker) || nBeats == 0) return;
|
||||||
|
|
||||||
|
// Remove and restore the properties
|
||||||
|
RemoveAllProperties(oTarget, GetItemPossessor(oTarget));
|
||||||
|
DelayCommand(5.8, RestoreAllProperties(oTarget, GetItemPossessor(oTarget)));
|
||||||
|
|
||||||
|
// Apply VFX
|
||||||
|
effect eImp = EffectVisualEffect(VFX_IMP_PULSE_BOMB);
|
||||||
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eImp, GetItemPossessor(oTarget));
|
||||||
|
|
||||||
|
DelayCommand(6.0, SuppressItem(oTrueSpeaker, oTarget, nBeats - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void SuppressItem(object oTrueSpeaker, object oTarget, int nBeats)
|
||||||
{
|
{
|
||||||
// Break if they fail concentration or it runs out
|
// Break if they fail concentration or it runs out
|
||||||
if (GetBreakConcentrationCheck(oTrueSpeaker) || nBeats == 0) return;
|
if (GetBreakConcentrationCheck(oTrueSpeaker) || nBeats == 0) return;
|
||||||
@@ -127,9 +154,31 @@ void SuppressItem(object oTrueSpeaker, object oTarget, int nBeats)
|
|||||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eImp, GetItemPossessor(oTarget));
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eImp, GetItemPossessor(oTarget));
|
||||||
|
|
||||||
DelayCommand(6.0, SuppressItem(oTrueSpeaker, oTarget, nBeats - 1));
|
DelayCommand(6.0, SuppressItem(oTrueSpeaker, oTarget, nBeats - 1));
|
||||||
}
|
} */
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_PSIONKILLER_MASK;
|
||||||
|
|
||||||
|
// Check if bound to Totem chakra (regular or double)
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToTotem) return;
|
||||||
|
|
||||||
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
|
if(PRCDoRangedTouchAttack(oTarget))
|
||||||
|
{
|
||||||
|
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
||||||
|
if (GetIsObjectValid(oItem))
|
||||||
|
SuppressItem(oMeldshaper, oItem, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
object oTarget = PRCGetSpellTargetObject();
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
@@ -139,5 +188,5 @@ void main()
|
|||||||
if (GetIsObjectValid(oItem))
|
if (GetIsObjectValid(oItem))
|
||||||
SuppressItem(oMeldshaper, oItem, 10);
|
SuppressItem(oMeldshaper, oItem, 10);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
|
|||||||
@@ -21,10 +21,42 @@ Instead of spectacles perched on your nose, your psion's eyes appear as a third
|
|||||||
|
|
||||||
You can use the call to mind power at will for the duration of this soulmeld.
|
You can use the call to mind power at will for the duration of this soulmeld.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 13:16:34
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 4 + (nEssentia * 2);
|
||||||
|
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_CONCENTRATION, nBonus));
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_PSICRAFT, nBonus));
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_USE_MAGIC_DEVICE, nBonus));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONS_EYES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Brow bind (call to mind at will) <20> check regular or double Brow
|
||||||
|
int nBoundToBrow = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
|
||||||
|
nBoundToBrow = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToBrow)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONS_EYES_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -38,4 +70,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONS_EYES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONS_EYES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONS_EYES_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONS_EYES_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -26,10 +26,50 @@ The fur of your rageclaws merges into your hands, and your fingers become tipped
|
|||||||
|
|
||||||
You can use your rageclaws as a pair of natural weapons that deal 1d6 points of damage plus your Strength modifier. When you grapple an opponent, you can attack with both claws; these attacks are not subject to the usual <20>4 penalty for attacking with a natural weapon in a grapple. You gain a +1 enhancement bonus on attack rolls and damage rolls with your claws for every point of essentia invested in this soulmeld.
|
You can use your rageclaws as a pair of natural weapons that deal 1d6 points of damage plus your Strength modifier. When you grapple an opponent, you can attack with both claws; these attacks are not subject to the usual <20>4 penalty for attacking with a natural weapon in a grapple. You gain a +1 enhancement bonus on attack rolls and damage rolls with your claws for every point of essentia invested in this soulmeld.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 21:30:51
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added in moi_events
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_RAGECLAWS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (claws) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
string sResRef = "prc_claw_1d6m_";
|
||||||
|
int nSize = PRCGetCreatureSize(oMeldshaper);
|
||||||
|
sResRef += GetAffixForSize(nSize);
|
||||||
|
AddNaturalPrimaryWeapon(oMeldshaper, sResRef, 2);
|
||||||
|
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackL", sResRef);
|
||||||
|
|
||||||
|
if (nEssentia)
|
||||||
|
{
|
||||||
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -52,4 +92,4 @@ void main()
|
|||||||
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -24,10 +24,45 @@ Chakra Bind (Totem) Your head transforms to take on the appearance of a giant ea
|
|||||||
|
|
||||||
You gain evasion.
|
You gain evasion.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 23:20:37
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectSkillIncrease(SKILL_SPOT, 2 + (nEssentia * 2));
|
||||||
|
|
||||||
|
// Brow bind (darkvision) <20> check regular or double Brow
|
||||||
|
int nBoundToBrow = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
|
||||||
|
nBoundToBrow = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToBrow) eLink = EffectLinkEffects(eLink, EffectUltravision());
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GREAT_RAPTOR_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Totem bind (evasion) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -38,4 +73,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GREAT_RAPTOR_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GREAT_RAPTOR_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -20,7 +20,14 @@ Your feet and lower legs are encased in a sheath of blue-gray energy. This subst
|
|||||||
|
|
||||||
You can use dimension door as the spell, up to a total distance of 10 feet per meldshaper level. You can use this ability (in increments of 10 feet) any number of times, until the total distance has been traversed, at which point the soulmeld unshapes. This requires a standard action to activate.
|
You can use dimension door as the spell, up to a total distance of 10 feet per meldshaper level. You can use this ability (in increments of 10 feet) any number of times, until the total distance has been traversed, at which point the soulmeld unshapes. This requires a standard action to activate.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:28:00
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -31,5 +38,7 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CERULEAN_SANDALS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CERULEAN_SANDALS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_FEET) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CERULEAN_SANDALS_FEET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
|
||||||
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_FEET || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_FEET)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CERULEAN_SANDALS_FEET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,75 @@
|
|||||||
/*
|
/*
|
||||||
Cerulean Sandals Feet Bind
|
Cerulean Sandals
|
||||||
|
|
||||||
|
Descriptors: None
|
||||||
|
Classes: Incarnate, Soulborn
|
||||||
|
Chakra: Feet
|
||||||
|
Saving Throw: None
|
||||||
|
|
||||||
|
Incarnum forms into a pair of sandals that surround your feet and any other footwear you might have on. The sandals resemble blue crystal ice, but just beneath the surface, they seem to flow like water.
|
||||||
|
|
||||||
|
Your cerulean sandals make you immune to movement speed decreases.
|
||||||
|
|
||||||
|
Essentia: Every point of essentia invested in this soulmeld grants an enhancement bonus of +5 feet to your base land speed.
|
||||||
|
|
||||||
|
Chakra Bind (Feet)
|
||||||
|
|
||||||
Your feet and lower legs are encased in a sheath of blue-gray energy. This substance resembles ice, but motes of light like tiny stars drift through it as well.
|
Your feet and lower legs are encased in a sheath of blue-gray energy. This substance resembles ice, but motes of light like tiny stars drift through it as well.
|
||||||
|
|
||||||
You can use dimension door as the spell, up to a total distance of 10 feet per meldshaper level. You can use this ability (in increments of 10 feet) any number of times,
|
You can use dimension door as the spell, up to a total distance of 10 feet per meldshaper level. You can use this ability (in increments of 10 feet) any number of times, until the total distance has been traversed, at which point the soulmeld unshapes. This requires a standard action to activate.
|
||||||
until the total distance has been traversed, at which point the soulmeld unshapes. This requires a standard action to activate.
|
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 09:50:29
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "spinc_dimdoor"
|
#include "spinc_dimdoor"
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
location lTarget = PRCGetSpellTargetLocation();
|
||||||
|
float fTraveled = GetLocalFloat(oMeldshaper, "CeruleanSandalsDist");
|
||||||
|
float fDist = GetDistanceBetweenLocations(lTarget, GetLocation(oMeldshaper));
|
||||||
|
// We know it's bound, now to check which class bound it
|
||||||
|
int nClass = GetMeldShapedClass(oMeldshaper, MELD_CERULEAN_SANDALS);
|
||||||
|
int nLevel = GetMeldshaperLevel(oMeldshaper, nClass, MELD_CERULEAN_SANDALS);
|
||||||
|
float fMax = 10.0 * nLevel;
|
||||||
|
|
||||||
|
// Check if bound to Feet chakra (regular or double)
|
||||||
|
int nMeldId = MELD_CERULEAN_SANDALS;
|
||||||
|
int nBoundToFeet = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_FEET)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_FEET)) == nMeldId)
|
||||||
|
nBoundToFeet = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToFeet)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Cerulean Sandals must be bound to Feet to use this ability.", oMeldshaper, FALSE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's within range
|
||||||
|
if (fMax >= (fDist+fTraveled))
|
||||||
|
{
|
||||||
|
DimensionDoor(oMeldshaper, nLevel);
|
||||||
|
SetLocalFloat(oMeldshaper, "CeruleanSandalsDist", (fDist+fTraveled));
|
||||||
|
FloatingTextStringOnCreature("You have "+FloatToString(fMax - (fDist+fTraveled))+" of distance left in your Cerulean Sandals", oMeldshaper, FALSE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Using this ability ends the meld until tomorrow.
|
||||||
|
PRCRemoveSpellEffects(MELD_CERULEAN_SANDALS, oMeldshaper, oMeldshaper);
|
||||||
|
FloatingTextStringOnCreature("Cerulean Sandals unshaped", oMeldshaper, FALSE);
|
||||||
|
ExecuteScript("prc_speed", oMeldshaper); // This will remove any speed bonus from the spell
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
location lTarget = PRCGetSpellTargetLocation();
|
location lTarget = PRCGetSpellTargetLocation();
|
||||||
@@ -34,5 +93,5 @@ void main()
|
|||||||
FloatingTextStringOnCreature("Cerulean Sandals unshaped", oMeldshaper, FALSE);
|
FloatingTextStringOnCreature("Cerulean Sandals unshaped", oMeldshaper, FALSE);
|
||||||
ExecuteScript("prc_speed", oMeldshaper); // This will remove any speed bonus from the spell
|
ExecuteScript("prc_speed", oMeldshaper); // This will remove any speed bonus from the spell
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
|
|||||||
@@ -26,10 +26,57 @@ Your hair grows into a bushy mane beneath your crown. If you are male, your bear
|
|||||||
|
|
||||||
You gain the ability to make a trample attack. As a full-round action, you can move up to twice your speed and literally run over any creature equal to your own size or smaller. Your trample attack deals 1d8 points of bludgeoning damage (or 1d6 points if you are Small) plus 1-1/2 times your Strength modifier. Opponents have a Reflex save for half damage.
|
You gain the ability to make a trample attack. As a full-round action, you can move up to twice your speed and literally run over any creature equal to your own size or smaller. Your trample attack deals 1d8 points of bludgeoning damage (or 1d6 points if you are Small) plus 1-1/2 times your Strength modifier. Opponents have a Reflex save for half damage.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 10:25:22
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//:: Double Totem bind support added
|
||||||
|
//:; Added missing essentia based will save bonus
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||||
|
|
||||||
|
// Apply essentia-based mind-affecting save bonus
|
||||||
|
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, nEssentia, SAVING_THROW_TYPE_MIND_SPELLS));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHEDU_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Heart bind (ethereal) <20> check regular or double Heart
|
||||||
|
int nBoundToHeart = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HEART)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HEART)) == nMeldId)
|
||||||
|
nBoundToHeart = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToHeart)
|
||||||
|
{
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHEDU_CROWN_HEART), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Totem bind (trample) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem)
|
||||||
|
{
|
||||||
|
// Reuses Gorgon Mask's trample feat; no dedicated constant exists
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -42,4 +89,4 @@ void main()
|
|||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HEART) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHEDU_CROWN_HEART), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HEART) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHEDU_CROWN_HEART), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
// This is correct, it's identical to the Shedu Crown ability for trample
|
// This is correct, it's identical to the Shedu Crown ability for trample
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -26,11 +26,35 @@ Your hair grows into a bushy mane beneath your crown. If you are male, your bear
|
|||||||
|
|
||||||
You gain the ability to make a trample attack. As a full-round action, you can move up to twice your speed and literally run over any creature equal to your own size or smaller. Your trample attack deals 1d8 points of bludgeoning damage (or 1d6 points if you are Small) plus 1-1/2 times your Strength modifier. Opponents have a Reflex save for half damage.
|
You gain the ability to make a trample attack. As a full-round action, you can move up to twice your speed and literally run over any creature equal to your own size or smaller. Your trample attack deals 1d8 points of bludgeoning damage (or 1d6 points if you are Small) plus 1-1/2 times your Strength modifier. Opponents have a Reflex save for half damage.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 10:25:22
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_SHEDU_CROWN;
|
||||||
|
|
||||||
|
// Check if bound to Heart chakra (regular or double)
|
||||||
|
int nBoundToHeart = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HEART)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HEART)) == nMeldId)
|
||||||
|
nBoundToHeart = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToHeart)
|
||||||
|
{
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectEthereal()), oMeldshaper, RoundsToSeconds(GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_SHEDU_CROWN)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectEthereal()), oMeldshaper, RoundsToSeconds(GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_SHEDU_CROWN)));
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectEthereal()), oMeldshaper, RoundsToSeconds(GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_SHEDU_CROWN)));
|
||||||
}
|
} */
|
||||||
@@ -26,10 +26,46 @@ Your shadow mantle literally draws shadows to itself, and it changes color to ma
|
|||||||
|
|
||||||
You gain a competence bonus on Hide checks equal to the bonus the soulmeld grants on Listen checks (+4 plus an additional +2 per point of invested essentia).
|
You gain a competence bonus on Hide checks equal to the bonus the soulmeld grants on Listen checks (+4 plus an additional +2 per point of invested essentia).
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 23:20:37
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 4 + (nEssentia * 2);
|
||||||
|
effect eLink = EffectSkillIncrease(SKILL_LISTEN, nBonus);
|
||||||
|
|
||||||
|
// Totem bind (Hide bonus) <20> check regular or double Totem
|
||||||
|
int nBoundToTotem = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
|
||||||
|
nBoundToTotem = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToTotem) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_HIDE, nBonus));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHADOW_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Shoulders bind (darkness + ultravision) <20> check regular or double Shoulders
|
||||||
|
int nBoundToShoulders = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
|
||||||
|
nBoundToShoulders = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToShoulders) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHADOW_MANTLE_SHOULDERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -41,4 +77,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHADOW_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHADOW_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SHOULDERS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHADOW_MANTLE_SHOULDERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SHOULDERS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHADOW_MANTLE_SHOULDERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -20,7 +20,14 @@ Your grip on your ranged weapon is as light as can be, requiring only the slight
|
|||||||
|
|
||||||
When you bind sighting gloves to your hands chakra, you gain the Point Blank Shot feat.
|
When you bind sighting gloves to your hands chakra, you gain the Point Blank Shot feat.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:43:25
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -31,5 +38,7 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SIGHTING_GLOVES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SIGHTING_GLOVES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_POINTBLANK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
|
||||||
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_HANDS)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_POINTBLANK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
}
|
||||||
@@ -33,7 +33,14 @@ Chakra Bind (Throat)
|
|||||||
Your soulspark burns with a fierce blue-white light.
|
Your soulspark burns with a fierce blue-white light.
|
||||||
If you bind soulspark familiar to your throat chakra, you create a greater soulspark.
|
If you bind soulspark familiar to your throat chakra, you create a greater soulspark.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:53:41
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void AugmentSoulspark(object oMeldshaper, string sSummon, int nEssentia)
|
void AugmentSoulspark(object oMeldshaper, string sSummon, int nEssentia)
|
||||||
@@ -79,9 +86,9 @@ void main()
|
|||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
string sSummon = "moi_slspk_least";
|
string sSummon = "moi_slspk_least";
|
||||||
|
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) sSummon = "moi_slspk_lesser";
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_CROWN) sSummon = "moi_slspk_lesser";
|
||||||
else if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW) sSummon = "moi_slspk_medium";
|
else if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_BROW) sSummon = "moi_slspk_medium";
|
||||||
else if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) sSummon = "moi_slspk_greatr";
|
else if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_THROAT) sSummon = "moi_slspk_greatr";
|
||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectSummonCreature(sSummon)), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectSummonCreature(sSummon)), oMeldshaper, 9999.0);
|
||||||
DelayCommand(0.5, AugmentSoulspark(oMeldshaper, sSummon, nEssentia));
|
DelayCommand(0.5, AugmentSoulspark(oMeldshaper, sSummon, nEssentia));
|
||||||
|
|||||||
@@ -26,10 +26,46 @@ The silver mask melds into your face and neck, from your cheekbones down to your
|
|||||||
|
|
||||||
When bound to the throat chakra, the silvertongue mask allows you to cast charm person at will. A creature targeted by this ability, regardless of whether or not it succeeds on its save, can<61>t be targeted again by the same ability for 24 hours.
|
When bound to the throat chakra, the silvertongue mask allows you to cast charm person at will. A creature targeted by this ability, regardless of whether or not it succeeds on its save, can<61>t be targeted again by the same ability for 24 hours.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 12:23:13
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = OBJECT_SELF;
|
||||||
|
int nMeldId = MELD_SILVERTONGUE_MASK;
|
||||||
|
|
||||||
|
// Check if bound to Throat chakra (regular or double)
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
if (!nBoundToThroat) return; // Exit if not bound to Throat
|
||||||
|
|
||||||
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
|
|
||||||
|
if (!GetLocalInt(oTarget, "SilvertongueLimit"))
|
||||||
|
{
|
||||||
|
// Which class created this
|
||||||
|
int nClass = GetMeldShapedClass(oMeldshaper, MELD_SILVERTONGUE_MASK);
|
||||||
|
int nMeldshaperLvl = GetMeldshaperLevel(oMeldshaper, nClass, MELD_SILVERTONGUE_MASK);
|
||||||
|
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_SILVERTONGUE_MASK);
|
||||||
|
ActionDoCommand(SetLocalInt(oMeldshaper, "SpellIsSLA", TRUE));
|
||||||
|
ActionCastSpell(SPELL_CHARM_PERSON, nMeldshaperLvl, 0, nDC, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, FALSE, OBJECT_INVALID, FALSE);
|
||||||
|
ActionDoCommand(DeleteLocalInt(oMeldshaper, "SpellIsSLA"));
|
||||||
|
SetLocalInt(oTarget, "SilvertongueLimit", TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = OBJECT_SELF;
|
object oMeldshaper = OBJECT_SELF;
|
||||||
object oTarget = PRCGetSpellTargetObject();
|
object oTarget = PRCGetSpellTargetObject();
|
||||||
@@ -46,4 +82,4 @@ void main()
|
|||||||
SetLocalInt(oTarget, "SilvertongueLimit", TRUE);
|
SetLocalInt(oTarget, "SilvertongueLimit", TRUE);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
@@ -26,10 +26,47 @@ The silver mask melds into your face and neck, from your cheekbones down to your
|
|||||||
|
|
||||||
When bound to the throat chakra, the silvertongue mask allows you to cast charm person at will. A creature targeted by this ability, regardless of whether or not it succeeds on its save, can<61>t be targeted again by the same ability for 24 hours.
|
When bound to the throat chakra, the silvertongue mask allows you to cast charm person at will. A creature targeted by this ability, regardless of whether or not it succeeds on its save, can<61>t be targeted again by the same ability for 24 hours.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-20 12:23:13
|
||||||
|
//::
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
{
|
||||||
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
|
int nMeldId = PRCGetSpellId();
|
||||||
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
|
int nBonus = 2 + (nEssentia * 2);
|
||||||
|
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_BLUFF, nBonus), EffectSkillIncrease(SKILL_PERSUADE, nBonus));
|
||||||
|
|
||||||
|
// Brow bind (Sense Motive) <20> check regular or double Brow
|
||||||
|
int nBoundToBrow = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
|
||||||
|
nBoundToBrow = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToBrow)
|
||||||
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SENSE_MOTIVE, nBonus));
|
||||||
|
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SILVERTONGUE_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
|
||||||
|
// Throat bind (charm person) <20> check regular or double Throat
|
||||||
|
int nBoundToThroat = FALSE;
|
||||||
|
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
|
||||||
|
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
|
||||||
|
nBoundToThroat = TRUE;
|
||||||
|
|
||||||
|
if (nBoundToThroat)
|
||||||
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SILVERTONGUE_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void main()
|
||||||
{
|
{
|
||||||
object oMeldshaper = PRCGetSpellTargetObject();
|
object oMeldshaper = PRCGetSpellTargetObject();
|
||||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||||
@@ -41,4 +78,4 @@ void main()
|
|||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SILVERTONGUE_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SILVERTONGUE_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SILVERTONGUE_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SILVERTONGUE_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
}
|
} */
|
||||||
@@ -26,7 +26,15 @@ Your hands become one with the claws that surround them, overlarge for your size
|
|||||||
|
|
||||||
You can use your sphinx claws as natural weapons that deal 1d8 points of damage plus your Strength modifier. For every point of essentia you invest in your sphinx claws, you gain a +1 enhancement bonus on your attack rolls and damage rolls with the claws.
|
You can use your sphinx claws as natural weapons that deal 1d8 points of damage plus your Strength modifier. For every point of essentia you invest in your sphinx claws, you gain a +1 enhancement bonus on your attack rolls and damage rolls with the claws.
|
||||||
*/
|
*/
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
//:: Updated by: Jaysyn
|
||||||
|
//:: Updated on: 2026-02-21 15:18:04
|
||||||
|
//::
|
||||||
|
//:: Double Totem Bind support added
|
||||||
|
//:: Double Chakra Bind support added
|
||||||
|
//::
|
||||||
|
//::////////////////////////////////////////////////////////
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -38,7 +46,7 @@ void main()
|
|||||||
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SPHINX_CLAWS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SPHINX_CLAWS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM)
|
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_TOTEM)
|
||||||
{
|
{
|
||||||
string sResRef = "prc_claw_1d8m_";
|
string sResRef = "prc_claw_1d8m_";
|
||||||
int nSize = PRCGetCreatureSize(oMeldshaper);
|
int nSize = PRCGetCreatureSize(oMeldshaper);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user