DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
Headtorch_ColorBase.c
Go to the documentation of this file.
1class Headtorch_ColorBase extends Clothing
2{
3 HeadtorchLight m_Light;
4
5 static int REFLECTOR_ID = 4;
6 static int GLASS_ID = 5;
7
8 static string LIGHT_OFF_GLASS = "dz\\characters\\headgear\\data\\HeadTorchGlass.rvmat";
9 static string LIGHT_OFF_REFLECTOR = "dz\\characters\\headgear\\data\\HeadTorch.rvmat";
10 static string LIGHT_ON_GLASS = "dz\\characters\\headgear\\data\\HeadTorchGlass_on.rvmat";
11 static string LIGHT_ON_GLASS_RED = "dz\\characters\\headgear\\data\\HeadTorchGlass_on_red.rvmat";
12 static string LIGHT_ON_REFLECTOR = "dz\\characters\\headgear\\data\\HeadTorch_ON.rvmat";
13 static string LIGHT_ON_REFLECTOR_RED = "dz\\characters\\headgear\\data\\HeadTorch_ON_red.rvmat";
14
15 static vector m_OnHeadLocalPos = Vector(0.12,0.15,0);
16 static vector m_OnHeadLocalOri = Vector(0,90,0);
17 static string m_OffHeadLightPoint = "beamStart";
18 static string m_OffHeadLightTarget = "beamEnd";
19
21
23 {
24 if (!m_Timer)
26
27 m_Timer.Run(1 , this, "CheckParent", NULL, false);
28 }
29
30 override protected void InitGlobalExclusionValues()
31 {
32 super.InitGlobalExclusionValues();
33 AddSingleExclusionValueGlobal(EAttExclusions.EXCLUSION_HEADSTRAP_0);
34 }
35
37 {
38 EntityAI owner = GetHierarchyParent();
39
40 // Spawn a battery in the headtorch if it's attached on a zombie and switch it on
41 if (owner && owner.IsZombie())
42 {
43 GetInventory().CreateAttachment("Battery9V");
44 GetCompEM().SwitchOn();
45 }
46
47 if (m_Timer)
48 m_Timer.Stop();
49
50 m_Timer = null;
51 }
52
53 override void OnWorkStart()
54 {
55 if (!GetGame().IsServer() || !GetGame().IsMultiplayer()) // Client side
56 {
58 }
59
60 if (IsInherited(Headtorch_Black))
61 {
62 SetObjectMaterial(GLASS_ID, LIGHT_ON_GLASS_RED);
63 SetObjectMaterial(REFLECTOR_ID, LIGHT_ON_REFLECTOR_RED);
64 }
65 else
66 {
67 SetObjectMaterial(GLASS_ID, LIGHT_ON_GLASS);
68 SetObjectMaterial(REFLECTOR_ID, LIGHT_ON_REFLECTOR);
69 }
70 }
71
72 override void OnWork(float consumed_energy)
73 {
74 if (!GetGame().IsServer() || !GetGame().IsMultiplayer()) // Client side
75 {
76 Battery9V battery = Battery9V.Cast(GetCompEM().GetEnergySource());
77
78 if (battery && m_Light)
79 {
80 float efficiency = battery.GetEfficiency0To1();
81
82 if (efficiency < 1)
83 {
84 m_Light.SetIntensity(efficiency, GetCompEM().GetUpdateInterval());
85 }
86 else
87 {
89 }
90 }
91 }
92 }
93
95 {
97 }
98
100 {
101 if (!m_Light)
102 m_Light = HeadtorchLight.Cast(ScriptedLightBase.CreateLight( HeadtorchLight, "0 0 0"));
103
105
106 EntityAI owner = GetHierarchyParent();
107
108 if (owner)
109 {
110 if (owner.IsPlayer())
111 {
112 PlayerBase owner_PB = PlayerBase.Cast(owner);
113 ItemBase att_item = owner_PB.GetItemOnSlot("Eyewear");
114
115 if (att_item == this)
116 {
117 AttachLightOnHead(owner_PB);
118 }
119 else
120 {
121 m_Light.AttachOnMemoryPoint(this, m_OffHeadLightPoint, m_OffHeadLightTarget);
122 }
123 }
124 else if (owner.IsZombie())
125 {
126 int slot_id = InventorySlots.GetSlotIdFromString("Eyewear");
127 EntityAI item_EAI = owner.GetInventory().FindAttachment(slot_id);
128 ItemBase item_IB = ItemBase.Cast(item_EAI);
129
130 if (item_IB == this)
131 {
132 AttachLightOnHead(owner);
133 }
134 }
135 }
136 else
137 {
138 m_Light.AttachOnMemoryPoint(this, m_OffHeadLightPoint, m_OffHeadLightTarget);
139 }
140 }
141
143 {
144 if (person.IsPlayer())
145 {
146 PlayerBase player = PlayerBase.Cast(person);
147 int boneIdx = player.GetBoneIndexByName("Head");
148
149 if (boneIdx != -1)
150 {
151 if (m_Light.GetParent())
152 m_Light.DetachFromParent();
153
154 m_Light.SetPosition(m_OnHeadLocalPos);
155 m_Light.SetOrientation(m_OnHeadLocalOri);
156
157 player.AddChild(m_Light, boneIdx);
158 }
159 }
160 else if (person.IsZombie())
161 {
162 if (m_Light.GetParent())
163 m_Light.DetachFromParent();
164
165 m_Light.SetPosition(m_OnHeadLocalPos);
166 m_Light.SetOrientation(m_OnHeadLocalOri);
167
168 person.AddChild(m_Light, 17);
169 }
170 }
171
172 override void OnWasAttached(EntityAI parent, int slot_id)
173 {
174 super.OnWasAttached(parent, slot_id);
175
176 PlayerBase player = PlayerBase.Cast(parent);
177
178 if (player)
179 {
180 if (m_Light)
181 {
182 AttachLightOnHead(player);
183 }
184 }
185 }
186
187 override void OnWasDetached(EntityAI parent, int slot_id)
188 {
189 super.OnWasDetached(parent, slot_id);
190
191 if (parent && (parent.IsPlayer() || parent.IsZombie()))
192 {
193 if (m_Light)
194 {
195 m_Light.DetachFromParent();
196 m_Light.AttachOnMemoryPoint(this, m_OffHeadLightPoint, m_OffHeadLightTarget);
197 }
198 }
199 }
200
201 override void OnWorkStop()
202 {
203 if (!GetGame().IsServer() || !GetGame().IsMultiplayer()) // Client side
204 {
205 if (m_Light)
206 m_Light.FadeOut();
207
208 m_Light = NULL;
209 }
210
211 SetObjectMaterial(GLASS_ID, LIGHT_OFF_GLASS);
212 SetObjectMaterial(REFLECTOR_ID, LIGHT_OFF_REFLECTOR);
213 }
214
215 override void SetActions()
216 {
217 super.SetActions();
222 }
223
224 override bool IsLightSource()
225 {
226 return true;
227 }
228
230 {
231 return this;
232 }
233};
void AddAction(typename actionName)
ref Timer m_Timer
Definition DayZGame.c:687
protected ExplosiveLight m_Light
light
void Headtorch_ColorBase()
void AttachLightOnHead(EntityAI person)
override ItemBase GetLightSourceItem()
void CreateHeadtorchLight()
override bool IsLightSource()
override void OnWorkStop()
HeadtorchLight m_Light
override void OnWork(float consumed_energy)
override void OnWasDetached(EntityAI parent, int slot_id)
override protected void InitGlobalExclusionValues()
override void OnWorkStart()
override void OnWasAttached(EntityAI parent, int slot_id)
ref Timer m_Timer
void OnLightCreated()
override void SetActions()
provides access to slot configuration
static proto native int GetSlotIdFromString(string slot_name)
converts string to slot_id
void SetIntensity(float coef, float time)
override void Stop()
proto native CGame GetGame()
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
const int CALL_CATEGORY_SYSTEM
Definition tools.c:8