Ich habe ja meine Map nun in eine 4x Map eingebaut. Nun müsste ich die Courseplay.xml umrechnen, was aber bei 15000 Zeilen per Hand zu einer Lebensaufgabe mutieren könnte.
Ich denke, jemand der Skriptingtechnisch etwas mehr Sachverstand hat als ich, findet dafür doch sicher schnell eine Lösung.
Die xml müsste dafür nur Zeilenweise ausgelesen werden und immer wenn in der Zeile
jeweils 1024 hinzuaddiert werden.
Wie könnte ich das denn nun am schnellsten und einfachsten Lösen?
Achja, bis ich die alle neu eingefahren habe, kann ich das auch einzeln per Hand umrechnen.. :/
Re: Courseplay.xml mit Script umrechnen
Posted: Wed Nov 06, 2013 12:54 am
by böserlöwe
Ich wäre nicht so sicher, das es immer nur die 1024 hinzu sind.
Wenn ich mich nicht irre, werden die punkte im Bereich von -1024 bis +1024 angegeben.
so ergibt sich der Umstand, das die Position dann in einem bestimmten Bereich auch mal im Positiven iwe im negativen Bereich sein könnte.
Und eine kombination von beiden würde dann das Chaos komplettieren.
meiner Meinung nach wäre es wirklich besser wenn du die Kurse noch einmal selbst auf der Map einfährst.
Klar dauert das eine Weile, aber ich denke auch das es effektiver ist, als durch die bloße Umrechnung und der eventuellen Fehlerbehebung an Zeit drauf geht.
Re: Courseplay.xml mit Script umrechnen
Posted: Wed Nov 06, 2013 1:05 am
by Mike77
Der Origin, also "0 0 0" ist bei einer Standartmap genau in der Mitte, bei einer 4Fach Map ist er genau in dem Kreuz, in dem sich die 4 Maps in der Mitte treffen.
Je nachdem wohin man nun seine entsprechende Map verschoben hat, kommen nur 4 Kombinationen in Frage. Verschiebt man die Map nach unten rechts (wie in meinem Fall), muss bei x und y jeweils 1024 dazugerechnet werden, um wieder in der Mitte der Map zu sein. Das kommt dadurch, weil eine Map immer die Kantenlängen von 2048 hat. Ich habe das mit den Hufeisen und den Fahrzeugen Im Savegame schon gemacht.
Bei der Map unten rechts x+1024, y+1024
bei der Map unten links x-1024, y+1024
bei der Map oben links x-1024, y-1024
bei der Map oben rechts x+1024, y-1024
Das funktioniert wunderbar, sonst wäre ich auch nicht auf die Idee gekommen, das in der coursplay.xml auch so zu machen
Natürlich sind die Angaben der Koordinaten manchmal im plus und manchmal im Minus. Aber wenn man bei beiden Werten jeweils die 1024 dazurechnet, kommt man genau da hin wo man hin muss
Re: Courseplay.xml mit Script umrechnen
Posted: Wed Nov 06, 2013 1:09 am
by böserlöwe
Ja, wenn du das so schon vorbereitet hast, ist das doch nur noch eine Aufgabe für Excel oder PHP
Ich würde das nicht freiwillig machen wollen. also noch viel Spass dabei.
Ok, der xml Editor sieht unabhängig von der Thematik hier schon sehr nützlich aus. Den werd ich mal behalten
Nun zum Problem: ich bin kein Skripter. Ich weis zwar wie es Theoretisch geht, aber nicht wie man es Praktisch umsetzt.
Die Schritte wäre ja:
-suche xml Tag "waypoint" (schwierig, da jeder eine ander Zahl angehängt hat. vielleicht mit Platzhalter, also "waypoint*")
-suche attribut pos=""
-ermittle den attribut-wert
-trenne die beiden Zahlen am Leerzeichen
-addiere zu jeder der beiden Zahlen 1024 hinzu
-trage die geänderten zahlen wieder als Wert ein
Wie müsste denn da so eine *.foal aussehen?
Re: Courseplay.xml mit Script umrechnen
Posted: Thu Nov 07, 2013 9:12 am
by webalizer
Nur einmal kurz getestet, sollte aber funktionieren:
//Courseplay shift
//v 0.1, 07.11.2013
//Verschieben von Courseplay Wegpunkten
//by webalizer, http://www.planet-ls.de
//Skalierfunktion mit Berücksichtigung von Exponential-Werten
change_v(str v, num scaleFactor)
{
num n = v;
int offset = StrFind(v,"e"); // Position von e finden
int e = 0;
if (offset > 0 && offset < StrLength(v) - 2)
e = StrMid(v,offset+1);
// Eigentliche Skalierung
n = n + scaleFactor;
// falls keine Exponentiale vorhanden, Rückgabe ohne
if (e == 0)
return "" + n;
// Rückgabe mit Exponentiale
v = "" + n + "e";
if (e > 0)
v += "+";
v += e;
return v;
}
//Funktion zum Zerlegen von XY-String / Skalieren / XML Zurückschreiben
scale_xyz( CMarkup xmlDoc, str attribute, num scaleFactor )
{
xmlDoc.ResetPos();
while ( xmlDoc.FindElem("//*[@pos]") )
if (xmlDoc.GetAttrib(attribute)){
str attribOrigin = xmlDoc.GetAttrib(attribute);
int str_pos_a1 = 0;
int str_pos_a2 = 0;
str_pos_a1 = StrFind( attribOrigin, " ", 0);
str a1 = StrMid(attribOrigin, 0, str_pos_a1);
str a2 = StrMid(attribOrigin, str_pos_a1+1);
a1 = change_v(a1, scaleFactor);
a2 = change_v(a2, scaleFactor);
str attribNew = "" + a1 + " " + a2;
xmlDoc.SetAttrib( attribute, attribNew );
}
return xmlDoc;
}
//Hauptfunktion: Aufruf der Skalierungsfuntionen mit Uebergabe von Dokument und Attribut
main( CMarkup xmlDoc ){
//Variablen eintragen
num scaleFactor = 1024; // Skalierungsfaktor
//Ende Variablen eintragen
xmlDoc.ResetPos();
xmlDoc = scale_xyz( xmlDoc, "pos", scaleFactor );
return xmlDoc;
}
Re: Courseplay.xml mit Script umrechnen
Posted: Thu Nov 07, 2013 6:37 pm
by Mike77
Wow... Vielen Dank. Das sieht schonmal sehr vielversprechend aus. Ich hatte mir mal so Gedanken gemacht wie das Skript dazu aussehen könnte, da ich wenigstens in php keine totale Niete bin, aber das da oben is einfach kompletter Bahnhof für mich.
Geht schon damit los, das ich garnicht weis, woher das Skript nun weis wo es nach den Werten suchen soll. Dachte der muss nach einem Bestimmten String suchen (eben pos=") um ihm sagen zu können das gleich danach die Werte kommen.
(EDIT: Da ich vor lauter Freude vergessen hatte den Beitrag abzuschicken, kann ich gleich noch ergänzen das es wunderbar funktioniert.
Nachdem ich das nun mit dem Skript umgerechnet und ingame getestet habe, könnte ich dich knutschen... naja, oder auch nicht, aber auf jeden Fall bin ich dir sehr dankbar. )
Aber eine Frage hätte ich da noch. Sehe ich das richtig, das man für x und y nicht separat den Shiftwert angeben kann?
Also mit dem Skript lassen sich die Kurse dann nur nach unten rechts bzw oben links verschieben, da bei den anderen beiden Ecken ja die x und y Werte unterschiedlich sind (einmal + einmal - )
Bzw nur nach unten rechts, weil das Skript ja immer addiert und nicht subtrahiert. Obwohl... 0 + (-1024) geht ja auch. Ergibt dann -1024 ... Kann man das irgendwie umbauen, das man die Werte separat angeben kann, oder kommt der mit dem Minus vor der Zahl dann nich klar?
Re: Courseplay.xml mit Script umrechnen
Posted: Thu Nov 07, 2013 6:52 pm
by webalizer
Um da tiefer einzusteigen bzw. die Befehle zu verstehen müsstest du dich näher mit der CMarkup-Syntax auf der foxe-Seite vertraut machen.
Folgendes sucht nach beliebigen XML-Elementen, die das Attribut "pos" beinhalten. Da das in der courseplay.xml nur waypoints haben, muss man die Suche nicht weiter einschränken: FindElem("//*[@pos]")
Man kann natürlich auch x y getrennt berechnen. Öhm, und bis ich das jetzt beschrieben habe, hab ich´s selbst geändert :