diff --git a/src/game/g_console.pas b/src/game/g_console.pas
index 33bfcf7dafedefaef8e4b74a39c8d07e746f151d..c89e3eeb0d9dc9de301403935ea06ef01deff1fb 100644 (file)
--- a/src/game/g_console.pas
+++ b/src/game/g_console.pas
function g_Console_CommandBlacklisted (C: AnsiString): Boolean;
procedure g_Console_ReadConfig (filename: String);
procedure g_Console_WriteConfig (filename: String);
+procedure g_Console_WriteGameConfig;
function g_Console_Interactive: Boolean;
function g_Console_Action (action: Integer): Boolean;
gChatTeam: Boolean = false;
gAllowConsoleMessages: Boolean = true;
gJustChatted: Boolean = false; // ÷òîáû àäìèí â èíòåðå ÷àòÿñü íå ïðîìàòûâàë ñòàòèñòèêó
+ gParsingBinds: Boolean = false; // íå ïåðåñîõðàíÿòü êîíôèã âî âðåìÿ ïàðñèíãà
gPlayerAction: Array [0..1, 0..LAST_ACTION] of Boolean; // [player, action]
implementation
procedure boolVarHandler (me: PCommand; p: SSArray);
procedure binaryFlag (var flag: Boolean; msg: AnsiString);
+ var
+ old: Boolean;
begin
if (Length(p) > 2) then
begin
end
else
begin
+ old := flag;
case conGetBoolArg(p, 1) of
-1: begin end;
0: if not me.cheat or conIsCheatsEnabled then flag := false else begin conwriteln('not available'); exit; end;
1: if not me.cheat or conIsCheatsEnabled then flag := true else begin conwriteln('not available'); exit; end;
666: if not me.cheat or conIsCheatsEnabled then flag := not flag else begin conwriteln('not available'); exit; end;
end;
+ if flag <> old then
+ g_Console_WriteGameConfig();
if (Length(msg) = 0) then msg := p[0] else msg += ':';
if flag then conwritefln('%s tan', [msg]) else conwritefln('%s ona', [msg]);
end;
procedure intVarHandler (me: PCommand; p: SSArray);
- procedure binaryFlag (var flag: Boolean; msg: AnsiString);
- begin
- if (Length(p) > 2) then
- begin
- conwritefln('too many arguments to ''%s''', [p[0]]);
- end
- else
- begin
- case conGetBoolArg(p, 1) of
- -1: begin end;
- 0: if not me.cheat or conIsCheatsEnabled then flag := false else begin conwriteln('not available'); exit; end;
- 1: if not me.cheat or conIsCheatsEnabled then flag := true else begin conwriteln('not available'); exit; end;
- 666: if not me.cheat or conIsCheatsEnabled then flag := not flag else begin conwriteln('not available'); exit; end;
- end;
- if (Length(msg) = 0) then msg := p[0] else msg += ':';
- if flag then conwritefln('%s tan', [msg]) else conwritefln('%s ona', [msg]);
- end;
- end;
+var
+ old: Integer;
begin
if (Length(p) <> 2) then
begin
else
begin
try
+ old := PInteger(me.ptr)^;
PInteger(me.ptr)^ := StrToInt(p[1]);
+ if PInteger(me.ptr)^ <> old then
+ g_Console_WriteGameConfig();
except
conwritefln('invalid integer value: "%s"', [p[1]]);
end;
procedure singleVarHandler (me: PCommand; p: SSArray);
var
pv: PVarSingle;
- nv: Single;
+ nv, old: Single;
msg: AnsiString;
begin
if (Length(p) > 2) then
exit;
end;
pv := PVarSingle(me.ptr);
+ old := pv.val^;
if (Length(p) = 2) then
begin
if me.cheat and (not conIsCheatsEnabled) then begin conwriteln('not available'); exit; end;
pv.val^ := nv;
end;
end;
+ if pv.val^ <> old then
+ g_Console_WriteGameConfig();
msg := me.msg;
if (Length(msg) = 0) then msg := me.cmd else msg += ':';
conwritefln('%s %s', [msg, pv.val^]);
end;
'togglechat':
begin
- g_Console_Chat_Switch;
+ if not gConsoleShow and (g_ActiveWindow = nil) then
+ g_Console_Chat_Switch;
gSkipFirstChar := not g_Console_Interactive()
end;
'toggleteamchat':
if gGameSettings.GameMode in [GM_TDM, GM_CTF] then
begin
- g_Console_Chat_Switch(True);
+ if not gConsoleShow and (g_ActiveWindow = nil) then
+ g_Console_Chat_Switch(True);
gSkipFirstChar := not g_Console_Interactive()
end;
end
AddCommand('p2_name', GameCVars);
AddCommand('p1_color', GameCVars);
AddCommand('p2_color', GameCVars);
- AddCommand('r_showtime', GameCVars);
AddCommand('r_showscore', GameCVars);
AddCommand('r_showlives', GameCVars);
AddCommand('r_showstat', GameCVars);
WhitelistCommand('g_scorelimit');
WhitelistCommand('g_timelimit');
+ gParsingBinds := True;
g_Console_ResetBinds;
g_Console_ReadConfig(GameDir + '/dfconfig.cfg');
g_Console_ReadConfig(GameDir + '/autoexec.cfg');
+ gParsingBinds := False;
g_Console_Add(Format(_lc[I_CONSOLE_WELCOME], [GAME_VERSION]));
g_Console_Add('');
if key > 0 then
begin
gInputBinds[key].down := ParseAlias(down);
- gInputBinds[key].up := ParseAlias(up)
- end
+ gInputBinds[key].up := ParseAlias(up);
+ end;
+ g_Console_WriteGameConfig();
end;
function g_Console_MatchBind (key: Integer; down: AnsiString; up: AnsiString = ''): Boolean;
if (not g_GUIGrabInput) and (key >= 0) and (key < e_MaxInputKeys) and ((gInputBinds[key].down <> nil) or (gInputBinds[key].up <> nil)) then
begin
if down then
- for i := 0 to High(gInputBinds[key].down) do
- g_Console_Process(gInputBinds[key].down[i], True)
+ begin
+ if not gChatShow then
+ for i := 0 to High(gInputBinds[key].down) do
+ g_Console_Process(gInputBinds[key].down[i], True);
+ end
else
for i := 0 to High(gInputBinds[key].up) do
g_Console_Process(gInputBinds[key].up[i], True)
while (i <= len) and (s[i] <= ' ') do inc(i);
(* skip comments *)
if (i <= len) and ((s[i] <> '#') and ((i + 1 > len) or (s[i] <> '/') or (s[i + 1] <> '/'))) then
- g_Console_Process(s, True)
+ g_Console_Process(s, True);
end
end;
- CloseFile(f)
+ CloseFile(f);
end
end;
CloseFile(f)
end;
+procedure g_Console_WriteGameConfig;
+begin
+ if gParsingBinds then
+ Exit;
+ g_Console_WriteConfig(GameDir + '/dfconfig.cfg');
+end;
end.