X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_netmsg.pas;h=aec47c7ff524d3c16de2bc4da6f2e9ea350f2172;hb=a50544067b99f65e2b4882366521287607dd892f;hp=244b2ebd716ef55a21674fbd4b375f9c2324aad8;hpb=6c6b87eea9373ec4f1cb859223d3708d8e2a59c6;p=d2df-sdl.git diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas index 244b2eb..aec47c7 100644 --- a/src/game/g_netmsg.pas +++ b/src/game/g_netmsg.pas @@ -442,11 +442,22 @@ begin e_LogWritefln('*** client #%u (cid #%u) authenticated...', [C.ID, C.Player]); //e_LogWritefln('spawning player with pid #%u...', [PID]); //Respawn(gGameSettings.GameType = GT_SINGLE); - //k8: no, do not spawn a player yet, wait for a 'i am ready' packet + //k8: no, do not spawn a player yet, wait for "request full state" packet Lives := 0; Spectate; FNoRespawn := True; - FWantsInGame := false; // TODO: look into this later + // `FWantsInGame` seems to mean "spawn the player on the next occasion". + // that is, if we'll set it to `true`, the player can be spawned after + // warmup time ran out, for example, regardless of the real player state. + // also, this seems to work only for the initial connection. further + // map changes could initiate resource downloading, but the player will + // be spawned immediately. + // the proper solution will require another player state, "ephemeral". + // the player should start any map in "ephemeral" state, and turned into + // real mobj only when they sent a special "i am ready" packet. this packet + // must be sent after receiving the full state, so the player will get a full + // map view before going into game. + FWantsInGame := false; C^.WaitForFirstSpawn := true; end; end; @@ -465,7 +476,11 @@ begin if gState in [STATE_INTERCUSTOM, STATE_FOLD] then MH_SEND_GameEvent(NET_EV_MAPEND, 0, 'N', C^.ID); - if NetUseMaster then g_Net_Slist_Update; + if NetUseMaster then + begin + //g_Net_Slist_Update; + g_Net_Slist_Pulse(); + end; end; @@ -476,6 +491,7 @@ begin if not C.WaitForFirstSpawn then exit; plr := g_Player_Get(C^.Player); if not assigned(plr) then exit; + g_Net_Slist_ServerPlayerComes(); e_LogWritefln('*** client #%u (cid #%u) first spawn', [C.ID, C.Player]); C.WaitForFirstSpawn := false; plr.FNoRespawn := false;