Befehle für Geschützkanzel über Script

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
chms
Posts: 165
Joined: Thu, 21. Oct 04, 19:17
x4

Befehle für Geschützkanzel über Script

Post by chms » Sat, 7. Aug 10, 21:43

Hallole zusammen.

Ich habe mir ein Script gebastelt, mit dem ich meine Schiffe vollautomatisch ausrüsten lassen kann - gegen entsprechende Credits natürlich.

Nun möchte ich den Geschützkanzeln dieser Schiffen die Raketenabwehr als Standard befehlen.

Der Code

Code: Select all

if $ship -> exists
  $turrets = $ship -> get number of turrets
  while $turrets > 0
    dec $turrets =
    START $ship -> call script !turret.missiledefense.adv : turret id=$turrets
  end
end
scheint erfolglos zu sein:
In der Kommando-Konsole werden für die Geschützkanzeln keine Befehle angezeigt, aber das Schiff hat das Kommando "Geschützkanzel: Raketenabwehr".
Auch mit anderen !turret....-Scripts erhalte ich das entsprechende Ergebnis.

Was mache ich falsch?

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

Post by Gazz » Sat, 7. Aug 10, 22:13

Heh. Falscher Startbefehl.

Wie weiß denn dieser, auf welchem Task das Script gestartet werden soll?
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.

chms
Posts: 165
Joined: Thu, 21. Oct 04, 19:17
x4

Post by chms » Sat, 7. Aug 10, 22:54

"Task" könnte die entscheidende Hilfe gewesen sein, habe mich damit nie beschäftigt - weil kein Plan :D

Also dann wie folgt?

Code: Select all

if $ship -> exists
  $turrets = $ship -> get number of turrets
  while $turrets > 0
    dec $turrets =
    $task = -1
    $freetask = [TRUE]
    while not $freetask == [FALSE]
      inc $task =
      $freetask = $ship -> is task $task in use
      skip if $freetask != [FALSE]
        $ship -> start task $task with script !turret.missiledefense.adv and prio 0 : arg1=$turrets arg2=null arg3=null arg4=null arg5=null
    end
  end
end 
Wenn ja: es gibt ja in der Kommandokonsole die Option "für alle Kanzeln".
Wäre dann das Argument -1 statt die einzelnen Turrets? Oder die Anzahl der Turrets?
also z.B.:

Code: Select all

if $ship -> exists
  $task = -1
  $freetask = [TRUE]
  while not $freetask == [FALSE]
      inc $task =
      $freetask = $ship -> is task $task in use
      skip if $freetask != [FALSE]
        $ship -> start task $task with script !turret.missiledefense.adv and prio 0 : arg1=-1 arg2=null arg3=null arg4=null arg5=null
  end
end 
oder

Code: Select all

if $ship -> exists
  $turrets = $ship -> get number of turrets
  $task = -1
  $freetask = [TRUE]
  while not $freetask == [FALSE]
      inc $task =
      $freetask = $ship -> is task $task in use
      skip if $freetask != [FALSE]
        $ship -> start task $task with script !turret.missiledefense.adv and prio 0 : arg1=$turrets arg2=null arg3=null arg4=null arg5=null
  end
end 
Bei der Gelegenheit: Welche prio ist sinnvoll?
Und gibt es eine Maximal-Nummer für die Task, damit das script nicht evtl. in einer Endlosschleife landet?

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

Post by Gazz » Sat, 7. Aug 10, 23:40

Turret tasks sind immer und ausschließlich 1-6.

Priorität wird eigentlich nur für Task 0 benutzt, da der Hauptnutzen in SignalScripts besteht.
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.

chms
Posts: 165
Joined: Thu, 21. Oct 04, 19:17
x4

Post by chms » Sat, 7. Aug 10, 23:50

Gazz wrote:Turret tasks sind immer und ausschließlich 1-6.
Das war der fehlende Hinweis :)

mit

Code: Select all

016   if $ship -> exists
017   |$turrets = $ship -> get number of turrets
018   |while $turrets > 0
019   ||dec $turrets = 
020   ||$task = $turrets + 1
021   ||$ship -> start task $task with script '!turret.missiledefense.adv' and prio 0: arg1=$turrets arg2=null arg3=null arg4=null arg5=null
022   |end
023   end
klappt's.

Herzlichen Dank.

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

Post by Gazz » Sat, 7. Aug 10, 23:55

018 |while $turrets > 0

muß lauten

018 |while $turrets > 1

Zeile 20 löschen.
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.

chms
Posts: 165
Joined: Thu, 21. Oct 04, 19:17
x4

Post by chms » Sun, 8. Aug 10, 00:26

Hier liegst Du, glaube ich, falsch, denn bei nur einem Turret käme nach den von Dir vorgeschlagenen Änderungen folgendes raus:

Code: Select all

017   |$turrets = $ship -> get number of turrets 
---> $turrets = 1
018   |while $turrets > 1

Hier würde NICHTS ausgeführt.
Denn bei "$turrets = 1" ergibt die Abfrage "while $turrets > 1" ein "False"

022   |end

bei mir:

Code: Select all

017   |$turrets = $ship -> get number of turrets 
---> $turrets = 1
018   |while $turrets > 0
019   ||dec $turrets = 
---> $turrets = 0
020   ||$task = $turrets + 1 
---> $task = 1
021   ||$ship -> start task $task with script '!turret.missiledefense.adv' and prio 0: arg1=$turrets arg2=null arg3=null arg4=null arg5=null
--->   ||$ship -> start task 1 with script '!turret.missiledefense.adv' and prio 0: arg1=0 arg2=null arg3=null arg4=null arg5=null
022   |end
Und Turrets, Slots etc. werden doch immer von 0 bis (Anzahl - 1) gezählt !?
Also der 1. hat die Nummer 0, der 6. die Nummer 5

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

Post by Gazz » Sun, 8. Aug 10, 02:52

Ja nee, is klar.

Gib erstmal die Änderungen ein. Wenns nicht funktioniert kannst du mir immer noch erklären, wie man ein turret script startet.
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.

chms
Posts: 165
Joined: Thu, 21. Oct 04, 19:17
x4

Post by chms » Sun, 8. Aug 10, 04:47

Nachdem meine Version funktioniert hat, habe ich mir mal die Turret-Anzahl verschiedener Schiffe ausgeben lassen.
Die Colossus hat z.B. 6 Geschützkanzeln, gibt aber mit "get number of turrets" 7 aus.
Die Demeter hat einen, "gnot" gibt aber 2 aus.
Folglich war einer der 7 Durchläufe überflüssig.
Sowas muss einem ja gesagt werden ;)

Daraufhin Deine Änderungen ausprobiert.
Da hast Du allerdings eine Kleinigkeit übersehen oder wegen Offensichtlichkeit weggelassen:
Wenn ich die Zeile "$task = $turrets + 1" lösche, geht - natürlich - gar nichts.
Ich muss also in der folgenden Zeile "$ship -> start task $task with script '!turret.missiledefense.adv' and prio 0: arg1=$turrets arg2=null arg3=null arg4=null arg5=null " die Variable "$task" durch "$turrets" ersetzen.

Nochmals herzlichen Dank.

Post Reply

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