[Script/Tool] DCSA - Dynamic Command Slot Allocation

Hier ist der ideale Ort um über Scripts und Mods für X³: Reunion zu diskutieren.

Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum

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

[Script/Tool] DCSA - Dynamic Command Slot Allocation

Post by UniTrader »

Die DCSA ist eine kleine Erweiterung, die die Kommandoslots flexibel verteilen soll. Dadurch werden Kommandoslot-Konflikte bei Scripten vermieden. Allerdings müssen die Scripte dafür geschrieben sein, also wenn du ein Script Downloaden willst und hierher verwiesen wirst wirst du diese Erweiterung warscheinlich noch zusätzlich brauchen.

Benutzungsanleitung für Script-Benutzer:
Installation:
Entpackt den Inhalt des *.zip Archivs in das X3-Hauptverzeichnis. Mehr ist nicht zu tun.

Benutzung:
Startet die "X3FileCheck.exe" im X3-Hauptverzeichnis und klickt auf den Button "Enable System" (Dieser schritt ist theorhetisch nur beim erstmaligen start und bei jeder Script(de)installation nötig, aber es gibt ne kleine fehlermeldung, wenn dies nicht gemacht wird), nun startet X3 auf die gewohnte Art. Kurz nach dem laden des Spielstandes wird es kurz ruckeln, was aber kurz darauf verschwindet.

Alternative ohne die "X3FileCheck.exe":
Startet X3 auf die gewohnte Art und geht kurz nach dem laden (2-3 sekunden) des Spielstandes aus dem Spiel raus und schaut ins X3-verzeichnis. dort sollte sich eine "log08650.txt" befinden, welche ihr in "498650.xml" umbenennt (Anmerkung: die ersten beiden Zahlen können je nach eingestellter Sprache variieren) und in den Ordner "t" verschiebt. Nun geht zurück ins Spiel und fangt an.


Fehlermeldungen:

Die richtige Sprachdatei konnte nicht geladen werden
Kein wirklich kritischer fehler, das sagt nur aus, dass die Logdatei nicht verschoben und umbenannt wurde. wenn seit dem letzten Spielstand laden bzw. Neuen Spiel keine änderungen an den Installierten Scripts durchgeführt werden kann man diese Meldung Ignorieren.

Änderungen an Kommandoslots
Diese Hinweismeldung kommt, wenn mangels freier Kommandoslots einige Befehle in andere Kategorien verschoben werden mussten (nur Hauptkommandos wie Navigation, Kampf usw.) oder gar deaktiviert wurden (dies könnte bei zusätzlichen Schiffs- und Stationskommandos sowie Kanzel-Befehlen der fall sein). Das ist ein Zeichen, dass etwas zu viele Scripte installiert sind, was aber höchst selten auftreten sollte.

bekannte Bugs:
Nach Installation eines Scrips sind einige Kommandos falsch benannt
Das hängt damit zusammen, dass zuerst eine veraltete Textdatei geladen wurde, die noch für die alte Kommandoslotzuweisung geschrieben wurde. Dies kann behoben werden, indem die "X3FileCheck.exe" verwendet wird oder die logdatei manuell verschoben wird und anschliessend der Spielstand erneut geladen wird.

Downloadlinks ganz unten.


Benutzungsanleitung für Scripter:

Vorab: einige regeln, um fehler, wie z.B. Kommandoslotdoppelbelegungen auszuschliessen (wird ggf. noch erweitert):

- Die Kommandoslots dürfen erst NACH dem durchlaufen der Setups, die statische Kommandoslots verwenden ausgeführt werden (bzw. nach dem laden von deren t-files, weil ich den t-file-Eintrag des Slots abfrage)
- Wenn die Funktion genutzt wird aufeinanderfolgende Kommandoslots zu erhalten nehmt bitte nur so viele aufeinanderfolgende wie nötig, weil eure Kommandos sonst schnell in andere Kategorien rutschen oder mangels freier aufeinanderfolgender gar nicht erst zugewiesen werden.

Benutzungsbeispiel für einen einzelnen Kommandoslot (Menü Navigation (200 oder als Input hier 2)):
Setup:

Code: Select all

$null = null
START = $null -> call Script plugin.example.setup
Kommandoslotzuweisung (Script 'plugin.example.setup'):

Code: Select all

@ wait 100 ms
$cmd = [THIS] -> call Script plugin.dcsa.get.free.command Command Type= 2 , SE internal Name= 'COMMAND_EXAMPLE' , Long Name= 'Beispielkommando' , Short Name= 'Bsp.cmd' , Description= 'Dies ist die Erklärung des Beispielkommandos'
global script map: set: key=$cmd, class=<Var/Class>, race=<Var/Race>, script=plugin.example, prio=<Var/Number>
set script command upgrade: command=$cmd upgrade=<Var/Ware>
Bei mehreren Kommandoslots müssen die Namen als Array übergeben werden und es wird der niedrigste Kommandoslot zurückgegeben, welcher dann entsprechend oft erhöt wird:

(das Setup ruft wie im vorigen Beispiel das Kommandslotbelegungsscript auf)
Kommandoslotzuweisung (Script 'plugin.example.setup'):

Code: Select all

@ wait 100 ms
$se.name.arr = array alloc: size = 0
$long.name.arr = array alloc: size = 0
$short.name.arr = array alloc: size = 0
$desc.arr = array alloc: size = 0

append 'CMD_1' to array $se.name.arr 
append 'Kommando 1' to array $long.name.arr
append 'CMD1' to array $short.name.arr
append 'Beschreibung Kommando 1' to array $desc.arr

append 'CMD_2' to array $se.name.arr 
append 'Kommando 2' to array $long.name.arr
append 'CMD2' to array $short.name.arr
append 'Beschreibung Kommando 1' to array $desc.arr

append 'CMD_3' to array $se.name.arr 
append 'Kommando 3' to array $long.name.arr
append 'CMD3' to array $short.name.arr
append 'Beschreibung Kommando 3' to array $desc.arr

$cmd = [THIS] -> call Script plugin.dcsa.get.free.command Command Type= 2 , SE internal Name= $se.name.arr , Long Name= $long.name.arr , Short Name= $short.name.arr , Description= $desc.arr

global script map: set: key=$cmd, class=<Var/Class>, race=<Var/Race>, script=plugin.cmd1, prio=<Var/Number>
set script command upgrade: command=$cmd upgrade=<Var/Ware>

inc $cmd
global script map: set: key=$cmd, class=<Var/Class>, race=<Var/Race>, script=plugin.cmd2, prio=<Var/Number>
set script command upgrade: command=$cmd upgrade=<Var/Ware>

inc $cmd
global script map: set: key=$cmd, class=<Var/Class>, race=<Var/Race>, script=plugin.cmd3, prio=<Var/Number>
set script command upgrade: command=$cmd upgrade=<Var/Ware>
Nummern für die verschiedenen Kommandokategorien:
2 - Navigation
3 - Kampf
4 - Handel
5 - Spezial
6 - Piraten
7 - Benutzer
8 - Allgemein
9 - Kanzel-Befehle
11 - Stationsbefehle
12 - Zusätzliche Schiffsbefehle

Ein Dankeschön an:
Den Ersteller der Russen-Kommandos für die Idee, Sprachdateien per Script zu erstellen (also grundidee 1 für diese Erweiterung)

SymTec ltd. für die Frage, ob man nicht in die Logdateien den Inhalt von Sprachdateien schreiben kann (grundidee 2)

XGamer für das Programm zum verschieben und umbennenen der Log/Sprachdatei


Falls es noch ein paar unklarheiten gibt einfach hier nachfragen ^^

Downloadlinks DCSA:

Von XGamer
Von MADxHAWK
Von CC-Vorsitzender

Downloadlinks für an diese Erweiterung angepasste Setup- und Sprachdateien anderer Scripts:

- - - Folgt noch, ich werde diese woche einige raussuchen, die Kommandoslots doppelt belegen - - -
Last edited by UniTrader on Mon, 9. Apr 07, 19:35, edited 2 times in total.
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
Ogerboss
Posts: 1465
Joined: Sat, 5. Aug 06, 22:05
x3tc

Post by Ogerboss »

:) Hab's mir gleich mal runtergeladen und werd's nachher testen und mein aktuelles Scipt anpassen. :)
[ external image ]
***modified*** und stolz drauf
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

ich hab nen klitzekleinen fehler in die Konfiguration für das Dateiverschiebungsprogramm eingebaut, wer sichs bisher geladen hat bitte nochmal laden, danke :)

wers selber korrigieren will:

die Datei "X3FC.ini" öffnen und die Zeile "X3Path=" in "X3Path=::X3" ändern sowie die Zeile "AppendID=0" in "AppendID=1", das wären die korrekturen...
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 ;)
da_pro
Posts: 216
Joined: Thu, 16. Nov 06, 19:52
x3tc

Post by da_pro »

So nach zahlreichen ( endlosen :D ) Tests bin ich zu folgendem Ergebnis gekommen:

Code: Select all

@ wait 100 ms 
scheint in einem Script das per Scriptcall vom Setupscript aus aufgerufen wird irgendwie nicht richtig zu funktionieren.

Deswegen sieht mein Code mittlerweile so aus:
Setupscript:

Code: Select all

001   load text: id=8843
002   register quest script 'plugin.rentaship.bbs' instance multiple=1
003   $null = null
004 @ START $null -> call script 'plugin.rentaship.dcsacheck' : 
005   return null
plugin.rentaship.dcsacheck:

Code: Select all

001   $time = 1
002   while [TRUE]
003    $time = $time + 1
004    $GV = get global variable: name='plugin.dcsa.cat2.start'
005    if $GV
006     $DCSA = get global variable: name='rentaship.dcsa.check'
007     if not $DCSA == 101
008      send incoming message 'DCSA ist installiert' to player: display it=[TRUE]
009      set global variable: name='rentaship.dcsa.check' value=101
010     end
011     $null = null
012 @   START $null -> call script 'plugin.rentaship.cmdsetup' : 
013     goto label label1
014    end
015    if $time >= 900
016     goto label label2
017    end
018 @  = wait 1 ms
019   end
020   
021   label2:
022   $DCSA = get global variable: name='rentaship.dcsa.check'
023   if not $DCSA == 100
024    send incoming message 'DSCA ist nicht installiert' to player: display it=[TRUE]
025    set global variable: name='rentaship.dcsa.check' value=100
026   end
027   load text: id=8844
028   global script map: set: key=A_DA_PRO_LIST    , class=Moveable Ship, race=Player, script='plugin.rentaship.cmd', prio=0
029   set script command upgrade: command=A_DA_PRO_LIST      upgrade=[TRUE]  script='plugin.rentaship.cmdcheck'
030   
031   global script map: set: key=COMMAND_TYPE_CUSTOM_31, class=Moveable Ship, race=Player, script='plugin.rentaship.cmd', prio=0
032   set script command upgrade: command=COMMAND_TYPE_CUSTOM_31  upgrade=[TRUE]  script='plugin.rentaship.cmdcheck'
033   label1:
034   return null

die Globale Variable 'plugin.dcsa.cat2.start' wird bei mir genau 103 ms nach Spielstart geladen...
wenn ich die Schleife am Anfang durch ein wait ersetzten will brauche ich jedoch mindestens:

Code: Select all

@ = wait 4000 ms
Weswegen ich vermute das die waits nicht richtig funktionieren.

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

Post by UniTrader »

tja, das mit den waits ist mir ehrlich gesagt schleierhaft... die gesamtwartezeit scheint am anfang bei dir irgendwie höher als normal zu sein, wofür ich keine erklärung hab... bei mir ist die Wartezeit für das Final-Script (plugin.dcsa.final) immer so hoch gewesen, wie im Script angegeben.... und ich habe auch tests nach dem laden des Spielstandes gemacht, wo es ebenfalls keine probs gab... die Eingehenden Nachrichten zum testen kamen immer zur erwarteten Zeit, nicht später....


ach ja: ein wait hat eine mínimale zeit von einem Frame, weshalb die GVs eher erst nach 103 Frames existieren, was mich ehrlich gesagt wundert, da ich im Setup, wo diese gesetzt werden, keinerlei wartezeit habe...

Ich werde mich mit diesem problem heut nochmal näher beschäftigen...
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
Taurec
Posts: 171
Joined: Wed, 6. Nov 02, 20:31
x4

Post by Taurec »

Wird dieses Projekt noch weiterentwickelt, bzw. betreut? Habe mal eine Frage dazu:
Wenn man den X3 File Checker startet, dann gibt es die Statusanzeigen für File Status, X3 Status und Trigger. Was bedeutet "trigger"?

Dann noch zur Handhabung:
Ich habe es mir so eingerichtet, das ich X3 generell über den File-Checker starte. Wird wohl kaum schaden, oder?
Aber muss ich denn jetzt nach jedem Script, egal wie "poplig" es auch sein mag, erst einmal X3 starten, bevo ich das Nächste installieren kann?
Und wenn ja, trifft das auch auf das Bonuspacket, bzw. X-Plus zu? Muss ich dann in X3 erst einmal speichern, oder genügt der Start eines Spielstands?
Alles ist auf irgendein Naturgesetz zurückzuführen. Wenn uns etwas unnatürlich vorkommt, dann nur deshalb, weil wir das entsprechende Naturgesetz noch nicht kennen.
da_pro
Posts: 216
Joined: Thu, 16. Nov 06, 19:52
x3tc

Post by da_pro »

@Taurec:
Die Scripte müssen DCSA kompatibel sein sonst brint es dir gar nix ;).
Atm kompatible Scripte:
Rent A Ship von mir ;) .
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

ja, ich wollte daran weiterarbeiten, aber leider hatte ich in den letzten monaten keine Zeit dafür... ich werd mich aber wieder dran setzen, wenn ich wieder zeit hab...
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 ;)
Ghostrider[FVP]
Posts: 3262
Joined: Wed, 6. Nov 02, 20:31
x3ap

Post by Ghostrider[FVP] »

Hallo Leute,

wird das Tool noch weiterverarbeitet oder eingestellt und kann man sich das noch irgendwo runterladen?

Wäre doch toll wenn sowas mal Standard werden würde, scheint potenzial zu haben, bei der Fülle an Scripts und den Problemen das man ständig irgendwelche Kommandoslots umändern muss wäre es praktisch wenn so ein Script das automatisch machen würde oder nicht? :roll:

Zumal dieses "Rent a Ship" hab ich auch und jedesmal steht bei mir im Log DCSA nicht installiert.. das nervt *g* denke immer gleich an Fehler :)

Gruss und erstmal noch viel Spass.
Föderation Vereinter Planeten -=)FVP(=-
Since 1998... join the future! X3-The Sonen
Image
Ghostrider's X-Universum [INDEX]Lucikes Scripts & Mods

Return to “X³: Reunion - Scripts und Modding”