[Knowledgegbase] Script Modding MD-Mission [was man nicht machen sollte und warum]

Hier ist der ideale Ort um über Scripts und Mods für X³: Reunion zu diskutieren.

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

User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

[Knowledgegbase] Script Modding MD-Mission [was man nicht machen sollte und warum]

Post by SuperVegeta »


Tutorial, was ich besser
nicht machen sollte
im SE or MOD or MissionDirector



Hier zu einem vergleichbaren Topic für Scripting im englischem Forum



Ihr kennt das doch alle, es gibt Tutos für dies und das, wie etwas gemacht wird, was dies steuret usw., aber nirgends steht was man nicht machen darf :!:

In diesem Tutorial sollen alle bekannten dinge aufgelistet werden die, man beim rumbasteln an X3 besser nicht tun sollte.



Die Aufgabe dieses Threads ist die Dokumentation und nicht für Hilfegesuche gedacht,
wer Probleme hat kann sich hier kundig machen, aber wenn das nicht hilft, schreibt euer Problem ins Forum und nicht in diesem Thread.



Es kommen ständig Fragen von Neulingen, Erfahrene auch, die etwas Scripten Modden MDen,
und dabei ihr Spiel zerstört haben, nicht wissen warum oder wie sie wieder in Ordnug bringen können, oder wenigstens beim nächsten mal besser machen.


Das hier soll nun so funktioniern:


Ihr, die Comunity schreibt eure Erfahrungen / Erkentnisse in diesen Thread
und ich werde nach und nach, oder auch ein Moderator das in den ersten Post, 2-10, je nach Kategorie eintragen.
Also in etwa so wie im Unsignierte Erweiterungs Thread.


Ich weiß noch nicht ganz wie das dann aussehen wird aber fangen wir mal an:


Ich bin Scripter mit etwas Modding-anhnung
es gibt viele Scripter oder die es versucht haben :D
man hat gerade ein Script fertig und schreibt noch eben in die Descriptionzeile im Scriptkopf rein was das Script macht,
man will ja das es esthetisch aussieht und nimmt ein passendes Sonderzeichen mit in den Text, speicher ab und beendet X3.
Beim nächsten Laden kommt die Überraschung CTD :arrow: das Script ist kaputt und bringt X3 beim Laden zum Absturz.

Damit man mal eine Libery hat wos Schwarz auf weiß, nagut hier isses anders rum, steht welche Zeichen zum bsp dafür Taboo sind
ist nun dieses Tuto da.


Wie melded Ihr nun so einen Fall:


zuerst gebt ihr an zu welcher Kategorie das gehört Sprachdatei, Script, Modden oder MissionDirector
(ggf kommen noch Kategorien dazu)
dann Was ihr gemacht habt und dann noch was das bewirkt.

Los gehts:

bitte angeben in welche Kategorie es gehören soll
Bugbezeichnung
Eine Art Beispiel
Was passiert
Name des Posters

das alles so in einen Code Schreiben, das soll dann auch so aussehen.

Code: Select all

Kategorie: Script

[color=yellow]T-ID ohne Inhalt:[/color]
[code]<t id="1"></t>
CTD beim laden von SuperVegeta
[/code]


Im letzten Post, Post 10 werde ich reinschreiben bis & einschließlich welchem Beitrag ich aktualisiert habe, da ich ja nicht wie ein Moderator
das im jeweiligen Beitrag selbst reinschreiben kann, wenn er nicht grad von mir selbst ist.


wenn ich dann euern Post eingetragen habe, würde ich euch bitten nochmal euch das anzuschauen ob ich das so richtig gemacht habe,
da ich gelegendlich auch noch etwas hinzufüge.



Für die die sich hier informieren wollen

Gelb ist Bezeichnung dessen was man falsch machen kann

Code: Select all

Im Code steht die Beschreibung / Beispiel dazu
Rot ist was passiert wenn Ihr so einen Fehler macht
Last edited by SuperVegeta on Sun, 3. Feb 08, 17:49, edited 11 times in total.
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Sprachdatei


===========================================
===========================================
Beispiel 1
T-ID ohne Inhalt:

Code: Select all

<t id="1"></t>
CTD beim laden von SuperVegeta

Wenns den sein muß dann so:

Code: Select all

<t id="1">(Leer)</t>
Durch den Klammerinhalt wird das nicht als Fehler angesehen von X-Freak Cartman

===========================================
===========================================
Beispiel 2
Fehlende Codetags in t-Files:

Code: Select all

<t id="1">??????</t><page id="100"></page> usw.
(passiert gerne, wenn man das Notepad verwendet)
CTD bei Laden, Speichern von rubbel4

===========================================
===========================================
Beispiel 3
Zu große Texte:

Code: Select all

$s = read text: page $pageid id: 001

with too much text in that textfile
What will happen: clean shutdown of all systems. I tried this with a textfile only consisting of one entry, which was 132KB - it did not work. I shortened the entry, so that it was only about one monitor full of text (19", size 12). It loaded, and the game crashed when I tried posting it to my player logbook.
CTD oder nicht der ganze Text wird gepostet von SymTec ltd.

===========================================
===========================================
Beispiel 4
Center - Right falsch gesetzt:

Code: Select all

Falsch: 
Das Center AUS ist hier (Zeile 2) in der Zeile die schon nicht mehr mittig liegen soll:

den Gardner los....\n
[/center][u]Julian Gardner:[/u]\n
[center]Klar.........ist Ja auch logisch..............\n

=========================================
Richtig:
In der hier ersten Zeile am Ende wird das Center AUS noch vor dem
Zeilen/Absatz-umbruch (/n) eingesetzt.
Das Center AUS bezieht sich auf die nächstfolgende Zeile von der Zeile aus in der es selbst steht:

den Gardner los....[/center]\n
[u]Julian Gardner:[/u]\n
[center]Klar.........ist Ja auch logisch..............\n
das bewirkt das diese Zeile noch mittig bleibt von SuperVegeta




===========================================
===========================================
Last edited by SuperVegeta on Sun, 2. Mar 08, 11:39, edited 10 times in total.
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Scripting


===========================================
===========================================
Beispiel 1
Starten von Scripten die nicht im Scriptordner enthalten sind:

Code: Select all

@ START [THIS] -> call script 'Script.bsp' :
wobei Script.bsp nicht existiert
CTD von SuperVegeta

===========================================
===========================================
Beispiel 2
Endlosschleifen ohne TimeWait:

Code: Select all

while [TRUE]
end

oder

loop:
goto labal loop
Freeze von SuperVegeta

===========================================
===========================================
Beispiel 3
Globale Scripts nicht darauf überprüfen, ob sie schon mal laufen:

Code: Select all

Hauptsächlich bei setup, init, al.plugin; den Startdatein die dann die eigendliche Plugin aktivieren.
Wenn nun Script-2 gestartet wird ohne auf einen bereits bestehenden Prozess geprüft zu werden, kann es quasi unbegrenzt oft, gleichzeitig aktiviert werden.
Ist Script-2 zusätzlich noch eine Endlosschleife ist die Beschärung
perfekt.

Script-1 (setup, init, al.plugin, startendes Script)
001 $null = null
002 @ START $null -> call script 'Script-2' :
003 return null

Script-2
001   While [TRUE]
002   end
003   return null


Hier ein Lösungsvorschlag:
(die GlobalVar muß natürlich bei jedem anders heißen)

Script-1 (setup, init, al.plugin, startendes Script)
001 $null = null
002 @ START $null -> call script 'Script-2' :
003 return null

Script-2
001   $GV get global variable: name='CHECK'
002   skip if $GV == 1
003      return null
004   set global variable: name='CHECK' value=[TRUE]
Scripts akkumulieren sich und die Performance ist im Keller von rubbel4

===========================================
===========================================
Beispiel 4
Objekte direkt an Befehle binden:

Code: Select all

Wie ist das gemein:
Wenn man ein bestimmtes Objekt im SE direck über die Galaxy/Sektor Map sich aus dem Uni fischt:
001   $Var = Argon Buster (Select Ship / Galaxymap / Sektormap / Ship)
002  = $Var -> Install 5 Triebwerkstung
Script wird nur temporär gespeichert (solang X3 aktiv ist) von rubbel4

===========================================
===========================================
Beispiel 5
Entfernen von Objekten ohne Existesprüfung:

Code: Select all

$Object -> destruct: show no explosion=[TRUE/FALSE]
CTD von SuperVegeta

===========================================
===========================================
Beispiel 6
Selbstzerstörung:

Code: Select all

[PLAYERSHIP]-> destruct: show no explosion=[TRUE/FALSE]
Game Over von SymTec ltd.

===========================================
===========================================
Beispiel 7
Diese Abschschaltund geht nicht:

Code: Select all

skip if [TRUE]
 return null
(wenn das return null die letzte position im Script bildet)
Crash von SymTec ltd.

===========================================
===========================================
Beispiel 8
setup/init/al.plugin mit Endlosschleifen:

Code: Select all

while [TRUE]
end

oder

loop:
goto labal loop
blockieren das laden weiterer setup init AL Scripte, was wiederum zu fehlen von Kommandos usw führt von SuperVegeta

===========================================
===========================================
Beispiel 9
Das Spielerschiff in etwas hinein zaubern:

Code: Select all

[PLAYERSHIP]-> put into environment [Objeck ODER anderer Sektor]
HUD Fehler, Unspielbarkeit von SymTec ltd.;
Fix von X-Freak Cartman 11.02.2008

===========================================
===========================================
Beispiel 10
Falsche Zahlenberechnungen:

Code: Select all

$i == random value from 0 to 5 -1
$k = 2500 / $i

$i kann also 0,1,2,3,4 sein
$k = ist Nicht Lösbar, wenn $i = 0
vareabel, vom CTD bis garnix, kommt darauf an was mit $k gemacht wird von SymTec ltd.

===========================================
===========================================
Beispiel 11
Zuviele if <expression> OR/AND <expression>:

Code: Select all

if <expression> OR <expression> OR <expression> OR <expression> OR <expression> OR <expression> OR <expression> OR <expression>
führt zu Problemen, ggf CTD von SymTec ltd.

===========================================
===========================================
Beispiel 12
Steuerzeichen in Kommentartexten:
005 * Diese Zeichen sind im Comment Text nicht zulaessig:
006 * ><
CTD beim laden von rubbel4

===========================================
===========================================
Beispiel 13
Globale /Lokale Variabeln setzen und auslesen:

Code: Select all

Der name der Variable wird mit einem "String" festgelegt nicht mit einer Variable
so ist es falsch:
001   $result = get global variable: name=$ship.test

-ein String einfach aus der T-File gelesen, auch falsch
001   $ship.test = sprintf: pageid=$P.ID textid=$T.ID, null, null, null, null, null
002   $result = get global variable: name=$ship.test


so ist es richtig:
001   $result = get global variable: name='ship.test'

oder wenn mit Variable dann:
-einen String in eine Variable stecken
001   $ship.test = 'ship.test'
002   $result = get global variable: name=$ship.test
der Name der Var ist sonst immer null oder soger unbekannt von Gazz
String aus T-File, bei LoadGame ggf ReadText.... von SuperVegeta

===========================================
===========================================
Beispiel 14
Schiffe in Stationen/Schiffe stecken OR spawnen:

Code: Select all

26 x {TS} put into environment: {HQ}
26 x {TS} create ship ????; addto (if here a Station or Ship) ........
(mehr als 25 TS an HQ andocken. Die ersten 25 docken an die Klammern, alle anderen intern.
Selbiges gilt für einige GKS, die mehrere Schiffsklassen andocken lassen können, sowie für Werften und ADs)

Es geht darum hierbei vorher die maximalen und momentanen, freien Andockplatze der zu steckenden/spawnenden Schiffs-Classe-Type,
auszulesen und den Kommandoauftrag darauf abzustimmen
Die letzten Schiffe können nicht mehr abdocken von X-Freak Cartman

===========================================
===========================================
Last edited by SuperVegeta on Tue, 15. Jul 08, 15:21, edited 10 times in total.
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Kategorie Modding 1

===========================================
===========================================
Beispiel 1
Types.txt Hinzufügen oder Entfernen von Positionen in Types ohne den Count im Kopf zu verändern:

Code: Select all

48;1;
940;0;0.00583333;0.00466667;0.00466667;3;69036;31015;
..............

Die zweite Zahl in der 1.Zeile, hier die eins entspricht der anzahl der
in der Datei enthaltenen einträge.
Bei Hinzufügen oder Entfernen von Einträgen muß diese Zahl auch dementsprechend erhöht / gesenkt werden
CTD beim laden Oder Types werden ab der Fehlerposition nicht weitergelesen. von laux

===========================================
===========================================
Beispiel 2
Types.txt / Scenes: Hinzufügen oder Entfernen von Positionen:

Code: Select all

- hinzufügen oder entfernen von [;] (Semikolon)
- Alphanumerische Werte in Nummerischen Feldern
- Verwendung von [,] (Komma)
- Hinzufügen von [.] (Punkt) bei reinen Zahlenwerten
CTD beim laden Oder Types werden ab der Fehlerposition nicht weitergelesen. von laux

===========================================
===========================================
Beispiel 3
Fehlen einer Leerzeile in der Typs.txt:

Code: Select all

48;1;
940;0;0.00583333;0.00466667;0.00466667;3;69036;31015;...usw...
2378ß19823509213785ß9;SS_SH_M3Argon;
(Hier muß jetzt eine Leerzeile rein, es darf nicht direck hinterm letzten Eintrag schluß sein: nach dem Letzten Eintrag einfach ein ENTER, das reicht schon)
CTD beim laden von SuperVegeta

===========================================
===========================================
Last edited by SuperVegeta on Mon, 17. Mar 08, 23:03, edited 6 times in total.
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Kategorie Modding 2
Last edited by SuperVegeta on Sat, 26. Jan 08, 18:21, edited 1 time in total.
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Kategorie Mission Director 1
Last edited by SuperVegeta on Sat, 26. Jan 08, 18:21, edited 1 time in total.
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Kategorie Mission Director 2
Last edited by SuperVegeta on Sat, 26. Jan 08, 18:22, edited 1 time in total.
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Reserve Post 1
Last edited by SuperVegeta on Sat, 26. Jan 08, 18:22, edited 1 time in total.
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Reserve Post 2
Last edited by SuperVegeta on Sat, 26. Jan 08, 18:23, edited 1 time in total.
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Aktualisiert bis Beitrag:
Gazz: Di, 29. Jan 08, 18:45
Last edited by SuperVegeta on Thu, 31. Jan 08, 15:52, edited 1 time in total.
rubbel4
Posts: 115
Joined: Sat, 29. Apr 06, 14:06
x3

Post by rubbel4 »

Skripts:

- XML Steuerzeichen in Strings wie "/", "\", "<", ">" => CTD
- Fehlende Codetags in t-Files (passiert gerne, wenn man das Notepad verwendet) => CTD bei Laden, Speichern
- Objekte an Befehle binden
Argon Buster -> Install 5 Triebwerkstung => Skript wird nicht gespeichert
- Globale Skripts nicht darauf überprüfen, ob sie schon mal laufen => Skripts akkumulieren sich und die Performance ist im Keller

Meine, ich hätte so einen Thread schon mal gesehen. Mag aber auch im engl. Forum gewesen sein...

Edit: Hab mich doch nicht getäuscht... => http://forum.egosoft.com/viewtopic.php? ... ght=symtec
User avatar
laux
Posts: 2609
Joined: Sun, 7. Mar 04, 11:39
x3tc

Post by laux »

Kategorie: Modding

Types: Hinzufügen oder Entfernen von Positionen in Types ohne den Count im Kopf zu verändern ......... CTD beim Starten von X von laux

Types, Bodys, Scenen: Syntaxfehler
- hinzufügen oder entfernen von [;]
- Alphanumerische Werte in Nummerischen Feldern
- Verwendung von [,]
- Hinzufügen von [.] bei reinen Zahlenwerten
......... CTD beim Starten von X,
Oder Types werden ab der Fehlerposition nicht weitergelesen.
Bei z.B. Tships fehlen dann alle Schiffe hinter dem eingebauten Fehler
von laux
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

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

Post by UniTrader »

SuperVegeta wrote: Beispiel 7
Diese Abschschaltund geht nicht:

Code: Select all

skip if [TRUE]
 return null
Überspringe wenn TRUE und TRUE ist 1 und 1 ist immer 1 von SymTec ltd.
Das problem hierbei ist eher wenn man damit das return <Var> am Ende eines Scripts überspringt (ja, X3 lässt sowas zu..) denn dann Freezt X3 ein, da es das Script fortsetzen will aber kein weiterer Scriptcode existiert... (dürften nem Freeze durch ne endlosschleife ohne wait entsprechen, da auch kein wait dabei ist aber sicher kann ich es nicht sagen..)
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 »

Code: Select all

001   $result = get global variable: name=$ship.test
statt

Code: Select all

001   $result = get global variable: name="ship.test"
Das wird immer wieder verwechselt. Hab ich bestimmt auch schon mal gemacht. =P

Dabei ist es eine so einfache Regel:

Es wird immer der Wert der Variable an den Befehl übergeben, nie die Variable selbst.
Es gibt dazu keine Ausnahmen.
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
X-Freak Cartman
Posts: 4017
Joined: Mon, 2. Oct 06, 15:08
x3

Post by X-Freak Cartman »

SuperVegeta wrote:Beispiel 1
Starten von Scripten die nicht im Scriptordner enthalten sind:

Code: Select all

@ START [THIS] -> call script 'Script.bsp' :
wobei Script.bsp nicht existiert
CTD von SuperVegeta
Hmm... das hab ich anders in Erinnerung. Bei GAIUS und der FCS MK3 benutze ich dieses Kommando, um zu prüfen, ob benötigten Scripts vorhanden sind - natürlich hab ich das auch selbst geprüft. Der Script wird einfach nicht gestartet (oder hat sich mit 2.5 diesbezüglich was geändert?)

Bsp.9 ([PLAYERSHIP]-> put into environment [Objeck ODER anderer Sektor]) funktioniert, jedoch landet der Spieler in der Mitte Sektors, ohne Schiff und HUD, nur in der Lage, die Sicht zu drehen.

Eine Lösung für Probleme wäre btw auch nett. Bei T-File #1 z.B.:
<t id="5">(Leer)</t> löst das Problem, man bekommt einen leeren String ausgegeben (natürlich ohne CTD, ebenfalls in GAIUS verwendet)

Na dann, noch was Produktives:

Kategorie: Script

Zu viele Schiffe an Station

Code: Select all

26 x {TS} put into environment: {HQ}
(mehr als 25 TS an HQ andocken. Die ersten 25 docken an die Klammern, alle anderen intern.
Selbiges gilt für einige GKS, die mehrere Schiffsklassen andocken lassen können, sowie für Werften und ADs)
Die letzten Schiffe können nicht mehr abdocken von X-Freak Cartman

Viel Spaß noch
- EL
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

ich meine General Commands / Script Calls / Start Call Script:
086 @ START $null -> call script 'x534.inti.02.sv' :

wobei dann das gestartete Script nicht existiert, ich habs erst letztens getestet :!:
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Script / Textfiles

[/center] [/rights] in Texten falsch setzen

Code: Select all

[color=yellow]Center - Right falsch gesetzt:[/color]
[code]
Falsch: 
Das Center AUS ist hier (Zeile 2) in der Zeile die schon nicht mehr mittig liegen soll:

den Gardner los....\n
[/center][u]Julian Gardner:[/u]\n
[center]Klar.........ist Ja auch logisch..............\n

=========================================
Richtig:
In der hier ersten Zeile am Ende wird das Center AUS noch vor dem
Zeilen/Absatz-umbruch (/n) eingesetzt.
Das Center AUS bezieht sich auf die nächstfolgende Zeile von der Zeile aus in der es selbst steht:

den Gardner los....[/center]\n
[u]Julian Gardner:[/u]\n
[center]Klar.........ist Ja auch logisch..............\n
das bewirkt das diese Zeile noch mittig bleibt von SuperVegeta
[/code]
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Aus BSP 13 in Scripting Kategorie

Code: Select all

-einen String in eine Variable stecken, aus der T-File gelesen
001   $ship.test = sprintf: pageid=$P.ID textid=$T.ID, null, null, null, null, null
002   $result = get global variable: name=$ship.test
In dieser Form ist es nicht möglich, Strings für GVs und LVs aus der T-File zu laden, dah zum Zeitpunkt des Stringladens die T-File vielleicht noch nicht geladen wurde, kurz nach / während eines LoadGames.
Dies ist eine Erfahrung aus der PRRF Project und dem AEGIS Project
Somit gilt dies ab sofort als Falsch :!:

Dies ist nur mit größerem Aufwand möglich, einzusehen in den beiden Projecte

Return to “X³: Reunion - Scripts und Modding”