From 9b4177311082057b53313e6252c2bd7a46f0ea60 Mon Sep 17 00:00:00 2001 From: Flerp Date: Tue, 4 Nov 2025 18:12:15 -0800 Subject: [PATCH] Reworking OnDamage to allow for better checks --- src/Leech.cpp | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/Leech.cpp b/src/Leech.cpp index 9e31fe3..a2cbff4 100644 --- a/src/Leech.cpp +++ b/src/Leech.cpp @@ -7,43 +7,39 @@ class Leech_UnitScript : public UnitScript { public: - Leech_UnitScript() : UnitScript("Leech_UnitScript") { } + Leech_UnitScript() : UnitScript("Leech_UnitScript") {} - void OnDamage(Unit* attacker, Unit* victim, uint32& damage) override + void OnDamage(Unit *attacker, Unit *victim, uint32 &damage) override { if (!sConfigMgr->GetOption("Leech.Enable", true) || !attacker) - { return; - } bool isPet = attacker->GetOwner() && attacker->GetOwner()->GetTypeId() == TYPEID_PLAYER; if (!isPet && attacker->GetTypeId() != TYPEID_PLAYER) - { return; - } - Player* player = isPet ? attacker->GetOwner()->ToPlayer() : attacker->ToPlayer(); - -uint32 requiredItem = sConfigMgr->GetOption("Leech.RequiredItemId", 0u); -if (requiredItem != 0) - { - if (!player || !player->HasItemCount(requiredItem, 1, false )) - { - return; - } - } -if (sConfigMgr->GetOption("Leech.DungeonsOnly", true) && !(player->GetMap()->IsDungeon())) - { + Player *player = isPet ? attacker->GetOwner()->ToPlayer() : attacker->ToPlayer(); + if (!player) return; + + if (sConfigMgr->GetOption("Leech.DungeonsOnly", true) && !player->GetMap()->IsDungeon()) + return; + uint32 requiredItem = sConfigMgr->GetOption("Leech.RequiredItemId", 0u); + if (requiredItem != 0) + { + if (!player->HasItemCount(requiredItem, 1, false)) + return; } + if (damage == 0) + return; + auto leechAmount = sConfigMgr->GetOption("Leech.Amount", 0.05f); auto bp1 = static_cast(leechAmount * float(damage)); player->CastCustomSpell(attacker, SPELL_HEAL, &bp1, nullptr, nullptr, true); } }; - // Add all scripts in one void AddSC_mod_leech() {