2 CLASS(XonoticServerCreateTab) EXTENDS(XonoticTab)
3 METHOD(XonoticServerCreateTab, fill, void(entity))
4 METHOD(XonoticServerCreateTab, gameTypeChangeNotify, void(entity))
5 ATTRIB(XonoticServerCreateTab, title, string, _("Create"))
6 ATTRIB(XonoticServerCreateTab, intendedWidth, float, 0.9)
7 ATTRIB(XonoticServerCreateTab, rows, float, 23)
8 ATTRIB(XonoticServerCreateTab, columns, float, 6.2) // added extra .2 for center space
10 ATTRIB(XonoticServerCreateTab, mapListBox, entity, NULL)
11 ATTRIB(XonoticServerCreateTab, sliderFraglimit, entity, NULL)
12 ATTRIB(XonoticServerCreateTab, sliderTimelimit, entity, NULL)
13 ATTRIB(XonoticServerCreateTab, labelFraglimit, entity, NULL)
14 ENDCLASS(XonoticServerCreateTab)
15 entity makeXonoticServerCreateTab();
20 void GameType_ConfigureSliders(entity e, entity l, string pLabel, float pMin, float pMax, float pStep, string pCvar)
24 e.configureXonoticTextSlider(e, string_null);
26 e.disabled = l.disabled = TRUE;
30 e.configureXonoticTextSlider(e, pCvar);
34 for(i = 0; i <= e.nValues; ++i);
36 if(e.(valueStrings[i])) { strunzone(e.(valueStrings[i])); }
37 if(e.(valueIdentifiers[i])) { strunzone(e.(valueIdentifiers[i])); }
42 e.addValue(e, strzone(_("Default")), strzone("-1"));
43 for(i = pMin; i <= pMax; i += pStep) { e.addValue(e, strzone(ftos(i)), strzone(ftos(i))); }
44 e.addValue(e, strzone(_("Unlimited")), strzone("0"));
45 e.configureXonoticTextSliderValues(e);
49 e.disabled = l.disabled = FALSE;
53 entity makeXonoticServerCreateTab()
56 me = spawnXonoticServerCreateTab();
57 me.configureDialog(me);
61 void XonoticServerCreateTab_fill(entity me)
67 me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Game type:")));
69 me.TD(me, 8, 3, e = makeXonoticGametypeList());
78 //me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Match settings:"))); // pointless, overcrowds the dialog imo
80 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time limit:")));
81 me.TD(me, 1, 2, e = makeXonoticTextSlider("timelimit_override"));
82 e.addValue(e, _("Default"), "-1");
83 e.addValue(e, "1", "1");
84 e.addValue(e, "2", "2");
85 e.addValue(e, "3", "3");
86 e.addValue(e, "4", "4");
87 e.addValue(e, "5", "5");
88 e.addValue(e, "6", "6");
89 e.addValue(e, "7", "7");
90 e.addValue(e, "8", "8");
91 e.addValue(e, "9", "9");
92 e.addValue(e, "10", "10");
93 e.addValue(e, "15", "15");
94 e.addValue(e, "20", "20");
95 e.addValue(e, "25", "25");
96 e.addValue(e, "30", "30");
97 e.addValue(e, "40", "40");
98 e.addValue(e, "50", "50");
99 e.addValue(e, "60", "60");
100 e.addValue(e, _("Infinite"), "0");
101 e.configureXonoticTextSliderValues(e);
103 me.TD(me, 1, 1, me.labelFraglimit = makeXonoticTextLabel(0, _("Frag limit:")));
104 me.TD(me, 1, 2, me.sliderFraglimit = makeXonoticTextSlider("fraglimit_override"));
105 GameType_ConfigureSliders(me.sliderFraglimit, me.labelFraglimit, _("Frag limit:"), 5, 100, 5, "fraglimit_override");
108 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player slots:")));
109 me.TD(me, 1, 2, makeXonoticSlider(1, 32, 1, "menu_maxplayers"));
111 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Number of bots:")));
112 me.TD(me, 1, 2, makeXonoticSlider(0, 9, 1, "bot_number"));
114 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bot skill:")));
115 setDependent(e, "bot_number", 0, -1);
116 me.TD(me, 1, 2, e = makeXonoticTextSlider("skill"));
117 e.addValue(e, _("Botlike"), "0");
118 e.addValue(e, _("Beginner"), "1");
119 e.addValue(e, _("You will win"), "2");
120 e.addValue(e, _("You can win"), "3");
121 e.addValue(e, _("You might win"), "4");
122 e.addValue(e, _("Advanced"), "5");
123 e.addValue(e, _("Expert"), "6");
124 e.addValue(e, _("Pro"), "7");
125 e.addValue(e, _("Assassin"), "8");
126 e.addValue(e, _("Unhuman"), "9");
127 e.addValue(e, _("Godlike"), "10");
128 e.configureXonoticTextSliderValues(e);
129 setDependent(e, "bot_number", 0, -1);
132 me.TD(me, 1, 1, e = makeXonoticButton(_("Mutators..."), '0 0 0'));
133 e.onClick = DialogOpenButton_Click;
134 e.onClickEntity = main.mutatorsDialog;
135 main.mutatorsDialog.refilterEntity = me.mapListBox;
136 me.TD(me, 1, 2, e0 = makeXonoticTextLabel(0, string_null));
137 e0.textEntity = main.mutatorsDialog;
141 me.TD(me, 1, 2, e = makeXonoticButton(_("Advanced settings..."), '0 0 0'));
142 e.onClick = DialogOpenButton_Click;
143 e.onClickEntity = main.advancedDialog;
144 main.advancedDialog.refilterEntity = me.mapListBox;
146 me.gotoRC(me, 1, 3.2); me.setFirstColumn(me, me.currentColumn);
147 me.mapListBox = makeXonoticMapList();
148 me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Map list:")));
149 makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);
151 me.TD(me, me.rows - 5, 3, me.mapListBox);
152 me.gotoRC(me, me.rows - 3, 3.5);
153 me.TDempty(me, 0.25);
154 me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select all"), '0 0 0'));
155 e.onClick = MapList_All;
156 e.onClickEntity = me.mapListBox;
157 me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select none"), '0 0 0'));
158 e.onClick = MapList_None;
159 e.onClickEntity = me.mapListBox;
160 me.TDempty(me, 0.25);
162 me.gotoRC(me, me.rows - 1, 0);
163 me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Multiplayer!"), '0 0 0'));
164 e.onClick = MapList_LoadMap;
165 e.onClickEntity = me.mapListBox;
166 me.mapListBox.startButton = e;
168 me.gameTypeChangeNotify(me);
171 void XonoticServerCreateTab_gameTypeChangeNotify(entity me)
173 // tell the map list to update
176 gt = MapInfo_CurrentGametype();
177 e = me.sliderFraglimit;
178 l = me.labelFraglimit;
181 case MAPINFO_TYPE_CTF: GameType_ConfigureSliders(e, l, _("Capture limit:"), 1, 20, 1, "capturelimit_override"); break;
182 case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, "g_domination_point_limit"); break;
183 case MAPINFO_TYPE_KEYHUNT: GameType_ConfigureSliders(e, l, _("Point limit:"), 200, 1500, 50, "g_keyhunt_point_limit"); break;
184 case MAPINFO_TYPE_LMS: GameType_ConfigureSliders(e, l, _("Lives:"), 3, 50, 1, "g_lms_lives_override"); break;
185 case MAPINFO_TYPE_RACE: GameType_ConfigureSliders(e, l, _("Laps:"), 1, 25, 1, "g_race_laps_limit"); break;
186 case MAPINFO_TYPE_NEXBALL: GameType_ConfigureSliders(e, l, _("Goals:"), 1, 50, 1, "g_nexball_goallimit"); break;
187 case MAPINFO_TYPE_ASSAULT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
188 case MAPINFO_TYPE_ONSLAUGHT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
189 case MAPINFO_TYPE_CTS: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
190 default: GameType_ConfigureSliders(e, l, _("Frag limit:"), 5, 100, 5, "fraglimit_override"); break;
192 me.mapListBox.refilter(me.mapListBox);