2026/01/06
race_skin now respects "AppearanceStoredWing". Soul Eater's Soul X buffs no longer stack during combat maneuvers.
This commit is contained in:
@@ -456,6 +456,25 @@ void main()
|
|||||||
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
||||||
}
|
}
|
||||||
if(GetRacialType(oPC) == RACIAL_TYPE_GLOURA /* || GetRacialType(oPC) == RACIAL_TYPE_PIXIE */)
|
if(GetRacialType(oPC) == RACIAL_TYPE_GLOURA /* || GetRacialType(oPC) == RACIAL_TYPE_PIXIE */)
|
||||||
|
{
|
||||||
|
// Only apply racial wings if player doesn't have custom wings
|
||||||
|
if(!GetPersistantLocalInt(oPC, "AppearanceStoredWing"))
|
||||||
|
SetCreatureWingType(CREATURE_WING_TYPE_BUTTERFLY, oPC);
|
||||||
|
}
|
||||||
|
if(GetRacialType(oPC) == RACIAL_TYPE_AVARIEL)
|
||||||
|
{
|
||||||
|
// Only apply racial wings if player doesn't have custom wings
|
||||||
|
if(!GetPersistantLocalInt(oPC, "AppearanceStoredWing"))
|
||||||
|
SetCreatureWingType(CREATURE_WING_TYPE_BIRD, oPC);
|
||||||
|
}
|
||||||
|
if(GetRacialType(oPC) == RACIAL_TYPE_FEYRI)
|
||||||
|
{
|
||||||
|
// Only apply racial wings if player doesn't have custom wings
|
||||||
|
if(!GetPersistantLocalInt(oPC, "AppearanceStoredWing"))
|
||||||
|
SetCreatureWingType(CREATURE_WING_TYPE_DEMON, oPC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if(GetRacialType(oPC) == RACIAL_TYPE_GLOURA) // || GetRacialType(oPC) == RACIAL_TYPE_PIXIE
|
||||||
{
|
{
|
||||||
SetCreatureWingType(CREATURE_WING_TYPE_BUTTERFLY, oPC);
|
SetCreatureWingType(CREATURE_WING_TYPE_BUTTERFLY, oPC);
|
||||||
}
|
}
|
||||||
@@ -466,7 +485,7 @@ void main()
|
|||||||
if(GetRacialType(oPC) == RACIAL_TYPE_FEYRI)
|
if(GetRacialType(oPC) == RACIAL_TYPE_FEYRI)
|
||||||
{
|
{
|
||||||
SetCreatureWingType(CREATURE_WING_TYPE_DEMON, oPC);
|
SetCreatureWingType(CREATURE_WING_TYPE_DEMON, oPC);
|
||||||
}
|
} */
|
||||||
if(GetRacialType(oPC) == RACIAL_TYPE_JAEBRIN)
|
if(GetRacialType(oPC) == RACIAL_TYPE_JAEBRIN)
|
||||||
{
|
{
|
||||||
SetCompositeBonus(oSkin, "Jaebrin_Spell", 4, ITEM_PROPERTY_SKILL_BONUS, SKILL_SPELLCRAFT);
|
SetCompositeBonus(oSkin, "Jaebrin_Spell", 4, ITEM_PROPERTY_SKILL_BONUS, SKILL_SPELLCRAFT);
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ void main()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoEnergyDrain(object oEater, object oTarget,int nDamage)
|
void DoEnergyDrain(object oEater, object oTarget, int nDamage)
|
||||||
{
|
{
|
||||||
// Immunity prevents anything from actually happening
|
// Immunity prevents anything from actually happening
|
||||||
if(!GetIsImmune(oTarget, IMMUNITY_TYPE_NEGATIVE_LEVEL))
|
if(!GetIsImmune(oTarget, IMMUNITY_TYPE_NEGATIVE_LEVEL))
|
||||||
@@ -114,48 +114,65 @@ void DoEnergyDrain(object oEater, object oTarget,int nDamage)
|
|||||||
IncrementMarker(oEater);
|
IncrementMarker(oEater);
|
||||||
DelayCommand(HoursToSeconds(24), DecrementMarker(oEater));
|
DelayCommand(HoursToSeconds(24), DecrementMarker(oEater));
|
||||||
|
|
||||||
|
//:: Soul X side effects
|
||||||
|
// Remove existing tagged effects before applying new ones
|
||||||
|
effect eOld = GetFirstEffect(oEater);
|
||||||
|
while(GetIsEffectValid(eOld))
|
||||||
|
{
|
||||||
|
string sTag = GetEffectTag(eOld);
|
||||||
|
if(sTag == "SOULEATER_SOUL_STRENGTH" ||
|
||||||
|
sTag == "SOULEATER_SOUL_ENHANCEMENT" ||
|
||||||
|
sTag == "SOULEATER_SOUL_ENDURANCE" ||
|
||||||
|
sTag == "SOULEATER_SOUL_AGILITY")
|
||||||
|
{
|
||||||
|
RemoveEffect(oEater, eOld);
|
||||||
|
}
|
||||||
|
eOld = GetNextEffect(oEater);
|
||||||
|
}
|
||||||
|
|
||||||
/// Soul X side effects
|
// Generate new effects with tags
|
||||||
// Clear out old effects
|
|
||||||
PRCRemoveSpellEffects(PRCGetSpellId(), oEater, oEater);
|
|
||||||
|
|
||||||
// Generate new effects
|
|
||||||
int nClassLevel = GetLevelByClass(CLASS_TYPE_SOUL_EATER, oEater);
|
int nClassLevel = GetLevelByClass(CLASS_TYPE_SOUL_EATER, oEater);
|
||||||
effect eSideEffect = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
||||||
|
|
||||||
// Soul Strength
|
// Soul Strength
|
||||||
if(nClassLevel >= 2)
|
if(nClassLevel >= 2)
|
||||||
{
|
{
|
||||||
eSideEffect = EffectLinkEffects(eSideEffect, EffectAbilityIncrease(ABILITY_STRENGTH, 4));
|
effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 4);
|
||||||
|
eStr = SupernaturalEffect(eStr);
|
||||||
|
eStr = TagEffect(eStr, "SOULEATER_SOUL_STRENGTH");
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eStr, oEater, HoursToSeconds(24));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Soul Enchancement
|
// Soul Enchancement
|
||||||
if(nClassLevel >= 4)
|
if(nClassLevel >= 4)
|
||||||
{
|
{
|
||||||
eSideEffect = EffectLinkEffects(eSideEffect, EffectSavingThrowIncrease(SAVING_THROW_TYPE_ALL, 2));
|
effect eSave = EffectSavingThrowIncrease(SAVING_THROW_TYPE_ALL, 2);
|
||||||
eSideEffect = EffectLinkEffects(eSideEffect, EffectSkillIncrease(SKILL_ALL_SKILLS, 2));
|
eSave = SupernaturalEffect(eSave);
|
||||||
|
eSave = TagEffect(eSave, "SOULEATER_SOUL_ENHANCEMENT");
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSave, oEater, HoursToSeconds(24));
|
||||||
|
|
||||||
|
effect eSkill = EffectSkillIncrease(SKILL_ALL_SKILLS, 2);
|
||||||
|
eSkill = SupernaturalEffect(eSkill);
|
||||||
|
eSkill = TagEffect(eSkill, "SOULEATER_SOUL_ENHANCEMENT");
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSkill, oEater, HoursToSeconds(24));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Soul Endurance
|
// Soul Endurance
|
||||||
if(nClassLevel >= 5)
|
if(nClassLevel >= 5)
|
||||||
{
|
{
|
||||||
eSideEffect = EffectLinkEffects(eSideEffect, EffectAbilityIncrease(ABILITY_CONSTITUTION, 4));
|
effect eCon = EffectAbilityIncrease(ABILITY_CONSTITUTION, 4);
|
||||||
|
eCon = SupernaturalEffect(eCon);
|
||||||
|
eCon = TagEffect(eCon, "SOULEATER_SOUL_ENDURANCE");
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCon, oEater, HoursToSeconds(24));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Soul Agility
|
// Soul Agility
|
||||||
if(nClassLevel >= 8)
|
if(nClassLevel >= 8)
|
||||||
{
|
{
|
||||||
eSideEffect = EffectLinkEffects(eSideEffect, EffectAbilityIncrease(ABILITY_DEXTERITY, 4));
|
effect eDex = EffectAbilityIncrease(ABILITY_DEXTERITY, 4);
|
||||||
|
eDex = SupernaturalEffect(eDex);
|
||||||
|
eDex = TagEffect(eDex, "SOULEATER_SOUL_AGILITY");
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDex, oEater, HoursToSeconds(24));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply the gathered side effects. All the abilities are supernatural and last 24h
|
|
||||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,
|
|
||||||
SupernaturalEffect(eSideEffect),
|
|
||||||
oEater,
|
|
||||||
HoursToSeconds(24)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Soul Power
|
// Soul Power
|
||||||
// Rebalanced to give +2 to all DCs and just double Soul Blast uses, due to it not being sanely
|
// Rebalanced to give +2 to all DCs and just double Soul Blast uses, due to it not being sanely
|
||||||
// possible to find out all use-limited abilities one may have
|
// possible to find out all use-limited abilities one may have
|
||||||
|
|||||||
Reference in New Issue
Block a user