diff --git a/Source/msg.cpp b/Source/msg.cpp index f546a832b..1b41191aa 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -845,6 +845,65 @@ bool IsPItemValid(const TCmdPItem &message) return IsItemAvailable(message.def.wIndx); } +void PrepareItemForNetwork(const Item &item, TItem &messageItem) +{ + messageItem.bId = item._iIdentified ? 1 : 0; + messageItem.bDur = item._iDurability; + messageItem.bMDur = item._iMaxDur; + messageItem.bCh = item._iCharges; + messageItem.bMCh = item._iMaxCharges; + messageItem.wValue = item._ivalue; + messageItem.wToHit = item._iPLToHit; + messageItem.wMaxDam = item._iMaxDam; + messageItem.bMinStr = item._iMinStr; + messageItem.bMinMag = item._iMinMag; + messageItem.bMinDex = item._iMinDex; + messageItem.bAC = item._iAC; + messageItem.dwBuff = item.dwBuff; +} + +void PrepareEarForNetwork(const Item &item, TEar &ear) +{ + ear.bCursval = item._ivalue | ((item._iCurs - ICURS_EAR_SORCERER) << 6); + CopyUtf8(ear.heroname, item._iIName, sizeof(ear.heroname)); +} + +void PrepareItemForNetwork(const Item &item, TCmdGItem &message) +{ + message.def.wIndx = item.IDidx; + message.def.wCI = item._iCreateInfo; + message.def.dwSeed = item._iSeed; + + if (item.IDidx == IDI_EAR) + PrepareEarForNetwork(item, message.ear); + else + PrepareItemForNetwork(item, message.item); +} + +void PrepareItemForNetwork(const Item &item, TCmdPItem &message) +{ + message.def.wIndx = item.IDidx; + message.def.wCI = item._iCreateInfo; + message.def.dwSeed = item._iSeed; + + if (item.IDidx == IDI_EAR) + PrepareEarForNetwork(item, message.ear); + else + PrepareItemForNetwork(item, message.item); +} + +void PrepareItemForNetwork(const Item &item, TCmdChItem &message) +{ + message.def.wIndx = item.IDidx; + message.def.wCI = item._iCreateInfo; + message.def.dwSeed = item._iSeed; + + if (item.IDidx == IDI_EAR) + PrepareEarForNetwork(item, message.ear); + else + PrepareItemForNetwork(item, message.item); +} + void RecreateItem(const Player &player, const TItem &messageItem, Item &item) { RecreateItem(player, item, messageItem.wIndx, messageItem.wCI, messageItem.dwSeed, messageItem.wValue, (messageItem.dwBuff & CF_HELLFIRE) != 0); @@ -3002,28 +3061,7 @@ void NetSendCmdGItem(bool bHiPri, _cmd_id bCmd, uint8_t pnum, uint8_t ii) cmd.dwTime = 0; cmd.x = Items[ii].position.x; cmd.y = Items[ii].position.y; - cmd.def.wIndx = Items[ii].IDidx; - cmd.def.wCI = Items[ii]._iCreateInfo; - cmd.def.dwSeed = Items[ii]._iSeed; - - if (Items[ii].IDidx == IDI_EAR) { - cmd.ear.bCursval = Items[ii]._ivalue | ((Items[ii]._iCurs - ICURS_EAR_SORCERER) << 6); - CopyUtf8(cmd.ear.heroname, Items[ii]._iIName, sizeof(cmd.ear.heroname)); - } else { - cmd.item.bId = Items[ii]._iIdentified ? 1 : 0; - cmd.item.bDur = Items[ii]._iDurability; - cmd.item.bMDur = Items[ii]._iMaxDur; - cmd.item.bCh = Items[ii]._iCharges; - cmd.item.bMCh = Items[ii]._iMaxCharges; - cmd.item.wValue = Items[ii]._ivalue; - cmd.item.wToHit = Items[ii]._iPLToHit; - cmd.item.wMaxDam = Items[ii]._iMaxDam; - cmd.item.bMinStr = Items[ii]._iMinStr; - cmd.item.bMinMag = Items[ii]._iMinMag; - cmd.item.bMinDex = Items[ii]._iMinDex; - cmd.item.bAC = Items[ii]._iAC; - cmd.item.dwBuff = Items[ii].dwBuff; - } + PrepareItemForNetwork(Items[ii], cmd); if (bHiPri) NetSendHiPri(MyPlayerId, (byte *)&cmd, sizeof(cmd)); @@ -3038,28 +3076,7 @@ void NetSendCmdPItem(bool bHiPri, _cmd_id bCmd, Point position, const Item &item cmd.bCmd = bCmd; cmd.x = position.x; cmd.y = position.y; - cmd.def.wIndx = item.IDidx; - cmd.def.wCI = item._iCreateInfo; - cmd.def.dwSeed = item._iSeed; - - if (item.IDidx == IDI_EAR) { - cmd.ear.bCursval = item._ivalue | ((item._iCurs - ICURS_EAR_SORCERER) << 6); - CopyUtf8(cmd.ear.heroname, item._iIName, sizeof(cmd.ear.heroname)); - } else { - cmd.item.bId = item._iIdentified ? 1 : 0; - cmd.item.bDur = item._iDurability; - cmd.item.bMDur = item._iMaxDur; - cmd.item.bCh = item._iCharges; - cmd.item.bMCh = item._iMaxCharges; - cmd.item.wValue = item._ivalue; - cmd.item.wToHit = item._iPLToHit; - cmd.item.wMaxDam = item._iMaxDam; - cmd.item.bMinStr = item._iMinStr; - cmd.item.bMinMag = item._iMinMag; - cmd.item.bMinDex = item._iMinDex; - cmd.item.bAC = item._iAC; - cmd.item.dwBuff = item.dwBuff; - } + PrepareItemForNetwork(item, cmd); ItemLimbo = item; @@ -3077,28 +3094,7 @@ void NetSendCmdChItem(bool bHiPri, uint8_t bLoc) cmd.bCmd = CMD_CHANGEPLRITEMS; cmd.bLoc = bLoc; - cmd.def.wIndx = item.IDidx; - cmd.def.wCI = item._iCreateInfo; - cmd.def.dwSeed = item._iSeed; - - if (item.IDidx == IDI_EAR) { - cmd.ear.bCursval = item._ivalue | ((item._iCurs - ICURS_EAR_SORCERER) << 6); - CopyUtf8(cmd.ear.heroname, item._iIName, sizeof(cmd.ear.heroname)); - } else { - cmd.item.bId = item._iIdentified ? 1 : 0; - cmd.item.bDur = item._iDurability; - cmd.item.bMDur = item._iMaxDur; - cmd.item.bCh = item._iCharges; - cmd.item.bMCh = item._iMaxCharges; - cmd.item.wValue = item._ivalue; - cmd.item.wToHit = item._iPLToHit; - cmd.item.wMaxDam = item._iMaxDam; - cmd.item.bMinStr = item._iMinStr; - cmd.item.bMinMag = item._iMinMag; - cmd.item.bMinDex = item._iMinDex; - cmd.item.bAC = item._iAC; - cmd.item.dwBuff = item.dwBuff; - } + PrepareItemForNetwork(item, cmd); if (bHiPri) NetSendHiPri(MyPlayerId, (byte *)&cmd, sizeof(cmd)); @@ -3140,28 +3136,7 @@ void NetSendCmdChInvItem(bool bHiPri, int invGridIndex) cmd.bCmd = CMD_CHANGEINVITEMS; cmd.bLoc = invGridIndex; - cmd.def.wIndx = item.IDidx; - cmd.def.wCI = item._iCreateInfo; - cmd.def.dwSeed = item._iSeed; - - if (item.IDidx == IDI_EAR) { - cmd.ear.bCursval = item._ivalue | ((item._iCurs - ICURS_EAR_SORCERER) << 6); - CopyUtf8(cmd.ear.heroname, item._iIName, sizeof(cmd.ear.heroname)); - } else { - cmd.item.bId = item._iIdentified ? 1 : 0; - cmd.item.bDur = item._iDurability; - cmd.item.bMDur = item._iMaxDur; - cmd.item.bCh = item._iCharges; - cmd.item.bMCh = item._iMaxCharges; - cmd.item.wValue = item._ivalue; - cmd.item.wToHit = item._iPLToHit; - cmd.item.wMaxDam = item._iMaxDam; - cmd.item.bMinStr = item._iMinStr; - cmd.item.bMinMag = item._iMinMag; - cmd.item.bMinDex = item._iMinDex; - cmd.item.bAC = item._iAC; - cmd.item.dwBuff = item.dwBuff; - } + PrepareItemForNetwork(item, cmd); if (bHiPri) NetSendHiPri(MyPlayerId, (byte *)&cmd, sizeof(cmd)); @@ -3177,28 +3152,7 @@ void NetSendCmdChBeltItem(bool bHiPri, int beltIndex) cmd.bCmd = CMD_CHANGEBELTITEMS; cmd.bLoc = beltIndex; - cmd.def.wIndx = item.IDidx; - cmd.def.wCI = item._iCreateInfo; - cmd.def.dwSeed = item._iSeed; - - if (item.IDidx == IDI_EAR) { - cmd.ear.bCursval = item._ivalue | ((item._iCurs - ICURS_EAR_SORCERER) << 6); - CopyUtf8(cmd.ear.heroname, item._iIName, sizeof(cmd.ear.heroname)); - } else { - cmd.item.bId = item._iIdentified ? 1 : 0; - cmd.item.bDur = item._iDurability; - cmd.item.bMDur = item._iMaxDur; - cmd.item.bCh = item._iCharges; - cmd.item.bMCh = item._iMaxCharges; - cmd.item.wValue = item._ivalue; - cmd.item.wToHit = item._iPLToHit; - cmd.item.wMaxDam = item._iMaxDam; - cmd.item.bMinStr = item._iMinStr; - cmd.item.bMinMag = item._iMinMag; - cmd.item.bMinDex = item._iMinDex; - cmd.item.bAC = item._iAC; - cmd.item.dwBuff = item.dwBuff; - } + PrepareItemForNetwork(item, cmd); if (bHiPri) NetSendHiPri(MyPlayerId, (byte *)&cmd, sizeof(cmd));