430 if(me.currentSortField == -1)
432 me.setSortOrder(me, SLIST_FIELD_PING, +1);
435 else if(me.needsRefresh == 1)
439 else if(me.needsRefresh == 2)
444 else if(me.needsRefresh == 3)
450 bool owned = ((me.selectedServer == me.ipAddressBox.text) && (me.ipAddressBox.text !=
""));
459 int itemcount = me.nItems;
469 float last = (itemcount - 1);
480 }
else if (catl < j) {
485 }
else if (catf == j) {
490 error(
"Category mismatch I");
493 error(
"Category mismatch II");
507 while (last - first > 1) {
508 float middle =
floor((first + last) / 2);
521 error(
"Category mismatch III");
524 error(
"Category mismatch IV");
539 me.nItems = itemcount;
543 me.connectButton.disabled = (me.ipAddressBox.text ==
"");
544 me.infoButton.disabled = !owned;
545 me.favoriteButton.disabled = (me.ipAddressBox.text ==
"");
548 if(me.lockedSelectedItem)
559 else if(me.selectedServer)
561 for(
int i = 0; i < me.nItems; ++i)
577 if(me.selectedItem >= me.nItems)
585 if(me.selectedServer != me.ipAddressBox.text)
587 me.ipAddressBox.setText(me.ipAddressBox, me.selectedServer);
588 me.ipAddressBox.cursorPos =
strlen(me.selectedServer);
589 me.ipAddressBoxFocused = -1;
593 if(me.ipAddressBoxFocused != me.ipAddressBox.focused)
595 if(me.ipAddressBox.focused || me.ipAddressBoxFocused < 0)
597 me.ipAddressBoxFocused = me.ipAddressBox.focused;
736 me.realFontSize_y = me.fontSize / (absSize.y * me.itemHeight);
737 me.realFontSize_x = me.fontSize / (absSize.x * (1 - me.controlWidth));
738 me.realUpperMargin = 0.5 * (1 - me.realFontSize.y);
740 me.columnIconsOrigin = 0;
741 me.columnIconsSize = me.realFontSize.x * 5 * me.iconsSizeFactor;
742 me.columnPingSize = me.realFontSize.x * 3;
743 me.columnMapSize = me.realFontSize.x * 10;
744 me.columnTypeSize = me.realFontSize.x * 4;
745 me.columnPlayersSize = me.realFontSize.x * 5;
746 me.columnNameSize = 1 - me.columnPlayersSize - me.columnMapSize - me.columnPingSize - me.columnIconsSize - me.columnTypeSize - 4 * me.realFontSize.x;
748 me.columnPingOrigin = me.columnIconsOrigin + me.columnIconsSize;
749 me.columnNameOrigin = me.columnPingOrigin + me.columnPingSize + me.realFontSize.x;
750 me.columnMapOrigin = me.columnNameOrigin + me.columnNameSize + me.realFontSize.x;
751 me.columnTypeOrigin = me.columnMapOrigin + me.columnMapSize + me.realFontSize.x;
752 me.columnPlayersOrigin = me.columnTypeOrigin + me.columnTypeSize + me.realFontSize.x;
755 me.positionSortButton(me, me.sortButton2, me.columnNameOrigin, me.columnNameSize, _(
"Hostname"),
ServerList_NameSort_Click);
756 me.positionSortButton(me, me.sortButton3, me.columnMapOrigin, me.columnMapSize, _(
"Map"),
ServerList_MapSort_Click);
758 me.positionSortButton(me, me.sortButton5, me.columnPlayersOrigin, me.columnPlayersSize, _(
"Players"),
ServerList_PlayerSort_Click);
760 int f = me.currentSortField;
763 me.currentSortField = -1;
764 me.setSortOrder(me, f, me.currentSortOrder);
803#define SET_YRANGE(start,end) \
804 draw_scale = boxToGlobalSize(eX + eY * ((end) - (start)), oldscale); \
805 draw_shift = boxToGlobal(eY * (start), oldshift, oldscale);
820 (me.categoriesHeight - me.realFontSize.y) / (me.categoriesHeight + me.serversHeight),
821 me.categoriesHeight / (me.categoriesHeight + me.serversHeight)
824 eY * me.realUpperMargin
827 eX * (me.columnNameOrigin + (me.columnNameSize -
draw_TextWidth(catent.cat_string, 0, me.realFontSize)) * 0.5),
830 eX * (me.columnNameOrigin),
831 strcat(catent.cat_string,
":"),
834 SKINCOLOR_SERVERLIST_CATEGORY,
835 SKINALPHA_SERVERLIST_CATEGORY,
838 SET_YRANGE(me.categoriesHeight / (me.categoriesHeight + me.serversHeight), 1);
846 if(isSelected && !me.lockedSelectedItem)
847 draw_Fill(
'0 0 0',
'1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
850 me.focusedItemAlpha =
getFadedAlpha(me.focusedItemAlpha, SKINALPHA_LISTBOX_FOCUSED, SKINFADEALPHA_LISTBOX_FOCUSED);
851 draw_Fill(
'0 0 0',
'1 1 0', SKINCOLOR_LISTBOX_FOCUSED, me.focusedItemAlpha);
856 string typestr =
"", versionstr =
"";
860 versionstr =
argv(1);
862 bool pure =
false, pure_available =
false;
863 int qcfreeslots = -1, sflags = -1;
865 for(
int j = 2; j < m; ++j)
873 pure = (
stof(value) == 0);
874 pure_available =
true;
877 qcfreeslots =
stof(value);
879 sflags =
stoi(value);
884#ifdef COMPAT_NO_MOD_IS_XONOTIC
889 string original_modname =
modname;
906 pure_available =
false;
910 theAlpha = SKINALPHA_SERVERLIST_FULL;
911 else if(qcfreeslots == 0)
912 theAlpha = SKINALPHA_SERVERLIST_EMPTY;
914 theAlpha = SKINALPHA_SERVERLIST_EMPTY;
925 theColor = SKINCOLOR_SERVERLIST_LOWPING;
927 theColor = SKINCOLOR_SERVERLIST_LOWPING + (SKINCOLOR_SERVERLIST_MEDPING - SKINCOLOR_SERVERLIST_LOWPING) * ((
ping -
PING_LOW) / (
PING_MED -
PING_LOW));
929 theColor = SKINCOLOR_SERVERLIST_MEDPING + (SKINCOLOR_SERVERLIST_HIGHPING - SKINCOLOR_SERVERLIST_MEDPING) * ((
ping -
PING_MED) / (
PING_HIGH -
PING_MED));
938 theColor = theColor * (1 - SKINALPHA_SERVERLIST_FAVORITE) + SKINCOLOR_SERVERLIST_FAVORITE * SKINALPHA_SERVERLIST_FAVORITE;
940 theAlpha = theAlpha * (1 - SKINALPHA_SERVERLIST_FAVORITE) + SKINALPHA_SERVERLIST_FAVORITE;
945 bool isv4 =
false, isv6 =
false;
957 int crypto =
stof(
substring(crypto_getencryptlevel(s), 0, 1));
958 if((crypto <= 0 &&
cvar(
"crypto_aeslevel") >= 3) || (crypto >= 3 &&
cvar(
"crypto_aeslevel") <= 0))
960 theColor = SKINCOLOR_SERVERLIST_IMPOSSIBLE;
961 theAlpha = SKINALPHA_SERVERLIST_IMPOSSIBLE;
966 if(
cvar(
"crypto_aeslevel") >= 2)
971 if(
cvar(
"crypto_aeslevel") >= 1)
989 vector iconSize =
'0 0 0';
990 iconSize_y = me.realFontSize.y * me.iconsSizeFactor / me.serversHeight;
991 iconSize_x = me.realFontSize.x * me.iconsSizeFactor;
994 if(me.seenIPv4 && me.seenIPv6)
995 iconPos_x = (me.columnIconsSize - 4 * iconSize.x) * 0.5;
997 iconPos_x = (me.columnIconsSize - 3 * iconSize.x) * 0.5;
998 iconPos_y = (1 - iconSize.y) * 0.5;
1001 if(me.seenIPv4 && me.seenIPv6)
1004 draw_Picture(iconPos,
"icon_ipv6", iconSize,
'1 1 1', 1);
1006 draw_Picture(iconPos,
"icon_ipv4", iconSize,
'1 1 1', 1);
1008 iconPos.x += iconSize.x;
1015 iconPos.x += iconSize.x;
1022 if(pure_available && pure)
1023 draw_Picture(iconPos,
"icon_pure1", iconSize,
'1 1 1', 1);
1034 if(pure_available && !pure)
1035 draw_Picture(iconPos, icon, iconSize,
'1 1 1', SKINALPHA_SERVERLIST_ICON_NONPURE);
1040 iconPos.x += iconSize.x;
1046 draw_Picture(iconPos,
"icon_mod_", iconSize,
'1 1 1', 1);
1048 draw_Picture(iconPos,
"icon_stats1", iconSize,
'1 1 1', 1);
1051 if(isFocused && me.mouseOverIcons && !me.tooltip)
1054 if(me.seenIPv4 && me.seenIPv6)
1055 t =
strcat(t, (isv6) ?
"IPv6, " :
"IPv4, ");
1056 t =
strcat(t, _(
"encryption:"),
" ", (crypto ? sprintf(_(
"AES level %d"), crypto) :
ZCTX(_(
"ENC^none"))),
", ");
1057 t =
strcat(t, sprintf(_(
"mod: %s"), ((
modname ==
"xonotic") ?
ZCTX(_(
"MOD^Default")) : original_modname)));
1059 t =
strcat(t, sprintf(
" (%s)", (pure) ? _(
"official settings") : _(
"modified settings")));
1070 0.5 - 0.5 / me.serversHeight,
1071 0.5 + 0.5 / me.serversHeight
1076 draw_Text(me.realUpperMargin *
eY + (me.columnPingOrigin + me.columnPingSize -
draw_TextWidth(s, 0, me.realFontSize)) *
eX, s, me.realFontSize, theColor, theAlpha, 0);
1080 draw_Text(me.realUpperMargin *
eY + me.columnNameOrigin *
eX, s, me.realFontSize, theColor, theAlpha, 0);
1084 draw_Text(me.realUpperMargin *
eY + (me.columnMapOrigin + (me.columnMapSize -
draw_TextWidth(s, 0, me.realFontSize)) * 0.5) *
eX, s, me.realFontSize, theColor, theAlpha, 0);
1088 draw_Text(me.realUpperMargin *
eY + (me.columnTypeOrigin + (me.columnTypeSize -
draw_TextWidth(s, 0, me.realFontSize)) * 0.5) *
eX, s, me.realFontSize, theColor, theAlpha, 0);
1092 draw_Text(me.realUpperMargin *
eY + (me.columnPlayersOrigin + (me.columnPlayersSize -
draw_TextWidth(s, 0, me.realFontSize)) * 0.5) *
eX, s, me.realFontSize, theColor, theAlpha, 0);