429 if(me.currentSortField == -1)
431 me.setSortOrder(me, SLIST_FIELD_PING, +1);
434 else if(me.needsRefresh == 1)
438 else if(me.needsRefresh == 2)
443 else if(me.needsRefresh == 3)
449 bool owned = ((me.selectedServer == me.ipAddressBox.text) && (me.ipAddressBox.text !=
""));
458 int itemcount = me.nItems;
468 float last = (itemcount - 1);
479 }
else if (catl < j) {
484 }
else if (catf == j) {
489 error(
"Category mismatch I");
492 error(
"Category mismatch II");
506 while (last - first > 1) {
507 float middle =
floor((first + last) / 2);
520 error(
"Category mismatch III");
523 error(
"Category mismatch IV");
538 me.nItems = itemcount;
542 me.connectButton.disabled = (me.ipAddressBox.text ==
"");
543 me.infoButton.disabled = !owned;
544 me.favoriteButton.disabled = (me.ipAddressBox.text ==
"");
547 if(me.lockedSelectedItem)
558 else if(me.selectedServer)
560 for(
int i = 0; i < me.nItems; ++i)
576 if(me.selectedItem >= me.nItems)
584 if(me.selectedServer != me.ipAddressBox.text)
586 me.ipAddressBox.setText(me.ipAddressBox, me.selectedServer);
587 me.ipAddressBox.cursorPos =
strlen(me.selectedServer);
588 me.ipAddressBoxFocused = -1;
592 if(me.ipAddressBoxFocused != me.ipAddressBox.focused)
594 if(me.ipAddressBox.focused || me.ipAddressBoxFocused < 0)
596 me.ipAddressBoxFocused = me.ipAddressBox.focused;
735 me.realFontSize_y = me.fontSize / (absSize.y * me.itemHeight);
736 me.realFontSize_x = me.fontSize / (absSize.x * (1 - me.controlWidth));
737 me.realUpperMargin = 0.5 * (1 - me.realFontSize.y);
739 me.columnIconsOrigin = 0;
740 me.columnIconsSize = me.realFontSize.x * 5 * me.iconsSizeFactor;
741 me.columnPingSize = me.realFontSize.x * 3;
742 me.columnMapSize = me.realFontSize.x * 10;
743 me.columnTypeSize = me.realFontSize.x * 4;
744 me.columnPlayersSize = me.realFontSize.x * 5;
745 me.columnNameSize = 1 - me.columnPlayersSize - me.columnMapSize - me.columnPingSize - me.columnIconsSize - me.columnTypeSize - 4 * me.realFontSize.x;
747 me.columnPingOrigin = me.columnIconsOrigin + me.columnIconsSize;
748 me.columnNameOrigin = me.columnPingOrigin + me.columnPingSize + me.realFontSize.x;
749 me.columnMapOrigin = me.columnNameOrigin + me.columnNameSize + me.realFontSize.x;
750 me.columnTypeOrigin = me.columnMapOrigin + me.columnMapSize + me.realFontSize.x;
751 me.columnPlayersOrigin = me.columnTypeOrigin + me.columnTypeSize + me.realFontSize.x;
754 me.positionSortButton(me, me.sortButton2, me.columnNameOrigin, me.columnNameSize, _(
"Hostname"),
ServerList_NameSort_Click);
755 me.positionSortButton(me, me.sortButton3, me.columnMapOrigin, me.columnMapSize, _(
"Map"),
ServerList_MapSort_Click);
757 me.positionSortButton(me, me.sortButton5, me.columnPlayersOrigin, me.columnPlayersSize, _(
"Players"),
ServerList_PlayerSort_Click);
759 int f = me.currentSortField;
762 me.currentSortField = -1;
763 me.setSortOrder(me, f, me.currentSortOrder);
802#define SET_YRANGE(start,end) \
803 draw_scale = boxToGlobalSize(eX + eY * ((end) - (start)), oldscale); \
804 draw_shift = boxToGlobal(eY * (start), oldshift, oldscale);
819 (me.categoriesHeight - me.realFontSize.y) / (me.categoriesHeight + me.serversHeight),
820 me.categoriesHeight / (me.categoriesHeight + me.serversHeight)
823 eY * me.realUpperMargin
826 eX * (me.columnNameOrigin + (me.columnNameSize -
draw_TextWidth(catent.cat_string, 0, me.realFontSize)) * 0.5),
829 eX * (me.columnNameOrigin),
830 strcat(catent.cat_string,
":"),
833 SKINCOLOR_SERVERLIST_CATEGORY,
834 SKINALPHA_SERVERLIST_CATEGORY,
837 SET_YRANGE(me.categoriesHeight / (me.categoriesHeight + me.serversHeight), 1);
845 if(isSelected && !me.lockedSelectedItem)
846 draw_Fill(
'0 0 0',
'1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
849 me.focusedItemAlpha =
getFadedAlpha(me.focusedItemAlpha, SKINALPHA_LISTBOX_FOCUSED, SKINFADEALPHA_LISTBOX_FOCUSED);
850 draw_Fill(
'0 0 0',
'1 1 0', SKINCOLOR_LISTBOX_FOCUSED, me.focusedItemAlpha);
855 string typestr =
"", versionstr =
"";
859 versionstr =
argv(1);
861 bool pure =
false, pure_available =
false;
862 int qcfreeslots = -1, sflags = -1;
864 for(
int j = 2; j < m; ++j)
872 pure = (
stof(value) == 0);
873 pure_available =
true;
876 qcfreeslots =
stof(value);
878 sflags =
stoi(value);
883#ifdef COMPAT_NO_MOD_IS_XONOTIC
888 string original_modname =
modname;
905 pure_available =
false;
909 theAlpha = SKINALPHA_SERVERLIST_FULL;
910 else if(qcfreeslots == 0)
911 theAlpha = SKINALPHA_SERVERLIST_EMPTY;
913 theAlpha = SKINALPHA_SERVERLIST_EMPTY;
924 theColor = SKINCOLOR_SERVERLIST_LOWPING;
926 theColor = SKINCOLOR_SERVERLIST_LOWPING + (SKINCOLOR_SERVERLIST_MEDPING - SKINCOLOR_SERVERLIST_LOWPING) * ((
ping -
PING_LOW) / (
PING_MED -
PING_LOW));
928 theColor = SKINCOLOR_SERVERLIST_MEDPING + (SKINCOLOR_SERVERLIST_HIGHPING - SKINCOLOR_SERVERLIST_MEDPING) * ((
ping -
PING_MED) / (
PING_HIGH -
PING_MED));
937 theColor = theColor * (1 - SKINALPHA_SERVERLIST_FAVORITE) + SKINCOLOR_SERVERLIST_FAVORITE * SKINALPHA_SERVERLIST_FAVORITE;
939 theAlpha = theAlpha * (1 - SKINALPHA_SERVERLIST_FAVORITE) + SKINALPHA_SERVERLIST_FAVORITE;
944 bool isv4 =
false, isv6 =
false;
956 int crypto =
stof(
substring(crypto_getencryptlevel(s), 0, 1));
957 if((crypto <= 0 &&
cvar(
"crypto_aeslevel") >= 3) || (crypto >= 3 &&
cvar(
"crypto_aeslevel") <= 0))
959 theColor = SKINCOLOR_SERVERLIST_IMPOSSIBLE;
960 theAlpha = SKINALPHA_SERVERLIST_IMPOSSIBLE;
965 if(
cvar(
"crypto_aeslevel") >= 2)
970 if(
cvar(
"crypto_aeslevel") >= 1)
988 vector iconSize =
'0 0 0';
989 iconSize_y = me.realFontSize.y * me.iconsSizeFactor / me.serversHeight;
990 iconSize_x = me.realFontSize.x * me.iconsSizeFactor;
993 if(me.seenIPv4 && me.seenIPv6)
994 iconPos_x = (me.columnIconsSize - 4 * iconSize.x) * 0.5;
996 iconPos_x = (me.columnIconsSize - 3 * iconSize.x) * 0.5;
997 iconPos_y = (1 - iconSize.y) * 0.5;
1000 if(me.seenIPv4 && me.seenIPv6)
1003 draw_Picture(iconPos,
"icon_ipv6", iconSize,
'1 1 1', 1);
1005 draw_Picture(iconPos,
"icon_ipv4", iconSize,
'1 1 1', 1);
1007 iconPos.x += iconSize.x;
1014 iconPos.x += iconSize.x;
1021 if(pure_available && pure)
1022 draw_Picture(iconPos,
"icon_pure1", iconSize,
'1 1 1', 1);
1033 if(pure_available && !pure)
1034 draw_Picture(iconPos, icon, iconSize,
'1 1 1', SKINALPHA_SERVERLIST_ICON_NONPURE);
1039 iconPos.x += iconSize.x;
1045 draw_Picture(iconPos,
"icon_mod_", iconSize,
'1 1 1', 1);
1047 draw_Picture(iconPos,
"icon_stats1", iconSize,
'1 1 1', 1);
1050 if(isFocused && me.mouseOverIcons && !me.tooltip)
1053 if(me.seenIPv4 && me.seenIPv6)
1054 t =
strcat(t, (isv6) ?
"IPv6, " :
"IPv4, ");
1055 t =
strcat(t, _(
"encryption:"),
" ", (crypto ? sprintf(_(
"AES level %d"), crypto) :
ZCTX(_(
"ENC^none"))),
", ");
1056 t =
strcat(t, sprintf(_(
"mod: %s"), ((
modname ==
"xonotic") ?
ZCTX(_(
"MOD^Default")) : original_modname)));
1058 t =
strcat(t, sprintf(
" (%s)", (pure) ? _(
"official settings") : _(
"modified settings")));
1069 0.5 - 0.5 / me.serversHeight,
1070 0.5 + 0.5 / me.serversHeight
1075 draw_Text(me.realUpperMargin *
eY + (me.columnPingOrigin + me.columnPingSize -
draw_TextWidth(s, 0, me.realFontSize)) *
eX, s, me.realFontSize, theColor, theAlpha, 0);
1079 draw_Text(me.realUpperMargin *
eY + me.columnNameOrigin *
eX, s, me.realFontSize, theColor, theAlpha, 0);
1083 draw_Text(me.realUpperMargin *
eY + (me.columnMapOrigin + (me.columnMapSize -
draw_TextWidth(s, 0, me.realFontSize)) * 0.5) *
eX, s, me.realFontSize, theColor, theAlpha, 0);
1087 draw_Text(me.realUpperMargin *
eY + (me.columnTypeOrigin + (me.columnTypeSize -
draw_TextWidth(s, 0, me.realFontSize)) * 0.5) *
eX, s, me.realFontSize, theColor, theAlpha, 0);
1091 draw_Text(me.realUpperMargin *
eY + (me.columnPlayersOrigin + (me.columnPlayersSize -
draw_TextWidth(s, 0, me.realFontSize)) * 0.5) *
eX, s, me.realFontSize, theColor, theAlpha, 0);