DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionTransferLiquid.c
См. документацию.
1class TransferLiquidActionReciveData : ActionReciveData
2{
4}
5
6class TransferLiquidActionData : ActionData
7{
9};
10
12{
13 private const float TIME_TO_REPEAT = 0.25;
14
15 override void CreateActionComponent()
16 {
17 if (TransferLiquidActionData.Cast(m_ActionData))
18 m_ActionData.m_ActionComponent = new CAContinuousQuantityLiquidTransfer(UAQuantityConsumed.DRAIN_LIQUID, TIME_TO_REPEAT, TransferLiquidActionData.Cast(m_ActionData).m_Tendency);
19 else
21 }
22};
23
26{
28 {
30 m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_EMPTY_VESSEL;
31 m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_EMPTY_VESSEL;
32 m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_LOW;
33 }
34
40
41 override bool HasProneException()
42 {
43 return true;
44 }
45
46 override string GetText()
47 {
48 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
49 if ( player.GetLiquidTendencyDrain() )
50 return "#drain_liquid";
51 else
52 return "#pour_liquid";
53 }
54
55 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
56 {
57 ItemBase target_item = ItemBase.Cast(target.GetObject());
58
59 if ( target_item && item )
60 {
61 bool can_drain = Liquid.CanTransfer(target_item,item);
62 bool can_pour = Liquid.CanTransfer(item,target_item);
63
64 if (can_drain && can_pour)
65 {
66 return true;
67 }
68 else if (!can_pour && can_drain)
69 {
70 if ( (!GetGame().IsDedicatedServer()) && !player.GetLiquidTendencyDrain() )
71 {
72 player.SetLiquidTendencyDrain(true);
73 return false;
74 }
75 else
76 {
77 return true;
78 }
79 }
80 else if (!can_drain && can_pour)
81 {
82 if ( (!GetGame().IsDedicatedServer()) && player.GetLiquidTendencyDrain() )
83 {
84 player.SetLiquidTendencyDrain(false);
85 return false;
86 }
87 else
88 {
89 return true;
90 }
91 }
92 }
93 return false;
94 }
95
96 override void OnStartClient( ActionData action_data )
97 {
98 TransferLiquidActionData.Cast(action_data).m_Tendency = action_data.m_Player.GetLiquidTendencyDrain();
99 }
100
101 override void OnStartServer( ActionData action_data )
102 {
103 super.OnStartServer(action_data);
104
105 if (!GetGame().IsMultiplayer())
106 TransferLiquidActionData.Cast(action_data).m_Tendency = action_data.m_Player.GetLiquidTendencyDrain();
107 }
108
110 {
111 TransferLiquidActionData action_data = new TransferLiquidActionData;
112 return action_data;
113 }
114
115 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
116 {
117 super.WriteToContext(ctx, action_data);
118
119 ctx.Write(action_data.m_Player.GetLiquidTendencyDrain());
120 }
121
122 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data )
123 {
124 if(!action_recive_data)
125 {
126 action_recive_data = new TransferLiquidActionReciveData;
127 }
128 TransferLiquidActionReciveData recive_data_transfer = TransferLiquidActionReciveData.Cast(action_recive_data);
129
130 super.ReadFromContext(ctx, action_recive_data);
131
132 bool tendency_drain;
133 if ( !ctx.Read(tendency_drain) )
134 return false;
135 recive_data_transfer.m_TendencyRecived = tendency_drain;
136 return true;
137 }
138
139 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
140 {
141 super.HandleReciveData(action_recive_data, action_data);
142
143 TransferLiquidActionReciveData recive_data_transfer = TransferLiquidActionReciveData.Cast(action_recive_data);
144 TransferLiquidActionData.Cast(action_data).m_Tendency = recive_data_transfer.m_TendencyRecived;
145 }
146
147 override void OnStartAnimationLoop( ActionData action_data )
148 {
149 if ( !GetGame().IsMultiplayer() || GetGame().IsServer() )
150 {
151 Bottle_Base vessel_in_hands = Bottle_Base.Cast( action_data.m_Target.GetObject() );
152 Param1<bool> play = new Param1<bool>( true );
153 if (TransferLiquidActionData.Cast(action_data))
154 {
155 if (TransferLiquidActionData.Cast(action_data).m_Tendency == true)
156 GetGame().RPCSingleParam( vessel_in_hands, SoundTypeBottle.EMPTYING, play, true );
157 else if (!TransferLiquidActionData.Cast(action_data).m_Tendency == false)
158 GetGame().RPCSingleParam( vessel_in_hands, SoundTypeBottle.POURING, play, true );
159 }
160 }
161 }
162
163 override void OnEndAnimationLoop( ActionData action_data )
164 {
165 if ( !GetGame().IsMultiplayer() || GetGame().IsServer() )
166 {
167 Bottle_Base target_vessel = Bottle_Base.Cast( action_data.m_Target.GetObject());
168 Param1<bool> play = new Param1<bool>( false );
169 if (TransferLiquidActionData.Cast(action_data).m_Tendency)
170 GetGame().RPCSingleParam( target_vessel, SoundTypeBottle.EMPTYING, play, true );
171 else
172 GetGame().RPCSingleParam( target_vessel, SoundTypeBottle.POURING, play, true );
173 }
174 }
175};
ActionBase ActionData
Определения ActionBase.c:30
class ActionTargets ActionTarget
TransferLiquidActionReciveData m_Tendency
SoundTypeBottle
Определения Bottle_Base.c:2
PlayerBase GetPlayer()
Определения ModifierBase.c:51
float m_SpecialtyWeight
Определения ActionBase.c:77
ref CCIBase m_ConditionItem
Определения ActionBase.c:64
ref CCTBase m_ConditionTarget
Определения ActionBase.c:65
ActionData m_ActionData
Определения AnimatedActionBase.c:3
void ActionContinuousBase()
Определения ActionContinuousBase.c:124
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionTransferLiquid.c:55
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
Определения ActionTransferLiquid.c:122
override void OnStartAnimationLoop(ActionData action_data)
Определения ActionTransferLiquid.c:147
override void CreateConditionComponents()
Определения ActionTransferLiquid.c:35
override void OnEndAnimationLoop(ActionData action_data)
Определения ActionTransferLiquid.c:163
override void OnStartServer(ActionData action_data)
Определения ActionTransferLiquid.c:101
void ActionTransferLiquid()
Определения ActionTransferLiquid.c:27
override bool HasProneException()
Определения ActionTransferLiquid.c:41
override string GetText()
Определения ActionTransferLiquid.c:46
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
Определения ActionTransferLiquid.c:115
override void OnStartClient(ActionData action_data)
Определения ActionTransferLiquid.c:96
override ActionData CreateActionData()
Определения ActionTransferLiquid.c:109
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Определения ActionTransferLiquid.c:139
const float TIME_TO_REPEAT
Определения ActionTransferLiquid.c:13
override void CreateActionComponent()
Определения ActionTransferLiquid.c:15
int m_CommandUID
Определения AnimatedActionBase.c:143
int m_CommandUIDProne
Определения AnimatedActionBase.c:144
Определения Canteen.c:2
Определения CCINonRuined.c:2
Определения CCTNonRuined.c:2
proto native void RPCSingleParam(Object target, int rpc_type, Param param, bool guaranteed, PlayerIdentity recipient=null)
see CGame.RPC
Определения InventoryItem.c:731
Определения PlayerBaseClient.c:2
proto bool Write(void value_out)
proto bool Read(void value_in)
const float DEFAULT
Определения ActionConstants.c:112
const float DRAIN_LIQUID
Определения ActionConstants.c:13
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16