]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c
Merge remote-tracking branch 'origin/divVerent/allow-override-item-model'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / dialog_multiplayer_join_serverinfo.c
index 4824331a0305dab6fe3a7d2a7a6c48cf36b917cb..8bf090fe4b7320062c97628fff5427d8651f6f62 100644 (file)
@@ -2,9 +2,9 @@
 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, intendedWidth, float, 0.8)
        ATTRIB(XonoticServerInfoDialog, rows, float, 15)
        ATTRIB(XonoticServerInfoDialog, columns, float, 12)
 
@@ -21,7 +21,6 @@ CLASS(XonoticServerInfoDialog) EXTENDS(XonoticDialog)
        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)
@@ -57,8 +56,52 @@ void Join_Click(entity btn, entity me);
 #ifdef IMPLEMENTATION
 void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
 {
-       float m, pure, j;
-       string s, typestr, versionstr, numh, maxp, k, v;
+       float m, pure, freeslots, j, numh, maxp, numb, sflags;
+       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));
@@ -69,8 +112,8 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
        me.cnameLabel.setText(me.cnameLabel, me.currentServerCName);
 
        pure = -1;
-       typestr = "N/A";
-       versionstr = "N/A";
+       typestr = _("N/A");
+       versionstr = _("N/A");
 
        SLIST_FIELD_QCSTATUS = gethostcacheindexforkey("qcstatus");
        s = gethostcachestring(SLIST_FIELD_QCSTATUS, i);
@@ -80,6 +123,8 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
                typestr = argv(0);
                versionstr = argv(1);
        }
+       freeslots = -1;
+       sflags = -1;
        for(j = 2; j < m; ++j)
        {
                if(argv(j) == "")
@@ -88,6 +133,10 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
                v = substring(argv(j), 1, -1);
                if(k == "P")
                        pure = stof(v);
+               else if(k == "S")
+                       freeslots = stof(v);
+               else if(k == "F")
+                       sflags = stof(v);
        }
 
        me.currentServerType = strzone(typestr);
@@ -102,14 +151,17 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
        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);
 
@@ -120,7 +172,8 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
        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 = ((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");
@@ -128,17 +181,15 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float 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);
 
@@ -146,29 +197,35 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
        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);
@@ -189,7 +246,7 @@ void XonoticServerInfoDialog_fill(entity me)
                        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;
@@ -197,70 +254,70 @@ void XonoticServerInfoDialog_fill(entity me)
        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, "Gameplay:"));
+               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, 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;
 }