Page 1 of 1
Brauche kleine hilfestellung
Posted: Wed, 29. Aug 07, 23:33
by Joda
Hi
Gibt es eine möglichkeit von den asteroiden (die kleinen "debris") den mineraliengehalt (ausbeute) per script auszulesen, damit ich den wert weiter verwenden kann?
Bsp: $curenthull = $ship -> get hull______für die schiffshülle da hab ich dann $currenthull
sowas in der art! hab da leider nichts passendes in den befehlen gefunden. der wert heißt ja, glaube ich zumindest Yield oder so?
Posted: Sat, 1. Sep 07, 17:56
by SymTec ltd.
Hast du schon versucht, den Befehl
<RetVar> = <RefObj> erhalte Asteroiden-Daten (get asteroid yield)
auf die Debris-Felder anzuwenden?
Posted: Sun, 2. Sep 07, 02:22
by Joda
nein noch nicht!
werde das gleich mal ausprobieren
Posted: Sun, 2. Sep 07, 13:26
by Joda
kann mir bei diesem script mal jemand helfen?
möchte kleinstasteroiden in den frachtraum beamen.
Code: Select all
[THIS] -> set command: COMMAND_COLLECT_DEBRIS target= $sector target2= null par1= null par2= null
= [THIS] -> call script "!move.movetosector" : arg0=$sector,
start :
* now i am in the sector, search for wares
$flags = [Find.Nearest] | [Find.Multiple] | 32768
$sector = 1
* find the 5 nearest wares
$range = [THIS] -> get scanner range
$warearray = find debris: sector= [SECTOR] resource= null min yield= null flags= $flags refobj= [THIS] num= 1 max distance= $range refpos= null
$amount = 0
$sector = $warearray
* check if one of these wares fits into my ship
$numwares = size of array $warearray
$i = 0
$sector = $i < $numwares
$wareobj = $warearray [ $i ]
$ware = $wareobj -> get resource waretype of asteroid
* skip if [THIS] -> can transport ware $ware
* return null
* skip if $Collectible -> has collectible rocks
* return null
$free = [THIS] -> get free amount of ware $ware in cargo bay
* skip if $free >= $numwares
* return null
$scan = [THIS] -> get amount of ware Frachtscanner in cargo bay
$trans = [THIS] -> get amount of ware Transporter S_1 in cargo bay
* skip if $trans AND $scan
* return null
$resourcezahl = $flags -> get asteroid yield
$dist = get distance between $warearray and [THIS]
if $dist <= 1000
= [THIS] -> add $resourcezahl units of $ware
$warearray -> destruct: show no explosion= [FALSE]
@ = wait 5000 ms
* @ $ret = [THIS] -> move to ware object $wareobj for collecting: timeout= 600000 ms
goto label start
end
return null
EDIT: codetags eingefügt
MADxHAWK
Posted: Sun, 2. Sep 07, 13:48
by UniTrader
wenn du was aus den Browser kopierst ohne ne modifizierte x2Script.xsl zu verwenden wären Code-Tags angeracht, da sieht man die einrückungen für if/while-bedingungen
nun zu dem was mir auffält:
1.
$flags = [Find.Nearest] | [Find.Multiple]
| 32768
wofür soll denn das grün markierte sein?? ich kann mir darauf keinen reim machen...
2.
Code: Select all
$i = 0
$sector = $i < $numwares
$wareobj = $warearray [ $i ]
.......
sieht aus als wolltest du hier ne Schleife machen, aber die funzen in X so nicht...
probiers mal so rum:
$i = size of array $warearray
while $i
| dec $i =
| $wareobj = $warearray [ $i ]
| .....
| das was du mit den einzelnen einträgen des Arrays machen wolltest
| ....
end
ach ja, die Schleife hast du an anderer stelle anders realisiert, und zwar mit goto... ist aber nicht das Optimum, ich verwende das goto nur, wenn ich innerhalb einer Schleife bedingungen prüfe und wenn da was nicht passt wird damit zum neustart vor der schleife gesprungen...
3.
$resourcezahl = $flags -> get asteroid yield
warum willst du von deinen Suchparametern die Ausbeute erhalten?? kommt mir irgendwie sinnlos vor...
mehr finde ich jetzt nicht aber ich werd auch aus dem gesamten Code ned wirklöich schlau...[/code]
Posted: Sun, 2. Sep 07, 13:56
by Joda
naja im scripten bin ich ein ziemlicher noob!
Das script besteht eigentlich aus 3 scripten die ich irgendwie versucht habe zu vereinen. hab da mal den tip dazu gekrigt, wenn ich mich nicht auskenne bestehende scripts einfach anzupassen.
und naja das ist das resultat
Posted: Sun, 2. Sep 07, 14:11
by Lucike
@UniTrader
Die Zahl 32768 soll seine Berechtigung haben. Dadurch soll das finden von Minenfelder schneller gehen. Naja, ist zu vernachlässigen. Falsch ist es aber nicht.
@Joda
Warum schaust Du nicht mal in die EgoSkripte und baust diese ein wenig um? Das habe ich dir
hier aber schon mal vorgeschlagen.
EDIT: Ach Gott, wie ich sehen muss hast Du das ja getan.
!ship.cmd.collectrocks.std.xml
Code: Select all
001 [THIS] -> set command: COMMAND_COLLECT_DEBRIS target=$sector target2=null par1=null par2=null
002
003 @ = [THIS] -> call script '!move.movetosector' : sector=$sector
004
005 * now i am in the sector, search for wares
006 $flags = [Find.Nearest] | [Find.Multiple] | 32768
007 while 1
008
009 * find the 5 nearest wares
010 $range = [THIS] -> get scanner range
011 $warearray = find debris: sector=[SECTOR] resource=null min yield=null flags=$flags refobj=[THIS] num=5 max distance=$range refpos=null
012
013 $amount = 0
014 if $warearray
015 * check if one of these wares fits into my ship
016 $numwares = size of array $warearray
017
018 $i = 0
019 while $i < $numwares
020 $wareobj = $warearray[$i]
021 $ware = $wareobj -> get resource waretype of asteroid
022 if [THIS] -> can transport ware $ware
023 if [THIS] -> get free amount of ware $ware in cargo bay
024 @ $amount = [THIS] -> call script '!move.collectrocks' : GALOBJ of debris=$wareobj
025 break
026 end
027 end
028 $i = $i + 1
029 end
030 end
031
032 if not $amount
033 $wait = = random value from 20000 to 30000 - 1
034 @ = [THIS] -> move around $wait ms
035 @ = wait randomly from 100 to 200 ms
036 end
037 end
038 return null
!move.collectrocks.xml
Code: Select all
001 @ = wait randomly from 100 to 200 ms
002 skip if $wareobj -> exists
003 return null
004 skip if $wareobj -> is of class Debris
005 return null
006
007 * check if debris mineral typ is loadable
008
009 $ware = $wareobj -> get resource waretype of asteroid
010
011 skip if [THIS] -> can transport ware $ware
012 return null
013 $free = [THIS] -> get free amount of ware $ware in cargo bay
014 skip if $free
015 return null
016
017 while 1
018 skip if $wareobj -> exists
019 return null
020
021 skip if $wareobj -> has collectible rocks
022 return null
023
024 $sector = $wareobj -> get sector
025 if $sector != [ENVIRONMENT]
026 @ = [THIS] -> call script '!move.movetosector' : sector=$sector
027 @ = wait randomly from 250 to 500 ms
028 continue
029 end
030 if $ret == FLRET_FIREFREE
031 if $wareobj -> has collectible rocks
032 $catchedamount = [THIS] -> catch ware object $wareobj
033 return $catchedamount
034 end
035 $ret = FLRET_TIMEOUT
036 @ = wait randomly from 100 to 200 ms
037 continue
038 end
039
040 @ $ret = [THIS] -> move to ware object $wareobj for collecting: timeout=600000 ms
041 if $ret != FLRET_FIREFREE
042 skip if $ret == FLRET_INTERRUPTED
043 return null
044 @ = wait randomly from 100 to 200 ms
045 end
046 end
047 return null
Posted: Sun, 2. Sep 07, 18:09
by Joda
ja das habe ich getan! und versucht diese "umzubauen" was dabei herausgekommen ist das siehst du ja
habe das was ich versanden hab aus den beiden scripten versucht in dem einen unterzukrigen. ich werd daraus einfach nicht schlau! hab das schon mal so hingekrigt das es waren in den frachtraum gebeamt hat aber es hat den Quell asteroiden nicht zersört und so weiter in den frachtraum eingeladen!
kann mir jemand tipps geben oder mal ne brauchbare LÖSUNG anbieten?
Edit: helft mir mal zum verständnis
$numwares = size of array $warearray
ist doch das selbe wie <RetVar> = <RefObj> erhalte Asteroiden-Daten
oder?
Posted: Sun, 2. Sep 07, 20:11
by Lucike
Joda wrote:Edit: helft mir mal zum verständnis
$numwares = size of array $warearray
ist doch das selbe wie <RetVar> = <RefObj> erhalte Asteroiden-Daten
oder?
Naja, nicht ganz. Mit "size of array" bekommst du die Anzahl der Elemente in einer Tabelle.
Mein Vorschlag. Ob die ganzen Befehle mit einem Debris funktionieren muss man testen. Auch sollte man die Menge des Minerales mit dem normalen Einsammeln vergleichen.
Code: Select all
001 [THIS] -> set command: COMMAND_COLLECT_DEBRIS target=$sector target2=null par1=null par2=null
002
003 @ = [THIS] -> call script '!move.movetosector' : sector=$sector
004
005 * now i am in the sector, search for wares
006 $flags = [Find.Nearest] | [Find.Multiple] | 32768
007 while 1
008
009 * find the 5 nearest wares
010 $range = [THIS] -> get scanner range
011 $warearray = find debris: sector=[SECTOR] resource=null min yield=null flags=$flags refobj=[THIS] num=5 max distance=$range refpos=null
012
013 $amount = 0
014 if $warearray
015 * check if one of these wares fits into my ship
016 $numwares = size of array $warearray
017
018 $i = 0
019 while $i < $numwares
020 $wareobj = $warearray[$i]
021 $ware = $wareobj -> get resource waretype of asteroid
022 if [THIS] -> can transport ware $ware
023 if [THIS] -> get free amount of ware $ware in cargo bay
024
025 if [THIS] -> get amount of ware Transporter in cargo bay
026 $amount = null
027 @ = [THIS] -> follow object $wareobj with precision 5000 m
028 $distance = get distance between [THIS] and $wareobj
029 if $distance <= 6000
030 $wareobjamount = $wareobj -> erhalte Asteroiden-Daten
031 $wareobj -> destruct: show no explosion=[TRUE]
032 skip if $wareobj -> exists
033 $amount = [THIS] -> add $wareobjamount units of $ware
034 end
035 break
036 else
037 @ $amount = [THIS] -> call script '!move.collectrocks' : GALOBJ of debris=$wareobj
038 break
039 end
040
041 end
042 end
043 $i = $i + 1
044 end
045 end
046
047 if not $amount
048 $wait = = random value from 20000 to 30000 - 1
049 @ = [THIS] -> move around $wait ms
050 @ = wait randomly from 100 to 200 ms
051 end
052 end
053 return null
Posted: Mon, 3. Sep 07, 00:46
by Joda
das funktioniert einwandfrei
er sammelt nur auch nicht sammelbare asteroiden das könnte man doch mit dem befehl " if $wareobj-> has collectible rocks" verhindern oder? einfach in zeile 24 einfügen zu den abfragen!? kann das erst morgen abend nach der arbeit testen aber trotzdem
danke danke danke!!!!!!!!!!!!!!!!!!
Posted: Mon, 3. Sep 07, 01:05
by Lucike
Joda wrote:... das könnte man doch mit dem befehl " if $wareobj-> has collectible rocks" verhindern oder? einfach in zeile 24 einfügen zu den abfragen!?
Genau, diese Abfrage kommt ja erst im Skript
!move.collectrocks.xml. Für den Mineralstaubsauger brauchen wir das bereits im Skript
ship.cmd.collectrocks.std.xml.
Gruß
Lucike
Posted: Sun, 9. Sep 07, 16:03
by Joda
noch mal ne kleine frage
wie krigt man es hin das ein kommando im special menü schon vorhanden ist aber es man erst bei einem bestimmten uprade anwählen kann, so wie bei sammle mineralien in sektor?
wenn ich es so
$key = COMMAND_TYPE_SPECIAL_49
set script command upgrade: command= $key upgrade= Spezialsoftware Mk1
global script map: set: key= $key , class= Ship , race= Player , script= "astro.sammler.std" , prio= 0
return null
mache kommt das command erst wenn ich spezialsoftware mk1 installiere.
die text dateien habe ich schon erstellt und wenn das jetzt hinhaut stell ich es mal als download zur verfügung wenn lucike es mir gestattet
das script ist wirklich sehr nützlich und man kann ne menge an resourcen sammeln! es funktioniert wunderbar zusammen mit dem mineraliensprengmeister aus dem bonuspack auch oos!