X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_net.pas;h=c01efd1652b7c83ab1a40d455ce940a9d3554c6e;hb=645d02199259b5e43745df45f027c46e09293dbe;hp=391e09c520a6f6513ecfe6c52a9377c2009a4bc8;hpb=986383de4f166773e41335f5b0fec5ee5c0128f0;p=d2df-sdl.git diff --git a/src/game/g_net.pas b/src/game/g_net.pas index 391e09c..c01efd1 100644 --- a/src/game/g_net.pas +++ b/src/game/g_net.pas @@ -72,7 +72,7 @@ const BANLIST_FILENAME = 'banlist.txt'; NETDUMP_FILENAME = 'netdump'; - {$IFDEF FREEBSD} + {$IF DEFINED(FREEBSD) OR DEFINED(DARWIN)} NilThreadId = nil; {$ELSE} NilThreadId = 0; @@ -108,6 +108,7 @@ type Peer: pENetPeer; Player: Word; RequestedFullUpdate: Boolean; + WaitForFirstSpawn: Boolean; // set to `true` in server, used to spawn a player on first full state request RCONAuth: Boolean; Voted: Boolean; Transfer: TNetFileTransfer; // only one transfer may be active @@ -249,7 +250,7 @@ implementation uses SysUtils, e_input, g_nethandler, g_netmsg, g_netmaster, g_player, g_window, g_console, - g_main, g_game, g_language, g_weapons, utils, ctypes, + g_main, g_game, g_language, g_weapons, utils, ctypes, g_system, g_map; const @@ -1274,6 +1275,7 @@ begin NetClients[N].Used := True; NetClients[N].ID := N; NetClients[N].RequestedFullUpdate := False; + NetClients[N].WaitForFirstSpawn := False; NetClients[N].RCONAuth := False; NetClients[N].Voted := False; NetClients[N].Player := 0; @@ -1383,8 +1385,7 @@ begin NetPeer := nil; NetHost := nil; - NetMPeer := nil; - NetMHost := nil; + g_Net_Slist_Disconnect(false); // do not spam console NetMyID := -1; NetPlrUID1 := -1; NetPlrUID2 := -1; @@ -1519,7 +1520,7 @@ begin end; clearNetClients(false); // don't clear array - if (NetMPeer <> nil) and (NetMHost <> nil) then g_Net_Slist_Disconnect; + if (g_Net_Slist_IsConnectionActive) then g_Net_Slist_Disconnect; if NetPongSock <> ENET_SOCKET_NULL then enet_socket_destroy(NetPongSock); @@ -1712,6 +1713,7 @@ begin TC^.Peer := nil; TC^.Player := 0; TC^.RequestedFullUpdate := False; + TC^.WaitForFirstSpawn := False; TC^.NetOut[NET_UNRELIABLE].Free(); TC^.NetOut[NET_RELIABLE].Free(); @@ -1897,7 +1899,7 @@ begin end; // предупредить что ждем слишком долго через N секунд - TimeoutTime := GetTimer() + NET_CONNECT_TIMEOUT; + TimeoutTime := sys_GetTicks() + NET_CONNECT_TIMEOUT; OuterLoop := True; while OuterLoop do @@ -1918,7 +1920,7 @@ begin end; end; - T := GetTimer(); + T := sys_GetTicks(); if T > TimeoutTime then begin TimeoutTime := T + NET_CONNECT_TIMEOUT * 100; // одного предупреждения хватит