47 lines
1.6 KiB
C
47 lines
1.6 KiB
C
// Read replicated discovery locally. A server-wide marker list never leaks
|
|
// locations which have not been recovered through gameplay.
|
|
modded class ERR_LocationComponent
|
|
{
|
|
protected ref SCR_MapMarkerBase m_ERRMarker;
|
|
protected int m_ERRShown;
|
|
|
|
protected override void EOnInit(IEntity owner)
|
|
{
|
|
super.EOnInit(owner);
|
|
if (RplSession.Mode() != RplMode.Dedicated && !SCR_Global.IsEditMode())
|
|
GetGame().GetCallqueue().CallLater(ERR_UpdateMarker, 1500, true);
|
|
}
|
|
protected void ERR_UpdateMarker()
|
|
{
|
|
if (!GetGame().GetPlayerController() || Knowledge() <= 0 || Knowledge() == m_ERRShown) return;
|
|
SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance();
|
|
if (!manager || !manager.GetMarkerConfig()) return;
|
|
if (!m_ERRMarker)
|
|
{
|
|
m_ERRMarker = new SCR_MapMarkerBase();
|
|
m_ERRMarker.SetType(SCR_EMapMarkerType.PLACED_CUSTOM);
|
|
vector p = Position();
|
|
m_ERRMarker.SetWorldPos(Math.Round(p[0]), Math.Round(p[2]));
|
|
m_ERRMarker.SetMarkerConfigID(0);
|
|
manager.InsertStaticMarker(m_ERRMarker, true);
|
|
}
|
|
string label = "Unknown location";
|
|
if (Knowledge() == 2)
|
|
{
|
|
if (Kind() == ERR_LocationKind.RADIO) label = "Radio station";
|
|
else if (Kind() == ERR_LocationKind.EXTRACTION) label = "Extraction helicopter";
|
|
else label = Id();
|
|
}
|
|
m_ERRMarker.SetCustomText(label);
|
|
m_ERRShown = Knowledge();
|
|
}
|
|
protected override void OnDelete(IEntity owner)
|
|
{
|
|
if (GetGame()) GetGame().GetCallqueue().Remove(ERR_UpdateMarker);
|
|
SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance();
|
|
if (manager && m_ERRMarker) manager.RemoveStaticMarker(m_ERRMarker);
|
|
m_ERRMarker = null;
|
|
super.OnDelete(owner);
|
|
}
|
|
}
|