Codeschnipsel, bitte um Hilfe (Probleme wurden gelöst, danke)

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

FritzHugo3
Posts: 4664
Joined: Mon, 6. Sep 04, 17:24
x4

Codeschnipsel, bitte um Hilfe (Probleme wurden gelöst, danke)

Post by FritzHugo3 » Fri, 7. Jan 11, 09:58

Hu hu, bitte so einfach (für Leihen verständlich wie möglich).
Weis einer wieso das hier nicht Funktioniert?

Code: Select all

001   $HeimatStation = [THIS] -> get user input: type=Var/Station owned by Player, title='Heimatstation auswählen'
002   
003   $Sektor = [THIS] -> get user input type=Var/Sector, title='Sektor der Schiffe', sector=null
004   
005   $Array.Spielerschiffe.im.Sektor = [THIS] -> get player owned ship array from sector
006   
007   $Schiffsanzahl.size =  size of array $Array.Spielerschiffe.im.Sektor
008   
009   while $Schiffsanzahl.size
010   |
011   |dec $Schiffsanzahl.size =
012   |
013   |$SpielerschiffeImSektor = $Array.Spielerschiffe.im.Sektor[$Schiffsanzahl.size]
014   |
015   |$SpielerschiffeImSektor -> set homebase to $HeimatStation
016   |
017   end
018   return null

Für die Usersuche: Array , alle Schiffe alle Spielerschiffe im Sektor , auf Station , Menüs erstellen Tipps
Last edited by FritzHugo3 on Mon, 24. Jan 11, 12:30, edited 3 times in total.
Ich fordere mehr und vorallem gerechtere Verteilung von Keksen und Süßkram für die "Magischen 20"! Daher wählen Sie jetzt die DPFGKV, die Deutsche Partei für gerechtere Keks - Verteilung!

User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER » Fri, 7. Jan 11, 10:16

005 $Array.Spielerschiffe.im.Sektor = [THIS] -> get player owned ship array from sector
Dieser Befehl erwartet als Rerenezobjekt (das war vor dem -> steht) einen Sektor und nicht [THIS]. [THIS] ist entweder ein Objekt auf dem das Skript läuft, oder eben null, wenn das Skript global läuft. Es ist aber nie ein Sektor.

So wär's richtig:

Code: Select all

005   $Array.Spielerschiffe.im.Sektor = $Sektor -> get player owned ship array from sector 
MfG,
ScRaT

User avatar
Reacecor
Posts: 383
Joined: Mon, 22. Nov 10, 20:26
x3tc

Post by Reacecor » Fri, 7. Jan 11, 10:21

Code: Select all

$homebase = [PLAYERSHIP] -> get user input: type=Var/Station, title='Heimatstation auswählen:'
$sector = [PLAYERSHIP] -> get user input: type=Var/Sector, title='Sektor der Schiffe:'

$array.ships = $sector -> get player owned ship array from sector

$size = size of array $array.ships

while $size
  dec $size =
  $ship = $array.ships [$size]
  $ship -> set homebase to $homebase
  = wait 10 ms
end
So wär's dann komplett (natürlich nicht getestet und alles aus dem Kopf :wink:). Sollte sich, denke ich, von selbst erklären.
Wichtig: Baue immer "= wait <Var/Number> ms" in Schleifen ein, da sich das Spiel sonst aufhängen kann.
Vielleicht könntest du auch kürzere Variablennamen benutzen, da sich so weniger Fehler einbauen und es übersichtlicher ist.

Gruß

User avatar
-Ford-
Posts: 2064
Joined: Wed, 18. Jan 06, 18:40
x4

Post by -Ford- » Fri, 7. Jan 11, 10:33

Code: Select all

while $size >= 0
Oder wird eine Zahl wenn sie kleiner wird als 0 FALSE?

Gruß
-Ford-
Ponyfabulous

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

Post by Gazz » Fri, 7. Jan 11, 13:48

Für die logischen Vergleiche in solchen Statements sind nur
0 == null == FALSE

Alles andere ist TRUE, egal obs nun eine 7, ein Sektor, oder ein leeres Array ist.

Reacecor wrote:Vielleicht könntest du auch kürzere Variablennamen benutzen, da sich so weniger Fehler einbauen und es übersichtlicher ist.
Für Experdde vielleicht.
Ich verwende z.B. Index1-5 in duzenden von loops in einem Script aber da muß man schon aufassen, daß man da keine Instanzen verbuchselt. Ebenso Dummy1-5 für Werte, die ich nur im Bereich von ein paar Zeilen zwischenspeichern muß...

Für den Anfänger definitiv längere aber aussagekräftige Variablennamen. Im Zweifelsfall lieber eine neue Variable anlegen als eine alte wiederverwerten, da diese vielleicht noch in einem anderen Programmteil benutzt wird.

Das ist nicht hübsch oder elegant aber es ist einfacher.
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.

User avatar
Reacecor
Posts: 383
Joined: Mon, 22. Nov 10, 20:26
x3tc

Post by Reacecor » Fri, 7. Jan 11, 14:25

Die Fehlerrate bei den Variablennamen besteht genaugenommen nur beim Exscriptor und selbst der weist einen beim speichern auf Fehler hin. Wer Variablenfehler In-Game macht ist selber schuld. :wink:

Gruß

User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER » Fri, 7. Jan 11, 14:32

Für Experdde vielleicht.
Naja, ganz unrecht hat er nicht. Z.B. könnte er statt "Array.Spielerschiffe.im.Sektor" auch einfach schrieben "Spielerschiffe.im.Sektor".
Es geht nicht um den Typ der Variablen, sondern darum was sie repräsentiert.
Ich verwende z.B. Index1-5 in duzenden von loops in einem Script aber da muß man schon aufassen, daß man da keine Instanzen verbuchselt.
Ich verwende für Schleifen immer die Variablen i, j, k (ein bisschen aus anderen Programmiersprachen bzw. der Mathematik entlehnt). Tiefer als 3 verschachtelte Loops musste ich auch schon lange nicht mehr.

Viel falsch machen kann man da nicht, zumindest wenn man sich an das Schema hält:

Code: Select all

$i = size of array $array
while $i
  dec $i =
  $element = $array[$i]
  = wait 1 ms
end
Dann kann $i nämlich innerhalb der Schleife immer nur die Zählvariable sein, eine andere Möglichkeit gibt es nicht. Außerdem ist "i" so schön kurz, dass man direkt weiß, dass es eine "unwichtige" Variable ist, mit der man nicht allzu viel machen sollte.

MfG,
ScRaT

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

Post by Gazz » Fri, 7. Jan 11, 15:02

ScRaT_GER wrote:Naja, ganz unrecht hat er nicht. Z.B. könnte er statt "Array.Spielerschiffe.im.Sektor" auch einfach schrieben "Spielerschiffe.im.Sektor".
Es geht nicht um den Typ der Variablen, sondern darum was sie repräsentiert.
Ich hänge meist ein .arr an den Namen so daß ein Array und ein Element aus demselben eindeutig differenziert sind.
Wenn ich in der Schleife mit sector.ship und sector.ship.arr arbeite, dann ist das für mich übersichtlich.

Bei kleineren Scripts ist es ja kein Problem wenn man abkürzt aber z.B. plugin.gz.mars.ship.xml hat über 2000 Zeilen so daß auch ich mir nicht jedes Detail merken kann.
Da muß die Schreibweise eindeutig sein mit möglichst wenig Annahmen, "die man ja sowieso weiß".
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.

User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Re: Codeschnipsel, bitte um Hilfe

Post by Lucike » Fri, 7. Jan 11, 18:19

Gazz wrote:
ScRaT_GER wrote:Naja, ganz unrecht hat er nicht. Z.B. könnte er statt "Array.Spielerschiffe.im.Sektor" auch einfach schrieben "Spielerschiffe.im.Sektor".
Es geht nicht um den Typ der Variablen, sondern darum was sie repräsentiert.
Ich hänge meist ein .arr an den Namen so daß ein Array und ein Element aus demselben eindeutig differenziert sind.
Wenn ich in der Schleife mit sector.ship und sector.ship.arr arbeite, dann ist das für mich übersichtlich.

Bei kleineren Scripts ist es ja kein Problem wenn man abkürzt aber z.B. plugin.gz.mars.ship.xml hat über 2000 Zeilen so daß auch ich mir nicht jedes Detail merken kann.
Da muß die Schreibweise eindeutig sein mit möglichst wenig Annahmen, "die man ja sowieso weiß".
Richtig, gerade in größeren Skripten braucht man eindeutige Namen. Allerdings kommt bei mir ein "Array." voran, damit die Arrays oben in der Variablenliste stehen. Aber das muss jeder für sich entscheiden.

Code: Select all

$Array.Ship.Wing = [PLAYERSHIP] -> get formation follower ships
skip if  is datatyp[ $Array.Ship.Wing ] == DATATYP_ARRAY
|$Array.Ship.Wing =  array alloc: size=0

$While =  size of array $Array.Ship.Wing
while $While
|dec $While = 
|$ShipWing = $Array.Ship.Wing[$While]
|skip if $ShipWing -> exists
||continue
|skip if not $ShipWing -> is script 'plugin.codea.ship.order.wing' on stack of task=0
||inc $SquadronSize = 
end
FritzHugo3 wrote:

Code: Select all

$Array.Spielerschiffe.im.Sektor = [SECTOR] -> get player owned ship array from sector
Noch eine kleine Anmerkung von mir, da ich denke, dass sich das seit Reunion nicht geändert hat. Dieser Befehl gibt nur die Schiffe im Orbit zurück. Es fehlen also alle Schiffe, die an Stationen und Trägern angedockt sind.

Folgender Code gibt alle beweglichen Spielerschiffe eines Sektor zurück.

Code: Select all

$Flags = [Find.IncludeDocked] | [Find.Multiple]
$Array.Ship =  find ship: sector=$Sector class or type=Bewegliches Schiff race=Player flags=$Flags refobj=null maxdist=null maxnum=2147483647 refpos=null
Gruß
Lucike
Image

User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER » Fri, 7. Jan 11, 18:48

Da muß die Schreibweise eindeutig sein mit möglichst wenig Annahmen, "die man ja sowieso weiß".
Naja, im Endeffekt ist es eine Stilfrage. Denn wenn ich für mich selber festgelegt habe, dass i, j und k Zählvariablen für Schleifen sind, dann ist das auch in meinen Skripts immer so.
Genauso habe ich es z.B. häufig, dass ich eine Variable $ships habe, die natürlich ein Array von Schiffen ist. Wenn ich dieses Array durchlaufen möchte, mache ich einfach:

Code: Select all

$i = size of array $ships
while $i
  dec $i =
  $ship = $ships[$i]
  * Mach etwas mit $ship
  = wait 1 ms
end
Ich persönlich finde das sehr lesbar und eindeutig. Natürlich verwende ich längere Namen, wenn es sonst uneindeutig werden würde. Wenn ich zwei verschiedene Arrays von Schiffen habe, nenne ich nicht das eine $ships und das andere $Ships. ;)

Code: Select all

$While =  size of array $Array.Ship.Wing
while $While
|dec $While =
|$ShipWing = $Array.Ship.Wing[$While] 
Gerade so etwas finde ich misverständlich. $While wird im Code völlig anders benutzt als der Name es suggeriert. $While wird als Abbruchbedingung benutzt, kann dekrementiert werden und zu guter letzt kann man sogar noch ein Arrayelement damit auslesen.

Ähnlich sehe ich das inzwischen mit $size. Wenn dann im Code steht "dec $size =" wirkt das doch ein bisschen komisch, denn $size ist ja eigentlich die Größe des Arrays - aber die verändere ich ja gar nicht...

Aber wie gesagt: Alles eine Frage des Stils. Ich vermute jeder hat da mit der Zeit seine persönliche Version gefunden, die für denjenigen auch problemlos verständlich ist.
damit die Arrays oben in der Variablenliste stehen.
Hast du schonmal den Exscriptor ausprobiert? Der macht einem das Leben echt in vielen Bereichen leichter. Z.B. kann man problemlos Variablen umbenennen (Find&Replace).

MfG,
ScRaT

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

Post by Gazz » Fri, 7. Jan 11, 18:54

ScRaT_GER wrote:Hast du schonmal den Exscriptor ausprobiert? Der macht einem das Leben echt in vielen Bereichen leichter. Z.B. kann man problemlos Variablen umbenennen (Find&Replace).
Pfft. Alte Hunde und neue Tricks...

Variablen umbenennen mit Search/Replace kann ich auch ohne Exscriptor.
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.

User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike » Fri, 7. Jan 11, 18:59

ScRaT_GER wrote:Hast du schonmal den Exscriptor ausprobiert? Der macht einem das Leben echt in vielen Bereichen leichter. Z.B. kann man problemlos Variablen umbenennen (Find&Replace).
Ja, ich nutze den Exscriptor, wenn ich größere Blöcke verschieben, kopieren oder löschen will. Alles andere, wie z.B. das Umbenennen von Variablen, erledige ich mit dem Notepad++, da gerade in größeren Skripten der Exscriptor sehr träge wird. Schon mal ein 2000-Zeilen-Skript mit dem Exscriptor bearbeitet? Alleine das Laden und Speichern dauert schon eine Weile damit. Ansonsten ist er aber gut.

Auch das Notpad++ kann sehr schnell Variablen in Skripten durchführen. Zudem noch in mehreren Skripten gleichzeitig. Oder die Versionsnummer in mehreren Skripten gleichzeitig ändern. Aber man muss schon wissen, was man da ändert. Wie hier z.B. Variablennamen:

Code: Select all

<sval type="array" size="10">
  <sval type="string" val="plugin.adv.missile.launcher.fire"/>
  <sval type="int" val="44"/>
  <sval type="string" val="M7M Raketenabschussvorrichtung - Abschuss"/>
  <sval type="int" val="3100"/>
  <sval type="int" val="0"/>
  <sval type="array" size="13">
    <sval type="string" val="Config"/>
    <sval type="string" val="Target"/>
    <sval type="string" val="Owner"/>
    <sval type="string" val="VariableGet"/>
    <sval type="string" val="Array.Config"/>
    <sval type="string" val="MissileProbaility"/>
    <sval type="string" val="MissileTimeDifference"/>
    <sval type="string" val="Turret"/>
    <sval type="string" val="TurretMax"/>
    <sval type="string" val="Array.Config.Turret"/>
    <sval type="string" val="Missile"/>
    <sval type="string" val="MissileBarrage"/>
    <sval type="string" val="MissileFire"/>
  </sval>
Gruß
Lucike
Image

User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER » Fri, 7. Jan 11, 19:06

Schon mal ein 2000-Zeilen-Skript mit dem Exscriptor bearbeitet?
Ja, ich weiß, leider hat er da so seine Macken (auch das Textflackern, wenn man manchmal tippt nervt) - immer noch besser als der interne SE. :)

MfG,
ScRaT

FritzHugo3
Posts: 4664
Joined: Mon, 6. Sep 04, 17:24
x4

Post by FritzHugo3 » Fri, 7. Jan 11, 20:39

:o :o :o

Also obs bei der Biebel wohl so änlich war? Ein Par jungs haben Geschichten aufgeschrieben und 2000 Jahre später (und einige Kriege) wars ne Religion *g*.



Erstmal WOW! zu den ganzen Antworten, vielen Dank für die Hilfe.


Also wär wie ich Absolut keinen blassen Schimmer hat, von den was er im Scripteditor macht und durch andere Scripte versucht was herzuleiten, für den ist so ein Variablename fast ein muss (im übrigen wurden diese Par Namen bereits drei mal geändert worden, damit ichs besser nachvollziehen kann rofl).
www.bodenseejugend.de/sonstiges/X3TC/lol.jpg





Wenn ich diese PN hier nicht ausversehen an die falsche Person geschickt hätte... ihr könnt selber schaun, wenn ihr wollt.

"hu hu, sorry, wenn ich mich mal wieder an dich halte, für dich sinds vermutlich 2 minuten, für mich zwei wochen ausprobieren lol.

könntest mal reinschaun
versuche, alle spielerschiffe im Sektor (und auf Station XY) zu erfassen.
Hab versucht andere Scripte als vorlage zu nehmen, problem, ich weis nicht wirklich was ich da mach (wie du sicher sehen wirst rofl)
www.bodenseejugend.de/sonstiges/X3TC/a1.zip
"

Isser net schlau *g*, wäre früher oder später die nächste Frage gewesen
"Folgender Code gibt alle beweglichen Spielerschiffe eines Sektor zurück."
Danke dir und euch.


Die meisten denken jetzt sicher, der Typ hat keine Ahnung, wieso um Himmelswillen quält er den Editor und uns so. -> Weil ich es kann rofl.




PS. Seit wann funktioniert es denn in einem externen Editor wie Notepad++ sachen verändern kann und der "fußtext" also was X3 wirklich liest noch funktioniert.

(<codearray>

<sval type="array" size="10">
<sval type="string" val="a111"/>
<sval type="int" val="44"/>
...)
Ich fordere mehr und vorallem gerechtere Verteilung von Keksen und Süßkram für die "Magischen 20"! Daher wählen Sie jetzt die DPFGKV, die Deutsche Partei für gerechtere Keks - Verteilung!

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

Post by UniTrader » Fri, 7. Jan 11, 22:26

Gazz wrote:Für die logischen Vergleiche in solchen Statements sind nur
0 == null == FALSE
an der stelle muss ich dich mal korrigieren:

0 == [FALSE]
null == [FALSE]
ABER:
null != 0

frag mich aber nicht wer sich das ausgedacht hat, ich bin nur mal zufällig über diese eingenwilligkeit des SE gestolpert :D
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 ;)

FritzHugo3
Posts: 4664
Joined: Mon, 6. Sep 04, 17:24
x4

Post by FritzHugo3 » Sat, 8. Jan 11, 05:16

Natürlich kann ich hergehen und den sektorArrayblock nochmal unter dem $JaNein kopieren, aber ich verstehe nicht ganz wieso er das so nicht macht.

Folgendes, bei menüpunkt 2 setzt er die änderungen nur bei einem Schiff im Sektor um. Dann wird durchgeschliffen zu Menüpunkt 3 und dort übernimmt er die änderungen bei allen Schiffen im Sektor, obwohl es die selbe Distanzebene ist.

Code: Select all

044   * Code für Sektor start
045   |$Sektor = [THIS] -> get user input type=Var/Sector, title='Sektor der Schiffe', sector=null
046   |$Array.Spielerschiffe.im.Sektor = $Sektor -> get player owned ship array from sector
047   |$Schiffsanzahl.size =  size of array $Array.Spielerschiffe.im.Sektor
048   |while $Schiffsanzahl.size
049   ||dec $Schiffsanzahl.size = 
050   ||$SpielerschiffeImSektor = $Array.Spielerschiffe.im.Sektor[$Schiffsanzahl.size]
051 @ ||= wait 100 ms
052   ||
053   * Heimatbasis, Sprungoptionen, Name
054   ||if $Menue == 1
055   |||
056   |||$Menue = 2
057   ||end
058   ||
059   * Heimatbasis, Sprungoptionen
060   ||if $Menue == 2
061   |||$Ja.Nein =  create custom menu array
062   |||add custom menu item to array $Ja.Nein: text='Autosprungantrieb EIN' returnvalue=[TRUE]
063   |||add custom menu item to array $Ja.Nein: text='Autosprungantrieb AUS' returnvalue=[FALSE]
064   |||$Ja.Nein =  open custom menu: title='Sprungantrieb ein oder aus?' description=null option array=$Ja.Nein
065   |||$SpielerschiffeImSektor -> set autojump active: $Ja.Nein
066 @ |||= wait 100 ms
067   |||
068   |||$MindestSprungreichweite = [THIS] -> get user input: type=Var/Number, title='Mindestsprungreichweite'
069   |||$SpielerschiffeImSektor -> autojump minimum jumps= $MindestSprungreichweite
070 @ |||= wait 100 ms
071   |||
072   |||$SprungenergieReserve = [THIS] -> get user input: type=Var/Number, title='Sprungenergie-Reserve'
073   |||$SpielerschiffeImSektor -> set jumpdrive fuel resupply: amount=$SprungenergieReserve
074 @ |||= wait 100 ms
075   |||
076   |||$Menue = 3
077   ||end
078   ||
079   * Heimatbasis
080   ||if $Menue == 3
081   |||$SpielerschiffeImSektor -> set homebase to $HeimatStation
082 @ |||= wait 100 ms
083   ||end
084   |end
Ich fordere mehr und vorallem gerechtere Verteilung von Keksen und Süßkram für die "Magischen 20"! Daher wählen Sie jetzt die DPFGKV, die Deutsche Partei für gerechtere Keks - Verteilung!

User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER » Sat, 8. Jan 11, 09:07

@Unitrader
Gazz hat schon recht:
Für die logischen Vergleiche in solchen Statements sind nur
0 == null == FALSE
@FritzHugo
Nochmal kurz zu den Variablennamen:
050 ||$SpielerschiffeImSektor = $Array.Spielerschiffe.im.Sektor[$Schiffsanzahl.size]
Warum $SpieleschiffeImSektor? Ist doch nur eins.
054 ||if $Menue == 1
055 |||
056 |||$Menue = 2
057 ||end
...
060 ||if $Menue == 2
...
076 |||$Menue = 3
...
080 ||if $Menue == 3
Diese ganzen Abfragen kannst du dir sparen. Die Menüs werden sowieso geöffnet.

Ansonsten erstmal die Frage: Was funktioniert denn nicht? Hast du dir schonmal ein paar ausgewählte Variablen (z.B. das $SpielerschiffeImSektor) ins Logbuch schreiben lassen?

MfG,
ScRaT

FritzHugo3
Posts: 4664
Joined: Mon, 6. Sep 04, 17:24
x4

Post by FritzHugo3 » Sat, 8. Jan 11, 10:44

Wie soll ich die denn sonst einzeln ansprechen, wenn nicht mit if?

1. Auswahl = Name, Sprung, Heimat
(steht nur Code für Name, daher weiterleitung an 2)

2. Auswahl = Sprung, Heimat
(steht nur Code für Sprung, daher weiterleitung an 3)

3. Auswahl = Heimat
(steht nur Code Heimat)

Wählt man also 1. werden alle drei bearbeitet
Bei Menüpunkt 2, eben nur Sprung und Heimat
Und bei drei, nur Heimat.
Die Weiterleitung hab ich drinnen, um den Code nicht von 3. und 2. in 1. kopieren muss. Und von 3. in 2.

wie wäre es denn besser?



Logbuch sagt folgendes:

Code: Select all

059   * Heimatbasis, Sprungoptionen
Logbuchabfrage
060   ||if $Menue == 2
061   |||$Ja.Nein =  create custom menu array 
= alle Schiffe

Code: Select all

059   * Heimatbasis, Sprungoptionen
060   ||if $Menue == 2
Logbuchabfrage
061   |||$Ja.Nein =  create custom menu array 
= nur ein Schiff

Code: Select all

079   * Heimatbasis
080   ||if $Menue == 3 
Logbuchabfrage
= alle Schiffe



Daher verstehe ich ja auch nicht, wieso es direkt unter "if $Menu = 2"
nicht geht und direkt unter "if $Menu =3" funktioniert. es ist doch genau das selbe
Last edited by FritzHugo3 on Sat, 8. Jan 11, 11:14, edited 1 time in total.
Ich fordere mehr und vorallem gerechtere Verteilung von Keksen und Süßkram für die "Magischen 20"! Daher wählen Sie jetzt die DPFGKV, die Deutsche Partei für gerechtere Keks - Verteilung!

User avatar
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest » Sat, 8. Jan 11, 11:11

ob erst jetzt Spielerschiffe oder Spielerschiff nennt ist doch Wurst, Hauptsache er behält den Namen seiner Variablen bei.

Ich Persönlich kann da so wenig auslesen (aus der Übung) und weil ich in meinem Style schon zu festgefahren bin.

Dieses Mixax EVA System, also kurz vorher Variablen festzulegen liegt mir nicht so besonders.

Was ich meine ist folgendes:

Ich baue meine Scripte eigentlich immer nach dem EVA Prinzib auf sprich
-> Eingabe: Texte laden lassen, texte aus TFile laden lassen, Variablen belegen mit festen konstanten, Schiffe suchen, etc pp danach Arrays erstellen
-> Verarbeitung: Was ich dann eben machen will.
-> Ausgabe ist dann das was es bewirkt.

Ich benne meine Variablen meist nach Folgendem Muster:

Objekt/Relation/SCRIPTDATA_TYPE/Wert

bei einem Normalen Schiffsarray also Folgendermassen:

$ship.array [SECTOR] = get ship array from sector
$ship.array.size = get sizo of array $ship.array
...
[$ship] = $ship.array [$ship.array.size]

hab ich mehrere schiffe die ich suchen muss/ will hänge ich nach obigen Muster weitere Spezifikationen an wie zum Beispiel:

$e.ship.big.array (alternative wäre auch ein einfaches a um zu kürzen) find ship....
$e.ship.small.array find ship
$e.station.a find station..
$f.station.a find station...

also so sieht bei mir ein Abfrage Block aus:

020 * Abfragen
021 ~ $sek = [THIS] -> get sector
022 ~ $ref.pos = [THIS] -> get position as array
023 ~ $lastype = [THIS] -> get laser type in turret $turrred.id at slot 0
024 ~ $laserrange = [THIS] -> get maximum laser range: turret=$turrred.id
025 ~ $flag = [Find.Enemy] | [Find.Multiple]
026 ~ $e.ship.big.a = find ship: sector=$sek class or type=Großschiff race=$r flags=$flag refobj=[THIS] maxdist=$laserrange maxnum=[Find.Multiple] refpos=$ref.pos
027 ~ $e.ship.big.2 = find ship: sector=$sek class or type=Großschiff race=$r flags=[Find.Enemy] refobj=[THIS] maxdist=$laserrange maxnum=[Find.Multiple] refpos=$ref.pos
028 ~ $e.ship.small.arry = $sek -> get ship array from sector/ship/station
029 ~ $f.ship = find ship: sector=$sek class or type=Schiff race=Player flags=[Find.Nearest] refobj=[THIS] maxdist=$laserrange maxnum=[Find.Multiple] refpos=$ref.pos
030 ~ $f.station = find station: sector=$sek class or type=Station race=Player flags=[Find.Multiple] refobj=[THIS] maxdist=$laserrange maxnum=[Find.Multiple] refpos=$ref.pos
031 ~ $e.station = find station: sector=$sek class or type=null race=null flags=[Find.Enemy] refobj=[THIS] maxdist=$laserrange maxnum=[Find.Multiple] refpos=$ref.pos

Wobei man Zeile 027 entfernt gehört was mir grad auffällt.

@besser: mit else if also quasi so:

if $menu == 1
...
else if $menu == 2
...
else if $ menu ==3
...
end

Noch besser wäre es vermutlich wenn du für die 3 Optionen ein extra Costum Menü machst.

Also so:

$Menu.1 create costum menu array
$Menu.2 create costum menu array
$Menu.3 create costum menu array


append 'Hombase Menü' item to array $Menu.1
append 'Sprungmenü' item to array $Menu.1
append 'blblabl item to' array
-> für alle 3

$Ret.Var.Main = open costum menu

if $Ret.Var.Main == -1
|return null
else if $Ret.Var.Main == 0
$Ret.Var.Jump = open costum menu
|if $Ret.Var.Jump -1
||Ret.Var.Main = open -> usw.

FritzHugo3
Posts: 4664
Joined: Mon, 6. Sep 04, 17:24
x4

Post by FritzHugo3 » Sat, 8. Jan 11, 12:07

nun verstehe ich aber trotzdem noch nicht, wieso er direkt in der Zeile unter:

Code: Select all

   ||if $Menue == 1
und

Code: Select all

   ||if $Menue == 2
Nur ein Schiff findet und unter

Code: Select all

   ||if $Menue == 3
alle Schiffe findet

Wo ist denn da die Logik?
Ich fordere mehr und vorallem gerechtere Verteilung von Keksen und Süßkram für die "Magischen 20"! Daher wählen Sie jetzt die DPFGKV, die Deutsche Partei für gerechtere Keks - Verteilung!

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