Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_MineAddFlagAction.c
Go to the documentation of this file.
1//------------------------------------------------------------------------------------------------
3{
4 [Attribute("0 0 0.19")]
6
7 //------------------------------------------------------------------------------------------------
9 {
10 return storageManager.FindItemWithComponents({SCR_MineFlagComponent}, EStoragePurpose.PURPOSE_ANY);
11 }
12
13 //------------------------------------------------------------------------------------------------
14 override event void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity)
15 {
16 RplComponent userRplComponent = SCR_EntityHelper.GetEntityRplComponent(pUserEntity);
17 if (!userRplComponent)
18 return;
19
20 RplComponent ownerRplComponent = RplComponent.Cast(pOwnerEntity.FindComponent(RplComponent));
21 if (!ownerRplComponent)
22 return;
23
25 if (!storageManager)
26 return;
27
28 IEntity flag = FindFlagInInventory(storageManager);
29 if (!flag)
30 return;
31
33 if (!itemComponent)
34 return;
35
36 ChimeraCharacter character = ChimeraCharacter.Cast(pUserEntity);
37 if (!character)
38 return;
39
40 RplComponent characterRplComp = character.GetRplComponent();
41 if (!characterRplComp)
42 return;
43
44 RplComponent rplComponent = RplComponent.Cast(flag.FindComponent(RplComponent));
45 if (rplComponent && !rplComponent.IsProxy())
46 {
47 vector mat[4];
48 pOwnerEntity.GetTransform(mat);
49 mat[3] = mat[3] + m_vFlagOffset;
50 itemComponent.SetPlacementPosition(mat[0], mat[1], mat[2], mat[3], characterRplComp.Id());
51 }
52
53 SCR_SoundManagerModule.CreateAndPlayAudioSource(flag, SCR_SoundEvent.SOUND_MINEFLAG_PLACE);
54
55 if (userRplComponent.IsOwner())
56 storageManager.TryRemoveItemFromStorage(flag, itemComponent.GetParentSlot().GetStorage());
57
58 if (ownerRplComponent.IsOwner())
59 {
60 SCR_MineWeaponComponent mine = SCR_MineWeaponComponent.Cast(pOwnerEntity.FindComponent(SCR_MineWeaponComponent));
61 if (mine)
62 mine.SetFlag(flag);
63 }
64 }
65
66 //------------------------------------------------------------------------------------------------
67 override bool CanBeShownScript(IEntity user)
68 {
69 SCR_MineWeaponComponent mine = SCR_MineWeaponComponent.Cast(GetOwner().FindComponent(SCR_MineWeaponComponent));
70 if (!mine || mine.IsFlagged())
71 return false;
72
73 SCR_PressureTriggerComponent mineTriggerComponent = SCR_PressureTriggerComponent.Cast(GetOwner().FindComponent(SCR_PressureTriggerComponent));
74 if (!mineTriggerComponent || !mineTriggerComponent.IsActivated())
75 return false;
76
78 if (!mineAwarenessComponent)
79 return super.CanBeShownScript(user);
80
81 if (!mineAwarenessComponent.IsDetected(GetOwner()))
82 return false;
83
85 if (!storageManager)
86 return false;
87
88 if (!FindFlagInInventory(storageManager))
89 return false;
90
91 return super.CanBeShownScript(user);
92 }
93}
proto external IEntity GetOwner()
Returns the parent entity of this action.
proto external Managed FindComponent(typename typeName)
proto external void GetTransform(out vector mat[])
static RplComponent GetEntityRplComponent(notnull IEntity entity)
override bool CanBeShownScript(IEntity user)
IEntity FindFlagInInventory(InventoryStorageManagerComponent storageManager)
override event void PerformAction(IEntity pOwnerEntity, IEntity pUserEntity)
static SCR_MineAwarenessComponent GetLocalInstance()
void SetPlacementPosition(vector right, vector up, vector forward, vector position, RplId characterRplId)
Authority method used to change the position at which item will placed when removed from the inventor...
SCR_FieldOfViewSettings Attribute
EStoragePurpose