Dayz Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Loading...
Searching...
No Matches
actioncreateindooroven.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;
7 m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_LOW;
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() );
23 BuildingWithFireplace building = BuildingWithFireplace.Cast( target_object );
24
25 if ( target_object && building && action_selection.Contains( OvenIndoor.OVENPOINT_ACTION_SELECTION ) )
26 {
27 if ( !IsInReach(player, target, UAMaxDistances.DEFAULT) ) return false;
28
29 vector fire_point_pos_world, fire_point_rot_world;
30 int fire_point_index = OvenIndoor.GetFirePointIndex( action_selection );
31 if ( OvenIndoor.CanPlaceFireplaceInSelectedSpot( building, fire_point_index, fire_point_pos_world, fire_point_rot_world ) )
32 {
33 float rot_deg = 0.0;
34 if ( building.HasSelection( OvenIndoor.OVENPOINT_PLACE_ROT + fire_point_index.ToString() ) )
35 {
36 vector diff = fire_point_rot_world - fire_point_pos_world;
37 diff[1] = 0.0;
38 diff.Normalize();
39 float dotp = vector.Dot( "0 0 1" , diff );
40 rot_deg = Math.Acos( dotp ) * Math.RAD2DEG;
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
49 float fire_point_dist = vector.Distance( fire_point_pos_world, player.GetPosition() );
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
63 override void OnExecuteServer( ActionData action_data )
64 {
65 Object obj = g_Game.CreateObjectEx( "OvenIndoor", 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( OvenIndoor.OVENPOINT_SMOKE_POSITION + m_FirePointIndex.ToString() );
70 vector smoke_point_pos_world = action_data.m_Target.GetObject().ModelToWorld( smoke_point_pos );
71 vector m_SmokePosition = smoke_point_pos_world;
72
73 OvenIndoor fp_indoor = OvenIndoor.Cast( obj );
74 if ( fp_indoor )
75 {
76 fp_indoor.SetFirePointIndex( m_FirePointIndex );
77 fp_indoor.SetSmokePointPosition( m_SmokePosition );
78
79 vector fprot = vector.Zero;
80 fprot[0] = m_FireplaceRot;
81 fp_indoor.SetOrientation( fprot );
82
83 fp_indoor.Synchronize();
84
85 //move item to target fireplace
86 if (!g_Game.IsMultiplayer())
87 {
88 ClearInventoryReservationEx(action_data);
89 action_data.m_Player.LocalTakeEntityToTargetAttachment(fp_indoor, action_data.m_MainItem);
90 }
91 else
92 action_data.m_Player.ServerTakeEntityToTargetAttachment(fp_indoor, action_data.m_MainItem);
93 }
94 }
95
96 override bool IsLockTargetOnUse()
97 {
98 return false;
99 }
100}
ActionBase ActionData
Definition actionbase.c:30
ActionPlaceFireplaceIndoor m_FirePointIndex
vector m_SmokePosition
float m_FireplaceRot
class ActionTargets ActionTarget
const int ECE_PLACE_ON_SURFACE
string m_Text
Definition actionbase.c:64
bool IsInReach(PlayerBase player, ActionTarget target, float maxDistance=1.0)
ref CCIBase m_ConditionItem
Definition actionbase.c:70
float m_SpecialtyWeight
Definition actionbase.c:83
ref CCTBase m_ConditionTarget
Definition actionbase.c:71
void ClearInventoryReservationEx(ActionData action_data)
int m_StanceMask
Definition actionbase.c:68
override void OnExecuteServer(ActionData action_data)
override void CreateConditionComponents()
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Definition enmath.c:7
const float DEFAULT
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
proto float Normalize()
Normalizes vector.
static const vector Zero
Definition enconvert.c:123
static float Dot(vector v1, vector v2)
Returns Dot product of vector v1 and vector v2.
Definition enconvert.c:284
DayZGame g_Game
Definition dayzgame.c:3942
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
static proto float Acos(float c)
Returns angle in radians from cosinus.
static const float RAD2DEG
Definition enmath.c:16
bool Contains(string sample)
Returns true if sample is substring of string.
Definition enstring.c:286