DayZ 1.24
Loading...
Searching...
No Matches
ActionCreateIndoorFireplace.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 {
65 Object obj = GetGame().CreateObjectEx("FireplaceIndoor", action_data.m_Player.GetLastFirePoint(), ECE_PLACE_ON_SURFACE);
66
67 int m_FirePointIndex = action_data.m_Player.GetLastFirePointIndex();
68 float m_FireplaceRot = action_data.m_Player.GetLastFirePointRot();
69 vector smoke_point_pos = action_data.m_Target.GetObject().GetSelectionPositionMS(FireplaceIndoor.FIREPOINT_SMOKE_POSITION + m_FirePointIndex.ToString());
70 vector smoke_point_pos_world = action_data.m_Target.GetObject().ModelToWorld(smoke_point_pos);
72
73 FireplaceIndoor fp_indoor = FireplaceIndoor.Cast(obj);
74 if (fp_indoor)
75 {
76 fp_indoor.SetFirePointIndex(m_FirePointIndex);
77 fp_indoor.SetSmokePointPosition(m_SmokePosition);
78
81 fp_indoor.SetOrientation(fprot);
82
83 fp_indoor.Synchronize();
84
85 //move item to target fireplace
86 action_data.m_Player.ServerTakeEntityToTargetAttachment(fp_indoor, action_data.m_MainItem);
87 }
88 }
89}
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
float m_FireplaceRot
const int ECE_PLACE_ON_SURFACE
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override void OnExecuteServer(ActionData action_data)
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
proto native CGame GetGame()
static proto float Acos(float c)
Returns angle in radians from cosinus.
static const float RAD2DEG
Definition EnMath.c:16