X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_console.pas;h=15497d913a59a0beb136e3909bd3a64e930d9d39;hb=1e0f0d41e9a104418c9dc17598859b23b02d1e9c;hp=d3059549107a05b8fa58b92df8bbb916880f7109;hpb=849699367b70d85e83ec3ac3bec68348dc63e80b;p=d2df-sdl.git diff --git a/src/game/g_console.pas b/src/game/g_console.pas index d305954..15497d9 100644 --- a/src/game/g_console.pas +++ b/src/game/g_console.pas @@ -56,6 +56,7 @@ function g_Console_MatchBind (key: Integer; down: AnsiString; up: AnsiString = function g_Console_FindBind (n: Integer; down: AnsiString; up: AnsiString = ''): Integer; procedure g_Console_BindKey (key: Integer; down: AnsiString; up: AnsiString = ''); procedure g_Console_ProcessBind (key: Integer; down: Boolean); +procedure g_Console_ProcessBindRepeat (key: Integer); procedure g_Console_ResetBinds; procedure conwriteln (const s: AnsiString; show: Boolean=false); @@ -152,6 +153,7 @@ var end; gInputBinds: Array [0..e_MaxInputKeys - 1] of record + rep: Boolean; down, up: SSArray; end; menu_toggled: BOOLEAN; (* hack for menu controls *) @@ -830,6 +832,34 @@ begin begin g_Console_Add('bind [up action]') end; + 'bindrep': + // bindrep + if Length(p) = 2 then + begin + key := LowerCase(p[1]); + i := 0; + while (i < e_MaxInputKeys) and (key <> LowerCase(e_KeyNames[i])) do inc(i); + if i < e_MaxInputKeys then + gInputBinds[i].rep := True + else + g_Console_Add('bindrep: "' + p[1] + '" is not a key') + end + else + g_Console_Add('bindrep '); + 'bindunrep': + // bindunrep + if Length(p) = 2 then + begin + key := LowerCase(p[1]); + i := 0; + while (i < e_MaxInputKeys) and (key <> LowerCase(e_KeyNames[i])) do inc(i); + if i < e_MaxInputKeys then + gInputBinds[i].rep := False + else + g_Console_Add('bindunrep: "' + p[1] + '" is not a key') + end + else + g_Console_Add('bindunrep '); 'bindlist': for i := 0 to e_MaxInputKeys - 1 do if (gInputBinds[i].down <> nil) or (gInputBinds[i].up <> nil) then @@ -957,6 +987,8 @@ begin AddCommand('g_language', SystemCommands); AddCommand('bind', BindCommands); + AddCommand('bindrep', BindCommands); + AddCommand('bindunrep', BindCommands); AddCommand('bindlist', BindCommands); AddCommand('unbind', BindCommands); AddCommand('unbindall', BindCommands); @@ -1000,6 +1032,8 @@ begin AddCommand('p2_color', PlayerSettingsCVars); AddCommand('p1_model', PlayerSettingsCVars); AddCommand('p2_model', PlayerSettingsCVars); + AddCommand('p1_team', PlayerSettingsCVars); + AddCommand('p2_team', PlayerSettingsCVars); AddCommand('g_max_particles', GameCVars); AddCommand('g_max_shells', GameCVars); @@ -1007,6 +1041,9 @@ begin AddCommand('g_max_corpses', GameCVars); AddCommand('g_gamemode', GameCVars); AddCommand('g_friendlyfire', GameCVars); + AddCommand('g_friendly_hit_trace', GameCVars); + AddCommand('g_friendly_hit_projectile', GameCVars); + AddCommand('g_friendly_absorb_damage', GameCVars); AddCommand('g_weaponstay', GameCVars); AddCommand('g_allow_exit', GameCVars); AddCommand('g_dm_keys', GameCVars); @@ -1049,10 +1086,14 @@ begin AddCommand('ready', GameCommands); AddCommand('kick', GameCommands); AddCommand('kick_id', GameCommands); + AddCommand('kick_pid', GameCommands); AddCommand('ban', GameCommands); - AddCommand('permban', GameCommands); AddCommand('ban_id', GameCommands); + AddCommand('ban_pid', GameCommands); + AddCommand('permban', GameCommands); AddCommand('permban_id', GameCommands); + AddCommand('permban_pid', GameCommands); + AddCommand('permban_ip', GameCommands); AddCommand('unban', GameCommands); AddCommand('connect', GameCommands); AddCommand('disconnect', GameCommands); @@ -1105,7 +1146,9 @@ begin WhitelistCommand('endmap'); WhitelistCommand('restart'); WhitelistCommand('kick'); + WhitelistCommand('kick_pid'); WhitelistCommand('ban'); + WhitelistCommand('ban_pid'); WhitelistCommand('centerprint'); WhitelistCommand('addbot'); @@ -1116,6 +1159,9 @@ begin WhitelistCommand('g_gamemode'); WhitelistCommand('g_friendlyfire'); + WhitelistCommand('g_friendly_hit_trace'); + WhitelistCommand('g_friendly_hit_projectile'); + WhitelistCommand('g_friendly_absorb_damage'); WhitelistCommand('g_weaponstay'); WhitelistCommand('g_allow_exit'); WhitelistCommand('g_dm_keys'); @@ -1813,6 +1859,7 @@ begin ASSERT(key < e_MaxInputKeys); if key > 0 then begin + gInputBinds[key].rep := False; gInputBinds[key].down := ParseAlias(down); gInputBinds[key].up := ParseAlias(up); end; @@ -1908,6 +1955,21 @@ begin menu_toggled := False end; +procedure g_Console_ProcessBindRepeat (key: Integer); + var i: Integer; +begin + if gConsoleShow or gChatShow or (g_ActiveWindow <> nil) then + begin + KeyPress(key); // key repeat in menus and shit + Exit; + end; + if BindsAllowed(key) and gInputBinds[key].rep then + begin + for i := 0 to High(gInputBinds[key].down) do + g_Console_Process(gInputBinds[key].down[i], True); + end; +end; + procedure g_Console_ResetBinds; var i: Integer; begin @@ -2028,6 +2090,14 @@ procedure g_Console_WriteConfig (filename: String); WriteLn(f, name, IfThen(LongBool(gsGameFlags and flag), 1, 0)); end; + function FormatTeam(team: Byte): string; + begin + if team = TEAM_BLUE then + result := 'blue' + else + result := 'red'; + end; + begin AssignFile(f, filename); Rewrite(f); @@ -2044,6 +2114,8 @@ begin if Length(gInputBinds[i].up) > 0 then Write(f, ' ', QuoteStr(GetCommandString(gInputBinds[i].up))); WriteLn(f, ''); + if gInputBinds[i].rep then + WriteLn(f, 'bindrep ', e_KeyNames[i]); end; // lang @@ -2076,6 +2148,8 @@ begin WriteLn(f, 'g_warmup_time ', gsWarmupTime); WriteFlag('g_friendlyfire ', GAME_OPTION_TEAMDAMAGE); + WriteFlag('g_friendly_hit_trace ', GAME_OPTION_TEAMHITTRACE); + WriteFlag('g_friendly_hit_projectile ', GAME_OPTION_TEAMHITPROJECTILE); WriteFlag('g_allow_exit ', GAME_OPTION_ALLOWEXIT); WriteFlag('g_allow_monsters ', GAME_OPTION_MONSTERS); WriteFlag('g_dm_keys ', GAME_OPTION_DMKEYS); @@ -2089,12 +2163,14 @@ begin WriteLn(f, 'p1_name ', QuoteStr(Name)); WriteLn(f, 'p1_color ', Color.R, ' ', Color.G, ' ', Color.B); WriteLn(f, 'p1_model ', QuoteStr(Model)); + WriteLn(f, 'p1_team ', FormatTeam(Team)); end; with gPlayer2Settings do begin WriteLn(f, 'p2_name ', QuoteStr(Name)); WriteLn(f, 'p2_color ', Color.R, ' ', Color.G, ' ', Color.B); WriteLn(f, 'p2_model ', QuoteStr(Model)); + WriteLn(f, 'p2_team ', FormatTeam(Team)); end; // all cvars