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
7.9 KiB

/**
* @file msg.h
*
* Interface of function for sending and reciving network messages.
*/
#pragma once
#include <stdint.h>
#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 x;
Uint8 y;
};
struct TCmdLocParam1 {
_cmd_id bCmd;
Uint8 x;
Uint8 y;
Uint16 wParam1;
};
struct TCmdLocParam2 {
_cmd_id bCmd;
Uint8 x;
Uint8 y;
Uint16 wParam1;
Uint16 wParam2;
};
struct TCmdLocParam3 {
_cmd_id bCmd;
Uint8 x;
Uint8 y;
Uint16 wParam1;
Uint16 wParam2;
Uint16 wParam3;
};
struct TCmdParam1 {
_cmd_id bCmd;
Uint16 wParam1;
};
struct TCmdParam2 {
_cmd_id bCmd;
Uint16 wParam1;
Uint16 wParam2;
};
struct TCmdParam3 {
_cmd_id bCmd;
Uint16 wParam1;
Uint16 wParam2;
Uint16 wParam3;
};
struct TCmdGolem {
_cmd_id bCmd;
Uint8 _mx;
Uint8 _my;
Uint8 _mdir;
Sint8 _menemy;
Sint32 _mhitpoints;
Uint8 _currlevel;
};
struct TCmdQuest {
_cmd_id bCmd;
Uint8 q;
quest_state qstate;
Uint8 qlog;
Uint8 qvar1;
};
struct TCmdGItem {
_cmd_id bCmd;
Uint8 bMaster;
Uint8 bPnum;
Uint8 bCursitem;
Uint8 bLevel;
Uint8 x;
Uint8 y;
Uint16 wIndx;
Uint16 wCI;
Sint32 dwSeed;
Uint8 bId;
Uint8 bDur;
Uint8 bMDur;
Uint8 bCh;
Uint8 bMCh;
Uint16 wValue;
Uint32 dwBuff;
Sint32 dwTime;
Uint16 wToHit;
Uint16 wMaxDam;
Uint8 bMinStr;
Uint8 bMinMag;
Uint8 bMinDex;
Sint16 bAC;
};
struct TCmdPItem {
_cmd_id bCmd;
Uint8 x;
Uint8 y;
Uint16 wIndx;
Uint16 wCI;
Sint32 dwSeed;
Uint8 bId;
Uint8 bDur;
Uint8 bMDur;
Uint8 bCh;
Uint8 bMCh;
Uint16 wValue;
Uint32 dwBuff;
Uint16 wToHit;
Uint16 wMaxDam;
Uint8 bMinStr;
Uint8 bMinMag;
Uint8 bMinDex;
Sint16 bAC;
};
struct TCmdChItem {
_cmd_id bCmd;
Uint8 bLoc;
Uint16 wIndx;
Uint16 wCI;
Sint32 dwSeed;
Uint8 bId;
Uint32 dwBuff;
};
struct TCmdDelItem {
_cmd_id bCmd;
Uint8 bLoc;
};
struct TCmdDamage {
_cmd_id bCmd;
Uint8 bPlr;
Uint32 dwDam;
};
struct TCmdMonDamage {
_cmd_id bCmd;
Uint16 wMon;
Uint32 dwDam;
};
struct TCmdPlrInfoHdr {
_cmd_id bCmd;
Uint16 wOffset;
Uint16 wBytes;
};
struct TCmdString {
_cmd_id bCmd;
char str[MAX_SEND_STR_LEN];
};
struct TFakeCmdPlr {
_cmd_id bCmd;
Uint8 bPlr;
};
struct TFakeDropPlr {
_cmd_id bCmd;
Uint8 bPlr;
Uint32 dwReason;
};
struct TSyncHeader {
_cmd_id bCmd;
Uint8 bLevel;
Uint16 wLen;
Uint8 bObjId;
Uint8 bObjCmd;
Uint8 bItemI;
Uint8 bItemX;
Uint8 bItemY;
Uint16 wItemIndx;
Uint16 wItemCI;
Uint32 dwItemSeed;
Uint8 bItemId;
Uint8 bItemDur;
Uint8 bItemMDur;
Uint8 bItemCh;
Uint8 bItemMCh;
Uint16 wItemVal;
Uint32 dwItemBuff;
Uint8 bPInvLoc;
Uint16 wPInvIndx;
Uint16 wPInvCI;
Uint32 dwPInvSeed;
Uint8 bPInvId;
Uint16 wToHit;
Uint16 wMaxDam;
Uint8 bMinStr;
Uint8 bMinMag;
Uint8 bMinDex;
Uint8 bAC;
};
struct TSyncMonster {
Uint8 _mndx;
Uint8 _mx;
Uint8 _my;
Uint8 _menemy;
Uint8 _mdelta;
};
struct TPktHdr {
Uint8 px;
Uint8 py;
Uint8 targx;
Uint8 targy;
Sint32 php;
Sint32 pmhp;
Uint8 bstr;
Uint8 bmag;
Uint8 bdex;
Uint16 wCheck;
Uint16 wLen;
};
struct TPkt {
TPktHdr hdr;
Uint8 body[493];
};
struct DMonsterStr {
Uint8 _mx;
Uint8 _my;
Uint8 _mdir;
Uint8 _menemy;
Uint8 _mactive;
Sint32 _mhitpoints;
};
struct DObjectStr {
_cmd_id bCmd;
};
struct DLevel {
TCmdPItem item[MAXITEMS];
DObjectStr object[MAXOBJECTS];
DMonsterStr monster[MAXMONSTERS];
};
struct LocalLevel {
Uint8 automapsv[DMAXX][DMAXY];
};
struct DPortal {
Uint8 x;
Uint8 y;
Uint8 level;
Uint8 ltype;
Uint8 setlvl;
};
struct MultiQuests {
quest_state qstate;
Uint8 qlog;
Uint8 qvar1;
};
struct DJunk {
DPortal portal[MAXPORTAL];
MultiQuests quests[MAXMULTIQUESTS];
};
#pragma pack(pop)
#pragma pack(push, 1)
struct TMegaPkt {
struct TMegaPkt *pNext;
Uint32 dwSpaceLeft;
Uint8 data[32000];
};
#pragma pack(pop)
struct TBuffer {
Uint32 dwNextWriteOffset;
Uint8 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, BYTE x, BYTE y, 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, BYTE dir, BYTE menemy, int hp, BYTE cl);
void NetSendCmdLoc(int playerId, bool bHiPri, _cmd_id bCmd, BYTE x, BYTE y);
void NetSendCmdLocParam1(bool bHiPri, _cmd_id bCmd, BYTE x, BYTE y, WORD wParam1);
void NetSendCmdLocParam2(bool bHiPri, _cmd_id bCmd, BYTE x, BYTE y, WORD wParam1, WORD wParam2);
void NetSendCmdLocParam3(bool bHiPri, _cmd_id bCmd, BYTE x, BYTE y, WORD wParam1, WORD wParam2, WORD wParam3);
void NetSendCmdParam1(bool bHiPri, _cmd_id bCmd, WORD wParam1);
void NetSendCmdParam2(bool bHiPri, _cmd_id bCmd, WORD wParam1, WORD wParam2);
void NetSendCmdParam3(bool bHiPri, _cmd_id bCmd, WORD wParam1, WORD wParam2, WORD 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, BYTE x, BYTE y);
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, WORD bMon, DWORD dwDam);
void NetSendCmdString(int pmask, const char *pszStr);
void delta_close_portal(int pnum);
DWORD ParseCmd(int pnum, TCmd *pCmd);
}