summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 23394ea)
raw | patch | inline | side by side (parent: 23394ea)
author | fgsfds <pvt.fgsfds@gmail.com> | |
Mon, 24 Feb 2020 17:04:37 +0000 (20:04 +0300) | ||
committer | fgsfds <pvt.fgsfds@gmail.com> | |
Mon, 24 Feb 2020 17:04:37 +0000 (20:04 +0300) |
src/game/g_console.pas | patch | blob | history | |
src/game/g_game.pas | patch | blob | history | |
src/game/g_net.pas | patch | blob | history |
diff --git a/src/game/g_console.pas b/src/game/g_console.pas
index cde25fedb4c279a6a55cb17da39a41b5019aa45c..cbfcf5faaabf1134618ca6942c99485d89bb364d 100644 (file)
--- a/src/game/g_console.pas
+++ b/src/game/g_console.pas
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);
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);
diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 6b1e238f6f7b5928175a440d04d9b73a1923d865..61fed94c851f31560c9bc6bdfb6d45bc2437e90e 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
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);
var
a, b: Integer;
stat: TPlayerStatArray;
- cmd, s: string;
+ cmd: string;
begin
stat := nil;
cmd := LowerCase(P[0]);
[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
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
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;
diff --git a/src/game/g_net.pas b/src/game/g_net.pas
index 217825ea98184bec8fdafb7d9f6be59e90fc3339..95b2319e6acd1eb2f92a7f599de2ce1af7011800 100644 (file)
--- a/src/game/g_net.pas
+++ b/src/game/g_net.pas
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;
procedure g_Net_InitLowLevel ();
procedure g_Net_DeinitLowLevel ();
+procedure NetServerCVars(P: SSArray);
+
implementation
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;
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;
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);