CentrED/Tools/cedserver_config_2_3/cedserver_config_2_3.lpr

115 lines
3.4 KiB
Plaintext

program cedserver_config_2_3;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, IniFiles, XMLWrite, dom;
procedure WriteXMLString(AElement: TDOMElement; AName, AValue: string);
var
child: TDOMElement;
begin
child := AElement.OwnerDocument.CreateElement(AName);
AElement.AppendChild(child);
child.AppendChild(AElement.OwnerDocument.CreateTextNode(AValue));
end;
procedure WriteXMLAccount(AElement: TDOMElement; AAccountString: string);
var
splitPos: Integer;
lastPos: TDOMElement;
begin
//Account name
splitPos := Pos('=', AAccountString);
WriteXMLString(AElement, 'Name', Copy(AAccountString, 1, splitPos - 1));
Delete(AAccountString, 1, splitPos);
//Accesslevel
splitPos := Pos(':', AAccountString);
WriteXMLString(AElement, 'Accesslevel', Copy(AAccountString, 1, splitPos - 1));
Delete(AAccountString, 1, splitPos);
lastPos := AElement.OwnerDocument.CreateElement('LastPos');
lastPos.AttribStrings['x'] := '0';
lastPos.AttribStrings['y'] := '0';
//Passwordhash
splitPos := Pos(':', AAccountString);
if splitPos > 0 then
begin
WriteXMLString(AElement, 'PasswordHash', Copy(AAccountString, 1, splitPos - 1));
Delete(AAccountString, 1, splitPos);
//LastPos
splitPos := Pos(':', AAccountString);
if splitPos > 0 then
begin
lastPos.AttribStrings['x'] := Copy(AAccountString, 1, splitPos - 1);
lastPos.AttribStrings['y'] := Copy(AAccountString, splitPos + 1, Length(AAccountString));
end;
end else
WriteXMLString(AElement, 'PasswordHash', AAccountString);
AElement.AppendChild(lastPos);
AElement.AppendChild(AElement.OwnerDocument.CreateElement('Regions'));
end;
var
v2ini: TIniFile;
v3xml: TXMLDocument;
root, parent, child: TDOMElement;
i: Integer;
rawAccounts: TStringList;
begin
writeln('Opening "cedserver.ini"');
v2ini := TIniFile.Create('cedserver.ini');
writeln('Preparing XML structure');
v3xml := TXMLDocument.Create;
root := v3xml.CreateElement('CEDConfig');
root.AttribStrings['Version'] := '3';
v3xml.AppendChild(root);
writeln('Transfering settings');
WriteXMLString(root, 'Port', v2ini.ReadString('Network', 'Port', '2597'));
parent := v3xml.CreateElement('Map');
root.AppendChild(parent);
WriteXMLString(parent, 'Map', v2ini.ReadString('Paths', 'map', 'map0.mul'));
WriteXMLString(parent, 'StaIdx', v2ini.ReadString('Paths', 'staidx', 'staidx0.mul'));
WriteXMLString(parent, 'Statics', v2ini.ReadString('Paths', 'statics', 'statics0.mul'));
WriteXMLString(parent, 'Width', v2ini.ReadString('Parameters', 'Width', '768'));
WriteXMLString(parent, 'Height', v2ini.ReadString('Parameters', 'Height', '512'));
WriteXmlString(root, 'Tiledata', v2ini.ReadString('Paths', 'tiledata', 'tiledata.mul'));
WriteXmlString(root, 'Radarcol', v2ini.ReadString('Paths', 'radarcol', 'radarcol.mul'));
writeln('Transfering accounts');
parent := v3xml.CreateElement('Accounts');
root.AppendChild(parent);
rawAccounts := TStringList.Create;
v2ini.ReadSectionRaw('Accounts', rawAccounts);
for i := 0 to rawAccounts.Count - 1 do
begin
child := v3xml.CreateElement('Account');
parent.AppendChild(child);
WriteXMLAccount(child, rawAccounts.Strings[i]);
end;
rawAccounts.Free;
root.AppendChild(v3xml.CreateElement('Regions'));
v2ini.Free;
writeln('Writing "cedserver.xml"');
WriteXMLFile(v3xml, 'cedserver.xml');
Writeln('Done.');
end.