s5HookLoader
» Siedler Map Source Forum » Siedler DEdK Script Forum » s5HookLoader
Seiten: 1
mcb
|
#1 29.09.2015 20:00 Beiträge: 1472 |
s5HookLoader
Da das Laden des S5Hooks bisher nicht sonderlich komfortabel war, hab ich dazu mal was geschrieben (was ich hier schon mal erwähnt hatte).
Der S5Hook und InitAdressEntity wird nach jedem laden automatisch ausgeführt, und über das Aufdecken der Map und den Kamerasprung ist beides fast sofort geladen.
--- s5HookLoader mcb 0.3 -- Lädt den S5Hook und SCV 2.0 beim Start und danach automatisch nach jedem laden. -- Callbacks mit table.insert in s5HookLoader.cb eintragen. -- Callbacks, die nach dem GUI-Laden aufgerufen werden sollen, in s5HookLoader.xmlLoaded eintragen. (auch mit table.insert) -- S5Hook.SetCustomNames wird automatisch aufgerufen, das globale namesTable kann genauso verwendet werden wie ein normales table für S5Hook.SetCustomNames, allerdings werden die Namen vorher mit Umlaute bearbeitet. -- -- s5HookLoader.init(adrEntPl, fma) in der FMA aufrufen (Entity für InitAdressEntity wird automatisch erstellt, player angeben). -- fma wird nach dem ersten laden einer GUI-xml aufgerufen, für Startbriefing oder Ähnliches. -- s5HookLoader.xmlLoaded() nach dem laden einer GUI aufrufen. -- s5HookLoader.isHookSCVLoaded() prüft, ob S5Hook und SCV 2.0 geladen sind. -- s5HookLoader.reloadNamesTable() parst die Texte in namesTable erneut. Hilfreich wenn verschiedene Namen über @string geladen werden. -- -- benötigt: -- - S5Hook -- - SCV 2.0 -- - Trigger-Fix -- - metatable-savegame-fix -- - Umlaute s5HookLoader = {cb = {}, xmlLoad={}, ae = nil, namesTable = {}, fma=nil} function s5HookLoader.init(adrEntitPl, fma) s5HookLoader.ae = Logic.CreateEntity(Entities.PU_Serf, 1, 1, 0, adrEntitPl or 8) s5HookLoader.fma = fma s5HookLoader.Mission_OnSaveGameLoaded = Mission_OnSaveGameLoaded Mission_OnSaveGameLoaded = function() s5HookLoader.Mission_OnSaveGameLoaded() s5HookLoader.load() end s5HookLoader.load() end --- vom s5HookLoader über metatable und Umlaute als CustomNamesTable geladen namesTable = namesTable or {} function s5HookLoader.load() local x,y = Camera.ScrollGetLookAt() local p = GetPosition(s5HookLoader.ae) Explore.Show("hookloader", p, 100) Logic.ForceFullExplorationUpdate() Camera.ScrollSetLookAt(p.X, p.Y) ZO = nil InstallHook(function() if ZO then s5HookLoader.callback(x, y) end end) InitAdressEntity(s5HookLoader.ae, function() if S5Hook then s5HookLoader.callback(x, y) end end) end function s5HookLoader.callback(x, y) for _,f in ipairs(s5HookLoader.cb) do f() end S5Hook.SetCustomNames(s5HookLoader.namesTable) Camera.ScrollSetLookAt(x, y) Explore.Hide("hookloader") end function s5HookLoader.xmlLoaded() StartSimpleHiResJob(function() for _,f in ipairs(s5HookLoader.xmlLoad) do f() end if s5HookLoader.fma then s5HookLoader.fma() s5HookLoader.fma = nil end return true end) end function s5HookLoader.reloadNamesTable() for k,v in pairs(namesTable) do s5HookLoader.namesTable[k] = Umlaute(v) end end function s5HookLoader.isHookSCVLoaded() return S5Hook and ZO and true or false end metatable.set(namesTable, { __newindex = function(nt, k, v) s5HookLoader.namesTable[k] = Umlaute(v) rawset(namesTable, k, v) end, })
Edit: Neue Version in neuerem Post, diese Version nur noch für kompartiblität mit SCV 2.0
Edit: Neueste Version findet sich hier: https://github.com/mcb5637/s5C...comfort/other/s5HookLoader.lua
Dieser Beitrag wurde von mcb am 28.05.2019 um 18:18 editiert.
Kantelo
|
#3 01.10.2015 22:26 Beiträge: 357 |
Allerdings stürzt bei mir das Spiel jetzt nach einer Minute ab
Wenn ich ihn wieder rausnehme, dann funktioniert alles.
Können irgendwo Probleme mit metatables auftreten?
Weil SCV und s5Hook laufen sonst problemlos bei mir.
mcb
|
#4 02.10.2015 11:31 Beiträge: 1472 |
Nimm mal den Befehl für das Metatable raus. (Der Aufruf von metatable.set ganz am Ende) Wenn es dann funktioniert könnte es am metatable liegen (und ich muss mir was neues ausdenken...)
MadShadow
|
#5 03.10.2015 18:01 Beiträge: 372 |
Funktioniert der S5Hook den stabil im Allgemeinen? Ich habe die Befürchtung das meine gesamte Arbeit dann umsonst ist und zögere deshalb weiter zu machen.
mcb
|
#6 03.10.2015 20:26 Beiträge: 1472 |
Meistens. Beim laden des Hooks und beim Beeenden des Spiels kommt es manchmal zu Abstürzen. (Kann aber auch an der mischung aus Hook, SCV und Debugger liegen...)
andre111
|
#7 04.10.2015 12:17 Beiträge: 220 |
Ich kann gelegentliche Abstürze beim Beenden des Spiels bestätigen. Hatte aber noch nie einen Absturz beim Laden des Hooks. Der Debugger macht bei mir da keinen Unterschied und SCV habe ich noch nie verwendet.
Kantelo
|
#8 04.10.2015 12:42 Beiträge: 357 |
Ohne metatables kommt folgendes nach einer Minute:
settlershok.exe - Fatal error
---------------------------
Access violation - no RTTI data!
Ich weiß jetzt allerdings welcher Befehl den Absturz verursacht, nämlich der SetCustomNames Befehl. Im Moment habe ich kein Table mit Namen, vielleicht liegt es daran?
mcb
|
#9 04.10.2015 13:02 Beiträge: 1472 |
Ich kann das momentan nicht reproduzieren. Auch mit einem leeren table gibt es diesen Absturz bei mir nicht. Vielleicht hat bobby eine Idee was da passiert...
mcb
|
#10 20.06.2016 19:59 Beiträge: 1472 |
Ich hab den loader jetzt an den neuen Hook-Lademechanismus angepasst. Kamerasprung und Mapaufdecken sind jetzt unnötig. Außerdem hab ich das automatische Laden des SCV 2.0 entfernt, da der praktisch durch die neuen Funktionen des Hooks ersetzt wird (und zwar deutlich schneller). Wer SCV 2.0 trotzdem noch benötigt sollte weiter v0.3 verwenden, sie funktioniert auch mit dem neuen Hook.
Edit: Neueste Version findet sich hier: https://github.com/mcb5637/s5C...comfort/other/s5HookLoader.lua
Dieser Beitrag wurde von mcb am 28.05.2019 um 18:18 editiert.
mcb
|
#11 28.05.2019 18:19 Beiträge: 1472 |
Version 0.5. (Existiert schon länger, ich hab das hier nur nie geupdated.)
Seiten: 1