DEADSOFTWARE

clean up GameCVars; add sv_forwardports
authorfgsfds <pvt.fgsfds@gmail.com>
Mon, 24 Feb 2020 17:04:37 +0000 (20:04 +0300)
committerfgsfds <pvt.fgsfds@gmail.com>
Mon, 24 Feb 2020 17:04:37 +0000 (20:04 +0300)
src/game/g_console.pas
src/game/g_game.pas
src/game/g_net.pas

index cde25fedb4c279a6a55cb17da39a41b5019aa45c..cbfcf5faaabf1134618ca6942c99485d89bb364d 100644 (file)
@@ -906,12 +906,13 @@ begin
   AddCommand('d_joy', DebugCommands);
   AddCommand('d_mem', DebugCommands);
 
-  AddCommand('p1_name', GameCVars);
-  AddCommand('p2_name', GameCVars);
-  AddCommand('p1_color', GameCVars);
-  AddCommand('p2_color', GameCVars);
-  AddCommand('p1_model', GameCVars);
-  AddCommand('p2_model', GameCVars);
+  AddCommand('p1_name', PlayerSettingsCVars);
+  AddCommand('p2_name', PlayerSettingsCVars);
+  AddCommand('p1_color', PlayerSettingsCVars);
+  AddCommand('p2_color', PlayerSettingsCVars);
+  AddCommand('p1_model', PlayerSettingsCVars);
+  AddCommand('p2_model', PlayerSettingsCVars);
+
   AddCommand('r_showscore', GameCVars);
   AddCommand('r_showlives', GameCVars);
   AddCommand('r_showstat', GameCVars);
@@ -931,15 +932,13 @@ begin
   AddCommand('g_maxlives', GameCVars);
   AddCommand('g_warmuptime', GameCVars);
   AddCommand('g_spawn_invul', GameCVars);
-  AddCommand('net_interp', GameCVars);
-  AddCommand('net_forceplayerupdate', GameCVars);
-  AddCommand('net_predictself', GameCVars);
-  AddCommand('sv_name', GameCVars);
-  AddCommand('sv_passwd', GameCVars);
-  AddCommand('sv_maxplrs', GameCVars);
-  AddCommand('sv_public', GameCVars);
   AddCommand('sv_intertime', GameCVars);
 
+  AddCommand('sv_name', NetServerCVars);
+  AddCommand('sv_passwd', NetServerCVars);
+  AddCommand('sv_maxplrs', NetServerCVars);
+  AddCommand('sv_public', NetServerCVars);
+
   AddCommand('quit', GameCommands);
   AddCommand('exit', GameCommands);
   AddCommand('pause', GameCommands);
index 6b1e238f6f7b5928175a440d04d9b73a1923d865..61fed94c851f31560c9bc6bdfb6d45bc2437e90e 100644 (file)
@@ -132,6 +132,7 @@ procedure g_SimpleError(Text: String);
 function  g_Game_IsTestMap(): Boolean;
 procedure g_Game_DeleteTestMap();
 procedure GameCVars(P: SSArray);
+procedure PlayerSettingsCVars(P: SSArray);
 procedure GameCommands(P: SSArray);
 procedure GameCheats(P: SSArray);
 procedure DebugCommands(P: SSArray);
@@ -5381,7 +5382,7 @@ procedure GameCVars(P: SSArray);
 var
   a, b: Integer;
   stat: TPlayerStatArray;
-  cmd, s: string;
+  cmd: string;
 begin
   stat := nil;
   cmd := LowerCase(P[0]);
@@ -5583,95 +5584,6 @@ begin
                  [gGameSettings.SpawnInvul]));
     g_Console_Add(_lc[I_MSG_ONMAPCHANGE]);
   end
-  else if cmd = 'net_interp' then
-  begin
-    if (Length(P) > 1) then
-      NetInterpLevel := StrToIntDef(P[1], NetInterpLevel);
-    g_Console_Add('net_interp = ' + IntToStr(NetInterpLevel));
-  end
-  else if cmd = 'net_forceplayerupdate' then
-  begin
-    if (Length(P) > 1) and ((P[1] = '1') or (P[1] = '0')) then
-      NetForcePlayerUpdate := (P[1][1] = '1');
-
-    if NetForcePlayerUpdate then
-      g_Console_Add('net_forceplayerupdate = 1')
-    else
-      g_Console_Add('net_forceplayerupdate = 0');
-  end
-  else if cmd = 'net_predictself' then
-  begin
-    if (Length(P) > 1) and
-       ((P[1] = '1') or (P[1] = '0')) then
-      NetPredictSelf := (P[1][1] = '1');
-
-    if NetPredictSelf then
-      g_Console_Add('net_predictself = 1')
-    else
-      g_Console_Add('net_predictself = 0');
-  end
-  else if cmd = 'sv_name' then
-  begin
-    if (Length(P) > 1) and (Length(P[1]) > 0) then
-    begin
-      NetServerName := P[1];
-      if Length(NetServerName) > 64 then
-        SetLength(NetServerName, 64);
-      g_Net_Slist_ServerRenamed();
-    end;
-
-    g_Console_Add(cmd + ' = "' + NetServerName + '"');
-  end
-  else if cmd = 'sv_passwd' then
-  begin
-    if (Length(P) > 1) and (Length(P[1]) > 0) then
-    begin
-      NetPassword := P[1];
-      if Length(NetPassword) > 24 then
-        SetLength(NetPassword, 24);
-      g_Net_Slist_ServerRenamed();
-    end;
-
-    g_Console_Add(cmd + ' = "' + AnsiLowerCase(NetPassword) + '"');
-  end
-  else if cmd = 'sv_maxplrs' then
-  begin
-    if (Length(P) > 1) then
-    begin
-      NetMaxClients := Min(Max(StrToIntDef(P[1], NetMaxClients), 1), NET_MAXCLIENTS);
-      if g_Game_IsServer and g_Game_IsNet then
-      begin
-        b := 0;
-        for a := 0 to High(NetClients) do
-        begin
-          if NetClients[a].Used then
-          begin
-            Inc(b);
-            if b > NetMaxClients then
-            begin
-              s := g_Player_Get(NetClients[a].Player).Name;
-              enet_peer_disconnect(NetClients[a].Peer, NET_DISC_FULL);
-              g_Console_Add(Format(_lc[I_PLAYER_KICK], [s]));
-              MH_SEND_GameEvent(NET_EV_PLAYER_KICK, 0, s);
-            end;
-          end;
-        end;
-        g_Net_Slist_ServerRenamed();
-      end;
-    end;
-
-    g_Console_Add(cmd + ' = ' + IntToStr(NetMaxClients));
-  end
-  else if cmd = 'sv_public' then
-  begin
-    if (Length(P) > 1) then
-    begin
-      NetUseMaster := StrToIntDef(P[1], Byte(NetUseMaster)) > 0;
-      if NetUseMaster then g_Net_Slist_Public() else g_Net_Slist_Private();
-    end;
-
-    g_Console_Add(cmd + ' = ' + IntToStr(Byte(NetUseMaster)));
-  end
   else if cmd = 'sv_intertime' then
   begin
     if (Length(P) > 1) then
@@ -5679,96 +5591,6 @@ begin
 
     g_Console_Add(cmd + ' = ' + IntToStr(gDefInterTime));
   end
-  else if cmd = 'p1_name' then
-  begin
-    if (Length(P) > 1) then
-    begin
-      gPlayer1Settings.Name := b_Text_Unformat(P[1]);
-      if g_Game_IsClient then
-        MC_SEND_PlayerSettings
-      else if gGameOn and (gPlayer1 <> nil) then
-      begin
-        gPlayer1.Name := b_Text_Unformat(P[1]);
-        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer1.UID);
-      end;
-    end;
-  end
-  else if cmd = 'p2_name' then
-  begin
-    if (Length(P) > 1) then
-    begin
-      gPlayer2Settings.Name := b_Text_Unformat(P[1]);
-      if g_Game_IsClient then
-        MC_SEND_PlayerSettings
-      else if gGameOn and (gPlayer2 <> nil) then
-      begin
-        gPlayer2.Name := b_Text_Unformat(P[1]);
-        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID);
-      end;
-    end;
-  end
-  else if cmd = 'p1_color' then
-  begin
-    if Length(P) > 3 then
-    begin
-      gPlayer1Settings.Color := _RGB(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
-                                     EnsureRange(StrToIntDef(P[2], 0), 0, 255),
-                                     EnsureRange(StrToIntDef(P[3], 0), 0, 255));
-      if g_Game_IsClient then
-        MC_SEND_PlayerSettings
-      else if gGameOn and (gPlayer1 <> nil) then
-      begin
-        gPlayer1.SetColor(gPlayer1Settings.Color);
-        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer1.UID);
-      end;
-    end;
-  end
-  else if cmd = 'p2_color' then
-  begin
-    if Length(P) > 3 then
-    begin
-      gPlayer2Settings.Color := _RGB(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
-                                     EnsureRange(StrToIntDef(P[2], 0), 0, 255),
-                                     EnsureRange(StrToIntDef(P[3], 0), 0, 255));
-      if g_Game_IsClient then
-        MC_SEND_PlayerSettings
-      else if gGameOn and (gPlayer2 <> nil) then
-      begin
-        gPlayer2.SetColor(gPlayer2Settings.Color);
-        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID);
-      end;
-    end;
-  end
-  else if cmd = 'p1_model' then
-  begin
-    if (Length(P) > 1) then
-    begin
-      gPlayer1Settings.Model := P[1];
-      if g_Game_IsClient then
-        MC_SEND_PlayerSettings
-      else if gGameOn and (gPlayer1 <> nil) then
-      begin
-        gPlayer1.FActualModelName := gPlayer1Settings.Model;
-        gPlayer1.SetModel(gPlayer1Settings.Model);
-        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer1.UID);
-      end;
-    end;
-  end
-  else if cmd = 'p2_model' then
-  begin
-    if (Length(P) > 1) then
-    begin
-      gPlayer2Settings.Model := P[1];
-      if g_Game_IsClient then
-        MC_SEND_PlayerSettings
-      else if gGameOn and (gPlayer2 <> nil) then
-      begin
-        gPlayer2.FActualModelName := gPlayer2Settings.Model;
-        gPlayer2.SetModel(gPlayer2Settings.Model);
-        if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID);
-      end;
-    end;
-  end
   else if cmd = 'r_showscore' then
   begin
     if (Length(P) > 1) and
@@ -5900,6 +5722,105 @@ begin
   end;
 end;
 
+procedure PlayerSettingsCVars(P: SSArray);
+var
+  cmd: string;
+begin
+  cmd := LowerCase(P[0]);
+  case cmd of
+    'p1_name':
+      begin
+        if (Length(P) > 1) then
+        begin
+          gPlayer1Settings.Name := b_Text_Unformat(P[1]);
+          if g_Game_IsClient then
+            MC_SEND_PlayerSettings
+          else if gGameOn and (gPlayer1 <> nil) then
+          begin
+            gPlayer1.Name := b_Text_Unformat(P[1]);
+            if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer1.UID);
+          end;
+        end;
+      end;
+    'p2_name':
+      begin
+        if (Length(P) > 1) then
+        begin
+          gPlayer2Settings.Name := b_Text_Unformat(P[1]);
+          if g_Game_IsClient then
+            MC_SEND_PlayerSettings
+          else if gGameOn and (gPlayer2 <> nil) then
+          begin
+            gPlayer2.Name := b_Text_Unformat(P[1]);
+            if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID);
+          end;
+        end;
+      end;
+    'p1_color':
+      begin
+        if Length(P) > 3 then
+        begin
+          gPlayer1Settings.Color := _RGB(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
+                                         EnsureRange(StrToIntDef(P[2], 0), 0, 255),
+                                         EnsureRange(StrToIntDef(P[3], 0), 0, 255));
+          if g_Game_IsClient then
+            MC_SEND_PlayerSettings
+          else if gGameOn and (gPlayer1 <> nil) then
+          begin
+            gPlayer1.SetColor(gPlayer1Settings.Color);
+            if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer1.UID);
+          end;
+        end;
+      end;
+    'p2_color':
+      begin
+        if Length(P) > 3 then
+        begin
+          gPlayer2Settings.Color := _RGB(EnsureRange(StrToIntDef(P[1], 0), 0, 255),
+                                         EnsureRange(StrToIntDef(P[2], 0), 0, 255),
+                                         EnsureRange(StrToIntDef(P[3], 0), 0, 255));
+          if g_Game_IsClient then
+            MC_SEND_PlayerSettings
+          else if gGameOn and (gPlayer2 <> nil) then
+          begin
+            gPlayer2.SetColor(gPlayer2Settings.Color);
+            if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID);
+          end;
+        end;
+      end;
+    'p1_model':
+      begin
+        if (Length(P) > 1) then
+        begin
+          gPlayer1Settings.Model := P[1];
+          if g_Game_IsClient then
+            MC_SEND_PlayerSettings
+          else if gGameOn and (gPlayer1 <> nil) then
+          begin
+            gPlayer1.FActualModelName := gPlayer1Settings.Model;
+            gPlayer1.SetModel(gPlayer1Settings.Model);
+            if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer1.UID);
+          end;
+        end;
+      end;
+    'p2_model':
+      begin
+        if (Length(P) > 1) then
+        begin
+          gPlayer2Settings.Model := P[1];
+          if g_Game_IsClient then
+            MC_SEND_PlayerSettings
+          else if gGameOn and (gPlayer2 <> nil) then
+          begin
+            gPlayer2.FActualModelName := gPlayer2Settings.Model;
+            gPlayer2.SetModel(gPlayer2Settings.Model);
+            if g_Game_IsNet then MH_SEND_PlayerSettings(gPlayer2.UID);
+          end;
+        end;
+      end;
+  end;
+end;
+
 procedure PrintHeapStats();
 var
   hs: TFPCHeapStatus;
index 217825ea98184bec8fdafb7d9f6be59e90fc3339..95b2319e6acd1eb2f92a7f599de2ce1af7011800 100644 (file)
@@ -18,7 +18,7 @@ unit g_net;
 interface
 
 uses
-  e_log, e_msg, ENet, Classes, md5, MAPDEF{$IFDEF USE_MINIUPNPC}, miniupnpc;{$ELSE};{$ENDIF}
+  e_log, e_msg, utils, ENet, Classes, md5, MAPDEF{$IFDEF USE_MINIUPNPC}, miniupnpc;{$ELSE};{$ENDIF}
 
 const
   NET_PROTOCOL_VER = 184;
@@ -248,6 +248,8 @@ function g_Net_IsNetworkAvailable (): Boolean;
 procedure g_Net_InitLowLevel ();
 procedure g_Net_DeinitLowLevel ();
 
+procedure NetServerCVars(P: SSArray);
+
 
 implementation
 
@@ -260,8 +262,7 @@ uses
   SysUtils,
   e_input, e_res,
   g_nethandler, g_netmsg, g_netmaster, g_player, g_window, g_console,
-  g_main, g_game, g_language, g_weapons, utils, ctypes, g_system,
-  g_map;
+  g_main, g_game, g_language, g_weapons, ctypes, g_system, g_map;
 
 const
   FILE_CHUNK_SIZE = 8192;
@@ -2297,12 +2298,12 @@ begin
 
     if I <> 0 then
     begin
-      conwritefln('forwarding port %d failed: error %d', [NetPort + 1, I]);
+      conwritefln('forwarding port %d failed: error %d', [NET_PING_PORT, I]);
       NetPongForwarded := False;
     end
     else
     begin
-      conwritefln('forwarded port %d successfully', [NetPort + 1]);
+      conwritefln('forwarded port %d successfully', [NET_PING_PORT]);
       NetPongForwarded := True;
     end;
   end;
@@ -2357,9 +2358,80 @@ begin
 end;
 {$ENDIF}
 
+procedure NetServerCVars(P: SSArray);
+var
+  cmd, s: string;
+  a, b: Integer;
+begin
+  cmd := LowerCase(P[0]);
+  case cmd of
+    'sv_name':
+      begin
+        if (Length(P) > 1) and (Length(P[1]) > 0) then
+        begin
+          NetServerName := P[1];
+          if Length(NetServerName) > 64 then
+            SetLength(NetServerName, 64);
+          g_Net_Slist_ServerRenamed();
+        end;
+        g_Console_Add(cmd + ' = "' + NetServerName + '"');
+      end;
+    'sv_passwd':
+      begin
+        if (Length(P) > 1) and (Length(P[1]) > 0) then
+        begin
+          NetPassword := P[1];
+          if Length(NetPassword) > 24 then
+            SetLength(NetPassword, 24);
+          g_Net_Slist_ServerRenamed();
+        end;
+        g_Console_Add(cmd + ' = "' + AnsiLowerCase(NetPassword) + '"');
+      end;
+    'sv_maxplrs':
+      begin
+        if (Length(P) > 1) then
+        begin
+          NetMaxClients := nclamp(StrToIntDef(P[1], NetMaxClients), 1, NET_MAXCLIENTS);
+          if g_Game_IsServer and g_Game_IsNet then
+          begin
+            b := 0;
+            for a := 0 to High(NetClients) do
+            begin
+              if NetClients[a].Used then
+              begin
+                Inc(b);
+                if b > NetMaxClients then
+                begin
+                  s := g_Player_Get(NetClients[a].Player).Name;
+                  enet_peer_disconnect(NetClients[a].Peer, NET_DISC_FULL);
+                  g_Console_Add(Format(_lc[I_PLAYER_KICK], [s]));
+                  MH_SEND_GameEvent(NET_EV_PLAYER_KICK, 0, s);
+                end;
+              end;
+            end;
+            g_Net_Slist_ServerRenamed();
+          end;
+        end;
+        g_Console_Add(cmd + ' = ' + IntToStr(NetMaxClients));
+      end;
+    'sv_public':
+      begin
+        if (Length(P) > 1) then
+        begin
+          NetUseMaster := StrToIntDef(P[1], Byte(NetUseMaster)) > 0;
+          if NetUseMaster then g_Net_Slist_Public() else g_Net_Slist_Private();
+        end;
+        g_Console_Add(cmd + ' = ' + IntToStr(Byte(NetUseMaster)));
+      end;
+  end;
+end;
 
 initialization
   conRegVar('cl_downloadtimeout', @g_Net_DownloadTimeout, 0.0, 1000000.0, '', 'timeout in seconds, 0 to disable it');
+  conRegVar('cl_predictself', @NetPredictSelf, '', 'predict local player');
+  conRegVar('cl_forceplayerupdate', @NetForcePlayerUpdate, '', 'update net players on NET_MSG_PLRPOS');
+  conRegVar('cl_interp', @NetInterpLevel, '', 'net player interpolation steps');
+  conRegVar('sv_forwardports', @NetForwardPorts, '', 'forward server port using miniupnpc (requires server restart)');
   SetLength(NetClients, 0);
   g_Net_DownloadTimeout := 60;
   NetIn.Alloc(NET_BUFSIZE);