From e1465eb98ef6ba80b31f3ae773e0ac22713acff2 Mon Sep 17 00:00:00 2001 From: Paco Date: Tue, 3 Mar 2026 00:51:58 -0600 Subject: [PATCH 1/2] Fix: Frags in Summon Kill The current problem is that if you kill a player with your summon, you won't get a frag for it. This pull request check for your kills with the summon giving you a frag to avoid abuses in game. I have no idea if frags don't count in summon kill but it doesn't seems fair to me. I 'll leave here this in case anyone wants to use it. I hope it's merged into main. I've tested for a while and no problems so far. --- src/creatures/creature.cpp | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/creatures/creature.cpp b/src/creatures/creature.cpp index 9e0724e69..ffd8f9fdd 100644 --- a/src/creatures/creature.cpp +++ b/src/creatures/creature.cpp @@ -508,12 +508,22 @@ void Creature::onDeath() { const auto &lastHitCreature = g_game().getCreatureByID(lastHitCreatureId); std::shared_ptr lastHitCreatureMaster; if (lastHitCreature && getPlayer()) { - /** - * @deprecated -- This is here to trigger the deprecated onKill events in lua - */ - lastHitCreature->deprecatedOnKilledCreature(getCreature(), true); - lastHitUnjustified = lastHitCreature->onKilledPlayer(getPlayer(), true); - lastHitCreatureMaster = lastHitCreature->getMaster(); + std::shared_ptr killerPlayer = nullptr; + + if (lastHitCreature->getPlayer()) { + killerPlayer = lastHitCreature->getPlayer(); + } else if (lastHitCreature->isSummon() && lastHitCreature->getMaster() && lastHitCreature->getMaster()->getPlayer()) { + killerPlayer = lastHitCreature->getMaster()->getPlayer(); + } + + if (killerPlayer) { + /** + * @deprecated -- This is here to trigger the deprecated onKill events in lua + */ + lastHitCreature->deprecatedOnKilledCreature(getCreature(), true); + lastHitUnjustified = killerPlayer->onKilledPlayer(getPlayer(), true); + lastHitCreatureMaster = lastHitCreature->getMaster(); + } } else { lastHitCreatureMaster = nullptr; } @@ -579,7 +589,16 @@ void Creature::onDeath() { if (const auto &monster = getMonster()) { killer->onKilledMonster(monster); } else if (const auto &player = getPlayer(); player && mostDamageCreature != killer) { - killer->onKilledPlayer(player, false); + std::shared_ptr killerPlayer = nullptr; + if (killer->getPlayer()) { + killerPlayer = killer; + } else if (killer->isSummon() && killer->getMaster() && killer->getMaster()->getPlayer()) { + killerPlayer = killer->getMaster()->getPlayer(); + } + + if (killerPlayer) { + killerPlayer->onKilledPlayer(player, false); + } } } From fe7c9ef5b649146135a2d555aae4b85e741f5fb8 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 3 Mar 2026 06:52:48 +0000 Subject: [PATCH 2/2] Code format - (Clang-format) --- src/creatures/creature.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/creatures/creature.cpp b/src/creatures/creature.cpp index ffd8f9fdd..284ee1674 100644 --- a/src/creatures/creature.cpp +++ b/src/creatures/creature.cpp @@ -509,13 +509,13 @@ void Creature::onDeath() { std::shared_ptr lastHitCreatureMaster; if (lastHitCreature && getPlayer()) { std::shared_ptr killerPlayer = nullptr; - + if (lastHitCreature->getPlayer()) { killerPlayer = lastHitCreature->getPlayer(); } else if (lastHitCreature->isSummon() && lastHitCreature->getMaster() && lastHitCreature->getMaster()->getPlayer()) { killerPlayer = lastHitCreature->getMaster()->getPlayer(); } - + if (killerPlayer) { /** * @deprecated -- This is here to trigger the deprecated onKill events in lua @@ -595,7 +595,7 @@ void Creature::onDeath() { } else if (killer->isSummon() && killer->getMaster() && killer->getMaster()->getPlayer()) { killerPlayer = killer->getMaster()->getPlayer(); } - + if (killerPlayer) { killerPlayer->onKilledPlayer(player, false); }