X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_game.pas;h=3356c80981de79eb3f32169ebeb6aaf5403590a7;hb=1c9b34fa8d6a2bdd52cc3d0d2bf916c13d7b9bbf;hp=963496aab5b49eddfb4779dda2ef1f7e9d14674b;hpb=5ecb6dd44de6bb04536ce3bddd5a4ef977a77420;p=d2df-sdl.git diff --git a/src/game/g_game.pas b/src/game/g_game.pas index 963496a..3356c80 100644 --- a/src/game/g_game.pas +++ b/src/game/g_game.pas @@ -383,7 +383,7 @@ uses 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 @@ -894,7 +894,7 @@ begin 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; @@ -1677,6 +1677,9 @@ begin Exit; end; + // process master server communications + g_Net_Slist_Pulse(); + case gState of STATE_INTERSINGLE, // Ñòàòèñòêà ïîñëå ïðîõîæäåíèÿ óðîâíÿ â Îäèíî÷íîé èãðå STATE_INTERCUSTOM, // Ñòàòèñòêà ïîñëå ïðîõîæäåíèÿ óðîâíÿ â Ñâîåé èãðå @@ -2124,6 +2127,8 @@ begin // send unexpected platform changes g_Map_NetSendInterestingPanels(); + g_Net_Slist_ServerUpdate(); + { if NetUseMaster then begin if (gTime >= NetTimeToMaster) or g_Net_Slist_IsConnectionInProgress then @@ -2133,6 +2138,7 @@ begin NetTimeToMaster := gTime + NetMasterRate; end; end; + } end else if (NetMode = NET_CLIENT) then begin @@ -2187,7 +2193,7 @@ begin KeyPress(IK_F10); end; - Time := GetTimer() {div 1000}; + Time := sys_GetTicks() {div 1000}; // Îáðàáîòêà îòëîæåííûõ ñîáûòèé: if gDelayedEvents <> nil then @@ -2543,7 +2549,7 @@ var begin e_TextureFontGetSize(gStdFont, ww2, hh2); - g_ProcessMessages(); + sys_HandleInput; if g_Console_Action(ACTION_SCORES) then begin @@ -3732,7 +3738,7 @@ var 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 @@ -4098,7 +4104,7 @@ begin g_Game_DeleteTestMap(); gExit := EXIT_QUIT; - PushExitEvent(); + sys_RequestQuit; end; procedure g_FatalError(Text: String); @@ -4156,7 +4162,7 @@ end; 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); @@ -4192,9 +4198,7 @@ begin if g_Game_IsServer and g_Game_IsNet then MH_SEND_PlayerCreate(gPlayer1.UID); gPlayer1.Respawn(False, True); - - if g_Game_IsNet and NetUseMaster then - g_Net_Slist_Update; + g_Net_Slist_ServerPlayerComes(); end; Exit; @@ -4224,9 +4228,7 @@ begin if g_Game_IsServer and g_Game_IsNet then MH_SEND_PlayerCreate(gPlayer2.UID); gPlayer2.Respawn(False, True); - - if g_Game_IsNet and NetUseMaster then - g_Net_Slist_Update; + g_Net_Slist_ServerPlayerComes(); end; Exit; @@ -4249,9 +4251,7 @@ begin Pl.Kill(K_SIMPLEKILL, 0, HIT_DISCON); g_Console_Add(Format(_lc[I_PLAYER_LEAVE], [Pl.Name]), True); g_Player_Remove(Pl.UID); - - if g_Game_IsNet and NetUseMaster then - g_Net_Slist_Update; + g_Net_Slist_ServerPlayerLeaves(); end else gPlayer2 := nil; Exit; @@ -4265,9 +4265,7 @@ begin Pl.Kill(K_SIMPLEKILL, 0, HIT_DISCON); g_Console_Add(Format(_lc[I_PLAYER_LEAVE], [Pl.Name]), True); g_Player_Remove(Pl.UID); - - if g_Game_IsNet and NetUseMaster then - g_Net_Slist_Update; + g_Net_Slist_ServerPlayerLeaves(); end else begin gPlayer1 := nil; @@ -4275,6 +4273,7 @@ begin end; Exit; end; + g_Net_Slist_ServerPlayerLeaves(); end; procedure g_Game_Spectate(); @@ -4468,6 +4467,7 @@ procedure g_Game_StartServer(Map: String; GameMode: Byte; IPAddr: LongWord; Port: Word); begin g_Game_Free(); + g_Net_Slist_ServerClosed(); e_WriteLog('Starting net game (server)...', TMsgType.Notify); @@ -4542,11 +4542,14 @@ begin Exit; end; - g_Net_Slist_Set(NetSlistIP, NetSlistPort); + g_Net_Slist_Set(NetSlistIP, NetSlistPort, NetSlistList); + + g_Net_Slist_ServerStarted(); // Çàãðóçêà è çàïóñê êàðòû: if not g_Game_StartMap(Map, True) then begin + g_Net_Slist_ServerClosed(); g_FatalError(Format(_lc[I_GAME_ERROR_MAP_LOAD], [Map])); Exit; end; @@ -4558,6 +4561,7 @@ begin g_Map_GetPointCount(RESPAWNPOINT_RED)+ g_Map_GetPointCount(RESPAWNPOINT_BLUE)) < 1 then begin + g_Net_Slist_ServerClosed(); g_FatalError(_lc[I_GAME_ERROR_GET_SPAWN]); Exit; end; @@ -4565,6 +4569,7 @@ begin // Íàñòðîéêè èãðîêîâ è áîòîâ: g_Player_Init(); + g_Net_Slist_ServerMapStarted(); NetState := NET_STATE_GAME; end; @@ -4905,11 +4910,7 @@ begin MH_SEND_GameEvent(NET_EV_MAPSTART, gGameSettings.GameMode, Map); // Ìàñòåðñåðâåð - if NetUseMaster then - begin - if (not g_Net_Slist_IsConnectionActive) then g_Net_Slist_Connect(false); // non-blocking connection to the master - g_Net_Slist_Update; - end; + g_Net_Slist_ServerMapStarted(); if NetClients <> nil then for I := 0 to High(NetClients) do @@ -5479,8 +5480,7 @@ begin NetServerName := P[1]; if Length(NetServerName) > 64 then SetLength(NetServerName, 64); - if g_Game_IsServer and g_Game_IsNet and NetUseMaster then - g_Net_Slist_Update; + g_Net_Slist_ServerRenamed(); end; g_Console_Add(cmd + ' = "' + NetServerName + '"'); @@ -5492,8 +5492,7 @@ begin NetPassword := P[1]; if Length(NetPassword) > 24 then SetLength(NetPassword, 24); - if g_Game_IsServer and g_Game_IsNet and NetUseMaster then - g_Net_Slist_Update; + g_Net_Slist_ServerRenamed(); end; g_Console_Add(cmd + ' = "' + AnsiLowerCase(NetPassword) + '"'); @@ -5507,6 +5506,7 @@ begin begin b := 0; for a := 0 to High(NetClients) do + begin if NetClients[a].Used then begin Inc(b); @@ -5518,8 +5518,8 @@ begin MH_SEND_GameEvent(NET_EV_PLAYER_KICK, 0, s); end; end; - if NetUseMaster then - g_Net_Slist_Update; + end; + g_Net_Slist_ServerRenamed(); end; end; @@ -5530,18 +5530,7 @@ begin if (Length(P) > 1) then begin NetUseMaster := StrToIntDef(P[1], Byte(NetUseMaster)) > 0; - if g_Game_IsServer and g_Game_IsNet then - begin - if NetUseMaster then - begin - if (not g_Net_Slist_IsConnectionActive) then g_Net_Slist_Connect(false); // non-blocking connection to the master - g_Net_Slist_Update(); - end - else - begin - if (not g_Net_Slist_IsConnectionActive) then g_Net_Slist_Disconnect(); - end; - end; + if NetUseMaster then g_Net_Slist_Public() else g_Net_Slist_Private(); end; g_Console_Add(cmd + ' = ' + IntToStr(Byte(NetUseMaster))); @@ -6196,8 +6185,7 @@ begin enet_peer_disconnect(pl^.Peer, NET_DISC_KICK); 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; + g_Net_Slist_ServerPlayerLeaves(); end else if gPlayers <> nil then for a := Low(gPlayers) to High(gPlayers) do if gPlayers[a] <> nil then @@ -6210,8 +6198,7 @@ begin gPlayers[a].Kill(K_SIMPLEKILL, 0, HIT_DISCON); 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; + g_Net_Slist_ServerPlayerLeaves(); // Åñëè íå ïåðåìåøàòü, ïðè äîáàâëåíèè íîâûõ áîòîâ ïîÿâÿòñÿ ñòàðûå g_Bot_MixNames(); end; @@ -6242,8 +6229,7 @@ begin enet_peer_disconnect(NetClients[a].Peer, NET_DISC_KICK); 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; + g_Net_Slist_ServerPlayerLeaves(); end; end; end else @@ -6272,8 +6258,7 @@ begin enet_peer_disconnect(pl^.Peer, NET_DISC_TEMPBAN); 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; + g_Net_Slist_ServerPlayerLeaves(); end else g_Console_Add(Format(_lc[I_NET_ERR_NAME404], [P[1]])); end else @@ -6303,8 +6288,7 @@ begin enet_peer_disconnect(NetClients[a].Peer, NET_DISC_TEMPBAN); 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; + g_Net_Slist_ServerPlayerLeaves(); end; end else g_Console_Add(_lc[I_MSG_SERVERONLY]); @@ -6333,8 +6317,7 @@ begin g_Net_SaveBanList(); 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; + g_Net_Slist_ServerPlayerLeaves(); end else g_Console_Add(Format(_lc[I_NET_ERR_NAME404], [P[1]])); end else @@ -6365,8 +6348,7 @@ begin g_Net_SaveBanList(); 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; + g_Net_Slist_ServerPlayerLeaves(); end; end else g_Console_Add(_lc[I_MSG_SERVERONLY]);