From 744e945a8cb0983e6fa1f588ea42a9bec5fe5e51 Mon Sep 17 00:00:00 2001 From: Y0oshi Date: Wed, 23 Sep 2026 04:46:24 +0300 Subject: [PATCH 1/5] Fix inverted fellow_kt_killer check --- Source/ACE.Server/WorldObjects/Creature_Death.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/ACE.Server/WorldObjects/Creature_Death.cs b/Source/ACE.Server/WorldObjects/Creature_Death.cs index 4951a9b73d..14188e52a1 100644 --- a/Source/ACE.Server/WorldObjects/Creature_Death.cs +++ b/Source/ACE.Server/WorldObjects/Creature_Death.cs @@ -279,7 +279,7 @@ public void OnDeath_HandleKillTask(string killQuest) TryHandleKillTask(playerDamager, killQuest, killTaskCredits, cap); } // check option that requires killer to have killtask to pass to fellows - else if (!PropertyManager.GetBool("fellow_kt_killer").Item) + else if (PropertyManager.GetBool("fellow_kt_killer").Item) { continue; } From d371a2e56bf9647484f8d0df86e556c1b97a38cc Mon Sep 17 00:00:00 2001 From: Y0oshi Date: Wed, 23 Sep 2026 04:46:24 +0300 Subject: [PATCH 2/5] Trigger exhaustion when stamina cost exceeds current stamina --- Source/ACE.Server/WorldObjects/Player_Vitals.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/ACE.Server/WorldObjects/Player_Vitals.cs b/Source/ACE.Server/WorldObjects/Player_Vitals.cs index b6a23b6da5..770706678e 100644 --- a/Source/ACE.Server/WorldObjects/Player_Vitals.cs +++ b/Source/ACE.Server/WorldObjects/Player_Vitals.cs @@ -144,7 +144,7 @@ public override int UpdateVital(CreatureVital vital, int newVal) // check for exhaustion if (vital.Vital == PropertyAttribute2nd.Stamina || vital.Vital == PropertyAttribute2nd.MaxStamina) { - if (newVal == 0) + if (vital.Current == 0) { OnExhausted(); } From 48bce6227c2a98b765a1a4fda480ad0f4713d6dd Mon Sep 17 00:00:00 2001 From: Y0oshi Date: Wed, 23 Sep 2026 04:46:24 +0300 Subject: [PATCH 3/5] Pass isWeaponSpell when adding a new enchantment layer --- Source/ACE.Server/WorldObjects/Managers/EnchantmentManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/ACE.Server/WorldObjects/Managers/EnchantmentManager.cs b/Source/ACE.Server/WorldObjects/Managers/EnchantmentManager.cs index 1435b6d84b..619d3d6790 100644 --- a/Source/ACE.Server/WorldObjects/Managers/EnchantmentManager.cs +++ b/Source/ACE.Server/WorldObjects/Managers/EnchantmentManager.cs @@ -167,7 +167,7 @@ public virtual AddEnchantmentResult Add(Spell spell, WorldObject caster, WorldOb if (refreshSpell == null) { - var newEntry = BuildEntry(spell, caster, weapon, equip); + var newEntry = BuildEntry(spell, caster, weapon, equip, isWeaponSpell); newEntry.LayerId = result.NextLayerId; WorldObject.Biota.PropertiesEnchantmentRegistry.AddEnchantment(newEntry, WorldObject.BiotaDatabaseLock); From 5988f1d353b863d40bda20daaba24c429c70cc41 Mon Sep 17 00:00:00 2001 From: Y0oshi Date: Wed, 23 Sep 2026 04:46:24 +0300 Subject: [PATCH 4/5] Prevent spell projectiles and DoTs from damaging invincible creatures --- Source/ACE.Server/WorldObjects/Managers/EnchantmentManager.cs | 3 ++- Source/ACE.Server/WorldObjects/SpellProjectile.cs | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/ACE.Server/WorldObjects/Managers/EnchantmentManager.cs b/Source/ACE.Server/WorldObjects/Managers/EnchantmentManager.cs index 619d3d6790..b63e92fa9d 100644 --- a/Source/ACE.Server/WorldObjects/Managers/EnchantmentManager.cs +++ b/Source/ACE.Server/WorldObjects/Managers/EnchantmentManager.cs @@ -1405,7 +1405,8 @@ public void ApplyDamageTick(List enchantments, Da if (isDead) break; } - creature.TakeDamageOverTime(tickAmountTotal, damageType); + if (!creature.Invincible) + creature.TakeDamageOverTime(tickAmountTotal, damageType); if (!creature.IsAlive) return; diff --git a/Source/ACE.Server/WorldObjects/SpellProjectile.cs b/Source/ACE.Server/WorldObjects/SpellProjectile.cs index 0ef0c887fb..3e92a57fef 100644 --- a/Source/ACE.Server/WorldObjects/SpellProjectile.cs +++ b/Source/ACE.Server/WorldObjects/SpellProjectile.cs @@ -380,7 +380,7 @@ public override void OnCollideObject(WorldObject target) var sourcePlayer = source as Player; var targetPlayer = target as Player; - if (source == null || !target.IsAlive || targetPlayer != null && targetPlayer.Invincible) + if (source == null || !target.IsAlive || target.Invincible) return null; // check lifestone protection @@ -688,7 +688,7 @@ public void DamageTarget(Creature target, float damage, bool critical, bool crit { var targetPlayer = target as Player; - if (targetPlayer != null && targetPlayer.Invincible || target.IsDead) + if (target.Invincible || target.IsDead) return; var sourceCreature = ProjectileSource as Creature; From 952706599c9af68d2c294c706ec86952f5da66d3 Mon Sep 17 00:00:00 2001 From: Y0oshi Date: Wed, 23 Sep 2026 05:03:06 +0300 Subject: [PATCH 5/5] Auto-resist spells cast on invincible creatures --- Source/ACE.Server/WorldObjects/WorldObject_Magic.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/ACE.Server/WorldObjects/WorldObject_Magic.cs b/Source/ACE.Server/WorldObjects/WorldObject_Magic.cs index 800df98237..611e01d76a 100644 --- a/Source/ACE.Server/WorldObjects/WorldObject_Magic.cs +++ b/Source/ACE.Server/WorldObjects/WorldObject_Magic.cs @@ -170,11 +170,11 @@ public bool TryResistSpell(WorldObject target, Spell spell, WorldObject itemCast var player = this as Player; var targetPlayer = target as Player; + if (targetCreature.Invincible) + resisted = true; + if (targetPlayer != null) { - if (targetPlayer.Invincible) - resisted = true; - if (targetPlayer.UnderLifestoneProtection) { targetPlayer.HandleLifestoneProtection();