DIFF

CfgBunkerBroadcastHandler.c

class CfgBunkerBroadcastHandler
{
	private static bool m_Initialized;
	
	private static const string m_ConfigFilePath = "cfgbunkerbroadcast.json";
	private static ref BunkerBroadcastConfigInstance m_Data = new BunkerBroadcastConfigInstance();
	
	static bool LoadData()
	{
		if (m_Initialized)
			return true;
		
		m_Initialized = false;
		
		if (!CfgGameplayHandler.GetBunkerBroadcastEnabled())
			return false;

		string worldName;
		GetGame().GetWorldName(worldName);
	
		string errorMessage, path;

		path = string.Format("$mission:%1", m_ConfigFilePath);
		if (!JsonFileLoader<BunkerBroadcastConfigInstance>.LoadFile(path, m_Data, errorMessage))
		{
			if (!FileExist(string.Format("$mission:%1", m_ConfigFilePath)))
				path = string.Format("dz/worlds/%1/ce/%2", worldName, m_ConfigFilePath);
			
			if (!JsonFileLoader<BunkerBroadcastConfigInstance>.LoadFile(path, m_Data, errorMessage))
			{
				ErrorEx(errorMessage);
				return false;
			}
		}
		
		m_Initialized = m_Data.IsValid();
		
		return m_Initialized;
	}
	
	static bool IsInitialized()
	{
		return m_Initialized;
	}
	
	static BunkerBroadcastConfigInstance GetData()
	{
		return m_Data;
	}
	
	static void Spawn()
	{
		if (!CfgGameplayHandler.GetBunkerBroadcastEnabled())
			return;
		
		foreach (BunkerBroadcastProxySpawn proxySpawn : m_Data.proxies)
			SpawnBunker(proxySpawn);
	}
	
	static void SyncDataSend(PlayerIdentity identity)
	{
		GetGame().RPCSingleParam(null, ERPCs.RPC_BUNKERBROADCAST_CONFIG_SYNC, new Param1<BunkerBroadcastConfigInstance>(m_Data), true, identity);
	}
	
	static void OnRPC(ParamsReadContext ctx)
	{
		Param1<BunkerBroadcastConfigInstance> data = new Param1<BunkerBroadcastConfigInstance>(null);
		
		if (ctx.Read(data))
		{
			m_Data = data.param1;
			m_Initialized = m_Data.IsValid();
		}
		else
		{
			ErrorEx("CfgBunkerBroadcast - client failed to read incoming data");
		}
	}
		
	private static void SpawnBunker(BunkerBroadcastProxySpawn proxySpawn)
	{	
		int flags = ECE_SETUP | ECE_NOLIFETIME;
		
		Object proxy = g_Game.CreateObjectEx("BunkerBroadcastProxy", vector.ArrayToVec(proxySpawn.position), flags);
		if (!proxy)
			PrintToRPT("SpawnBunker failed to spawn Proxy at " + vector.ArrayToVec(proxySpawn.position));
	}
}