[DISKUSSION] Allgemeine S&M-Fragen III

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

GodsAngel95
Posts: 184
Joined: Tue, 28. Sep 10, 19:48
x3tc

Post by GodsAngel95 »

Evtl. weil ich zu blöd bin Tasks zu benutzen und es nicht auf dem aktuellen Starten will.

Aber Tasks bieten sich ja auch immer noch an ;-)

Jetzt ist es mir klar geworden, trotzdem danke.

NewWorlds
- Modmember DE - EN
MG-Mod - Modmember DE - EN
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

<RefObj> is ignored unless you use START.
Mh, das wusste ich bisher auch nicht.
aufrufe, es volkommen egal ist, was ich als $Object habe und es sowieso auf [THIS] gestartet wird?
Nicht vollkommen egal. Obwohl das aufgerufene Skript beim Aufrufer weiterläuft, ist [THIS] innerhalb des Skripts das <RefObj>.
wofür willst du denn ein anderes Script auf einem anderen Objekt aufrufen?
Mir fällt jetzt ehrlich gesagt auch keine sinnvolle Verwendung ein, die man nicht auch durch explizites übergeben des Referenzobjekts lösen könnte.
Sprich, statt
$ret = $refObj -> call script 'xyz' :
sagt man
$ret = [THIS] -> call script 'xyz' : reference object=$refObj.

Ich war bisher immer davon ausgegangen, dass die erste Version den Task 0 des $refObj abbrechen würde...

MfG,
ScRaT
GodsAngel95
Posts: 184
Joined: Tue, 28. Sep 10, 19:48
x3tc

Post by GodsAngel95 »

Tut es ja auch. Es unterbricht ihn volkommen.

NewWorlds
- Modmember DE - EN
MG-Mod - Modmember DE - EN
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Also ich habe gerade eben folgendes getestet:

SkriptA läuft als Endlosschleife auf Schiff1.

SkriptB läuft auf Schiff2 und macht nichts weiter als ein SkriptC, welches auch eine Endlosschleife ist, auf Schiff1 aufzurufen (also = $Schiff1 -> call script 'SkriptC':...).

Wenn man sich jetzt den Taskstack von Schiff1 und Schiff2 angeschaut hat, läuft auf Schiff1 immer noch SkriptA, während auf Schiff2 sowohl SkriptB als auch SkriptC laufen, wobei SkriptC natürlich das unterste im Stack war.

MfG,
ScRaT
GodsAngel95
Posts: 184
Joined: Tue, 28. Sep 10, 19:48
x3tc

Post by GodsAngel95 »

Jetzt bin ich verwirrt.
.
.
.
Stimmt. Du hast Recht. Wie auch immer.

NewWorlds
- Modmember DE - EN
MG-Mod - Modmember DE - EN
s.o.p.
Posts: 35
Joined: Wed, 6. Nov 02, 20:31
x4

Post by s.o.p. »

Hallo zusammen!

Im Menü "Mein Pilotenstatus" wird die Flugzeit und das Datum angezeigt.

Die Flugzeit läßt sich bekanntlich wie folgt ermitteln:

Code: Select all

$time = playing time
Frage: Wie läßt sich das Datum auslesen? Gibt es dafür einen Befehl oder ein Script?
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

das Datum errechnet sich aus der Spielzeit..
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 ;)
s.o.p.
Posts: 35
Joined: Wed, 6. Nov 02, 20:31
x4

Post by s.o.p. »

@UniTrader: 30 Tage/Monat und 360 Tage/Jahr?
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

<RetVar> = format time: <Var/Number>

Das sollte der Befehl sein, den du suchst.

MfG,
ScRaT
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Hi,

gibt es irgend wo eine Liste mit den Lokalen Vars eines Schiffes die von der Engine gesetzt werden.

Als Beispiel gibt es bei Trägern die Lokale Var 'ships.docking' diese zeigt die Schiffe die gerade an dem Träger andocken.

Ich hab mal von einem NPC Schiff (M3) alle Lokalen Vars ausgelesen und hier bekomm ich 4 Eintäge.
1. 100 (Keine Ahnung was das bedeutet)
2. 3330028 (Diese Zahl vareiert von Schiff zu Schiff)
3. Unbekanntes Objekt (Ich nehme an das ist der Pilot)
4. no fire / fire (Scheinbar eine Var ob das Schiff beschossen wird)


*Edit*
Mann ich hab die nur Falsch abgefragt die Namen bekomm ich ja :D

Bis denn Thalon
freddy2
Posts: 155
Joined: Tue, 13. Apr 04, 20:40
x3

Post by freddy2 »

Hallo, ich habe eine Frage, gleich vorweg ich bin ein DAU, habe in den Scripteditor hineingeschaut weil ich mir ein kleines Script basteln wollte
um ein spielinternes Problem zu lösen.
Ich möchte folgendes Script/Befehl als script in mein Game integrieren finde aber die Befehle nicht

Code: Select all

[PLAYERSHIP] -> add 1 units of Hauptquartier Bauteilsatz 
wie stelle ich das an und nein bitte ich habe nicht die Absicht etwas zu lernen was für mich böhmische Dörfer sind, will es nur irgendwie erledigen

Wäre sehr Dankbar für eure Unterstützung
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Hi,

das HQ kann man nicht über Ware sondern über Station Type hinzufügen.

Das ganze müsste dann so aussehen:

Code: Select all

$ware = Hauptquartier
[PLAYERSHIP] -> add 1 units of $ware
Bis denn Thalon
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Sorry für den Doppelpost aber das ist eine neue Frage von mir.

Ich hab eine GV in dieser sind mehrere Arrays.
z.B. Array(Array1,Array2 ....)

Nun möchte ich aus dieser GV Arrays verändern.
Ich muss die GV laden um die Daten anzeigen zu lassen.
Soweit kein Thema ich möchte aber das die Daten nur geändert werden wenn ich das auch bestätige.
zZt hab ich das Problem das die Daten immer geändert werden.

Wie kann ich es anstellen das die Daten erst nach einer Bestätigung übernommen werden. Kopieren oder Klonen bringt immer das gleiche.

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

Post by UniTrader »

Arrays sind Pointer, sprich egal wo du ein Array veränderst werden die Änderungen an allen anderen orten wo dasselbe Array verwendet wird auch geändert.. wenn du lokal mit einem Array arbeiten willst musst du dieses vorher in ein neues Array kopieren, wofür es einen extra Befehl gibt ;)
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 ;)
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Hi,

das Arrays Pointer sind ist mir klar.

Könntest Du das Geheimniss lüften und mir sagen um welchen Befehl es sich handelt ?

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

Post by ScRaT_GER »

Also mit "clone array" sollte es funktionieren. Zeig am besten mal, wie du den Befehl verwedest.

MfG,
ScRaT
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Hi,
Wie kann ich es anstellen das die Daten erst nach einer Bestätigung übernommen werden. Kopieren oder Klonen bringt immer das gleiche.
Ich hab es ja mit 'clone' probiert aber das funzt so nicht.

Code: Select all

001   $pageid = 8822
002   load text: id=$pageid
003   
004   $template.config = get global variable: name='ship.upgrades.config.tempships'
005   $tempship.warelist = get global variable: name='ship.upgrades.tempship.warelist'
006   $temp.ship.array = $template.config[0]
007   $template.ship = $template.config[1]
...
018   $cnt =  get index of $template.ship in array $temp.ship.array offset=null + 1
019   $warelist = $tempship.warelist[$cnt]
020   $zaehler.max =  size of array $warelist
021   $new.warelist =  array alloc: size=0
022   *copy array $warelist index 0 ... $zaehler.max into array $new.warelist at index 0
023   $new.warelist =  clone array $warelist : index 0 ... $zaehler.max
Danach verändere ich ein paar Daten mit '<Var/Array>[<Var/Number>][<Var/Number>] = <Value> '

Normalerweise möchte ich dann das neue Array ($new.warelist) wieder in das Alte ($warelist) kopieren um die Änderungen zu übernehmen.

*edit*

Ich habs nun mir einer Schleife gelöst. Ich lese die Daten aus dem Array $warelist aus und generiere ein neues das ich $sub nenne dieses hänge ich dann an das Array $new.warelist.

Code: Select all

020   $zaehler.max =  size of array $warelist
021   $new.warelist =  array alloc: size=0
022   $cnt = 0
023   while $cnt < $zaehler.max
024   |$ware = $warelist[$cnt][0]
025   |$ware.anz = $warelist[$cnt][1]
026   |$sub =  create new array, arguments=$ware, $ware.anz, null, null, null
027   |append $sub to array $new.warelist
028   |inc $cnt = 
029   end
Ist zwar umständlich aber wenn es nicht anders geht.


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

Post by ScRaT_GER »

Ich hab es ja mit 'clone' probiert aber das funzt so nicht.
Deswegen habe ich ja "sollte" geschrieben. ;)

Hier ist übrigens das Problem:
Danach verändere ich ein paar Daten mit '<Var/Array>[<Var/Number>][<Var/Number>] = <Value> '
"clone array" kopiert nur stupide die Elemente eines Array in ein anderes. Wenn die Elemente jeweils wieder Arrays sind, hast du weiterhin das Problem, dass Änderungen eines Sub-Arrays auch im ursprünglichen Sub-Array gemacht werden (es ist ja schließlich das gleiche Array).

Um eine tiefe Kopie (engl. deep copy) zu machen, habe ich mir eine kleine Library geschrieben:

Code: Select all

* Aus util.clone.array
009   $count = size of array $source
010   $end = $count - 1
011   $array = = clone array $source : index 0 ... $end
012   
013   while $count
014   |dec $count =
015   |
016   |$element = $source[$count]
017   |if is datatyp[ $element ] == DATATYP_ARRAY
018 @ ||$cloneElement = [THIS] -> call script 'util.clone.array' : source=$element
019   ||$array[$count] = $cloneElement
020   |end
021 @ | = wait 1 ms
022   end
023   
024   return $array
Dabei ist $source ein Array und wird dem Skript als Argument übergeben.

MfG,
ScRaT
User avatar
TGG
Posts: 1172
Joined: Sun, 19. Oct 08, 00:45
x4

Post by TGG »

Hallo,
habe auch mal eine Frage zur map.

Ein Szenario.
Wenn eine Schiffswerft oder eine andere Fabrik, z.B. von den Xenon zerstört wird, wird diese von der KI wieder ersetzt.
Doch wie sieht es jetzt mit Fabriken und Werften aus, welche durch eine MD in das Universum eingebracht werden. Wobei das MD eine map (Erweiterungsmap mit eigenen Namen.) aktiviert.

Greift dann auch die "Gott" Modus oder greift sie nur auf die original "x3_universe.xml" zu, und ignoriert die anderen map´s ?
Und wie reagiert die KI, wenn ich jetzt z.B. mit einem MD in Argon Prime die Schiffswerft zerstöre. wird diese dann wieder ersetzt ?

gruss
TGG
Image
TGG ( Terra Ghost Gesellschaft )
Cpt.Falcon
Posts: 269
Joined: Fri, 24. Dec 10, 16:30
x3tc

Post by Cpt.Falcon »

Könnte mir mal wer aushelfen, mit einem externen Script Editor für TC?

Gefunden habe ich den Exsriptor, aus einem mir unerfindlichen Grund kann ich den nicht starten. (Exscriptor.exe funzt nicht mehr, Windows kann Lösung suchen...).

Gibt ja noch Andere, aber gfunden hab ich sie leider nicht :>.
Wer lesen kann ist klar im Vorteil

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