From 75a14114bbba52971a04946fbd114d04b3d4606e Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Wed, 4 Nov 2020 05:17:05 +0100 Subject: [PATCH] Reorder msg.cpp --- Source/msg.cpp | 1453 ++++++++++++++++++++++++------------------------ Source/msg.h | 110 ---- 2 files changed, 727 insertions(+), 836 deletions(-) diff --git a/Source/msg.cpp b/Source/msg.cpp index 15273f633..e26d3e70f 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -24,17 +24,63 @@ BOOL deltaload; BYTE gbBufferMsgs; int dwRecCount; -void msg_send_drop_pkt(int pnum, int reason) +static void msg_get_next_packet() { - TFakeDropPlr cmd; + TMegaPkt *result; - cmd.dwReason = reason; - cmd.bCmd = FAKE_CMD_DROPID; - cmd.bPlr = pnum; - msg_send_packet(pnum, &cmd, sizeof(cmd)); + sgpCurrPkt = (TMegaPkt *)DiabloAllocPtr(sizeof(TMegaPkt)); + sgpCurrPkt->pNext = NULL; + sgpCurrPkt->dwSpaceLeft = sizeof(result->data); + + result = (TMegaPkt *)&sgpMegaPkt; + while (result->pNext) { + result = result->pNext; + } + result->pNext = sgpCurrPkt; +} + +static void msg_free_packets() +{ + while (sgpMegaPkt) { + sgpCurrPkt = sgpMegaPkt->pNext; + MemFreeDbg(sgpMegaPkt); + sgpMegaPkt = sgpCurrPkt; + } +} + +static void msg_pre_packet() +{ + int i; + int spaceLeft, pktSize; + TMegaPkt *pkt; + TFakeCmdPlr *cmd, *tmpCmd; + TFakeDropPlr *dropCmd; + + i = -1; + for (pkt = sgpMegaPkt; pkt != NULL; pkt = pkt->pNext) { + spaceLeft = sizeof(pkt->data); + cmd = (TFakeCmdPlr *)pkt->data; + while (spaceLeft != pkt->dwSpaceLeft) { + if (cmd->bCmd == FAKE_CMD_SETID) { + tmpCmd = cmd; + cmd++; + i = tmpCmd->bPlr; + spaceLeft -= sizeof(*cmd); + } else if (cmd->bCmd == FAKE_CMD_DROPID) { + dropCmd = (TFakeDropPlr *)cmd; + cmd += 3; + spaceLeft -= sizeof(*dropCmd); + multi_player_left(dropCmd->bPlr, dropCmd->dwReason); + } else { + pktSize = ParseCmd(i, (TCmd *)cmd); + cmd = (TFakeCmdPlr *)((char *)cmd + pktSize); + spaceLeft -= pktSize; + } + } + } } -void msg_send_packet(int pnum, const void *packet, DWORD dwSize) +static void msg_send_packet(int pnum, const void *packet, DWORD dwSize) { TMegaPkt *packeta; TFakeCmdPlr cmd; @@ -54,19 +100,47 @@ void msg_send_packet(int pnum, const void *packet, DWORD dwSize) sgpCurrPkt->dwSpaceLeft -= dwSize; } -void msg_get_next_packet() +void msg_send_drop_pkt(int pnum, int reason) { - TMegaPkt *result; + TFakeDropPlr cmd; - sgpCurrPkt = (TMegaPkt *)DiabloAllocPtr(sizeof(TMegaPkt)); - sgpCurrPkt->pNext = NULL; - sgpCurrPkt->dwSpaceLeft = sizeof(result->data); + cmd.dwReason = reason; + cmd.bCmd = FAKE_CMD_DROPID; + cmd.bPlr = pnum; + msg_send_packet(pnum, &cmd, sizeof(cmd)); +} - result = (TMegaPkt *)&sgpMegaPkt; - while (result->pNext) { - result = result->pNext; +static int msg_wait_for_turns() +{ + BOOL received; + DWORD turns; + + if (sgbDeltaChunks == 0) { + nthread_send_and_recv_turn(0, 0); + if (!SNetGetOwnerTurnsWaiting(&turns) && DERROR() == STORM_ERROR_NOT_IN_GAME) + return 100; + if (GetTickCount() - sgdwOwnerWait <= 2000 && turns < gdwTurnsInTransit) + return 0; + sgbDeltaChunks++; } - result->pNext = sgpCurrPkt; + multi_process_network_packets(); + nthread_send_and_recv_turn(0, 0); + if (nthread_has_500ms_passed(FALSE)) + nthread_recv_turns(&received); + + if (gbGameDestroyed) + return 100; + if (gbDeltaSender >= MAX_PLRS) { + sgbDeltaChunks = 0; + sgbRecvCmd = CMD_DLEVEL_END; + gbDeltaSender = myplr; + nthread_set_turn_upper_bit(); + } + if (sgbDeltaChunks == MAX_CHUNKS - 1) { + sgbDeltaChunks = MAX_CHUNKS; + return 99; + } + return 100 * sgbDeltaChunks / MAX_CHUNKS; } BOOL msg_wait_resync() @@ -101,48 +175,6 @@ BOOL msg_wait_resync() return TRUE; } -void msg_free_packets() -{ - while (sgpMegaPkt) { - sgpCurrPkt = sgpMegaPkt->pNext; - MemFreeDbg(sgpMegaPkt); - sgpMegaPkt = sgpCurrPkt; - } -} - -int msg_wait_for_turns() -{ - BOOL received; - DWORD turns; - - if (sgbDeltaChunks == 0) { - nthread_send_and_recv_turn(0, 0); - if (!SNetGetOwnerTurnsWaiting(&turns) && DERROR() == STORM_ERROR_NOT_IN_GAME) - return 100; - if (GetTickCount() - sgdwOwnerWait <= 2000 && turns < gdwTurnsInTransit) - return 0; - sgbDeltaChunks++; - } - multi_process_network_packets(); - nthread_send_and_recv_turn(0, 0); - if (nthread_has_500ms_passed(FALSE)) - nthread_recv_turns(&received); - - if (gbGameDestroyed) - return 100; - if (gbDeltaSender >= MAX_PLRS) { - sgbDeltaChunks = 0; - sgbRecvCmd = CMD_DLEVEL_END; - gbDeltaSender = myplr; - nthread_set_turn_upper_bit(); - } - if (sgbDeltaChunks == MAX_CHUNKS - 1) { - sgbDeltaChunks = MAX_CHUNKS; - return 99; - } - return 100 * sgbDeltaChunks / MAX_CHUNKS; -} - void run_delta_info() { if (gbMaxPlayers != 1) { @@ -153,89 +185,55 @@ void run_delta_info() } } -void msg_pre_packet() +static BYTE *DeltaExportItem(BYTE *dst, TCmdPItem *src) { int i; - int spaceLeft, pktSize; - TMegaPkt *pkt; - TFakeCmdPlr *cmd, *tmpCmd; - TFakeDropPlr *dropCmd; - i = -1; - for (pkt = sgpMegaPkt; pkt != NULL; pkt = pkt->pNext) { - spaceLeft = sizeof(pkt->data); - cmd = (TFakeCmdPlr *)pkt->data; - while (spaceLeft != pkt->dwSpaceLeft) { - if (cmd->bCmd == FAKE_CMD_SETID) { - tmpCmd = cmd; - cmd++; - i = tmpCmd->bPlr; - spaceLeft -= sizeof(*cmd); - } else if (cmd->bCmd == FAKE_CMD_DROPID) { - dropCmd = (TFakeDropPlr *)cmd; - cmd += 3; - spaceLeft -= sizeof(*dropCmd); - multi_player_left(dropCmd->bPlr, dropCmd->dwReason); - } else { - pktSize = ParseCmd(i, (TCmd *)cmd); - cmd = (TFakeCmdPlr *)((char *)cmd + pktSize); - spaceLeft -= pktSize; - } + for (i = 0; i < MAXITEMS; i++) { + if (src->bCmd == 0xFF) { + *dst = 0xFF; + dst++; + } else { + memcpy(dst, src, sizeof(TCmdPItem)); + dst += sizeof(TCmdPItem); } + src++; } -} - -void DeltaExportData(int pnum) -{ - BYTE *dst, *dstEnd; - int size, i; - char src; - if (sgbDeltaChanged) { - dst = (BYTE *)DiabloAllocPtr(sizeof(DLevel) + 1); - for (i = 0; i < NUMLEVELS; i++) { - dstEnd = dst + 1; - dstEnd = DeltaExportItem(dstEnd, sgLevels[i].item); - dstEnd = DeltaExportObject(dstEnd, sgLevels[i].object); - dstEnd = DeltaExportMonster(dstEnd, sgLevels[i].monster); - size = msg_comp_level(dst, dstEnd); - dthread_send_delta(pnum, i + CMD_DLEVEL_0, dst, size); - } - dstEnd = dst + 1; - dstEnd = DeltaExportJunk(dstEnd); - size = msg_comp_level(dst, dstEnd); - dthread_send_delta(pnum, CMD_DLEVEL_JUNK, dst, size); - mem_free_dbg(dst); - } - src = 0; - dthread_send_delta(pnum, CMD_DLEVEL_END, &src, 1); + return dst; } -BYTE *DeltaExportItem(BYTE *dst, TCmdPItem *src) +static BYTE *DeltaImportItem(BYTE *src, TCmdPItem *dst) { int i; for (i = 0; i < MAXITEMS; i++) { - if (src->bCmd == 0xFF) { - *dst = 0xFF; - dst++; + if (*src == 0xFF) { + memset(dst, 0xFF, sizeof(TCmdPItem)); + src++; } else { memcpy(dst, src, sizeof(TCmdPItem)); - dst += sizeof(TCmdPItem); + src += sizeof(TCmdPItem); } - src++; + dst++; } - return dst; + return src; } -BYTE *DeltaExportObject(BYTE *dst, DObjectStr *src) +static BYTE *DeltaExportObject(BYTE *dst, DObjectStr *src) { memcpy(dst, src, sizeof(DObjectStr) * MAXOBJECTS); return dst + sizeof(DObjectStr) * MAXOBJECTS; } -BYTE *DeltaExportMonster(BYTE *dst, DMonsterStr *src) +static BYTE *DeltaImportObject(BYTE *src, DObjectStr *dst) +{ + memcpy(dst, src, sizeof(DObjectStr) * MAXOBJECTS); + return src + sizeof(DObjectStr) * MAXOBJECTS; +} + +static BYTE *DeltaExportMonster(BYTE *dst, DMonsterStr *src) { int i; @@ -253,7 +251,25 @@ BYTE *DeltaExportMonster(BYTE *dst, DMonsterStr *src) return dst; } -BYTE *DeltaExportJunk(BYTE *dst) +static BYTE *DeltaImportMonster(BYTE *src, DMonsterStr *dst) +{ + int i; + + for (i = 0; i < MAXMONSTERS; i++) { + if (*src == 0xFF) { + memset(dst, 0xFF, sizeof(DMonsterStr)); + src++; + } else { + memcpy(dst, src, sizeof(DMonsterStr)); + src += sizeof(DMonsterStr); + } + dst++; + } + + return src; +} + +static BYTE *DeltaExportJunk(BYTE *dst) { int i; MultiQuests *mq; @@ -285,16 +301,150 @@ BYTE *DeltaExportJunk(BYTE *dst) return dst; } -int msg_comp_level(BYTE *buffer, BYTE *end) +static void DeltaImportJunk(BYTE *src) { - int size, pkSize; + int i; + MultiQuests *mq; - size = end - buffer - 1; - pkSize = PkwareCompress(buffer + 1, size); - *buffer = size != pkSize; + for (i = 0; i < MAXPORTAL; i++) { + if (*src == 0xFF) { + memset(&sgJunk.portal[i], 0xFF, sizeof(DPortal)); + src++; + SetPortalStats(i, FALSE, 0, 0, 0, DTYPE_TOWN); + } else { + memcpy(&sgJunk.portal[i], src, sizeof(DPortal)); + src += sizeof(DPortal); + SetPortalStats( + i, + TRUE, + sgJunk.portal[i].x, + sgJunk.portal[i].y, + sgJunk.portal[i].level, + sgJunk.portal[i].ltype); + } + } - return pkSize + 1; -} + mq = sgJunk.quests; + for (i = 0; i < MAXQUESTS; i++) { + if (questlist[i]._qflags & QUEST_ANY) { + memcpy(mq, src, sizeof(MultiQuests)); + src += sizeof(MultiQuests); + quests[i]._qlog = mq->qlog; + quests[i]._qactive = mq->qstate; + quests[i]._qvar1 = mq->qvar1; + mq++; + } + } +} + +static int msg_comp_level(BYTE *buffer, BYTE *end) +{ + int size, pkSize; + + size = end - buffer - 1; + pkSize = PkwareCompress(buffer + 1, size); + *buffer = size != pkSize; + + return pkSize + 1; +} + +// DeltaSendAllLevels +void DeltaExportData(int pnum) +{ + BYTE *dst, *dstEnd; + int size, i; + char src; + + if (sgbDeltaChanged) { + dst = (BYTE *)DiabloAllocPtr(sizeof(DLevel) + 1); + for (i = 0; i < NUMLEVELS; i++) { + dstEnd = dst + 1; + dstEnd = DeltaExportItem(dstEnd, sgLevels[i].item); + dstEnd = DeltaExportObject(dstEnd, sgLevels[i].object); + dstEnd = DeltaExportMonster(dstEnd, sgLevels[i].monster); + size = msg_comp_level(dst, dstEnd); + dthread_send_delta(pnum, i + CMD_DLEVEL_0, dst, size); + } + dstEnd = dst + 1; + dstEnd = DeltaExportJunk(dstEnd); + size = msg_comp_level(dst, dstEnd); + dthread_send_delta(pnum, CMD_DLEVEL_JUNK, dst, size); + mem_free_dbg(dst); + } + src = 0; + dthread_send_delta(pnum, CMD_DLEVEL_END, &src, 1); +} + +static void DeltaImportData(BYTE cmd, DWORD recv_offset) +{ + BYTE i; + BYTE *src; + + if (sgRecvBuf[0] != 0) + PkwareDecompress(&sgRecvBuf[1], recv_offset, (sizeof(sgRecvBuf) / sizeof(sgRecvBuf[0])) - 1); + + src = &sgRecvBuf[1]; + if (cmd == CMD_DLEVEL_JUNK) { + DeltaImportJunk(src); +#ifdef HELLFIRE + } else if (cmd >= CMD_DLEVEL_0 && cmd <= CMD_DLEVEL_24) { +#else + } else if (cmd >= CMD_DLEVEL_0 && cmd <= CMD_DLEVEL_16) { +#endif + i = cmd - CMD_DLEVEL_0; + src = DeltaImportItem(src, sgLevels[i].item); + src = DeltaImportObject(src, sgLevels[i].object); + DeltaImportMonster(src, sgLevels[i].monster); + } else { + app_fatal("msg:1"); + } + + sgbDeltaChunks++; + sgbDeltaChanged = TRUE; +} + +static DWORD On_DLEVEL(int pnum, TCmd *pCmd) +{ + TCmdPlrInfoHdr *p = (TCmdPlrInfoHdr *)pCmd; + + if (gbDeltaSender != pnum) { + if (p->bCmd == CMD_DLEVEL_END) { + gbDeltaSender = pnum; + sgbRecvCmd = CMD_DLEVEL_END; + } else if (p->bCmd == CMD_DLEVEL_0 && p->wOffset == 0) { + gbDeltaSender = pnum; + sgbRecvCmd = CMD_DLEVEL_END; + } else { + return p->wBytes + sizeof(*p); + } + } + if (sgbRecvCmd == CMD_DLEVEL_END) { + if (p->bCmd == CMD_DLEVEL_END) { + sgbDeltaChunks = MAX_CHUNKS - 1; + return p->wBytes + sizeof(*p); + } else if (p->bCmd == CMD_DLEVEL_0 && p->wOffset == 0) { + sgdwRecvOffset = 0; + sgbRecvCmd = p->bCmd; + } else { + return p->wBytes + sizeof(*p); + } + } else if (sgbRecvCmd != p->bCmd) { + DeltaImportData(sgbRecvCmd, sgdwRecvOffset); + if (p->bCmd == CMD_DLEVEL_END) { + sgbDeltaChunks = MAX_CHUNKS - 1; + sgbRecvCmd = CMD_DLEVEL_END; + return p->wBytes + sizeof(*p); + } else { + sgdwRecvOffset = 0; + sgbRecvCmd = p->bCmd; + } + } + + /// ASSERT: assert(p->wOffset == sgdwRecvOffset); + memcpy(&sgRecvBuf[p->wOffset], &p[1], p->wBytes); + sgdwRecvOffset += p->wBytes; + return p->wBytes + sizeof(*p); +} void delta_init() { @@ -396,6 +546,113 @@ void delta_leave_sync(BYTE bLevel) } } +static void delta_sync_object(int oi, BYTE bCmd, BYTE bLevel) +{ + if (gbMaxPlayers != 1) { + sgbDeltaChanged = TRUE; + sgLevels[bLevel].object[oi].bCmd = bCmd; + } +} + +static BOOL delta_get_item(TCmdGItem *pI, BYTE bLevel) +{ + TCmdPItem *pD; + int i; + + if (gbMaxPlayers == 1) + return TRUE; + + pD = sgLevels[bLevel].item; + for (i = 0; i < MAXITEMS; i++, pD++) { + if (pD->bCmd == 0xFF || pD->wIndx != pI->wIndx || pD->wCI != pI->wCI || pD->dwSeed != pI->dwSeed) + continue; + + if (pD->bCmd == CMD_WALKXY) { + return TRUE; + } + if (pD->bCmd == CMD_STAND) { + sgbDeltaChanged = TRUE; + pD->bCmd = CMD_WALKXY; + return TRUE; + } + if (pD->bCmd == CMD_ACK_PLRINFO) { + sgbDeltaChanged = TRUE; + pD->bCmd = 0xFF; + return TRUE; + } + + app_fatal("delta:1"); + break; + } + + if ((pI->wCI & CF_PREGEN) == 0) + return FALSE; + + pD = sgLevels[bLevel].item; + for (i = 0; i < MAXITEMS; i++, pD++) { + if (pD->bCmd == 0xFF) { + sgbDeltaChanged = TRUE; + pD->bCmd = CMD_WALKXY; + pD->x = pI->x; + pD->y = pI->y; + pD->wIndx = pI->wIndx; + pD->wCI = pI->wCI; + pD->dwSeed = pI->dwSeed; + pD->bId = pI->bId; + pD->bDur = pI->bDur; + pD->bMDur = pI->bMDur; + pD->bCh = pI->bCh; + pD->bMCh = pI->bMCh; + pD->wValue = pI->wValue; + pD->dwBuff = pI->dwBuff; +#ifdef HELLFIRE + pD->wToHit = pI->wToHit; + pD->wMaxDam = pI->wMaxDam; + pD->bMinStr = pI->bMinStr; + pD->bMinMag = pI->bMinMag; + pD->bMinDex = pI->bMinDex; + pD->bAC = pI->bAC; +#endif + break; + } + } + return TRUE; +} + +static void delta_put_item(TCmdPItem *pI, int x, int y, BYTE bLevel) +{ + int i; + TCmdPItem *pD; + + if (gbMaxPlayers == 1) { + return; + } + pD = sgLevels[bLevel].item; + for (i = 0; i < MAXITEMS; i++, pD++) { + if (pD->bCmd != CMD_WALKXY + && pD->bCmd != 0xFF + && pD->wIndx == pI->wIndx + && pD->wCI == pI->wCI + && pD->dwSeed == pI->dwSeed) { + if (pD->bCmd == CMD_ACK_PLRINFO) + return; + app_fatal("Trying to drop a floor item?"); + } + } + + pD = sgLevels[bLevel].item; + for (i = 0; i < MAXITEMS; i++, pD++) { + if (pD->bCmd == 0xFF) { + sgbDeltaChanged = TRUE; + memcpy(pD, pI, sizeof(TCmdPItem)); + pD->bCmd = CMD_ACK_PLRINFO; + pD->x = x; + pD->y = y; + return; + } + } +} + BOOL delta_portal_inited(int i) { return sgJunk.portal[i].x == 0xFF; @@ -953,384 +1210,118 @@ void NetSendCmdDItem(BOOL bHiPri, int ii) NetSendHiPri((BYTE *)&cmd, sizeof(cmd)); else NetSendLoPri((BYTE *)&cmd, sizeof(cmd)); -} - -void NetSendCmdDamage(BOOL bHiPri, BYTE bPlr, DWORD dwDam) -{ - TCmdDamage cmd; - - cmd.bCmd = CMD_PLRDAMAGE; - cmd.bPlr = bPlr; - cmd.dwDam = dwDam; - if (bHiPri) - NetSendHiPri((BYTE *)&cmd, sizeof(cmd)); - else - NetSendLoPri((BYTE *)&cmd, sizeof(cmd)); -} - -#ifdef HELLFIRE -void NetSendCmdMonDmg(BOOL bHiPri, WORD wMon, DWORD dwDam) -{ - TCmdMonDamage cmd; - - cmd.bCmd = CMD_MONSTDAMAGE; - cmd.wMon = wMon; - cmd.dwDam = dwDam; - if (bHiPri) - NetSendHiPri((BYTE *)&cmd, sizeof(cmd)); - else - NetSendLoPri((BYTE *)&cmd, sizeof(cmd)); -} -#endif - -void NetSendCmdString(int pmask, const char *pszStr) -{ - int dwStrLen; - TCmdString cmd; - - dwStrLen = strlen(pszStr); - cmd.bCmd = CMD_STRING; - strcpy(cmd.str, pszStr); - multi_send_msg_packet(pmask, (BYTE *)&cmd.bCmd, dwStrLen + 2); -} - -void delta_close_portal(int pnum) -{ - memset(&sgJunk.portal[pnum], 0xFF, sizeof(sgJunk.portal[pnum])); - sgbDeltaChanged = TRUE; -} - -DWORD ParseCmd(int pnum, TCmd *pCmd) -{ - sbLastCmd = pCmd->bCmd; - if (sgwPackPlrOffsetTbl[pnum] != 0 && sbLastCmd != CMD_ACK_PLRINFO && sbLastCmd != CMD_SEND_PLRINFO) - return 0; - - switch (pCmd->bCmd) { - case CMD_SYNCDATA: - return On_SYNCDATA(pCmd, pnum); - case CMD_WALKXY: - return On_WALKXY(pCmd, pnum); - case CMD_ADDSTR: - return On_ADDSTR(pCmd, pnum); - case CMD_ADDDEX: - return On_ADDDEX(pCmd, pnum); - case CMD_ADDMAG: - return On_ADDMAG(pCmd, pnum); - case CMD_ADDVIT: - return On_ADDVIT(pCmd, pnum); - case CMD_SBSPELL: - return On_SBSPELL(pCmd, pnum); - case CMD_GOTOGETITEM: - return On_GOTOGETITEM(pCmd, pnum); - case CMD_REQUESTGITEM: - return On_REQUESTGITEM(pCmd, pnum); - case CMD_GETITEM: - return On_GETITEM(pCmd, pnum); - case CMD_GOTOAGETITEM: - return On_GOTOAGETITEM(pCmd, pnum); - case CMD_REQUESTAGITEM: - return On_REQUESTAGITEM(pCmd, pnum); - case CMD_AGETITEM: - return On_AGETITEM(pCmd, pnum); - case CMD_ITEMEXTRA: - return On_ITEMEXTRA(pCmd, pnum); - case CMD_PUTITEM: - return On_PUTITEM(pCmd, pnum); - case CMD_SYNCPUTITEM: - return On_SYNCPUTITEM(pCmd, pnum); - case CMD_RESPAWNITEM: - return On_RESPAWNITEM(pCmd, pnum); - case CMD_ATTACKXY: - return On_ATTACKXY(pCmd, pnum); - case CMD_SATTACKXY: - return On_SATTACKXY(pCmd, pnum); - case CMD_RATTACKXY: - return On_RATTACKXY(pCmd, pnum); - case CMD_SPELLXYD: - return On_SPELLXYD(pCmd, pnum); - case CMD_SPELLXY: - return On_SPELLXY(pCmd, pnum); - case CMD_TSPELLXY: - return On_TSPELLXY(pCmd, pnum); - case CMD_OPOBJXY: - return On_OPOBJXY(pCmd, pnum); - case CMD_DISARMXY: - return On_DISARMXY(pCmd, pnum); - case CMD_OPOBJT: - return On_OPOBJT(pCmd, pnum); - case CMD_ATTACKID: - return On_ATTACKID(pCmd, pnum); - case CMD_ATTACKPID: - return On_ATTACKPID(pCmd, pnum); - case CMD_RATTACKID: - return On_RATTACKID(pCmd, pnum); - case CMD_RATTACKPID: - return On_RATTACKPID(pCmd, pnum); - case CMD_SPELLID: - return On_SPELLID(pCmd, pnum); - case CMD_SPELLPID: - return On_SPELLPID(pCmd, pnum); - case CMD_TSPELLID: - return On_TSPELLID(pCmd, pnum); - case CMD_TSPELLPID: - return On_TSPELLPID(pCmd, pnum); - case CMD_KNOCKBACK: - return On_KNOCKBACK(pCmd, pnum); - case CMD_RESURRECT: - return On_RESURRECT(pCmd, pnum); - case CMD_HEALOTHER: - return On_HEALOTHER(pCmd, pnum); - case CMD_TALKXY: - return On_TALKXY(pCmd, pnum); - case CMD_DEBUG: - return On_DEBUG(pCmd, pnum); - case CMD_NEWLVL: - return On_NEWLVL(pCmd, pnum); - case CMD_WARP: - return On_WARP(pCmd, pnum); - case CMD_MONSTDEATH: - return On_MONSTDEATH(pCmd, pnum); - case CMD_KILLGOLEM: - return On_KILLGOLEM(pCmd, pnum); - case CMD_AWAKEGOLEM: - return On_AWAKEGOLEM(pCmd, pnum); - case CMD_MONSTDAMAGE: - return On_MONSTDAMAGE(pCmd, pnum); - case CMD_PLRDEAD: - return On_PLRDEAD(pCmd, pnum); - case CMD_PLRDAMAGE: - return On_PLRDAMAGE(pCmd, pnum); - case CMD_OPENDOOR: - return On_OPENDOOR(pCmd, pnum); - case CMD_CLOSEDOOR: - return On_CLOSEDOOR(pCmd, pnum); - case CMD_OPERATEOBJ: - return On_OPERATEOBJ(pCmd, pnum); - case CMD_PLROPOBJ: - return On_PLROPOBJ(pCmd, pnum); - case CMD_BREAKOBJ: - return On_BREAKOBJ(pCmd, pnum); - case CMD_CHANGEPLRITEMS: - return On_CHANGEPLRITEMS(pCmd, pnum); - case CMD_DELPLRITEMS: - return On_DELPLRITEMS(pCmd, pnum); - case CMD_PLRLEVEL: - return On_PLRLEVEL(pCmd, pnum); - case CMD_DROPITEM: - return On_DROPITEM(pCmd, pnum); - case CMD_ACK_PLRINFO: - return On_ACK_PLRINFO(pCmd, pnum); - case CMD_SEND_PLRINFO: - return On_SEND_PLRINFO(pCmd, pnum); - case CMD_PLAYER_JOINLEVEL: - return On_PLAYER_JOINLEVEL(pCmd, pnum); - case CMD_ACTIVATEPORTAL: - return On_ACTIVATEPORTAL(pCmd, pnum); - case CMD_DEACTIVATEPORTAL: - return On_DEACTIVATEPORTAL(pCmd, pnum); - case CMD_RETOWN: - return On_RETOWN(pCmd, pnum); - case CMD_SETSTR: - return On_SETSTR(pCmd, pnum); - case CMD_SETMAG: - return On_SETMAG(pCmd, pnum); - case CMD_SETDEX: - return On_SETDEX(pCmd, pnum); - case CMD_SETVIT: - return On_SETVIT(pCmd, pnum); - case CMD_STRING: - return On_STRING(pCmd, pnum); - case CMD_SYNCQUEST: - return On_SYNCQUEST(pCmd, pnum); - case CMD_ENDSHIELD: - return On_ENDSHIELD(pCmd, pnum); - case CMD_CHEAT_EXPERIENCE: - return On_CHEAT_EXPERIENCE(pCmd, pnum); - case CMD_CHEAT_SPELL_LEVEL: - return On_CHEAT_SPELL_LEVEL(pCmd, pnum); -#ifndef HELLFIRE - case CMD_NOVA: - return On_NOVA(pCmd, pnum); - case CMD_SETSHIELD: - return On_SETSHIELD(pCmd, pnum); - case CMD_REMSHIELD: - return On_REMSHIELD(pCmd, pnum); -#else - case CMD_REFLECT: - return On_REFLECT(pCmd, pnum); - case CMD_NAKRUL: - return On_NAKRUL(pCmd, pnum); - case CMD_OPENHIVE: - return On_OPENHIVE(pCmd, pnum); - case CMD_OPENCRYPT: - return On_OPENCRYPT(pCmd, pnum); -#endif - } - - if (pCmd->bCmd < CMD_DLEVEL_0 || pCmd->bCmd > CMD_DLEVEL_END) { - SNetDropPlayer(pnum, LEAVE_DROP); - return 0; - } - - return On_DLEVEL(pnum, pCmd); -} - -DWORD On_DLEVEL(int pnum, TCmd *pCmd) -{ - TCmdPlrInfoHdr *p = (TCmdPlrInfoHdr *)pCmd; - - if (gbDeltaSender != pnum) { - if (p->bCmd == CMD_DLEVEL_END) { - gbDeltaSender = pnum; - sgbRecvCmd = CMD_DLEVEL_END; - } else if (p->bCmd == CMD_DLEVEL_0 && p->wOffset == 0) { - gbDeltaSender = pnum; - sgbRecvCmd = CMD_DLEVEL_END; - } else { - return p->wBytes + sizeof(*p); - } - } - if (sgbRecvCmd == CMD_DLEVEL_END) { - if (p->bCmd == CMD_DLEVEL_END) { - sgbDeltaChunks = MAX_CHUNKS - 1; - return p->wBytes + sizeof(*p); - } else if (p->bCmd == CMD_DLEVEL_0 && p->wOffset == 0) { - sgdwRecvOffset = 0; - sgbRecvCmd = p->bCmd; - } else { - return p->wBytes + sizeof(*p); - } - } else if (sgbRecvCmd != p->bCmd) { - DeltaImportData(sgbRecvCmd, sgdwRecvOffset); - if (p->bCmd == CMD_DLEVEL_END) { - sgbDeltaChunks = MAX_CHUNKS - 1; - sgbRecvCmd = CMD_DLEVEL_END; - return p->wBytes + sizeof(*p); - } else { - sgdwRecvOffset = 0; - sgbRecvCmd = p->bCmd; - } +} + +static BOOL i_own_level(int nReqLevel) +{ + int i; + + for (i = 0; i < MAX_PLRS; i++) { + if (plr[i].plractive + && !plr[i]._pLvlChanging + && plr[i].plrlevel == nReqLevel + && (i != myplr || !gbBufferMsgs)) + break; } - /// ASSERT: assert(p->wOffset == sgdwRecvOffset); - memcpy(&sgRecvBuf[p->wOffset], &p[1], p->wBytes); - sgdwRecvOffset += p->wBytes; - return p->wBytes + sizeof(*p); + return i == myplr; } -void DeltaImportData(BYTE cmd, DWORD recv_offset) +void NetSendCmdDamage(BOOL bHiPri, BYTE bPlr, DWORD dwDam) { - BYTE i; - BYTE *src; + TCmdDamage cmd; - if (sgRecvBuf[0] != 0) - PkwareDecompress(&sgRecvBuf[1], recv_offset, (sizeof(sgRecvBuf) / sizeof(sgRecvBuf[0])) - 1); + cmd.bCmd = CMD_PLRDAMAGE; + cmd.bPlr = bPlr; + cmd.dwDam = dwDam; + if (bHiPri) + NetSendHiPri((BYTE *)&cmd, sizeof(cmd)); + else + NetSendLoPri((BYTE *)&cmd, sizeof(cmd)); +} - src = &sgRecvBuf[1]; - if (cmd == CMD_DLEVEL_JUNK) { - DeltaImportJunk(src); #ifdef HELLFIRE - } else if (cmd >= CMD_DLEVEL_0 && cmd <= CMD_DLEVEL_24) { -#else - } else if (cmd >= CMD_DLEVEL_0 && cmd <= CMD_DLEVEL_16) { +void NetSendCmdMonDmg(BOOL bHiPri, WORD wMon, DWORD dwDam) +{ + TCmdMonDamage cmd; + + cmd.bCmd = CMD_MONSTDAMAGE; + cmd.wMon = wMon; + cmd.dwDam = dwDam; + if (bHiPri) + NetSendHiPri((BYTE *)&cmd, sizeof(cmd)); + else + NetSendLoPri((BYTE *)&cmd, sizeof(cmd)); +} #endif - i = cmd - CMD_DLEVEL_0; - src = DeltaImportItem(src, sgLevels[i].item); - src = DeltaImportObject(src, sgLevels[i].object); - DeltaImportMonster(src, sgLevels[i].monster); - } else { - app_fatal("msg:1"); - } - sgbDeltaChunks++; - sgbDeltaChanged = TRUE; +void NetSendCmdString(int pmask, const char *pszStr) +{ + int dwStrLen; + TCmdString cmd; + + dwStrLen = strlen(pszStr); + cmd.bCmd = CMD_STRING; + strcpy(cmd.str, pszStr); + multi_send_msg_packet(pmask, (BYTE *)&cmd.bCmd, dwStrLen + 2); } -BYTE *DeltaImportItem(BYTE *src, TCmdPItem *dst) +static DWORD On_STRING2(int pnum, TCmd *pCmd) { - int i; + TCmdString *p = (TCmdString *)pCmd; - for (i = 0; i < MAXITEMS; i++) { - if (*src == 0xFF) { - memset(dst, 0xFF, sizeof(TCmdPItem)); - src++; - } else { - memcpy(dst, src, sizeof(TCmdPItem)); - src += sizeof(TCmdPItem); - } - dst++; - } + int len = strlen(p->str); + if (!gbBufferMsgs) + SendPlrMsg(pnum, p->str); - return src; + return len + 2; // length of string + nul terminator + sizeof(p->bCmd) } -BYTE *DeltaImportObject(BYTE *src, DObjectStr *dst) +static void delta_open_portal(int pnum, BYTE x, BYTE y, BYTE bLevel, BYTE bLType, BYTE bSetLvl) { - memcpy(dst, src, sizeof(DObjectStr) * MAXOBJECTS); - return src + sizeof(DObjectStr) * MAXOBJECTS; + sgbDeltaChanged = TRUE; + sgJunk.portal[pnum].x = x; + sgJunk.portal[pnum].y = y; + sgJunk.portal[pnum].level = bLevel; + sgJunk.portal[pnum].ltype = bLType; + sgJunk.portal[pnum].setlvl = bSetLvl; } -BYTE *DeltaImportMonster(BYTE *src, DMonsterStr *dst) +void delta_close_portal(int pnum) { - int i; - - for (i = 0; i < MAXMONSTERS; i++) { - if (*src == 0xFF) { - memset(dst, 0xFF, sizeof(DMonsterStr)); - src++; - } else { - memcpy(dst, src, sizeof(DMonsterStr)); - src += sizeof(DMonsterStr); - } - dst++; - } - - return src; + memset(&sgJunk.portal[pnum], 0xFF, sizeof(sgJunk.portal[pnum])); + sgbDeltaChanged = TRUE; } -void DeltaImportJunk(BYTE *src) +static void check_update_plr(int pnum) { - int i; - MultiQuests *mq; + if (gbMaxPlayers != 1 && pnum == myplr) + pfile_update(TRUE); +} - for (i = 0; i < MAXPORTAL; i++) { - if (*src == 0xFF) { - memset(&sgJunk.portal[i], 0xFF, sizeof(DPortal)); - src++; - SetPortalStats(i, FALSE, 0, 0, 0, DTYPE_TOWN); - } else { - memcpy(&sgJunk.portal[i], src, sizeof(DPortal)); - src += sizeof(DPortal); - SetPortalStats( - i, - TRUE, - sgJunk.portal[i].x, - sgJunk.portal[i].y, - sgJunk.portal[i].level, - sgJunk.portal[i].ltype); - } - } +static void __cdecl msg_errorf(const char *pszFmt, ...) +{ + static DWORD msg_err_timer; + DWORD ticks; + char msg[256]; + va_list va; - mq = sgJunk.quests; - for (i = 0; i < MAXQUESTS; i++) { - if (questlist[i]._qflags & QUEST_ANY) { - memcpy(mq, src, sizeof(MultiQuests)); - src += sizeof(MultiQuests); - quests[i]._qlog = mq->qlog; - quests[i]._qactive = mq->qstate; - quests[i]._qvar1 = mq->qvar1; - mq++; - } + va_start(va, pszFmt); + ticks = GetTickCount(); + if (ticks - msg_err_timer >= 5000) { + msg_err_timer = ticks; + vsprintf(msg, pszFmt, va); + ErrorPlrMsg(msg); } + va_end(va); } -DWORD On_SYNCDATA(TCmd *pCmd, int pnum) +static DWORD On_SYNCDATA(TCmd *pCmd, int pnum) { return sync_update(pnum, (const BYTE *)pCmd); } -DWORD On_WALKXY(TCmd *pCmd, int pnum) +static DWORD On_WALKXY(TCmd *pCmd, int pnum) { TCmdLoc *p = (TCmdLoc *)pCmd; @@ -1343,7 +1334,7 @@ DWORD On_WALKXY(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_ADDSTR(TCmd *pCmd, int pnum) +static DWORD On_ADDSTR(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -1355,7 +1346,7 @@ DWORD On_ADDSTR(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_ADDMAG(TCmd *pCmd, int pnum) +static DWORD On_ADDMAG(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -1367,7 +1358,7 @@ DWORD On_ADDMAG(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_ADDDEX(TCmd *pCmd, int pnum) +static DWORD On_ADDDEX(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -1379,7 +1370,7 @@ DWORD On_ADDDEX(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_ADDVIT(TCmd *pCmd, int pnum) +static DWORD On_ADDVIT(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -1391,7 +1382,7 @@ DWORD On_ADDVIT(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_SBSPELL(TCmd *pCmd, int pnum) +static DWORD On_SBSPELL(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -1409,24 +1400,7 @@ DWORD On_SBSPELL(TCmd *pCmd, int pnum) return sizeof(*p); } -void __cdecl msg_errorf(const char *pszFmt, ...) -{ - static DWORD msg_err_timer; - DWORD ticks; - char msg[256]; - va_list va; - - va_start(va, pszFmt); - ticks = GetTickCount(); - if (ticks - msg_err_timer >= 5000) { - msg_err_timer = ticks; - vsprintf(msg, pszFmt, va); - ErrorPlrMsg(msg); - } - va_end(va); -} - -DWORD On_GOTOGETITEM(TCmd *pCmd, int pnum) +static DWORD On_GOTOGETITEM(TCmd *pCmd, int pnum) { TCmdLocParam1 *p = (TCmdLocParam1 *)pCmd; @@ -1439,7 +1413,7 @@ DWORD On_GOTOGETITEM(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_REQUESTGITEM(TCmd *pCmd, int pnum) +static DWORD On_REQUESTGITEM(TCmd *pCmd, int pnum) { TCmdGItem *p = (TCmdGItem *)pCmd; @@ -1461,22 +1435,7 @@ DWORD On_REQUESTGITEM(TCmd *pCmd, int pnum) return sizeof(*p); } -BOOL i_own_level(int nReqLevel) -{ - int i; - - for (i = 0; i < MAX_PLRS; i++) { - if (plr[i].plractive - && !plr[i]._pLvlChanging - && plr[i].plrlevel == nReqLevel - && (i != myplr || !gbBufferMsgs)) - break; - } - - return i == myplr; -} - -DWORD On_GETITEM(TCmd *pCmd, int pnum) +static DWORD On_GETITEM(TCmd *pCmd, int pnum) { TCmdGItem *p = (TCmdGItem *)pCmd; @@ -1490,89 +1449,24 @@ DWORD On_GETITEM(TCmd *pCmd, int pnum) if (currlevel != p->bLevel) { ii = SyncPutItem(myplr, plr[myplr]._px, plr[myplr]._py, p->wIndx, p->wCI, p->dwSeed, p->bId, p->bDur, p->bMDur, p->bCh, p->bMCh, p->wValue, p->dwBuff #ifdef HELLFIRE - , p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC -#endif - ); - if (ii != -1) - InvGetItem(myplr, ii); - } else - InvGetItem(myplr, ii); - } else - SyncGetItem(p->x, p->y, p->wIndx, p->wCI, p->dwSeed); - } - } else - NetSendCmdGItem2(TRUE, CMD_GETITEM, p->bMaster, p->bPnum, p); - } - - return sizeof(*p); -} - -BOOL delta_get_item(TCmdGItem *pI, BYTE bLevel) -{ - TCmdPItem *pD; - int i; - - if (gbMaxPlayers == 1) - return TRUE; - - pD = sgLevels[bLevel].item; - for (i = 0; i < MAXITEMS; i++, pD++) { - if (pD->bCmd == 0xFF || pD->wIndx != pI->wIndx || pD->wCI != pI->wCI || pD->dwSeed != pI->dwSeed) - continue; - - if (pD->bCmd == CMD_WALKXY) { - return TRUE; - } - if (pD->bCmd == CMD_STAND) { - sgbDeltaChanged = TRUE; - pD->bCmd = CMD_WALKXY; - return TRUE; - } - if (pD->bCmd == CMD_ACK_PLRINFO) { - sgbDeltaChanged = TRUE; - pD->bCmd = 0xFF; - return TRUE; - } - - app_fatal("delta:1"); - break; - } - - if ((pI->wCI & CF_PREGEN) == 0) - return FALSE; - - pD = sgLevels[bLevel].item; - for (i = 0; i < MAXITEMS; i++, pD++) { - if (pD->bCmd == 0xFF) { - sgbDeltaChanged = TRUE; - pD->bCmd = CMD_WALKXY; - pD->x = pI->x; - pD->y = pI->y; - pD->wIndx = pI->wIndx; - pD->wCI = pI->wCI; - pD->dwSeed = pI->dwSeed; - pD->bId = pI->bId; - pD->bDur = pI->bDur; - pD->bMDur = pI->bMDur; - pD->bCh = pI->bCh; - pD->bMCh = pI->bMCh; - pD->wValue = pI->wValue; - pD->dwBuff = pI->dwBuff; -#ifdef HELLFIRE - pD->wToHit = pI->wToHit; - pD->wMaxDam = pI->wMaxDam; - pD->bMinStr = pI->bMinStr; - pD->bMinMag = pI->bMinMag; - pD->bMinDex = pI->bMinDex; - pD->bAC = pI->bAC; + , p->wToHit, p->wMaxDam, p->bMinStr, p->bMinMag, p->bMinDex, p->bAC #endif - break; - } + ); + if (ii != -1) + InvGetItem(myplr, ii); + } else + InvGetItem(myplr, ii); + } else + SyncGetItem(p->x, p->y, p->wIndx, p->wCI, p->dwSeed); + } + } else + NetSendCmdGItem2(TRUE, CMD_GETITEM, p->bMaster, p->bPnum, p); } - return TRUE; + + return sizeof(*p); } -DWORD On_GOTOAGETITEM(TCmd *pCmd, int pnum) +static DWORD On_GOTOAGETITEM(TCmd *pCmd, int pnum) { TCmdLocParam1 *p = (TCmdLocParam1 *)pCmd; @@ -1585,7 +1479,7 @@ DWORD On_GOTOAGETITEM(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_REQUESTAGITEM(TCmd *pCmd, int pnum) +static DWORD On_REQUESTAGITEM(TCmd *pCmd, int pnum) { TCmdGItem *p = (TCmdGItem *)pCmd; @@ -1607,7 +1501,7 @@ DWORD On_REQUESTAGITEM(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_AGETITEM(TCmd *pCmd, int pnum) +static DWORD On_AGETITEM(TCmd *pCmd, int pnum) { TCmdGItem *p = (TCmdGItem *)pCmd; @@ -1638,7 +1532,7 @@ DWORD On_AGETITEM(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_ITEMEXTRA(TCmd *pCmd, int pnum) +static DWORD On_ITEMEXTRA(TCmd *pCmd, int pnum) { TCmdGItem *p = (TCmdGItem *)pCmd; @@ -1653,7 +1547,7 @@ DWORD On_ITEMEXTRA(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_PUTITEM(TCmd *pCmd, int pnum) +static DWORD On_PUTITEM(TCmd *pCmd, int pnum) { TCmdPItem *p = (TCmdPItem *)pCmd; @@ -1684,47 +1578,7 @@ DWORD On_PUTITEM(TCmd *pCmd, int pnum) return sizeof(*p); } -void delta_put_item(TCmdPItem *pI, int x, int y, BYTE bLevel) -{ - int i; - TCmdPItem *pD; - - if (gbMaxPlayers == 1) { - return; - } - pD = sgLevels[bLevel].item; - for (i = 0; i < MAXITEMS; i++, pD++) { - if (pD->bCmd != CMD_WALKXY - && pD->bCmd != 0xFF - && pD->wIndx == pI->wIndx - && pD->wCI == pI->wCI - && pD->dwSeed == pI->dwSeed) { - if (pD->bCmd == CMD_ACK_PLRINFO) - return; - app_fatal("Trying to drop a floor item?"); - } - } - - pD = sgLevels[bLevel].item; - for (i = 0; i < MAXITEMS; i++, pD++) { - if (pD->bCmd == 0xFF) { - sgbDeltaChanged = TRUE; - memcpy(pD, pI, sizeof(TCmdPItem)); - pD->bCmd = CMD_ACK_PLRINFO; - pD->x = x; - pD->y = y; - return; - } - } -} - -void check_update_plr(int pnum) -{ - if (gbMaxPlayers != 1 && pnum == myplr) - pfile_update(TRUE); -} - -DWORD On_SYNCPUTITEM(TCmd *pCmd, int pnum) +static DWORD On_SYNCPUTITEM(TCmd *pCmd, int pnum) { TCmdPItem *p = (TCmdPItem *)pCmd; @@ -1751,7 +1605,7 @@ DWORD On_SYNCPUTITEM(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_RESPAWNITEM(TCmd *pCmd, int pnum) +static DWORD On_RESPAWNITEM(TCmd *pCmd, int pnum) { TCmdPItem *p = (TCmdPItem *)pCmd; @@ -1772,7 +1626,7 @@ DWORD On_RESPAWNITEM(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_ATTACKXY(TCmd *pCmd, int pnum) +static DWORD On_ATTACKXY(TCmd *pCmd, int pnum) { TCmdLoc *p = (TCmdLoc *)pCmd; @@ -1786,7 +1640,7 @@ DWORD On_ATTACKXY(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_SATTACKXY(TCmd *pCmd, int pnum) +static DWORD On_SATTACKXY(TCmd *pCmd, int pnum) { TCmdLoc *p = (TCmdLoc *)pCmd; @@ -1800,7 +1654,7 @@ DWORD On_SATTACKXY(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_RATTACKXY(TCmd *pCmd, int pnum) +static DWORD On_RATTACKXY(TCmd *pCmd, int pnum) { TCmdLoc *p = (TCmdLoc *)pCmd; @@ -1814,7 +1668,7 @@ DWORD On_RATTACKXY(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_SPELLXYD(TCmd *pCmd, int pnum) +static DWORD On_SPELLXYD(TCmd *pCmd, int pnum) { TCmdLocParam3 *p = (TCmdLocParam3 *)pCmd; @@ -1837,7 +1691,7 @@ DWORD On_SPELLXYD(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_SPELLXY(TCmd *pCmd, int pnum) +static DWORD On_SPELLXY(TCmd *pCmd, int pnum) { TCmdLocParam2 *p = (TCmdLocParam2 *)pCmd; @@ -1859,7 +1713,7 @@ DWORD On_SPELLXY(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_TSPELLXY(TCmd *pCmd, int pnum) +static DWORD On_TSPELLXY(TCmd *pCmd, int pnum) { TCmdLocParam2 *p = (TCmdLocParam2 *)pCmd; @@ -1881,7 +1735,7 @@ DWORD On_TSPELLXY(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_OPOBJXY(TCmd *pCmd, int pnum) +static DWORD On_OPOBJXY(TCmd *pCmd, int pnum) { TCmdLocParam1 *p = (TCmdLocParam1 *)pCmd; @@ -1897,7 +1751,7 @@ DWORD On_OPOBJXY(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_DISARMXY(TCmd *pCmd, int pnum) +static DWORD On_DISARMXY(TCmd *pCmd, int pnum) { TCmdLocParam1 *p = (TCmdLocParam1 *)pCmd; @@ -1913,7 +1767,7 @@ DWORD On_DISARMXY(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_OPOBJT(TCmd *pCmd, int pnum) +static DWORD On_OPOBJT(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -1925,7 +1779,7 @@ DWORD On_OPOBJT(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_ATTACKID(TCmd *pCmd, int pnum) +static DWORD On_ATTACKID(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -1941,7 +1795,7 @@ DWORD On_ATTACKID(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_ATTACKPID(TCmd *pCmd, int pnum) +static DWORD On_ATTACKPID(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -1954,7 +1808,7 @@ DWORD On_ATTACKPID(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_RATTACKID(TCmd *pCmd, int pnum) +static DWORD On_RATTACKID(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -1967,7 +1821,7 @@ DWORD On_RATTACKID(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_RATTACKPID(TCmd *pCmd, int pnum) +static DWORD On_RATTACKPID(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -1980,7 +1834,7 @@ DWORD On_RATTACKPID(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_SPELLID(TCmd *pCmd, int pnum) +static DWORD On_SPELLID(TCmd *pCmd, int pnum) { TCmdParam3 *p = (TCmdParam3 *)pCmd; @@ -2001,7 +1855,7 @@ DWORD On_SPELLID(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_SPELLPID(TCmd *pCmd, int pnum) +static DWORD On_SPELLPID(TCmd *pCmd, int pnum) { TCmdParam3 *p = (TCmdParam3 *)pCmd; @@ -2022,7 +1876,7 @@ DWORD On_SPELLPID(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_TSPELLID(TCmd *pCmd, int pnum) +static DWORD On_TSPELLID(TCmd *pCmd, int pnum) { TCmdParam3 *p = (TCmdParam3 *)pCmd; @@ -2043,7 +1897,7 @@ DWORD On_TSPELLID(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_TSPELLPID(TCmd *pCmd, int pnum) +static DWORD On_TSPELLPID(TCmd *pCmd, int pnum) { TCmdParam3 *p = (TCmdParam3 *)pCmd; @@ -2064,7 +1918,7 @@ DWORD On_TSPELLPID(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_KNOCKBACK(TCmd *pCmd, int pnum) +static DWORD On_KNOCKBACK(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2076,7 +1930,7 @@ DWORD On_KNOCKBACK(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_RESURRECT(TCmd *pCmd, int pnum) +static DWORD On_RESURRECT(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2090,7 +1944,7 @@ DWORD On_RESURRECT(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_HEALOTHER(TCmd *pCmd, int pnum) +static DWORD On_HEALOTHER(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2100,7 +1954,7 @@ DWORD On_HEALOTHER(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_TALKXY(TCmd *pCmd, int pnum) +static DWORD On_TALKXY(TCmd *pCmd, int pnum) { TCmdLocParam1 *p = (TCmdLocParam1 *)pCmd; @@ -2113,7 +1967,7 @@ DWORD On_TALKXY(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_NEWLVL(TCmd *pCmd, int pnum) +static DWORD On_NEWLVL(TCmd *pCmd, int pnum) { TCmdParam2 *p = (TCmdParam2 *)pCmd; @@ -2125,7 +1979,7 @@ DWORD On_NEWLVL(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_WARP(TCmd *pCmd, int pnum) +static DWORD On_WARP(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2142,7 +1996,7 @@ DWORD On_WARP(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_MONSTDEATH(TCmd *pCmd, int pnum) +static DWORD On_MONSTDEATH(TCmd *pCmd, int pnum) { TCmdLocParam1 *p = (TCmdLocParam1 *)pCmd; @@ -2157,7 +2011,7 @@ DWORD On_MONSTDEATH(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_KILLGOLEM(TCmd *pCmd, int pnum) +static DWORD On_KILLGOLEM(TCmd *pCmd, int pnum) { TCmdLocParam1 *p = (TCmdLocParam1 *)pCmd; @@ -2172,7 +2026,7 @@ DWORD On_KILLGOLEM(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_AWAKEGOLEM(TCmd *pCmd, int pnum) +static DWORD On_AWAKEGOLEM(TCmd *pCmd, int pnum) { TCmdGolem *p = (TCmdGolem *)pCmd; @@ -2198,7 +2052,7 @@ DWORD On_AWAKEGOLEM(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_MONSTDAMAGE(TCmd *pCmd, int pnum) +static DWORD On_MONSTDAMAGE(TCmd *pCmd, int pnum) { TCmdParam2 *p = (TCmdParam2 *)pCmd; @@ -2220,7 +2074,7 @@ DWORD On_MONSTDAMAGE(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_PLRDEAD(TCmd *pCmd, int pnum) +static DWORD On_PLRDEAD(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2234,7 +2088,7 @@ DWORD On_PLRDEAD(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_PLRDAMAGE(TCmd *pCmd, int pnum) +static DWORD On_PLRDAMAGE(TCmd *pCmd, int pnum) { TCmdDamage *p = (TCmdDamage *)pCmd; @@ -2257,7 +2111,7 @@ DWORD On_PLRDAMAGE(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_OPENDOOR(TCmd *pCmd, int pnum) +static DWORD On_OPENDOOR(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2272,15 +2126,7 @@ DWORD On_OPENDOOR(TCmd *pCmd, int pnum) return sizeof(*p); } -void delta_sync_object(int oi, BYTE bCmd, BYTE bLevel) -{ - if (gbMaxPlayers != 1) { - sgbDeltaChanged = TRUE; - sgLevels[bLevel].object[oi].bCmd = bCmd; - } -} - -DWORD On_CLOSEDOOR(TCmd *pCmd, int pnum) +static DWORD On_CLOSEDOOR(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2295,7 +2141,7 @@ DWORD On_CLOSEDOOR(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_OPERATEOBJ(TCmd *pCmd, int pnum) +static DWORD On_OPERATEOBJ(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2310,7 +2156,7 @@ DWORD On_OPERATEOBJ(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_PLROPOBJ(TCmd *pCmd, int pnum) +static DWORD On_PLROPOBJ(TCmd *pCmd, int pnum) { TCmdParam2 *p = (TCmdParam2 *)pCmd; @@ -2325,7 +2171,7 @@ DWORD On_PLROPOBJ(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_BREAKOBJ(TCmd *pCmd, int pnum) +static DWORD On_BREAKOBJ(TCmd *pCmd, int pnum) { TCmdParam2 *p = (TCmdParam2 *)pCmd; @@ -2340,7 +2186,7 @@ DWORD On_BREAKOBJ(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_CHANGEPLRITEMS(TCmd *pCmd, int pnum) +static DWORD On_CHANGEPLRITEMS(TCmd *pCmd, int pnum) { TCmdChItem *p = (TCmdChItem *)pCmd; @@ -2352,7 +2198,7 @@ DWORD On_CHANGEPLRITEMS(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_DELPLRITEMS(TCmd *pCmd, int pnum) +static DWORD On_DELPLRITEMS(TCmd *pCmd, int pnum) { TCmdDelItem *p = (TCmdDelItem *)pCmd; @@ -2364,7 +2210,7 @@ DWORD On_DELPLRITEMS(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_PLRLEVEL(TCmd *pCmd, int pnum) +static DWORD On_PLRLEVEL(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2376,7 +2222,7 @@ DWORD On_PLRLEVEL(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_DROPITEM(TCmd *pCmd, int pnum) +static DWORD On_DROPITEM(TCmd *pCmd, int pnum) { TCmdPItem *p = (TCmdPItem *)pCmd; @@ -2388,7 +2234,7 @@ DWORD On_DROPITEM(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_SEND_PLRINFO(TCmd *pCmd, int pnum) +static DWORD On_SEND_PLRINFO(TCmd *pCmd, int pnum) { TCmdPlrInfoHdr *p = (TCmdPlrInfoHdr *)pCmd; @@ -2400,12 +2246,12 @@ DWORD On_SEND_PLRINFO(TCmd *pCmd, int pnum) return p->wBytes + sizeof(*p); } -DWORD On_ACK_PLRINFO(TCmd *pCmd, int pnum) +static DWORD On_ACK_PLRINFO(TCmd *pCmd, int pnum) { return On_SEND_PLRINFO(pCmd, pnum); } -DWORD On_PLAYER_JOINLEVEL(TCmd *pCmd, int pnum) +static DWORD On_PLAYER_JOINLEVEL(TCmd *pCmd, int pnum) { TCmdLocParam1 *p = (TCmdLocParam1 *)pCmd; @@ -2448,7 +2294,7 @@ DWORD On_PLAYER_JOINLEVEL(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_ACTIVATEPORTAL(TCmd *pCmd, int pnum) +static DWORD On_ACTIVATEPORTAL(TCmd *pCmd, int pnum) { TCmdLocParam3 *p = (TCmdLocParam3 *)pCmd; @@ -2480,17 +2326,7 @@ DWORD On_ACTIVATEPORTAL(TCmd *pCmd, int pnum) return sizeof(*p); } -void delta_open_portal(int pnum, BYTE x, BYTE y, BYTE bLevel, BYTE bLType, BYTE bSetLvl) -{ - sgbDeltaChanged = TRUE; - sgJunk.portal[pnum].x = x; - sgJunk.portal[pnum].y = y; - sgJunk.portal[pnum].level = bLevel; - sgJunk.portal[pnum].ltype = bLType; - sgJunk.portal[pnum].setlvl = bSetLvl; -} - -DWORD On_DEACTIVATEPORTAL(TCmd *pCmd, int pnum) +static DWORD On_DEACTIVATEPORTAL(TCmd *pCmd, int pnum) { if (gbBufferMsgs == 1) msg_send_packet(pnum, pCmd, sizeof(*pCmd)); @@ -2504,7 +2340,7 @@ DWORD On_DEACTIVATEPORTAL(TCmd *pCmd, int pnum) return sizeof(*pCmd); } -DWORD On_RETOWN(TCmd *pCmd, int pnum) +static DWORD On_RETOWN(TCmd *pCmd, int pnum) { if (gbBufferMsgs == 1) msg_send_packet(pnum, pCmd, sizeof(*pCmd)); @@ -2519,7 +2355,7 @@ DWORD On_RETOWN(TCmd *pCmd, int pnum) return sizeof(*pCmd); } -DWORD On_SETSTR(TCmd *pCmd, int pnum) +static DWORD On_SETSTR(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2531,7 +2367,7 @@ DWORD On_SETSTR(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_SETDEX(TCmd *pCmd, int pnum) +static DWORD On_SETDEX(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2543,7 +2379,7 @@ DWORD On_SETDEX(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_SETMAG(TCmd *pCmd, int pnum) +static DWORD On_SETMAG(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2555,7 +2391,7 @@ DWORD On_SETMAG(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_SETVIT(TCmd *pCmd, int pnum) +static DWORD On_SETVIT(TCmd *pCmd, int pnum) { TCmdParam1 *p = (TCmdParam1 *)pCmd; @@ -2567,23 +2403,12 @@ DWORD On_SETVIT(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_STRING(TCmd *pCmd, int pnum) +static DWORD On_STRING(TCmd *pCmd, int pnum) { return On_STRING2(pnum, pCmd); } -DWORD On_STRING2(int pnum, TCmd *pCmd) -{ - TCmdString *p = (TCmdString *)pCmd; - - int len = strlen(p->str); - if (!gbBufferMsgs) - SendPlrMsg(pnum, p->str); - - return len + 2; // length of string + nul terminator + sizeof(p->bCmd) -} - -DWORD On_SYNCQUEST(TCmd *pCmd, int pnum) +static DWORD On_SYNCQUEST(TCmd *pCmd, int pnum) { TCmdQuest *p = (TCmdQuest *)pCmd; @@ -2599,7 +2424,7 @@ DWORD On_SYNCQUEST(TCmd *pCmd, int pnum) } #ifdef HELLFIRE -DWORD On_ENDREFLECT(TCmd *pCmd, int pnum) +static DWORD On_ENDREFLECT(TCmd *pCmd, int pnum) { int i; @@ -2617,7 +2442,7 @@ DWORD On_ENDREFLECT(TCmd *pCmd, int pnum) } #endif -DWORD On_ENDSHIELD(TCmd *pCmd, int pnum) +static DWORD On_ENDSHIELD(TCmd *pCmd, int pnum) { int i; @@ -2634,7 +2459,7 @@ DWORD On_ENDSHIELD(TCmd *pCmd, int pnum) return sizeof(*pCmd); } -DWORD On_CHEAT_EXPERIENCE(TCmd *pCmd, int pnum) +static DWORD On_CHEAT_EXPERIENCE(TCmd *pCmd, int pnum) { #ifdef _DEBUG if (gbBufferMsgs == 1) @@ -2647,7 +2472,7 @@ DWORD On_CHEAT_EXPERIENCE(TCmd *pCmd, int pnum) return sizeof(*pCmd); } -DWORD On_CHEAT_SPELL_LEVEL(TCmd *pCmd, int pnum) +static DWORD On_CHEAT_SPELL_LEVEL(TCmd *pCmd, int pnum) { #ifdef _DEBUG if (gbBufferMsgs == 1) @@ -2658,13 +2483,13 @@ DWORD On_CHEAT_SPELL_LEVEL(TCmd *pCmd, int pnum) return sizeof(*pCmd); } -DWORD On_DEBUG(TCmd *pCmd, int pnum) +static DWORD On_DEBUG(TCmd *pCmd, int pnum) { return sizeof(*pCmd); } #ifndef HELLFIRE -DWORD On_NOVA(TCmd *pCmd, int pnum) +static DWORD On_NOVA(TCmd *pCmd, int pnum) { TCmdLoc *p = (TCmdLoc *)pCmd; @@ -2681,7 +2506,7 @@ DWORD On_NOVA(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_SETSHIELD(TCmd *pCmd, int pnum) +static DWORD On_SETSHIELD(TCmd *pCmd, int pnum) { if (gbBufferMsgs != 1) plr[pnum].pManaShield = TRUE; @@ -2689,7 +2514,7 @@ DWORD On_SETSHIELD(TCmd *pCmd, int pnum) return sizeof(*pCmd); } -DWORD On_REMSHIELD(TCmd *pCmd, int pnum) +static DWORD On_REMSHIELD(TCmd *pCmd, int pnum) { if (gbBufferMsgs != 1) plr[pnum].pManaShield = FALSE; @@ -2697,7 +2522,7 @@ DWORD On_REMSHIELD(TCmd *pCmd, int pnum) return sizeof(*pCmd); } #else -DWORD On_REFLECT(TCmd *pCmd, int pnum) +static DWORD On_REFLECT(TCmd *pCmd, int pnum) { int i, mx; @@ -2717,7 +2542,7 @@ DWORD On_REFLECT(TCmd *pCmd, int pnum) return sizeof(*pCmd); } -DWORD On_NAKRUL(TCmd *pCmd, int pnum) +static DWORD On_NAKRUL(TCmd *pCmd, int pnum) { if ( gbBufferMsgs != 1 ) { @@ -2729,7 +2554,7 @@ DWORD On_NAKRUL(TCmd *pCmd, int pnum) return sizeof(*pCmd); } -DWORD On_OPENHIVE(TCmd *pCmd, int pnum) +static DWORD On_OPENHIVE(TCmd *pCmd, int pnum) { TCmdLocParam2 *p = (TCmdLocParam2 *)pCmd; if ( gbBufferMsgs != 1 ) @@ -2740,7 +2565,7 @@ DWORD On_OPENHIVE(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD On_OPENCRYPT(TCmd *pCmd, int pnum) +static DWORD On_OPENCRYPT(TCmd *pCmd, int pnum) { if ( gbBufferMsgs != 1 ) { @@ -2752,3 +2577,179 @@ DWORD On_OPENCRYPT(TCmd *pCmd, int pnum) return sizeof(*pCmd); } #endif + +DWORD ParseCmd(int pnum, TCmd *pCmd) +{ + sbLastCmd = pCmd->bCmd; + if (sgwPackPlrOffsetTbl[pnum] != 0 && sbLastCmd != CMD_ACK_PLRINFO && sbLastCmd != CMD_SEND_PLRINFO) + return 0; + + switch (pCmd->bCmd) { + case CMD_SYNCDATA: + return On_SYNCDATA(pCmd, pnum); + case CMD_WALKXY: + return On_WALKXY(pCmd, pnum); + case CMD_ADDSTR: + return On_ADDSTR(pCmd, pnum); + case CMD_ADDDEX: + return On_ADDDEX(pCmd, pnum); + case CMD_ADDMAG: + return On_ADDMAG(pCmd, pnum); + case CMD_ADDVIT: + return On_ADDVIT(pCmd, pnum); + case CMD_SBSPELL: + return On_SBSPELL(pCmd, pnum); + case CMD_GOTOGETITEM: + return On_GOTOGETITEM(pCmd, pnum); + case CMD_REQUESTGITEM: + return On_REQUESTGITEM(pCmd, pnum); + case CMD_GETITEM: + return On_GETITEM(pCmd, pnum); + case CMD_GOTOAGETITEM: + return On_GOTOAGETITEM(pCmd, pnum); + case CMD_REQUESTAGITEM: + return On_REQUESTAGITEM(pCmd, pnum); + case CMD_AGETITEM: + return On_AGETITEM(pCmd, pnum); + case CMD_ITEMEXTRA: + return On_ITEMEXTRA(pCmd, pnum); + case CMD_PUTITEM: + return On_PUTITEM(pCmd, pnum); + case CMD_SYNCPUTITEM: + return On_SYNCPUTITEM(pCmd, pnum); + case CMD_RESPAWNITEM: + return On_RESPAWNITEM(pCmd, pnum); + case CMD_ATTACKXY: + return On_ATTACKXY(pCmd, pnum); + case CMD_SATTACKXY: + return On_SATTACKXY(pCmd, pnum); + case CMD_RATTACKXY: + return On_RATTACKXY(pCmd, pnum); + case CMD_SPELLXYD: + return On_SPELLXYD(pCmd, pnum); + case CMD_SPELLXY: + return On_SPELLXY(pCmd, pnum); + case CMD_TSPELLXY: + return On_TSPELLXY(pCmd, pnum); + case CMD_OPOBJXY: + return On_OPOBJXY(pCmd, pnum); + case CMD_DISARMXY: + return On_DISARMXY(pCmd, pnum); + case CMD_OPOBJT: + return On_OPOBJT(pCmd, pnum); + case CMD_ATTACKID: + return On_ATTACKID(pCmd, pnum); + case CMD_ATTACKPID: + return On_ATTACKPID(pCmd, pnum); + case CMD_RATTACKID: + return On_RATTACKID(pCmd, pnum); + case CMD_RATTACKPID: + return On_RATTACKPID(pCmd, pnum); + case CMD_SPELLID: + return On_SPELLID(pCmd, pnum); + case CMD_SPELLPID: + return On_SPELLPID(pCmd, pnum); + case CMD_TSPELLID: + return On_TSPELLID(pCmd, pnum); + case CMD_TSPELLPID: + return On_TSPELLPID(pCmd, pnum); + case CMD_KNOCKBACK: + return On_KNOCKBACK(pCmd, pnum); + case CMD_RESURRECT: + return On_RESURRECT(pCmd, pnum); + case CMD_HEALOTHER: + return On_HEALOTHER(pCmd, pnum); + case CMD_TALKXY: + return On_TALKXY(pCmd, pnum); + case CMD_DEBUG: + return On_DEBUG(pCmd, pnum); + case CMD_NEWLVL: + return On_NEWLVL(pCmd, pnum); + case CMD_WARP: + return On_WARP(pCmd, pnum); + case CMD_MONSTDEATH: + return On_MONSTDEATH(pCmd, pnum); + case CMD_KILLGOLEM: + return On_KILLGOLEM(pCmd, pnum); + case CMD_AWAKEGOLEM: + return On_AWAKEGOLEM(pCmd, pnum); + case CMD_MONSTDAMAGE: + return On_MONSTDAMAGE(pCmd, pnum); + case CMD_PLRDEAD: + return On_PLRDEAD(pCmd, pnum); + case CMD_PLRDAMAGE: + return On_PLRDAMAGE(pCmd, pnum); + case CMD_OPENDOOR: + return On_OPENDOOR(pCmd, pnum); + case CMD_CLOSEDOOR: + return On_CLOSEDOOR(pCmd, pnum); + case CMD_OPERATEOBJ: + return On_OPERATEOBJ(pCmd, pnum); + case CMD_PLROPOBJ: + return On_PLROPOBJ(pCmd, pnum); + case CMD_BREAKOBJ: + return On_BREAKOBJ(pCmd, pnum); + case CMD_CHANGEPLRITEMS: + return On_CHANGEPLRITEMS(pCmd, pnum); + case CMD_DELPLRITEMS: + return On_DELPLRITEMS(pCmd, pnum); + case CMD_PLRLEVEL: + return On_PLRLEVEL(pCmd, pnum); + case CMD_DROPITEM: + return On_DROPITEM(pCmd, pnum); + case CMD_ACK_PLRINFO: + return On_ACK_PLRINFO(pCmd, pnum); + case CMD_SEND_PLRINFO: + return On_SEND_PLRINFO(pCmd, pnum); + case CMD_PLAYER_JOINLEVEL: + return On_PLAYER_JOINLEVEL(pCmd, pnum); + case CMD_ACTIVATEPORTAL: + return On_ACTIVATEPORTAL(pCmd, pnum); + case CMD_DEACTIVATEPORTAL: + return On_DEACTIVATEPORTAL(pCmd, pnum); + case CMD_RETOWN: + return On_RETOWN(pCmd, pnum); + case CMD_SETSTR: + return On_SETSTR(pCmd, pnum); + case CMD_SETMAG: + return On_SETMAG(pCmd, pnum); + case CMD_SETDEX: + return On_SETDEX(pCmd, pnum); + case CMD_SETVIT: + return On_SETVIT(pCmd, pnum); + case CMD_STRING: + return On_STRING(pCmd, pnum); + case CMD_SYNCQUEST: + return On_SYNCQUEST(pCmd, pnum); + case CMD_ENDSHIELD: + return On_ENDSHIELD(pCmd, pnum); + case CMD_CHEAT_EXPERIENCE: + return On_CHEAT_EXPERIENCE(pCmd, pnum); + case CMD_CHEAT_SPELL_LEVEL: + return On_CHEAT_SPELL_LEVEL(pCmd, pnum); +#ifndef HELLFIRE + case CMD_NOVA: + return On_NOVA(pCmd, pnum); + case CMD_SETSHIELD: + return On_SETSHIELD(pCmd, pnum); + case CMD_REMSHIELD: + return On_REMSHIELD(pCmd, pnum); +#else + case CMD_REFLECT: + return On_REFLECT(pCmd, pnum); + case CMD_NAKRUL: + return On_NAKRUL(pCmd, pnum); + case CMD_OPENHIVE: + return On_OPENHIVE(pCmd, pnum); + case CMD_OPENCRYPT: + return On_OPENCRYPT(pCmd, pnum); +#endif + } + + if (pCmd->bCmd < CMD_DLEVEL_0 || pCmd->bCmd > CMD_DLEVEL_END) { + SNetDropPlayer(pnum, LEAVE_DROP); + return 0; + } + + return On_DLEVEL(pnum, pCmd); +} diff --git a/Source/msg.h b/Source/msg.h index 2ab70f4e0..7aefee9aa 100644 --- a/Source/msg.h +++ b/Source/msg.h @@ -11,25 +11,13 @@ extern BYTE gbBufferMsgs; extern int dwRecCount; void msg_send_drop_pkt(int pnum, int reason); -void msg_send_packet(int pnum, const void *packet, DWORD dwSize); -void msg_get_next_packet(); BOOL msg_wait_resync(); -void msg_free_packets(); -int msg_wait_for_turns(); void run_delta_info(); -void msg_pre_packet(); void DeltaExportData(int pnum); -BYTE *DeltaExportItem(BYTE *dst, TCmdPItem *src); -BYTE *DeltaExportObject(BYTE *dst, DObjectStr *src); -BYTE *DeltaExportMonster(BYTE *dst, DMonsterStr *src); -BYTE *DeltaExportJunk(BYTE *dst); -int msg_comp_level(BYTE *buffer, BYTE *end); 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); -void delta_sync_golem(TCmdGolem *pG, int pnum, BYTE bLevel); -void delta_leave_sync(BYTE bLevel); BOOL delta_portal_inited(int i); BOOL delta_quest_inited(int i); void DeltaAddItem(int ii); @@ -46,9 +34,6 @@ void NetSendCmdParam2(BOOL bHiPri, BYTE bCmd, WORD wParam1, WORD wParam2); void NetSendCmdParam3(BOOL bHiPri, BYTE bCmd, WORD wParam1, WORD wParam2, WORD wParam3); void NetSendCmdQuest(BOOL bHiPri, BYTE q); void NetSendCmdGItem(BOOL bHiPri, BYTE bCmd, BYTE mast, BYTE pnum, BYTE ii); -void NetSendCmdGItem2(BOOL usonly, BYTE bCmd, BYTE mast, BYTE pnum, TCmdGItem *p); -BOOL NetSendCmdReq2(BYTE bCmd, BYTE mast, BYTE pnum, TCmdGItem *p); -void NetSendCmdExtra(TCmdGItem *p); void NetSendCmdPItem(BOOL bHiPri, BYTE bCmd, BYTE x, BYTE y); void NetSendCmdChItem(BOOL bHiPri, BYTE bLoc); void NetSendCmdDelItem(BOOL bHiPri, BYTE bLoc); @@ -60,100 +45,5 @@ 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); -DWORD On_DLEVEL(int pnum, TCmd *pCmd); -void DeltaImportData(BYTE cmd, DWORD recv_offset); -BYTE *DeltaImportItem(BYTE *src, TCmdPItem *dst); -BYTE *DeltaImportObject(BYTE *src, DObjectStr *dst); -BYTE *DeltaImportMonster(BYTE *src, DMonsterStr *dst); -void DeltaImportJunk(BYTE *src); -DWORD On_SYNCDATA(TCmd *pCmd, int pnum); -DWORD On_WALKXY(TCmd *pCmd, int pnum); -DWORD On_ADDSTR(TCmd *pCmd, int pnum); -DWORD On_ADDMAG(TCmd *pCmd, int pnum); -DWORD On_ADDDEX(TCmd *pCmd, int pnum); -DWORD On_ADDVIT(TCmd *pCmd, int pnum); -DWORD On_SBSPELL(TCmd *pCmd, int pnum); -void __cdecl msg_errorf(const char *pszFmt, ...); -DWORD On_GOTOGETITEM(TCmd *pCmd, int pnum); -DWORD On_REQUESTGITEM(TCmd *pCmd, int pnum); -BOOL i_own_level(int nReqLevel); -DWORD On_GETITEM(TCmd *pCmd, int pnum); -BOOL delta_get_item(TCmdGItem *pI, BYTE bLevel); -DWORD On_GOTOAGETITEM(TCmd *pCmd, int pnum); -DWORD On_REQUESTAGITEM(TCmd *pCmd, int pnum); -DWORD On_AGETITEM(TCmd *pCmd, int pnum); -DWORD On_ITEMEXTRA(TCmd *pCmd, int pnum); -DWORD On_PUTITEM(TCmd *pCmd, int pnum); -void delta_put_item(TCmdPItem *pI, int x, int y, BYTE bLevel); -void check_update_plr(int pnum); -DWORD On_SYNCPUTITEM(TCmd *pCmd, int pnum); -DWORD On_RESPAWNITEM(TCmd *pCmd, int pnum); -DWORD On_ATTACKXY(TCmd *pCmd, int pnum); -DWORD On_SATTACKXY(TCmd *pCmd, int pnum); -DWORD On_RATTACKXY(TCmd *pCmd, int pnum); -DWORD On_SPELLXYD(TCmd *pCmd, int pnum); -DWORD On_SPELLXY(TCmd *pCmd, int pnum); -DWORD On_TSPELLXY(TCmd *pCmd, int pnum); -DWORD On_OPOBJXY(TCmd *pCmd, int pnum); -DWORD On_DISARMXY(TCmd *pCmd, int pnum); -DWORD On_OPOBJT(TCmd *pCmd, int pnum); -DWORD On_ATTACKID(TCmd *pCmd, int pnum); -DWORD On_ATTACKPID(TCmd *pCmd, int pnum); -DWORD On_RATTACKID(TCmd *pCmd, int pnum); -DWORD On_RATTACKPID(TCmd *pCmd, int pnum); -DWORD On_SPELLID(TCmd *pCmd, int pnum); -DWORD On_SPELLPID(TCmd *pCmd, int pnum); -DWORD On_TSPELLID(TCmd *pCmd, int pnum); -DWORD On_TSPELLPID(TCmd *pCmd, int pnum); -DWORD On_KNOCKBACK(TCmd *pCmd, int pnum); -DWORD On_RESURRECT(TCmd *pCmd, int pnum); -DWORD On_HEALOTHER(TCmd *pCmd, int pnum); -DWORD On_TALKXY(TCmd *pCmd, int pnum); -DWORD On_NEWLVL(TCmd *pCmd, int pnum); -DWORD On_WARP(TCmd *pCmd, int pnum); -DWORD On_MONSTDEATH(TCmd *pCmd, int pnum); -DWORD On_KILLGOLEM(TCmd *pCmd, int pnum); -DWORD On_AWAKEGOLEM(TCmd *pCmd, int pnum); -DWORD On_MONSTDAMAGE(TCmd *pCmd, int pnum); -DWORD On_PLRDEAD(TCmd *pCmd, int pnum); -DWORD On_PLRDAMAGE(TCmd *pCmd, int pnum); -DWORD On_OPENDOOR(TCmd *pCmd, int pnum); -void delta_sync_object(int oi, BYTE bCmd, BYTE bLevel); -DWORD On_CLOSEDOOR(TCmd *pCmd, int pnum); -DWORD On_OPERATEOBJ(TCmd *pCmd, int pnum); -DWORD On_PLROPOBJ(TCmd *pCmd, int pnum); -DWORD On_BREAKOBJ(TCmd *pCmd, int pnum); -DWORD On_CHANGEPLRITEMS(TCmd *pCmd, int pnum); -DWORD On_DELPLRITEMS(TCmd *pCmd, int pnum); -DWORD On_PLRLEVEL(TCmd *pCmd, int pnum); -DWORD On_DROPITEM(TCmd *pCmd, int pnum); -DWORD On_SEND_PLRINFO(TCmd *pCmd, int pnum); -DWORD On_ACK_PLRINFO(TCmd *pCmd, int pnum); -DWORD On_PLAYER_JOINLEVEL(TCmd *pCmd, int pnum); -DWORD On_ACTIVATEPORTAL(TCmd *pCmd, int pnum); -void delta_open_portal(int pnum, BYTE x, BYTE y, BYTE bLevel, BYTE bLType, BYTE bSetLvl); -DWORD On_DEACTIVATEPORTAL(TCmd *pCmd, int pnum); -DWORD On_RETOWN(TCmd *pCmd, int pnum); -DWORD On_SETSTR(TCmd *pCmd, int pnum); -DWORD On_SETDEX(TCmd *pCmd, int pnum); -DWORD On_SETMAG(TCmd *pCmd, int pnum); -DWORD On_SETVIT(TCmd *pCmd, int pnum); -DWORD On_STRING(TCmd *pCmd, int pnum); -DWORD On_STRING2(int pnum, TCmd *pCmd); -DWORD On_SYNCQUEST(TCmd *pCmd, int pnum); -DWORD On_ENDSHIELD(TCmd *pCmd, int pnum); -DWORD On_CHEAT_EXPERIENCE(TCmd *pCmd, int pnum); -DWORD On_CHEAT_SPELL_LEVEL(TCmd *pCmd, int pnum); -DWORD On_DEBUG(TCmd *pCmd, int pnum); -#ifndef HELLFIRE -DWORD On_NOVA(TCmd *pCmd, int pnum); -DWORD On_SETSHIELD(TCmd *pCmd, int pnum); -DWORD On_REMSHIELD(TCmd *pCmd, int pnum); -#else -DWORD On_REFLECT(TCmd *pCmd, int pnum); -DWORD On_NAKRUL(TCmd *pCmd, int pnum); -DWORD On_OPENHIVE(TCmd *pCmd, int pnum); -DWORD On_OPENCRYPT(TCmd *pCmd, int pnum); -#endif #endif /* __MSG_H__ */