Added: option to open the server config folder in Windows Explorer
Fixed: updated map list Fixed: disable manual map name input when multiselecting
@ -4,6 +4,8 @@ AOCTO-Darkforest_p=Dark forest
|
|||||||
AOCTO-Hillside_P=Hillside
|
AOCTO-Hillside_P=Hillside
|
||||||
AOCTO-Stoneshill_P=Stoneshill
|
AOCTO-Stoneshill_P=Stoneshill
|
||||||
AOCTO-Citadel_p=Citadel
|
AOCTO-Citadel_p=Citadel
|
||||||
|
AOCTO-Coldfront_p=Coldfront
|
||||||
|
AOCTO-Outpost_p=Outpost
|
||||||
|
|
||||||
[Capture the Flag]
|
[Capture the Flag]
|
||||||
AOCCTF-Frigid_p=Frigid
|
AOCCTF-Frigid_p=Frigid
|
||||||
@ -47,6 +49,13 @@ AOCLTS-Ruins_P=Ruins
|
|||||||
AOCLTS-Ruins_Large_P=Ruins Large
|
AOCLTS-Ruins_Large_P=Ruins Large
|
||||||
AOCLTS-StoneshillVillage_P=Stoneshill Village
|
AOCLTS-StoneshillVillage_P=Stoneshill Village
|
||||||
AOCLTS-ThroneRoom_P=Throne Room
|
AOCLTS-ThroneRoom_P=Throne Room
|
||||||
|
AOCLTS-Bridge_p=Bridge
|
||||||
|
AOCLTS-Cistern_p=Cistern
|
||||||
|
AOCLTS-Courtyard_p=Courtyard
|
||||||
|
AOCLTS-Dininghall_p=Dining Hall
|
||||||
|
AOCLTS-FrostPeak_p=Frostpeak
|
||||||
|
AOCLTS-Mines_p=Mines
|
||||||
|
AOCLTS-Shipyard_p=Shipyard
|
||||||
|
|
||||||
[Free for All]
|
[Free for All]
|
||||||
AOCFFA-Arena3_p=Arena
|
AOCFFA-Arena3_p=Arena
|
||||||
@ -58,6 +67,13 @@ AOCFFA-Moor_p=Moor
|
|||||||
AOCFFA-Ruins_P=Ruins
|
AOCFFA-Ruins_P=Ruins
|
||||||
AOCFFA-ThroneRoomXL_P=Throne Room XL
|
AOCFFA-ThroneRoomXL_P=Throne Room XL
|
||||||
AOCFFA-StoneshillVillage_P=Stoneshill Village
|
AOCFFA-StoneshillVillage_P=Stoneshill Village
|
||||||
|
AOCFFA-Bridge_p=Bridge
|
||||||
|
AOCFFA-Cistern_p=Cistern
|
||||||
|
AOCFFA-Courtyard_p=Courtyard
|
||||||
|
AOCFFA-Dininghall_p=Dining Hall
|
||||||
|
AOCFFA-FrostPeak_p=Frostpeak
|
||||||
|
AOCFFA-Mines_p=Mines
|
||||||
|
AOCFFA-Shipyard_p=Shipyard
|
||||||
|
|
||||||
[Team Deathmatch]
|
[Team Deathmatch]
|
||||||
AOCTD-Frigid_p=Frigid
|
AOCTD-Frigid_p=Frigid
|
||||||
@ -73,4 +89,11 @@ AOCTD-HillsidePyre_P=Hillside Pyre
|
|||||||
AOCTD-Darkforest_XL_p=Dark forest XL
|
AOCTD-Darkforest_XL_p=Dark forest XL
|
||||||
AOCTD-Darkforest_Valley_p=Dark forest Valley
|
AOCTD-Darkforest_Valley_p=Dark forest Valley
|
||||||
AOCTD-Moor_Large_p=Moor Large
|
AOCTD-Moor_Large_p=Moor Large
|
||||||
AOCTD-Ruins_Large_P=Ruins Large
|
AOCTD-Ruins_Large_P=Ruins Large
|
||||||
|
AOCTD-Bridge_p=Bridge
|
||||||
|
AOCTD-Cistern_p=Cistern
|
||||||
|
AOCTD-Courtyard_p=Courtyard
|
||||||
|
AOCTD-Dininghall_p=Dining Hall
|
||||||
|
AOCTD-FrostPeak_p=Frostpeak
|
||||||
|
AOCTD-Mines_p=Mines
|
||||||
|
AOCTD-Shipyard_p=Shipyard
|
BIN
assets/maps/AOCFFA-Bridge_p.jpg
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
assets/maps/AOCFFA-Cistern_p.jpg
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
assets/maps/AOCFFA-Courtyard_p.jpg
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
assets/maps/AOCFFA-Dininghall_p.jpg
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
assets/maps/AOCFFA-FrostPeak_p.jpg
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
assets/maps/AOCFFA-Mines_p.jpg
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
assets/maps/AOCFFA-Shipyard_p.jpg
Normal file
After Width: | Height: | Size: 5.4 KiB |
BIN
assets/maps/AOCLTS-Bridge_p.jpg
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
assets/maps/AOCLTS-Cistern_p.jpg
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
assets/maps/AOCLTS-Courtyard_p.jpg
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
assets/maps/AOCLTS-Dininghall_p.jpg
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
assets/maps/AOCLTS-FrostPeak_p.jpg
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
assets/maps/AOCLTS-Mines_p.jpg
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
assets/maps/AOCLTS-Shipyard_p.jpg
Normal file
After Width: | Height: | Size: 5.4 KiB |
BIN
assets/maps/AOCTD-Bridge_p.jpg
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
assets/maps/AOCTD-Cistern_p.jpg
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
assets/maps/AOCTD-Courtyard_p.jpg
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
assets/maps/AOCTD-Dininghall_p.jpg
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
assets/maps/AOCTD-FrostPeak_p.jpg
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
assets/maps/AOCTD-Mines_p.jpg
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
assets/maps/AOCTD-Shipyard_p.jpg
Normal file
After Width: | Height: | Size: 5.4 KiB |
@ -28,6 +28,7 @@ type
|
|||||||
function GetExecutable: string; virtual; abstract;
|
function GetExecutable: string; virtual; abstract;
|
||||||
function GetParameters: string; virtual;
|
function GetParameters: string; virtual;
|
||||||
function GetCommandLine: string; virtual;
|
function GetCommandLine: string; virtual;
|
||||||
|
function GetConfigPath: string; virtual;
|
||||||
|
|
||||||
property Loaded: Boolean read FLoaded;
|
property Loaded: Boolean read FLoaded;
|
||||||
property Location: string read FLocation;
|
property Location: string read FLocation;
|
||||||
@ -108,6 +109,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TCustomGame.GetConfigPath: string;
|
||||||
|
begin
|
||||||
|
Result := ExtractFilePath(GetExecutable);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TCustomGame.PropertyChanged(const APropertyName: string);
|
procedure TCustomGame.PropertyChanged(const APropertyName: string);
|
||||||
begin
|
begin
|
||||||
if not FModified then
|
if not FModified then
|
||||||
|
@ -36,6 +36,7 @@ type
|
|||||||
|
|
||||||
function GetExecutable: string; override;
|
function GetExecutable: string; override;
|
||||||
function GetParameters: string; override;
|
function GetParameters: string; override;
|
||||||
|
function GetConfigPath: string; override;
|
||||||
|
|
||||||
{ IGameNetwork }
|
{ IGameNetwork }
|
||||||
function GetServerPort: Integer;
|
function GetServerPort: Integer;
|
||||||
@ -102,7 +103,9 @@ uses
|
|||||||
|
|
||||||
|
|
||||||
const
|
const
|
||||||
GameSettingsFileName = 'UDKGame\Config\PCServer-UDKGame.ini';
|
GameSettingsPath = 'UDKGame\Config\';
|
||||||
|
|
||||||
|
GameSettingsFileName = GameSettingsPath + 'PCServer-UDKGame.ini';
|
||||||
GameURL = 'URL';
|
GameURL = 'URL';
|
||||||
GameURLPort = 'Port'; GameURLPortDefault = 7777;
|
GameURLPort = 'Port'; GameURLPortDefault = 7777;
|
||||||
GameURLPeerPort = 'PeerPort'; GameURLPeerPortDefault = 7778;
|
GameURLPeerPort = 'PeerPort'; GameURLPeerPortDefault = 7778;
|
||||||
@ -119,7 +122,7 @@ const
|
|||||||
GameAccessControlAdminPassword = 'AdminPassword';
|
GameAccessControlAdminPassword = 'AdminPassword';
|
||||||
|
|
||||||
|
|
||||||
EngineSettingsFileName = 'UDKGame\Config\PCServer-UDKEngine.ini';
|
EngineSettingsFileName = GameSettingsPath + 'PCServer-UDKEngine.ini';
|
||||||
EngineSteam = 'OnlineSubsystemSteamworks.OnlineSubsystemSteamworks';
|
EngineSteam = 'OnlineSubsystemSteamworks.OnlineSubsystemSteamworks';
|
||||||
EngineSteamQueryPort = 'QueryPort'; EngineSteamQueryPortDefault = 27015;
|
EngineSteamQueryPort = 'QueryPort'; EngineSteamQueryPortDefault = 27015;
|
||||||
|
|
||||||
@ -181,6 +184,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TChivalryGame.GetConfigPath: string;
|
||||||
|
begin
|
||||||
|
Result := Location + GameSettingsPath;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TChivalryGame.DoLoad;
|
procedure TChivalryGame.DoLoad;
|
||||||
var
|
var
|
||||||
gameSettings: TUDKIniFile;
|
gameSettings: TUDKIniFile;
|
||||||
|
@ -2581,6 +2581,10 @@ object MainForm: TMainForm
|
|||||||
Caption = '&Revert changes'
|
Caption = '&Revert changes'
|
||||||
OnExecute = actRevertExecute
|
OnExecute = actRevertExecute
|
||||||
end
|
end
|
||||||
|
object actOpenConfigFolder: TAction
|
||||||
|
Caption = '&Open server configuration folder'
|
||||||
|
OnExecute = actOpenConfigFolderExecute
|
||||||
|
end
|
||||||
end
|
end
|
||||||
object pmnLaunch: TPopupMenu
|
object pmnLaunch: TPopupMenu
|
||||||
Left = 144
|
Left = 144
|
||||||
@ -2588,6 +2592,12 @@ object MainForm: TMainForm
|
|||||||
object pmnLaunchCopyCmdLine: TMenuItem
|
object pmnLaunchCopyCmdLine: TMenuItem
|
||||||
Action = actCopyCmdLine
|
Action = actCopyCmdLine
|
||||||
end
|
end
|
||||||
|
object pmnLaunchSep1: TMenuItem
|
||||||
|
Caption = '-'
|
||||||
|
end
|
||||||
|
object pmnLaunchOpenConfigFolder: TMenuItem
|
||||||
|
Action = actOpenConfigFolder
|
||||||
|
end
|
||||||
end
|
end
|
||||||
object alMapList: TActionList
|
object alMapList: TActionList
|
||||||
Images = glToolbar
|
Images = glToolbar
|
||||||
|
@ -145,6 +145,9 @@ type
|
|||||||
lblAdminPassword: TLabel;
|
lblAdminPassword: TLabel;
|
||||||
edtAdminPassword: TEdit;
|
edtAdminPassword: TEdit;
|
||||||
cbShowPasswords: TCheckBox;
|
cbShowPasswords: TCheckBox;
|
||||||
|
pmnLaunchSep1: TMenuItem;
|
||||||
|
actOpenConfigFolder: TAction;
|
||||||
|
pmnLaunchOpenConfigFolder: TMenuItem;
|
||||||
|
|
||||||
procedure FormCreate(Sender: TObject);
|
procedure FormCreate(Sender: TObject);
|
||||||
procedure FormDestroy(Sender: TObject);
|
procedure FormDestroy(Sender: TObject);
|
||||||
@ -176,6 +179,7 @@ type
|
|||||||
procedure actMapUpExecute(Sender: TObject);
|
procedure actMapUpExecute(Sender: TObject);
|
||||||
procedure actMapDownExecute(Sender: TObject);
|
procedure actMapDownExecute(Sender: TObject);
|
||||||
procedure cbShowPasswordsClick(Sender: TObject);
|
procedure cbShowPasswordsClick(Sender: TObject);
|
||||||
|
procedure actOpenConfigFolderExecute(Sender: TObject);
|
||||||
private type
|
private type
|
||||||
TBindingExpressionList = TList<TBindingExpression>;
|
TBindingExpressionList = TList<TBindingExpression>;
|
||||||
TPageMenuDictionary = TDictionary<TTabSheet, TX2MenuBarItem>;
|
TPageMenuDictionary = TDictionary<TTabSheet, TX2MenuBarItem>;
|
||||||
@ -946,6 +950,15 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TMainForm.actOpenConfigFolderExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if not Assigned(ActiveGame) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
ShellExecute(Self.Handle, 'explore', PChar(ActiveGame.GetConfigPath), nil, nil, SW_SHOWNORMAL);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TMainForm.actMapAddExecute(Sender: TObject);
|
procedure TMainForm.actMapAddExecute(Sender: TObject);
|
||||||
var
|
var
|
||||||
gameMapList: IGameMapList;
|
gameMapList: IGameMapList;
|
||||||
|
@ -81,6 +81,7 @@ object MapForm: TMapForm
|
|||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
TreeOptions.PaintOptions = [toHideFocusRect, toShowDropmark, toShowTreeLines, toThemeAware, toUseBlendedImages]
|
TreeOptions.PaintOptions = [toHideFocusRect, toShowDropmark, toShowTreeLines, toThemeAware, toUseBlendedImages]
|
||||||
TreeOptions.SelectionOptions = [toFullRowSelect, toMultiSelect]
|
TreeOptions.SelectionOptions = [toFullRowSelect, toMultiSelect]
|
||||||
|
OnChange = vstMapChange
|
||||||
OnCollapsing = vstMapCollapsing
|
OnCollapsing = vstMapCollapsing
|
||||||
OnCompareNodes = vstMapCompareNodes
|
OnCompareNodes = vstMapCompareNodes
|
||||||
OnFocusChanged = vstMapFocusChanged
|
OnFocusChanged = vstMapFocusChanged
|
||||||
|
@ -39,6 +39,7 @@ type
|
|||||||
procedure vstMapPaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType);
|
procedure vstMapPaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType);
|
||||||
procedure vstMapFocusChanging(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean);
|
procedure vstMapFocusChanging(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean);
|
||||||
procedure vstMapFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex);
|
procedure vstMapFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex);
|
||||||
|
procedure vstMapChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||||||
procedure vstMapCollapsing(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean);
|
procedure vstMapCollapsing(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean);
|
||||||
procedure vstMapCompareNodes(Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
|
procedure vstMapCompareNodes(Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
|
||||||
procedure edtMapNameChange(Sender: TObject);
|
procedure edtMapNameChange(Sender: TObject);
|
||||||
@ -300,6 +301,16 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TMapForm.vstMapChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||||||
|
const
|
||||||
|
EditColor: array[Boolean] of TColor = (clBtnFace, clWindow);
|
||||||
|
|
||||||
|
begin
|
||||||
|
edtMapName.Enabled := (Sender.selectedCount <= 1);
|
||||||
|
edtMapName.Color := EditColor[edtMapName.Enabled];
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TMapForm.vstMapCollapsing(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean);
|
procedure TMapForm.vstMapCollapsing(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean);
|
||||||
begin
|
begin
|
||||||
Allowed := False;
|
Allowed := False;
|
||||||
|