MCPcopy Create free account
hub / github.com/diasurgical/devilution / multi_process_network_packets

Function multi_process_network_packets

Source/multi.cpp:395–464  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

393}
394
395void 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;

Callers 2

msg_wait_for_turnsFunction · 0.85
run_game_loopFunction · 0.85

Calls 8

multi_clear_left_tblFunction · 0.85
multi_process_tmsgsFunction · 0.85
SNetReceiveMessageFunction · 0.85
FixPlrWalkTagsFunction · 0.85
MakePlrPathFunction · 0.85
multi_handle_all_packetsFunction · 0.85
SErrGetLastErrorFunction · 0.85
nthread_terminate_gameFunction · 0.85

Tested by

no test coverage detected