]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/xonotic/dialog_multiplayer_create.qc
Transifex autosync
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / dialog_multiplayer_create.qc
index f165d992381c1df1b52767a132e5de513fed9925..a343c546c28827ded6d7f5888db2e2d535f3a6eb 100644 (file)
@@ -1,25 +1,21 @@
-#ifndef DIALOG_MULTIPLAYER_CREATE_H
-#define DIALOG_MULTIPLAYER_CREATE_H
-#include "tab.qc"
-CLASS(XonoticServerCreateTab, XonoticTab)
-       METHOD(XonoticServerCreateTab, fill, void(entity));
-       METHOD(XonoticServerCreateTab, gameTypeChangeNotify, void(entity));
-       METHOD(XonoticServerCreateTab, gameTypeSelectNotify, void(entity));
-       ATTRIB(XonoticServerCreateTab, intendedWidth, float, 0.9)
-       ATTRIB(XonoticServerCreateTab, rows, float, 23)
-       ATTRIB(XonoticServerCreateTab, columns, float, 6.2) // added extra .2 for center space
-
-       ATTRIB(XonoticServerCreateTab, mapListBox, entity, NULL)
-       ATTRIB(XonoticServerCreateTab, sliderFraglimit, entity, NULL)
-       ATTRIB(XonoticServerCreateTab, sliderTeams, entity, NULL)
-       ATTRIB(XonoticServerCreateTab, sliderTimelimit, entity, NULL)
-       ATTRIB(XonoticServerCreateTab, labelFraglimit, entity, NULL)
-       ATTRIB(XonoticServerCreateTab, labelTeams, entity, NULL)
-ENDCLASS(XonoticServerCreateTab)
-entity makeXonoticServerCreateTab();
-#endif
-
-#ifdef IMPLEMENTATION
+#include "dialog_multiplayer_create.qh"
+
+#include "dialog_multiplayer_create_mapinfo.qh"
+#include "dialog_multiplayer_create_mutators.qh"
+
+#include "gametypelist.qh"
+#include "maplist.qh"
+#include <common/mapinfo.qh>
+
+#include "image.qh"
+#include "textslider.qh"
+#include "textlabel.qh"
+#include "slider.qh"
+#include "mainwindow.qh"
+#include "button.qh"
+#include "commandbutton.qh"
+#include "leavematchbutton.qh"
+#include "inputbox.qh"
 
 void GameType_ConfigureSliders(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip)
 {
@@ -33,16 +29,8 @@ void GameType_ConfigureSliders(entity me, string pLabel, float pMin, float pMax,
        // clear old values
        for(i = 0; i < e.nValues; ++i);
        {
-               if(e.(valueStrings[i]))
-               {
-                       strunzone(e.(valueStrings[i]));
-                       e.(valueStrings[i]) = string_null;
-               }
-               if(e.(valueIdentifiers[i]))
-               {
-                       strunzone(e.(valueIdentifiers[i]));
-                       e.(valueIdentifiers[i]) = string_null;
-               }
+               strfree(e.(valueStrings[i]));
+               strfree(e.(valueIdentifiers[i]));
        }
        e.clearValues(e);
 
@@ -64,6 +52,12 @@ void GameType_ConfigureSliders(entity me, string pLabel, float pMin, float pMax,
        t.configureXonoticTextSliderValues(t);
 }
 
+void GameType_ConfigureSliders_for_CurrentGametype(entity me)
+{
+       Gametype gt = MapInfo_CurrentGametype();
+       gt.m_configuremenu(gt, me, GameType_ConfigureSliders);
+}
+
 entity makeXonoticServerCreateTab()
 {
        entity me;
@@ -127,11 +121,13 @@ void XonoticServerCreateTab_fill(entity me)
                        _("The maximum amount of players or bots that can be connected to your server at once")));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Number of bots:")));
+                       setDependent(e, "g_campaign", 0, 0);
                me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 9, 1, "bot_number",
                        _("Amount of bots on your server")));
+                       setDependent(e, "g_campaign", 0, 0);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bot skill:")));
-                       setDependent(e, "bot_number", 0, -1);
+                       setDependentAND(e, "bot_number", 0, -1, "g_campaign", 0, 0);
                me.TD(me, 1, 2, e = makeXonoticTextSlider_T("skill",
                        _("Specify how experienced the bots will be")));
                        e.addValue(e, _("Botlike"), "0");
@@ -146,13 +142,14 @@ void XonoticServerCreateTab_fill(entity me)
                        e.addValue(e, _("Unhuman"), "9");
                        e.addValue(e, _("Godlike"), "10");
                        e.configureXonoticTextSliderValues(e);
-                       setDependent(e, "bot_number", 0, -1);
+                       setDependentAND(e, "bot_number", 0, -1, "g_campaign", 0, 0);
 
        me.gotoRC(me, me.rows - 3.8, 0);
                me.TD(me, 1, 3, e0 = makeXonoticTextLabel(0.5, string_null));
                        e0.textEntity = main.mutatorsDialog;
                        e0.allowCut = 1;
                        //e0.allowWrap = 1;
+                       setDependent(e0, "g_campaign", 0, 0);
 
        // mapListBox is in the right column but the ref is needed for mutators dialog here
        me.mapListBox = makeXonoticMapList();
@@ -165,6 +162,7 @@ void XonoticServerCreateTab_fill(entity me)
                        e.onClick = DialogOpenButton_Click;
                        e.onClickEntity = main.mutatorsDialog;
                        main.mutatorsDialog.refilterEntity = me.mapListBox;
+                       setDependent(e, "g_campaign", 0, 0);
 
        // The right half begins here
 
@@ -185,7 +183,6 @@ void XonoticServerCreateTab_fill(entity me)
                        e.onChange = MapList_StringFilterBox_Change;
                        e.keyDown = MapList_StringFilterBox_keyDown;
                        e.onChangeEntity = me.mapListBox;
-                       me.mapListBox.controlledTextbox = e;
 
        me.gotoRC(me, me.rows - 3.5, me.firstColumn);
                // the selection buttons
@@ -209,36 +206,21 @@ void XonoticServerCreateTab_fill(entity me)
                        e.onClick = MapList_Remove_All;
                        e.onClickEntity = me.mapListBox;
 
-       // The big button at the bottom
-
+       // bottom row
        me.gotoRC(me, me.rows - 1, 0);
-               me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Multiplayer!"), '0 0 0'));
+               me.TDempty(me, me.columns * 1/12);
+               me.TD(me, 1, me.columns * 5/12, e = makeXonoticLeaveMatchButton('0 0 0', 0));
+               me.TD(me, 1, me.columns * 5/12, e = makeXonoticButton(_("Start multiplayer!"), '0 0 0'));
                        e.onClick = MapList_LoadMap;
                        e.onClickEntity = me.mapListBox;
                        me.mapListBox.startButton = e;
 
-       me.gameTypeChangeNotify(me);
+       GameType_ConfigureSliders_for_CurrentGametype(me);
 }
 
 void XonoticServerCreateTab_gameTypeChangeNotify(entity me)
 {
-       switch(MapInfo_CurrentGametype())
-       {
-               case MAPINFO_TYPE_CA:              GameType_ConfigureSliders(me, _("Frag limit:"),      5,  100,  5, "fraglimit_override",        "g_ca_teams_override",          _("The amount of frags needed before the match will end")); break;
-               case MAPINFO_TYPE_FREEZETAG:       GameType_ConfigureSliders(me, _("Frag limit:"),      5,  100,  5, "fraglimit_override",        "g_freezetag_teams_override",   _("The amount of frags needed before the match will end")); break;
-               case MAPINFO_TYPE_CTF:             GameType_ConfigureSliders(me, _("Capture limit:"),   1,   20,  1, "capturelimit_override",     string_null,                    _("The amount of captures needed before the match will end")); break;
-               case MAPINFO_TYPE_DOMINATION:      GameType_ConfigureSliders(me, _("Point limit:"),    50,  500, 10, "g_domination_point_limit",  "g_domination_teams_override",  _("The amount of points needed before the match will end")); break;
-               case MAPINFO_TYPE_KEYHUNT:         GameType_ConfigureSliders(me, _("Point limit:"),   200, 1500, 50, "g_keyhunt_point_limit",     "g_keyhunt_teams_override",     _("The amount of points needed before the match will end")); break;
-               case MAPINFO_TYPE_LMS:             GameType_ConfigureSliders(me, _("Lives:"),           3,   50,  1, "g_lms_lives_override",      string_null,                    string_null); break;
-               case MAPINFO_TYPE_RACE:            GameType_ConfigureSliders(me, _("Laps:"),            1,   25,  1, "g_race_laps_limit",         string_null,                    string_null); break;
-               case MAPINFO_TYPE_NEXBALL:         GameType_ConfigureSliders(me, _("Goals:"),           1,   50,  1, "g_nexball_goallimit",       string_null,                    _("The amount of goals needed before the match will end")); break;
-               case MAPINFO_TYPE_ASSAULT:         GameType_ConfigureSliders(me, _("Point limit:"),    50,  500, 10, string_null,                 string_null,                    string_null); break;
-               case MAPINFO_TYPE_ONSLAUGHT:       GameType_ConfigureSliders(me, _("Point limit:"),    50,  500, 10, string_null,                 string_null,                    string_null); break;
-               case MAPINFO_TYPE_CTS:             GameType_ConfigureSliders(me, _("Point limit:"),    50,  500, 10, string_null,                 string_null,                    string_null); break;
-               case MAPINFO_TYPE_INVASION:        GameType_ConfigureSliders(me, _("Point limit:"),    50,  500, 10, string_null,                 string_null,                    string_null); break;
-               case MAPINFO_TYPE_TEAM_DEATHMATCH: GameType_ConfigureSliders(me, _("Point limit:"),     5,  100,  5, "g_tdm_point_limit",         "g_tdm_teams_override",         _("The amount of points needed before the match will end")); break;
-               default:                           GameType_ConfigureSliders(me, _("Frag limit:"),      5,  100,  5, "fraglimit_override",        string_null,                    _("The amount of frags needed before the match will end")); break;
-       }
+       GameType_ConfigureSliders_for_CurrentGametype(me);
 
        me.mapListBox.refilter(me.mapListBox);
 }
@@ -247,5 +229,3 @@ void XonoticServerCreateTab_gameTypeSelectNotify(entity me)
 {
        me.setFocus(me, me.mapListBox);
 }
-
-#endif