Hallo nochmal,
Mein Programm soll Wie folgt aussehen. Auf dem
FTP meines Gameservers sind 2
XML-Dateien und 3 cfg-Dateien. Die CFG`s enthalten Verschiedene einstellungen. Die Einstellungen sind in Zeilen unterteilt. Das Programm soll nun in einem Advance Modus starten, sich mit dem
FTP Verbinden und die CFG`s und die
XML`s in memofelder einlesen.Soweit hatte selbst ich keine Probleme
Das ganze ist natürlich auch veränderbar um es wieder zu speichern und hochzuladen.
Jetzt habe ich das Programm mit einem Basic Modus erweitert. In diesem Modus sollen nicht die CFG`s und
XML`s in memofelder, sondern Nur die Zahlen oder Worte der Jeweiligen Settings sollen in ein Edit feld.
Damit man sich das auch mal Vorstellen kann hier ein Bild von Vorhaben. Das "neue Programm" sollte in etwa gleich sein, nur sollen diesmal nicht nur die Dateien geschrieben werden, sondern auch der Basicmodus mit den einstellungen in den Dateien geladen werden.
http://people.freenet.de/redeyes330/progg.jpg
den Normalen Modus habe ich fertig. Den Basic Modus für den Mapcycle auch fast und mit dem speichern der CFG`s hab ich auch noch keine Probleme.
Meine Probleme:
1. Wenn ich die Maps in eine listbox wie auf dem Bild schreibe, soll das Programm So viele
XML-nodes in der
xml suchen , wie auch maps vorhanden sind. Ich habe das jetzt so gelöst aber gleichzeitig auf eine Map anzahl von 16 begrenzen müssen.
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
i, j, anzahl: Integer;
begin
//ftp connecten
ftp := TInetFTP.Create;
ftp.server:= '
81.3.59.69';
ftp.User:= '
server4656';
ftp.Password:= '
xxxx';
ftp.Connect(true);
//levelrotation und maplist runterladen
ftp.GetFile('
server4656/levelrotation.xml', '
levelrotation.xml');
ftp.GetFile('
server4656/maplist.xml', '
maplist.xml');
//server starten
form3.WebBrowser1.Navigate('
http://server4656:xxxx@81.3.59.69:46569/start');
//levelrotation.xml laden
memo2.Lines.Clear;
memo2.Lines.LoadFromFile('
levelrotation.xml');
FDoc := XMLToDomParser1.ParseFile('
levelrotation.xml', False);
try
i:= memo2.Lines.Count;
//überprüfen wieviele maps
if i= (7)
then
anzahl:= (i-7);
if i= (12)
then
anzahl:= (i-11);
if i= (17)
then
anzahl:= (i-15);
if i= (22)
then
anzahl:= (i-19);
if i= (27)
then
anzahl:= (i-23);
if i= (32)
then
anzahl:= (i-27);
if i= (37)
then
anzahl:= (i-31);
if i= (42)
then
anzahl:= (i-35);
if i= (47)
then
anzahl:= (i-39);
if i= (52)
then
anzahl:= (i-43);
if i= (57)
then
anzahl:= (i-47);
if i= (62)
then
anzahl:= (i-51);
if i= (67)
then
anzahl:= (i-55);
if i= (72)
then
anzahl:= (i-59);
if i= (77)
then
anzahl:= (i-63);
if i= (82)
then
anzahl:= (i-67);
//Maps mit Pfad in memo
for i := 0
to (anzahl)
do
memo1.Lines.Add(FDoc.GetElementsByTagName('
level').Item(i).Attributes.GetNamedItem('
name').NodeValue);
except
ShowMessage('
Fehler mit der Levelrotation');
end;
//letzet wort, nur Mapnamen
for i := 0
to Pred(Memo1.Lines.Count)
do
Memo1.Lines[i] := LastWord(Memo1.Lines[i], '
/');
//Mapnamen in die ListBox
for i := 0
to Pred(Memo1.Lines.Count)
do
listbox1.Items.Add(memo1.Lines[i]);
FDoc.Free;
2. Ich weiß nicht wie ich das mit der CFG-Datei machen kann. Ich habe jetzt folgendes Versucht mit dem ergebniss das ich die einstellungen auslesen kann. Jedoch soll das Programm ja nach einem bestimmten wort z.B servername suchen und dann die einstellung hinter dem wort, also Drachen-Gilde.com in ein Editfeld schreiben
Delphi-Quellcode:
function Without(const s: string; charSet: TSysCharSet): string;
var
i, iDel: Integer;
begin
Result := s;
iDel := 0;
for i := 1 to Length(s) do
if not (s[i] in charSet)
then Result[i - iDel] := s[i]
else Inc(iDel);
SetLength(Result, Length(s) - iDel);
end;
function LastWord(const s, delimiters: string): string;
var
iPos, iLength: Integer;
begin
iPos := LastDelimiter(delimiters, s);
iLength := Length(s) - iPos;
Result := AnsiRightStr(s, iLength);
end;
procedure TForm1.FormShow(Sender: TObject);
const
DIGITS = ['"'];
begin
memo1.Lines.LoadFromFile('server.cfg');
for i := 0 to Pred(Memo1.Lines.Count) do
memo2.Lines.Add(Without(Memo1.Lines[i], DIGITS));
for i := 0 to Pred(Memo1.Lines.Count) do
memo3.Lines.Add(LastWord(Memo2.Lines[i], ' ='));
end;
3. Naja das ist mehr eine bitte
. Da ich das was ich im mom benutze so ziemlich verstehe wäre es net schlecht wenn mann es auch so in der Art machen könnte. Auch wenn es etwas länger ist, Hauptsache ich versteh das Programm auch noch ohne das ich mich in die tiefen abgründe von Delphi stürzen muss.
Im Anhang noch die Dateien
Gruß Red