
Gruß
Lucike
Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum
Genau. Spart wieder einen Befehlticaki wrote:Wenn du eine Funktion oder ein Script aufrufst das ein Array zurück gibt brauchst du es nicht zu initialisieren.
Code: Select all
039 @ $FabsAndProduct = [THIS] -> call script 'plugin.fabsupplysoftST1.helper' : Array of player stations=$PSTATIONS Label in script to go to=$LABEL
040 $ArrSize1 = size of array $FabsAndProduct
Genau. Und auch das ist freundlichticaki wrote:P.S. du musst aber überprüfen ob das array initialisiert wurde... eine Funktion liefert dir nur ein gültiges Array zurück wenn wenigstens ein Element gefunden wurde ansonsten ist der Rückgabewert null.
Code: Select all
002 skip if $Station1 OR $ShipWare
003 return null
Code: Select all
008 if $ShipWare
Auf welches Ursprungsposting bezieht sich diese Antwort?ticaki wrote:Einspruch euer Ehren...
Es ist ein Fehler einen "size of array" auf null anzuwenden...
Gruß ticaki
Code: Select all
006 if size of array $Station1
007 $LABEL = 'SUPPLYWARE'
008 $DataSetSize = 2
009 end
Ich setze das auch ein. Ticaki muss etwas anderes meinen, sonst wäre keine <RetVar/IF>-Abfrage möglich und sinnfrei im SE.SpaceTycoon wrote:Auf welches Ursprungsposting bezieht sich diese Antwort?
Ich hab hier auch
Code: Select all
006 if size of array $Station1
007 $LABEL = 'SUPPLYWARE'
008 $DataSetSize = 2
009 end
Code: Select all
005 if $Station1 // wenn das array null ist nicht ausführen
006 if size of array $Station1
007 $LABEL = 'SUPPLYWARE'
008 $DataSetSize = 2
009 end
010 end
Stimmt, kann ich beipflichten. Aberticaki wrote:alles falsch
Korrekt ist:Gruß ticakiCode: Select all
005 if $Station1 // wenn das array null ist nicht ausführen 006 if size of array $Station1 007 $LABEL = 'SUPPLYWARE' 008 $DataSetSize = 2 009 end 010 end
P.S. das gehört zu dem was ich beim Signieren alles korrigieren muß
Code: Select all
002 skip if $Station1
003 return null
004 $LABEL = 'SUPPLYFABS'
005 $DataSetSize = 4
006 if size of array $Station1
007 $LABEL = 'SUPPLYWARE'
008 $DataSetSize = 2
009 end
DOCHSpaceTycoon wrote: Stimmt, kann ich beipflichten. AberALLES falsch stimmt so nicht
Auf null wird bereits vorher geprüft, diese vorherigen Zeilen hatte ich weggelassen. Verzeihung...Wenn $station1 gar nix ist, wird das script eh' sofort beendet. Und ansonsten ist $station1 entweder eine normale Variable oder eine Arrayvariable. Und genau das soll damit festgestellt werden (was ja auch dankenswerterweise funktioniert).Code: Select all
002 skip if $Station1 003 return null 004 $LABEL = 'SUPPLYFABS' 005 $DataSetSize = 4 006 if size of array $Station1 007 $LABEL = 'SUPPLYWARE' 008 $DataSetSize = 2 009 end
Code: Select all
002 skip if $Station1
003 return null
004 if size of array $Station1
005 $LABEL = 'SUPPLYWARE'
006 $DataSetSize = 2
007 else
008 $LABEL = 'SUPPLYFABS'
009 $DataSetSize = 4
010 end
Code: Select all
001 $test = size of array $Array
002 write to player logbook $test
Code: Select all
001 $Array = array alloc: size=0
002 $test = size of array $Array
003 write to player logbook $test
Code: Select all
001 $Array = array alloc: size=0
002 append "blabla" to array $Array
003 $test = size of array $Array
004 write to player logbook $test
ticaki wrote:das kann man aber noch verbesseren... immer dieses unnötige Ressourcenverbrauchen... *tz*So *ätsch*Code: Select all
002 skip if $Station1 003 return null 004 if size of array $Station1 005 $LABEL = 'SUPPLYWARE' 006 $DataSetSize = 2 007 else 008 $LABEL = 'SUPPLYFABS' 009 $DataSetSize = 4 010 end
Wenn wir danach gehen hätte die Handelssoftware MK3 gar nicht signiert werden dürfen. Ich persönlich finde den Code echt gruselig.SpaceTycoon wrote:Was braucht unnötige oder mehr Ressourcen?
Wenn Vars neu belegt/verändert werden?
Oder wenn noch eine Codezeile mehr ausgeführt/ausgewertet werden muß?
Das war mehr ein ScherzSpaceTycoon wrote:ticaki wrote:das kann man aber noch verbesseren... immer dieses unnötige Ressourcenverbrauchen... *tz*So *ätsch*Code: Select all
002 skip if $Station1 003 return null 004 if size of array $Station1 005 $LABEL = 'SUPPLYWARE' 006 $DataSetSize = 2 007 else 008 $LABEL = 'SUPPLYFABS' 009 $DataSetSize = 4 010 end
![]()
![]()
Was braucht unnötige oder mehr Ressourcen?
Wenn Vars neu belegt/verändert werden?
Oder wenn noch eine Codezeile mehr ausgeführt/ausgewertet werden muß?
Wie jetzt?
Code: Select all
001 * Moment bitte gleich gehts los
002 @ $ST.list = wait 100 ms
003 * liste der AD und HS des Spielers
004 $ST.list = array alloc: size=0
005 * sortiert nach waren
006 $St.list.SVP = array alloc: size=0
007 $St.list.SDS = array alloc: size=0
008 $St.list.BPH = array alloc: size=0
009 * Wie gross ist das Universum
010 $Uni.max.x = get max sectors in x direction
011 $Uni.max.y = get max sectors in y direction
012
013 * Schleifen zum durchsuchen aller Sektoren
014 $Uni.y = 0
015 while $Uni.y < $Uni.max.y
016 $Uni.x = 0
017 while $Uni.x < $Uni.max.x
018
019 * ueberprueft ob Sektor vorhanden
020 $Uni.sec = get sector from universe index: x=$Uni.x, y=$Uni.y
021 if $Uni.sec != null
022 * sector existiert
023
024 * HD suchen
025 $St.result.HD = find station: sector=$Uni.sec class or type=Trade Dock race=Player flags=[Find.Multiple] refobj=null maxdist=null maxnum=1000000 refpos=null
026 $St.result.size.HD = size of array
027
028 * gefundene HD in liste schreiben
029 $tmp.i.HD = 0
030 while $tmp.i.HD < $St.result.size.HD
031 $St.result.tmp.HD = $St.result.HD[$tmp.i.HD]
032 append $St.result.tmp.HD to array $ST.list
033 inc $tmp.i.HD =
034 end
035
036 * AD suchen
037 $St.result.AD = find station: sector=$Uni.sec class or type=Equipment Dock race=Player flags=[Find.Multiple] refobj=null maxdist=null maxnum=1000000 refpos=null
038 $St.result.size.AD = size of array $St.result.AD
039
040 * gefundene AD in liste schreiben
041 $tmp.i.AD = 0
042 while $tmp.i.AD < $St.result.size.AD
043 $St.result.tmp.AD = $St.result.AD[$tmp.i.AD]
044 append $St.result.tmp.AD to array $ST.list
045 inc $tmp.i.AD =
046 end
047
048 end
049
050 inc $Uni.x =
051 end
052
053 inc $Uni.y =
054 end
055 write to player logbook $Uni.max.x
056 write to player logbook $Uni.max.y
057 write to player logbook $ST.list
058 return $ST.list
059 return null
060 $St.result.BPH = $St.result.HD -> trades with ware BPH-Erweiterungskit MK1
061 return null
Du hast sicher meinen code noch nicht gesehen...Lucike wrote:Wenn wir danach gehen hätte die Handelssoftware MK3 gar nicht signiert werden dürfen. Ich persönlich finde den Code echt gruselig.
Ja, ja... der Scripteditor ist eh' so eine Sache für sich.Lucike wrote:Zum if size of array Befehl. So wie es ausschaut können wohl Fehler entstehen, wenn man das Array vorher nicht auf Existenz überprüft. Das wissen wohl nur die Egosoft-Fummler.
Ich hab auch eine Frage....fennry wrote:So da bin ich wieder und mir mehr Fragen als Antworten![]()
Und was willst Du mit den Stationen, die kein BPH handeln dann anfangen?fennry wrote:So da bin ich wieder und mir mehr Fragen als Antworten![]()
Jetzt will ich meine ST.list durchsuchen nach den Stationen die kein BPH handeln. dazu will ich das in Zeile 060 nutzen. Kann ich nun einfach die St.list abfragen oder muss ich das in Zeile 039 unterbringen und jede gefundene HD einzeln überprüfen und in ST.list.BPH einschreiben lassen?
Code: Select all
010 $shipupgrade = BPH
011 $stationclass = Equipment Dock
012 $maxsectX = get max sectors in x direction
013 while $maxsectX > 0
014 dec $maxsectX =
015 $maxsectY = get max sectors in y direction
016 while $maxsectY > 0
017 dec $maxsectY =
018 $sectorname = get sector from universe index: x=$maxsectX, y=$maxsectY
019 $EQDOCK = find station: sector=$sectorname class or type=$stationclass race=player flags=[Find.Multiple] refobj=null maxdist=null maxnum=100 refpos=null
020 if $EQDOCK
021 counter1= size of array $EQDOCK
022 while counter1 > 0
023 dec counter1
024 $Playerstation = $EQDOCK (counter1)
025 If $Playerstation -> trades with ware $shipupgrade
026 HIER DEIN CODE
027 end
028 end
029 end
030 end
031 end