Browse Source

Change Player::getId() and MyPlayerId to uint8_t

pull/6854/head
obligaron 2 years ago
parent
commit
fae6b3d817
  1. 2
      Source/inv.cpp
  2. 10
      Source/missiles.cpp
  3. 2
      Source/missiles.h
  4. 2
      Source/monster.cpp
  5. 16
      Source/msg.cpp
  6. 4
      Source/msg.h
  7. 19
      Source/player.cpp
  8. 4
      Source/player.h
  9. 2
      Source/qol/autopickup.cpp
  10. 2
      Source/track.cpp

2
Source/inv.cpp

@ -2131,7 +2131,7 @@ void DoTelekinesis()
if (ObjectUnderCursor != nullptr && !ObjectUnderCursor->IsDisabled()) if (ObjectUnderCursor != nullptr && !ObjectUnderCursor->IsDisabled())
NetSendCmdLoc(MyPlayerId, true, CMD_OPOBJT, cursPosition); NetSendCmdLoc(MyPlayerId, true, CMD_OPOBJT, cursPosition);
if (pcursitem != -1) if (pcursitem != -1)
NetSendCmdGItem(true, CMD_REQUESTAGITEM, static_cast<uint8_t>(MyPlayerId), pcursitem); NetSendCmdGItem(true, CMD_REQUESTAGITEM, *MyPlayer, pcursitem);
if (pcursmonst != -1) { if (pcursmonst != -1) {
auto &monter = Monsters[pcursmonst]; auto &monter = Monsters[pcursmonst];
if (!M_Talker(monter) && monter.talkMsg == TEXT_NONE) if (!M_Talker(monter) && monter.talkMsg == TEXT_NONE)

10
Source/missiles.cpp

@ -281,10 +281,8 @@ bool MonsterMHit(int pnum, int monsterId, int mindam, int maxdam, int dist, Miss
return true; 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) if (sgGameInitInfo.bFriendlyFire == 0 && player.friendlyMode)
return false; return false;
@ -366,7 +364,7 @@ bool Plr2PlrMHit(const Player &player, int p, int mindam, int maxdam, int dist,
if (resper > 0) { if (resper > 0) {
dam -= (dam * resper) / 100; dam -= (dam * resper) / 100;
if (&player == MyPlayer) if (&player == MyPlayer)
NetSendCmdDamage(true, p, dam, damageType); NetSendCmdDamage(true, target, dam, damageType);
target.Say(HeroSpeech::ArghClang); target.Say(HeroSpeech::ArghClang);
return true; return true;
} }
@ -376,7 +374,7 @@ bool Plr2PlrMHit(const Player &player, int p, int mindam, int maxdam, int dist,
*blocked = true; *blocked = true;
} else { } else {
if (&player == MyPlayer) if (&player == MyPlayer)
NetSendCmdDamage(true, p, dam, damageType); NetSendCmdDamage(true, target, dam, damageType);
StartPlrHit(target, dam, false); 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_BOTH && !missile.IsTrap()) {
if (missile._micaster == TARGET_MONSTERS) { if (missile._micaster == TARGET_MONSTERS) {
if ((pid - 1) != missile._misource) 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 { } else {
Monster &monster = Monsters[missile._misource]; Monster &monster = Monsters[missile._misource];
isPlayerHit = PlayerMHit(pid - 1, &monster, missile._midist, minDamage, maxDamage, missile._mitype, damageType, isDamageShifted, DeathReason::MonsterOrTrap, &blocked); isPlayerHit = PlayerMHit(pid - 1, &monster, missile._midist, minDamage, maxDamage, missile._mitype, damageType, isDamageShifted, DeathReason::MonsterOrTrap, &blocked);

2
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, mienemy_type micaster, const Player &player, int midam, int spllvl,
Missile *parent = nullptr, std::optional<SfxID> lSFX = std::nullopt) Missile *parent = nullptr, std::optional<SfxID> lSFX = std::nullopt)
{ {
return AddMissile(src, dst, midir, mitype, micaster, static_cast<int>(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, inline Missile *AddMissile(WorldTilePosition src, WorldTilePosition dst, Direction midir, MissileID mitype,
mienemy_type micaster, const Monster &monster, int midam, int spllvl, mienemy_type micaster, const Monster &monster, int midam, int spllvl,

2
Source/monster.cpp

@ -3731,7 +3731,7 @@ void M_StartHit(Monster &monster, const Player &player, int dam)
{ {
monster.tag(player); monster.tag(player);
if (IsHardHit(monster, dam)) { if (IsHardHit(monster, dam)) {
monster.enemy = static_cast<uint8_t>(player.getId()); monster.enemy = player.getId();
monster.enemyPosition = player.position.future; monster.enemyPosition = player.position.future;
monster.flags &= ~MFLAG_TARGETS_MONSTER; monster.flags &= ~MFLAG_TARGETS_MONSTER;
if (monster.mode != MonsterMode::Petrified) { if (monster.mode != MonsterMode::Petrified) {

16
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)); 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; TCmdGItem cmd;
memcpy(&cmd, &item, sizeof(cmd)); memcpy(&cmd, &item, sizeof(cmd));
cmd.bCmd = bCmd; cmd.bCmd = bCmd;
cmd.bPnum = pnum; cmd.bPnum = pnum;
cmd.bMaster = mast; cmd.bMaster = player.getId();
int ticks = SDL_GetTicks(); int ticks = SDL_GetTicks();
if (cmd.dwTime == 0) if (cmd.dwTime == 0)
@ -1168,7 +1168,7 @@ size_t OnRequestGetItem(const TCmd *pCmd, Player &player)
else else
InvGetItem(*MyPlayer, ii); InvGetItem(*MyPlayer, ii);
SetItemRecord(dwSeed, wCI, wIndx); SetItemRecord(dwSeed, wCI, wIndx);
} else if (!NetSendCmdReq2(CMD_REQUESTGITEM, MyPlayerId, message.bPnum, message)) { } else if (!NetSendCmdReq2(CMD_REQUESTGITEM, *MyPlayer, message.bPnum, message)) {
NetSendCmdExtra(message); NetSendCmdExtra(message);
} }
} }
@ -1244,7 +1244,7 @@ size_t OnRequestAutoGetItem(const TCmd *pCmd, Player &player)
else else
AutoGetItem(*MyPlayer, &Items[message.bCursitem], message.bCursitem); AutoGetItem(*MyPlayer, &Items[message.bCursitem], message.bCursitem);
SetItemRecord(dwSeed, wCI, wIndx); SetItemRecord(dwSeed, wCI, wIndx);
} else if (!NetSendCmdReq2(CMD_REQUESTAGITEM, MyPlayerId, message.bPnum, message)) { } else if (!NetSendCmdReq2(CMD_REQUESTAGITEM, *MyPlayer, message.bPnum, message)) {
NetSendCmdExtra(message); NetSendCmdExtra(message);
} }
} }
@ -2968,8 +2968,10 @@ void NetSendCmdQuest(bool bHiPri, const Quest &quest)
NetSendLoPri(MyPlayerId, (std::byte *)&cmd, sizeof(cmd)); 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; TCmdGItem cmd;
cmd.bCmd = bCmd; cmd.bCmd = bCmd;
@ -3080,12 +3082,12 @@ void NetSendCmdChBeltItem(bool bHiPri, int beltIndex)
NetSendLoPri(MyPlayerId, (std::byte *)&cmd, sizeof(cmd)); 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; TCmdDamage cmd;
cmd.bCmd = CMD_PLRDAMAGE; cmd.bCmd = CMD_PLRDAMAGE;
cmd.bPlr = bPlr; cmd.bPlr = player.getId();
cmd.dwDam = dwDam; cmd.dwDam = dwDam;
cmd.damageType = damageType; cmd.damageType = damageType;
if (bHiPri) if (bHiPri)

4
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 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 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 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 NetSendCmdPItem(bool bHiPri, _cmd_id bCmd, Point position, const Item &item);
void NetSyncInvItem(const Player &player, int invListIndex); void NetSyncInvItem(const Player &player, int invListIndex);
void NetSendCmdChItem(bool bHiPri, uint8_t bLoc, bool forceSpellChange = false); void NetSendCmdChItem(bool bHiPri, uint8_t bLoc, bool forceSpellChange = false);
void NetSendCmdDelItem(bool bHiPri, uint8_t bLoc); void NetSendCmdDelItem(bool bHiPri, uint8_t bLoc);
void NetSendCmdChInvItem(bool bHiPri, int invGridIndex); void NetSendCmdChInvItem(bool bHiPri, int invGridIndex);
void NetSendCmdChBeltItem(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 NetSendCmdMonDmg(bool bHiPri, uint16_t wMon, uint32_t dwDam);
void NetSendCmdString(uint32_t pmask, const char *pszStr); void NetSendCmdString(uint32_t pmask, const char *pszStr);
void delta_close_portal(const Player &player); void delta_close_portal(const Player &player);

19
Source/player.cpp

@ -50,7 +50,7 @@
namespace devilution { namespace devilution {
size_t MyPlayerId; uint8_t MyPlayerId;
Player *MyPlayer; Player *MyPlayer;
std::vector<Player> Players; std::vector<Player> Players;
Player *InspectPlayer; Player *InspectPlayer;
@ -83,7 +83,6 @@ void WalkNorthwards(Player &player, const DirectionSettings &walkParams)
void WalkSouthwards(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.temp = player.position.tile;
player.position.tile = player.position.future; // Move player to the next tile to maintain correct render order player.position.tile = player.position.future; // Move player to the next tile to maintain correct render order
player.occupyTile(player.position.temp, true); 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; Point const nextPosition = player.position.tile + walkParams.map;
const size_t playerId = player.getId();
player.occupyTile(player.position.tile, true); player.occupyTile(player.position.tile, true);
player.occupyTile(player.position.future, false); player.occupyTile(player.position.future, false);
@ -798,7 +796,7 @@ bool PlrHitPlr(Player &attacker, Player &target)
RedrawComponent(PanelDrawComponent::Health); RedrawComponent(PanelDrawComponent::Health);
} }
if (&attacker == MyPlayer) { if (&attacker == MyPlayer) {
NetSendCmdDamage(true, target.getId(), skdam, DamageType::Physical); NetSendCmdDamage(true, target, skdam, DamageType::Physical);
} }
StartPlrHit(target, skdam, false); StartPlrHit(target, skdam, false);
@ -1343,7 +1341,7 @@ void CheckNewPath(Player &player, bool pmWillBeCalled)
x = std::abs(player.position.tile.x - item->position.x); x = std::abs(player.position.tile.x - item->position.x);
y = std::abs(player.position.tile.y - item->position.y); y = std::abs(player.position.tile.y - item->position.y);
if (x <= 1 && y <= 1 && pcurs == CURSOR_HAND && !item->_iRequest) { 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; item->_iRequest = true;
} }
} }
@ -1353,7 +1351,7 @@ void CheckNewPath(Player &player, bool pmWillBeCalled)
x = std::abs(player.position.tile.x - item->position.x); x = std::abs(player.position.tile.x - item->position.x);
y = std::abs(player.position.tile.y - item->position.y); y = std::abs(player.position.tile.y - item->position.y);
if (x <= 1 && y <= 1 && pcurs == CURSOR_HAND) { if (x <= 1 && y <= 1 && pcurs == CURSOR_HAND) {
NetSendCmdGItem(true, CMD_REQUESTAGITEM, player.getId(), targetId); NetSendCmdGItem(true, CMD_REQUESTAGITEM, player, targetId);
} }
} }
break; break;
@ -1614,7 +1612,7 @@ void Player::RemoveInvItem(int iv, bool calcScrolls)
for (size_t i = 0; i < InventoryGridCells; i++) { for (size_t i = 0; i < InventoryGridCells; i++) {
int8_t itemIndex = InvGrid[i]; int8_t itemIndex = InvGrid[i];
if (std::abs(itemIndex) - 1 == iv) { if (std::abs(itemIndex) - 1 == iv) {
NetSendCmdParam1(false, CMD_DELINVITEMS, i); NetSendCmdParam1(false, CMD_DELINVITEMS, static_cast<uint16_t>(i));
break; break;
} }
} }
@ -1662,9 +1660,9 @@ void Player::RemoveSpdBarItem(int iv)
RedrawEverything(); RedrawEverything();
} }
[[nodiscard]] size_t Player::getId() const [[nodiscard]] uint8_t Player::getId() const
{ {
return std::distance<const Player *>(&Players[0], this); return static_cast<uint8_t>(std::distance<const Player *>(&Players[0], this));
} }
int Player::GetBaseAttributeValue(CharacterAttribute attribute) const int Player::GetBaseAttributeValue(CharacterAttribute attribute) const
@ -2072,7 +2070,8 @@ int32_t Player::calculateBaseMana() const
void Player::occupyTile(Point position, bool isMoving) const void Player::occupyTile(Point position, bool isMoving) const
{ {
int16_t id = static_cast<int16_t>(this->getId() + 1); int16_t id = this->getId();
id += 1;
dPlayer[position.x][position.y] = isMoving ? -id : id; dPlayer[position.x][position.y] = isMoving ? -id : id;
} }

4
Source/player.h

@ -459,7 +459,7 @@ public:
/** /**
* @brief Returns the network identifier for this player * @brief Returns the network identifier for this player
*/ */
[[nodiscard]] size_t getId() const; [[nodiscard]] uint8_t getId() const;
void RemoveSpdBarItem(int iv); void RemoveSpdBarItem(int iv);
@ -893,7 +893,7 @@ public:
void occupyTile(Point position, bool isMoving) const; 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 Player *MyPlayer;
extern DVL_API_FOR_TEST std::vector<Player> Players; extern DVL_API_FOR_TEST std::vector<Player> Players;
/** @brief What Player items and stats should be displayed? Normally this is identical to MyPlayer but can differ when /inspect was used. */ /** @brief What Player items and stats should be displayed? Normally this is identical to MyPlayer but can differ when /inspect was used. */

2
Source/qol/autopickup.cpp

@ -103,7 +103,7 @@ void AutoPickup(const Player &player)
int itemIndex = dItem[tile.x][tile.y] - 1; int itemIndex = dItem[tile.x][tile.y] - 1;
auto &item = Items[itemIndex]; auto &item = Items[itemIndex];
if (DoPickup(item)) { if (DoPickup(item)) {
NetSendCmdGItem(true, CMD_REQUESTAGITEM, static_cast<uint8_t>(player.getId()), itemIndex); NetSendCmdGItem(true, CMD_REQUESTAGITEM, player, itemIndex);
item._iRequest = true; item._iRequest = true;
} }
} }

2
Source/track.cpp

@ -92,7 +92,7 @@ void RepeatMouseAction()
break; break;
case MouseActionType::AttackPlayerTarget: case MouseActionType::AttackPlayerTarget:
if (PlayerUnderCursor != nullptr && !myPlayer.friendlyMode) if (PlayerUnderCursor != nullptr && !myPlayer.friendlyMode)
NetSendCmdParam1(true, rangedAttack ? CMD_RATTACKPID : CMD_ATTACKPID, static_cast<uint16_t>(PlayerUnderCursor->getId())); NetSendCmdParam1(true, rangedAttack ? CMD_RATTACKPID : CMD_ATTACKPID, PlayerUnderCursor->getId());
break; break;
case MouseActionType::Spell: case MouseActionType::Spell:
if (ControlMode != ControlTypes::KeyboardAndMouse) { if (ControlMode != ControlTypes::KeyboardAndMouse) {

Loading…
Cancel
Save