diff --git a/Source/inv.cpp b/Source/inv.cpp index 7b3b3781b2e..e0b20be9c96 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -2131,7 +2131,7 @@ void DoTelekinesis() if (ObjectUnderCursor != nullptr && !ObjectUnderCursor->IsDisabled()) NetSendCmdLoc(MyPlayerId, true, CMD_OPOBJT, cursPosition); if (pcursitem != -1) - NetSendCmdGItem(true, CMD_REQUESTAGITEM, static_cast(MyPlayerId), pcursitem); + NetSendCmdGItem(true, CMD_REQUESTAGITEM, *MyPlayer, pcursitem); if (pcursmonst != -1) { auto &monter = Monsters[pcursmonst]; if (!M_Talker(monter) && monter.talkMsg == TEXT_NONE) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 99a7cccd423..ce8d1b1bfad 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -281,10 +281,8 @@ bool MonsterMHit(int pnum, int monsterId, int mindam, int maxdam, int dist, Miss return true; } -bool Plr2PlrMHit(const Player &player, int p, int mindam, int maxdam, int dist, MissileID mtype, DamageType damageType, bool shift, bool *blocked) +bool Plr2PlrMHit(const Player &player, Player &target, int mindam, int maxdam, int dist, MissileID mtype, DamageType damageType, bool shift, bool *blocked) { - Player &target = Players[p]; - if (sgGameInitInfo.bFriendlyFire == 0 && player.friendlyMode) return false; @@ -366,7 +364,7 @@ bool Plr2PlrMHit(const Player &player, int p, int mindam, int maxdam, int dist, if (resper > 0) { dam -= (dam * resper) / 100; if (&player == MyPlayer) - NetSendCmdDamage(true, p, dam, damageType); + NetSendCmdDamage(true, target, dam, damageType); target.Say(HeroSpeech::ArghClang); return true; } @@ -376,7 +374,7 @@ bool Plr2PlrMHit(const Player &player, int p, int mindam, int maxdam, int dist, *blocked = true; } else { if (&player == MyPlayer) - NetSendCmdDamage(true, p, dam, damageType); + NetSendCmdDamage(true, target, dam, damageType); StartPlrHit(target, dam, false); } @@ -441,7 +439,7 @@ void CheckMissileCol(Missile &missile, DamageType damageType, int minDamage, int if (missile._micaster != TARGET_BOTH && !missile.IsTrap()) { if (missile._micaster == TARGET_MONSTERS) { if ((pid - 1) != missile._misource) - isPlayerHit = Plr2PlrMHit(Players[missile._misource], pid - 1, minDamage, maxDamage, missile._midist, missile._mitype, damageType, isDamageShifted, &blocked); + isPlayerHit = Plr2PlrMHit(Players[missile._misource], Players[pid - 1], minDamage, maxDamage, missile._midist, missile._mitype, damageType, isDamageShifted, &blocked); } else { Monster &monster = Monsters[missile._misource]; isPlayerHit = PlayerMHit(pid - 1, &monster, missile._midist, minDamage, maxDamage, missile._mitype, damageType, isDamageShifted, DeathReason::MonsterOrTrap, &blocked); diff --git a/Source/missiles.h b/Source/missiles.h index 628526f2902..0040cec754e 100644 --- a/Source/missiles.h +++ b/Source/missiles.h @@ -399,7 +399,7 @@ inline Missile *AddMissile(WorldTilePosition src, WorldTilePosition dst, Directi mienemy_type micaster, const Player &player, int midam, int spllvl, Missile *parent = nullptr, std::optional lSFX = std::nullopt) { - return AddMissile(src, dst, midir, mitype, micaster, static_cast(player.getId()), midam, spllvl, parent, lSFX); + return AddMissile(src, dst, midir, mitype, micaster, player.getId(), midam, spllvl, parent, lSFX); } inline Missile *AddMissile(WorldTilePosition src, WorldTilePosition dst, Direction midir, MissileID mitype, mienemy_type micaster, const Monster &monster, int midam, int spllvl, diff --git a/Source/monster.cpp b/Source/monster.cpp index e691240144e..b44ece4db42 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -3731,7 +3731,7 @@ void M_StartHit(Monster &monster, const Player &player, int dam) { monster.tag(player); if (IsHardHit(monster, dam)) { - monster.enemy = static_cast(player.getId()); + monster.enemy = player.getId(); monster.enemyPosition = player.position.future; monster.flags &= ~MFLAG_TARGETS_MONSTER; if (monster.mode != MonsterMode::Petrified) { diff --git a/Source/msg.cpp b/Source/msg.cpp index 15d2695046f..b275e620eb8 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -878,14 +878,14 @@ void NetSendCmdGItem2(bool usonly, _cmd_id bCmd, uint8_t mast, uint8_t pnum, con tmsg_add((std::byte *)&cmd, sizeof(cmd)); } -bool NetSendCmdReq2(_cmd_id bCmd, uint8_t mast, uint8_t pnum, const TCmdGItem &item) +bool NetSendCmdReq2(_cmd_id bCmd, const Player &player, uint8_t pnum, const TCmdGItem &item) { TCmdGItem cmd; memcpy(&cmd, &item, sizeof(cmd)); cmd.bCmd = bCmd; cmd.bPnum = pnum; - cmd.bMaster = mast; + cmd.bMaster = player.getId(); int ticks = SDL_GetTicks(); if (cmd.dwTime == 0) @@ -1168,7 +1168,7 @@ size_t OnRequestGetItem(const TCmd *pCmd, Player &player) else InvGetItem(*MyPlayer, ii); SetItemRecord(dwSeed, wCI, wIndx); - } else if (!NetSendCmdReq2(CMD_REQUESTGITEM, MyPlayerId, message.bPnum, message)) { + } else if (!NetSendCmdReq2(CMD_REQUESTGITEM, *MyPlayer, message.bPnum, message)) { NetSendCmdExtra(message); } } @@ -1244,7 +1244,7 @@ size_t OnRequestAutoGetItem(const TCmd *pCmd, Player &player) else AutoGetItem(*MyPlayer, &Items[message.bCursitem], message.bCursitem); SetItemRecord(dwSeed, wCI, wIndx); - } else if (!NetSendCmdReq2(CMD_REQUESTAGITEM, MyPlayerId, message.bPnum, message)) { + } else if (!NetSendCmdReq2(CMD_REQUESTAGITEM, *MyPlayer, message.bPnum, message)) { NetSendCmdExtra(message); } } @@ -2968,8 +2968,10 @@ void NetSendCmdQuest(bool bHiPri, const Quest &quest) NetSendLoPri(MyPlayerId, (std::byte *)&cmd, sizeof(cmd)); } -void NetSendCmdGItem(bool bHiPri, _cmd_id bCmd, uint8_t pnum, uint8_t ii) +void NetSendCmdGItem(bool bHiPri, _cmd_id bCmd, const Player &player, uint8_t ii) { + uint8_t pnum = player.getId(); + TCmdGItem cmd; cmd.bCmd = bCmd; @@ -3080,12 +3082,12 @@ void NetSendCmdChBeltItem(bool bHiPri, int beltIndex) NetSendLoPri(MyPlayerId, (std::byte *)&cmd, sizeof(cmd)); } -void NetSendCmdDamage(bool bHiPri, uint8_t bPlr, uint32_t dwDam, DamageType damageType) +void NetSendCmdDamage(bool bHiPri, const Player &player, uint32_t dwDam, DamageType damageType) { TCmdDamage cmd; cmd.bCmd = CMD_PLRDAMAGE; - cmd.bPlr = bPlr; + cmd.bPlr = player.getId(); cmd.dwDam = dwDam; cmd.damageType = damageType; if (bHiPri) diff --git a/Source/msg.h b/Source/msg.h index 55fcbec5f70..6576a772d2e 100644 --- a/Source/msg.h +++ b/Source/msg.h @@ -753,14 +753,14 @@ void NetSendCmdParam1(bool bHiPri, _cmd_id bCmd, uint16_t wParam1); void NetSendCmdParam2(bool bHiPri, _cmd_id bCmd, uint16_t wParam1, uint16_t wParam2); void NetSendCmdParam5(bool bHiPri, _cmd_id bCmd, uint16_t wParam1, uint16_t wParam2, uint16_t wParam3, uint16_t wParam4, uint16_t wParam5); void NetSendCmdQuest(bool bHiPri, const Quest &quest); -void NetSendCmdGItem(bool bHiPri, _cmd_id bCmd, uint8_t pnum, uint8_t ii); +void NetSendCmdGItem(bool bHiPri, _cmd_id bCmd, const Player &player, uint8_t ii); void NetSendCmdPItem(bool bHiPri, _cmd_id bCmd, Point position, const Item &item); void NetSyncInvItem(const Player &player, int invListIndex); void NetSendCmdChItem(bool bHiPri, uint8_t bLoc, bool forceSpellChange = false); void NetSendCmdDelItem(bool bHiPri, uint8_t bLoc); void NetSendCmdChInvItem(bool bHiPri, int invGridIndex); void NetSendCmdChBeltItem(bool bHiPri, int invGridIndex); -void NetSendCmdDamage(bool bHiPri, uint8_t bPlr, uint32_t dwDam, DamageType damageType); +void NetSendCmdDamage(bool bHiPri, const Player &player, uint32_t dwDam, DamageType damageType); void NetSendCmdMonDmg(bool bHiPri, uint16_t wMon, uint32_t dwDam); void NetSendCmdString(uint32_t pmask, const char *pszStr); void delta_close_portal(const Player &player); diff --git a/Source/player.cpp b/Source/player.cpp index e6c2b7b959a..bd9571fbb02 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -50,7 +50,7 @@ namespace devilution { -size_t MyPlayerId; +uint8_t MyPlayerId; Player *MyPlayer; std::vector Players; Player *InspectPlayer; @@ -83,7 +83,6 @@ void WalkNorthwards(Player &player, const DirectionSettings &walkParams) void WalkSouthwards(Player &player, const DirectionSettings & /*walkParams*/) { - const size_t playerId = player.getId(); player.position.temp = player.position.tile; player.position.tile = player.position.future; // Move player to the next tile to maintain correct render order player.occupyTile(player.position.temp, true); @@ -97,7 +96,6 @@ void WalkSideways(Player &player, const DirectionSettings &walkParams) { Point const nextPosition = player.position.tile + walkParams.map; - const size_t playerId = player.getId(); player.occupyTile(player.position.tile, true); player.occupyTile(player.position.future, false); @@ -798,7 +796,7 @@ bool PlrHitPlr(Player &attacker, Player &target) RedrawComponent(PanelDrawComponent::Health); } if (&attacker == MyPlayer) { - NetSendCmdDamage(true, target.getId(), skdam, DamageType::Physical); + NetSendCmdDamage(true, target, skdam, DamageType::Physical); } StartPlrHit(target, skdam, false); @@ -1343,7 +1341,7 @@ void CheckNewPath(Player &player, bool pmWillBeCalled) x = std::abs(player.position.tile.x - item->position.x); y = std::abs(player.position.tile.y - item->position.y); if (x <= 1 && y <= 1 && pcurs == CURSOR_HAND && !item->_iRequest) { - NetSendCmdGItem(true, CMD_REQUESTGITEM, player.getId(), targetId); + NetSendCmdGItem(true, CMD_REQUESTGITEM, player, targetId); item->_iRequest = true; } } @@ -1353,7 +1351,7 @@ void CheckNewPath(Player &player, bool pmWillBeCalled) x = std::abs(player.position.tile.x - item->position.x); y = std::abs(player.position.tile.y - item->position.y); if (x <= 1 && y <= 1 && pcurs == CURSOR_HAND) { - NetSendCmdGItem(true, CMD_REQUESTAGITEM, player.getId(), targetId); + NetSendCmdGItem(true, CMD_REQUESTAGITEM, player, targetId); } } break; @@ -1614,7 +1612,7 @@ void Player::RemoveInvItem(int iv, bool calcScrolls) for (size_t i = 0; i < InventoryGridCells; i++) { int8_t itemIndex = InvGrid[i]; if (std::abs(itemIndex) - 1 == iv) { - NetSendCmdParam1(false, CMD_DELINVITEMS, i); + NetSendCmdParam1(false, CMD_DELINVITEMS, static_cast(i)); break; } } @@ -1662,9 +1660,9 @@ void Player::RemoveSpdBarItem(int iv) RedrawEverything(); } -[[nodiscard]] size_t Player::getId() const +[[nodiscard]] uint8_t Player::getId() const { - return std::distance(&Players[0], this); + return static_cast(std::distance(&Players[0], this)); } int Player::GetBaseAttributeValue(CharacterAttribute attribute) const @@ -2072,7 +2070,8 @@ int32_t Player::calculateBaseMana() const void Player::occupyTile(Point position, bool isMoving) const { - int16_t id = static_cast(this->getId() + 1); + int16_t id = this->getId(); + id += 1; dPlayer[position.x][position.y] = isMoving ? -id : id; } diff --git a/Source/player.h b/Source/player.h index 05d1e140b42..f98a72d98bd 100644 --- a/Source/player.h +++ b/Source/player.h @@ -459,7 +459,7 @@ struct Player { /** * @brief Returns the network identifier for this player */ - [[nodiscard]] size_t getId() const; + [[nodiscard]] uint8_t getId() const; void RemoveSpdBarItem(int iv); @@ -893,7 +893,7 @@ struct Player { void occupyTile(Point position, bool isMoving) const; }; -extern DVL_API_FOR_TEST size_t MyPlayerId; +extern DVL_API_FOR_TEST uint8_t MyPlayerId; extern DVL_API_FOR_TEST Player *MyPlayer; extern DVL_API_FOR_TEST std::vector Players; /** @brief What Player items and stats should be displayed? Normally this is identical to MyPlayer but can differ when /inspect was used. */ diff --git a/Source/qol/autopickup.cpp b/Source/qol/autopickup.cpp index f86bf60076e..aef078ac6d8 100644 --- a/Source/qol/autopickup.cpp +++ b/Source/qol/autopickup.cpp @@ -103,7 +103,7 @@ void AutoPickup(const Player &player) int itemIndex = dItem[tile.x][tile.y] - 1; auto &item = Items[itemIndex]; if (DoPickup(item)) { - NetSendCmdGItem(true, CMD_REQUESTAGITEM, static_cast(player.getId()), itemIndex); + NetSendCmdGItem(true, CMD_REQUESTAGITEM, player, itemIndex); item._iRequest = true; } } diff --git a/Source/track.cpp b/Source/track.cpp index bc7403926eb..f139d577fb8 100644 --- a/Source/track.cpp +++ b/Source/track.cpp @@ -92,7 +92,7 @@ void RepeatMouseAction() break; case MouseActionType::AttackPlayerTarget: if (PlayerUnderCursor != nullptr && !myPlayer.friendlyMode) - NetSendCmdParam1(true, rangedAttack ? CMD_RATTACKPID : CMD_ATTACKPID, static_cast(PlayerUnderCursor->getId())); + NetSendCmdParam1(true, rangedAttack ? CMD_RATTACKPID : CMD_ATTACKPID, PlayerUnderCursor->getId()); break; case MouseActionType::Spell: if (ControlMode != ControlTypes::KeyboardAndMouse) {