Reworking OnDamage to allow for better checks

This commit is contained in:
Flerp 2025-11-04 18:12:15 -08:00
parent fb88182e52
commit 9b41773110

View File

@ -7,35 +7,32 @@
class Leech_UnitScript : public UnitScript class Leech_UnitScript : public UnitScript
{ {
public: 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<bool>("Leech.Enable", true) || !attacker) if (!sConfigMgr->GetOption<bool>("Leech.Enable", true) || !attacker)
{
return; return;
}
bool isPet = attacker->GetOwner() && attacker->GetOwner()->GetTypeId() == TYPEID_PLAYER; bool isPet = attacker->GetOwner() && attacker->GetOwner()->GetTypeId() == TYPEID_PLAYER;
if (!isPet && attacker->GetTypeId() != TYPEID_PLAYER) if (!isPet && attacker->GetTypeId() != TYPEID_PLAYER)
{
return; return;
}
Player* player = isPet ? attacker->GetOwner()->ToPlayer() : attacker->ToPlayer();
Player *player = isPet ? attacker->GetOwner()->ToPlayer() : attacker->ToPlayer();
if (!player)
return;
uint32 requiredItem = sConfigMgr->GetOption<uint32>("Leech.RequiredItemId", 0u); if (sConfigMgr->GetOption<bool>("Leech.DungeonsOnly", true) && !player->GetMap()->IsDungeon())
if (requiredItem != 0) return;
{ uint32 requiredItem = sConfigMgr->GetOption<uint32>("Leech.RequiredItemId", 0u);
if (!player || !player->HasItemCount(requiredItem, 1, false )) if (requiredItem != 0)
{ {
if (!player->HasItemCount(requiredItem, 1, false))
return; return;
} }
}
if (sConfigMgr->GetOption<bool>("Leech.DungeonsOnly", true) && !(player->GetMap()->IsDungeon())) if (damage == 0)
{
return; return;
}
auto leechAmount = sConfigMgr->GetOption<float>("Leech.Amount", 0.05f); auto leechAmount = sConfigMgr->GetOption<float>("Leech.Amount", 0.05f);
auto bp1 = static_cast<int32>(leechAmount * float(damage)); auto bp1 = static_cast<int32>(leechAmount * float(damage));
@ -43,7 +40,6 @@ if (sConfigMgr->GetOption<bool>("Leech.DungeonsOnly", true) && !(player->GetMap(
} }
}; };
// Add all scripts in one // Add all scripts in one
void AddSC_mod_leech() void AddSC_mod_leech()
{ {