Code:
-- Beginn Briefingsystem
function InitSok_Briefing()
-- BarType: NormalBar, SmallBar, Transparent
-- SeitenType: { Title = "Titeltext", Text = "Beschreibung" , ActionJob = Funktion,
-- Position = EntityID oder PosXY = {posX, posY} , Duration = Sekunden, Zoom = 1 - 10, Rotation = -180 bis 180 , Angle = 10 - 40 }
InitSok_Camera() -- Kamera installieren
Logic.ExecuteInLuaLocalState(' Script.Load("Script\\MainMenu\\Fader.lua") ')
Logic.ExecuteInLuaLocalState(' g_Fade.To = 0 ')
Logic.ExecuteInLuaLocalState(' SetFaderAlpha(0) ')
Sok_Briefing = { CurrBriefing = {}, WaitList = {}, PageList = {},
PageDuration = 5, IsActive = false, FadeOut = false, FaderIsActive = false,
PageIsActive = false, EndPage = true, TimePage = 0, TitleColor = "{@color:255,250,0,255}",
}
Sok_Briefing.Start = function(_briefing)
if Sok_Briefing.IsActive then
table.insert(Sok_Briefing.WaitList, _briefing)
if not Sok_Briefing.WaitList.Job then
Sok_Briefing.WaitList.Job = StartSimpleJob("Sok_Briefing_WaitForNextBriefing")
end
else
Sok_Briefing.ExecuteBriefing(_briefing)
end
return
end
Sok_Briefing.ExecuteBriefing = function(_briefing)
Sok_Briefing.IsActive = true
Sok_Briefing.EndPage = true
FaderIsActive = false
Sok_Briefing.CurrBriefing = _briefing
if Sok_Briefing.CurrBriefing.NormalBar or Sok_Briefing.CurrBriefing.SmallBar
or Sok_Briefing.CurrBriefing.Transparent then
Sok_Briefing.PrepareCurrBriefing()
end
Sok_Briefing.ExecutePage(_briefing[1])
if #_briefing > 1 then
Sok_Briefing.EndPage = false
for i = #_briefing, 2, -1 do
Sok_Briefing.StartPage(_briefing[i])
end
end
return
end
Sok_Briefing.StartPage = function(_page)
if Sok_Briefing.PageIsActive then
table.insert(Sok_Briefing.PageList, _page)
if not Sok_Briefing.PageList.Job then
Sok_Briefing.PageList.Job = StartSimpleJob("Sok_Briefing_WaitForNextPage")
end
else
Sok_Briefing.ExecutePage(_page)
end
return
end
Sok_Briefing.ExecutePage = function(_page)
Sok_Briefing.PageIsActive = true
if _page.Position or _page.PosXY then
if _page.Position then
Sok_Briefing.PosX, Sok_Briefing.PosY = Logic.GetEntityPosition(_page.Position)
elseif _page.PosXY then
Sok_Briefing.PosX = _page.PosXY[1]
Sok_Briefing.PosY = _page.PosXY[2]
end
Sok_Camera.SetToPosition(Sok_Briefing.PosX, Sok_Briefing.PosY,
_page.Zoom, _page.Rotation, _page.Angle)
end
Sok_Camera.SaveData = false -- Kamera Standort erst nach Ende des Briefings
if _page.Duration then
Sok_Briefing.PageDuration = _page.Duration
else
Sok_Briefing.PageDuration = 5 -- Mindest Dauer
end
if _page.Title then Sok_Briefing.PrepareCurrPage(_page) end
if _page.ActionJob then _page.ActionJob() end
StartSimpleJob("Sok_Briefing_WaitForEndPage")
return
end
Sok_Briefing.ResetTheBars = function(_briefing)
Logic.ExecuteInLuaLocalState(' g_Fade.To = 0 ')
Logic.ExecuteInLuaLocalState(' SetFaderAlpha(0) ')
Logic.ExecuteInLuaLocalState('XGUIEng.PopPage()')
if Sok_Briefing.CurrBriefing.NormalBar or Sok_Briefing.CurrBriefing.SmallBar
or Sok_Briefing.CurrBriefing.Transparent then
Logic.ExecuteInLuaLocalState('XGUIEng.PopPage()')
Logic.ExecuteInLuaLocalState('XGUIEng.PopPage()')
if Sok_Briefing.CurrBriefing.Transparent then
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoomBars_Dodge", 0)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoomBars2_Dodge", 0)')
else
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoomBars", 0)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoomBars2", 0)')
end
end
return
end
Sok_Briefing.PrepareCurrBriefing = function()
if Sok_Briefing.CurrBriefing.NormalBar or Sok_Briefing.CurrBriefing.SmallBar
or Sok_Briefing.CurrBriefing.Transparent then
if Sok_Briefing.CurrBriefing.Transparent then
Logic.ExecuteInLuaLocalState('XGUIEng.PushPage("/InGame/ThroneRoomBars_Dodge", false)')
Logic.ExecuteInLuaLocalState('XGUIEng.PushPage("/InGame/ThroneRoomBars2_Dodge", false)')
else
Logic.ExecuteInLuaLocalState('XGUIEng.PushPage("/InGame/ThroneRoomBars", false)')
Logic.ExecuteInLuaLocalState('XGUIEng.PushPage("/InGame/ThroneRoomBars_2", false)')
end
if Sok_Briefing.CurrBriefing.SmallBar then
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoomBars", true)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThronRoomBars_2", 0)')
end
end
Logic.ExecuteInLuaLocalState('ThroneRoomCameraControl = ThroneRoomCameraControl or function() end ')
Logic.ExecuteInLuaLocalState('ThroneRoomLeftClick = ThroneRoomLeftClick or function() end ')
Logic.ExecuteInLuaLocalState('XGUIEng.PushPage("/InGame/ThroneRoom/Main", false)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoom/Main/DialogTopChooseKnight", 0)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoom/Main/DialogBottomRight3pcs", 0)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoom/Main/KnightInfoButton", 0)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoom/Main/Briefing", 0)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoom/Main/BackButton", 0)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoom/Main/TitleContainer", 0)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoom/Main/StartButton", 0)')
Logic.ExecuteInLuaLocalState('InitializeFader()')
Logic.ExecuteInLuaLocalState('g_Fade.To = 0')
FaderIsActive = true
return
end
Sok_Briefing.PrepareCurrPage = function(_page)
if _page.Title then
Sok_Briefing.title = Umlaute(Sok_Briefing.TitleColor.."{center}{darkshadow}".._page.Title)
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoom/Main/MissionBriefing/Title", 1)')
Logic.ExecuteInLuaLocalState('XGUIEng.SetText("/InGame/ThroneRoom/Main/MissionBriefing/Title", "'..Sok_Briefing.title..'")')
end
if _page.Text then
if Sok_Briefing.CurrBriefing.SmallBar then
Sok_Briefing.text = Umlaute("{cr}{cr}{cr}".._page.Text)
else
Sok_Briefing.text = Umlaute(_page.Text)
end
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/ThroneRoom/Main/MissionBriefing/Text", 1)')
Logic.ExecuteInLuaLocalState('XGUIEng.SetText("/InGame/ThroneRoom/Main/MissionBriefing/Text", "'..Sok_Briefing.text..'")')
end
if FaderIsActive then
if _page.FadeIn then
if _page.FaderAlpha then
Logic.ExecuteInLuaLocalState([[g_Fade.To = "'..page.FaderAlpha..'"]])
end
Sok_Briefing.PageDuration = Sok_Briefing.PageDuration + 3
Logic.ExecuteInLuaLocalState(' FadeIn(3) ')
end
if _page.FadeOut then
Sok_Briefing.FadeOut = true
else
Sok_Briefing.FadeOut = false
end
end
return
end
end
function Sok_Briefing_WaitForEndPage()
if Sok_Briefing.TimePage == (Sok_Briefing.PageDuration) then
if FaderIsActive then
if Sok_Briefing.FadeOut then
Sok_Briefing.PageDuration = Sok_Briefing.PageDuration + 3
Logic.ExecuteInLuaLocalState(' FadeOut(3) ')
Sok_Briefing.FadeOut = false
end
end
end
if Sok_Briefing.TimePage >= Sok_Briefing.PageDuration then
Sok_Briefing.PageIsActive = false
Sok_Briefing.TimePage = 0
if Sok_Briefing.EndPage then
Sok_Briefing.FadeOut = false
Sok_Briefing.IsActive = false
Sok_Briefing.PageIsActive = false
if Sok_Briefing.CurrBriefing.NormalBar or Sok_Briefing.CurrBriefing.SmallBar
or Sok_Briefing.CurrBriefing.Transparent then
Sok_Briefing.ResetTheBars()
end
Sok_Camera.Restore()
Sok_Briefing.CurrBriefing = nil
end
return true
end
Sok_Briefing.TimePage = Sok_Briefing.TimePage + 1
end
function Sok_Briefing_WaitForNextBriefing()
if not Sok_Briefing.IsActive then
Sok_Briefing.ExecuteBriefing(table.remove(Sok_Briefing.WaitList), 1)
if #Sok_Briefing.WaitList == 0 then
Sok_Briefing.WaitList.Job = nil
return true
end
end
end
function Sok_Briefing_WaitForNextPage()
if not Sok_Briefing.PageIsActive then
Sok_Briefing.ExecutePage(table.remove(Sok_Briefing.PageList), 1)
if #Sok_Briefing.PageList == 0 then
Sok_Briefing.PageList.Job = nil
Sok_Briefing.EndPage = true
return true
end
end
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Kameraroutinen
function InitSok_Camera() -- in FMA starten
Sok_Camera = { SaveData = true } -- Table Kamera Aktionen
Sok_Camera.Restore = function()
Sok_Camera.SaveData = true
Logic.ExecuteInLuaLocalState('Display.SetRenderFogOfWar(1)')
Logic.ExecuteInLuaLocalState('Sok_CameraRestore(0)')
Logic.ExecuteInLuaLocalState('Game.GameTimeSetFactor(GUI.GetPlayerID(), g_GameSpeed or 1)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/Root/Normal", 1)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/Root/3dOnScreenDisplay", 1)')
Logic.SetGlobalInvulnerability(0) -- Unverwundbarkeit aufheben
return
end
Sok_Camera.SetToPosition = function(_posX, _posY, _zoomFactor, _rotation, _zoomAngle)
if Sok_Camera.SaveData then
Logic.SetGlobalInvulnerability(1)
Logic.ExecuteInLuaLocalState('Sok_CameraRestore(1,"'.._posX..'","'.._posY..'")') -- Werte sichern
Logic.ExecuteInLuaLocalState('Game.GameTimeSetFactor(GUI.GetPlayerID(), 1)') -- Normal Geschwindigkeit
Logic.ExecuteInLuaLocalState('Display.SetRenderFogOfWar(0)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/Root/Normal", 0)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/Root/3dOnScreenDisplay", 0)')
end
Logic.ExecuteInLuaLocalState('Camera.RTS_SetLookAtPosition("'.._posX..'","'.._posY..'")') -- neue Position
if _zoomFactor then
local zoom = (_zoomFactor / 20)
Logic.ExecuteInLuaLocalState('Camera.RTS_SetZoomFactor("'..zoom..'")') -- 0.05 - 0.5
end
if _rotation then
Logic.ExecuteInLuaLocalState('Camera.RTS_SetRotationAngle("'.._rotation..'")') -- -180 bis 180
end
if _zoomAngle then
Logic.ExecuteInLuaLocalState('Camera.RTS_SetZoomAngle("'.._zoomAngle..'")') -- 10 - 40
end
return
end
Sok_Camera.FollowEntity = function (_entity)
Logic.ExecuteInLuaLocalState('Camera.RTS_FollowEntity("'.._entity..'")')
end
Sok_Camera.Rotate = function(_enable)
if _enable then
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/Root/Normal", 1)')
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/Root/Normal/MissionTimer", 0)')
Logic.ExecuteInLuaLocalState("CameraAnimation.StartCameraRotation(1)")
else
Logic.ExecuteInLuaLocalState("CameraAnimation.Abort()")
Logic.ExecuteInLuaLocalState('XGUIEng.ShowWidget("/InGame/Root/Normal/MissionTimer", 1)')
end
return true
end
end
Aufrufen in der Global LUA -> Mission_FirstMapAction()
Lesezeichen