Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
actionunfoldmap.c
Go to the documentation of this file.
2{
3 bool m_MapFolding;
4 bool m_HasReceivedEvent;
5 bool m_CancelCondition;
6 int m_InitMovementState;
7 int m_FinalMovementState;
8
10 {
12 EnableStateChangeCallback();
13 EnableCancelCondition(true);
14 }
15
17 {
18 if (GetGame() && GetGame().GetMission())
19 {
20 if (!CfgGameplayHandler.GetUse3DMap())
21 {
22 GetGame().GetMission().RemoveActiveInputExcludes({"map"}, false);
23 }
24 else
25 {
26 GetGame().GetMission().RemoveActiveInputExcludes({"loopedactions"}, false);
27 }
28 GetGame().GetMission().RemoveActiveInputRestriction(EInputRestrictors.MAP);
29 }
30
31 if (!m_ActionData || !m_ActionData.m_Player)
32 return;
33
34 ItemMap chernomap = ItemMap.Cast(m_ActionData.m_Player.GetItemInHands());
35 if (chernomap && m_ActionData.m_Player.IsMapOpen())
36 {
37 chernomap.SetMapStateOpen(false, m_ActionData.m_Player);
38 }
39 }
40
41 override void SetActionData(ActionData action_data)
42 {
43 m_ActionData = action_data;
44 m_InitMovementState = m_ActionData.m_Player.m_MovementState.m_iStanceIdx;
45 }
46
47 bool CancelCondition()
48 {
49 return m_CancelCondition;
50 }
51
52 override void OnStateChange(int pOldState, int pCurrentState)
53 {
54 if (!m_ActionData || !m_ActionData.m_Player)
55 return;
56
57 if ((pOldState == STATE_LOOP_IN && pCurrentState == STATE_LOOP_LOOP) && !m_HasReceivedEvent)
58 {
59 m_CancelCondition = true;
60 }
61 }
62
63 override void OnAnimationEvent(int pEventID)
64 {
65 if (!m_ActionData || !m_ActionData.m_Player)
66 return;
67
68 switch (pEventID)
69 {
70 case UA_ANIM_EVENT:
71 m_HasReceivedEvent = true;
72 m_FinalMovementState = m_ActionData.m_Player.m_MovementState.m_iStanceIdx;
73
74 if (StateCheck())
75 {
76 PerformMapChange();
77 m_CancelCondition = false;
78 }
79 else
80 {
81 m_CancelCondition = true;
82 }
83 break;
84 }
85 }
86
87 override void OnFinish(bool pCanceled)
88 {
89 if (m_ActionData && m_ActionData.m_Player)
90 {
91 if (m_ActionData && m_ActionData.m_ActionComponent)
92 m_ActionData.m_State = m_ActionData.m_ActionComponent.Interrupt(m_ActionData);
93
94 if ((!GetGame().IsDedicatedServer()) && GetGame().GetUIManager() && GetGame().GetUIManager().IsMenuOpen(MENU_MAP))
95 {
96 GetGame().GetUIManager().FindMenu(MENU_MAP).Close();
97 }
98
99 ActionUnfoldMap action = ActionUnfoldMap.Cast(m_ActionData.m_Action);
102
103 m_ActionData.m_Player.SetMapClosingSyncSet(false); //reset
104
105 ItemMap chernomap = ItemMap.Cast(m_ActionData.m_Player.GetItemInHands());
106 if (chernomap && m_ActionData.m_Player.IsMapOpen())
107 {
108 chernomap.SetMapStateOpen(false, m_ActionData.m_Player);
109 }
110
111 if (action)
112 action.End(m_ActionData);
113 }
114 }
115
116 void PerformMapChange()
117 {
118 if (m_ActionData.m_Player.IsSwimming() || m_ActionData.m_Player.IsClimbing() || m_ActionData.m_Player.IsFalling() || m_ActionData.m_Player.IsClimbingLadder() || m_ActionData.m_Player.IsUnconscious() || m_ActionData.m_Player.IsRestrained())
119 return;
120
121 ItemMap chernomap = ItemMap.Cast(m_ActionData.m_Player.GetItemInHands());
122 if (chernomap)
123 {
124 if (!m_ActionData.m_Player.IsMapOpen() && !m_MapFolding)
125 {
126 if (m_CancelCondition) //do not open when cancelling in progress
127 return;
128
129 chernomap.SetMapStateOpen(true, m_ActionData.m_Player);
130
131 if (!GetGame().IsMultiplayer() || GetGame().IsServer())
132 {
133 //chernomap.SyncMapMarkers();
134 }
135
136 if (!GetGame().IsDedicatedServer())
137 {
138 UIManager m_UIManager;
139 UIScriptedMenu mapMenu;
140 m_UIManager = GetGame().GetUIManager();
141 m_UIManager.CloseAll();
142 if (!CfgGameplayHandler.GetUse3DMap())
143 {
144 mapMenu = m_UIManager.EnterScriptedMenu(MENU_MAP, null);
145 mapMenu.InitMapItem(chernomap);
146 mapMenu.LoadMapMarkers();
147 GetGame().GetMission().AddActiveInputExcludes({"map"});
148 }
149 else
150 {
151 GetGame().GetMission().AddActiveInputExcludes({"loopedactions"});
152 }
153
154 GetGame().GetMission().AddActiveInputRestriction(EInputRestrictors.MAP);
155 }
156 }
157 else if (m_ActionData.m_Player.IsMapOpen())
158 {
159 chernomap.SetMapStateOpen(false, m_ActionData.m_Player);
160 m_MapFolding = true;
161 m_ActionData.m_Player.SetMapOpen(false);
162 }
163 }
164 }
165
166 bool StateCheck()
167 {
169 }
170}
171
173{
174 void ActionUnfoldMap()
176 m_Text = "#unfold_map";
179 override bool IsInstant()
180 {
181 return false;
182 }
183
185 {
186 m_ConditionItem = new CCINonRuined();
187 m_ConditionTarget = new CCTNone();
189
190 override bool HasTarget()
191 {
192 return false;
193 }
194
195 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
196 {
197 if (player.m_hac || player.IsMapOpen())
198 {
199 return false;
200 }
201 return true;
202 }
203
204 override int GetActionCategory()
205 {
206 return AC_SINGLE_USE;
207 }
208
209 override void OnStartClient(ActionData action_data)
210 {
211 OpenMap(action_data);
212 }
214 override void OnStartServer(ActionData action_data)
215 {
216 super.OnStartServer(action_data);
217
218 OpenMap(action_data);
219 ItemMap chernomap = ItemMap.Cast(action_data.m_MainItem);
220 chernomap.SyncMapMarkers();
221 }
222
223 override void OnEndRequest(ActionData action_data)
225 action_data.m_Callback.InternalCommand(DayZPlayerConstants.CMD_ACTIONINT_END);
226 action_data.m_State = UA_FINISHED;
227 }
228
229 override void Interrupt(ActionData action_data)
230 {
231 if (action_data.m_Player.m_hac)
232 {
233 action_data.m_Player.m_hac.m_MapFolding = true;
234 action_data.m_Player.m_hac.PerformMapChange();
235 action_data.m_Player.m_hac.Cancel();
236 }
237 else //should never get here, End called from the callback
238 {
239 End(action_data);
240 }
241 }
242
243 void OpenMap(ActionData action_data)
244 {
245 if (!action_data.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_PRONE))
246 {
247 action_data.m_Player.m_hac = ActionUnfoldMapCB.Cast(action_data.m_Player.AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_VIEWMAP,ActionUnfoldMapCB));
248 }
249 else
250 {
251 action_data.m_Player.m_hac = ActionUnfoldMapCB.Cast(action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_VIEWMAP,ActionUnfoldMapCB,DayZPlayerConstants.STANCEMASK_PRONE));
252 }
253
254 // sets player for associated callback to use
255 if (action_data.m_Player.m_hac)
256 {
257 action_data.m_Player.m_hac.SetActionData(action_data);
258 action_data.m_Callback = action_data.m_Player.m_hac;
260 }
261
263 {
264 return false;
265 }
266};
const int AC_SINGLE_USE
Definition _constants.c:2
void Interrupt()
bool m_MapFolding
ActionUnfoldMapCB ActionBaseCB ActionUnfoldMap()
bool m_HasReceivedEvent
int m_InitMovementState
bool m_CancelCondition
int m_FinalMovementState
void OpenMap(ActionData action_data)
ActionData m_ActionData
bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Definition actionbase.c:409
void OnEndRequest(ActionData action_data)
Definition actionbase.c:821
bool CanBePerformedWhileChangingStance()
Condition used in PlayerBase::CanChangeStance to check if stance can be changed while action is perfo...
Definition actionbase.c:314
bool HasTarget()
Definition actionbase.c:244
int GetActionCategory()
Definition actionbase.c:278
void OnStartClient(ActionData action_data)
void OnStartServer(ActionData action_data)
bool IsInstant()
Definition actionbase.c:262
void CreateConditionComponents()
Definition actionbase.c:230
override void LoadMapMarkers()
Definition mapmenu.c:322
override void InitMapItem(EntityAI item)
Definition mapmenu.c:168
class DayZCreatureAnimInterface RegisterAnimationEvent(string event_name, string function_name)
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
void End()
called on surrender end request end
proto native CGame GetGame()
const int MENU_MAP
Definition constants.c:191
const int UA_FINISHED
Definition constants.c:466
const int UA_ANIM_EVENT
Definition constants.c:473