|
|
|
|
@ -531,13 +531,19 @@ void multi_process_tmsgs()
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void multi_send_zero_packet(DWORD pnum, char identifier, void *pbSrc, DWORD dwLen) |
|
|
|
|
void multi_send_zero_packet(int pnum, BYTE bCmd, BYTE *pbSrc, DWORD dwLen) |
|
|
|
|
{ |
|
|
|
|
DWORD len, dwBody; |
|
|
|
|
DWORD dwOffset, dwBody, dwMsg; |
|
|
|
|
TPkt pkt; |
|
|
|
|
int t; |
|
|
|
|
len = 0; |
|
|
|
|
while (dwLen) { |
|
|
|
|
TCmdPlrInfoHdr *p; |
|
|
|
|
|
|
|
|
|
/// ASSERT: assert(pnum != myplr);
|
|
|
|
|
/// ASSERT: assert(pbSrc);
|
|
|
|
|
/// ASSERT: assert(dwLen <= 0x0ffff);
|
|
|
|
|
|
|
|
|
|
dwOffset = 0; |
|
|
|
|
|
|
|
|
|
while(dwLen != 0) { |
|
|
|
|
pkt.hdr.wCheck = 'ip'; |
|
|
|
|
pkt.hdr.px = 0; |
|
|
|
|
pkt.hdr.py = 0; |
|
|
|
|
@ -548,22 +554,45 @@ void multi_send_zero_packet(DWORD pnum, char identifier, void *pbSrc, DWORD dwLe
|
|
|
|
|
pkt.hdr.bstr = 0; |
|
|
|
|
pkt.hdr.bmag = 0; |
|
|
|
|
pkt.hdr.bdex = 0; |
|
|
|
|
pkt.body[0] = identifier; |
|
|
|
|
*(WORD *)&pkt.body[1] = len; |
|
|
|
|
dwBody = gdwLargestMsgSize - 24; |
|
|
|
|
if (dwLen < dwBody) |
|
|
|
|
p = (TCmdPlrInfoHdr *)pkt.body; |
|
|
|
|
p->bCmd = bCmd; |
|
|
|
|
p->wOffset = dwOffset; |
|
|
|
|
dwBody = gdwLargestMsgSize - sizeof(pkt.hdr) - sizeof(*p); |
|
|
|
|
if(dwLen < dwBody) { |
|
|
|
|
dwBody = dwLen; |
|
|
|
|
*(WORD *)&pkt.body[3] = dwBody; |
|
|
|
|
memcpy(&pkt.body[5], pbSrc, *(WORD *)&pkt.body[3]); |
|
|
|
|
t = *(WORD *)&pkt.body[3] + 24; |
|
|
|
|
pkt.hdr.wLen = t; |
|
|
|
|
if (!SNetSendMessage(pnum, &pkt.hdr, t)) { |
|
|
|
|
} |
|
|
|
|
/// ASSERT: assert(dwBody <= 0x0ffff);
|
|
|
|
|
p->wBytes = dwBody; |
|
|
|
|
memcpy(&pkt.body[sizeof(*p)], pbSrc, p->wBytes); |
|
|
|
|
dwMsg = sizeof(pkt.hdr); |
|
|
|
|
dwMsg += sizeof(*p); |
|
|
|
|
dwMsg += p->wBytes; |
|
|
|
|
pkt.hdr.wLen = dwMsg; |
|
|
|
|
if(!SNetSendMessage(pnum, &pkt, dwMsg)) { |
|
|
|
|
nthread_terminate_game("SNetSendMessage2"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
pbSrc = (char *)pbSrc + *(WORD *)&pkt.body[3]; |
|
|
|
|
dwLen -= *(WORD *)&pkt.body[3]; |
|
|
|
|
len += *(WORD *)&pkt.body[3]; |
|
|
|
|
#if 0 |
|
|
|
|
if((DWORD)pnum >= MAX_PLRS) { |
|
|
|
|
if(myplr != 0) { |
|
|
|
|
debug_plr_tbl[0]++; |
|
|
|
|
} |
|
|
|
|
if(myplr != 1) { |
|
|
|
|
debug_plr_tbl[1]++; |
|
|
|
|
} |
|
|
|
|
if(myplr != 2) { |
|
|
|
|
debug_plr_tbl[2]++; |
|
|
|
|
} |
|
|
|
|
if(myplr != 3) { |
|
|
|
|
debug_plr_tbl[3]++; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
debug_plr_tbl[pnum]++; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
pbSrc += p->wBytes; |
|
|
|
|
dwLen -= p->wBytes; |
|
|
|
|
dwOffset += p->wBytes; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|