You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
456 lines
8.2 KiB
456 lines
8.2 KiB
/** |
|
* @file msg.h |
|
* |
|
* Interface of function for sending and reciving network messages. |
|
*/ |
|
#pragma once |
|
|
|
#include <cstdint> |
|
|
|
#include "quests.h" |
|
#include "objects.h" |
|
#include "monster.h" |
|
#include "portal.h" |
|
#include "items.h" |
|
|
|
namespace devilution { |
|
|
|
#define MAX_SEND_STR_LEN 80 |
|
#define MAXMULTIQUESTS 10 |
|
|
|
enum _cmd_id : uint8_t { |
|
CMD_STAND, |
|
CMD_WALKXY, |
|
CMD_ACK_PLRINFO, |
|
CMD_ADDSTR, |
|
CMD_ADDMAG, |
|
CMD_ADDDEX, |
|
CMD_ADDVIT, |
|
CMD_SBSPELL, |
|
CMD_GETITEM, |
|
CMD_AGETITEM, |
|
CMD_PUTITEM, |
|
CMD_RESPAWNITEM, |
|
CMD_ATTACKXY, |
|
CMD_RATTACKXY, |
|
CMD_SPELLXY, |
|
CMD_TSPELLXY, |
|
CMD_OPOBJXY, |
|
CMD_DISARMXY, |
|
CMD_ATTACKID, |
|
CMD_ATTACKPID, |
|
CMD_RATTACKID, |
|
CMD_RATTACKPID, |
|
CMD_SPELLID, |
|
CMD_SPELLPID, |
|
CMD_TSPELLID, |
|
CMD_TSPELLPID, |
|
CMD_RESURRECT, |
|
CMD_OPOBJT, |
|
CMD_KNOCKBACK, |
|
CMD_TALKXY, |
|
CMD_NEWLVL, |
|
CMD_WARP, |
|
CMD_CHEAT_EXPERIENCE, |
|
CMD_CHEAT_SPELL_LEVEL, |
|
CMD_DEBUG, |
|
CMD_SYNCDATA, |
|
CMD_MONSTDEATH, |
|
CMD_MONSTDAMAGE, |
|
CMD_PLRDEAD, |
|
CMD_REQUESTGITEM, |
|
CMD_REQUESTAGITEM, |
|
CMD_GOTOGETITEM, |
|
CMD_GOTOAGETITEM, |
|
CMD_OPENDOOR, |
|
CMD_CLOSEDOOR, |
|
CMD_OPERATEOBJ, |
|
CMD_PLROPOBJ, |
|
CMD_BREAKOBJ, |
|
CMD_CHANGEPLRITEMS, |
|
CMD_DELPLRITEMS, |
|
CMD_PLRDAMAGE, |
|
CMD_PLRLEVEL, |
|
CMD_DROPITEM, |
|
CMD_PLAYER_JOINLEVEL, |
|
CMD_SEND_PLRINFO, |
|
CMD_SATTACKXY, |
|
CMD_ACTIVATEPORTAL, |
|
CMD_DEACTIVATEPORTAL, |
|
CMD_DLEVEL_0, |
|
CMD_DLEVEL_1, |
|
CMD_DLEVEL_2, |
|
CMD_DLEVEL_3, |
|
CMD_DLEVEL_4, |
|
CMD_DLEVEL_5, |
|
CMD_DLEVEL_6, |
|
CMD_DLEVEL_7, |
|
CMD_DLEVEL_8, |
|
CMD_DLEVEL_9, |
|
CMD_DLEVEL_10, |
|
CMD_DLEVEL_11, |
|
CMD_DLEVEL_12, |
|
CMD_DLEVEL_13, |
|
CMD_DLEVEL_14, |
|
CMD_DLEVEL_15, |
|
CMD_DLEVEL_16, |
|
CMD_DLEVEL_17, |
|
CMD_DLEVEL_18, |
|
CMD_DLEVEL_19, |
|
CMD_DLEVEL_20, |
|
CMD_DLEVEL_21, |
|
CMD_DLEVEL_22, |
|
CMD_DLEVEL_23, |
|
CMD_DLEVEL_24, |
|
CMD_DLEVEL_JUNK, |
|
CMD_DLEVEL_END, |
|
CMD_HEALOTHER, |
|
CMD_STRING, |
|
CMD_SETSTR, |
|
CMD_SETMAG, |
|
CMD_SETDEX, |
|
CMD_SETVIT, |
|
CMD_RETOWN, |
|
CMD_SPELLXYD, |
|
CMD_ITEMEXTRA, |
|
CMD_SYNCPUTITEM, |
|
CMD_KILLGOLEM, |
|
CMD_SYNCQUEST, |
|
CMD_ENDSHIELD, |
|
CMD_AWAKEGOLEM, |
|
CMD_NOVA, |
|
CMD_SETSHIELD, |
|
CMD_REMSHIELD, |
|
CMD_REFLECT, |
|
CMD_NAKRUL, |
|
CMD_OPENHIVE, |
|
CMD_OPENCRYPT, |
|
FAKE_CMD_SETID, |
|
FAKE_CMD_DROPID, |
|
NUM_CMDS, |
|
CMD_INVALID = 0xFF, |
|
}; |
|
|
|
#pragma pack(push, 1) |
|
struct TCmd { |
|
_cmd_id bCmd; |
|
}; |
|
|
|
struct TCmdLoc { |
|
_cmd_id bCmd; |
|
uint8_t x; |
|
uint8_t y; |
|
}; |
|
|
|
struct TCmdLocParam1 { |
|
_cmd_id bCmd; |
|
uint8_t x; |
|
uint8_t y; |
|
uint16_t wParam1; |
|
}; |
|
|
|
struct TCmdLocParam2 { |
|
_cmd_id bCmd; |
|
uint8_t x; |
|
uint8_t y; |
|
uint16_t wParam1; |
|
uint16_t wParam2; |
|
}; |
|
|
|
struct TCmdLocParam3 { |
|
_cmd_id bCmd; |
|
uint8_t x; |
|
uint8_t y; |
|
uint16_t wParam1; |
|
uint16_t wParam2; |
|
uint16_t wParam3; |
|
}; |
|
|
|
struct TCmdParam1 { |
|
_cmd_id bCmd; |
|
uint16_t wParam1; |
|
}; |
|
|
|
struct TCmdParam2 { |
|
_cmd_id bCmd; |
|
uint16_t wParam1; |
|
uint16_t wParam2; |
|
}; |
|
|
|
struct TCmdParam3 { |
|
_cmd_id bCmd; |
|
uint16_t wParam1; |
|
uint16_t wParam2; |
|
uint16_t wParam3; |
|
}; |
|
|
|
struct TCmdGolem { |
|
_cmd_id bCmd; |
|
uint8_t _mx; |
|
uint8_t _my; |
|
direction _mdir; |
|
int8_t _menemy; |
|
int32_t _mhitpoints; |
|
uint8_t _currlevel; |
|
}; |
|
|
|
struct TCmdQuest { |
|
_cmd_id bCmd; |
|
uint8_t q; |
|
quest_state qstate; |
|
uint8_t qlog; |
|
uint8_t qvar1; |
|
}; |
|
|
|
struct TCmdGItem { |
|
_cmd_id bCmd; |
|
uint8_t bMaster; |
|
uint8_t bPnum; |
|
uint8_t bCursitem; |
|
uint8_t bLevel; |
|
uint8_t x; |
|
uint8_t y; |
|
uint16_t wIndx; |
|
uint16_t wCI; |
|
int32_t dwSeed; |
|
uint8_t bId; |
|
uint8_t bDur; |
|
uint8_t bMDur; |
|
uint8_t bCh; |
|
uint8_t bMCh; |
|
uint16_t wValue; |
|
uint32_t dwBuff; |
|
int32_t dwTime; |
|
uint16_t wToHit; |
|
uint16_t wMaxDam; |
|
uint8_t bMinStr; |
|
uint8_t bMinMag; |
|
uint8_t bMinDex; |
|
int16_t bAC; |
|
}; |
|
|
|
struct TCmdPItem { |
|
_cmd_id bCmd; |
|
uint8_t x; |
|
uint8_t y; |
|
uint16_t wIndx; |
|
uint16_t wCI; |
|
int32_t dwSeed; |
|
uint8_t bId; |
|
uint8_t bDur; |
|
uint8_t bMDur; |
|
uint8_t bCh; |
|
uint8_t bMCh; |
|
uint16_t wValue; |
|
uint32_t dwBuff; |
|
uint16_t wToHit; |
|
uint16_t wMaxDam; |
|
uint8_t bMinStr; |
|
uint8_t bMinMag; |
|
uint8_t bMinDex; |
|
int16_t bAC; |
|
}; |
|
|
|
struct TCmdChItem { |
|
_cmd_id bCmd; |
|
uint8_t bLoc; |
|
uint16_t wIndx; |
|
uint16_t wCI; |
|
int32_t dwSeed; |
|
uint8_t bId; |
|
uint32_t dwBuff; |
|
}; |
|
|
|
struct TCmdDelItem { |
|
_cmd_id bCmd; |
|
uint8_t bLoc; |
|
}; |
|
|
|
struct TCmdDamage { |
|
_cmd_id bCmd; |
|
uint8_t bPlr; |
|
uint32_t dwDam; |
|
}; |
|
|
|
struct TCmdMonDamage { |
|
_cmd_id bCmd; |
|
uint16_t wMon; |
|
uint32_t dwDam; |
|
}; |
|
|
|
struct TCmdPlrInfoHdr { |
|
_cmd_id bCmd; |
|
uint16_t wOffset; |
|
uint16_t wBytes; |
|
}; |
|
|
|
struct TCmdString { |
|
_cmd_id bCmd; |
|
char str[MAX_SEND_STR_LEN]; |
|
}; |
|
|
|
struct TFakeCmdPlr { |
|
_cmd_id bCmd; |
|
uint8_t bPlr; |
|
}; |
|
|
|
struct TFakeDropPlr { |
|
_cmd_id bCmd; |
|
uint8_t bPlr; |
|
uint32_t dwReason; |
|
}; |
|
|
|
struct TSyncHeader { |
|
_cmd_id bCmd; |
|
uint8_t bLevel; |
|
uint16_t wLen; |
|
uint8_t bObjId; |
|
uint8_t bObjCmd; |
|
uint8_t bItemI; |
|
uint8_t bItemX; |
|
uint8_t bItemY; |
|
uint16_t wItemIndx; |
|
uint16_t wItemCI; |
|
uint32_t dwItemSeed; |
|
uint8_t bItemId; |
|
uint8_t bItemDur; |
|
uint8_t bItemMDur; |
|
uint8_t bItemCh; |
|
uint8_t bItemMCh; |
|
uint16_t wItemVal; |
|
uint32_t dwItemBuff; |
|
uint8_t bPInvLoc; |
|
uint16_t wPInvIndx; |
|
uint16_t wPInvCI; |
|
uint32_t dwPInvSeed; |
|
uint8_t bPInvId; |
|
uint16_t wToHit; |
|
uint16_t wMaxDam; |
|
uint8_t bMinStr; |
|
uint8_t bMinMag; |
|
uint8_t bMinDex; |
|
uint8_t bAC; |
|
}; |
|
|
|
struct TSyncMonster { |
|
uint8_t _mndx; |
|
uint8_t _mx; |
|
uint8_t _my; |
|
uint8_t _menemy; |
|
uint8_t _mdelta; |
|
}; |
|
|
|
struct TPktHdr { |
|
uint8_t px; |
|
uint8_t py; |
|
uint8_t targx; |
|
uint8_t targy; |
|
int32_t php; |
|
int32_t pmhp; |
|
uint8_t bstr; |
|
uint8_t bmag; |
|
uint8_t bdex; |
|
uint16_t wCheck; |
|
uint16_t wLen; |
|
}; |
|
|
|
struct TPkt { |
|
TPktHdr hdr; |
|
uint8_t body[493]; |
|
}; |
|
|
|
struct DMonsterStr { |
|
uint8_t _mx; |
|
uint8_t _my; |
|
direction _mdir; |
|
uint8_t _menemy; |
|
uint8_t _mactive; |
|
int32_t _mhitpoints; |
|
}; |
|
|
|
struct DObjectStr { |
|
_cmd_id bCmd; |
|
}; |
|
|
|
struct DLevel { |
|
TCmdPItem item[MAXITEMS]; |
|
DObjectStr object[MAXOBJECTS]; |
|
DMonsterStr monster[MAXMONSTERS]; |
|
}; |
|
|
|
struct LocalLevel { |
|
uint8_t automapsv[DMAXX][DMAXY]; |
|
}; |
|
|
|
struct DPortal { |
|
uint8_t x; |
|
uint8_t y; |
|
uint8_t level; |
|
uint8_t ltype; |
|
uint8_t setlvl; |
|
}; |
|
|
|
struct MultiQuests { |
|
quest_state qstate; |
|
uint8_t qlog; |
|
uint8_t qvar1; |
|
}; |
|
|
|
struct DJunk { |
|
DPortal portal[MAXPORTAL]; |
|
MultiQuests quests[MAXMULTIQUESTS]; |
|
}; |
|
#pragma pack(pop) |
|
|
|
#pragma pack(push, 1) |
|
struct TMegaPkt { |
|
struct TMegaPkt *pNext; |
|
uint32_t dwSpaceLeft; |
|
uint8_t data[32000]; |
|
}; |
|
#pragma pack(pop) |
|
|
|
struct TBuffer { |
|
uint32_t dwNextWriteOffset; |
|
uint8_t bData[4096]; |
|
}; |
|
|
|
extern bool deltaload; |
|
extern BYTE gbBufferMsgs; |
|
extern int dwRecCount; |
|
|
|
void msg_send_drop_pkt(int pnum, int reason); |
|
bool msg_wait_resync(); |
|
void run_delta_info(); |
|
void DeltaExportData(int pnum); |
|
void delta_init(); |
|
void delta_kill_monster(int mi, Point position, BYTE bLevel); |
|
void delta_monster_hp(int mi, int hp, BYTE bLevel); |
|
void delta_sync_monster(const TSyncMonster *pSync, BYTE bLevel); |
|
bool delta_portal_inited(int i); |
|
bool delta_quest_inited(int i); |
|
void DeltaAddItem(int ii); |
|
void DeltaSaveLevel(); |
|
void DeltaLoadLevel(); |
|
void NetSendCmd(bool bHiPri, _cmd_id bCmd); |
|
void NetSendCmdGolem(BYTE mx, BYTE my, direction dir, BYTE menemy, int hp, BYTE cl); |
|
void NetSendCmdLoc(int playerId, bool bHiPri, _cmd_id bCmd, Point position); |
|
void NetSendCmdLocParam1(bool bHiPri, _cmd_id bCmd, Point position, uint16_t wParam1); |
|
void NetSendCmdLocParam2(bool bHiPri, _cmd_id bCmd, Point position, uint16_t wParam1, uint16_t wParam2); |
|
void NetSendCmdLocParam3(bool bHiPri, _cmd_id bCmd, Point position, uint16_t wParam1, uint16_t wParam2, uint16_t wParam3); |
|
void NetSendCmdParam1(bool bHiPri, _cmd_id bCmd, uint16_t wParam1); |
|
void NetSendCmdParam2(bool bHiPri, _cmd_id bCmd, uint16_t wParam1, uint16_t wParam2); |
|
void NetSendCmdParam3(bool bHiPri, _cmd_id bCmd, uint16_t wParam1, uint16_t wParam2, uint16_t wParam3); |
|
void NetSendCmdQuest(bool bHiPri, BYTE q); |
|
void NetSendCmdGItem(bool bHiPri, _cmd_id bCmd, BYTE mast, BYTE pnum, BYTE ii); |
|
void NetSendCmdPItem(bool bHiPri, _cmd_id bCmd, Point position); |
|
void NetSendCmdChItem(bool bHiPri, BYTE bLoc); |
|
void NetSendCmdDelItem(bool bHiPri, BYTE bLoc); |
|
void NetSendCmdDItem(bool bHiPri, int ii); |
|
void NetSendCmdDamage(bool bHiPri, BYTE bPlr, DWORD dwDam); |
|
void NetSendCmdMonDmg(bool bHiPri, uint16_t bMon, DWORD dwDam); |
|
void NetSendCmdString(uint32_t pmask, const char *pszStr); |
|
void delta_close_portal(int pnum); |
|
DWORD ParseCmd(int pnum, TCmd *pCmd); |
|
|
|
} // namespace devilution
|
|
|