DayZ 1.27
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
63 if ( mission )
64 {
65 m_Hud = mission.GetHud();
66 }
67 //UpdateStatus();
68 }
69
70
72 {
73 if ( GetGame().IsServer() )
74 {
76 {
77 SendRPC();
79 }
80 }
81 if ( !GetGame().IsDedicatedServer() )
82 {
84 //DisplayPresence();
85 }
86 }
87
89 {
90 int id = element.GetType();
91 m_Elements[id] = element;
92 //Log("adding element:"+id.ToString());
93 }
94
95 DisplayElementBase GetElement(eDisplayElements element_id)
96 {
97 if ( element_id < 0 || element_id >= NUMBER_OF_ELEMENTS )
98 {
99 return null;
100 }
101 return m_Elements[element_id];
102 }
103
104 //this will serialize all elements and 'compresses' them into integer(s) through bit shifting, these integers are placed into an array
106 {
107 int offset = 0;
108 int mask = 0;
109
110 for (int i = 0; i < NUMBER_OF_ELEMENTS; i++)
111 {
112 if ( GetElement(i) && !GetElement(i).IsClientOnly() )
113 {
114 if ( (GetElement(i).GetNumberOfBits() + offset) > BIT_INT_SIZE )
115 {
116 mask_array.Insert(mask);
117 offset = 0;
118 mask = 0;
119 }
120 mask = mask | (GetElement(i).GetValue() << offset);
121 offset = offset + GetElement(i).GetNumberOfBits();
122 }
123 }
124 mask_array.Insert(mask);
125 }
126
127 void DeserializeElements(array<int> mask_array)//extracts elements from mask
128 {
129 int maskArrayIndex = 0;
130 int offset = 0;
131 int mask = 0;
132
133 for (int i = 0; i < NUMBER_OF_ELEMENTS;i++)
134 {
135 if ( GetElement(i) && !GetElement(i).IsClientOnly() )
136 {
137 //Log("entity> " + ToString(GetElement(i)) );
138 if (offset + GetElement(i).GetNumberOfBits() > BIT_INT_SIZE)
139 {
140 maskArrayIndex++;
141 offset = 0;
142 }
143 mask = mask_array.Get(maskArrayIndex);
144 int value = BitToDec( mask, offset, GetElement(i).GetCompareMask() );
145 offset = offset + GetElement(i).GetNumberOfBits();
146 GetElement(i).SetValue( value );
147 }
148 }
149 }
150
151 int BitToDec(int mask, int index, int compareMask)
152 {
153 int value = mask & (compareMask << index);
154 value = value >> index;
155 return value;
156 }
157
158
160 {
161 for (int i = 0; i < NUMBER_OF_ELEMENTS; i++)
162 {
163 PrintString(i.ToString() +": "+ GetElement(i).m_Value.ToString() );
164 }
165 }
166
167 void SendRPC()
168 {
169 array<int> mask_array = new array<int>;
170 SerializeElements(mask_array);
171 if ( !m_LastSentArray || !AreArraysSame(m_LastSentArray, mask_array) )
172 {
173 ScriptRPC rpc = new ScriptRPC();
174 rpc.Write(mask_array);
175 rpc.Send(m_Player, ERPCs.RPC_SYNC_DISPLAY_STATUS, false, m_Player.GetIdentity());
176 m_LastSentArray = mask_array;
177 }
178 }
179
180 bool AreArraysSame( notnull array<int> array_a, notnull array<int> array_b )
181 {
182 if ( array_a.Count() != array_b.Count() ) return false;
183 for (int i = 0; i <array_a.Count(); i++)
184 {
185 if ( array_a.Get(i) != array_b.Get(i) )
186 {
187 return false;
188 }
189 }
190 return true;
191 }
192
194 {
195 for (int i = 0; i < NUMBER_OF_ELEMENTS;i++)
196 {
197 DisplayElementBase element = GetElement(i);
198 if ( element && element.IsClientOnly() && element.IsValueChanged() )
199 element.UpdateHUD();
200 }
201 }
202
204 {
205 //Log("UpdateStatus called for entity: "+ToString(m_Player));
206 for (int i = 0; i < NUMBER_OF_ELEMENTS; i++)
207 {
208 DisplayElementBase element = GetElement(i);
209 if ( element && !element.IsClientOnly() && element.IsValueChanged() )
210 {
211 element.UpdateHUD();
212 }
213 }
214 }
215
216 void OnRPC(ParamsReadContext ctx)//on Client
217 {
218 //Log("OnRPC called");
219 array<int> mask_array = new array<int>;
220 ctx.Read(mask_array);
221 DeserializeElements(mask_array);
222 UpdateStatus();
223 }
224
225 void Debug()
226 {
227 Log("debug");
228 PluginPlayerStatus m_ModulePlayerStatus = PluginPlayerStatus.Cast(GetPlugin(PluginPlayerStatus));
229 m_ModulePlayerStatus.DisplayTendency(NTFKEY_HUNGRY, 2);
230 }
231}
VIRTUAL_HUD_UPDATE_INTERVAL
how often virtual hud checks if there is a difference since last sync
const int NTFKEY_HUNGRY
Определения _constants.c:34
const int BIT_INT_SIZE
Определения BitArray.c:4
void DeserializeElements(array< int > mask_array)
Определения DisplayStatus.c:127
void RegisterElement(DisplayElementBase element)
Определения DisplayStatus.c:88
void PrintElements()
Определения DisplayStatus.c:159
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:193
enum DSLevels CRITICAL_PLUS
Hud m_Hud
Определения DisplayStatus.c:29
enum DSLevels BLINKING_PLUS
void SendRPC()
Определения DisplayStatus.c:167
void SerializeElements(array< int > mask_array)
Определения DisplayStatus.c:105
ref array< ref Param > rpcParams
Определения DisplayStatus.c:34
enum DSLevels BLINKING_MINUS
DisplayElementBase GetElement(eDisplayElements element_id)
Определения DisplayStatus.c:95
Mission mission
Определения DisplayStatus.c:28
enum DSLevels WARNING_PLUS
DSLevels
Определения DisplayStatus.c:2
@ BLINKING
Определения DisplayStatus.c:6
void UpdateStatus()
Определения DisplayStatus.c:203
ref array< int > m_LastSentArray
Определения DisplayStatus.c:24
bool AreArraysSame(notnull array< int > array_a, notnull array< int > array_b)
Определения DisplayStatus.c:180
void VirtualHud(PlayerBase player)
Определения DisplayStatus.c:36
enum DSLevels CRITICAL_MINUS
int BitToDec(int mask, int index, int compareMask)
Определения DisplayStatus.c:151
@ 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
float GetTime()
Определения NotificationSystem.c:35
void OnScheduledTick()
Определения NotifiersManager.c:97
override void OnRPC(ParamsReadContext ctx)
Определения PlayerStatBase.c:69
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:316
void Debug()
Определения UniversalTemperatureSource.c:349
proto int GetTime()
returns mission time in milliseconds
proto native Mission GetMission()
override void UpdateHUD()
Определения DisplayElementBadge.c:8
Определения gameplay.c:639
Mission class.
Определения gameplay.c:687
Определения PlayerBaseClient.c:2
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
proto native CGame GetGame()
WARNING
Определения EnDebug.c:1
void PrintString(string s)
Helper for printing out string expression. Example: PrintString("Hello " + var);.
Определения EnScript.c:345
@ EXTRA
Определения EnEntity.c:98
string m_Value
Определения EnEntity.c:806