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
#2
30.09.2015 11:20
Beiträge: 357

Danke, das ist sehr nützlich

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

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum