DayZ 1.24
Loading...
Searching...
No Matches
ActionPlaceFireplaceIndoor.c
Go to the documentation of this file.
2{
4 {
5 m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_OPENDOORFW;
6 m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT;
8 m_Text = "#place_object";
9 }
10
16
17 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
18 {
19 if (!target) return false;
20
21 Object target_object = target.GetObject();
22 string action_selection = target_object.GetActionComponentName(target.GetComponentIndex());
24
25 if (target_object && building && action_selection.Contains(FireplaceIndoor.FIREPOINT_ACTION_SELECTION))
26 {
27 if (!IsInReach(player, target, UAMaxDistances.DEFAULT)) return false;
28
30 int fire_point_index = FireplaceIndoor.GetFirePointIndex(action_selection);
31 if (FireplaceIndoor.CanPlaceFireplaceInSelectedSpot(building, fire_point_index, fire_point_pos_world, fire_point_rot_world))
32 {
33 float rot_deg = 0.0;
34 if (building.HasSelection(FireplaceIndoor.FIREPOINT_PLACE_ROT + fire_point_index.ToString()))
35 {
37 diff[1] = 0.0;
38 diff.Normalize();
39 float dotp = vector.Dot("0 0 1", diff);
41 if ((diff[0] < 0) && (diff[2] < 0))
42 rot_deg = 360.0 - rot_deg;
43 else if ((diff[0] < 0) && (diff[2] > 0))
44 rot_deg = 360.0 - rot_deg;
45
46 //Debug.DrawArrow( fire_point_pos_world, fire_point_pos_world + diff );
47 }
48
50 if (fire_point_dist <= 2)
51 {
52 player.SetLastFirePoint(fire_point_pos_world);
53 player.SetLastFirePointIndex(fire_point_index);
54 player.SetLastFirePointRot(rot_deg);
55 return true;
56 }
57 }
58 }
59
60 return false;
61 }
62
64 {
66
67 //replace fireplace with lambda
68 FireplaceToIndoorsLambda lambda = new FireplaceToIndoorsLambda(fireplace_in_hands, "FireplaceIndoor", action_data.m_Player, action_data.m_Player.GetLastFirePoint(), action_data.m_Target.GetObject());
69 lambda.SetTransferParams(true, true, true);
70 action_data.m_Player.ServerReplaceItemInHandsWithNewElsewhere(lambda);
71
72 //add to soft skills
73 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
74 }
75}
76
77
79{
83
85 {
87 vector mtx[4];
89 mtx[3] = pos;
90 gnd.SetGround(NULL, mtx);
91 OverrideNewLocation(gnd);
92
93 //set fire point index and smoke point position in world
94 m_FirePointIndex = player.GetLastFirePointIndex();
95 m_FireplaceRot = player.GetLastFirePointRot();
96
97 vector smoke_point_pos = target.GetSelectionPositionMS(FireplaceIndoor.FIREPOINT_SMOKE_POSITION + m_FirePointIndex.ToString());
100 }
101
103 {
104 super.CopyOldPropertiesToNew(old_item, new_item);
105
106 FireplaceIndoor fireplace_indoor = FireplaceIndoor.Cast(new_item);
108 {
109 //set fire point index
110 fireplace_indoor.SetFirePointIndex(m_FirePointIndex);
111
112 //get fire and smoke position
113 fireplace_indoor.SetSmokePointPosition(m_SmokePosition);
114
117 fireplace_indoor.SetOrientation(fprot);
118
119 //synchronize
120 fireplace_indoor.Synchronize();
121 }
122 }
123};
string m_Text
Definition ActionBase.c:49
bool IsInReach(PlayerBase player, ActionTarget target, float maxDistance=1.0)
Definition ActionBase.c:856
ref CCIBase m_ConditionItem
Definition ActionBase.c:55
float m_SpecialtyWeight
Definition ActionBase.c:68
ref CCTBase m_ConditionTarget
Definition ActionBase.c:56
int m_StanceMask
Definition ActionBase.c:53
ActionPlaceFireplaceIndoor m_FirePointIndex
vector m_SmokePosition
void FireplaceToIndoorsLambda(EntityAI old_item, string new_item_type, PlayerBase player, vector pos, Object target)
float m_FireplaceRot
override void CopyOldPropertiesToNew(notnull EntityAI old_item, EntityAI new_item)
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override void OnExecuteServer(ActionData action_data)
InventoryLocation.
Definition EnMath.c:7
const float DEFAULT
static float Dot(vector v1, vector v2)
Returns Dot product of vector v1 and vector v2.
Definition EnConvert.c:271
static const vector Zero
Definition EnConvert.c:110
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:597
static void MatrixIdentity4(out vector mat[4])
Creates identity matrix.
Definition EnMath3D.c:233
static proto float Acos(float c)
Returns angle in radians from cosinus.
static const float RAD2DEG
Definition EnMath.c:16