[DISKUSSION] Allgemeine MD-Fragen

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
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader » Sun, 27. Nov 16, 14:09

ah, ums mapping gehts.. wenn ich mich recht erinnere werden stationen entweder mit den Produkten/Ressourcen/Waren ausgestattet, die in der Map direkt definiert sind (hat vorrang, wird bei allen Stationen mit abweichendem Sortiment verwendet) oder die waren werden aus der WareTemplate.xml genommen (falls nicht in der map definiert). Wenn es beides nicht gibt bleibt die Station leer..
Da Piratenbasen iirc immer nen anderes Sortiment haben gibt es kein Template für diese, es muss also in der map definiert werden (ich glaube der GE hatte ne entsprechende funktion, wenn nicht einfach nen Script im SE erstellen, was diese Waren einfügt und die Map speichern)
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
Klaus11
Posts: 859
Joined: Mon, 13. Feb 12, 17:23
x3ap

Post by Klaus11 » Sun, 27. Nov 16, 14:46

Ich danke Dir für die schnelle Antwort.
Inzwischen habe ich schon im Galaxie Editor nachgeschaut. Die Station war wie erwartet leer. Die Waren und Produkte, die ich eingefügt habe sind dann wie erwartet erst nach einem Neustart sichtbar geworden.
Da werden sich die Piloten aber “freuen”. :headbang: :evil:
[ external image ] Dif-tor heh smusma (Lebet lang und in Frieden – vulkanischer Gruß), Cockpitsammlung, Spieler HQ aktivieren, XENON-DAE

User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 11835
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Sun, 27. Nov 16, 16:04

Map Änderungen benötigen immer ein Neustart. Deswegen nutzt mach den MD um ds zu umgehen. ;-)

Man erstellt ne map wo es die Objekte drin sind die man updaten will, und nutzt den load_map Befehl um die Datei zu laden, dabei achten das man Objekte nur HINZUFÜGEN kann, alle bestehende Objekte bleiben zuzüglich da.

MFG

Ketraar

PS. man kann am ende des Shady Business Plots nach gucken wie so was geht.

User avatar
Klaus11
Posts: 859
Joined: Mon, 13. Feb 12, 17:23
x3ap

Post by Klaus11 » Sun, 27. Nov 16, 17:15

Ich danke Dir, für Deinen Einwurf. :)
Das klingt interessant. Dann werde ich mir das im Shady Business Plot mal anschauen. Vielleicht ist da noch was zu retten.

mfG
[ external image ] Dif-tor heh smusma (Lebet lang und in Frieden – vulkanischer Gruß), Cockpitsammlung, Spieler HQ aktivieren, XENON-DAE

User avatar
Aldebaran_Prime
Posts: 1386
Joined: Sat, 20. Feb 10, 17:47
x4

Post by Aldebaran_Prime » Sun, 5. Feb 17, 00:25

ich möchte in einem MD Script das Turret eines (schon existierenden) Frachters dazu bringen, auf feindliche Schiffe zu feuern. Leider bringt die reine Feindeinstellung...

Code: Select all

<set_relation object="TRPRSC101.A2 JonFerco Contractor">
<relation object="{player.ship}" relation="enemy" mutual="1"/>
</set_relation>
... das Turret nicht dazu zu feuern, so lange ich als Player nicht als erstes schieße.

Der Befehl ...

Code: Select all

<set_command object="TRPRSC101.A2 JonFerco Contractor" command="attack" commandobject="{player.ship}"/>
...führt aber leider dazu, dass der Frachter auch sein ursprüngliches Ziel vergisst und dem Spielerschiff hinterherfliegt - das soll es aber nicht.

Wie kann ich nur die Turrets auf "Vernichte Feinde" stellen, ohne das ganze Schiff angreifen zu lassen?[/code]

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

Post by ubuntufreakdragon » Sun, 5. Feb 17, 12:14

Die turret comands sind SE scripte auf den task ids 1-6

Code: Select all

<run_script script="run.turret.killenemies.std" taskid="1">
                                    <scriptvalue datatype="object" datavalue="{object@TRPRSC101.A2 JonFerco Contractor}
                                  </run_script>
dann baust du dir noch ein script, das heist run.turret.killenemies.std
und startet !turret.killenemies.std auf allen turrets des als argument übergebenen schiffes.
so grob sähe das aus, !grob! musst noch etwas arbeit investieren.
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
Klaus11
Posts: 859
Joined: Mon, 13. Feb 12, 17:23
x3ap

Post by Klaus11 » Sun, 5. Feb 17, 17:19

Aldebaran_Prime wrote:ich möchte in einem MD Script das Turret eines (schon existierenden) Frachters dazu bringen, auf feindliche Schiffe zu feuern. Leider bringt die reine Feindeinstellung...

Code: Select all

<set_relation object="TRPRSC101.A2 JonFerco Contractor">
<relation object="{player.ship}" relation="enemy" mutual="1"/>
</set_relation>
... das Turret nicht dazu zu feuern, so lange ich als Player nicht als erstes schieße.

Der Befehl ...

Code: Select all

<set_command object="TRPRSC101.A2 JonFerco Contractor" command="attack" commandobject="{player.ship}"/>
...führt aber leider dazu, dass der Frachter auch sein ursprüngliches Ziel vergisst und dem Spielerschiff hinterherfliegt - das soll es aber nicht.

Wie kann ich nur die Turrets auf "Vernichte Feinde" stellen, ohne das ganze Schiff angreifen zu lassen?[/code]
So ein ähnliches Problem habe ich auch. Ich möchte per Skript ein Turret auf Raketenabwehr einstellen. Es ist mir aber nicht gelungen, dafür einen geeigneten Skriptbefehl zu finden.

Solltest du eine Lösung finden, würde ich sie gerne sehen wollen. :D
[ external image ] Dif-tor heh smusma (Lebet lang und in Frieden – vulkanischer Gruß), Cockpitsammlung, Spieler HQ aktivieren, XENON-DAE

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

Post by ubuntufreakdragon » Mon, 6. Feb 17, 06:55

ds Problem ist, dass es eine weile her ist, das ich mit MD/SE interaktion gebastelt habe.
ziel ist es jedenfalls auf den task ids 1-6 des schiffes die turret scripts zu starten.
da ich nicht weiß wie man im MD rauskriegt wie viele turrets ein schiff hat würde ich ein SE script starten, welches dann die turretcomands startet.
Also brauchen wir ein paar dinge:
- den namen des gewünschten turret scripts Thereshallbewings im SE die additional infos anwerfen passendes komando(per komandozeile) auf nem schiff starten in die info gehen und schauen, was auf task 1-6 am boden des stacks läuft.
- ein script, welches die commands startet:

Code: Select all

args: $ship

$length = 1
while $length <= 6
  $slots = $ship -> get max. number of lasers in turret $length
  if not $slots
    inc $length = 
    continue
  end

  $missile.turret = [FALSE]
  $slots = $ship -> get compatible laser array: turret=$length
  skip if size of array $slots
    $missile.turret = [TRUE]

  $ship ->start task $length with script '!turret.missiledefense.std' and prio 0: arg1=null arg2=null arg3=null arg4=null arg5=null

  inc $length = 
end
- und ein mdstatement was das script startet und hier weiß ich nicht mehr genau wie das run_script ging.
Last edited by ubuntufreakdragon on Mon, 6. Feb 17, 12:51, edited 1 time in total.
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
Aldebaran_Prime
Posts: 1386
Joined: Sat, 20. Feb 10, 17:47
x4

Post by Aldebaran_Prime » Mon, 6. Feb 17, 12:25

Also wenn ich Dein Script in das X-Studio eingebe, wirft es ein paar Fehler. Mit den Boolschen Variablen in ' ' und statt "start task" "Begin task" meckert er nicht mehr.

Code: Select all

$length = 1
while $length <= 6
  $slots = $ship -> get max. number of lasers in turret $length
  if not $slots
    inc $length 
    continue
  end

  $missile.turret = 'FALSE'

  $slots = $ship -> get compatible laser array: turret=$length
  skip if size of array $slots
    $missile.turret = 'TRUE'

  $ship ->begin task $length with script '!turret.missiledefense.std' and priority 0: arg1=null arg2=null arg3=null arg4=null arg5=null

  inc $length 
end

return null
1. Muss der Übergabeparameter des Scripts einen bestimmten Typ bekommen? Standard ist ja "Value", es gibt aber auch den Typ "var/ship"

2. In einem Codea-Script habe ich zudem gefunden, dass arg1=$TurretID gesetzt wurde - müssen wir das auch? also in unserem Fall: $length

Code: Select all

[THIS]-> begin task $TurretID with script '!turret.killenemies.std' and priority 0: arg1=$TurretID arg2=null arg3=null arg4=null arg5=null

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

Post by ubuntufreakdragon » Mon, 6. Feb 17, 12:47

was externe Editoren betrifft hab ich keine Ahnung das ganz stammt aber 1zu1 kopiert aus der Webansicht eines funktionierenden Scripts mit geänderten variablen. In der Befehlübersicht heißt es auch Start und nicht Begin

ob Scripte ein Argument verlangen muss für jedes Script einzeln nachgeschaut werden, !turret.missiledefense.std braucht wohl keines sonst stünde das nicht so in einem getesteten Script.
Der Typ eines Argumentes ist Schall und Rauch und wird nur für die manuelle Ausführung per r drücken benötigt, im normalen betrieb sind das alles Blackbox Variablen.(man kann einer Var/Number locker ein Array of Arrays of ships füttern z.b.)
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
Aldebaran_Prime
Posts: 1386
Joined: Sat, 20. Feb 10, 17:47
x4

Post by Aldebaran_Prime » Mon, 6. Feb 17, 17:38

bei AP ist der MD Befehl etwas aufgebohrt und wie folgt definiert:

Code: Select all

<run_script>  Startet Script  
    task booleanexpression  Starte Aktion als neuen Task?  
    chance expression  Prozentuale (oder gewichtete wenn in <do_any>) Chance das die Aktion ausgeführt wird (wenn nicht wird die Aktion übersprungen)  
    comment string  Kommentar - Zusätzliche Beschreibung ohne Einfluß auf das Spiel  
    script script  Name des Scripts  
    object object  Objekt auf dem das Script laufen soll (läuft Global wenn nicht angegeben) - Name des Objekts  
    taskid expression  Script Task ID (benutzt task 0 wenn nicht angegeben)  

           <scriptargs>  Script Argumente  
                      comment string  Kommentar - Zusätzliche Beschreibung ohne Einfluß auf das Spiel  

                      <scriptvalue>  Script Wert  - Erforderlich  - mehrere  
                                 datatype datatype  Datentyp des Wertes  
                                 datavalue string  Script Wert (nicht benutzt wenn Datentype='array')  
                                 comment string  Kommentar - Zusätzliche Beschreibung ohne Einfluß auf das Spiel  
                                           <scriptarray>  Array daten (nur Datentyp='array')  
                                             <scriptvalue>  Script Wert  - Erforderlich  - mehrere 
 
Wenn das Schiff definitiv nur ein turret hat, könnte ich dann nicht auch direkt aus dem MD heraus auf dem Schiff das Script !turret.killenemies.std starten? etwa so:

Code: Select all

                              <run_script script="!turret.killenemies.std" object = "{object@TRPRSC101.A2 JonFerco Contractor}" taskid="1">
                              	<scriptargs>
                                      <scriptvalue datatype="integer" datavalue="1"/>
                                </scriptargs>   	
                              </run_script>
Das habe ich gerade versucht, man kann sich auch ansehen, dass nun auf dem Schiff das killenemies Script unter taskid 1 ausgeführt wird. Dann stelle ich aber fest, dass auf dem Schiff die PID des Prozesses laufend größer wird, als wenn das Script sich dauernd beendet und wieder neu gestartet wird. Feuern tut es auch nicht... :?

User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 11835
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Mon, 6. Feb 17, 17:44

Scripts im MD ausführen ist ne schlechte Idee.

Am besten den SE Script erstellen und den via MD starten, alles andere führt zu Chaos.

MFG

Ketraar

User avatar
Klaus11
Posts: 859
Joined: Mon, 13. Feb 12, 17:23
x3ap

Post by Klaus11 » Mon, 6. Feb 17, 18:38

Ich habe vom MD ein Skript aufgerufen, das eine Station errichten sollte.
Dieses Skript wiederholte sich auch viele Male. Im Sektor entstanden viele Stationen.
Erst, als ich eine Abfrage an den Anfang stellte, war das Problem gelöst.
Die Abfrage war in etwa: „wenn die Station nicht existiert, dann führe aus.“
[ external image ] Dif-tor heh smusma (Lebet lang und in Frieden – vulkanischer Gruß), Cockpitsammlung, Spieler HQ aktivieren, XENON-DAE

User avatar
Aldebaran_Prime
Posts: 1386
Joined: Sat, 20. Feb 10, 17:47
x4

Post by Aldebaran_Prime » Mon, 6. Feb 17, 19:44

Ketraar wrote:Scripts im MD ausführen ist ne schlechte Idee.

Am besten den SE Script erstellen und den via MD starten, alles andere führt zu Chaos.

MFG

Ketraar
Sorry - zuviel AKÜFI - was meinst Du mit
Am besten den SE Script erstellen...
:?

User avatar
Aldebaran_Prime
Posts: 1386
Joined: Sat, 20. Feb 10, 17:47
x4

Post by Aldebaran_Prime » Mon, 6. Feb 17, 20:51

Es geht doch ohne zusätzliches MSCI Script - ich habe nur den Parameter Task="1" vergessen. Das hat dazu geführt, dass auf dem Schiff das Script dauernd neu gestartet wurde.

SO geht es, aber eben nur, wenn das Schiff nur ein Turret hat:

Code: Select all

                          		  <set_relation object="TRPRSC101.A2 JonFerco Contractor">
                                   <relation object="{player.ship}" relation="enemy" mutual="1"/>
                                 </set_relation>
                                 
                                 <run_script script="!turret.killenemies.std" object = "{object@TRPRSC101.A2 JonFerco Contractor}" task="1" taskid="1">
                                   <scriptargs>
                                      <scriptvalue datatype="integer" datavalue="1"/>
                                   </scriptargs>      
                                 </run_script> 

User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 11835
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Mon, 6. Feb 17, 21:14

Aldebaran_Prime wrote: Sorry - zuviel AKÜFI - was meinst Du mit
Am besten den SE Script erstellen...
:?
Gemeint ist das du den Script im SE erstellst, und zwar komplett, also das es alles tut was gemacht werden musst, und im MD nur den "start" erzeugst.

MFG

Ketraar

User avatar
zorry
Posts: 58
Joined: Tue, 30. Oct 07, 16:57

Post by zorry » Thu, 9. Feb 17, 22:10

Jetzt vielleicht unpassend hier zu fragen. aber gibt es in irgendeiner Ecke eine übersicht über Missionen, die ähnlich wie Scripte zum normalen Spiel (Main-Plot) hinzugefügt werden können...

Wenn man alles storrys durch hat, fehlt mir irgendwie das neue ;)

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

Post by ubuntufreakdragon » Thu, 9. Feb 17, 22:35

@zorry such im Übersichtsthema http://forum.egosoft.com/viewtopic.php?t=216571

@Aldebaran_Prime mein SE script macht alles was es braucht, mir fehlt nur der md start

Code: Select all

script: start.missile.defence args: $ship

$length = 1
while $length <= 6
  $slots = $ship -> get max. number of lasers in turret $length
  if not $slots
    inc $length =
    continue
  end

  $missile.turret = [FALSE]
  $slots = $ship -> get compatible laser array: turret=$length
  skip if size of array $slots
    $missile.turret = [TRUE]

  $ship ->start task $length with script '!turret.missiledefense.std' and prio 0: arg1=null arg2=null arg3=null arg4=null arg5=null

  inc $length =
end
@Ketraar das script kann global oder local ausgeführt werden und erwartet genau ein Argument(das schiff, auf dem die Turrets aktiviert werden sollen), kannst du mir den run_script statement basteln? Edit also etwa so:

Code: Select all

      <run_script script="start.missile.defence">
        <scriptargs>
          <scriptvalue datatype="ship" datavalue="theshipgoeshere"/>
        </scriptargs>
      </run_script>
Läuft das ganze dann global oder auf einem objekt?
Last edited by ubuntufreakdragon on Fri, 10. Feb 17, 00:43, edited 3 times in total.
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
Ketraar
EGOSOFT
EGOSOFT
Posts: 11835
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Thu, 9. Feb 17, 23:12

Code: Select all

<cue name="mycue">
  <condition>
    <!--add conditions to trigger here-->
  </condition>
  <action>
    <do_all>
      <run_script script="name of script goes here">
        <scriptargs>
          <scriptvalue datatype="integer" datavalue=""/>
          <scriptvalue datatype="string" datavalue=""/>
          <scriptvalue datatype="ship" datavalue=""/>
          <scriptvalue datatype="station" datavalue=""/>
          <scriptvalue datatype="object" datavalue=""/>
          <scriptvalue datatype="array" datavalue=""/>
        </scriptargs>
      </run_script>
    </do_all>
  </action>
</cue>
Hier ein Beispiel code mit allen möglichen dadatypes.

MFG

Ketraar

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

Post by JSDD » Fri, 17. Feb 17, 12:43

da gibts nochwas zubeachten:

Code: Select all

<run_script task="1" ... etc pp ...
der task="1" parameter war (bei mir zumindest) nötig, damit man das script "entkoppelt" startet, sonst spinnte der MD rum wenn das zu startende script nicht sofort return-t, ist dann praktisch dasselbe wie:

Code: Select all

START null -> call script: ... etc pp ...
task="1" bewirkt, was im script editor der START prefix bewirkt

ubuntufreakdragon wrote:@Ketraar das script kann global oder local ausgeführt werden und erwartet genau ein Argument(das schiff, auf dem die Turrets aktiviert werden sollen), kannst du mir den run_script statement basteln? Edit also etwa so:

Code: Select all

      <run_script script="start.missile.defence">
        <scriptargs>
          <scriptvalue datatype="ship" datavalue="theshipgoeshere"/>
        </scriptargs>
      </run_script>
Läuft das ganze dann global oder auf einem objekt?
heiß zwar nich' Ketraar, aber was soll's :roll: ( :D )

wie gesagt: task="1" is wichtig, sonst spinnt der md rum (wenn ich mich recht erinner' startete er sonst das script tausendfach hintereinander o.ä. ...)
global startet das script, wenn du niix beim "object" parameter setzt (oder das gesetzte object nicht existiert)

lokal startet das script, wenn du object="{value@...referenz_zum_object...}" setzt, guck dir unser OBS stuff nochmal an
http://forum.dvbtechnics.info/showthread.php?t=31743

Code: Select all

<run_script script="plugin.adv.OBS.equipment" object="{param@OBS Cue}.Temp Ship" task="1" taskid="7777"></run_script>
das startet das script "plugin.adv.OBS.equipment" auf dem schiff" {param@OBS Cue}.Temp Ship" auf task 7777 (unwichtiger / unbenutzter task), & zwar OHNE zu blockieren (d.h. task="1" ist gesetzt)
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”