DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ShelterSite.c
См. документацию.
1class ShelterSite extends BaseBuildingBase
2{
3 const float MAX_ACTION_DETECTION_ANGLE_RAD = 1.3; //1.3 RAD = ~75 DEG
4 const float MAX_ACTION_DETECTION_DISTANCE = 2.0; //meters
5
6 override string GetConstructionKitType()
7 {
8 return "ShelterKit";
9 }
10
11 override int GetMeleeTargetType()
12 {
13 return EMeleeTargetType.NONALIGNABLE;
14 }
15
16 //--- CONSTRUCTION KIT
18 {
19 if ( MemoryPointExists( "kit_spawn_position" ) )
20 {
22 position = GetMemoryPointPos( "kit_spawn_position" );
23
24 return ModelToWorld( position );
25 }
26
27 return GetPosition();
28 }
29
30 //--- BUILD EVENTS
31 //CONSTRUCTION EVENTS
32 override void OnPartBuiltServer( notnull Man player, string part_name, int action_id )
33 {
34 ConstructionPart constrution_part = GetConstruction().GetConstructionPart( part_name );
35
36 string shelter_type = "";
37 switch (part_name)
38 {
39 case "leather":
40 shelter_type = "ShelterLeather";
41 break;
42
43 case "fabric":
44 shelter_type = "ShelterFabric";
45 break;
46
47 case "stick":
48 shelter_type = "ShelterStick";
49 break;
50 }
51
52 if (shelter_type != "")
53 {
54 PlayerBase playerBase = PlayerBase.Cast(player);
55 GetConstruction().DropNonUsableMaterialsServer( player, part_name );
56
57 InventoryLocation targetIL = new InventoryLocation();
58 auto lambda = BuildShelterFromShelterSiteLambda(this, shelter_type, playerBase);
59 player.ServerReplaceItemWithNew(lambda);
60
61 PluginAdminLog admin_log = PluginAdminLog.Cast( GetPlugin(PluginAdminLog) );
62 if (admin_log)
63 {
64 string playerPrefix = admin_log.GetPlayerPrefix(playerBase, player.GetIdentity());
65 admin_log.DirectAdminLogPrint(playerPrefix +" built " + shelter_type + " with Hands ");
66 }
67 }
68 }
69
70 override bool CanPutIntoHands( EntityAI parent )
71 {
72 return false;
73 }
74
76 {
77 return true;
78 }
79
80 override bool MustBeBuiltFromOutside()
81 {
82 return true;
83 }
84
85 override bool IsFacingCamera( string selection )
86 {
87 vector ref_dir = GetDirection();
88 vector cam_dir = g_Game.GetCurrentCameraDirection();
89
90 //ref_dir = g_Game.GetCurrentCameraPosition() - GetPosition();
91 ref_dir.Normalize();
92 ref_dir[1] = 0; //ignore height
93
94 cam_dir.Normalize();
95 cam_dir[1] = 0; //ignore height
96
97 if ( ref_dir.Length() != 0 )
98 {
99 float angle = Math.Acos( cam_dir * ref_dir );
100
101 if ( angle >= MAX_ACTION_DETECTION_ANGLE_RAD )
102 {
103 return true;
104 }
105 }
106
107 return false;
108 }
109
110 override bool IsPlayerInside( PlayerBase player, string selection )
111 {
112 vector player_pos = player.GetPosition();
113 vector object_pos = GetPosition();
114 vector ref_dir = GetDirection();
115 ref_dir[1] = 0;
116 ref_dir.Normalize();
117
118 vector min,max;
119 min = -GetMemoryPointPos( "BoundingBox_min" );
120 max = -GetMemoryPointPos( "BoundingBox_max" );
121
122 vector dir_to_object = object_pos - player_pos;
123 dir_to_object[1] = 0;
124 float len = dir_to_object.Length();
125
126 dir_to_object.Normalize();
127
128 vector ref_dir_angle = ref_dir.VectorToAngles();
129 vector dir_to_object_angle = dir_to_object.VectorToAngles();
130 vector test_angles = dir_to_object_angle - ref_dir_angle;
131
132 vector test_position = test_angles.AnglesToVector() * len;
133
134 if(test_position[0] > max[0] || test_position[0] < min[0] || test_position[2] > max[2] || test_position[2] < min[2] )
135 {
136 return false;
137 }
138
139 return true;
140 }
141
142 override bool HasProperDistance( string selection, PlayerBase player )
143 {
144 if ( MemoryPointExists( selection ) )
145 {
146 vector selection_pos = ModelToWorld( GetMemoryPointPos( selection ) );
147 float distance = vector.Distance( selection_pos, player.GetPosition() );
148 if ( distance >= MAX_ACTION_DETECTION_DISTANCE )
149 {
150 return false;
151 }
152 }
153
154 return true;
155 }
156
157 override void SetActions()
158 {
159 super.SetActions();
160
165 }
166
167 override bool DestroyOnFall()
168 {
169 return true;
170 }
171
172 override void OnItemFallRebuilding()
173 {
174 if (!g_Game.IsServer())
175 return;
176
178
179 if (DestroyOnFall())
180 {
181 ItemBase constructionKit = CreateConstructionKit();
182 constructionKit.ThrowPhysically(null, vector.Zero);
183 g_Game.GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(DeleteSafe, 100, false);
184 }
185 }
186
187 override void OnDebugSpawn()
188 {
189 ItemBase item;
190
191 GameInventory inventory = GetInventory();
192 if (Class.CastTo(item,inventory.CreateInInventory("LongWoodenStick")))
193 item.SetQuantityMax();
194 if (Class.CastTo(item,inventory.CreateInInventory("Fabric")))
195 item.SetQuantityMax();
196 }
197}
ActionBuildShelter ActionContinuousBase BuildShelterFromShelterSiteLambda(EntityAI old_item, string new_item_type, PlayerBase player)
Определения ActionBuildShelter.c:327
ActionFoldBaseBuildingObjectCB ActionContinuousBaseCB ActionFoldBaseBuildingObject()
Определения ActionFoldBaseBuildingObject.c:11
ActionPlaceObjectCB ActiondeployObjectCB ActionPlaceObject()
Определения ActionPlaceObject.c:11
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
void DropAttachmentAndCargoItems()
Определения BaseBuildingBase.c:2495
Construction GetConstruction()
Определения BaseBuildingBase.c:2171
ItemBase CreateConstructionKit()
Определения BaseBuildingBase.c:1653
DayZGame g_Game
Определения DayZGame.c:4074
vector position
Определения DustKickupEffects.c:20
EMeleeTargetType
Определения EMeleeTargetType.c:2
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:326
override void OnDebugSpawn()
Определения ShelterSite.c:187
override bool IsPlayerInside(PlayerBase player, string selection)
Определения ShelterSite.c:110
override bool DestroyOnFall()
Определения ShelterSite.c:167
override string GetConstructionKitType()
Определения ShelterSite.c:6
override bool CanPutIntoHands(EntityAI parent)
Определения ShelterSite.c:70
override void OnPartBuiltServer(notnull Man player, string part_name, int action_id)
Определения ShelterSite.c:32
override void SetActions()
Определения ShelterSite.c:157
override bool MustBeBuiltFromOutside()
Определения ShelterSite.c:80
const float MAX_ACTION_DETECTION_ANGLE_RAD
Определения Fence.c:15
override bool IsFacingCamera(string selection)
Определения ShelterSite.c:85
const float MAX_ACTION_DETECTION_DISTANCE
Определения Fence.c:16
override void OnItemFallRebuilding()
Определения ShelterSite.c:172
override int GetMeleeTargetType()
Определения ShelterSite.c:11
override bool HasProperDistance(string selection, PlayerBase player)
Определения ShelterSite.c:142
override vector GetKitSpawnPosition()
Определения ShelterSite.c:17
override bool CanBeRepairedToPristine()
Определения ShelterSite.c:75
Определения Fence.c:2
Super root of all classes in Enforce script.
Определения EnScript.c:11
Instanced construction part data classes for dynamic data, statics now stored on EntityType level in ...
Определения ConstructionPart.c:4
EntityAI CreateInInventory(string type)
creates entity somewhere in inventory
script counterpart to engine's class Inventory
InventoryLocation.
Определения InventoryLocation.c:30
Определения EnMath.c:7
Определения PlayerBaseClient.c:2
proto native float Length()
Returns length of vector (magnitude)
static const vector Zero
Определения EnConvert.c:123
proto float Normalize()
Normalizes vector. Returns length.
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
proto vector VectorToAngles()
Converts vector to spherical coordinates with radius = 1.
proto vector AnglesToVector()
Converts spherical coordinates (yaw, pitch, roll in degrees) to unit length vector.
Определения EnConvert.c:119
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
static proto float Acos(float c)
Returns angle in radians from cosinus.
vector GetPosition()
Get the world position of the Effect.
Определения Effect.c:473
const int CALL_CATEGORY_SYSTEM
Определения 3_Game/DayZ/tools/tools.c:8