Kleinasteroiden in den Frachtraum Beamen lassen, codeschnipselhilfe bitte

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

Post Reply
FritzHugo3
Posts: 4663
Joined: Mon, 6. Sep 04, 17:24
x4

Kleinasteroiden in den Frachtraum Beamen lassen, codeschnipselhilfe bitte

Post by FritzHugo3 » Tue, 18. Dec 12, 10:53

Nach langer Zeit melde ich mich mal wieder aus der Versenkung.

Das Script sollte (theoretisch) folgendes tun.
1. suche alle einsammelbaren Kleinasteroiden in scannerreichweite der aktuellen schiffsposition.
2. fals dass Schiff weiter als 2500km von nächstegelegenen Asteroiden weg is, flieg bis auf minimum 2500km hin.
3. schau nach wieviele erze das Teil in sich hat.
4. füge das dem Frachtrauch hinzu und zerstöre den Kleinasteroiden.

So weit also die Theorie.
Wenn ich das Script starte fliegt mein schiff (sogar ausserhalb des Scanners) ca. in die Sectormitte, bleibt stehen und lässt es sich dort gutgehen ^^.


das hier sucht doch alle Kleinasteroiden, also auch die die noch zu groß zum einsammeln sind oder?

Code: Select all

$gefundeneDebris = find debris: sector=$Sektor resource=null min yield=null flags=[Find.Nearest] refobj=[THIS] num=null max distance=$Scannerreichweite refpos=null
1. Was ist "num" für ein Wert und viel wichtiger, wie kann ich die einsammelbaren Kleinasteroiden von den Kleinasteroiden zum "beschießen" separieren?

Wenns ohne arrays machbar ist, wäre ich nicht böse drumm *g*, Voprstellen könnte ich es mir mit arrys, dass er von 1-99schlagmichtot so lange weiterschaltet, bis es ein einsammelbarer ist. Aber kein Plan wie das aussehen muss.

Nach meinem Verständnis nach, sollte er falls mehrere sammelbare Kleinasteroiden im 2500km Bereich liegen, diese nach jeweils 1Sekunde nach und nach einsammeln ohne weiterzufliegen, richtig? Falls nicht warum nicht *g*.



Was ich bisher verbrochen habe ;-)

Code: Select all

   $Menue = create custom menu array
   add custom menu item to array $Menue: text='01 Asteroiden zerkleinern' returnvalue=1
   add custom menu item to array $Menue: text='02 Asteroiden sammeln (mit dem Transporter)' returnvalue=2
   $Menue = open custom menu: title='Auswahlmenü' description=null option array=$Menue


   if $Menue == 2
   |$Sektor = [THIS] -> get user input: type=Var/Sector, title=$Sektorauswahl
   |if [THIS] -> get amount of ware Spezialsoftware Mk1 in cargo bay
   ||if [THIS] -> get amount of ware Transporter in cargo bay
   |||if [THIS] -> get amount of ware Mineralien Kollektor in cargo bay
   ||||if [THIS] -> get amount of ware Mineralienscanner in cargo bay
 @ |||||= [THIS] -> call script '!move.movetosector' :  sector=$Sektor
   |||||$Scannerreichweite = [THIS] -> get scanner range
   |||||
   nochmal:
   |||||$gefundeneDebris = find debris: sector=$Sektor resource=null min yield=null flags=[Find.Nearest] refobj=[THIS] num=null max distance=$Scannerreichweite refpos=null
   |||||
   |||||$kannEingesammeltWerden = $gefundeneDebris -> has collectible rocks
   |||||
   |||||$PosX = $kannEingesammeltWerden -> get x position
   |||||$PosY = $kannEingesammeltWerden -> get y position
   |||||$PosZ = $kannEingesammeltWerden -> get z position
   |||||
 @ |||||= [THIS] -> call script '!move.movetoposition' :  sector=$Sektor  position x=$PosX  position y=$PosY  position z=$PosZ  precision=2500
   |||||
   |||||$Beamdistanz = 2500
   |||||
   |||||$Rock = find debris: sector=$Sektor resource=null min yield=null flags=[Find.Nearest] refobj=[THIS] num=null max distance=$Beamdistanz refpos=null
   |||||
   |||||$kannEingesammeltWerden = $Rock -> has collectible rocks
   |||||
   |||||$ErzTyp = $kannEingesammeltWerden -> get resource waretype of asteroid
   |||||$ErzTypGroesse = get volume of ware $ErzTyp
   |||||$Anzahl = $kannEingesammeltWerden -> get asteroid yield
   |||||
   |||||$benoetigterPlatz = $Anzahl * $ErzTypGroesse
   |||||if [THIS] -> can transport ware $ErzTyp
   ||||||$freierLaderaum = [THIS] -> get free volume of cargo bay
   ||||||if $freierLaderaum >= $benoetigterPlatz
   |||||||= [THIS] -> add $Anzahl units of $ErzTyp
   |||||||$kannEingesammeltWerden ->destruct: show no explosion=[TRUE]
   |||||||if $freierLaderaum < $benoetigterPlatz
 @ ||||||||= [THIS] -> call script '!move.returntohomebase' : 
   |||||||end
   ||||||end
   |||||end
   ||||end
   |||end
   ||end
   |end
   end
 @ = wait 1000 ms
   goto label nochmal
   return null
(ich weis, die richtigen Coder mögen den "goto" nicht für schleifen, ich finde ihn super *g*)


Wer sich genötigt fühlt die zwei drei Codezeilen direkt ins Script zu schreiben, tut euch keinen Zwang an :lol: :roll:

www.BodenseeJugend.de/sonstiges/X3TC-AP/a1.zip
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
X2-Illuminatus
Moderator (Deutsch)
Moderator (Deutsch)
Posts: 24962
Joined: Sun, 2. Apr 06, 16:38
x4

Post by X2-Illuminatus » Tue, 18. Dec 12, 11:25

FritzHugo3 wrote:1. Was ist "num" für ein Wert und viel wichtiger, wie kann ich die einsammelbaren Kleinasteroiden von den Kleinasteroiden zum "beschießen" separieren?
"num" sollte die Anzahl der Asteroiden sein, die der Befehl findet. Um mehr als einen zu erhalten, musst du als Flag noch zusätzlich [Find.Multiple] nutzen.

Edit: Zweite Frage vergessen zu beantworten.

Check mal die debris, die gefunden wird, auf ihren Subtype. Aufsammelbare Kleinstasteroiden sollten einen anderen Subtype haben als diejenigen, die man noch zerkleinern muss.

FritzHugo3 wrote:(ich weis, die richtigen Coder mögen den "goto" nicht für schleifen, ich finde ihn super *g*)
Es geht nicht um mögen oder nicht mögen, sondern um die Sauberkeit und Lesbarkeit des Codes. Je mehr gotos (und damit je mehr "Sprünge") du im Code hast, desto unsauberer und schwerer zu lesen wird er. Dementsprechend sollte man auf gotos, wann immer möglich, verzichten. Gerade in deinem Fall würde es sich anbieten, eine ganz normale while-Schleife zu nehmen.
Nun verfügbar! X3: Farnham's Legacy - Ein neues Kapitel für einen alten Favoriten

Die komplette X-Roman-Reihe jetzt als Kindle E-Books! (Farnhams Legende, Nopileos, X3: Yoshiko, X3: Hüter der Tore, X3: Wächter der Erde)

Neuauflage der fünf X-Romane als Taschenbuch

The official X-novels Farnham's Legend, Nopileos, X3: Yoshiko as Kindle e-books!

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

Post by FritzHugo3 » Tue, 18. Dec 12, 11:56

und wieso fliegt das schiff bei scriptstart in die mitte des sektors obwohl ich das direkt neben asteroiden weit aussen geparkt hab? Also das "find near" funzt irgendwie garnich.
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
X2-Illuminatus
Moderator (Deutsch)
Moderator (Deutsch)
Posts: 24962
Joined: Sun, 2. Apr 06, 16:38
x4

Post by X2-Illuminatus » Tue, 18. Dec 12, 12:08

Möglichkeit 1: Es wird überhaupt keine debris gefunden. Schon mal probiert statt

Code: Select all

num=null
einen Zahlenwert (mindestens "1") einzugeben?

Möglichkeit 2: Die Asteroiden (debris) sind nicht aufsammelbar.

In beiden Fällen läuft dein Script ohne jegliche Abbruchbedingung einfach weiter. Was dann natürlich auch heißt, dass $kannEingesammeltWerden = 0 (oder null oder False) ist und ebenso dann auch die Koordinaten $PosX, $PosY und $PosZ als 0 ermittelt werden, was der Sektormitte entspricht.

Edit: Mir fällt gerade auf, dass du die Koordinaten von $kannEingesammeltWerden abfragen willst, was aber so oder so nur ein True/False-Wert ist. Stattdessen solltest du die Koordinaten von $gefundeneDebris abfragen.

Code: Select all

|||||If $gefundeneDebris -> has collectible rocks 
|||||| 
||||||$PosX = $gefundeneDebris -> get x position 
||||||$PosY = $gefundeneDebris -> get y position 
||||||$PosZ = $gefundeneDebris -> get z position
||||||...
|||||end
Nun verfügbar! X3: Farnham's Legacy - Ein neues Kapitel für einen alten Favoriten

Die komplette X-Roman-Reihe jetzt als Kindle E-Books! (Farnhams Legende, Nopileos, X3: Yoshiko, X3: Hüter der Tore, X3: Wächter der Erde)

Neuauflage der fünf X-Romane als Taschenbuch

The official X-novels Farnham's Legend, Nopileos, X3: Yoshiko as Kindle e-books!

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

Post by FritzHugo3 » Mon, 24. Dec 12, 09:45

hu hu ich find den befehl zum "makiere ziel" nicht

also irgendwie sowas wie "set Object as target" und umgekehrt mit "get target Object"

ich bedanke mich schonmal im vorraus.
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!

|K.O.S.H.
Posts: 3724
Joined: Fri, 19. Dec 03, 10:36
x3tc

Post by |K.O.S.H. » Mon, 24. Dec 12, 11:24

falls es für tc ist, kannst du auch eifnach mein script verwenden ;)

http://forum.egosoft.com/viewtopic.php? ... 32#3308632
Wing Commander Mod - German Topic
06.07.11 - v1.1 RELEASED!

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

Post by FritzHugo3 » Mon, 24. Dec 12, 12:12

hab ich doch schon längst kosch, bzw. habe ich mir die 6-7 ähnlichsten erweiterungen ausgedruckt und ähhmm sagen wir mal inspirieren lassen vom code, um festzustellen, dass ich zu doof war den fremden code zu verstehen oder dass der code mir so nicht gefällt oder das doch was anderes ist oder oder.

Also habe ich angefangen doch wieder meine ganz eigene wurst zu schreiben und hab noch mal von vorne begonnen. Und diesmal ganz ohne arrys (weil ich dazu kronisch auch zu blöd bin, verstehe meine alten "eigenen" scripte nicht mehr, die ich mit viel hilfe von euch irgendwie zum laufen bekommen habe *g*. sogar erstaunlich gut lol)


Bei dir bleiben wie es im tread steht zum beispiel die asteroiden leer zurück im all z.B.

bei anderen scripts gibts oos und insector unterschiede.

Ich hätte nunmal gerne eine correcte "baue mineralien ab" umsetzung mit dem Beamstrahl, schade genug, dass es kein befehl dafür gibt und eine kleine grafikanimation, vielleicht ja in rebirth (träum).


Wehms interessiert mein bisheriger code: (ja ja schlagt ruhig die hände übern kops und ja ich weis, dass könnte man alles einfacher und kleiner schreiben, ich finde es so wie es ist halt übersichtlicher, weil Idiotensicher. Komme auch so trotzdem oft genug durcheinander mit den "end's", was wo offen ist und welcher "end" für welches "if" ist.

Code: Select all

Script a95test
Version: 0
for Script Engine Version: 52

Description

Arguments

Source Text

   if not [THIS]
   |if not [THIS] -> get amount of ware Kampfsoftware MK1 in cargo bay
   ||display subtitle text: text='Kampfsoftware MK1 fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |
   |if not [THIS] -> get amount of ware Kampfsoftware MK2 in cargo bay
   ||display subtitle text: text='Kampfsoftware MK2 fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |
   |if not [THIS] -> get amount of ware Spezialsoftware MK1 in cargo bay
   ||display subtitle text: text='Spezialsoftware MK1 fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |
   |if not [THIS] -> get amount of ware Transporter in cargo bay
   ||display subtitle text: text='Transporter fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |
   |if not [THIS] -> get amount of ware Mineralien Kollektor in cargo bay
   ||display subtitle text: text='Mineralienkollektor fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |
   |if not [THIS] -> get amount of ware Mineralienscanner in cargo bay
   ||display subtitle text: text='Mineralienscanner fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |display subtitle text: text='Befehl wird abgebrochen!' duration=1000 ms
   |return null
   end
   
   $Sektor = [THIS] -> get user input: type=Var/Sector, title=$Sektorauswahl
   $ImSektor = [THIS] -> get sector
   if not $ImSektor == $Sektor
 @ |= [THIS] -> call script '!move.movetosector' :  sector=$Sektor
 @ |= wait 3000 ms
   end
   
   nochmal:
   $FindeAsteroid = find debris: sector=$Sektor resource=null min yield=null flags=[Find.Nearest] refobj=[THIS] num=null max distance=20000 refpos=null
   
   if not $FindeAsteroid
   |display subtitle text: text='Kein Asteroidenrfeld gefunden.' duration=1000 ms
   |return null
   end
   
   if $FindeAsteroid
   |$existiert = $FindeAsteroid -> exists
   |if $existiert
   ||
   ||$kannEingesammeltWerden = $FindeAsteroid -> has collectible rocks
   ||
   ||if $kannEingesammeltWerden
   zurueck:
   |||$Entfernung = get distance between [THIS] and $FindeAsteroid
   |||if $Entfernung <= 2500
   ||||
   ||||$ErzTyp = $FindeAsteroid -> get resource waretype of asteroid
   ||||$ErzTypGroesse = get volume of ware $ErzTyp
   ||||$Anzahl = $FindeAsteroid -> get debris count
   ||||$benoetigterPlatz = $Anzahl * $ErzTypGroesse
   ||||
   ||||if not [THIS] -> can transport ware $ErzTyp
   |||||display subtitle text: text='Ich kann doch garkein Erz Transportieren?!' duration=1000 ms
 @ |||||= [THIS] -> call script '!move.returntohomebase' : 
   |||||return null
   ||||end
   ||||
   ||||$freierLaderaum = [THIS] -> get free volume of cargo bay
   ||||if not $freierLaderaum >= $benoetigterPlatz
   |||||display subtitle text: text='Kein Platz mehr ich flieg Heimwärts.' duration=1000 ms
 @ |||||= [THIS] -> call script '!move.returntohomebase' : 
   |||||return null
   ||||end
   ||||
   ||||= [THIS] -> add $Anzahl units of $ErzTyp
   ||||$Anzahl ->destruct: show no explosion=[TRUE]
   ||||
   |||else
   ||||
   ||||if not $Entfernung <= 2500
   |||||
   |||||$PosX = $FindeAsteroid -> get x position
   |||||$PosY = $FindeAsteroid -> get y position
   |||||$PosZ = $FindeAsteroid -> get z position
   |||||
 @ |||||= [THIS] -> call script '!move.movetoposition' :  sector=$Sektor  position x=$PosX  position y=$PosY  position z=$PosZ  precision=2500
   |||||goto label zurueck
   ||||end
   |||end
   ||end
   |end
   |
   |if not $kannEingesammeltWerden
   ||display subtitle text: text='Schießbefehl' duration=1000 ms
   ||
   ||
   ||
   ||
   ||
   ||
   ||
   ||
   ||
   |end
   end
 @ = wait 3000 ms
   goto label nochmal
   return null
   
   
   $FindeAsteroid = find asteroid: sector=$Sektor resourcetype=null min.yield=null flags=[Find.Nearest] refobj=[THIS] maxdist=20000 maxnum=null refpos=null
   
   $a = $a -> get debris count
   $a = $a -> get flying ware count
   $a = $a -> fire all turrets on target: $a, next target filter=$a
 @ $a = $a -> attack run on target $a : timeout=$ams speedlimit=$a
   $a ->select and switch lasers for target $a in turret $a: scan for friends $a
   $a = $a -> select best lasers for target $a in turret $a: scan for friends $a
   $a = $a -> is $a in firing range of turret $a
   $a ->set attack target to $a
   $a = $a -> get attack target
 @ $a = $a -> attack run on target $a : timeout=$a ms
 @ $a = $a -> turn turret $a to target $a : timeout=$a ms
   $a = $a -> fire lasers on target $a using turret $a
   $a = $a -> move to debris/asteroid $a and turn turret [FALSE] to target: timeout=$a
   if [THIS] -> is $Kleinasteroiden in firing range of turret [TRUE]
   |= [THIS] -> fire lasers on target $Kleinasteroiden using turret $Laser
   end
   $a = $a -> get subtype
   return null
   
Im moment macht er alles so wie er es soll, ausser, dass er mehrere kleinasteroiden gleichzeitig zerstört und das soller natürlich nich.und weil ich nicht "get debris count" als destruct-ziel nehmen kann,


also nochmals die frage nach den "ziel" befehlen
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 » Mon, 24. Dec 12, 14:47

Code: Select all

Script a95test
Version: 0
for Script Engine Version: 52

Description

Arguments

Source Text

   if not [THIS]
   |if not [THIS] -> get amount of ware Kampfsoftware MK1 in cargo bay
   ||display subtitle text: text='Kampfsoftware MK1 fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |
   |if not [THIS] -> get amount of ware Kampfsoftware MK2 in cargo bay
   ||display subtitle text: text='Kampfsoftware MK2 fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |
   |if not [THIS] -> get amount of ware Spezialsoftware MK1 in cargo bay
   ||display subtitle text: text='Spezialsoftware MK1 fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |
   |if not [THIS] -> get amount of ware Transporter in cargo bay
   ||display subtitle text: text='Transporter fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |
   |if not [THIS] -> get amount of ware Mineralien Kollektor in cargo bay
   ||display subtitle text: text='Mineralienkollektor fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |
   |if not [THIS] -> get amount of ware Mineralienscanner in cargo bay
   ||display subtitle text: text='Mineralienscanner fehlt.' duration=1000 ms
 @ ||= wait 3000 ms
   |end
   |display subtitle text: text='Befehl wird abgebrochen!' duration=1000 ms
   |return null
   end
in diesem Teil sehe ich schon mal einen fehler: du hinterlegst nirgends, ob das Script abgebrochen werden soll oder nicht, sprich es wird in jedem fall abgebrochen.. ausserdem ist die erste Bedingung nicht wirklich sauber, ein "if [THIS] -> exists" wäre angebrachter.. hier mal wie ich es lösen würde:

Code: Select all

if not [THIS] -> exists
* sofortiger abbruch, weil dieses Script auf einem Objekt laufen muss
| return null
end

$ScriptBeenden = [FALSE]

if not [THIS] -> get amount of ware Kampfsoftware MK1 in cargo bay
|$ScriptBeenden = [TRUE]
|display subtitle text: text='Kampfsoftware MK1 fehlt.' duration=1000 ms
|@ = wait 3000 ms
end

if not [THIS] -> get amount of ware Kampfsoftware MK2 in cargo bay
|$ScriptBeenden = [TRUE]
|display subtitle text: text='Kampfsoftware MK2 fehlt.' duration=1000 ms
|@ = wait 3000 ms
end
 
if not [THIS] -> get amount of ware Spezialsoftware MK1 in cargo bay
|$ScriptBeenden = [TRUE]
|display subtitle text: text='Spezialsoftware MK1 fehlt.' duration=1000 ms
|@ = wait 3000 ms
end

if not [THIS] -> get amount of ware Transporter in cargo bay
|$ScriptBeenden = [TRUE]
|display subtitle text: text='Transporter fehlt.' duration=1000 ms
| @ = wait 3000 ms
end

if not [THIS] -> get amount of ware Mineralien Kollektor in cargo bay
|$ScriptBeenden = [TRUE]
|display subtitle text: text='Mineralienkollektor fehlt.' duration=1000 ms
| @ = wait 3000 ms
end

if not [THIS] -> get amount of ware Mineralienscanner in cargo bay
|$ScriptBeenden = [TRUE]
|display subtitle text: text='Mineralienscanner fehlt.' duration=1000 ms
| @ = wait 3000 ms
end

if $ScriptBeenden
|display subtitle text: text='Befehl wird abgebrochen!' duration=1000 ms
|return null
end
weiter gehts mit diesem Abschnitt:
if $FindeAsteroid
|$existiert = $FindeAsteroid -> exists
|if $existiert
||
||$kannEingesammeltWerden = $FindeAsteroid -> has collectible rocks
||
||if $kannEingesammeltWerden

die zwischenvariablen kannst du dir sparen, vor allem wenn du sie nur einmal verwendest, das geht so viel übersichtlicher:

if $FindeAsteroid
|if $FindeAsteroid -> exists
||
||if $FindeAsteroid -> has collectible rocks
|||

wenn du dir nicht merken kannst wofür diese prüfungen sind bau lieber kommentare ein statt die Variablenliste unnötig lang werden zu lassen ;)

und ich denke ich habe gerade den fehler in deinem Script gefunden: du bist mit gotos umhergesprungen und hast die übersicht verloren zwischen was du hin- und herspringst :roll:

||$kannEingesammeltWerden = $FindeAsteroid -> has collectible rocks
||
||if $kannEingesammeltWerden
zurueck:
|||$Entfernung = get distance between [THIS] and $FindeAsteroid
|||if $Entfernung <= 2500
||||
||||$ErzTyp = $FindeAsteroid -> get resource waretype of asteroid
||||$ErzTypGroesse = get volume of ware $ErzTyp
||||$Anzahl = $FindeAsteroid -> get debris count
||||$benoetigterPlatz = $Anzahl * $ErzTypGroesse
||||
||||if not [THIS] -> can transport ware $ErzTyp
|||||display subtitle text: text='Ich kann doch garkein Erz Transportieren?!' duration=1000 ms
||||| @ = [THIS] -> call script '!move.returntohomebase' :
|||||return null
||||end
||||
||||$freierLaderaum = [THIS] -> get free volume of cargo bay
||||if not $freierLaderaum >= $benoetigterPlatz
|||||display subtitle text: text='Kein Platz mehr ich flieg Heimwärts.' duration=1000 ms
||||| @ = [THIS] -> call script '!move.returntohomebase' :
|||||return null
||||end
||||
||||= [THIS] -> add $Anzahl units of $ErzTyp
||||$Anzahl ->destruct: show no explosion=[TRUE]
||||
|||else
||||
||||if not $Entfernung <= 2500
|||||
|||||$PosX = $FindeAsteroid -> get x position
|||||$PosY = $FindeAsteroid -> get y position
|||||$PosZ = $FindeAsteroid -> get z position
|||||
||||| @ = [THIS] -> call script '!move.movetoposition' : sector=$Sektor position x=$PosX position y=$PosY position z=$PosZ precision=2500
|||||goto label zurueck

zuerst gehst du per if..else in die nähe eines NICHT EINSAMMELBAREN Asteroiden und springst dann per goto zum Code für die einsammelbaren Asteroiden zurück..

ein weiterer tipp noch: wenn du den überblick verlierst welches end zu welchem while/if gehört dann versuche doch einfach die offenen ifs klein und kurz zu halten.. so wie du es z.B. am anfang deines scriptes gehandhabt hast ;)

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

Post by FritzHugo3 » Mon, 24. Dec 12, 22:51

Der code funkrioniert aber im moment mal so wie er ist, ich habs getestet, ich will doch nur einen Target befehl ^^.

bye the way, bis dahin sind alle astros einsammelbar ;-). Das else gilt für das, if entfernung und das soll es ja auch und es funktioniert.


Das war meine Frage:

"hu hu ich find den befehl zum "makiere ziel" nicht
also irgendwie sowas wie "set Object as target" und umgekehrt mit "get target Object"

(Also wie, wenn ich "t" im freien Flug oder im Schifsmenü drücke)
ich bedanke mich schonmal im vorraus."
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
X2-Illuminatus
Moderator (Deutsch)
Moderator (Deutsch)
Posts: 24962
Joined: Sun, 2. Apr 06, 16:38
x4

Post by X2-Illuminatus » Thu, 27. Dec 12, 19:07

Beide Befehle, zum Setzen und Finden des Ziels des Spielerschiffs, finden sich in den Fly Commands:

<RetVar/IF> get player tracking aim
set player tracking aim to <RefObj>
Nun verfügbar! X3: Farnham's Legacy - Ein neues Kapitel für einen alten Favoriten

Die komplette X-Roman-Reihe jetzt als Kindle E-Books! (Farnhams Legende, Nopileos, X3: Yoshiko, X3: Hüter der Tore, X3: Wächter der Erde)

Neuauflage der fünf X-Romane als Taschenbuch

The official X-novels Farnham's Legend, Nopileos, X3: Yoshiko as Kindle e-books!

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

Post by FritzHugo3 » Thu, 27. Dec 12, 23:21

und für nicht spielerschiff?
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
Reflexer
Posts: 863
Joined: Sat, 21. Feb 09, 12:54
x4

Post by Reflexer » Fri, 28. Dec 12, 11:07

gibts bei nicht-spielerschiffen nicht. wozu auch?

die engine funktioniert bei ki-schiffen ganz anders.

Post Reply

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