DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ActionEmptyMagazine.c
Go to the documentation of this file.
2{
3 Magazine m_magazinePile;
4}
5
6class ActionEmptyMagazineCB : ActionContinuousBaseCB
7{
8 override void CreateActionComponent()
9 {
10 m_ActionData.m_ActionComponent = new CAContinuousRepeat(UATimeSpent.MAG_EMPTY);
11 }
12};
13
15{
17 {
18 m_CallbackClass = ActionEmptyMagazineCB;
19 m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_EMPTYMAG;
20 m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_EMPTYMAG;
21 m_Text = "#empty_magazine";
22 }
23
24 override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL)
25 {
26 if ( super.SetupAction( player, target, item, action_data, extra_data))
27 {
28 EmptyMagazineActionData emActionData = EmptyMagazineActionData.Cast(action_data);
29 emActionData.m_magazinePile = NULL;
30 return true;
31 }
32 return false;
33 }
34
36 {
38 return action_data;
39 }
40
42 {
45 }
46
47 override bool HasProneException()
48 {
49 return true;
50 }
51
52 bool CanEmpty(ItemBase item)
53 {
54 Magazine mag;
55 return ( item && Class.CastTo(mag, item) && mag.GetAmmoCount() > 0 );
56 }
57
58 override bool ActionConditionContinue( ActionData action_data )
59 {
60 return CanEmpty(action_data.m_MainItem);
61 }
62
63 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
64 {
65 Magazine itm;
66 return CanEmpty(item);
67 }
68
69 override bool HasTarget()
70 {
71 return false;
72 }
73
74 override void OnExecuteServer( ActionData action_data )
75 {
76 EmptyMagazineActionData emActionData = EmptyMagazineActionData.Cast(action_data);
77
78 Magazine mag;
79 if (!Class.CastTo(mag, action_data.m_MainItem))
80 return;
81
82 //float dmg;
83 //string bulletType;
84
85 /*int ammoCount = mag.GetAmmoCount();
86 if(GetAmmoCount() > 0)
87 {
88 mag.Get
89 mag.SetAmmoCount( ammoCount - 1 );
90 array< Magazine > piles;
91
92 if( !callback.m_magazinePile )
93 {
94 piles = MiscGameplayFunctions.CreateMagazinePilesFromBullet(bulletType, action_data.m_Player.GetPosition(),1,dmg);
95 if( piles.Count() > 0 )
96 callback.m_magazinePile = piles.Get(0);
97 }
98 else
99 {
100 if( callback.m_magazinePile.GetAmmoMax() > callback.m_magazinePile.GetAmmoCount() && (vector.Distance(action_data.m_Player.GetPosition(), callback.m_magazinePile.GetPosition()) < MAX_GROUND_PILE_DISTANCE ) )
101 {
102 callback.m_magazinePile.StoreCartridge(dmg, bulletType);
103 }
104 else
105 {
106 piles = MiscGameplayFunctions.CreateMagazinePilesFromBullet(bulletType, action_data.m_Player.GetPosition(),1,dmg);
107 if( piles.Count() > 0 )
108 callback.m_magazinePile = piles.Get(0);
109 }
110 }
111
112
113
114 } */
115
116
117
118 //----Uncomment after AcquireCartridge will work
119
120 float dmg;
121 string ammoType;
122
123 if ( !mag.ServerAcquireCartridge(dmg,ammoType) )
124 return;
125
126 mag.ApplyManipulationDamage();
127
128 string magazineTypeName;
129 GetGame().ConfigGetText( "CfgAmmo " + ammoType + " spawnPileType" , magazineTypeName);
130
131 if ( !DayZPlayerUtils.HandleStoreCartridge(action_data.m_Player, NULL, -1, dmg, ammoType, magazineTypeName, false) )
132 {
133 array< Magazine > piles;
134
135 if ( !emActionData.m_magazinePile )
136 {
137 piles = MiscGameplayFunctions.CreateMagazinePilesFromBullet(ammoType,action_data.m_Player.GetPosition(),1,dmg);
138 if ( piles.Count() > 0 )
139 emActionData.m_magazinePile = piles.Get(0);
140 }
141 else
142 {
143 if ( emActionData.m_magazinePile.GetAmmoMax() > emActionData.m_magazinePile.GetAmmoCount() && (vector.DistanceSq(action_data.m_Player.GetPosition(), emActionData.m_magazinePile.GetPosition()) < (UAMaxDistances.DEFAULT * UAMaxDistances.DEFAULT) ) )
144 {
145 emActionData.m_magazinePile.ServerStoreCartridge(dmg,ammoType);
146 }
147 else
148 {
149 piles = MiscGameplayFunctions.CreateMagazinePilesFromBullet(ammoType, action_data.m_Player.GetPosition(), 1, dmg);
150 if ( piles.Count() > 0 )
151 emActionData.m_magazinePile = piles.Get(0);
152 }
153 }
154 //emActionData.m_magazinePile.SetSynchDirty();
155 }
156 //mag.SetSynchDirty();
157 }
158};
ref CCIBase m_ConditionItem
Definition ActionBase.c:55
ref CCTBase m_ConditionTarget
Definition ActionBase.c:56
protected string m_Text
Definition ActionBase.c:49
class ActionTargets ActionTarget
private void DayZPlayerUtils()
cannot be instantiated
void CreateActionComponent()
ItemBase m_MainItem
Definition ActionBase.c:28
PlayerBase m_Player
Definition ActionBase.c:33
override bool ActionConditionContinue(ActionData action_data)
override void OnExecuteServer(ActionData action_data)
override ActionData CreateActionData()
override void CreateConditionComponents()
bool CanEmpty(ItemBase item)
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override bool HasTarget()
override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
override bool HasProneException()
protected int m_CommandUIDProne
proto bool ConfigGetText(string path, out string value)
Get string value from config on path.
Super root of all classes in Enforce script.
Definition EnScript.c:11
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Definition param.c:12
const float DEFAULT
const float MAG_EMPTY
static proto native float DistanceSq(vector v1, vector v2)
Returns the square distance between tips of two 3D vectors.
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
proto native CGame GetGame()
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.