X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Fgame%2Fg_console.pas;h=edf484f1dd8177dc59170710d0c48c6f4efeffb7;hp=6f02743bb8f73df2221dee5749139db5d82dcdee;hb=bccf523c0320f1f8f33edb72caec0a67cfa2e422;hpb=5c79a5c27e9330bdb53075734ea29efc38de10a6 diff --git a/src/game/g_console.pas b/src/game/g_console.pas index 6f02743..edf484f 100644 --- a/src/game/g_console.pas +++ b/src/game/g_console.pas @@ -78,7 +78,7 @@ var gChatTeam: Boolean = false; gAllowConsoleMessages: Boolean = true; gJustChatted: Boolean = false; // ÷òîáû àäìèí â èíòåðå ÷àòÿñü íå ïðîìàòûâàë ñòàòèñòèêó - gParsingBinds: Boolean = false; // íå ïåðåñîõðàíÿòü êîíôèã âî âðåìÿ ïàðñèíãà + gParsingBinds: Boolean = true; // íå ïåðåñîõðàíÿòü êîíôèã âî âðåìÿ ïàðñèíãà gPlayerAction: Array [0..1, 0..LAST_ACTION] of Boolean; // [player, action] implementation @@ -222,6 +222,8 @@ end; procedure boolVarHandler (me: PCommand; p: SSArray); procedure binaryFlag (var flag: Boolean; msg: AnsiString); + var + old: Boolean; begin if (Length(p) > 2) then begin @@ -229,12 +231,15 @@ procedure boolVarHandler (me: PCommand; p: SSArray); 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; @@ -245,6 +250,8 @@ end; procedure intVarHandler (me: PCommand; p: SSArray); +var + old: Integer; begin if (Length(p) <> 2) then begin @@ -253,7 +260,10 @@ 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; @@ -315,7 +325,7 @@ type procedure singleVarHandler (me: PCommand; p: SSArray); var pv: PVarSingle; - nv: Single; + nv, old: Single; msg: AnsiString; begin if (Length(p) > 2) then @@ -324,6 +334,7 @@ begin 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; @@ -345,6 +356,8 @@ begin 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^]); @@ -632,6 +645,14 @@ begin end end; +function QuoteStr(str: String): String; +begin + if Pos(' ', str) > 0 then + Result := '"' + str + '"' + else + Result := str; +end; + procedure BindCommands (p: SSArray); var cmd, key: AnsiString; i: Integer; begin @@ -647,7 +668,7 @@ begin if i < e_MaxInputKeys then begin if Length(p) = 2 then - g_Console_Add('"' + e_KeyNames[i] + '" = "' + GetCommandString(gInputBinds[i].down) + '" "' + GetCommandString(gInputBinds[i].up) + '"') + g_Console_Add(QuoteStr(e_KeyNames[i]) + ' = ' + QuoteStr(GetCommandString(gInputBinds[i].down)) + ' ' + QuoteStr(GetCommandString(gInputBinds[i].up))) else if Length(p) = 3 then g_Console_BindKey(i, p[2], '') else (* len = 4 *) @@ -663,7 +684,7 @@ begin 'bindlist': for i := 0 to e_MaxInputKeys - 1 do if (gInputBinds[i].down <> nil) or (gInputBinds[i].up <> nil) then - g_Console_Add(e_KeyNames[i] + ' "' + GetCommandString(gInputBinds[i].down) + '" "' + GetCommandString(gInputBinds[i].up) + '"'); + g_Console_Add(e_KeyNames[i] + ' ' + QuoteStr(GetCommandString(gInputBinds[i].down)) + ' ' + QuoteStr(GetCommandString(gInputBinds[i].up))); 'unbind': // unbind if Length(p) = 2 then @@ -956,7 +977,6 @@ begin WhitelistCommand('g_scorelimit'); WhitelistCommand('g_timelimit'); - gParsingBinds := True; g_Console_ResetBinds; g_Console_ReadConfig(GameDir + '/dfconfig.cfg'); g_Console_ReadConfig(GameDir + '/autoexec.cfg'); @@ -1851,7 +1871,14 @@ begin WriteLn(f, 'unbindall'); for i := 0 to e_MaxInputKeys - 1 do if (Length(gInputBinds[i].down) > 0) or (Length(gInputBinds[i].up) > 0) then - WriteLn(f, 'bind ', e_KeyNames[i], ' "', GetCommandString(gInputBinds[i].down), '" "', GetCommandString(gInputBinds[i].up), '"'); + begin + Write(f, 'bind ', e_KeyNames[i], ' ', QuoteStr(GetCommandString(gInputBinds[i].down))); + if Length(gInputBinds[i].down) = 0 then + Write(f, '""'); + if Length(gInputBinds[i].up) > 0 then + Write(f, ' ', QuoteStr(GetCommandString(gInputBinds[i].up))); + WriteLn(f, ''); + end; for i := 0 to High(commands) do begin if not commands[i].cheat then @@ -1859,15 +1886,15 @@ begin if @commands[i].procEx = @boolVarHandler then begin if PBoolean(commands[i].ptr)^ then j := 1 else j := 0; - WriteLn(f, commands[i].cmd, ' "', j, '"') + WriteLn(f, commands[i].cmd, ' ', j) end else if @commands[i].procEx = @intVarHandler then begin - WriteLn(f, commands[i].cmd, ' "', PInteger(commands[i].ptr)^, '"') + WriteLn(f, commands[i].cmd, ' ', PInteger(commands[i].ptr)^) end else if @commands[i].procEx = @singleVarHandler then begin - WriteLn(f, commands[i].cmd, ' "', PVarSingle(commands[i].ptr).val^:0:6, '"') + WriteLn(f, commands[i].cmd, ' ', PVarSingle(commands[i].ptr).val^:0:6) end end end;