Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
actiondrinkpondcontinuous.c
Go to the documentation of this file.
2{
3 override void CreateActionComponent()
4 {
5 m_ActionData.m_ActionComponent = new CAContinuousRepeat(UATimeSpent.DRINK_POND);
6 }
7}
8
9class ActionDrinkPondContinuous : ActionContinuousBase
10{
11 private const float WATER_DRANK_PER_SEC = 35;
12 protected const string ALLOWED_WATER_SURFACES = string.Format("%1|%2", UAWaterType.FRESH, UAWaterType.STILL);
13 protected int m_AllowedLiquidMask;
14
16 {
17 m_CallbackClass = ActionDrinkPondContinuousCB;
18 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DRINKPOND;
19 m_FullBody = true;
20 m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH;
21 m_Text = "#drink";
22
24 m_AllowedLiquidMask &= ~LIQUID_SNOW;
25 m_AllowedLiquidMask &= ~LIQUID_HOTWATER;
26 }
27
28 override bool IsDrink()
29 {
30 return true;
31 }
32
33 override typename GetInputType()
34 {
36 }
37
38 override bool CanBeUsedInFreelook()
39 {
40 return false;
41 }
42
44 {
45 m_ConditionItem = new CCINone();
46 m_ConditionTarget = new CCTWaterSurfaceEx(UAMaxDistances.DEFAULT, m_AllowedLiquidMask);
47 }
48
49 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
50 {
51 if (item && item.IsHeavyBehaviour())
52 return false;
53
54 int liquidType = LIQUID_NONE;
55 liquidType = target.GetSurfaceLiquidType();
56
57 return liquidType & m_AllowedLiquidMask && player.CanEatAndDrink();
58 }
59
60 override void OnStart(ActionData action_data)
61 {
62 super.OnStart(action_data);
63
64 action_data.m_Player.TryHideItemInHands(true);
65 }
66
67 override void OnEnd(ActionData action_data)
68 {
69 action_data.m_Player.TryHideItemInHands(false);
70 }
71
72 override void OnFinishProgressServer(ActionData action_data)
73 {
74 Param1<float> nacdata = Param1<float>.Cast(action_data.m_ActionComponent.GetACData());
75 if (nacdata)
76 {
77 EConsumeType consumeType;
78
79 CCTWaterSurfaceEx waterCheck = CCTWaterSurfaceEx.Cast(m_ConditionTarget);
80 if (!waterCheck)
81 return;
82
83 int liquidSource = waterCheck.GetLiquidType();
84 switch (liquidSource)
85 {
87 consumeType = EConsumeType.ENVIRO_WELL;
88 break;
89
90 default:
91 consumeType = EConsumeType.ENVIRO_POND;
92 break;
93 }
94
95 PlayerConsumeData consumeData = new PlayerConsumeData();
96
97 consumeData.m_Type = consumeType;
98 consumeData.m_Amount = UAQuantityConsumed.DRINK;
99 consumeData.m_Source = null;
100 consumeData.m_Agents = action_data.m_Player.GetBloodyHandsPenaltyAgents();
101 consumeData.m_LiquidType = liquidSource;
102
103 action_data.m_Player.Consume(consumeData);
104 }
105 }
106
107 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
108 {
109 super.WriteToContext(ctx, action_data);
110
111 if (HasTarget())
112 {
113 ctx.Write(action_data.m_Target.GetCursorHitPos());
114 return;
115 }
116
117 ctx.Write(vector.Zero);
118 }
119
120 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
121 {
122 super.ReadFromContext(ctx, action_recive_data);
123
124 if (HasTarget())
125 {
126 vector cursorPosition;
127 if (!ctx.Read(cursorPosition))
128 return false;
129
130 action_recive_data.m_Target.SetCursorHitPos(cursorPosition);
131 }
132
133 return true;
134 }
135
136 override bool IsLockTargetOnUse()
137 {
138 return false;
139 }
140
141 // DEPRECATED
142 [Obsolete("CCTWaterSurfaceEx::GetSurfaceLiquidType can be used instead")]
143 protected int GetLiquidSource(ActionTarget target)
144 {
145 vector hitPosition = target.GetCursorHitPos();
146 string surfaceType;
147 int liquidSource;
148
149 g_Game.SurfaceGetType3D(hitPosition[0], hitPosition[1], hitPosition[2], surfaceType);
150 string path = "CfgSurfaces " + surfaceType + " liquidType";
151 liquidSource = GetGame().ConfigGetInt(path);
152
153 return liquidSource;
154 }
155}
override void OnFinishProgressServer(ActionData action_data)
override void CreateConditionComponents()
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
int m_CommandUID
Definition actionbase.c:31
int m_StanceMask
Definition actionbase.c:33
override bool CanBeUsedInFreelook()
int GetLiquidSource(ActionTarget target)
void ActionDrinkPondContinuous()
ActionDrinkPondContinuousCB WATER_DRANK_PER_SEC
override bool IsDrink()
override bool IsLockTargetOnUse()
int m_AllowedLiquidMask
const string ALLOWED_WATER_SURFACES
override bool HasTarget()
override GetInputType()
#define LIQUID_CLEANWATER
void CCTWaterSurfaceEx(float maximal_target_distance, int allowedLiquidSource)
ActionData m_ActionData
Serialization general interface. Serializer API works with:
Definition serializer.c:56
DayZGame g_Game
Definition dayzgame.c:3868
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
EConsumeType
Definition econsumetype.c:2
proto native CGame GetGame()
void Obsolete(string msg="")
Definition enscript.c:371
const int LIQUID_NONE
Definition constants.c:529
const int LIQUID_GROUP_DRINKWATER
Definition constants.c:556
void OnEnd()
Definition sound.c:226
void ReadFromContext(ParamsReadContext ctx)
Definition hand_events.c:70
void WriteToContext(ParamsWriteContext ctx)
Definition hand_events.c:72
void OnStart(Param par=null)