DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
DisplayStatus.c
См. документацию.
2{
3 NORMAL = 0,//no bit, default
4 WARNING = 1,//first bit
5 CRITICAL = 2,//second bit
6 BLINKING = 3,//first + second bit
7 EXTRA = 4,//third bit
8}
9
10enum DSLevelsTemp
11{
12 NORMAL = 0,//no bit, default
19}
20
21class VirtualHud
22{
23 const int NUMBER_OF_MASKS = 2;//how many INT numbers we need to accommodate all elements
25 //ref map<int, ref DisplayElement> m_Elements;
26 const int NUMBER_OF_ELEMENTS = eDisplayElements.COUNT;
32 string m_System = "VirtualHud";
33
35
37 {
38 m_Player = player;
39 m_LastTick = 0;
40
41 RegisterElement(new BadgeStuffed(m_Player));
42 RegisterElement(new BadgeWet(m_Player));
43 RegisterElement(new BadgeSick(m_Player));
44 RegisterElement(new BadgePills(m_Player));
45 RegisterElement(new BadgePoisoned(m_Player));
46 RegisterElement(new BadgeFracture(m_Player));
47 RegisterElement(new TendencyHealth(m_Player));
48 RegisterElement(new TendencyBlood(m_Player));
49 RegisterElement(new TendencyTemperature(m_Player));
50
51 RegisterElement(new TendencyHunger(m_Player));
52 RegisterElement(new TendencyThirst(m_Player));
53 RegisterElement(new TendencyBacteria(m_Player));
54 RegisterElement(new BadgeHeartbeat(m_Player));
55 RegisterElement(new BadgeLegs(m_Player));
56
57
58 RegisterElement(new ElementStance(m_Player));// client only
59 RegisterElement(new BadgeBleeding(m_Player));// client only
60
61
62 mission = g_Game.GetMission();
63 if ( mission )
64 {
65 m_Hud = mission.GetHud();
66 }
67 //UpdateStatus();
68 }
69
70
72 {
73 if ( g_Game.IsServer() )
74 {
75 int currentTime = g_Game.GetTime();
76 if (currentTime > (m_LastTick + VIRTUAL_HUD_UPDATE_INTERVAL))
77 {
78 SendRPC();
79 m_LastTick = currentTime;
80 }
81 }
82 if ( !g_Game.IsDedicatedServer() )
83 {
85 //DisplayPresence();
86 }
87 }
88
90 {
91 int id = element.GetType();
92 m_Elements[id] = element;
93 //Log("adding element:"+id.ToString());
94 }
95
96 DisplayElementBase GetElement(eDisplayElements element_id)
97 {
98 if ( element_id < 0 || element_id >= NUMBER_OF_ELEMENTS )
99 {
100 return null;
101 }
102 return m_Elements[element_id];
103 }
104
105 //this will serialize all elements and 'compresses' them into integer(s) through bit shifting, these integers are placed into an array
107 {
108 int offset = 0;
109 int mask = 0;
110
111 for (int i = 0; i < NUMBER_OF_ELEMENTS; ++i)
112 {
113 DisplayElementBase element = GetElement(i);
114
115 if (element && !element.IsClientOnly() )
116 {
117 if ((element.GetNumberOfBits() + offset) > BIT_INT_SIZE)
118 {
119 mask_array.Insert(mask);
120 offset = 0;
121 mask = 0;
122 }
123 mask = mask | (element.GetValue() << offset);
124 offset = offset + element.GetNumberOfBits();
125 }
126 }
127 mask_array.Insert(mask);
128 }
129
130 void DeserializeElements(array<int> mask_array)//extracts elements from mask
131 {
132 int maskArrayIndex = 0;
133 int offset = 0;
134 int mask = 0;
135
136 for (int i = 0; i < NUMBER_OF_ELEMENTS;i++)
137 {
138 DisplayElementBase element = GetElement(i);
139
140 if (element && !element.IsClientOnly())
141 {
142 //Log("entity> " + ToString(GetElement(i)) );
143 if (offset + element.GetNumberOfBits() > BIT_INT_SIZE)
144 {
145 maskArrayIndex++;
146 offset = 0;
147 }
148 mask = mask_array.Get(maskArrayIndex);
149 int value = BitToDec( mask, offset, element.GetCompareMask() );
150 offset = offset + element.GetNumberOfBits();
151 element.SetValue(value);
152 }
153 }
154 }
155
156 int BitToDec(int mask, int index, int compareMask)
157 {
158 int value = mask & (compareMask << index);
159 value = value >> index;
160 return value;
161 }
162
164 {
165 for (int i = 0; i < NUMBER_OF_ELEMENTS; i++)
166 {
167 PrintString(i.ToString() +": "+ GetElement(i).m_Value.ToString() );
168 }
169 }
170
171 void SendRPC()
172 {
173 PlayerIdentity identity = m_Player.GetIdentity();
175 if (g_Game.IsMultiplayer())
176 {
177 if (!identity)
178 return;
179 }
180
181 array<int> maskArray = new array<int>();
182 SerializeElements(maskArray);
183 if (!m_LastSentArray || !AreArraysSame(m_LastSentArray, maskArray))
184 {
185 ScriptRPC rpc = new ScriptRPC();
186 rpc.Write(maskArray);
187 rpc.Send(m_Player, ERPCs.RPC_SYNC_DISPLAY_STATUS, false, identity);
188 m_LastSentArray = maskArray;
189 }
190 }
191
192 bool AreArraysSame( notnull array<int> array_a, notnull array<int> array_b )
193 {
194 if ( array_a.Count() != array_b.Count() ) return false;
195 for (int i = 0; i <array_a.Count(); i++)
196 {
197 if ( array_a.Get(i) != array_b.Get(i) )
198 {
199 return false;
200 }
201 }
202 return true;
203 }
204
206 {
207 for (int i = 0; i < NUMBER_OF_ELEMENTS;i++)
208 {
209 DisplayElementBase element = GetElement(i);
210 if (element && element.IsClientOnly() && element.IsValueChanged())
211 element.UpdateHUD();
212 }
213 }
214
216 {
217 //Log("UpdateStatus called for entity: "+ToString(m_Player));
218 for (int i = 0; i < NUMBER_OF_ELEMENTS; ++i)
219 {
220 DisplayElementBase element = GetElement(i);
221 if (element && !element.IsClientOnly() && element.IsValueChanged())
222 {
223 element.UpdateHUD();
224 }
225 }
226 }
227
228 void OnRPC(ParamsReadContext ctx)//on Client
229 {
230 //Log("OnRPC called");
231 array<int> mask_array = new array<int>;
232 ctx.Read(mask_array);
233 DeserializeElements(mask_array);
234 UpdateStatus();
235 }
236
237 void Debug()
238 {
239 Log("debug");
240 PluginPlayerStatus m_ModulePlayerStatus = PluginPlayerStatus.Cast(GetPlugin(PluginPlayerStatus));
241 m_ModulePlayerStatus.DisplayTendency(NTFKEY_HUNGRY, 2);
242 }
243}
const int NTFKEY_HUNGRY
const int BIT_INT_SIZE
Определения BitArray.c:4
void OnRPC(PlayerIdentity sender, int rpcType, ParamsReadContext ctx)
Определения BunkerBroadcastComponent.c:182
string Debug()
Определения CachedEquipmentStorageBase.c:26
DayZGame g_Game
Определения DayZGame.c:4074
void DeserializeElements(array< int > mask_array)
Определения DisplayStatus.c:130
void RegisterElement(DisplayElementBase element)
Определения DisplayStatus.c:89
void PrintElements()
Определения DisplayStatus.c:163
ref DisplayElementBase m_Elements[NUMBER_OF_ELEMENTS]
Определения DisplayStatus.c:27
const int NUMBER_OF_ELEMENTS
Определения DisplayStatus.c:26
enum DSLevels WARNING_MINUS
enum DSLevels NUMBER_OF_MASKS
int m_LastTick
Определения DisplayStatus.c:30
void ImmediateUpdate()
Определения DisplayStatus.c:205
enum DSLevels CRITICAL_PLUS
Hud m_Hud
Определения DisplayStatus.c:29
enum DSLevels BLINKING_PLUS
void SendRPC()
Определения DisplayStatus.c:171
void SerializeElements(array< int > mask_array)
Определения DisplayStatus.c:106
ref array< ref Param > rpcParams
Определения DisplayStatus.c:34
enum DSLevels BLINKING_MINUS
DisplayElementBase GetElement(eDisplayElements element_id)
Определения DisplayStatus.c:96
Mission mission
Определения DisplayStatus.c:28
enum DSLevels WARNING_PLUS
DSLevels
Определения DisplayStatus.c:2
@ BLINKING
Определения DisplayStatus.c:6
void UpdateStatus()
Определения DisplayStatus.c:215
ref array< int > m_LastSentArray
Определения DisplayStatus.c:24
bool AreArraysSame(notnull array< int > array_a, notnull array< int > array_b)
Определения DisplayStatus.c:192
void VirtualHud(PlayerBase player)
Определения DisplayStatus.c:36
enum DSLevels CRITICAL_MINUS
int BitToDec(int mask, int index, int compareMask)
Определения DisplayStatus.c:156
@ NORMAL
Определения ECameraZoomType.c:4
ERPCs
Определения ERPCs.c:2
@ CRITICAL
Определения EStatLevels.c:7
DayZPlayer m_Player
Определения Hand_Events.c:42
class LogTemplates Log(string message, LogTemplateID template_id=0)
Creates debug log (optional) from LogTemplate which are registred.
Определения LogTemplates.c:75
string m_System
the manager instance
Определения ModifierBase.c:12
PluginPlayerStatus m_ModulePlayerStatus
max 32 synced modifiers supported, 0 == no sync
Определения ModifierBase.c:29
void OnScheduledTick()
Определения NotifiersManager.c:303
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:326
override void UpdateHUD()
Определения DisplayElementBadge.c:8
Определения gameplay.c:638
Mission class.
Определения gameplay.c:686
Определения PlayerBaseClient.c:2
The class that will be instanced (moddable)
Определения gameplay.c:389
proto native void Send(Object target, int rpc_type, bool guaranteed, PlayerIdentity recipient=NULL)
Initiate remote procedure call. When called on client, RPC is evaluated on server; When called on ser...
Определения gameplay.c:105
proto bool Write(void value_out)
proto bool Read(void value_in)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Serializer ParamsReadContext
Определения gameplay.c:15
WARNING
Определения EnDebug.c:1
Obsolete Managed PrintString(string s)
Helper for printing out string expression. Example: PrintString("Hello " + var);.
Определения EnScript.c:369
@ EXTRA
Определения EnEntity.c:98
string m_Value
Определения EnEntity.c:808