#ifdef IMPLEMENTATION
void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
{
- float m, pure, freeslots, j, numh, maxp, numb, sflags;
+ bool pure_available;
+ float m, pure_violations, freeslots, j, numh, maxp, numb, sflags;
string s, typestr, versionstr, k, v, modname;
// ====================================
me.currentServerCName = strzone(gethostcachestring(SLIST_FIELD_CNAME, i));
me.cnameLabel.setText(me.cnameLabel, me.currentServerCName);
- pure = -1;
+ pure_available = false;
+ pure_violations = -1;
typestr = _("N/A");
versionstr = _("N/A");
k = substring(argv(j), 0, 1);
v = substring(argv(j), 1, -1);
if(k == "P")
- pure = stof(v);
+ {
+ pure_available = true;
+ pure_violations = stof(v);
+ }
else if(k == "S")
freeslots = stof(v);
else if(k == "F")
me.currentServerVersion = strzone(versionstr);
me.versionLabel.setText(me.versionLabel, me.currentServerVersion);
- me.currentServerPure = ((pure < 0) ? _("N/A") : (pure == 0) ? _("Official") : sprintf(_("%d modified"), pure));
+ me.currentServerPure = ((!pure_available) ? _("N/A") : (pure_violations == 0) ? _("Official") : sprintf(_("%d modified"), pure_violations));
me.currentServerPure = strzone(me.currentServerPure);
me.pureLabel.setText(me.pureLabel, me.currentServerPure);
bool isv4, isv6;
vector theColor;
float theAlpha;
- bool pure = false;
+ bool pure = false, pure_available = false;
int freeslots = -1, sflags = -1, j, m;
string s, typestr, versionstr, k, v, modname;
k = substring(argv(j), 0, 1);
v = substring(argv(j), 1, -1);
if(k == "P")
- pure = stob(v);
+ {
+ pure = (stof(v) == 0);
+ pure_available = true;
+ }
else if(k == "S")
freeslots = stof(v);
else if(k == "F")
if(modname != "CTS")
if(modname != "NIX")
if(modname != "NewToys")
- pure = false;
+ pure_available = false;
if(gethostcachenumber(SLIST_FIELD_FREESLOTS, i) <= 0)
theAlpha = SKINALPHA_SERVERLIST_FULL;
// Mod
if(modname == "Xonotic")
{
- if(pure == 0)
+ // Here, pure_available should always be set. If not, consider
+ // it an impurity.
+ if(pure_available && pure)
draw_Picture(iconPos, "icon_pure1", iconSize, '1 1 1', 1);
}
else
if(draw_PictureSize(icon) == '0 0 0')
icon = "icon_mod_";
- if(pure == 0)
- draw_Picture(iconPos, icon, iconSize, '1 1 1', 1);
- else
+ // In mods, pure_available not being present indicates
+ // non-support of the feature. Just show the mod icon as is
+ // then.
+ if(pure_available && !pure)
draw_Picture(iconPos, icon, iconSize, '1 1 1', SKINALPHA_SERVERLIST_ICON_NONPURE);
+ else
+ draw_Picture(iconPos, icon, iconSize, '1 1 1', 1);
}
iconPos.x += iconSize.x;