diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index ae66faad7854babd93cd1115ccfa83903def765a..7ad130f20a6b52c6a3029bb81de27ab5cab4c020 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
g_triggers, g_monsters, e_sound, CONFIG,
g_language, g_net,
ENet, e_msg, g_netmsg, g_netmaster,
- sfs, wadreader;
+ sfs, wadreader, g_system;
var
gDelayedEvents[n].DENum := Num;
gDelayedEvents[n].DEStr := Str;
if DEType = DE_GLOBEVENT then
- gDelayedEvents[n].Time := (GetTimer() {div 1000}) + Time
+ gDelayedEvents[n].Time := (sys_GetTicks() {div 1000}) + Time
else
gDelayedEvents[n].Time := gTime + Time;
Result := n;
if NetUseMaster then
begin
- if gTime >= NetTimeToMaster then
+ {
+ if (gTime >= NetTimeToMaster) or g_Net_Slist_IsConnectionInProgress then
begin
- if (NetMHost = nil) or (NetMPeer = nil) then
- begin
- g_Net_Slist_Connect(false); // non-blocking connection to the master
- end;
-
+ if (not g_Net_Slist_IsConnectionActive) then g_Net_Slist_Connect(false); // non-blocking connection to the master
g_Net_Slist_Update;
NetTimeToMaster := gTime + NetMasterRate;
end;
+ }
+ g_Net_Slist_Pulse();
end;
end
else if (NetMode = NET_CLIENT) then
KeyPress(IK_F10);
end;
- Time := GetTimer() {div 1000};
+ Time := sys_GetTicks() {div 1000};
// Îáðàáîòêà îòëîæåííûõ ñîáûòèé:
if gDelayedEvents <> nil then
begin
e_TextureFontGetSize(gStdFont, ww2, hh2);
- g_ProcessMessages();
+ sys_HandleInput;
if g_Console_Action(ACTION_SCORES) then
begin
begin
if gExit = EXIT_QUIT then Exit;
- Time := GetTimer() {div 1000};
+ Time := sys_GetTicks() {div 1000};
FPSCounter := FPSCounter+1;
if Time - FPSTime >= 1000 then
begin
g_Game_DeleteTestMap();
gExit := EXIT_QUIT;
- PushExitEvent();
+ sys_RequestQuit;
end;
procedure g_FatalError(Text: String);
procedure g_Game_ChangeResolution(newWidth, newHeight: Word; nowFull, nowMax: Boolean);
begin
- g_Window_SetSize(newWidth, newHeight, nowFull);
+ sys_SetDisplayMode(newWidth, newHeight, gBPP, nowFull);
end;
procedure g_Game_AddPlayer(Team: Byte = TEAM_NONE);
gPlayer1.Respawn(False, True);
if g_Game_IsNet and NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end;
Exit;
gPlayer2.Respawn(False, True);
if g_Game_IsNet and NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end;
Exit;
g_Player_Remove(Pl.UID);
if g_Game_IsNet and NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end else
gPlayer2 := nil;
Exit;
g_Player_Remove(Pl.UID);
if g_Game_IsNet and NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end else
begin
gPlayer1 := nil;
NetState := NET_STATE_AUTH;
g_Game_SetLoadingText(_lc[I_LOAD_CONNECT], 0, False);
+
+ // create (or update) map/resource databases
+ g_Res_CreateDatabases(true);
+
// Ñòàðòóåì êëèåíò
if not g_Net_Connect(Addr, Port) then
begin
NetState := NET_STATE_NONE;
Exit;
end;
+ e_LogWritefln('using downloaded map wad [%s] for [%s]`', [newResPath, WadName], TMsgType.Notify);
end;
newResPath := ExtractRelativePath(MapsDir, newResPath);
end
else
begin
- gWADHash := MD5File(nws);
+ if (g_Game_IsNet) then gWADHash := MD5File(nws);
//writeln('********: nws=', nws, ' : Map=', Map, ' : nw=', NewWAD, ' : resname=', ResName);
g_Game_LoadWAD(NewWAD);
end;
// Ìàñòåðñåðâåð
if NetUseMaster then
begin
- if (NetMHost = nil) or (NetMPeer = nil) then
- begin
- // let the connection be blocking here, why not?
- g_Net_Slist_Connect();
- end;
+ {
+ if (not g_Net_Slist_IsConnectionActive) then g_Net_Slist_Connect(false); // non-blocking connection to the master
g_Net_Slist_Update;
+ }
+ g_Net_Slist_Pulse();
end;
if NetClients <> nil then
procedure g_Game_ClientWAD(NewWAD: String; const WHash: TMD5Digest);
var
- gWAD: String;
+ gWAD, xwad: String;
begin
if not g_Game_IsClient then Exit;
//e_LogWritefln('*** g_Game_ClientWAD: `%s`', [NewWAD]);
Exit;
end;
- NewWAD := ExtractRelativePath(MapsDir, gWAD);
+ xwad := ExtractRelativePath(MapsDir, gWAD);
+ e_LogWritefln('using downloaded client map wad [%s] for [%s]`', [xwad, NewWAD], TMsgType.Notify);
+ NewWAD := xwad;
g_Game_LoadWAD(NewWAD);
{
if Length(NetServerName) > 64 then
SetLength(NetServerName, 64);
if g_Game_IsServer and g_Game_IsNet and NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end;
g_Console_Add(cmd + ' = "' + NetServerName + '"');
if Length(NetPassword) > 24 then
SetLength(NetPassword, 24);
if g_Game_IsServer and g_Game_IsNet and NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end;
g_Console_Add(cmd + ' = "' + AnsiLowerCase(NetPassword) + '"');
end;
end;
if NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end;
end;
begin
NetUseMaster := StrToIntDef(P[1], Byte(NetUseMaster)) > 0;
if g_Game_IsServer and g_Game_IsNet then
+ begin
if NetUseMaster then
begin
- if NetMPeer = nil then g_Net_Slist_Connect();
+ {
+ if (not g_Net_Slist_IsConnectionActive) then g_Net_Slist_Connect(false); // non-blocking connection to the master
g_Net_Slist_Update();
+ }
+ g_Net_Slist_Pulse();
end
else
- if NetMPeer <> nil then
- g_Net_Slist_Disconnect();
+ begin
+ //if (not g_Net_Slist_IsConnectionActive) then g_Net_Slist_Disconnect();
+ g_Net_Slist_Private();
+ end;
+ end;
end;
g_Console_Add(cmd + ' = ' + IntToStr(Byte(NetUseMaster)));
g_Console_Add(Format(_lc[I_PLAYER_KICK], [s]));
MH_SEND_GameEvent(NET_EV_PLAYER_KICK, 0, s);
if NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end else if gPlayers <> nil then
for a := Low(gPlayers) to High(gPlayers) do
if gPlayers[a] <> nil then
g_Console_Add(Format(_lc[I_PLAYER_LEAVE], [gPlayers[a].Name]), True);
g_Player_Remove(gPlayers[a].UID);
if NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
// Åñëè íå ïåðåìåøàòü, ïðè äîáàâëåíèè íîâûõ áîòîâ ïîÿâÿòñÿ ñòàðûå
g_Bot_MixNames();
end;
g_Console_Add(Format(_lc[I_PLAYER_KICK], [s]));
MH_SEND_GameEvent(NET_EV_PLAYER_KICK, 0, s);
if NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end;
end;
end else
g_Console_Add(Format(_lc[I_PLAYER_BAN], [s]));
MH_SEND_GameEvent(NET_EV_PLAYER_BAN, 0, s);
if NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end else
g_Console_Add(Format(_lc[I_NET_ERR_NAME404], [P[1]]));
end else
g_Console_Add(Format(_lc[I_PLAYER_BAN], [s]));
MH_SEND_GameEvent(NET_EV_PLAYER_BAN, 0, s);
if NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end;
end else
g_Console_Add(_lc[I_MSG_SERVERONLY]);
g_Console_Add(Format(_lc[I_PLAYER_BAN], [s]));
MH_SEND_GameEvent(NET_EV_PLAYER_BAN, 0, s);
if NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end else
g_Console_Add(Format(_lc[I_NET_ERR_NAME404], [P[1]]));
end else
g_Console_Add(Format(_lc[I_PLAYER_BAN], [s]));
MH_SEND_GameEvent(NET_EV_PLAYER_BAN, 0, s);
if NetUseMaster then
- g_Net_Slist_Update;
+ begin
+ //g_Net_Slist_Update;
+ g_Net_Slist_Pulse();
+ end;
end;
end else
g_Console_Add(_lc[I_MSG_SERVERONLY]);