From de501afb1c5566b9cebd5d3e2aaaeafee463a215 Mon Sep 17 00:00:00 2001 From: p2r3 Date: Thu, 28 Aug 2025 02:04:20 +0300 Subject: [PATCH] fix wrong player handles in player combat --- src/procedures.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/procedures.c b/src/procedures.c index c9add48..9101bfd 100644 --- a/src/procedures.c +++ b/src/procedures.c @@ -935,15 +935,9 @@ void spawnMob (uint8_t type, short x, uint8_t y, short z, uint8_t health) { void hurtEntity (int entity_id, int attacker_id, uint8_t damage_type, uint8_t damage) { - // Retrieve player data if applicable - PlayerData *player; - if (attacker_id < 65536 && attacker_id != -1) { - if (getPlayerData(attacker_id, &player)) return; - } else if (entity_id < 65536) { - if (getPlayerData(entity_id, &player)) return; - } - if (attacker_id < 65536 && attacker_id != -1) { // Attacker is a player + PlayerData *player; + if (getPlayerData(attacker_id, &player)) return; // Check if attack cooldown flag is set if (player->flags & 0x01) return; // Scale damage based on held item @@ -963,6 +957,9 @@ void hurtEntity (int entity_id, int attacker_id, uint8_t damage_type, uint8_t da uint8_t entity_died = false; if (entity_id < 65536) { // The attacked entity is a player + PlayerData *player; + if (getPlayerData(entity_id, &player)) return; + // Update health on the server if (player->health <= damage) { player->health = 0; entity_died = true; @@ -977,13 +974,17 @@ void hurtEntity (int entity_id, int attacker_id, uint8_t damage_type, uint8_t da mob->y = 0; entity_died = true; // Handle mob drops - if (attacker_id < 65536) switch (mob->type) { - case 25: givePlayerItem(player, I_chicken, 1); break; - case 28: givePlayerItem(player, I_beef, 1 + (fast_rand() % 3)); break; - case 95: givePlayerItem(player, I_porkchop, 1 + (fast_rand() % 3)); break; - case 106: givePlayerItem(player, I_mutton, 1 + (fast_rand() & 1)); break; - case 145: givePlayerItem(player, I_rotten_flesh, (fast_rand() % 3)); break; - default: break; + if (attacker_id < 65536 && attacker_id != -1) { + PlayerData *player; + if (getPlayerData(attacker_id, &player)) return; + switch (mob->type) { + case 25: givePlayerItem(player, I_chicken, 1); break; + case 28: givePlayerItem(player, I_beef, 1 + (fast_rand() % 3)); break; + case 95: givePlayerItem(player, I_porkchop, 1 + (fast_rand() % 3)); break; + case 106: givePlayerItem(player, I_mutton, 1 + (fast_rand() & 1)); break; + case 145: givePlayerItem(player, I_rotten_flesh, (fast_rand() % 3)); break; + default: break; + } } } else mob->data -= damage; }