ATTRIB(XonoticServerInfoDialog, title, string, "Server Information")
ATTRIB(XonoticServerInfoDialog, color, vector, SKINCOLOR_DIALOG_SERVERINFO)
ATTRIB(XonoticServerInfoDialog, intendedWidth, float, 0.68)
- ATTRIB(XonoticServerInfoDialog, rows, float, 11)
+ ATTRIB(XonoticServerInfoDialog, rows, float, 15)
ATTRIB(XonoticServerInfoDialog, columns, float, 12)
ATTRIB(XonoticServerInfoDialog, currentServerName, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerMod, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerVersion, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerPing, string, string_null)
+ ATTRIB(XonoticServerInfoDialog, currentServerKey, string, string_null)
+ ATTRIB(XonoticServerInfoDialog, currentServerID, string, string_null)
+ ATTRIB(XonoticServerInfoDialog, currentServerEncrypt, string, string_null)
+ ATTRIB(XonoticServerInfoDialog, currentServerPure, string, string_null)
ATTRIB(XonoticServerInfoDialog, nameLabel, entity, NULL)
ATTRIB(XonoticServerInfoDialog, cnameLabel, entity, NULL)
ATTRIB(XonoticServerInfoDialog, modLabel, entity, NULL)
ATTRIB(XonoticServerInfoDialog, versionLabel, entity, NULL)
ATTRIB(XonoticServerInfoDialog, pingLabel, entity, NULL)
+ ATTRIB(XonoticServerInfoDialog, keyLabel, entity, NULL)
+ ATTRIB(XonoticServerInfoDialog, idLabel, entity, NULL)
+ ATTRIB(XonoticServerInfoDialog, encryptLabel, entity, NULL)
+ ATTRIB(XonoticServerInfoDialog, canConnectLabel, entity, NULL)
+ ATTRIB(XonoticServerInfoDialog, pureLabel, entity, NULL)
ENDCLASS(XonoticServerInfoDialog)
float SLIST_FIELD_NAME;
#ifdef IMPLEMENTATION
void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
{
- float m;
- string s, typestr, versionstr, numh, maxp;
+ float m, pure, j;
+ string s, typestr, versionstr, numh, maxp, k, v;
+
+ if(me.currentServerName)
+ strunzone(me.currentServerName);
+ me.currentServerName = string_null;
+ if(me.currentServerCName)
+ strunzone(me.currentServerCName);
+ me.currentServerCName = string_null;
+ if(me.currentServerType)
+ strunzone(me.currentServerType);
+ me.currentServerType = string_null;
+ if(me.currentServerMap)
+ strunzone(me.currentServerMap);
+ me.currentServerMap = string_null;
+ if(me.currentServerPlayers)
+ strunzone(me.currentServerPlayers);
+ me.currentServerPlayers = string_null;
+ if(me.currentServerNumPlayers)
+ strunzone(me.currentServerNumPlayers);
+ me.currentServerNumPlayers = string_null;
+ if(me.currentServerNumBots)
+ strunzone(me.currentServerNumBots);
+ me.currentServerNumBots = string_null;
+ if(me.currentServerMod)
+ strunzone(me.currentServerMod);
+ me.currentServerMod = string_null;
+ if(me.currentServerVersion)
+ strunzone(me.currentServerVersion);
+ me.currentServerVersion = string_null;
+ if(me.currentServerPing)
+ strunzone(me.currentServerPing);
+ me.currentServerPing = string_null;
+ if(me.currentServerKey)
+ strunzone(me.currentServerKey);
+ me.currentServerKey = string_null;
+ if(me.currentServerID)
+ strunzone(me.currentServerID);
+ me.currentServerID = string_null;
+ // not zoned!
+ //if(me.currentServerEncrypt)
+ // strunzone(me.currentServerEncrypt);
+ //me.currentServerEncrypt = string_null;
+ if(me.currentServerPure)
+ strunzone(me.currentServerPure);
+ me.currentServerPure = string_null;
SLIST_FIELD_NAME = gethostcacheindexforkey("name");
me.currentServerName = strzone(gethostcachestring(SLIST_FIELD_NAME, i));
me.currentServerCName = strzone(gethostcachestring(SLIST_FIELD_CNAME, i));
me.cnameLabel.setText(me.cnameLabel, me.currentServerCName);
+ pure = -1;
+ typestr = "N/A";
+ versionstr = "N/A";
+
SLIST_FIELD_QCSTATUS = gethostcacheindexforkey("qcstatus");
s = gethostcachestring(SLIST_FIELD_QCSTATUS, i);
m = tokenizebyseparator(s, ":");
- if(m > 1)
+ if(m >= 2)
{
- typestr = argv (0);
+ typestr = argv(0);
versionstr = argv(1);
}
- else
+ for(j = 2; j < m; ++j)
{
- typestr = "N/A";
- versionstr = "N/A";
+ if(argv(j) == "")
+ break;
+ k = substring(argv(j), 0, 1);
+ v = substring(argv(j), 1, -1);
+ if(k == "P")
+ pure = stof(v);
}
+
me.currentServerType = strzone(typestr);
me.typeLabel.setText(me.typeLabel, me.currentServerType);
-
SLIST_FIELD_MAP = gethostcacheindexforkey("map");
me.currentServerMap = strzone(gethostcachestring(SLIST_FIELD_MAP, i));
me.mapLabel.setText(me.mapLabel, me.currentServerMap);
me.currentServerVersion = strzone(versionstr);
me.versionLabel.setText(me.versionLabel, me.currentServerVersion);
+ me.currentServerPure = ((pure < 0) ? "N/A" : (pure == 0) ? "Official settings" : sprintf("%d modified settings", pure));
+ me.currentServerPure = strzone(me.currentServerPure);
+ me.pureLabel.setText(me.pureLabel, me.currentServerPure);
+
SLIST_FIELD_PING = gethostcacheindexforkey("ping");
s = ftos(gethostcachenumber(SLIST_FIELD_PING, i));
me.currentServerPing = strzone(s);
me.pingLabel.setText(me.pingLabel, me.currentServerPing);
+
+ s = crypto_getidfp(me.currentServerCName);
+ if not(s)
+ s = "N/A";
+ me.currentServerID = strzone(s);
+ me.idLabel.setText(me.idLabel, me.currentServerID);
+
+ s = crypto_getkeyfp(me.currentServerCName);
+ if not(s)
+ s = "N/A";
+ me.currentServerKey = strzone(s);
+ me.keyLabel.setText(me.keyLabel, me.currentServerKey);
+
+ s = crypto_getencryptlevel(me.currentServerCName);
+ if(s == "")
+ {
+ if(cvar("crypto_aeslevel") >= 3)
+ me.currentServerEncrypt = "N/A (can't connect)";
+ else
+ me.currentServerEncrypt = "N/A";
+ }
+ else switch(stof(substring(s, 0, 1)))
+ {
+ case 0:
+ if(cvar("crypto_aeslevel") >= 3)
+ me.currentServerEncrypt = "not supported (can't connect)";
+ else
+ me.currentServerEncrypt = "not supported (won't encrypt)";
+ break;
+ case 1:
+ if(cvar("crypto_aeslevel") >= 2)
+ me.currentServerEncrypt = "supported (will encrypt)";
+ else
+ me.currentServerEncrypt = "supported (won't encrypt)";
+ break;
+ case 2:
+ if(cvar("crypto_aeslevel") >= 1)
+ me.currentServerEncrypt = "requested (will encrypt)";
+ else
+ me.currentServerEncrypt = "requested (won't encrypt)";
+ break;
+ case 3:
+ if(cvar("crypto_aeslevel") <= 0)
+ me.currentServerEncrypt = "required (can't connect)";
+ else
+ me.currentServerEncrypt = "required (will encrypt)";
+ break;
+ }
+ me.encryptLabel.setText(me.encryptLabel, me.currentServerEncrypt);
}
void XonoticServerInfoDialog_fill(entity me)
me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
e.allowCut = 1;
me.mapLabel = e;
+ me.TR(me);
+ me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Gameplay:"));
+ me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.pureLabel = e;
me.TR(me);
me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Players:"));
me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
e.allowCut = 1;
me.pingLabel = e;
+ me.TR(me);
+ me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "CA:"));
+ me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.keyLabel = e;
+
+ me.TR(me);
+ me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Key:"));
+ me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.idLabel = e;
+
+ me.TR(me);
+ me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Encryption:"));
+ me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.encryptLabel = e;
+
me.gotoRC(me, me.rows - 1, 0);
me.TD(me, 1, me.columns - 6, e = makeXonoticButton("Close", '0 0 0'));