LifecycleEvents

July 22, 2023 ยท View on GitHub

The static CF_LifecycleEvents class offers different CF_EventHandler instances that can be subscribed to with custom logic. This provides an easy way to, for example, reset a global cache every time the player switches servers (aka the mission instance is locally recreated).

Event types

ModuleEvent typeEvent sourceDescription
GameOnGameCreateDayZGame constructorOnce per game launch
GameOnGameDestroyDayZGame destructorOnce when closing the game
MissionOnMissionCreateMissionBase constructorEvery time a local mission is started or during server join
MissionOnMissionDestroyMissionBase destructorEvery time a local mission ends or during disconnect from server

Demo

class LifecycleInstanceDemo
{
    void LifecycleInstanceDemo()
    {
        CF_LifecycleEvents.OnGameCreate.AddSubscriber(ScriptCaller.Create(this.HandleGameCreate));
    }
    
    void HandleGameCreate()
    {
        Print("LifecycleInstanceDemo::HandleGameCreate");
    }
};
class LifecycleStaticDemo
{
    [CF_EventSubscriber(ScriptCaller.Create(LifecycleStaticDemo.GameCreate), CF_LifecycleEvents.OnGameCreate)]
    static void GameCreate()
    {
        Print("LifecycleStaticDemo::GameCreate");
    }

    [CF_EventSubscriber(ScriptCaller.Create(LifecycleStaticDemo.GameDestroy), CF_LifecycleEvents.OnGameDestroy)]
    static void GameDestroy()
    {
        Print("LifecycleStaticDemo::GameDestroy");
    }

    [CF_EventSubscriber(ScriptCaller.Create(LifecycleStaticDemo.MissionCreate), CF_LifecycleEvents.OnMissionCreate)]
    static void MissionCreate()
    {
        Print("LifecycleStaticDemo::MissionCreate");
    }

    [CF_EventSubscriber(ScriptCaller.Create(LifecycleStaticDemo.MissionDestroy), CF_LifecycleEvents.OnMissionDestroy)]
    static void MissionDestroy()
    {
        Print("LifecycleStaticDemo::MissionDestroy");
    }

    [CF_EventSubscriber(ScriptCaller.Create(LifecycleStaticDemo.OnePrintToRuleThemAll),
        CF_LifecycleEvents.OnGameCreate,
        CF_LifecycleEvents.OnGameDestroy,
        CF_LifecycleEvents.OnMissionCreate,
        CF_LifecycleEvents.OnMissionDestroy)]
    static void OnePrintToRuleThemAll()
    {
        Print("OnePrintToRuleThemAll");
    }
};