Fabrikdaten

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

User avatar
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest »

bisschen verwirrt ist vom lesen. wie vorher geschrieben. dec manipuliert den Zahlenwert der nachfolgenden Variablen um -1. inc manipuliert den Zahlenwert der nachfolgenden Variablen um +1. was inc aba ausgeschrieben heist kapla.

ich nutze nur ein Argument für mein Sellingscript, und zwar die Station ($stat) Var/Station. Alles andere soll mein Script ja übernehmen. Wenn du es mit einem Kommando einbindest müssen Objekte auf denen es laufen sollen [THIS] sein. Das Obrige beispiel ist ein globallaufendes beispiel mit einem Argument. Um ohne grossen aufwand auf [THIS] zu kommen ist es gut Möglich die Variable mit [THIS] zu vergleichen das sieht dann so aus:

$stat = [THIS].

ReadText2010-700 [ReadText2011-700]

Ähm 2010 ist die Page Id für Kommandokonsole. Volltext.
-> 2011 ist die Page Id für Kommandokonsole. Abkürzung (oben rechts)
-> 2022 ist die Page Id für die Beschreibung des Befehls (das blaue i; wenn du die "i" / Info taste drückst kommt ein Zusätzlicher Text; verfügbar ist dieser nur wenn Page Id 2022 mit dem ensprechenden Kommandoslot eintrag vorhanden ist)
-> 2008 ist die Page Id für die Internen CMD names wie beispielsweise COMMAND_TYPE_TREAD_20; so kann man den namen gleich intern in die CMD Liste schreiben; Dient so der zuordnung der Freien CMD Slots. Ist vermutlich nur für Scripter und Modder gedacht damit die sehen was bei sich noch alles Frei und benutzbar ist um Kollisionen zu vermeiden.

In der Liste der Ünsignierten Erweiterungen sind die Freien / Belegten CMD Slots gelistet. die erste Zahl (hier 700) steht für eine bestimmte Kommandogruppe:und zwar müsste dieser CMD Slot die Kommando Gruppe Fremd auf deinem Schiff erzeugen (oder "Andere" ka mit 700 arbeite ich nicht). ergeben tut sich die Zahl aus 700 = Kommandokonsolen Gruppe + dem Slotplatz (wäre hier 00)

Um das dann alles sauber Ingame anzeigen zu lassen, brauchst du eine TFile (siehe dazu das Freelancer Topic von X3R gilt auch für TC nur das die TFile Nummer als erstes im namen kommt und dann der Ländercode mit L049 beispielsweise kommt.

Um ein Script automatisch ausführen zu lassen gibts zwei Möglichkeiten. Entweder du arbeitest mit setup.plugin.pluginname oder aber mit einem init.. init wird vor allen anderen Scripten geladen sprich es existiert zu den zeit punkt wo init ausgeführt wird noch gar kein Uni oder andere Objekte. Man kann eine TFile durch ein init Script laden lassen und es funzt auch allerdings, fühl ich mich nicht wohl dabei. Ein setup Script wird erst geladen wenn alle init scripts durch sind. al plugin Scripte werden soweit ich weis zwischen init und setup Scripten geladen und weiterverarbeitet. Um einen Text zu laden einfach den befehl load text=<Var/Nummer> (hier den TFile namen angeben also die 4 stellige Zahl) speichern und verlassen. die CMD Scripte sind idR auch setup scripte deshalb bietet es sich an es den load text befehl gleich als erstes in diesem CMD Script zu platzieren alles andere übernimmt die Engien. In stups keine endlosschleifen einbauen weil sonst andere setupscripte nicht ausgeführt werden :!: unnötige waits vermeiden (es ist aber nicht immer möglich)
Alewx
Posts: 303
Joined: Sun, 23. Mar 03, 11:09
x4

Post by Alewx »

Ok die Kommando einbindung funktioniert ganz wunderbar und ohne irgendwelche probleme auch die Kommando ReadText gehen ganz sauber von der Hand dank deiner anleitung, da bin ich sehr dankbar für deine Hilfe nun ist es schon spät und meine sehschärfe nimmt kontinuierlich ab um die zeit, deswegen gehts für mich morgen im laufe des Tages weiter.

Da wäre meine Frage dann wie kann ich denn das Ziel vom Command und das Command selbst in die SchiffsInfo bringen, die ich über die tasten i und dann u erreiche?

Aber erstmal gute Nacht Jungs


Ach ja dec und inc könnte von increase und decrease kommen aber dann wären sie vertauscht.


Ok das Kommando hab ich heute morgen geschafft einzutragen nun fehlt mir nur noch das Ziel des Schiffes in die Info einzutragen.
So Set Destination hab ich auch gefunden. kann man auch unter kommandos die Ware eintragen mit der gehandelt werden soll?

Hab eben noch festgestellt das die Stationen die Kommandos nicht annehmen, commandoslot ist ein stations slot alle texte sind lesbar und die script variable ist [THIS]. wenn ich das script manuell aufrufe übern script editor funktioniert alles tadelos nur die kommandos für die stationen nicht.
User avatar
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest »

Alewx wrote:Ok die Kommando einbindung funktioniert ganz wunderbar und ohne irgendwelche probleme auch die Kommando ReadText gehen ganz sauber von der Hand dank deiner anleitung, da bin ich sehr dankbar für deine Hilfe nun ist es schon spät und meine sehschärfe nimmt kontinuierlich ab um die zeit, deswegen gehts für mich morgen im laufe des Tages weiter.

Da wäre meine Frage dann wie kann ich denn das Ziel vom Command und das Command selbst in die SchiffsInfo bringen, die ich über die tasten i und dann u erreiche?

Aber erstmal gute Nacht Jungs


Ach ja dec und inc könnte von increase und decrease kommen aber dann wären sie vertauscht.


Ok das Kommando hab ich heute morgen geschafft einzutragen nun fehlt mir nur noch das Ziel des Schiffes in die Info einzutragen.
So Set Destination hab ich auch gefunden. kann man auch unter kommandos die Ware eintragen mit der gehandelt werden soll?

Hab eben noch festgestellt das die Stationen die Kommandos nicht annehmen, commandoslot ist ein stations slot alle texte sind lesbar und die script variable ist [THIS]. wenn ich das script manuell aufrufe übern script editor funktioniert alles tadelos nur die kommandos für die stationen nicht.
<RefObj> set command target2: <Value> bzw
<RefObj> set command target: <Value>

gibt´s auch noch allerdings hab ichs immer mit set script command gemacht da meine tread scripte immer in der Entwicklung eingestellt wurden. entweder weils das schon gab und ich nicht gewusst habe das es das schon gab oder weil ich mir den luxus selbst nicht "gegönnt" hab. wenn´s in der cmd info steht (erste zeile) weis ich was der TS macht, eigentlich weis ich das auch immer so.

mit den waren. nur wenn du es mit einem / zwei / beliebig Argumenten machst. für jedes Argument brauchst du dann entweder 2 arryblöcke oder aber due nimmst var / ware bzw var / all wares

wegen dem script: dazu brauch ich nen Scriptcode um etwas analysieren zu können.
Alewx
Posts: 303
Joined: Sun, 23. Mar 03, 11:09
x4

Post by Alewx »

So das ist die spätere Setup.cmd script.

Code: Select all

Arguments
Source Text

001   load text: id=9900
002   set script command upgrade: command=COMMAND_TYPE_TRADE_40_Versorgung  upgrade=[TRUE]
003   global script map: set: key=COMMAND_TYPE_TRADE_40_Versorgung, class=TS, race=Player, script='Versorgung', prio=500
004   
005   set script command upgrade: command=COMMAND_TYPE_TRADE_41_Verkauf  upgrade=[TRUE]
006   global script map: set: key=COMMAND_TYPE_TRADE_41_Verkauf, class=TS, race=Player, script='Verkauf', prio=500
007   
008   set script command upgrade: command=COMMAND_TYPE_STATION_19_PreisAnpassung  upgrade=[TRUE]
009   global script map: set: key=COMMAND_TYPE_STATION_19_PreisAnpassung, class=Station, race=Player, script='PreiseAnpassen', prio=500
010   
011   set script command upgrade: command=COMMAND_TYPE_STATION_20  upgrade=[TRUE]
012   global script map: set: key=COMMAND_TYPE_STATION_20, class=Station, race=Player, script='StationsZwischenProdukte', prio=500
013   return null
Und das ist das Script für eine Station, leider wird es als Kommando ignoriert als Script aber brav befolgt. sollte dir schon recht bekannt vorkommen :D .

Code: Select all

Arguments
1: Prozent , Nummer , 'Prozent eingeben' 
Source Text

001   $ZielStation = [THIS]
002   $ZielStation -> set command: COMMAND_TYPE_STATION_20_ZwischenProduktHandel
003   while [TRUE]
004 @ |= wait 30000 ms
005   |
006   |$n = 0
007   |
008   |$WarenArray = $ZielStation -> get tradeable ware array from station
009   |$WarenSize =  size of array $WarenArray
010   |$s = $WarenSize
011   |
012   |while $WarenSize
013   ||dec $WarenSize = 
014   ||$Ware = $WarenArray[$WarenSize]
015   ||$Menge = $ZielStation -> get ware storage percentage: ware=$Ware
016   ||
017   ||skip if $Menge >= $Prozent
018   |||inc $n = 
019   |end
020   |
021   |
022   |if $n == $s
023   ||$ZielStation -> set intermediates sellable to [TRUE]
024   |else
025   ||$ZielStation -> set intermediates sellable to [FALSE]
026   ||
027   |end
028   end
029   return null
User avatar
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest »

ich bastel morgen mal meins um bzw teste es mal wie es reagiert. so direkt kann ich obwohl einen versuch kannst du machen. Tausch mal die Argumente in Zeile 001 vielleicht hat ich n Dreher drinn und habs nicht gemerkt.
Alewx
Posts: 303
Joined: Sun, 23. Mar 03, 11:09
x4

Post by Alewx »

Nee neee da hast du nichts verkehrt in Zeile 001 als erstes gibt man die RetunVariable und dann die expression an. ich habs aber auch mit meinem anderen Script für Stationen.

Code: Select all

Arguments
Source Text

001   $Homebase = [THIS] -> get homebase
002   $Homebase -> set command: COMMAND_TYPE_STATION_19_PreisAnpassung
003   $ProdukteArray = $Homebase -> get products
004   $Ware = $ZielStation[0]
005   $NormalPreis = $Homebase -> get price of ware $Ware
006   $MaxPreis = $NormalPreis + ( $NormalPreis * 10 / 100 )
007   $MinPreis = $NormalPreis - ( $NormalPreis * 10 / 100 )
008   
009   while [TRUE]
010 @ |= wait 5000 ms
011   |$WarenMenge = $Homebase -> get ware storage percentage: ware=$Ware
012   |if $WarenMenge <= 33
013   ||$Homebase -> set price of ware $Ware to $MaxPreis Cr
014   |end
015   |
016   |if $WarenMenge < 66 AND $WarenMenge > 33
017   ||$Homebase -> set price of ware $Ware to $NormalPreis Cr
018   |end
019   |
020   |if $WarenMenge >= 66
021   ||$Homebase -> set price of ware $Ware to $MinPreis Cr
022   |end
023   end
024   return null
Der Script hat als Kommando das selbe Problem.

Bei den Transportern geht es ohne Probleme mit den Kommandos die machen alles richtig geben alles an und aus und behalten die Kommandos auch solange drin bis ich ein anderes erteil. Bei den Stationskommandos gilt ja sie bleiben am Laufen bis ihr Slot durch ein anderes Kommando gefüllt wird. hmm bin mal wieder überfragt.
User avatar
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest »

ok wenn ich dich richtig verstanden habe shcliest du dein Schluss "Script läuft nicht" daraus das das Kommando im Stationsmenü nach Aktivierung verschwindet? Wenn ja dann bist du im Irrtum, es wird nicht angezeigt, script läuft aber auf dem Slot im HG weiter:!: solange bis du den Kommandoslotplatz auf dem das script gestartet wurde überschrieben wird. Entweder mit "kein" oder mit einem anderen Befehl

Willst du das Kommando im Kommandomenü der Station stehen lassen, musst du den set script command= befehl in die Endlosschleife packen.

Bei den Schiffen ist das anders. Dort musst du es in die Erste Zeile bzw ausserhalb einer Endlosschleife Platzieren da die X Engien diese nicht ständig "überschreibt". Vielleicht n Bug den nur niemand so empfand (auch in x³R ist das so) frag mich aber nicht wieso.

im SE Menü (wo MSCI steht) kibts nach dem Srcipt debugg modus noch eine weiter <ja/Nein> option. Standard ist hier nein. Setz diese mal auf Ja scrolle im infomenü des Objekt ganz nach unten bis zu den Scripttask. so kannst du feststellen Script läuft / nicht.
Alewx
Posts: 303
Joined: Sun, 23. Mar 03, 11:09
x4

Post by Alewx »

Hab das set_command einfach mal in die While Schleife vom Preis Script gepackt ohne ergebnis und der Debugger gibt mir auch nichts zurück. Es läuft nicht und es wird auch nicht angezeigt das was läuft. Oder meinst du das müsste eine While Schleife geben im Commando Script?

Code: Select all

Arguments
1: ZielStation , Var/Station and Product , 'Station und Produkt wählen' 
Source Text

001   $Ware = $ZielStation[0]
002   $Station = $ZielStation[1]
003   $NormalPreis = $Station -> get price of ware $Ware
004   $MaxPreis = $NormalPreis + ( $NormalPreis * 10 / 100 )
005   $MinPreis = $NormalPreis - ( $NormalPreis * 10 / 100 )
006   
007   while [TRUE]
008 @ |= wait 5000 ms
009   |$WarenMenge = $Station -> get ware storage percentage: ware=$Ware
010   |if $WarenMenge <= 33
011   ||$Station -> set price of ware $Ware to $MaxPreis Cr
012   |end
013   |
014   |if $WarenMenge < 66 AND $WarenMenge > 33
015   ||$Station -> set price of ware $Ware to $NormalPreis Cr
016   |end
017   |
018   |if $WarenMenge >= 66
019   ||$Station -> set price of ware $Ware to $MinPreis Cr
020   |end
021   end
022   return null
Ok das Script für die Preisanpassung läuft jetzt wird aber in den Kommandoslots der Station nicht angezeigt was aber noch wünschenswert wäre. Hab das Script nur geringfügig geändert.

Code: Select all

Arguments
1: Prozent , Nummer , 'Prozentangabe für Preisänderung' 
Source Text

001   $Homebase = [THIS]
002   $ProdukteArray = $Homebase -> get products
003   $Ware = $ProdukteArray[0]
004   $NormalPreis = $Homebase -> get price of ware $Ware
005   $MaxPreis = $NormalPreis + ( $NormalPreis * $Prozent / 100 )
006   $MinPreis = $NormalPreis - ( $NormalPreis * $Prozent / 100 )
007   $Homebase -> set command: COMMAND_TYPE_STATION_19_PreisAnpassung
008   
009   while [TRUE]
010   |$Homebase -> set command: COMMAND_TYPE_STATION_19_PreisAnpassung
011 @ |= wait 30000 ms
012   |$Homebase -> set command: COMMAND_TYPE_STATION_19_PreisAnpassung
013   |$WarenMenge = $Homebase -> get ware storage percentage: ware=$Ware
014   |if $WarenMenge <= 33
015   ||$Homebase -> set price of ware $Ware to $MaxPreis Cr
016   |end
017   |
018   |if $WarenMenge < 66 AND $WarenMenge > 33
019   ||$Homebase -> set price of ware $Ware to $NormalPreis Cr
020   |end
021   |
022   |if $WarenMenge >= 66
023   ||$Homebase -> set price of ware $Ware to $MinPreis Cr
024   |end
025   end
026   return null
Last Edit:

Ich hab die Lösung gefunden das Script muss im SE unter der Description als Commandname den Commandoslot direkt eingesetzt haben dann bleibt es auch stehen wenn es aktiviert wurde.

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