CLASS(XonoticServerInfoDialog) EXTENDS(XonoticDialog)
METHOD(XonoticServerInfoDialog, fill, void(entity))
METHOD(XonoticServerInfoDialog, loadServerInfo, void(entity, float))
- ATTRIB(XonoticServerInfoDialog, title, string, "Server Information")
+ ATTRIB(XonoticServerInfoDialog, title, string, _("Server Information"))
ATTRIB(XonoticServerInfoDialog, color, vector, SKINCOLOR_DIALOG_SERVERINFO)
- ATTRIB(XonoticServerInfoDialog, intendedWidth, float, 0.68)
- ATTRIB(XonoticServerInfoDialog, rows, float, 14)
+ ATTRIB(XonoticServerInfoDialog, intendedWidth, float, 0.8)
+ ATTRIB(XonoticServerInfoDialog, rows, float, 15)
ATTRIB(XonoticServerInfoDialog, columns, float, 12)
ATTRIB(XonoticServerInfoDialog, currentServerName, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerKey, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerID, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerEncrypt, string, string_null)
- ATTRIB(XonoticServerInfoDialog, currentServerCanConnect, string, string_null)
+ ATTRIB(XonoticServerInfoDialog, currentServerPure, string, string_null)
ATTRIB(XonoticServerInfoDialog, nameLabel, entity, NULL)
ATTRIB(XonoticServerInfoDialog, cnameLabel, 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, freeslots, j, numh, maxp, numb;
+ string s, typestr, versionstr, 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
+ freeslots = -1;
+ 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);
+ else if(k == "S")
+ freeslots = stof(v);
}
+
me.currentServerType = strzone(typestr);
me.typeLabel.setText(me.typeLabel, me.currentServerType);
me.rawPlayerList.setPlayerList(me.rawPlayerList, me.currentServerPlayers);
SLIST_FIELD_NUMHUMANS = gethostcacheindexforkey("numhumans");
- numh = ftos(gethostcachenumber(SLIST_FIELD_NUMHUMANS, i));
+ numh = gethostcachenumber(SLIST_FIELD_NUMHUMANS, i);
SLIST_FIELD_MAXPLAYERS = gethostcacheindexforkey("maxplayers");
- maxp = ftos(gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i));
- me.currentServerNumPlayers = strzone(strcat(numh,"/",maxp));
+ maxp = gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i);
+ SLIST_FIELD_NUMBOTS = gethostcacheindexforkey("numbots");
+ numb = gethostcachenumber(SLIST_FIELD_NUMBOTS, i);
+ if(freeslots < 0)
+ freeslots = maxp - numh - numb;
+ me.currentServerNumPlayers = strzone(sprintf(_("%d/%d, %d free player slots"), numh, maxp, freeslots));
me.numPlayersLabel.setText(me.numPlayersLabel, me.currentServerNumPlayers);
- SLIST_FIELD_NUMBOTS = gethostcacheindexforkey("numbots");
- s = ftos(gethostcachenumber(SLIST_FIELD_NUMBOTS, i));
+ s = ftos(numb);
me.currentServerNumBots = strzone(s);
me.numBotsLabel.setText(me.numBotsLabel, me.currentServerNumBots);
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);
- print(me.currentServerCName, "\n");
-
s = crypto_getidfp(me.currentServerCName);
if not(s)
- s = "N/A";
+ 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";
+ s = _("N/A");
me.currentServerKey = strzone(s);
me.keyLabel.setText(me.keyLabel, me.currentServerKey);
if(s == "")
{
if(cvar("crypto_aeslevel") >= 3)
- me.currentServerEncrypt = "N/A (can't connect)";
+ me.currentServerEncrypt = _("N/A (can't connect)");
else
- me.currentServerEncrypt = "N/A";
+ 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)";
+ me.currentServerEncrypt = _("not supported (can't connect)");
else
- me.currentServerEncrypt = "not supported";
+ me.currentServerEncrypt = _("not supported (won't encrypt)");
break;
case 1:
- me.currentServerEncrypt = "supported";
+ if(cvar("crypto_aeslevel") >= 2)
+ me.currentServerEncrypt = _("supported (will encrypt)");
+ else
+ me.currentServerEncrypt = _("supported (won't encrypt)");
break;
case 2:
- me.currentServerEncrypt = "requested";
+ 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)";
+ me.currentServerEncrypt = _("required (can't connect)");
else
- me.currentServerEncrypt = "required";
+ me.currentServerEncrypt = _("required (will encrypt)");
break;
}
me.encryptLabel.setText(me.encryptLabel, me.currentServerEncrypt);
me.cnameLabel = e;
me.TR(me);
- me.TD(me, 1, 5.5, e = makeXonoticTextLabel(0, "Players:"));
+ me.TD(me, 1, 5.5, e = makeXonoticTextLabel(0, _("Players:")));
me.TR(me);
me.TD(me, me.rows - 4, 6, e = makeXonoticPlayerList());
me.rawPlayerList = e;
me.gotoRC(me, 1, 6.25); me.setFirstColumn(me, me.currentColumn);
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Type:"));
+ me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Type:")));
me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
e.allowCut = 1;
me.typeLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Map:"));
+ me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Map:")));
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, "Players:"));
+ 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.numPlayersLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Bots:"));
+ me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Bots:")));
me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
e.allowCut = 1;
me.numBotsLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Mod:"));
+ me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Mod:")));
me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
e.allowCut = 1;
me.modLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Version:"));
+ me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Version:")));
me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
e.allowCut = 1;
me.versionLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Ping:"));
+ me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Ping:")));
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, 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, 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, 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'));
+ me.TD(me, 1, me.columns - 6, e = makeXonoticButton(_("Close"), '0 0 0'));
e.onClick = Dialog_Close;
e.onClickEntity = me;
- me.TD(me, 1, me.columns - 6, e = makeXonoticButton("Join!", '0 0 0'));
+ me.TD(me, 1, me.columns - 6, e = makeXonoticButton(_("Join!"), '0 0 0'));
e.onClick = Join_Click;
e.onClickEntity = me;
}