Lieber EAT1963, dass erkläre ich dir gerne:
package.path ist eine von der LUA-Umgebung vordefinierte Variable. Sie beinhaltet die Suchparameter für Scripte. Durch das anfügen von '?.lang sucht jetzt LUA auch nach *.lang-Dateien.
Zum Dateien finden:
Hier "öffne" ich die Datei. Um genau zu sein binde ich sie per Require-Befehl ein. Das pcall() unterdrückt Fehlermeldungen falls keine Datei existiert. Der Befehl require gibt mir als Rückgabewerte einmal einen Statuscode und einmal (hier in translation abgespeichert) den Wert, der per return aus der zu "öffnenden" Datei kommt. Das sollte auch der Aufbau der Lang-Dateien erklären .
Zur Pfadermittlung:
langFileName() macht das "Wunder". Es gibt mir den Pfad folgendermaßen aus: res/models/model/railroad/BR146/TEST/test
local function langFileName()
local str = debug.getinfo(3, "S").source:sub(2)
local i = str:find("%.[^.]-$")
if (i) then
return str:sub(1, i - 1)
else
return str
end
end
Alles anzeigen
local str = debug.getinfo(3, "S").source:sub(2) ermittelt mir dabei den relativen Pfad vom "res"-Verzeichnis aus zur aufrufenden *.mdl-Datei. Hier etwas zum lesen zu den Parametern: http://www.gammon.com.au/scripts/doc.php?lua=debug.getinfo
Danach entferne ich nur noch die Dateiendung.
gsub("/", ".") ersetzt mir alle "/" durch ".", denn so muss ich das an require übergeben (http://www.lua.org/manual/5.2/manual.html#pdf-require).
Was passiert an einem Beispiel:
debug.getinfo(3, "S").source -> @res/models/model/railroad/BR146/TEST/Crocodile_test.mdl
:sub(2) -> res/models/model/railroad/BR146/TEST/Crocodile_test.mdl
Rest -> res/models/model/railroad/BR146/TEST/Crocodile_test
gsub() -> res.models.model.railroad.BR146.TEST.Crocodile_test
[Anm.: langFilePath beruht auf der selben Methode, es wird nur noch hinten mehr weggeschnitten]
Spezielle Zeichen:
Naja, ich habe alles mögliche versucht um Ä,Ö,Ü usw. ins Spiel zu bekommen. LUA scheint alle eingelesenen Daten in einen 8-bit-Datenstream zu verwandeln. In UTF-8 bestehen Umlaute aus zwei 8-bit Zeichen. Im Spiel selber werden diese dann aber falsch interpretiert, wodurch komische Zeichen angezeigt werden. Wandle ich sie um, funktioniert es plötzlich. Es ist mehr oder weniger ein "Work-Around"....
Wenn noch fragen sind, immer gerne stellen
.