diff --git a/Source/msg.cpp b/Source/msg.cpp index b79554208..cbd436b6f 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -429,8 +429,9 @@ void DeltaImportData(_cmd_id cmd, DWORD recvOffset) byte *src = &sgRecvBuf[1]; if (cmd == CMD_DLEVEL_JUNK) { DeltaImportJunk(src); - } else if (cmd >= CMD_DLEVEL_0 && cmd <= CMD_DLEVEL_24) { - uint8_t i = cmd - CMD_DLEVEL_0; + } else if (cmd == CMD_DLEVEL) { + uint8_t i = static_cast(src[0]); + src += sizeof(uint8_t); DLevel &deltaLevel = GetDeltaLevel(i); src += DeltaImportItem(src, deltaLevel.item); src += DeltaImportObject(src, deltaLevel.object); @@ -448,7 +449,7 @@ DWORD OnLevelData(int pnum, const TCmd *pCmd) const auto &message = *reinterpret_cast(pCmd); if (gbDeltaSender != pnum) { - if (message.bCmd != CMD_DLEVEL_END && (message.bCmd != CMD_DLEVEL_0 || message.wOffset != 0)) { + if (message.bCmd != CMD_DLEVEL_END && (message.bCmd != CMD_DLEVEL || message.wOffset != 0)) { return message.wBytes + sizeof(message); } @@ -461,13 +462,13 @@ DWORD OnLevelData(int pnum, const TCmd *pCmd) sgbDeltaChunks = MAX_CHUNKS - 1; return message.wBytes + sizeof(message); } - if (message.bCmd != CMD_DLEVEL_0 || message.wOffset != 0) { + if (message.bCmd != CMD_DLEVEL || message.wOffset != 0) { return message.wBytes + sizeof(message); } sgdwRecvOffset = 0; sgbRecvCmd = message.bCmd; - } else if (sgbRecvCmd != message.bCmd) { + } else if (sgbRecvCmd != message.bCmd || message.wOffset == 0) { DeltaImportData(sgbRecvCmd, sgdwRecvOffset); if (message.bCmd == CMD_DLEVEL_END) { sgbDeltaChunks = MAX_CHUNKS - 1; @@ -2158,14 +2159,16 @@ void DeltaExportData(int pnum) { if (sgbDeltaChanged) { for (auto &it : DeltaLevels) { - std::unique_ptr dst { new byte[sizeof(DLevel) + 1] }; + std::unique_ptr dst { new byte[sizeof(DLevel) + 1 + sizeof(uint8_t)] }; byte *dstEnd = &dst.get()[1]; DLevel &deltaLevel = it.second; + *dstEnd = static_cast(it.first); + dstEnd += sizeof(uint8_t); dstEnd = DeltaExportItem(dstEnd, deltaLevel.item); dstEnd = DeltaExportObject(dstEnd, deltaLevel.object); dstEnd = DeltaExportMonster(dstEnd, deltaLevel.monster); uint32_t size = CompressData(dst.get(), dstEnd); - dthread_send_delta(pnum, static_cast<_cmd_id>(it.first + CMD_DLEVEL_0), std::move(dst), size); + dthread_send_delta(pnum, CMD_DLEVEL, std::move(dst), size); } std::unique_ptr dst { new byte[sizeof(DJunk) + 1] }; @@ -3029,7 +3032,7 @@ uint32_t ParseCmd(int pnum, const TCmd *pCmd) break; } - if (pCmd->bCmd < CMD_DLEVEL_0 || pCmd->bCmd > CMD_DLEVEL_END) { + if (pCmd->bCmd < CMD_DLEVEL || pCmd->bCmd > CMD_DLEVEL_END) { SNetDropPlayer(pnum, LEAVE_DROP); return 0; } diff --git a/Source/msg.h b/Source/msg.h index 4a341862b..b3c0218eb 100644 --- a/Source/msg.h +++ b/Source/msg.h @@ -327,34 +327,10 @@ enum _cmd_id : uint8_t { // // body (TCmd) CMD_DEACTIVATEPORTAL, - // Delta information for dungeon level 0 through 24. + // Delta information for a dungeon level. // // body (TCmdPlrInfoHdr) - 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, // Delta information of quest and portal states. // // body (TCmdPlrInfoHdr)