Fehler in kleinem Skript

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

Freizeitspieler
Posts: 98
Joined: Tue, 9. Aug 05, 19:50
x4

Fehler in kleinem Skript

Post by Freizeitspieler »

Ich wollte ein kleines Skript basteln, dass mir die Sektorkarte aufdeckt, damit ich Aldrin nicht komplett erforschen muss. So ein Skript hatte ich schonmal, das ist allerdings einer Neuinstallation zum Opfer gefallen. Leider funktioniert das, was ich zusammengeschrieben habe aber nicht. Sieht jemand den Fehler?

Code: Select all

$objectarray = [SECTOR] -> get all stationary objects: include asteroids=[TRUE]
  $i = 0
  $n = size of array $objectarray
  while $i < $n
    $current = $objectarray[$i]
    set discovered status: type=$current status=[TRUE]
    inc $i = 
  end
  return null
User avatar
ubuntufreakdragon
Posts: 5226
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon »

[Sector] klappt nur wenn das script auf einem Objekt läuft, ist dann der Sektor des callenden Objekts.

Die Schleife ist korrekt aber es geht auch nur mit einer Variablen:
$i = size of array ...
while $i
dec $i
do stuff
end

Der Rest ist auch richtig.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
Sagitarius
Posts: 6
Joined: Fri, 20. Feb 04, 18:57
x3tc

Post by Sagitarius »

Hallo Freizeitspieler!
:) Ich benutze lieber
Gal_ex_1.9.8.9 von Gnasirator
http://forum.egosoft.com/viewtopic.php?t=221693
oder
ScoutSpezialSoftware MK1 von alles
http://forum.egosoft.com/viewtopic.php?t=224525
du kannst es natürlich auch CHEATEN,
dann einfach so;

001 $sec.x = get max sectors in x direction
002 $sec.y = get max sectors in y direction
003
004 $x = 0
005 while $x <= $sec.x
006 |$y = 0
007 |while $y <= $sec.y
008 ||
009 ||$sector = get sector from universe index: x=$x, y=$y
010 ||if $sector -> exists
011 |||$sector -> set known status to [TRUE]
012 |||$gate.id = 6
013 |||while $gate.id > 0
014 ||||dec $gate.id =
015 ||||$gate = $sector -> get warp gate: gate id=$gate.id
016 ||||if $gate -> exists
017 |||||$gate -> set known status to [TRUE]
018 |||||$gate.x = $gate -> get x position
019 |||||$gate.y = $gate -> get y position
020 |||||$gate.z = $gate -> get z position
021 |||||$tmp = create ship: type=Erweiterter Satellit owner=Player addto=$sector x=$gate.x y=$gate.y z=$gate.z
022 |||||$tmp -> set owner race to Unbekannt
023 |||||$tmp -> destruct: show no explosion=[TRUE]
024 ||||end
025 |||end
026 ||end
027 ||inc $y =
028 |end
029 |inc $x =
030 end
031 return null

na dann viel Spaß damit.

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

Post by ubuntufreakdragon »

Naja doch etwas übers Ziel hinausgeschossen, Er will nur Aldrin haben und das Komplett, sein 6 Zeilen sind bis auf [sector] korrekt und würden genau das erreichen was er will.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
Freizeitspieler
Posts: 98
Joined: Tue, 9. Aug 05, 19:50
x4

Post by Freizeitspieler »

@Sagitarius: Danke, aber das wäre dann schon etwas zu viel des guten. Dein Beitrag hat mir aber trotzdem weitergeholfen. "set discovered status" war verkehrt, "set known status" ist der richtige Befehl.

@ubuntufreakdragon: Das mit dem [SECTOR] war schon so gedacht, ich hab es jetzt aber über eine Argumenteingabe gelöst, so dass man den Sektor per Hand wählen kann. Die Variante mit dem runterzählen, die du vorgeschlagen hast, führt doch aber dazu, dass das Objekt mit dem Arrayindex 0 nicht mehr aufgedeckt wird, oder?

Hier der funktionierende Code ($currentsector wird als Argument eingelesen):

Code: Select all

  $objectarray = $currentsector -> get all stationary objects: include asteroids=[TRUE]
  $i = 0
  $n = size of array $objectarray
  while $i < $n
    $current = $objectarray[$i]
    $current ->set known status to [TRUE]
    inc $i = 
  end
  return null
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

Freizeitspieler wrote:@ubuntufreakdragon: Das mit dem [SECTOR] war schon so gedacht, ich hab es jetzt aber über eine Argumenteingabe gelöst, so dass man den Sektor per Hand wählen kann. Die Variante mit dem runterzählen, die du vorgeschlagen hast, führt doch aber dazu, dass das Objekt mit dem Arrayindex 0 nicht mehr aufgedeckt wird, oder?
doch, so wie er es gepostet hat (das dec direkt nach dem while) passt es ;) wenn $i noch 1 hat wird die schleife noch einmal ausgefühtz und $i auf 0 verringert - der nächste durchlauf mit startwert 0 (effektivwert -1) findet dann nicht mehr statt ;)
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 ;)
Freizeitspieler
Posts: 98
Joined: Tue, 9. Aug 05, 19:50
x4

Post by Freizeitspieler »

Upps, stimmt ja. :oops:

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