[DISKUSSION] Allgemeine S&M-Fragen

Hier ist der ideale Ort um über Scripts und Mods für X³: Terran Conflict und X³: Albion Prelude zu diskutieren.

Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum

Raumkraut93
Posts: 1368
Joined: Wed, 18. Mar 09, 22:20
x3tc

Post by Raumkraut93 »

Aaaalso,

ich hab mal ein wenig in der 00049.xml gesucht

Code: Select all

  <t id="1020402" s="50132276" l="1027"/>
Ist ja Argon Prime.

So, erstmal: Wofür steht "s" und wofür "l"?
Ich hatte gedacht vielleicht "Start" und "Länge"?

In dem Fall, wie wäre es wenn man es einfach mal versucht mit s="50132876" (Startpunkt bei normalem Start + etwas mehr als die Hälfte der Länge) und l="427" ? Würde sowas evt. klappen (man müsste dann ganz oft testen bis es passt)?
d.h. du musst dir den richtigen Abschnitt aus der 00149.dat (=Sounddatei) raussuchen
Wie öffne ich die Datei und wie schaffe ich es den Abschnitt zu finden?
Die Datei hab ich vor ein paar Monaten schoma versucht zu öffnen, mit Audacity, da kam aber nur ein helles lautes schrilles Piepsen für ein paar Sekunden ...

PS: Ich will Argon Prime nicht überschreiben, sondern nur dieses Prime nutzen für einen komplett anderen Sektor! Geht das auch?
"Dies ist alles, was ich über den Krieg weiss: Einer gewinnt, einer verliert
und nichts ist nachher so
wie es vorher war."

"Stellt eure Truppen auf, oh große Generäle,
Der Preis des Sieges übersteigt den Preis der Niederlage."
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Ja, auch das geht.
Ich hatte gedacht vielleicht "Start" und "Länge"?
Ist genau richtig. Dabei ist die Einheit ms.

Du kannst die Sounddatei mit dem VLC Media Player öffnen. Das wird allerdigns nicht viel bringen, da die ms nicht angezeigt werden.

Leider habe ich noch kein kostenloses Programm gefunden, das richtig mit dieser Sounddatei umgehen kann. Als 30-Tage-Testversion kannst du es mit SoundForge von Sony versuchen.
Einfach die Datei zu .mp3 umbennenen und importieren.

Naja, da ich die Möglichkeiten/Programme habe, die entsprechenden Stellen rauszusuchen habe ich mal "Prime" für dich rausgeschrieben.
Ich würde folgende Werte nehmen:
s = 50132813
l = 570
Das ergibt ein ganz gutes "Prime".

Mit neuen Sektoren hab ich das noch nicht versucht, ich bin aber sicher, dass das geht.
Da musst du wohl etwas experimentieren, wo du welche Einträge erstellst, ect.

MfG,
ScRaT
Raumkraut93
Posts: 1368
Joined: Wed, 18. Mar 09, 22:20
x3tc

Post by Raumkraut93 »

ScRaT_GER wrote:
Naja, da ich die Möglichkeiten/Programme habe, die entsprechenden Stellen rauszusuchen habe ich mal "Prime" für dich rausgeschrieben.
Ich würde folgende Werte nehmen:
s = 50132813
l = 570
Das ergibt ein ganz gutes "Prime".
Super, vielen Dank für deine Bemühungen. Habe es gerade getestet und es ist perfekt :D
ScRaT wrote:Mit neuen Sektoren hab ich das noch nicht versucht, ich bin aber sicher, dass das geht.
Da musst du wohl etwas experimentieren, wo du welche Einträge erstellst, ect.
Jo war ganz einfach:
Hab eine neue Zeile in die 00049.xml geschrieben:

Code: Select all

  <t id="71317" s="50132813" l="570"/>
Und in den t-file dann

Code: Select all

t id="71317">Prime</t>
t id="1020909>{1000,103} {7,71317}</t>
{1000,103} ist "Split". Und fertig war Split Prime :)

Vielen Dank nochmal! Ich lad mir jetzt mal diese Testversion runter und schaue ob ich das auch irgendwie alleine hinkrieg, dann könnte ich mir nämlich noch ein paar andere Wörter rausholen :)

mfg
raumkraut93
"Dies ist alles, was ich über den Krieg weiss: Einer gewinnt, einer verliert
und nichts ist nachher so
wie es vorher war."

"Stellt eure Truppen auf, oh große Generäle,
Der Preis des Sieges übersteigt den Preis der Niederlage."
Cronos988
Posts: 691
Joined: Mon, 27. Aug 07, 12:34
x3tc

Post by Cronos988 »

Gibt es eigentlich eine Möglichkeit Skripts außerhalb von X3 zu bearbeiten?

Einen Stand-alone Skripteditor habe ich noch nicht gefunden.

Ich weiß dass Skripts XML FIles sind, die über die XSL-Formatdatei X2script.xsl angezeigt werden wie im Skript Editor. Nur kann ich in dieser Anzeige nichts ändern. Ich habe einen XML editor, aber der gibt mir die XML-Datei im Rohformat, ohne die XSL Formatierung. Gibt es Prgramme die es erlauben eine XML Datei in der entsprechenden XSL Formatierung zu bearbeiten?

Ich hätte gerne die Möglichkeit a.) ohne Spiel im Hintergrund zu skripten und b.) auch mal unterwegs schnell ein paar Ideen aufzuschreiben.
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Exscriptor.
Sehr zu empfehlen.

MfG,
ScRaT
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Welche Ursachen, außer einem "infinite loop", kann ein Einfrieren des kompletten Spiels beim Starten eines Skripts haben?

Ich habe das Skript jetzt zig Mal durchgeschaut und habe wirklich bei jedem Loop ein Wait von mindestens 1 ms. Da dürfte es dann eigentlich sogar egal sein, ob der Loop unendlich ist (was keiner der Loops sein sollte).

Könnte auch ein falsch "kodierter" Code das Problem sein? Ich frage, weil ich vieles mit einem externen Skripteditor (s.o. Exscriptor) schreibe.
Bei diesem gab es schonmal das Problem, dass die Datatypes nicht erkannt, aber richtig angezeigt wurden.
Allerdings kann ich die Möglichkeit, dass der Exscriptor das Problem verursacht fast ausschließen, da ein kleiner Testcode mit dem Exscriptor geschrieben, keine Probleme machte.
Wenn es also der Exscriptor ist, muss es irgendein bestimmter Befehl sein und diesen herauszufinden dürfte schwer werden.

Deswegen habe ich erstmal im Skript selber gesucht, aber wie gesagt, nichts gefunden. Wo könnte der Fehler sein?

MfG,
ScRaT
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

schalte mal zu beginn des Scriptes die Infinite loop detection ein, dann bekommst du normalerweise nen Hinweis darauf wo das Script sich aufhängt... und Poste mal den Code des Scriptes, vielleicht hast du was übersehen ;) es gibt da auch einige Befehle die bei ungünstigen Parametern und unter ungünstigen Umständen nen Freeze verursachen (und ja, es kann auch an einem Fehler im Exscriptor liegen..)
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)
User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz »

ScRaT_GER wrote:Welche Ursachen, außer einem "infinite loop", kann ein Einfrieren des kompletten Spiels beim Starten eines Skripts haben?

Ich habe das Skript jetzt zig Mal durchgeschaut und habe wirklich bei jedem Loop ein Wait von mindestens 1 ms.
Ist das vielleicht ein setup script?

Bei denen erzeugt das Wait keinen interrupt. Ein setup script wird ohne Unterbrechung bis zum Ende durchlaufen.
Waits helfen dort also nicht. Eher im Gegenteil.
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

Gazz wrote:
ScRaT_GER wrote:Welche Ursachen, außer einem "infinite loop", kann ein Einfrieren des kompletten Spiels beim Starten eines Skripts haben?

Ich habe das Skript jetzt zig Mal durchgeschaut und habe wirklich bei jedem Loop ein Wait von mindestens 1 ms.
Ist das vielleicht ein setup script?

Bei denen erzeugt das Wait keinen interrupt. Ein setup script wird ohne Unterbrechung bis zum Ende durchlaufen.
Waits helfen dort also nicht. Eher im Gegenteil.
hat sich das etwa seit Reunion geändert?? ich kann mich da an ein paar experten erinnern, die ne Endlosschleife in nem Setup-script realisiert haben - einen Freeze gab es nicht aber dafür wurden alle Setup-Scripts die danach ausgeführt werden sollten einfach nicht ausgeführt - weil alle setups nacheinander ausgeführt werden und eben dieses niemals beendet wird ^^
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)
User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz »

Naja sie warten schon, aber es gibt eben keinen interrupt, der die Kontrolle einem anderen (setup) script übergibt.
Vielleicht wird darurch "irgendwas" verzögert?

Ich rate auch nur rum bis irgendwer die richtige Frage stellt. =P
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Nein, es ist kein Setup-Skript.

Ich konnte aber den Fehler auf folgenden Code eingrenzen:

209 $size.log = size of array $log.ware.buy
210 while $size.log
211 |dec $size.log =
212 |
213 |$ware = $log.ware.buy[$size.log]
214 |$time = $log.buy[$size.log][1]
215 |$index = get index of $ware in array $log.ware.sell offset=null + 1
216 |$amount.buy = $log.amount.buy[$size.log]
217 |
218 |if $index >= 0
219 ||
220 ||$time.comp = $log.sell[$index][1]
221 ||
222 ||if $time < $time.comp
223 |||
224 |||$amount.sell = $log.amount.sell[$index]
225 |||$amount.dummy = $amount.buy - $amount.sell
226 |||$amount.buy = $amount.sell
227 |||
228 * calculate values for new entry
229 |||$price.buy = $log.buy[$size.log][4]
230 |||$price.sell = $log.sell[$index][4]
231 |||$price.dummy = $price.sell + $price.buy
232 |||$profit = $amount.buy * $price.dummy
233 |||$time = $log.buy[$size.log][1]
234 |||
235 |||append $time to array $log.time
236 |||
237 |||$time = format time: $time
238 |||
239 |||gosub FlightInfo
240 |||
241 * delete used entries
242 |||remove element from array $log.ware.buy at index $size.log
243 |||remove element from array $log.ware.sell at index $index
244 |||remove element from array $log.amount.buy at index $size.log
245 |||remove element from array $log.amount.sell at index $index
246 |||remove element from array $log.buy at index $size.log
247 |||remove element from array $log.sell at index $index
248 |||
249 * append new entries
250 |||if not $amount.dummy == 0
251 ||||$array = $log.buy[$size.log]
252 ||||$array.dummy = clone array $array : index 0 ... 5
253 ||||$array.dummy[5] = $amount.dummy
254 ||||
255 ||||append $array.dummy to array $log.buy
256 ||||append $ware to array $log.ware.buy
257 ||||append $amount.dummy to array $log.amount.buy
258 ||||
259 ||||inc $size.log =
260 |||end
261 |||
262 * create entry
263 |||
264 |||$amount.buy = convert number $amount.buy to string
265 |||$profit = convert number $profit to string
266 |||
267 |||$text = sprintf: pageid=$PageID textid=300, $time, $amount.buy, $ware, $price.dummy, $profit
268 |||add custom menu item to array $log.object: text=$text returnvalue=$subarray
269 |||
270 ||end
271 ||
272 * ---------------------
273 ||
274 |else
275 ||
276 * calculate values for new entry
277 ||
278 ||$time = $log.buy[$size.log][1]
279 ||
280 ||append $time to array $log.time
281 ||
282 ||$time = format time: $time
283 ||$price.buy = $log.buy[$size.log][4]
284 ||$profit = $amount.buy * $price.buy
285 ||
286 ||gosub FlightInfo
287 ||
288 * delete used entries
289 ||remove element from array $log.ware.buy at index $size.log
290 ||remove element from array $log.amount.buy at index $size.log
291 ||remove element from array $log.buy at index $size.log
292 ||
293 * create entry
294 ||
295 ||$amount.buy = convert number $amount.buy to string
296 ||$profit = convert number $profit to string
297 ||
298 ||$text = sprintf: pageid=$PageID textid=301, $time, $amount.buy, $ware, $price.buy, $profit
299 ||add custom menu item to array $log.object: text=$text returnvalue=$subarray
300 ||
301 |end
302 |
303 @ |= wait 10 ms
304 end


Ich habe zum Auschließen einer Endlosschleife das Ende folgendermaßen
verändert:

303 |return null
304 @ |= wait 10 ms
305 end

Also "return null" eingefügt. Dadurch müsste sich ja das Skript automatisch beenden, sobald es diese Stelle erreicht. Stattdessen kommt es wieder zum Freeze.

Vielleicht leide ich an Betriebsblindheit, aber ich kann den Fehler, der zum Freeze führt, einfach nicht finden.

Im Sub "FlightInfo" gibt es übrigens keine Schleifen. Dort wird nur der $subarray erstellt (returnvalue).

Und die Inkrementierung von $size.log in Zeile 259 dürfte auch nicht der Grund sein, es gibt ja schließlich einen Wait.

MfG,
ScRaT
User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike »

ScRaT_GER wrote:211 |dec $size.log =
259 ||||inc $size.log =
Wahrscheinlich geht die Schleife nicht vorran. Ich hab's nur kurz überflogen ...

Gruß
Lucike
Image
User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz »

Funktioniert Z. 215?
null + 1 ergibt Unsinn.

Normalerweise wird dort -1 eingesetzt.
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Danke für die Antworten.

@Lucike

Eigentlich sollte es vorran gehen. Und selbst wenn nicht wäre da ja noch der Wait.

@Gazz
null +1 ist tatsächlich Unsinn, aber mit -1 bekommt man falsche Werte. :?
Zumindest ist es bei mir so, dass die Werte mit "null + 1" immer richtig waren. Man könnte wahrscheinlich auch "0 + 1" nehmen, das Resultat ist das gleiche. Finde ich auch etwas seltsam, da es auch in der MSCI Onlinereferenz anders erklärt wird: <RetVar> = get index of <Value> in array <Var/Array> offset <Var/Number>+1

Habe es auch gerade mit "-1 +1" ausprobiert und es ist trotzdem eingefroren.

MfG,
ScRaT
User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz »

0 (und möglicherweise null) bedeutet, daß nur indizes 1 - max durchsucht werden.
In der Regel will man aber das ganze Array durchsuchen.

ScRaT_GER wrote:Und die Inkrementierung von $size.log in Zeile 259 dürfte auch nicht der Grund sein, es gibt ja schließlich einen Wait.
Laß die Schleife doch einfach in ein Logfile laufen.
Dann siehst du ja ob es da hängt und wie der Index runtergezählt wird.
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Fehler gefunden. -.-
Es war der anscheinend höchst anfällige Befehl <RetVar> convert number <Var/Number> to string, z.B. Zeile 264 und 265.

Hatte ich sie erstmal auskommentiert funktionierte wieder alles. Jetzt muss ich nur noch rausfinden, wieso der diese Zahlen nicht konvertieren möchte.

Danke nochmal.
MfG,
ScRaT
User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz »

ScRaT_GER wrote:Es war der anscheinend höchst anfällige Befehl <RetVar> convert number <Var/Number> to string, z.B. Zeile 264 und 265.
Den braucht man auch nicht unbedingt.

$a = sprint fmt "%s" $a

macht das Selbe.
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

Gazz wrote:
ScRaT_GER wrote:Es war der anscheinend höchst anfällige Befehl <RetVar> convert number <Var/Number> to string, z.B. Zeile 264 und 265.
Den braucht man auch nicht unbedingt.

$a = sprint fmt "%s" $a

macht das Selbe.
nicht nur das, damit bekommt man auch den Inhalt jeder beliebigen anderen Variable als String ;) (also auch null, Schiffe, Stationen, Arrays und auch Raumstaub sofern man ihn irgendwie in ne Var bekommt :D),

und ich hab auch noch nen dritten Ansatz wie man aus ner Nummer nen String macht ^^

$a = $a + ''

(OK, vielleicht nicht die beste methode, aber ich bastel nunmal gern per Editor an der Script.xml rum :D )
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Ah, stimmt, diese Möglichkeit(en) hatte ich ganz vergessen.
0 (und möglicherweise null) bedeutet, daß nur indizes 1 - max durchsucht werden.
In der Regel will man aber das ganze Array durchsuchen.
Hab's gerade es ausprobiert. "null" wird genauso wie "-1" behandelt, ergibt also auch die richtigen Ergebnisse.

MfG,
ScRaT
User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike »

Gazz wrote:
ScRaT_GER wrote:Es war der anscheinend höchst anfällige Befehl <RetVar> convert number <Var/Number> to string, z.B. Zeile 264 und 265.
Den braucht man auch nicht unbedingt.

$a = sprint fmt "%s" $a

macht das Selbe.
Ne, macht nicht das Selbe. Der Befehl fügt auch noch Trennpunkte hinzu. Beispiel: 1.000.000

Ist mir im gezeigten Skript erst nicht aufgefallen. Der Befehl braucht unbedingt einen Zahlenwert. Einfach vorher prüfen. In die Falle bin ich auch schon getappt.

Gruß
Lucike
Image

Return to “X³: Terran Conflict / Albion Prelude - Scripts und Modding”