Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
serverbrowserfiltercontainer.c
Go to the documentation of this file.
1class ServerBrowserFilterContainer extends ScriptedWidgetEventHandler
2{
4
5 protected EditBoxWidget m_SearchByName;
6 protected EditBoxWidget m_SearchByIP;
7 protected ButtonWidget m_RefreshList;
8
9 ref OptionSelectorMultistate m_CharacterAliveFilter;
10 ref OptionSelectorMultistate m_SortingFilter;
11 ref OptionSelectorMultistate m_RegionFilter;
12 ref OptionSelectorMultistate m_PingFilter;
13 ref OptionSelectorMultistate m_MapFilter;
14 ref OptionSelector m_DLCFilter; // DEPRECATED
15 ref OptionSelector m_FavoritedFilter;
16 ref OptionSelector m_FriendsPlayingFilter;
17 ref OptionSelector m_BattleyeFilter; // DEPRECATED
18 ref OptionSelector m_PasswordFilter;
19 ref OptionSelector m_WhitelistFilter;
20 ref OptionSelector m_KeyboardFilter;
21 ref OptionSelector m_PreviouslyPlayedFilter;
22 ref OptionSelector m_VersionMatchFilter;
23 ref OptionSelector m_FullServerFilter;
24 ref OptionSelector m_ThirdPersonFilter;
25 ref OptionSelector m_PublicFilter; // DEPRECATED
26 ref OptionSelector m_AcceleratedTimeFilter; // DEPRECATED
27 protected ServerBrowserTab m_Tab;
28
29 void ServerBrowserFilterContainer(Widget root, ServerBrowserTab parent)
30 {
31 string player_name;
32 GetGame().GetPlayerName(player_name);
33 m_Tab = parent;
34
35 array<string> character_name_options ={"#server_browser_disabled", player_name};
36 array<string> region_options = {"#server_browser_all", "#server_browser_americas", "#server_browser_europe", "#server_browser_asia"};
37 array<string> sort_options = {"#server_browser_column_host A-Z", "#server_browser_column_host Z-A", "#players_title >", "#players_title <"};
38 array<string> ping_options = {"#server_browser_disabled", "<30", "<50", "<100", "<200", "<300", "<500"};
39 array<string> two_options = {"#server_browser_disabled", "#server_browser_show"};
40 array<string> map_options = LoadMapFilterOptions();
41
42 m_SearchByName = EditBoxWidget.Cast(root.FindAnyWidget("search_name_setting_option"));
43 m_RefreshList = ButtonWidget.Cast(root.GetParent().FindAnyWidget("refresh_list_button"));
44
45 m_RegionFilter = new OptionSelectorMultistate(root.FindAnyWidget("region_setting_option"), 0, this, false, region_options);
46 m_PingFilter = new OptionSelectorMultistate(root.FindAnyWidget("ping_setting_option"), 0, this, false, ping_options);
47 #ifdef PLATFORM_CONSOLE
48 m_FavoritedFilter = new OptionSelectorMultistate(root.FindAnyWidget("favorites_setting_option"), 0, this, false, two_options);
49 #else
50 m_FavoritedFilter = new OptionSelector(root.FindAnyWidget("favorites_setting_option"), 0, this, false);
51 #endif
52
53 m_MapFilter = new OptionSelectorMultistate(root.FindAnyWidget("map_setting_option"), 0, this, false, map_options);
54
55 m_FriendsPlayingFilter = new OptionSelector(root.FindAnyWidget("friends_setting_option"), 0, this, false);
56 m_PreviouslyPlayedFilter = new OptionSelector(root.FindAnyWidget("prev_played_setting_option"), 0, this, false);
57 m_FullServerFilter = new OptionSelector(root.FindAnyWidget("full_server_setting_option"), 0, this, false);
58 m_ThirdPersonFilter = new OptionSelector(root.FindAnyWidget("tps_setting_option"), 0, this, false);
59 m_PasswordFilter = new OptionSelector(root.FindAnyWidget("password_setting_option"), 0, this, false);
60 m_WhitelistFilter = new OptionSelector(root.FindAnyWidget("whitelist_setting_option"), 0, this, false);
61
62 m_RegionFilter.m_OptionChanged.Insert(OnFilterChanged);
63 m_PingFilter.m_OptionChanged.Insert(OnFilterChanged);
64 m_FavoritedFilter.m_OptionChanged.Insert(OnFilterChanged);
65 m_MapFilter.m_OptionChanged.Insert(OnMapFilterChanged);
66 m_FriendsPlayingFilter.m_OptionChanged.Insert(OnFilterChanged);
67 m_PreviouslyPlayedFilter.m_OptionChanged.Insert(OnFilterChanged);
68 m_FullServerFilter.m_OptionChanged.Insert(OnFilterChanged);
69 m_ThirdPersonFilter.m_OptionChanged.Insert(OnFilterChanged);
70 m_PasswordFilter.m_OptionChanged.Insert(OnFilterChanged);
71 m_WhitelistFilter.m_OptionChanged.Insert(OnFilterChanged);
72
73 #ifdef PLATFORM_CONSOLE
74 m_SortingFilter = new OptionSelectorMultistate(root.FindAnyWidget("sort_setting_option"), 0, this, false, sort_options);
75 m_KeyboardFilter = new OptionSelector(root.FindAnyWidget("keyboard_setting_option"), 0, this, false);
76
77 m_SortingFilter.m_OptionChanged.Insert(OnSortChanged);
78 m_SortingFilter.m_OptionChanged.Insert(OnFilterChanged);
79 m_KeyboardFilter.m_OptionChanged.Insert(OnFilterChanged);
80
81 m_PingFilter.Disable();
82 m_FriendsPlayingFilter.Disable();
83 #endif
84
85 #ifdef PLATFORM_WINDOWS
86 #ifndef PLATFORM_CONSOLE
87 m_SearchByIP = EditBoxWidget.Cast(root.FindAnyWidget("search_ip_setting_option"));
88
89 m_SearchByName.SetHandler(this);
90 m_SearchByIP.SetHandler(this);
91
92 m_CharacterAliveFilter = new OptionSelectorMultistate(root.FindAnyWidget("restrict_char_setting_option"), 0, this, false, character_name_options);
93 m_VersionMatchFilter = new OptionSelector(root.FindAnyWidget("ver_match_setting_option"), 0, this, false);
94
95 m_CharacterAliveFilter.m_OptionChanged.Insert(OnFilterChanged);
96 m_VersionMatchFilter.m_OptionChanged.Insert(OnFilterChanged);
97 #endif
98 #endif
99 LoadFilters();
100 }
101
102 protected array<string> LoadMapFilterOptions()
103 {
104 array<string> mapOptions = {"#server_browser_disabled"};
105 for (int i = ServerBrowserHelperFunctions.GetInstance().INTERNAL_MAP_NAMES.Count() - 1; i >= 0; i--)
106 {
107 mapOptions.Insert(ServerBrowserHelperFunctions.GetInstance().INTERNAL_MAP_NAMES.GetElement(i));
108 }
109
110 return mapOptions;
111 }
112
113 void OnFilterChanged()
114 {
115 m_Tab.OnFilterChanged();
116 }
117
118 void OnMapFilterChanged()
119 {
120 m_Tab.OnFilterChanged();
121 }
122
123 void LoadFilters()
124 {
125 string data;
126 if (m_Tab.GetTabType() == TabType.LAN || m_Tab.GetTabType() == TabType.FAVORITE)
127 return;
128
129 GetGame().GetProfileString("SB_Filter_" + m_Tab.GetTabType(), data);
130
131 m_Options.Clear();
132
133 if (data != "")
134 {
135 string errorMessage;
136 if (!JsonFileLoader<ref map<string, string>>.LoadData(data, m_Options, errorMessage))
137 ErrorEx(errorMessage);
138 }
139
140 if (m_Options && m_Options.Count() >= 6)
141 {
142 m_SearchByName.SetText(m_Options.Get("m_SearchByName"));
143 m_RegionFilter.SetStringOption(m_Options.Get("m_RegionFilter"), false);
144 m_PingFilter.SetStringOption(m_Options.Get("m_PingFilter"), false);
145 m_FriendsPlayingFilter.SetStringOption(m_Options.Get("m_FriendsPlayingFilter"), false);
146 m_PreviouslyPlayedFilter.SetStringOption(m_Options.Get("m_PreviouslyPlayedFilter"), false);
147 m_FullServerFilter.SetStringOption(m_Options.Get("m_FullServerFilter"), false);
148 m_ThirdPersonFilter.SetStringOption(m_Options.Get("m_ThirdPersonFilter"), false);
149 m_PasswordFilter.SetStringOption(m_Options.Get("m_PasswordFilter"), false);
150 m_WhitelistFilter.SetStringOption(m_Options.Get("m_WhitelistFilter"), false);
151 m_MapFilter.SetStringOption(m_Options.Get("m_MapFilter"), false);
152
153 #ifdef PLATFORM_CONSOLE
154 m_SortingFilter.SetStringOption(m_Options.Get("m_SortingFilter"), false);
155 m_KeyboardFilter.SetStringOption(m_Options.Get("m_KeyboardFilter"), false);
156 #else
157 m_FavoritedFilter.SetStringOption(m_Options.Get("m_FavoritedFilter"), false);
158 #endif
159
160 if (m_Options.Count() >= 12)
161 {
162 #ifdef PLATFORM_WINDOWS
163 #ifndef PLATFORM_CONSOLE
164 m_SearchByIP.SetText(m_Options.Get("m_SearchByIP"));
165 m_CharacterAliveFilter.SetStringOption(m_Options.Get("m_CharacterAliveFilter"), false);
166 m_VersionMatchFilter.SetStringOption(m_Options.Get("m_VersionMatchFilter"), false);
167 #endif
168 #endif
169 }
170 }
171 }
172
173 void SaveFilters()
174 {
175 m_Options.Clear();
176
177 m_Options.Insert("m_SearchByName", m_SearchByName.GetText());
178 m_Options.Insert("m_RegionFilter", m_RegionFilter.GetStringValue());
179 m_Options.Insert("m_PingFilter", m_PingFilter.GetStringValue());
180 m_Options.Insert("m_FriendsPlayingFilter", m_FriendsPlayingFilter.GetStringValue());
181 m_Options.Insert("m_PreviouslyPlayedFilter", m_PreviouslyPlayedFilter.GetStringValue());
182 m_Options.Insert("m_FullServerFilter", m_FullServerFilter.GetStringValue());
183 m_Options.Insert("m_ThirdPersonFilter", m_ThirdPersonFilter.GetStringValue());
184 m_Options.Insert("m_PasswordFilter", m_PasswordFilter.GetStringValue());
185 m_Options.Insert("m_WhitelistFilter", m_WhitelistFilter.GetStringValue());
186 m_Options.Insert("m_MapFilter", m_MapFilter.GetStringValue());
187
188 #ifdef PLATFORM_CONSOLE
189 m_Options.Insert("m_SortingFilter", m_SortingFilter.GetStringValue());
190 m_Options.Insert("m_KeyboardFilter", m_KeyboardFilter.GetStringValue());
191 #else
192 m_Options.Insert("m_FavoritedFilter", m_FavoritedFilter.GetStringValue());
193 #endif
194
195 #ifdef PLATFORM_WINDOWS
196 #ifndef PLATFORM_CONSOLE
197 m_Options.Insert("m_SearchByIP", m_SearchByIP.GetText());
198 m_Options.Insert("m_CharacterAliveFilter", m_CharacterAliveFilter.GetStringValue());
199 m_Options.Insert("m_VersionMatchFilter", m_VersionMatchFilter.GetStringValue());
200 #endif
201 #endif
202
203 string data, errorMessage;
204 if (!JsonFileLoader<ref map<string, string>>.MakeData(m_Options, data, errorMessage))
205 ErrorEx(errorMessage);
206
207 GetGame().SetProfileString("SB_Filter_" + m_Tab.GetTabType(), data);
208 }
209
210 void ResetFilters()
211 {
212 m_SearchByName.SetText("");
213 m_RegionFilter.Reset();
214 m_PingFilter.Reset();
215 m_FavoritedFilter.Reset();
216 m_FriendsPlayingFilter.Reset();
217 m_PreviouslyPlayedFilter.Reset();
218 m_FullServerFilter.Reset();
219 m_ThirdPersonFilter.Reset();
220 m_PasswordFilter.Reset();
221 m_WhitelistFilter.Reset();
222 m_MapFilter.Reset();
223
224 #ifdef PLATFORM_CONSOLE
225 m_SortingFilter.Reset();
226 m_KeyboardFilter.Reset();
227 #endif
228
229 #ifdef PLATFORM_WINDOWS
230 #ifndef PLATFORM_CONSOLE
231 m_SearchByIP.SetText("");
232 m_CharacterAliveFilter.Reset();
233 m_VersionMatchFilter.Reset();
234 #endif
235 #endif
236 SaveFilters();
237 }
238
239 bool PingIsSet()
240 {
241 return (m_Options["m_PingFilter"] != m_PingFilter.GetOptions()[0]);
242 }
243
244 bool FavoriteIsSet()
245 {
246 return (m_Options["m_FavoritedFilter"] != m_FavoritedFilter.GetOptions()[0]);
247 }
248
249 bool PreviouslyIsSet()
250 {
251 return (m_Options["m_PreviouslyPlayedFilter"] != m_PreviouslyPlayedFilter.GetOptions()[0]);
252 }
253
255 bool ProcessIntoIPAddress(out string potential_ip)
256 {
257 bool was_text_changed = false;
258 int length = potential_ip.Length();
259
260 // Filter out incompatible characters
261 for (int i = length - 1 ; i >= 0; --i)
262 {
263 string character = potential_ip.Get(i);
264
265 if (character.ToInt() == 0 && character != "0" && character != "." && character != ":")
266 {
267 potential_ip = potential_ip.SubstringInverted(potential_ip, i, i + 1);
268 was_text_changed = true;
269 }
270 }
271
272 bool text_was_shortened = LimitTextBoxCharacterCount(potential_ip, 21);
273
274 return (was_text_changed || text_was_shortened);
275 }
276
278 bool LimitTextBoxCharacterCount(out string text, int max_length)
279 {
280 int length = text.Length();
281 bool was_text_changed = false;
282
283 if (length > max_length)
284 {
285 text = text.Substring(0, max_length);
286 was_text_changed = true;
287 }
288
289 return was_text_changed;
290 }
291
293 string GenerateValidIP(string potential_ip)
294 {
295 string correct_ip_format;
296
297 TStringArray array_ip_and_port = new TStringArray;
298 potential_ip.Split(":", array_ip_and_port);
299
300 string ip_entries;
301 int port;
302
303 if(array_ip_and_port.Count() > 0)
304 {
305 ip_entries = array_ip_and_port.Get(0);
306 TStringArray array_ip = new TStringArray;
307 ip_entries.Split(".", array_ip);
308
309 string ip_string;
310 int ip_entries_count = array_ip.Count();
311
312 if (ip_entries_count <= 3 || ip_entries_count > 4)
313 return "";
314
315 for (int i = 0; i < 4; i++)
316 {
317 int ip_entry = array_ip.Get(i).ToInt();
318
319 // Check if the entry is a valid number
320 if (ip_entry > 255 || ip_entry < 0)
321 ip_entry = 0;
322
323 ip_string = ip_string + ip_entry.ToString();
324
325 if (i < ip_entries_count - 1)
326 ip_string = ip_string + ".";
327 ;
328 }
329
330 correct_ip_format = ip_string;
331 }
332 else
333 {
334 ip_entries = "";
335 correct_ip_format = ip_entries;
336 }
337
338 if (correct_ip_format == "")
339 return ""; // Input string was not recognized as a valid IP address. Thus return an empty string.
340
341 // The input string was recognized as a valid IP address. Thus continue with port number.
342
343 if(array_ip_and_port.Count() > 1)
344 {
345 port = array_ip_and_port.Get(1).ToInt();
346
347 if (port > 65535 | port < 0) // max port value is 65535
348 port = 2302;
349
350
351 if (port >= 0)
352 correct_ip_format = correct_ip_format + ":" + port.ToString();
353
354 }
355 else
356 {
357 port = 2302;
358 correct_ip_format = correct_ip_format + ":" + port.ToString();
359 }
360
361 return correct_ip_format;
362 }
363
365 bool GenerateValidFilter(out string potential_filter)
366 {
367 return LimitTextBoxCharacterCount(potential_filter, 16);
368 }
369
370 void OnSortChanged(int value)
371 {
372 switch(value)
373 {
374 case 0:
375 {
376 m_Tab.SetSort(ESortType.HOST, ESortOrder.ASCENDING);
377 break;
378 }
379 case 1:
380 {
381 m_Tab.SetSort(ESortType.HOST, ESortOrder.DESCENDING);
382 break;
383 }
384 case 2:
385 {
386 m_Tab.SetSort(ESortType.POPULATION, ESortOrder.DESCENDING);
387 break;
388 }
389 case 3:
390 {
391 m_Tab.SetSort(ESortType.POPULATION, ESortOrder.ASCENDING);
392 break;
393 }
394 }
395 }
396
397 void Focus()
398 {
399 #ifdef PLATFORM_CONSOLE
400 switch (m_Tab.GetTabType())
401 {
402 case TabType.FAVORITE:
403 {
404 SetFocus(m_RefreshList);
405 break;
406 }
407 case TabType.OFFICIAL:
408 case TabType.COMMUNITY:
409 {
410 SetFocus(m_SearchByName);
411 break;
412 }
413 }
414 #endif
415 #ifdef PLATFORM_WINDOWS
416 SetFocus(m_SearchByName);
417 #endif
418 }
419
420 override bool OnChange(Widget w, int x, int y, bool finished)
421 {
422 if(w)
423 {
424 if(w == m_SearchByName)
425 {
426 string input_name = m_SearchByName.GetText();
427
428 if (GenerateValidFilter(input_name))
429 m_SearchByName.SetText(input_name); // Warning! Using SetText() causes the cursor to move at the end of the text box!
430
432 SetFocus(m_SearchByName);
433
434 return true;
435 }
436 else if(w == m_SearchByIP)
437 {
438 string input_ip = m_SearchByIP.GetText();
439
440 if (ProcessIntoIPAddress(input_ip))
441 m_SearchByIP.SetText(input_ip); // Warning! Using SetText() causes the cursor to move at the end of the text box!
442
444 SetFocus(m_SearchByIP);
445
446 return true;
447 }
448 }
449 return false;
450 }
451
452 override bool OnFocus(Widget w, int x, int y)
453 {
454 m_Tab.OnFilterFocus(w);
455
456 return false;
457 }
458
459 override bool OnMouseEnter(Widget w, int x, int y)
460 {
461 return m_Tab.OnMouseEnter(w, x, y);
462 }
463
464 override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
465 {
466 return m_Tab.OnMouseLeave(w, enterW, x, y);
467 }
468
469 GetServersInput GetFilterOptionsPC()
470 {
471 GetServersInput input = new GetServersInput();
472
473 input.m_RowsPerPage = SERVER_BROWSER_PAGE_SIZE;
474 input.m_Platform = 1;
475
476 if (m_SearchByName)
477 {
478 string name_text = m_SearchByName.GetText();
479 if (name_text != "")
480 {
481 input.SetNameFilter(name_text);
482 }
483 }
484
485 if (m_FullServerFilter.IsSet())
486 {
487 input.SetFullServer(m_FullServerFilter.IsEnabled());
488 }
489
490 if (m_ThirdPersonFilter.IsSet())
491 {
492 input.SetThirdPerson(m_ThirdPersonFilter.IsEnabled());
493 }
494
495 if (m_PasswordFilter.IsSet())
496 {
497 input.SetPassworded(m_PasswordFilter.IsEnabled());
498 }
499
500 if (m_WhitelistFilter.IsSet())
501 {
502 input.SetWhitelistEnabled(m_WhitelistFilter.IsEnabled());
503 }
504
505 if (m_MapFilter.IsSet())
506 {
507 string internalMapName = ServerBrowserHelperFunctions.GetInternalMapName(m_MapFilter.GetStringValue());
508 if (internalMapName != "")
509 input.SetMapNameToRun(internalMapName);
510 }
511
512 #ifndef PLATFORM_CONSOLE
513 if (m_SearchByIP)
514 {
515 string ip_text = m_SearchByIP.GetText();
516 if (ip_text != "")
517 {
518 input.SetHostIp(ip_text);
519 }
520 }
521
522 if (m_PingFilter.IsSet())
523 {
524 string str_ping = m_PingFilter.GetStringValue();
525 int ping = str_ping.Substring(1, str_ping.Length() - 1).ToInt();
526 input.SetPingFilter(ping);
527 }
528
529 if (m_FriendsPlayingFilter.IsSet())
530 {
531 input.SetFriendsPlaying(m_FriendsPlayingFilter.IsEnabled());
532 }
533
534 if (m_PreviouslyPlayedFilter.IsSet())
535 {
536 input.SetPreviouslyPlayed(m_PreviouslyPlayedFilter.IsEnabled());
537 }
538
539 if (m_VersionMatchFilter.IsSet())
540 {
541 input.SetProperVersionMatch(m_VersionMatchFilter.IsEnabled());
542 }
543 #endif
544
545 return input;
546 }
547
548 GetServersInput GetFilterOptionsConsoles()
549 {
550 GetServersInput input = new GetServersInput();
551
552 input.m_RowsPerPage = SERVER_BROWSER_PAGE_SIZE;
553
554 #ifdef PLATFORM_XBOX
555 input.m_Platform = 2;
556 #endif
557 #ifdef PLATFORM_PS4
558 input.m_Platform = 3;
559 #endif
560
561 if (m_SearchByName)
562 {
563 string name_text = m_SearchByName.GetText();
564 if(name_text != "")
565 {
566 input.SetNameFilter(name_text);
567 }
568 }
569
570 if (m_RegionFilter.IsSet())
571 {
572 input.SetRegionIdFilter(m_RegionFilter.GetValue());
573 }
574
575 if (m_FullServerFilter.IsSet())
576 {
577 input.SetFullServer(m_FullServerFilter.IsEnabled());
578 if (m_FullServerFilter.IsEnabled())
579 {
580 input.SetFreeSlotsMax(1);
581 }
582 else
583 {
584 input.SetFreeSlotsMin(1);
585 }
586 }
587
588 if (m_ThirdPersonFilter.IsSet())
589 {
590 // modeId is used to specify whether third person is allowed on CONSOLE servers
591 // ALLOW third person: modeId = 0
592 // BLOCK third person: modeId = 1
593 input.SetModeIdFilter(!m_ThirdPersonFilter.IsEnabled());
594 }
595
596 if (m_PasswordFilter.IsSet())
597 {
598 input.SetIsPasswordProtectedFilter(m_PasswordFilter.IsEnabled());
599 }
600
601 if (m_WhitelistFilter.IsSet())
602 {
603 input.SetWhitelistEnabled(m_WhitelistFilter.IsEnabled());
604 }
605
606 if (m_KeyboardFilter.IsSet())
607 {
608 input.SetMouseAndKeyboardEnabled(m_KeyboardFilter.IsEnabled());
609 }
610
611 if (m_MapFilter.IsSet())
612 {
613 string internalMapName = ServerBrowserHelperFunctions.GetInternalMapName(m_MapFilter.GetStringValue());
614 if (internalMapName != "")
615 input.SetMapNameToRun(internalMapName);
616 }
617
618 if (m_PreviouslyPlayedFilter.IsSet())
619 {
620 input.SetPreviouslyPlayed(m_PreviouslyPlayedFilter.IsEnabled());
621 }
622
623 return input;
624 }
625}
override bool OnMouseEnter(Widget w, int x, int y)
override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
ESortOrder
ESortType
GetServersInput the input structure of the GetServers operation.
static ref map< string, string > INTERNAL_MAP_NAMES
static ServerBrowserHelperFunctions GetInstance()
static string GetInternalMapName(string mapName)
override void OnFilterFocus(Widget w)
override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
override void SetSort(ESortType type, ESortOrder order)
override void OnFilterChanged()
override bool OnMouseEnter(Widget w, int x, int y)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native CGame GetGame()
enum ShapeType ErrorEx
array< string > TStringArray
Definition enscript.c:709
Icon x
Icon y
override bool OnChange(Widget w, int x, int y, bool finished)
const int SERVER_BROWSER_PAGE_SIZE
TabType
void ResetFilters()
void Focus()
Widget m_RefreshList
override bool OnFocus(Widget w, int x, int y)
void OnFilterChanged()