| 393 | } |
| 394 | |
| 395 | void multi_process_network_packets() |
| 396 | { |
| 397 | int dx, dy; |
| 398 | TPktHdr *pkt; |
| 399 | DWORD dwMsgSize; |
| 400 | DWORD dwID; |
| 401 | BOOL cond; |
| 402 | char *data; |
| 403 | |
| 404 | multi_clear_left_tbl(); |
| 405 | multi_process_tmsgs(); |
| 406 | while (SNetReceiveMessage((int *)&dwID, &data, (int *)&dwMsgSize)) { |
| 407 | pkt_counter++; |
| 408 | multi_clear_left_tbl(); |
| 409 | pkt = (TPktHdr *)data; |
| 410 | if (dwMsgSize < sizeof(TPktHdr)) |
| 411 | continue; |
| 412 | if (dwID >= MAX_PLRS) |
| 413 | continue; |
| 414 | if (pkt->wCheck != 'ip') |
| 415 | continue; |
| 416 | if (pkt->wLen != dwMsgSize) |
| 417 | continue; |
| 418 | plr[dwID]._pownerx = pkt->px; |
| 419 | plr[dwID]._pownery = pkt->py; |
| 420 | if (dwID != myplr) { |
| 421 | // ASSERT: gbBufferMsgs != BUFFER_PROCESS (2) |
| 422 | plr[dwID]._pHitPoints = pkt->php; |
| 423 | plr[dwID]._pMaxHP = pkt->pmhp; |
| 424 | cond = gbBufferMsgs == 1; |
| 425 | plr[dwID]._pBaseStr = pkt->bstr; |
| 426 | plr[dwID]._pBaseMag = pkt->bmag; |
| 427 | plr[dwID]._pBaseDex = pkt->bdex; |
| 428 | if (!cond && plr[dwID].plractive && plr[dwID]._pHitPoints) { |
| 429 | if (currlevel == plr[dwID].plrlevel && !plr[dwID]._pLvlChanging) { |
| 430 | dx = abs(plr[dwID].WorldX - pkt->px); |
| 431 | dy = abs(plr[dwID].WorldY - pkt->py); |
| 432 | if ((dx > 3 || dy > 3) && dPlayer[pkt->px][pkt->py] == 0) { |
| 433 | FixPlrWalkTags(dwID); |
| 434 | plr[dwID]._poldx = plr[dwID].WorldX; |
| 435 | plr[dwID]._poldy = plr[dwID].WorldY; |
| 436 | FixPlrWalkTags(dwID); |
| 437 | plr[dwID].WorldX = pkt->px; |
| 438 | plr[dwID].WorldY = pkt->py; |
| 439 | plr[dwID]._px = pkt->px; |
| 440 | plr[dwID]._py = pkt->py; |
| 441 | dPlayer[plr[dwID].WorldX][plr[dwID].WorldY] = dwID + 1; |
| 442 | } |
| 443 | dx = abs(plr[dwID]._px - plr[dwID].WorldX); |
| 444 | dy = abs(plr[dwID]._py - plr[dwID].WorldY); |
| 445 | if (dx > 1 || dy > 1) { |
| 446 | plr[dwID]._px = plr[dwID].WorldX; |
| 447 | plr[dwID]._py = plr[dwID].WorldY; |
| 448 | } |
| 449 | MakePlrPath(dwID, pkt->targx, pkt->targy, TRUE); |
| 450 | } else { |
| 451 | plr[dwID].WorldX = pkt->px; |
| 452 | plr[dwID].WorldY = pkt->py; |
no test coverage detected