DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionWetClothingFromContainer.c
См. документацию.
2{
5
6 override void CreateActionComponent()
7 {
8 float quantityPerSecond = 1.0;
9 Bottle_Base bottle = Bottle_Base.Cast(m_ActionData.m_MainItem);
10 if (bottle)
11 quantityPerSecond = bottle.GetLiquidEmptyRate() * bottle.GetLiquidThroughputCoef();
12
13 float wetMax = 1.0;
14 ItemBase clothing = ItemBase.Cast(m_ActionData.m_Target.GetObject());
15 if (clothing)
16 wetMax = clothing.GetWetMax();
17
18 float stepSize = 0.2 * wetMax / ActionWetClothingFromContainer.WET_PER_QUANTITY;
19 m_WetGainPerStep = 0.2 * wetMax;
20 float stepTime = stepSize / quantityPerSecond;
21 m_ActionData.m_ActionComponent = new CAContinuousQuantityRepeat(quantityPerSecond, stepTime);
22 }
23
24 override void EndActionComponent()
25 {
28 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_FINISH);
29 else
30 SetCommand(DayZPlayerConstants.CMD_ACTIONINT_END);
31 }
32};
33
35{
36 static const float WET_PER_QUANTITY = 0.001;
37
39 {
41 m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_EMPTY_VESSEL;
42 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
43 m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_LOW;
44 m_Text = "#STR_Wet_Clothing";
45 m_LockTargetOnUse = false;
46 }
47
53
54 override bool HasAlternativeInterrupt() { return true; }
55
56 override bool UseAlternativeInterrupt(ActionData action_data)
57 {
58 return action_data.m_ActionComponent.GetProgress() >= 1;
59 }
60
61 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
62 {
63 if (g_Game.IsServer() && g_Game.IsMultiplayer())
64 return true;
65
66 Object targetObject = target.GetObject();
67 if (!targetObject || !item || item.IsDamageDestroyed())
68 return false;
69
70 ItemBase targetItem = ItemBase.Cast(targetObject);
71 if (!targetItem || !targetItem.IsClothing())
72 return false;
73
74 if (targetItem.GetHierarchyParent())
75 return false;
76
77 if (targetItem.GetWet() >= targetItem.GetWetMax())
78 return false;
79
80 if (!item.IsLiquidPresent() || item.GetQuantity() <= item.GetQuantityMin() || item.GetIsFrozen())
81 return false;
82
83 int lt = item.GetLiquidType();
84 if (lt == LIQUID_GASOLINE || lt == LIQUID_DIESEL)
85 return false;
86
87 return true;
88 }
89
90 override bool ActionConditionContinue(ActionData action_data)
91 {
92 ItemBase container = action_data.m_MainItem;
93 ItemBase clothing = ItemBase.Cast(action_data.m_Target.GetObject());
94 if (!container || !clothing)
95 return false;
96
97 if (container.GetQuantity() <= container.GetQuantityMin())
98 return false;
99
100 if (clothing.GetWet() >= clothing.GetWetMax())
101 return false;
102
103 return true;
104 }
105
106 override void OnFinishProgressServer(ActionData action_data)
107 {
109 if (!cb) return;
110
111 ItemBase clothing = ItemBase.Cast(action_data.m_Target.GetObject());
112 if (!clothing) return;
113
114 clothing.SetWet(Math.Clamp(clothing.GetWet() + cb.m_WetGainPerStep, 0.0, clothing.GetWetMax()));
115 }
116
117 override void OnEndServer(ActionData action_data)
118 {
119 SendRPC(action_data, false);
120
122 if (cb)
123 {
124 float wetGain = cb.m_WetGainPerStep * action_data.m_ActionComponent.GetProgress();
125 if (wetGain > 0)
126 {
127 ItemBase clothing = ItemBase.Cast(action_data.m_Target.GetObject());
128 if (clothing)
129 clothing.SetWet(Math.Clamp(clothing.GetWet() + wetGain, 0.0, clothing.GetWetMax()));
130 }
131 }
132
133 super.OnEndServer(action_data);
134 }
135
136 override void OnStartAnimationLoop(ActionData action_data) { SendRPC(action_data, true); }
137 override void OnEndAnimationLoop(ActionData action_data) { SendRPC(action_data, false); }
138
139 protected void SendRPC(ActionData actionData, bool enable)
140 {
141 if (!g_Game.IsMultiplayer() || g_Game.IsServer())
142 {
144 if (comp.m_RPCStopAlreadySent)
145 return;
146
147 Bottle_Base target_vessel = Bottle_Base.Cast(actionData.m_MainItem);
148 Param1<bool> play = new Param1<bool>(enable);
149 g_Game.RPCSingleParam(target_vessel, SoundTypeBottle.EMPTYING, play, true);
150
151 if (!enable)
152 comp.m_RPCStopAlreadySent = true;
153 }
154 }
155};
string m_Text
Определения ActionBase.c:57
bool m_LockTargetOnUse
Определения ActionBase.c:59
ref CCIBase m_ConditionItem
Определения ActionBase.c:63
float m_SpecialtyWeight
Определения ActionBase.c:77
ref CCTBase m_ConditionTarget
Определения ActionBase.c:64
int m_StanceMask
Определения ActionBase.c:61
void ActionTarget(Object object, Object parent, int componentIndex, vector cursorHitPos, float utility, string surfaceName="")
Определения ActionTargets.c:125
SoundTypeBottle
Определения Bottle_Base.c:2
DayZGame g_Game
Определения DayZGame.c:4074
void SendRPC()
Определения DisplayStatus.c:171
void SetCommand(int command_uid)
Определения AnimatedActionBase.c:56
ActionData m_ActionData
Определения AnimatedActionBase.c:3
bool UseAlternativeInterrupt(ActionData action_data)
Определения ActionContinuousBase.c:152
void ActionContinuousBase()
Определения ActionContinuousBase.c:124
ActionBaseCB m_Callback
Определения ActionBase.c:36
ref ActionTarget m_Target
Определения ActionBase.c:39
ref CABase m_ActionComponent
Определения ActionBase.c:37
ItemBase m_MainItem
Определения ActionBase.c:35
Определения ActionBase.c:22
override void OnFinishProgressServer(ActionData action_data)
override bool HasAlternativeInterrupt()
void SendRPC(ActionData actionData, bool enable)
override bool ActionConditionContinue(ActionData action_data)
override void OnStartAnimationLoop(ActionData action_data)
override void OnEndAnimationLoop(ActionData action_data)
override bool UseAlternativeInterrupt(ActionData action_data)
override void OnEndServer(ActionData action_data)
override void CreateConditionComponents()
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
static const float WET_PER_QUANTITY
override void CreateActionComponent()
Определения ActionWetClothingFromContainer.c:6
int m_CommandUID
Определения AnimatedActionBase.c:147
Определения AyranBottle.c:2
float GetProgress()
Определения CABase.c:62
Определения CCINonRuined.c:2
Определения CCTNonRuined.c:2
Определения EnMath.c:7
Определения ObjectTyped.c:2
Определения PlayerBaseClient.c:2
const float DEFAULT
Определения ActionConstants.c:114
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
const int LIQUID_GASOLINE
Определения 3_Game/DayZ/constants.c:582
const int LIQUID_DIESEL
Определения 3_Game/DayZ/constants.c:583
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.