StartSimpleVeryHiResJob
» Siedler Map Source Forum » Siedler DEdK Script Forum » StartSimpleVeryHiResJob
Seiten: 1
Mordred
|
#1 15.08.2010 21:05 Beiträge: 939 |
StartSimpleVeryHiResJob
Da es nur den SimpleJob (1 mal pro sekunde) und den SimpleHiResJob (10 mal pro sekunde) gibt, was für exakte koordination noch etwas ungenau ist, habe ich einen SimpleVeryHiResJob (2000 mal pro sekunde) gescriptet.
Nutzt zwar wenig, aber falls jemand sowas braucht, kann der job gerne eingebaut werden. (z.B für rutschende Steine)
Verhalten wie mit dem SimpleJob und dem SimpleHiResJob auch:
Namen in "", beenden per return true. (kann allerdings nur einmal gleichzeitig aufgerufen werden.)
Mängel, die noch verbessert werden sollen/können/ich nicht kann:
- beenden nur per extrafunktion EndVeryHiResJob(_jobinanfuhrungszeichen)
- CxTool
- läuft auch während einer pause weiter
Für nicht-dauerhafte Aktionen wie entitäten versetzt erstellen oder cutscenecontrolling prima, aber mit der vollen Leistung ganz schön happig.
function StartSimpleVeryHiResJob(_job) -- 2000/sek if (VeryHiResJobs == nil) then VeryHiResJobs = {} GUIUpdate_ResourceAmountVHRJ = GUIUpdate_ResourceAmount function GUIUpdate_ResourceAmount(_restype,_zahl) for i=table.getn(VeryHiResJobs),1,-1 do if _G[VeryHiResJobs[i]]() then table.remove(VeryHiResJobs,i) end end GUIUpdate_ResourceAmountVHRJ(_restype,_zahl) end end if (type(_job) == "string")then table.insert(VeryHiResJobs,_job) else Message("ERR:StartSimpleVeryHiResJob! _job must be a string!") end end function EndVeryHiResJob(_job) if (VeryHiResJobs ~= nil)then if (type(_job) == "string")then if IsInVHRJ(_job)then for i=table.getn(VeryHiResJobs),1,-1 do if (VeryHiResJobs[i] == _job)then table.remove(VeryHiResJobs,i) end end else Message("ERR:EndVeryHiResJob! _job is incorrect!") end else Message("ERR:EndVeryHiResJob! _job must be a string!") end else Message("ERR:EndVeryHiResJob! No VeryHiResJob is running!") end end function IsInVHRJ(_job) local raus = false for i=1,table.getn(VeryHiResJobs) do if (VeryHiResJobs[i] == _job)then raus = true end end return raus end
Dieser Beitrag wurde von Mordred am 15.08.2010 um 21:28 editiert.
Noigi
|
#2 15.08.2010 23:22 Beiträge: 772 |
Hmm, du kennst den Trick also auch.
Pass aber auf, die Frequenz von GUIUpdate_ResourceAmount und ähnlichen GUIUpdate-Funktionen hängt von der Rechnerleistung ab und kann stellenweise deutlich absacken. Bei einem rutschenden Stein ist es ja im Grunde egal, wann er unten ankommt, aber für Ereignisse die wirklich genau x mal pro Sekunde auftreten sollen ist der Trick nicht wirklich geeignet.
Mordred
|
#3 16.08.2010 00:12 Beiträge: 939 |
Erstes Anwendungsbeispiel gefunden!
Aber die wirklich tolle Funktion wurde nicht von mir erstellt und durch VeryHiResJob nur verbessert.
Das darf der Autor selbst hier reinschreiben, wie er die funktion findet
Mit ein paar rutschenden Steinen getestet, umso größer die Entität, umso mehr fängt es an zu haken.
Ist durch das Spielinterne "grid" aber sowieso sinnlos.
Seiten: 1