Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_TourniquetStorageComponent.c
Go to the documentation of this file.
4
5class SCR_TourniquetMovedCallback : ScriptedInventoryOperationCallback
6{
10 BaseInventoryStorageComponent m_Storage;
13
14 //------------------------------------------------------------------------------------------------
15 override protected void OnComplete()
16 {
17 if (m_bRemove)
18 m_CharInventoryStorageComp.RemoveItemFromQuickSlot(m_Tourniquet);
19
20 SCR_InventoryMenuUI menu = SCR_InventoryMenuUI.Cast(GetGame().GetMenuManager().FindMenuByPreset(ChimeraMenuPreset.Inventory20Menu));
21 if (menu)
22 {
23 if (m_Tourniquet)
24 {
26 if (itemComp && itemComp.GetParentSlot())
27 {
28 BaseInventoryStorageComponent tqStorage = itemComp.GetParentSlot().GetStorage();
29 if (tqStorage)
30 {
32 if (storageUI)
33 storageUI.Refresh();
34 }
35 }
36 }
37
38 if (m_Storage)
39 {
41 if (storageUI)
42 storageUI.Refresh();
43 }
44 }
45
48 }
49}
50
51class SCR_TourniquetStorageComponent : SCR_EquipmentStorageComponent
52{
53 protected ref SCR_TourniquetMovedCallback m_TourniquetMovedCallback = new SCR_TourniquetMovedCallback();
54
55 //------------------------------------------------------------------------------------------------
60 void AddTourniquetToSlot(IEntity target, ECharacterHitZoneGroup eHitZoneGroup, IEntity tourniquet)
61 {
63 if (!tourniquetStorageComp)
64 return;
65
66 SCR_InventoryStorageManagerComponent storageMan = SCR_InventoryStorageManagerComponent.Cast(GetOwner().FindComponent(SCR_InventoryStorageManagerComponent));
67 if (!storageMan)
68 return;
69
70 if (!tourniquet)
71 return;
72
73 SCR_TourniquetStorageSlot tqTargetSlot;
74 for (int i, count = tourniquetStorageComp.GetSlotsCount(); i < count; i++)
75 {
76 tqTargetSlot = SCR_TourniquetStorageSlot.Cast(tourniquetStorageComp.GetSlot(i));
77 if (!tqTargetSlot)
78 continue;
79
80 if (tqTargetSlot.GetAssociatedHZGroup() != eHitZoneGroup)
81 continue;
82
83 //Return if slot already contains this particular tourniquet. Likely function got called twice harmlessly
84 if (tqTargetSlot.GetItem(i) == tourniquet)
85 return;
86
87 if (tqTargetSlot.GetItem(i))
88 {
89 Print("TourniquetSlot already contained another item", LogLevel.WARNING);
90 return;
91 }
92
93 break;
94 }
95
97 if (!charInventoryStorageComp)
98 return;
99
100 m_TourniquetMovedCallback.m_Tourniquet = tourniquet;
101 m_TourniquetMovedCallback.m_CharInventoryStorageComp = charInventoryStorageComp;
102 m_TourniquetMovedCallback.m_iSlotId = eHitZoneGroup;
103
105 if (itemComp.GetParentSlot())
106 m_TourniquetMovedCallback.m_Storage = itemComp.GetParentSlot().GetStorage();
107 else
108 m_TourniquetMovedCallback.m_Storage = null;
109
110 m_TourniquetMovedCallback.m_bRemove = true;
111
112 if (storageMan.TryMoveItemToStorage(tourniquet, tourniquetStorageComp, tqTargetSlot.GetID(), m_TourniquetMovedCallback))
113 return;
114
116 if (!invComp)
117 return;
118
119 if (!invComp.GetParentSlot())
120 {
121 if (storageMan.TryInsertItemInStorage(tourniquet, tourniquetStorageComp, tqTargetSlot.GetID(), m_TourniquetMovedCallback))
122 return;
123 }
124 }
125
126 //------------------------------------------------------------------------------------------------
131 bool RemoveTourniquetFromSlot(ECharacterHitZoneGroup eHitZoneGroup, IEntity retrievingCharacter = null)
132 {
133 ChimeraCharacter character = ChimeraCharacter.Cast(GetOwner());
134 if (!character)
135 return false;
136
137 SCR_CharacterDamageManagerComponent damageMgr = SCR_CharacterDamageManagerComponent.Cast(character.GetDamageManager());
138 if (!damageMgr)
139 return false;
140
142 if (!tourniquetStorageComp)
143 return false;
144
145 if (!retrievingCharacter)
146 retrievingCharacter = GetOwner();
147
148 SCR_InventoryStorageManagerComponent storageMan = SCR_InventoryStorageManagerComponent.Cast(retrievingCharacter.FindComponent(SCR_InventoryStorageManagerComponent));
149 if (!storageMan)
150 return false;
151
152 IEntity targetTourniquet;
153 SCR_TourniquetStorageSlot tqTargetSlot;
154 for (int i, count = tourniquetStorageComp.GetSlotsCount(); i < count; i++)
155 {
156 tqTargetSlot = SCR_TourniquetStorageSlot.Cast(tourniquetStorageComp.GetSlot(i));
157 if (!tqTargetSlot)
158 continue;
159
160 if (tqTargetSlot.GetAssociatedHZGroup() != eHitZoneGroup)
161 continue;
162
163 targetTourniquet = tqTargetSlot.GetItem(i);
164 break;
165 }
166
167 BaseInventoryStorageComponent targetStorage = storageMan.FindStorageForItem(targetTourniquet, EStoragePurpose.PURPOSE_DEPOSIT);
168 m_TourniquetMovedCallback.m_Storage = targetStorage;
169 m_TourniquetMovedCallback.m_bRemove = false;
170
171 if (!targetTourniquet)
172 return false;
173
174 bool success = false;
175
176 if (storageMan.TryMoveItemToStorage(targetTourniquet, targetStorage, tqTargetSlot.GetID(), m_TourniquetMovedCallback))
177 success = true;
178
180 if (!invComp)
181 return false;
182
183 if (!success && !invComp.GetParentSlot())
184 {
185 if (storageMan.TryInsertItemInStorage(targetTourniquet, targetStorage, tqTargetSlot.GetID(), m_TourniquetMovedCallback))
186 success = true;
187 }
188 else if (!success)
189 {
190 if (storageMan.TryMoveItemToStorage(targetTourniquet, targetStorage, tqTargetSlot.GetID(), m_TourniquetMovedCallback))
191 success = true;
192 }
193
194 if (success)
195 {
196 SCR_HitZone hitZone;
197 array<ref SCR_PersistentDamageEffect> tourniquetEffects = damageMgr.GetAllPersistentEffectsOfType(SCR_TourniquetDamageEffect);
198 foreach (SCR_PersistentDamageEffect effect : tourniquetEffects)
199 {
200 hitZone = SCR_HitZone.Cast(effect.GetAffectedHitZone());
201 if (!hitZone)
202 continue;
203
204 if (tqTargetSlot.GetAssociatedHZGroup() == hitZone.GetHitZoneGroup())
205 damageMgr.TerminateDamageEffect(effect);
206 }
207
208 return true;
209 }
210
211 return false;
212 }
213
214 //------------------------------------------------------------------------------------------------
215 override void OnAddedToSlot(IEntity item, int slotID)
216 {
218 if (!char)
219 return;
220
222 if (!tqSlot)
223 return;
224
226 if (!damageMgr)
227 return;
228
229 damageMgr.SetTourniquettedGroup(tqSlot.GetAssociatedHZGroup(), true);
230 }
231
232 //------------------------------------------------------------------------------------------------
233 override void OnRemovedFromSlot(IEntity item, int slotID)
234 {
236 if (!char)
237 return;
238
240 if (!tqSlot)
241 return;
242
244 if (!damageMgr)
245 return;
246
247 damageMgr.SetTourniquettedGroup(tqSlot.GetAssociatedHZGroup(), false);
248 }
249
250 //------------------------------------------------------------------------------------------------
253 {
254 if (!m_TourniquetMovedCallback.m_OnTourniquetMoved)
255 m_TourniquetMovedCallback.m_OnTourniquetMoved = new ScriptInvoker();
256
257 return m_TourniquetMovedCallback.m_OnTourniquetMoved;
258 }
259}
ChimeraMenuPreset
Menu presets.
ArmaReforgerScripted GetGame()
Definition game.c:1398
IEntity GetSlot(IEntity occupant)
SCR_SalineStorageComponentClass m_CharInventoryStorageComp
BaseInventoryStorageComponent m_Storage
IEntity m_Tourniquet
ref ScriptInvoker< int > m_OnTourniquetMoved
SCR_VehicleDamageManagerComponent GetDamageManager()
proto external Managed FindComponent(typename typeName)
void SetTourniquettedGroup(ECharacterHitZoneGroup hitZoneGroup, bool setTourniquetted)
EHitZoneGroup GetHitZoneGroup()
Definition SCR_HitZone.c:12
SCR_InventoryStorageBaseUI GetStorageUIByBaseStorageComponent(BaseInventoryStorageComponent pStorage)
void AddTourniquetToSlot(IEntity target, ECharacterHitZoneGroup eHitZoneGroup, IEntity tourniquet)
bool RemoveTourniquetFromSlot(ECharacterHitZoneGroup eHitZoneGroup, IEntity retrievingCharacter=null)
override void OnAddedToSlot(IEntity item, int slotID)
ref SCR_TourniquetMovedCallback m_TourniquetMovedCallback
override void OnRemovedFromSlot(IEntity item, int slotID)
ECharacterHitZoneGroup GetAssociatedHZGroup()
IEntity GetOwner()
Owner entity of the fuel tank.
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
Definition LogLevel.c:14
EStoragePurpose
ScriptInvokerBase< func > ScriptInvoker
Definition tools.c:134