Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_MapMarkerSyncComponent.c
Go to the documentation of this file.
1[ComponentEditorProps(category: "GameScripted/Misc", description: "")]
5
8class SCR_MapMarkerSyncComponent : ScriptComponent
9{
10 protected bool m_bIsDeleteRestricted = true; // server side only, only allow marker owners to delete their placed markers
11 protected int m_iPlacedMarkerLimit = 10; // server side only, limit of allowed synchronized markers per client
12 protected ref array<int> m_OwnedMarkers = {}; // server side only, list of markers owned by this controller to enforce limits
13
14 //------------------------------------------------------------------------------------------------
19 {
21 }
22
23 //------------------------------------------------------------------------------------------------
27 void AskRemoveStaticMarker(int markerID)
28 {
29 SCR_MapMarkerManagerComponent markerMgr = SCR_MapMarkerManagerComponent.GetInstance();
30 if (!markerMgr)
31 return;
32
33 SCR_MapMarkerBase marker = markerMgr.GetStaticMarkerByID(markerID);
34 if (!marker) // client side sanity check
35 return;
36
38 }
39
40 //------------------------------------------------------------------------------------------------
45 {
46 for (int i; i < m_OwnedMarkers.Count(); i++)
47 {
48 if (m_OwnedMarkers.IsIndexValid(i))
49 {
51 i--;
52 }
53 }
54 }
55
56 //------------------------------------------------------------------------------------------------
59 void RemovePlayerMarker(int markerID)
60 {
61 m_OwnedMarkers.RemoveItemOrdered(markerID);
62 }
63
64 //------------------------------------------------------------------------------------------------
65 // RPC
66 //------------------------------------------------------------------------------------------------
67
68 //------------------------------------------------------------------------------------------------
69 [RplRpc(RplChannel.Reliable, RplRcver.Server)]
70 protected void RPC_AskAddStaticMarker(SCR_MapMarkerBase markerData)
71 {
72 SCR_MapMarkerManagerComponent markerMgr = SCR_MapMarkerManagerComponent.GetInstance();
73 if (!markerMgr || m_iPlacedMarkerLimit <= 0)
74 return;
75
76 if (m_OwnedMarkers.Count() >= m_iPlacedMarkerLimit) // remove first if over limit
78
79 markerMgr.AssignMarkerUID(markerData);
80
82 m_OwnedMarkers.Insert(markerData.GetMarkerID());
83
84 markerMgr.OnAddSynchedMarker(markerData); // add server side
85 markerMgr.OnAskAddStaticMarker(markerData);
86 }
87
88 //------------------------------------------------------------------------------------------------
89 [RplRpc(RplChannel.Reliable, RplRcver.Server)]
90 protected void RPC_AskRemoveStaticMarker(int markerID)
91 {
92 SCR_MapMarkerManagerComponent markerMgr = SCR_MapMarkerManagerComponent.GetInstance();
93 if (!markerMgr)
94 return;
95
96 SCR_MapMarkerBase marker = markerMgr.GetStaticMarkerByID(markerID);
97 if (!marker)
98 marker = markerMgr.GetDisabledMarkerByID(markerID);
99
100 if (!marker
101 || marker.GetMarkerOwnerID() == -1 // cannot delete server marker by client request
102 ||(m_bIsDeleteRestricted && marker.GetMarkerOwnerID() != SCR_PlayerController.Cast(GetOwner()).GetPlayerId())) // delete by anyone not allowed && is not the callers marker
103 return;
104
105 if (marker.GetMarkerOwnerID() != -1) // dedicated servers dont track their marker limits
106 {
107 PlayerController ownerController = GetGame().GetPlayerManager().GetPlayerController(marker.GetMarkerOwnerID());
108 if (ownerController)
109 {
110 SCR_MapMarkerSyncComponent ownerSyncComp = SCR_MapMarkerSyncComponent.Cast(ownerController.FindComponent(SCR_MapMarkerSyncComponent));
111 if (ownerSyncComp)
112 ownerSyncComp.RemovePlayerMarker(markerID); // this has to be called on this component of the markers owner, not the RPC sender
113 }
114 }
115
116 markerMgr.OnRemoveSynchedMarker(markerID); // remove server side
117 markerMgr.OnAskRemoveStaticMarker(markerID);
118 }
119
120 //------------------------------------------------------------------------------------------------
121 override void OnPostInit(IEntity owner)
122 {
123 SCR_MissionHeader header = SCR_MissionHeader.Cast(GetGame().GetMissionHeader());
124 if (header)
125 {
126 m_iPlacedMarkerLimit = header.m_iMapMarkerLimitPerPlayer;
127 m_bIsDeleteRestricted = !header.m_bMapMarkerEnableDeleteByAnyone;
128 }
129 }
130}
ArmaReforgerScripted GetGame()
Definition game.c:1398
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
void RPC_AskAddStaticMarker(SCR_MapMarkerBase markerData)
void ClearOwnedMarkers()
void RPC_AskRemoveStaticMarker(int markerID)
int m_iPlacedMarkerLimit
void AskAddStaticMarker(notnull SCR_MapMarkerBase marker)
void RemovePlayerMarker(int markerID)
ref array< int > m_OwnedMarkers
void AskRemoveStaticMarker(int markerID)
SCR_MapMarkerSyncComponentClass m_bIsDeleteRestricted
void Rpc(func method, void p0=NULL, void p1=NULL, void p2=NULL, void p3=NULL, void p4=NULL, void p5=NULL, void p6=NULL, void p7=NULL)
void SetMarkerOwnerID(int playerID)
IEntity GetOwner()
Owner entity of the fuel tank.
proto external int GetPlayerId()
void RplRpc(RplChannel channel, RplRcver rcver, RplCondition condition=RplCondition.None, string customConditionName="")
Definition EnNetwork.c:95
RplRcver
Definition RplRcver.c:59
RplChannel
Communication channel. Reliable is guaranteed to be delivered. Unreliable not.
Definition RplChannel.c:14