Script verändern aber wie?

Hier können Diskussionen rund ums scripten und modden zu X3 Terran Conflict und Albion Prelude geführt werden.

Moderator: Moderatoren

Antworten
Lilith
Senior-Scharfschütze
Beiträge: 418
Registriert: Sa 30 Jun, 2012 3:42 pm
Lieblings X-Titel: AP

Script verändern aber wie?

Beitrag von Lilith »

Hallo Ihr,

ich habe hier ein Script Namens ej.findwares. Dieses scannt das gesammte bekannte Universum nach herrenlosen Gütern ab, gibt davon eine Liste aus und setzt gleichzeitig Erweiterte Satelliten an die Fundstellen.

Nun möchte ich dieses Script (als Kopie) derart verändern, dass es die Suche nur im aktuellen Sektor macht. Hintergrund ist der, dass ich mittels UFS in Unbekannte Sektoren springe und in diesen Tuningkisten suche. Bei der Standardversion des Scriptes funktioniert das zwar auch, aber da das gesamte Universum durchsucht wird, kommt es zu einer Flut von Erweiterten Satelliten im Universum. Zumal im Script evtl. noch ein kleiner Bug ist, der bei mir bei jeder Suche einen Astronauten im Sektor Gunners Kreuzzug auf Position 0,0,0 findet. Der aber gar nicht dort vorhanden ist.
Benutzeravatar
Taktkonform
Feldwebel
Beiträge: 3119
Registriert: Di 24 Jun, 2008 4:28 pm
Lieblings X-Titel:
Wohnort: Saxonia

Re: Script verändern aber wie?

Beitrag von Taktkonform »

<ret/var>= <refobj> get position as array als Grundlage benutzen. <refobj> wäre hierbei die Konstante [PLAYERSHIP] oder die Anweisung <get player ship>.

Der Array selbst behinhaltet dann X,Y und Z-Achsenwert sowie den Sektor, in dem sich das Spielerschiff gerade befindet.

Ausgelesen, also die einzelnen Werte brauchbar gemacht, würde das dann so aussehen:

Code: Alles auswählen

001   Sector.Pos = [PLAYERSHIP] get positon as array
002   $X = $Sector.Pos[0]
003   $Y = $Sector.Pos[1]
004   $Z = $Sector.Pos[2]
005   $Sector = $Sector.Pos[3]
[...]
Nun kannst Du die Positionsdaten in jeder anderen Anweisung (z.B create ship (Satellit)) benutzen, um genau in diesem einen Sektor einen Satelliten zu setzen, und den Rest des Scriptes auszuführen.

noch nen netten Tag
Taktkonform
Komm wir essen Oma - Satzzeichen können Leben retten!
Lilith
Senior-Scharfschütze
Beiträge: 418
Registriert: Sa 30 Jun, 2012 3:42 pm
Lieblings X-Titel: AP

Re: Script verändern aber wie?

Beitrag von Lilith »

Liebe Taktfonform,

ich muss mal wieder zugeben, dass ich absolut keine Ahnung vom Scripten habe. Und was dazu kommt ich komme auch überhaupt nicht mit diesem komischen Scripteditor von X3 zurecht. Ich versteh also (leider) nur Bahnhof :cry:
Benutzeravatar
Taktkonform
Feldwebel
Beiträge: 3119
Registriert: Di 24 Jun, 2008 4:28 pm
Lieblings X-Titel:
Wohnort: Saxonia

Re: Script verändern aber wie?

Beitrag von Taktkonform »

Na Du bist ein lustiger Zeitgenosse!
Willst ein bestehendes Script verändern, und weißt nicht wie, selbst wenn man einen konkreten Vorschlag macht? :ooh:

Ich kenne das Script nicht, dass Du da verändern willst, aber mein Ansatz geht einfach davon aus, das Spielerschiff als Referenzpunkt zu verwenden, da es ja eh in den USFA-Sektor muss.
Beim Start meines Scriptbeispieles würde die Position des Spielerschiffes in einem Array abgelegt. Diesen Array kann man auslesen und die darin enthaltenen Positionsdaten dann weiterverwenden, z.b um einen Satelliten zu erstellen oder eine fliegende Ware zu finden.

Poste doch einfach mal den Quelltext des jetzigen Scripts hier...
...ganz einfach per RM auf das Script-->"Öffnen mit..."--->Firefox (oder Deinem Browser). Der Rest ist einfaches Copy&Paste.

Schliess den so erstelllten Quelltext bitte in ein, damit es nicht alle Dimensionen sprengt, wenn es dann doch etwas länger sein sollte.

noch nen netten Tag
Taktkonform
Komm wir essen Oma - Satzzeichen können Leben retten!
Lilith
Senior-Scharfschütze
Beiträge: 418
Registriert: Sa 30 Jun, 2012 3:42 pm
Lieblings X-Titel: AP

Re: Script verändern aber wie?

Beitrag von Lilith »

Ok, Du hast es so gewollt. Hier ist das, was mir der Fuchs ausspuckt:

Code: Alles auswählen

ej.findwares
1.1
50
Reports the location of all ware containers and puts an Adv. Sat on them.

  $menu = array alloc: size=0
  add non selectable menu item: $menu, text='--CONTAINERS--'
  
  $X = 0
  $Y = 0
  while $X < 30 AND $Y < 30
    
    $Sector = get sector from universe index: x=$X, y=$Y
    if $Sector -> exists
      
      $Temp = find flying ware: sector=$Sector maintype=null subtype=null flags=[Find.Multiple] refobj=null maxdist=null maxnum=99, refpos=null
      $count = size of array $Temp
      while $count
        dec $count = 
        $obj = $Temp[$count]
        if $obj != null
          $num = $obj -> get flying ware count
          $pos = $obj -> get position as array
          $Xpos = $pos[0]
          $Ypos = $pos[1]
          $Zpos = $pos[2]
          $pos = sprintf: fmt='X=%s Y=%s Z=%s', $Xpos, $Ypos, $Zpos, null, null
          $text = sprintf: fmt='%s %s in %s (at %s)', $num, $obj, $Sector, $pos, null
          add non selectable menu item: $menu, text=$text
          $sat = create ship: type=Advanced Satellite owner=Player addto=$Sector x=$Xpos y=$Ypos z=$Zpos
          $text = sprintf: fmt='%s %s', $num, $obj, null, null, null
          $sat ->set name to $text
        end
      end
    end
    
    if $X == 29
      $X = 0
      inc $Y = 
    else
      inc $X = 
    end
  end
  
  add non selectable menu item: $menu, text='--SHIPS--'
  
  
  $shipar =  get ship array: of race Neutral Race class/type=null
  $count = size of array $shipar
  while $count
    dec $count = 
    $obj = $shipar[$count]
    if not $obj -> is of type Navigational Beacon
      $Sector = $obj -> get sector
      $pos = $obj -> get position as array
      $Xpos = $pos[0]
      $Ypos = $pos[1]
      $Zpos = $pos[2]
      $pos = sprintf: fmt='X=%s Y=%s Z=%s', $Xpos, $Ypos, $Zpos, null, null
      $text = sprintf: fmt='%s in %s (at %s)', $obj, $Sector, $pos, null, null
      add non selectable menu item: $menu, text=$text
      $sat = create ship: type=Advanced Satellite owner=Player addto=$Sector x=$Xpos y=$Ypos z=$Zpos
      $text = sprintf: fmt='%s', $obj, null, null, null, null
      $sat ->set name to $text
      
    end
  end
  
  $TheMenu = open custom info menu: title='Find Containers And Ships' description='All Floating Ware Containers And Abandoned Ships In Your Current Universe' option array=$menu maxoptions=null
  
  return null

$menu = array alloc: size=0
add non selectable menu item: $menu, text='--CONTAINERS--'

$X = 0
$Y = 0
while $X < 30 AND $Y < 30


$Sector = get sector from universe index: x=$X, y=$Y
if $Sector -> exists

$Temp = find flying ware: sector=$Sector maintype=null subtype=null flags=[Find.Multiple] refobj=null maxdist=null maxnum=99, refpos=null
$count = size of array $Temp
while $count
dec $count = 
$obj = $Temp[$count]
if $obj != null
$num = $obj -> get flying ware count
$pos = $obj -> get position as array
$Xpos = $pos[0]
$Ypos = $pos[1]
$Zpos = $pos[2]
$pos = sprintf: fmt='X=%s Y=%s Z=%s', $Xpos, $Ypos, $Zpos, null, null
$text = sprintf: fmt='%s %s in %s (at %s)', $num, $obj, $Sector, $pos, null
add non selectable menu item: $menu, text=$text
$sat = create ship: type=Advanced Satellite owner=Player addto=$Sector x=$Xpos y=$Ypos z=$Zpos
$text = sprintf: fmt='%s %s', $num, $obj, null, null, null
$sat ->set name to $text
end
end
end

if $X == 29
$X = 0
inc $Y = 
else
inc $X = 
end
end

add non selectable menu item: $menu, text='--SHIPS--'


$shipar =  get ship array: of race Neutral Race class/type=null
$count = size of array $shipar
while $count
dec $count = 
$obj = $shipar[$count]
if not $obj -> is of type Navigational Beacon
$Sector = $obj -> get sector
$pos = $obj -> get position as array
$Xpos = $pos[0]
$Ypos = $pos[1]
$Zpos = $pos[2]
$pos = sprintf: fmt='X=%s Y=%s Z=%s', $Xpos, $Ypos, $Zpos, null, null
$text = sprintf: fmt='%s in %s (at %s)', $obj, $Sector, $pos, null, null
add non selectable menu item: $menu, text=$text
$sat = create ship: type=Advanced Satellite owner=Player addto=$Sector x=$Xpos y=$Ypos z=$Zpos
$text = sprintf: fmt='%s', $obj, null, null, null, null
$sat ->set name to $text

end
end

$TheMenu = open custom info menu: title='Find Containers And Ships' description='All Floating Ware Containers And Abandoned Ships In Your Current Universe' option array=$menu maxoptions=null

return null

2827
Zuletzt geändert von Lilith am Do 13 Nov, 2014 5:53 am, insgesamt 1-mal geändert.
Benutzeravatar
Taktkonform
Feldwebel
Beiträge: 3119
Registriert: Di 24 Jun, 2008 4:28 pm
Lieblings X-Titel:
Wohnort: Saxonia

Re: Script verändern aber wie?

Beitrag von Taktkonform »

Na, das Ding macht aber noch ein klein wenig mehr...
...als nur die Fliegenden Waren anzuzeigen.

Egal...
...ist alles da, was wir brauchen.

Code: Alles auswählen

001   Sector.Pos = [PLAYERSHIP] get positon as array
$X = $Sector.Pos[0]
$Y = $Sector.Pos[1]
$Z = $Sector.Pos[2]
$Sector = $Sector.Pos[3]

$Temp = find flying ware: sector=$Sector maintype=null subtype=null flags=[Find.Multiple] refobj=null maxdist=null maxnum=99, refpos=null
$count = size of array $Temp
while $count
dec $count =
$obj = $Temp[$count]
if $obj != null
$num = $obj -> get flying ware count
$pos = $obj -> get position as array
$Xpos = $pos[0]
$Ypos = $pos[1]
$Zpos = $pos[2]
$pos = sprintf: fmt='X=%s Y=%s Z=%s', $Xpos, $Ypos, $Zpos, null, null
$text = sprintf: fmt='%s %s in %s (at %s)', $num, $obj, $Sector, $pos, null
*add non selectable menu item: $menu, text=$text
$sat = create ship: type=Advanced Satellite owner=Player addto=$Sector x=$Xpos y=$Ypos z=$Zpos
$text = sprintf: fmt='%s %s', $num, $obj, null, null, null
*$sat ->set name to $text
end
return null
Ziemlich kompliziert, da er die Positionsdaten je fliegende Ware ausliest und dann ausgibt, aber egal.
Die Zeilen, die ich mit einem Sternchen gekennzeichnet habe, sind Menuanweisungen.
Wenn Du das als benutzerdefiniertes Menü haben möchtest, musst Du das Array, ganz am Anfang des Scripts, miteinbinden.

noch nen netten Tag
Taktkonform
Komm wir essen Oma - Satzzeichen können Leben retten!
Lilith
Senior-Scharfschütze
Beiträge: 418
Registriert: Sa 30 Jun, 2012 3:42 pm
Lieblings X-Titel: AP

Re: Script verändern aber wie?

Beitrag von Lilith »

Erst mal vielen Dank, dass Du Dir die Mühe machst.

Aber wie bekomme ich das Script nun ins Spiel? Gibt es die Möglichkeit Dein Script mittels Copy&Paste in einen externen Editor zu übernehmen und dann das fertige Script einfach in das Script Verzeichnis von AP zu verschieben? Ich hatte das mal ganz unbedarft mittels Notepad++ probiert aber so einfach gehts scheinbar nicht. Oder muss man das Ganze in dem unsäglichen Editor des Spiels eintippen?
Benutzeravatar
Taktkonform
Feldwebel
Beiträge: 3119
Registriert: Di 24 Jun, 2008 4:28 pm
Lieblings X-Titel:
Wohnort: Saxonia

Re: Script verändern aber wie?

Beitrag von Taktkonform »

Ach ja...
ich hab' das dann mal fertig gemacht. :-D
Fertiges Script.

Beim nächsten Mal bitte angeben, dass Du AP spielst...
...ich habe mich nach <add non selectable item...> halb dusselig gesucht, da es diesen Befehl in TC noch nicht gibt.

Ok, das Script wird jetzt nur noch den aktuellen Sektor scannen und nur noch nach fliegenden Waren suchen. Ansonsten ist alles wie gehabt.

Installationsanleitung siehe readme.txt.
Gestartet wird das Script über einen neuen Eintrag in den erweiterten Schiffskommandos des Spielerschiffes. Der Eintrag lautet "Cheat: Fliegende Waren finden".

Sry für das Cheat...
...aber was anderes ist dieses Ding nicht. ;)

noch nen netten Tag
Taktkonform

P.S.: Und ja, ich weiß das beim Downloadlink eine Größe von 0 MB angegeben wird. Ist korrekt, das ganze Scriptchen ist nun mal nur knappe 30k groß. ;)

P.P.S.:
Um Konflikte zu vermeiden, bzw. zu beheben:
Benutzter Slot: Command_Type_Ship_57(1257)
T-File-Nummer:7855-L049.xml
Komm wir essen Oma - Satzzeichen können Leben retten!
Lilith
Senior-Scharfschütze
Beiträge: 418
Registriert: Sa 30 Jun, 2012 3:42 pm
Lieblings X-Titel: AP

Re: Script verändern aber wie?

Beitrag von Lilith »

Vielen Dank liebe Taktkonform *Keksereich*

Ja mit AP hatte ich vergessen anzugeben, tut mir Leid.

Trotzdem wäre es schön, wenn Du mir noch antworten könntest wie das generell mit der Übernahme von Skripten ist. Kann man die ausschließlich im Spieleigenen Editor schreiben/ändern oder geht das auch über externe Programme, bzw. Copy/Paste von Codezeilen?
Benutzeravatar
Taktkonform
Feldwebel
Beiträge: 3119
Registriert: Di 24 Jun, 2008 4:28 pm
Lieblings X-Titel:
Wohnort: Saxonia

Re: Script verändern aber wie?

Beitrag von Taktkonform »

Das eigentliche Problem liegt ja nicht in der Unbedienbarkeit des SE, als vielmehr, dass man nicht weiß in welcher Drogenlaune die Entwickler die einzelnen Befehle den Gruppen zugeordnet haben.

Ich persönlich benutze nur den SE, wenn ich einen Befehl nicht finde, dann schau' ich bei "MSCI Online Referenz" nach.

Es gibt aber einige externe X3-Editoren, wie etwa den hier Exscriptor.

Ich habe allerdings keinerlei Erfahrung mit externen Editoren.

noch nen netten Tag
Taktkonform

Btw.: Hast Du den Autor um Erlaubnis gebeten, das Script zu verändern?
Wir mehren hier einfach so in einem fremden Script rum...
...nicht dass das Ärger gibt.
Komm wir essen Oma - Satzzeichen können Leben retten!
Lilith
Senior-Scharfschütze
Beiträge: 418
Registriert: Sa 30 Jun, 2012 3:42 pm
Lieblings X-Titel: AP

Re: Script verändern aber wie?

Beitrag von Lilith »

Danke nochmal und nein habe ich nicht. Ich werd die veränderte Version aber sicher nicht veröffentlichen und es wäre evtl. gut den Download dafür oben zu löschen.

edit: Habs gerade ausprobiert. Das Script funktioniert im Prinzip. Zwei unwesentliche Kleinigkeiten sind mir aufgefallen.
1. Bei der Positionsanzeige wird als Z-Position der Text "%" ausgegeben. Ist aber nur die Anzeige. Der Satellit ist an der korrekten Position.
2. Die Einbindung ins Kommandomenü funktioniert scheinbar nicht, was aber auch gar nicht schlimm ist. Ich habe mir das Script eh auf eine Taste gelegt. Geht sehr viel schneller als jedes Mal erst die ganzen Menüs aufploppen ;-)

P.S.: Der XML-Editor funktioniert wunderbar. Viiiiiiel besser als der Spielinterne.
Antworten