DayZ 1.29
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 if ( GetElement(i) && !GetElement(i).IsClientOnly() )
114 {
115 if ( (GetElement(i).GetNumberOfBits() + offset) > BIT_INT_SIZE )
116 {
117 mask_array.Insert(mask);
118 offset = 0;
119 mask = 0;
120 }
121 mask = mask | (GetElement(i).GetValue() << offset);
122 offset = offset + GetElement(i).GetNumberOfBits();
123 }
124 }
125 mask_array.Insert(mask);
126 }
127
128 void DeserializeElements(array<int> mask_array)//extracts elements from mask
129 {
130 int maskArrayIndex = 0;
131 int offset = 0;
132 int mask = 0;
133
134 for (int i = 0; i < NUMBER_OF_ELEMENTS;i++)
135 {
136 if ( GetElement(i) && !GetElement(i).IsClientOnly() )
137 {
138 //Log("entity> " + ToString(GetElement(i)) );
139 if (offset + GetElement(i).GetNumberOfBits() > BIT_INT_SIZE)
140 {
141 maskArrayIndex++;
142 offset = 0;
143 }
144 mask = mask_array.Get(maskArrayIndex);
145 int value = BitToDec( mask, offset, GetElement(i).GetCompareMask() );
146 offset = offset + GetElement(i).GetNumberOfBits();
147 GetElement(i).SetValue( value );
148 }
149 }
150 }
151
152 int BitToDec(int mask, int index, int compareMask)
153 {
154 int value = mask & (compareMask << index);
155 value = value >> index;
156 return value;
157 }
158
159
161 {
162 for (int i = 0; i < NUMBER_OF_ELEMENTS; i++)
163 {
164 PrintString(i.ToString() +": "+ GetElement(i).m_Value.ToString() );
165 }
166 }
167
168 void SendRPC()
169 {
170 array<int> mask_array = new array<int>;
171 SerializeElements(mask_array);
172 if ( !m_LastSentArray || !AreArraysSame(m_LastSentArray, mask_array) )
173 {
174 ScriptRPC rpc = new ScriptRPC();
175 rpc.Write(mask_array);
176 rpc.Send(m_Player, ERPCs.RPC_SYNC_DISPLAY_STATUS, false, m_Player.GetIdentity());
177 m_LastSentArray = mask_array;
178 }
179 }
180
181 bool AreArraysSame( notnull array<int> array_a, notnull array<int> array_b )
182 {
183 if ( array_a.Count() != array_b.Count() ) return false;
184 for (int i = 0; i <array_a.Count(); i++)
185 {
186 if ( array_a.Get(i) != array_b.Get(i) )
187 {
188 return false;
189 }
190 }
191 return true;
192 }
193
195 {
196 for (int i = 0; i < NUMBER_OF_ELEMENTS;i++)
197 {
198 DisplayElementBase element = GetElement(i);
199 if ( element && element.IsClientOnly() && element.IsValueChanged() )
200 element.UpdateHUD();
201 }
202 }
203
205 {
206 //Log("UpdateStatus called for entity: "+ToString(m_Player));
207 for (int i = 0; i < NUMBER_OF_ELEMENTS; i++)
208 {
209 DisplayElementBase element = GetElement(i);
210 if ( element && !element.IsClientOnly() && element.IsValueChanged() )
211 {
212 element.UpdateHUD();
213 }
214 }
215 }
216
217 void OnRPC(ParamsReadContext ctx)//on Client
218 {
219 //Log("OnRPC called");
220 array<int> mask_array = new array<int>;
221 ctx.Read(mask_array);
222 DeserializeElements(mask_array);
223 UpdateStatus();
224 }
225
226 void Debug()
227 {
228 Log("debug");
229 PluginPlayerStatus m_ModulePlayerStatus = PluginPlayerStatus.Cast(GetPlugin(PluginPlayerStatus));
230 m_ModulePlayerStatus.DisplayTendency(NTFKEY_HUNGRY, 2);
231 }
232}
VIRTUAL_HUD_UPDATE_INTERVAL
how often virtual hud checks if there is a difference since last sync
const int NTFKEY_HUNGRY
const int BIT_INT_SIZE
Определения BitArray.c:4
map m_Player
string Debug()
Определения CachedEquipmentStorageBase.c:29
DayZGame g_Game
Определения DayZGame.c:3942
void DeserializeElements(array< int > mask_array)
Определения DisplayStatus.c:128
void RegisterElement(DisplayElementBase element)
Определения DisplayStatus.c:89
void PrintElements()
Определения DisplayStatus.c:160
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:194
enum DSLevels CRITICAL_PLUS
Hud m_Hud
Определения DisplayStatus.c:29
enum DSLevels BLINKING_PLUS
void SendRPC()
Определения DisplayStatus.c:168
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:204
ref array< int > m_LastSentArray
Определения DisplayStatus.c:24
bool AreArraysSame(notnull array< int > array_a, notnull array< int > array_b)
Определения DisplayStatus.c:181
void VirtualHud(PlayerBase player)
Определения DisplayStatus.c:36
enum DSLevels CRITICAL_MINUS
int BitToDec(int mask, int index, int compareMask)
Определения DisplayStatus.c:152
@ NORMAL
Определения ECameraZoomType.c:4
ERPCs
Определения ERPCs.c:2
@ CRITICAL
Определения EStatLevels.c:7
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:105
override void OnRPC(ParamsReadContext ctx)
Определения PlayerStatBase.c:69
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:325
override void UpdateHUD()
Определения DisplayElementBadge.c:8
Определения gameplay.c:638
Mission class.
Определения gameplay.c:686
Определения 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
WARNING
Определения EnDebug.c:1
class array< Class T > PrintString
@ EXTRA
Определения EnEntity.c:98
string m_Value
Определения EnEntity.c:808