- from System import DateTime, TimeSpan
- from System.Globalization import CultureInfo
- def Execute():
- Project.EventsManager.SubscribeEvent("GraphicsEnginesObserver.GraphicsEngineConnected", Script.Id, "OnGraphicsEnginesObserver_GraphicsEngineConnected", True)
- Project.EventsManager.SubscribeEvent("GameOnline.ClockStarted", Script.Id, "OnGameOnline_ClockStarted", True)
- Project.EventsManager.SubscribeEvent("GameOnline.ClockStopped", Script.Id, "OnGameOnline_ClockStopped", True)
- Project.EventsManager.SubscribeEvent("GameOnline.ClockActivePartChanged", Script.Id, "OnGameOnline_ClockStopped", True)
- Project.EventsManager.SubscribeEvent("GameOpened", Script.Id, "OnGameOpened", True)
- def OnGraphicsEnginesObserver_GraphicsEngineConnected(sender, args):
- pass
- def FormatClock(timeSpan):
- # print "#INVARIANT--->"+timeSpan.ToString('o',CultureInfo.InvariantCulture)
- # print "#0--->"+timeSpan.ToString('O')
- return timeSpan.ToString('O',CultureInfo.InvariantCulture)#ToString("####0.00",CultureInfo.InvariantCulture)
- def OnGameOnline_ClockStarted(sender, args):
- if GameOnline.IsOnAir:
- for r3, matchClockPlugin in GetClockPluginFromAllConnectedEngines(Script.Description):
- try:
- SetupClock(matchClockPlugin)
- startRef = FormatClock(DateTime.Now - sender.Clock.ElapsedTime)
- cmd = "ENGINE PLUGIN \"%s\" SET \"Worker.StartReference\" \"%s\" \"Worker.StopReference\" \"%s\"" % (
- Script.Description, startRef, FormatClock(DateTime.Now + TimeSpan.FromHours(99)))
- r3.SendCommandAndResponse(cmd)
- cmd = "ENGINE PLUGIN \"%s\" SET \"Worker.StopType\" \"None\"" % (Script.Description)
- r3.SendCommandAndResponse(cmd)
- matchClockPlugin.Start()
- except:
- #TODO: Engine is not connected or have errors
- continue
- extraTimerClockName = "GameClockExtraTime"
- for r3, matchClockPlugin in GetClockPluginFromAllConnectedEngines(extraTimerClockName):
- try:
- #SetupClock(matchClockPlugin)
- SetupClockExtraTimer(matchClockPlugin)
- startRef = FormatClock(DateTime.Now - sender.Clock.ElapsedTime + Game.Clock.ActivePart.EndAt + TimeSpan.FromMilliseconds(100))#.ToString('O')
- cmd = "ENGINE PLUGIN \"%s\" SET \"Worker.StartReference\" \"%s\""%(extraTimerClockName, startRef)
- r3.SendCommandAndResponse(cmd)
- cmd = "ENGINE PLUGIN \"%s\" SET \"Worker.StopType\" \"None\""%(extraTimerClockName)
- r3.SendCommandAndResponse(cmd)
- matchClockPlugin.Start()
- except:
- #TODO: Engine is not connected or have errors
- continue
- kickOffTimerClockName = "GameClockKickOff"
- for r3, matchClockPlugin in GetClockPluginFromAllConnectedEngines(kickOffTimerClockName):
- try:
- SetupClockKickOff(matchClockPlugin)
- startRef = FormatClock( DateTime.Now - sender.Clock.ElapsedTime)#.ToString('O')
- endRef = FormatClock(DateTime.Now - sender.Clock.ElapsedTime + Game.Clock.ActivePart.EndAt + TimeSpan.FromMilliseconds(100))#.ToString('O')
- cmd = "ENGINE PLUGIN \"%s\" SET \"Worker.StartReference\" \"%s\" \"Worker.StopReference\" \"%s\""%(kickOffTimerClockName,startRef, endRef)
- r3.SendCommandAndResponse(cmd)
- cmd = "ENGINE PLUGIN \"%s\" SET \"Worker.StopType\" \"StopAtReference\""%(kickOffTimerClockName)
- r3.SendCommandAndResponse(cmd)
- matchClockPlugin.Start()
- except:
- #TODO: Engine is not connected or have errors
- continue
- def OnGameOnline_ClockStopped(sender, args):
- if GameOnline.IsOnAir:
- for r3, matchClockPlugin in GetClockPluginFromAllConnectedEngines(Script.Description):
- SetupClock(matchClockPlugin)
- if GameOnline.Clock.ActivePart.Name.ToString() == "Finished" or GameOnline.Clock.ActivePart.Name.ToString() == "Full Time" or GameOnline.Clock.ActivePart.Name.ToString() == "Penalties":
- pass
- else:
- if sender.Clock.ElapsedTime > sender.Clock.ActivePart.EndAt:
- matchClockPlugin.Stop(sender.Clock.ActivePart.EndAt)
- else:
- matchClockPlugin.Stop(sender.Clock.ElapsedTime)
- if Game.Clock.ActivePart.EndAt == "penalties": return
- endRef = FormatClock(DateTime.Now - sender.Clock.ElapsedTime + Game.Clock.ActivePart.EndAt + TimeSpan.FromMilliseconds(100))#.ToString('O')
- if Game.Clock.ActivePart.Duration == TimeSpan.FromSeconds(0):
- #this prevent the extra timer to be shown when the part duration is 0, PS: Not supposed to happen
- cmd = "ENGINE PLUGIN \"%s\" SET \"Worker.StopReference\" \"%s\""%(Script.Description, DateTime.Now + TimeSpan.FromHours(99))
- else:
- cmd = "ENGINE PLUGIN \"%s\" SET \"Worker.StopReference\" \"%s\""%(Script.Description, endRef)
- r3.SendCommandAndResponse(cmd)
- extraTimerClockName = "GameClockExtraTime"
- for r3, matchClockPlugin in GetClockPluginFromAllConnectedEngines(extraTimerClockName):
- SetupClockExtraTimer(matchClockPlugin)
- # if sender.Clock.ElapsedTime> sender.Clock.ActivePart.EndAt:
- # matchClockPlugin.Stop( sender.Clock.ElapsedTime-sender.Clock.ActivePart.EndAt)
- # else:
- # matchClockPlugin.Stop(TimeSpan.FromSeconds(0))
- kickOffTimerClockName = "GameClockKickOff"
- for r3, matchClockPlugin in GetClockPluginFromAllConnectedEngines(kickOffTimerClockName):
- SetupClockKickOff(matchClockPlugin)
- if GameOnline.Clock.ActivePart.Name.ToString() == "Finished" or GameOnline.Clock.ActivePart.Name.ToString() == "Full Time" or GameOnline.Clock.ActivePart.Name.ToString() == "Penalties":
- pass
- else:
- if sender.Clock.ElapsedTime > sender.Clock.ActivePart.EndAt:
- matchClockPlugin.Stop(sender.Clock.ActivePart.EndAt)
- else:
- matchClockPlugin.Stop(sender.Clock.ElapsedTime)
- endRef = FormatClock(DateTime.Now - sender.Clock.ElapsedTime + Game.Clock.ActivePart.EndAt + TimeSpan.FromMilliseconds(100))#.ToString('O')
- if Game.Clock.ActivePart.Duration == TimeSpan.FromSeconds(0):
- cmd = "ENGINE PLUGIN \"%s\" SET \"Worker.StopReference\" \"%s\""%(kickOffTimerClockName, FormatClock(DateTime.Now + TimeSpan.FromHours(99)))
- else:
- cmd = "ENGINE PLUGIN \"%s\" SET \"Worker.StopReference\" \"%s\""%(kickOffTimerClockName, endRef)
- r3.SendCommandAndResponse(cmd)
- def GetClockPluginFromAllConnectedEngines(clockName):
- list = []
- if hasattr(Context, "OutputManager"):
- for channelOutput in OutputManager.ChannelOutputs:
- for engineAss in channelOutput.EnginesAssignmentProfiles:
- for pgmConfig in engineAss.ProgramGraphicsEngines:
- if pgmConfig.IsValid and pgmConfig.GraphicsEngine and pgmConfig.GraphicsEngine.IsConnected:
- r3 = pgmConfig.GraphicsEngine
- list.append((r3, r3.CreateClockPlugin(clockName)))
- else:
- for r3 in R3GraphicsEngines:
- if r3.IsConnected:
- list.append((r3, r3.CreateClockPlugin(clockName)))
- return list
- def SetupClock(clock):
- clock.SetClockType("Count");
- clock.SetMaskFormat("MaxMinSec");
- clock.SetPlusSignalVisibility(False);
- def SetupClockKickOff(clock):
- clock.SetClockType("Count");
- clock.SetMaskFormat("MaxMinSec");
- clock.SetPlusSignalVisibility(False);
- def SetupClockExtraTimer(clock):
- clock.SetClockType("Count");
- clock.SetMaskFormat("MaxMinSec");
- clock.SetPlusSignalVisibility(False);
- def OnTimeSetSafe(sender, args):
- #runs the script with the script runner avoiding to have to reset the script during the development..
- Core.ScriptRunner.Execute(Script, "OnTimeSet", sender, args)
- def OnTimeSet(sender, args):
- if sender.IsRunning:
- OnGameOnline_ClockStarted(ClockWrapper(sender), args)
- else:
- OnGameOnline_ClockStopped(ClockWrapper(sender), args)
- class ClockWrapper:
- def __init__(self, clock):
- self.Clock = clock
- import System
- def SetTime():
- OnTimeSet(GameOnline.Clock, System.EventArgs.Empty)
- def OnGameOpened(sender, args):
- #check if the object exists in the context, then removes the subscription
- if hasattr(Context, "GameOnline"):
- if Globals["OnTimeSetSubscription"]:
- GameOnline.Clock.TimeSet -= Globals["OnTimeSetSubscription"]
- Globals["OnTimeSetSubscription"] = OnTimeSetSafe
- GameOnline.Clock.TimeSet += Globals["OnTimeSetSubscription"]
- #if hasattr(Context, "GameOnline"):
- # OnTimeSet(GameOnline.Clock, args)
Untitled
From Little Macaque, 2 Weeks ago, written in Plain Text, viewed 1 times.
This paste will give up the ghost in 1 Week.
URL https://paste.afonso.co/view/55c3453a
Embed
Download Paste or View Raw
— Expand Paste to full width of browser