[X3TC] Script für Kanzel schreiben

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

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

Post Reply
Cherup
Posts: 18
Joined: Thu, 26. Jul 12, 19:20

[X3TC] Script für Kanzel schreiben

Post by Cherup » Sat, 3. May 14, 10:51

Hallo,

ich bin relativ neu beim Scripten, auch wenn ich mich schon länger damit beschäftige...
Ich würde jetzt gern ein eigenes Kommando für Geschützkanzeln schreiben, damit die automatisch den nächsten Klein-Asteroiden zerkleinern.
Nun habe ich dazu 2 Fragen:

1.Ist es überhaupt möglich, dass alle Kanzeln unabhängig von einander den für sie nächsten zerkleinerbaren Asteroiden anvisieren und angreifen? In einem "allgemeinen" Script kann ich ja den nächsten Kleinasteroiden auswählen lassen, also müsste dass doch auch für Kanzeln gehen, oder?

2. Wie kann ich ein Script so schreiben, dass es als Kanzelbefehl angesehen wird?

Ich habe schon länger gegoogelt, hab aber einfach nichts dazu gefunden...
Ich mag den mobilen Bergbau sehr gerne, aber auf Dauer nervt das Asteroiden zerkleinern etwas und den Mineraliensprengmeister gibt es ja leider nicht für TC...

Viele Grüße
Cherup

User avatar
ubuntufreakdragon
Posts: 5195
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon » Sat, 3. May 14, 12:20

1 distanz geht glaub ich nur von Schiff zu objekt, aber du kannst trotzdem auf verschiedene ballern lassen, du holst einfach die nächsten 15 Astros und fragst wen das Geschütz am besten treffen kann.
2 jedes Script, das auf Task 1-6 läuft ist ein Kanzelbefehl, und du kannst auch die passenden Komandslots registrieren.
3 http://www.xuniversum.info/index.php?op ... Itemid=248
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist

Cherup
Posts: 18
Joined: Thu, 26. Jul 12, 19:20

Post by Cherup » Sat, 3. May 14, 13:00

Danke für deine Antwort.
Kannst du mir das mit den Tasks genauer erklären?
Den Prospektor habe ich und nutze ihn auch sehr stark, die hälfte meiner fabriken werden damit versorgt :-) Aber der Prospektor sprengt halt nur an seiner stelle und sammelt ein und zerkleinert nicht nur...

VG
Cherup

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Sat, 3. May 14, 15:33

Cherup wrote:... das mit den Tasks ...
... ist relativ einfach:

... wenn du ein kommando-script schreibst und dieses in der kommandokonsole startest, dann startet das script immer auf task ID 0
... turret-scripts sind da ´ne ausnahme, denn pro turret läuft ein separates (wenn auch gleiches) script
... ein schiff kann max. 6 turrets haben
... problematisch wär´ nun, wenn du per autopilot nach argon prime (oder wohin auch immer) fliegst & während dessen ein turret-kommando startest, welches dann auch auf task ID 0 starten würde (das tut es natürlich nicht)
=> damit würde dein schiff stehen bleiben (weil task ID 0 [aka "autopilot"] überschrieben)

... kurz gesagt: jedes dieser turret-kommando-slots in der kommandokonsole stellt eine gewisse task ID dar, bei 1 beginnend und beim letzten turret endend
(angenommen: schiff hat 4 turrets => task 1, 2, 3 & 4 stehen für turret-scripts zur verfügung)

... die task ID wird außerdem als erstes argument an das script automatisch übergeben (ähnlich plugin ID bei AL-scripts)
(turret ID ist meist = task ID, kann aber auch anders gesteuert werden)

*klick-mich*

Cherup wrote:2. Wie kann ich ein Script so schreiben, dass es als Kanzelbefehl angesehen wird?
... es gibt da so 2...3 befehle, die ein script via kommandokonsole aufrufbar machen:
1. global script map: set key $X1 class $X2 script $X3 prio $X4 usw. ... verknüpft ein script an einen kommandoslot (siehe hier: 9XY = turret-command)
2. set script command: $Y1 upgrade: $Y2 {script: $Y3} ... macht das kommando verfügbar, wenn {upgrade} auf schiff vorhanden
// {script} ist für den fall, dass du ein rückgabe-script verwendest, um zu entscheiden, wann genau ein kommando nicht / ausgegraut / verfügbar sein soll
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

Cherup
Posts: 18
Joined: Thu, 26. Jul 12, 19:20

Post by Cherup » Sat, 3. May 14, 16:10

Danke für diese ausführliche antwort.

Wenn ich das jetzt richtig verstehe schreibe ich ein "Start"-script, dass über die Kommandokonsole über die Kanzelbefehls-auswahl gestartet wird. Dieses Startscript bekommt dann automatisch als Argument die Task-ID der entsprechenden Kanzel übergeben?
Und aus dem Startscript heraus wird dann mit
global script map: set key = COMMAND_TYPE_TURRET_22,...
das entsprechende Script auf dem turret gestartet?

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

Post by UniTrader » Sat, 3. May 14, 16:34

anders rum: in einem Setup-Script weist du mit dem
global script map: set key = COMMAND_TYPE_TURRET_22 ....
dem Kommandoslot ein Script zu, welches beim Aufruf von diesem Kommando ausgeführt werden soll (und stellst im selben zuge noch ein, welche Software ggf. nötig ist; das wurde iirc in nem anderen, ähnlich lautenden Befehl erledigt)

wenn das getan ist kannst du dein Script über die Turret-Kommandslots aus der Kommandokonsole heraus starten, und wenn du dies tust bekommst du die turret-id als erstes Argument beim Scriptstart ;)
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 ;)

Cherup
Posts: 18
Joined: Thu, 26. Jul 12, 19:20

Post by Cherup » Sat, 3. May 14, 18:24

Also irgendwie bin ich zu blöd...
ich habe jetzt die beiden folgenden scripts:

setup.turret.AstZerkl:

<Keine Argumente>

global script map: set: key: COMMAND_TYPE_TURRET_22, class="Schiff", race="Player", script="Plugin.turret.AstZerkl", prio=1
return null


plugin.turret.AstZerkl

<Argumente: TurretID, Var/Number, 'Turret ID'>

return null


Wenn ich es richtig verstanden habe, müsste doch jetzt ein neuer Befehl bei den Kanzelbefehlen auftauchen...
Dazu dann noch die Frage, wie ich diesen Befehl benennen kann?

Danke für die Hilfe

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Sat, 3. May 14, 18:37

@ cherry ... *klick-mich* ;) // verbesserungswürdig, aber funktionstüchtig ^^


EDIT: ... mini-fehler entdeckt !! ... zeile 85 & 91 => gosub-check.target anstelle get.target muss da hin ^^ ... außerdem wär´ noch ßn check nötig um sicherzustellen, dass turret equipped
Last edited by JSDD on Tue, 6. May 14, 17:46, edited 1 time in total.
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

Cherup
Posts: 18
Joined: Thu, 26. Jul 12, 19:20

Post by Cherup » Sat, 3. May 14, 21:58

Wow,
vielen vielen Dank für deine Mühe :-)
Ein kleines Problem hab ich noch entdeckt: Die Türme greifen leider auch die sammelbaren Asteroiden ein.
Kann man das noch ändern?

VG
Cherup

User avatar
ubuntufreakdragon
Posts: 5195
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon » Sat, 3. May 14, 23:10

jup indem man abfragt ob sie sammelbar sind und falls ja den nächsten zerschießt.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Sun, 4. May 14, 01:07

Cherup wrote:Die Türme greifen leider auch die sammelbaren Asteroiden ein.

Code: Select all

   Check.Target:
   
   if not $Target -> exists
   |$Target = null
   else if not [THIS] -> is $Target in firing range of turret $Turret.ID
   |$Target = null
   else if $Target -> has collectible rocks
   |$Target = null
   end
   
   endsub
... ;)
// den fehlenden befehl else if $Target -> has collectible rocks findest du unter "general-object-commands"
// achja, das ganze ist immernoch "provisorisch", solltest dich also etwas um die feinheiten kümmern ^^
(z.B. ganz oben im "kopf" des scripts XXXXX => noch das entspr. command anklicken [momentan heißt´s noch "abc" laut t-file])

ps: ... nicht vergessen
JSDD wrote:... zeile 85 & 91 => gosub-check.target anstelle get.target muss da hin ^^ ... außerdem wär´ noch ßn check nötig um sicherzustellen, dass turret equipped
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

Cherup
Posts: 18
Joined: Thu, 26. Jul 12, 19:20

Post by Cherup » Tue, 6. May 14, 13:08

Hi,

Nochmal vielen vielen Dank für deine Mühe :-) die Änderungen habe ich vorgenommen.

Bis auf eine Kleinigkeit funktioniert das Script super. Die Kleinasteroiden, die man sprengen muss um die sammelbaren Asteroiden zu erhalten werden nicht angegriffen. Weißt du woran das liegen könnte?

Edit: ich habe grade festgestellt, dass sie doch zerstört werden, aber nur selten...

VG
Cherup

User avatar
ubuntufreakdragon
Posts: 5195
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon » Tue, 6. May 14, 14:46

Die kleinste und 2. kleinst stufe erscheint manmal erst richtig ingame, wenn man in sie hineinzoomt, vorher haben die auch keine Kollisionsabfrage.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist

Cherup
Posts: 18
Joined: Thu, 26. Jul 12, 19:20

Post by Cherup » Tue, 14. Oct 14, 13:09

Halli Hallo,

ich muss mein altes Thema mal wieder ausgraben. Ich habe wieder angefangen XTC zu zocken und möchte auch das Skript einsetzen (bin großer Mining-Fan ^.^). Jetzt habe ich festgestellt, dass das ja etwas Probleme macht.

Es wird nach wie vor die 2.kleinste Stufe nicht bzw. nur sehr selten angegriffen. Ich habe aus praktischen Gründen das Skript vom MBS zur PBK geändert.

Ich sitze gerade in meiner Hyperion und stehe quasi direkt vor ein paar entsprechenden Kleinasteroiden. Nur ein paar Meter und ich würde sie rammen :-D. Trotzdem werden sie nicht angegriffen.
Weiß jemand eine Lösung dafür? Die Größeren werden alle ohne Probleme zerstört, aber die kleineren eben nicht.

Kann man das Skript dahingehend ändern, dass das Ziel der Turrets automatisch als Spieler-Target gesetzt wird? Das würde vllt helfen, damit man an die entsprechenden Brocken ranfliegen kann...

Und eine letzte Frage noch: Wie kann ich den Namen des Befehls ändern? Ich habe mir die XML-Dateien dazu schon angeschaut, habe den Namen aber nirgends gefunden...

Viele Grüße
Cherup

User avatar
ubuntufreakdragon
Posts: 5195
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon » Tue, 14. Oct 14, 14:27

Hmmm dann klauen wir mal n paar Links aus JSDDs Sig:
http://cycrow.thexuniverse.us/scripts/help/index.html
@Commandname:
http://cycrow.thexuniverse.us/scripts/h ... mmand.html
@Spielerziel:
set player tracking aim to <RefObj> //fly-coms
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Tue, 14. Oct 14, 16:41

... lustige idee, also das mit dem "spieler-ziel setzen", vor allem wenn man bedenkt, dass ein schiff mehrere turrets hat :D
... um deinem script nen namen zu geben:
--> erstelle eine text-file, in der du bei pageID 2008 (name im SE) / 2010 (name) / 2011 (kürzel) / 2022 (beschreibung) einträge für deinen gewählten kommandoslot machst
--> wähle deinen kommandoslot im script in der 3 zeile (unter den argumenten, da wo der scriptname steht) aus
--> lass deine text-file via setup laden

... siehe hierzu die ubuntu-links ;)
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

Post Reply

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