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:
Jaysyn904
2026-01-06 18:28:19 -05:00
parent 6beb592c56
commit 5aa7b80693
2 changed files with 94 additions and 58 deletions

View File

@@ -454,8 +454,27 @@ void main()
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
ipIP =ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_PARALYSIS); ipIP =ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_PARALYSIS);
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);

View File

@@ -101,61 +101,78 @@ 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))
{ {
// Apply the actual drain // Apply the actual drain
effect eDrain = SupernaturalEffect(EffectNegativeLevel(nDamage)); effect eDrain = SupernaturalEffect(EffectNegativeLevel(nDamage));
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDrain, oTarget); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDrain, oTarget);
// Update marker // Update marker
IncrementMarker(oEater); IncrementMarker(oEater);
DelayCommand(HoursToSeconds(24), DecrementMarker(oEater)); DelayCommand(HoursToSeconds(24), DecrementMarker(oEater));
//:: Soul X side effects
/// Soul X side effects // Remove existing tagged effects before applying new ones
// Clear out old effects effect eOld = GetFirstEffect(oEater);
PRCRemoveSpellEffects(PRCGetSpellId(), oEater, oEater); while(GetIsEffectValid(eOld))
{
// Generate new effects string sTag = GetEffectTag(eOld);
int nClassLevel = GetLevelByClass(CLASS_TYPE_SOUL_EATER, oEater); if(sTag == "SOULEATER_SOUL_STRENGTH" ||
effect eSideEffect = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); sTag == "SOULEATER_SOUL_ENHANCEMENT" ||
sTag == "SOULEATER_SOUL_ENDURANCE" ||
// Soul Strength sTag == "SOULEATER_SOUL_AGILITY")
if(nClassLevel >= 2) {
{ RemoveEffect(oEater, eOld);
eSideEffect = EffectLinkEffects(eSideEffect, EffectAbilityIncrease(ABILITY_STRENGTH, 4)); }
} eOld = GetNextEffect(oEater);
}
// Soul Enchancement
if(nClassLevel >= 4) // Generate new effects with tags
{ int nClassLevel = GetLevelByClass(CLASS_TYPE_SOUL_EATER, oEater);
eSideEffect = EffectLinkEffects(eSideEffect, EffectSavingThrowIncrease(SAVING_THROW_TYPE_ALL, 2));
eSideEffect = EffectLinkEffects(eSideEffect, EffectSkillIncrease(SKILL_ALL_SKILLS, 2)); // Soul Strength
} if(nClassLevel >= 2)
{
// Soul Endurance effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 4);
if(nClassLevel >= 5) eStr = SupernaturalEffect(eStr);
{ eStr = TagEffect(eStr, "SOULEATER_SOUL_STRENGTH");
eSideEffect = EffectLinkEffects(eSideEffect, EffectAbilityIncrease(ABILITY_CONSTITUTION, 4)); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eStr, oEater, HoursToSeconds(24));
} }
// Soul Agility // Soul Enchancement
if(nClassLevel >= 8) if(nClassLevel >= 4)
{ {
eSideEffect = EffectLinkEffects(eSideEffect, EffectAbilityIncrease(ABILITY_DEXTERITY, 4)); effect eSave = EffectSavingThrowIncrease(SAVING_THROW_TYPE_ALL, 2);
} eSave = SupernaturalEffect(eSave);
eSave = TagEffect(eSave, "SOULEATER_SOUL_ENHANCEMENT");
// Apply the gathered side effects. All the abilities are supernatural and last 24h ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSave, oEater, HoursToSeconds(24));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,
SupernaturalEffect(eSideEffect), effect eSkill = EffectSkillIncrease(SKILL_ALL_SKILLS, 2);
oEater, eSkill = SupernaturalEffect(eSkill);
HoursToSeconds(24) eSkill = TagEffect(eSkill, "SOULEATER_SOUL_ENHANCEMENT");
); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSkill, oEater, HoursToSeconds(24));
}
// Soul Endurance
if(nClassLevel >= 5)
{
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
if(nClassLevel >= 8)
{
effect eDex = EffectAbilityIncrease(ABILITY_DEXTERITY, 4);
eDex = SupernaturalEffect(eDex);
eDex = TagEffect(eDex, "SOULEATER_SOUL_AGILITY");
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDex, 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