diff --git a/Source/monster.cpp b/Source/monster.cpp index 61085bb57..b79d3f7b8 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -1061,7 +1061,7 @@ void MonsterHitMonster(int mid, int i, int dam) if (i >= 0 && i < MAX_PLRS) monster.mWhoHit |= 1 << i; - delta_monster_hp(mid, monster._mhitpoints, currlevel); + delta_monster_hp(mid, monster._mhitpoints, *MyPlayer); NetSendCmdMonDmg(false, mid, dam); PlayEffect(monster, 1); @@ -1142,7 +1142,7 @@ void StartDeathFromMonster(int i, int mid) assert(mid >= 0 && mid < MAXMONSTERS); Monster &monster = Monsters[mid]; - delta_kill_monster(mid, monster.position.tile, currlevel); + delta_kill_monster(mid, monster.position.tile, *MyPlayer); NetSendCmdLocParam1(false, CMD_MONSTDEATH, monster.position.tile, mid); Direction md = GetDirection(monster.position.tile, killer.position.tile); @@ -3976,7 +3976,7 @@ void M_StartHit(int i, int pnum, int dam) if (pnum >= 0) monster.mWhoHit |= 1 << pnum; if (pnum == MyPlayerId) { - delta_monster_hp(i, monster._mhitpoints, currlevel); + delta_monster_hp(i, monster._mhitpoints, *MyPlayer); NetSendCmdMonDmg(false, i, dam); } PlayEffect(monster, 1); @@ -4007,7 +4007,7 @@ void M_StartKill(int i, int pnum) auto &monster = Monsters[i]; if (MyPlayerId == pnum) { - delta_kill_monster(i, monster.position.tile, currlevel); + delta_kill_monster(i, monster.position.tile, *MyPlayer); if (i != pnum) { NetSendCmdLocParam1(false, CMD_MONSTDEATH, monster.position.tile, i); } else { diff --git a/Source/msg.cpp b/Source/msg.cpp index cbd436b6f..b66f45b56 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -1519,7 +1519,7 @@ DWORD OnMonstDeath(const TCmd *pCmd, int pnum) Player &player = Players[pnum]; if (player.isOnActiveLevel()) M_SyncStartKill(message.wParam1, position, pnum); - delta_kill_monster(message.wParam1, position, player.plrlevel); + delta_kill_monster(message.wParam1, position, player); } return sizeof(message); @@ -1533,9 +1533,10 @@ DWORD OnKillGolem(const TCmd *pCmd, int pnum) if (gbBufferMsgs == 1) SendPacket(pnum, &message, sizeof(message)); else if (pnum != MyPlayerId && InDungeonBounds(position) && message.wParam1 < NUMLEVELS) { - if (currlevel == message.wParam1) + Player &player = Players[pnum]; + if (player.isOnActiveLevel()) M_SyncStartKill(pnum, position, pnum); - delta_kill_monster(pnum, position, message.wParam1); + delta_kill_monster(pnum, position, player); } return sizeof(message); @@ -1581,7 +1582,7 @@ DWORD OnMonstDamage(const TCmd *pCmd, int pnum) monster._mhitpoints -= message.dwDam; if ((monster._mhitpoints >> 6) < 1) monster._mhitpoints = 1 << 6; - delta_monster_hp(message.wMon, monster._mhitpoints, player.plrlevel); + delta_monster_hp(message.wMon, monster._mhitpoints, player); } } } @@ -2191,26 +2192,26 @@ void delta_init() deltaload = false; } -void delta_kill_monster(int mi, Point position, uint8_t bLevel) +void delta_kill_monster(int mi, Point position, const Player &player) { if (!gbIsMultiplayer) return; sgbDeltaChanged = true; - DMonsterStr *pD = &GetDeltaLevel(bLevel).monster[mi]; + DMonsterStr *pD = &GetDeltaLevel(player).monster[mi]; pD->_mx = position.x; pD->_my = position.y; pD->_mdir = Monsters[mi]._mdir; pD->_mhitpoints = 0; } -void delta_monster_hp(int mi, int hp, uint8_t bLevel) +void delta_monster_hp(int mi, int hp, const Player &player) { if (!gbIsMultiplayer) return; sgbDeltaChanged = true; - DMonsterStr *pD = &GetDeltaLevel(bLevel).monster[mi]; + DMonsterStr *pD = &GetDeltaLevel(player).monster[mi]; if (pD->_mhitpoints > hp) pD->_mhitpoints = hp; } diff --git a/Source/msg.h b/Source/msg.h index b3c0218eb..1c9d8cf8c 100644 --- a/Source/msg.h +++ b/Source/msg.h @@ -721,8 +721,8 @@ void run_delta_info(); void DeltaExportData(int pnum); void DeltaSyncJunk(); void delta_init(); -void delta_kill_monster(int mi, Point position, uint8_t bLevel); -void delta_monster_hp(int mi, int hp, uint8_t bLevel); +void delta_kill_monster(int mi, Point position, const Player &player); +void delta_monster_hp(int mi, int hp, const Player &player); void delta_sync_monster(const TSyncMonster &monsterSync, uint8_t level); void DeltaAddItem(int ii); void DeltaSaveLevel();