2 CLASS(XonoticServerCreateTab) EXTENDS(XonoticTab)
3 METHOD(XonoticServerCreateTab, fill, void(entity))
4 METHOD(XonoticServerCreateTab, gameTypeChangeNotify, void(entity))
5 METHOD(XonoticServerCreateTab, gameTypeSelectNotify, void(entity))
6 ATTRIB(XonoticServerCreateTab, title, string, _("Create"))
7 ATTRIB(XonoticServerCreateTab, intendedWidth, float, 0.9)
8 ATTRIB(XonoticServerCreateTab, rows, float, 23)
9 ATTRIB(XonoticServerCreateTab, columns, float, 6.2) // added extra .2 for center space
11 ATTRIB(XonoticServerCreateTab, mapListBox, entity, NULL)
12 ATTRIB(XonoticServerCreateTab, sliderFraglimit, entity, NULL)
13 ATTRIB(XonoticServerCreateTab, sliderTeams, entity, NULL)
14 ATTRIB(XonoticServerCreateTab, sliderTimelimit, entity, NULL)
15 ATTRIB(XonoticServerCreateTab, labelFraglimit, entity, NULL)
16 ATTRIB(XonoticServerCreateTab, labelTeams, entity, NULL)
17 ENDCLASS(XonoticServerCreateTab)
18 entity makeXonoticServerCreateTab();
23 void GameType_ConfigureSliders(entity e, entity l, string pLabel, float pMin, float pMax, float pStep, string pCvar)
27 e.configureXonoticTextSlider(e, string_null);
29 e.disabled = l.disabled = true;
33 e.configureXonoticTextSlider(e, pCvar);
37 for(i = 0; i <= e.nValues; ++i);
39 if(e.(valueStrings[i])) { strunzone(e.(valueStrings[i])); }
40 if(e.(valueIdentifiers[i])) { strunzone(e.(valueIdentifiers[i])); }
45 e.addValue(e, strzone(_("Default")), strzone("-1"));
46 for(i = pMin; i <= pMax; i += pStep) { e.addValue(e, strzone(ftos(i)), strzone(ftos(i))); }
47 e.addValue(e, strzone(_("Unlimited")), strzone("0"));
48 e.configureXonoticTextSliderValues(e);
52 e.disabled = l.disabled = false;
56 entity makeXonoticServerCreateTab()
59 me = spawnXonoticServerCreateTab();
60 me.configureDialog(me);
64 void XonoticServerCreateTab_fill(entity me)
68 // the left half begins here
70 me.gotoRC(me, 0.5, 0);
71 me.TD(me, 1, 3, makeXonoticHeaderLabel(_("Gametype")));
73 me.TD(me, 10.5, 3, e = makeXonoticGametypeList());
75 me.gotoRC(me, 12.5, 0);
76 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time limit:")));
77 me.TD(me, 1, 2, e = makeXonoticTextSlider("timelimit_override"));
78 e.addValue(e, ZCTX(_("TIMLIM^Default")), "-1");
79 e.addValue(e, ZCTX(_("TIMLIM^1 minute")), "1");
80 e.addValue(e, ZCTX(_("TIMLIM^2 minutes")), "2");
81 e.addValue(e, ZCTX(_("TIMLIM^3 minutes")), "3");
82 e.addValue(e, ZCTX(_("TIMLIM^4 minutes")), "4");
83 e.addValue(e, ZCTX(_("TIMLIM^5 minutes")), "5");
84 e.addValue(e, ZCTX(_("TIMLIM^6 minutes")), "6");
85 e.addValue(e, ZCTX(_("TIMLIM^7 minutes")), "7");
86 e.addValue(e, ZCTX(_("TIMLIM^8 minutes")), "8");
87 e.addValue(e, ZCTX(_("TIMLIM^9 minutes")), "9");
88 e.addValue(e, ZCTX(_("TIMLIM^10 minutes")), "10");
89 e.addValue(e, ZCTX(_("TIMLIM^15 minutes")), "15");
90 e.addValue(e, ZCTX(_("TIMLIM^20 minutes")), "20");
91 e.addValue(e, ZCTX(_("TIMLIM^25 minutes")), "25");
92 e.addValue(e, ZCTX(_("TIMLIM^30 minutes")), "30");
93 e.addValue(e, ZCTX(_("TIMLIM^40 minutes")), "40");
94 e.addValue(e, ZCTX(_("TIMLIM^50 minutes")), "50");
95 e.addValue(e, ZCTX(_("TIMLIM^60 minutes")), "60");
96 e.addValue(e, ZCTX(_("TIMLIM^Infinite")), "0");
97 e.configureXonoticTextSliderValues(e);
99 me.TD(me, 1, 1, me.labelFraglimit = makeXonoticTextLabel(0, _("Frag limit:")));
100 me.TD(me, 1, 2, me.sliderFraglimit = makeXonoticTextSlider("fraglimit_override"));
101 GameType_ConfigureSliders(me.sliderFraglimit, me.labelFraglimit, _("Frag limit:"), 5, 100, 5, "fraglimit_override");
103 me.gotoRC(me, 15, 0);
104 me.TD(me, 1, 1, me.labelTeams = makeXonoticTextLabel(0, _("Teams:")));
105 me.TD(me, 1, 2, e = me.sliderTeams = makeXonoticTextSlider(string_null));
106 e.addValue(e, _("Default"), "0");
107 e.addValue(e, _("2 teams"), "2");
108 e.addValue(e, _("3 teams"), "3");
109 e.addValue(e, _("4 teams"), "4");
110 e.configureXonoticTextSliderValues(e);
112 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player slots:")));
113 me.TD(me, 1, 2, makeXonoticSlider(1, 32, 1, "menu_maxplayers"));
115 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Number of bots:")));
116 me.TD(me, 1, 2, makeXonoticSlider(0, 9, 1, "bot_number"));
118 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bot skill:")));
119 setDependent(e, "bot_number", 0, -1);
120 me.TD(me, 1, 2, e = makeXonoticTextSlider("skill"));
121 e.addValue(e, _("Botlike"), "0");
122 e.addValue(e, _("Beginner"), "1");
123 e.addValue(e, _("You will win"), "2");
124 e.addValue(e, _("You can win"), "3");
125 e.addValue(e, _("You might win"), "4");
126 e.addValue(e, _("Advanced"), "5");
127 e.addValue(e, _("Expert"), "6");
128 e.addValue(e, _("Pro"), "7");
129 e.addValue(e, _("Assassin"), "8");
130 e.addValue(e, _("Unhuman"), "9");
131 e.addValue(e, _("Godlike"), "10");
132 e.configureXonoticTextSliderValues(e);
133 setDependent(e, "bot_number", 0, -1);
135 me.gotoRC(me, me.rows - 3.5, 0);
136 me.TD(me, 1, 3, e0 = makeXonoticTextLabel(0.5, string_null));
137 e0.textEntity = main.mutatorsDialog;
141 me.mapListBox = makeXonoticMapList();
144 me.TD(me, 1, 2, e = makeXonoticButton(_("Mutators"), '0 0 0'));
145 e.onClick = DialogOpenButton_Click;
146 e.onClickEntity = main.mutatorsDialog;
147 main.mutatorsDialog.refilterEntity = me.mapListBox;
149 // The right half begins here
151 me.gotoRC(me, 0.5, 3.2); me.setFirstColumn(me, me.currentColumn);
153 me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Maplist")));
154 makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);
156 me.TD(me, me.rows - 6, 3, me.mapListBox);
158 me.gotoRC(me, me.rows - 3.5, me.firstColumn);
159 // string filter label and box
160 me.TD(me, 1, 0.35, e = makeXonoticTextLabel(1, _("Filter:")));
161 me.mapListBox.stringFilterBox = makeXonoticMapListStringFilterBox(me, 0, string_null);
162 me.mapListBox.stringFilterBox.tooltip = getZonedTooltipForIdentifier("XonoticMultiplayerDialog_StringFilterBox");
163 me.TD(me, 1, me.columns - me.firstColumn - 0.35, e = me.mapListBox.stringFilterBox);
164 e.onChange = MapList_StringFilterBox_Change;
165 e.keyDown = MapList_StringFilterBox_keyDown;
166 e.onChangeEntity = me.mapListBox;
167 me.mapListBox.controlledTextbox = e;
170 // the selection buttons
171 me.TD(me, 1, 1, e = makeXonoticButton(_("Add shown"), '0 0 0'));
172 e.onClick = MapList_Add_Shown;
173 e.onClickEntity = me.mapListBox;
174 me.TD(me, 1, 1, e = makeXonoticButton(_("Remove shown"), '0 0 0'));
175 e.onClick = MapList_Remove_Shown;
176 e.onClickEntity = me.mapListBox;
177 me.TD(me, 1, 1, e = makeXonoticButton(_("Remove all"), '0 0 0'));
178 e.onClick = MapList_Remove_All;
179 e.onClickEntity = me.mapListBox;
181 // The big button at the bottom
183 me.gotoRC(me, me.rows - 1, 0);
184 me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Multiplayer!"), '0 0 0'));
185 e.onClick = MapList_LoadMap;
186 e.onClickEntity = me.mapListBox;
187 me.mapListBox.startButton = e;
189 me.gameTypeChangeNotify(me);
192 void XonoticServerCreateTab_gameTypeChangeNotify(entity me)
194 // tell the map list to update
197 gt = MapInfo_CurrentGametype();
198 e = me.sliderFraglimit;
199 l = me.labelFraglimit;
203 case MAPINFO_TYPE_CTF: GameType_ConfigureSliders(e, l, _("Capture limit:"), 1, 20, 1, "capturelimit_override"); break;
204 case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, "g_domination_point_limit"); break;
205 case MAPINFO_TYPE_KEYHUNT: GameType_ConfigureSliders(e, l, _("Point limit:"), 200, 1500, 50, "g_keyhunt_point_limit"); break;
206 case MAPINFO_TYPE_LMS: GameType_ConfigureSliders(e, l, _("Lives:"), 3, 50, 1, "g_lms_lives_override"); break;
207 case MAPINFO_TYPE_RACE: GameType_ConfigureSliders(e, l, _("Laps:"), 1, 25, 1, "g_race_laps_limit"); break;
208 case MAPINFO_TYPE_NEXBALL: GameType_ConfigureSliders(e, l, _("Goals:"), 1, 50, 1, "g_nexball_goallimit"); break;
209 case MAPINFO_TYPE_ASSAULT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
210 case MAPINFO_TYPE_ONSLAUGHT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
211 case MAPINFO_TYPE_CTS: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
212 case MAPINFO_TYPE_INVASION: GameType_ConfigureSliders(e, l, _("Point limit:"), 5, 0, 5, ""); break;
213 case MAPINFO_TYPE_TEAM_DEATHMATCH:GameType_ConfigureSliders(e, l, _("Point limit:"), 5, 100, 5, "g_tdm_point_limit"); break;
214 default: GameType_ConfigureSliders(e, l, _("Frag limit:"), 5, 100, 5, "fraglimit_override"); break;
217 string x = string_null;
221 case MAPINFO_TYPE_CA: x = "g_ca_teams_override"; break;
222 case MAPINFO_TYPE_DOMINATION: x = "g_domination_teams_override"; break;
223 case MAPINFO_TYPE_FREEZETAG: x = "g_freezetag_teams_override"; break;
224 case MAPINFO_TYPE_KEYHUNT: x = "g_keyhunt_teams_override"; break;
225 case MAPINFO_TYPE_TEAM_DEATHMATCH: x = "g_tdm_teams_override"; break;
227 e.configureXonoticTextSlider(e, x);
228 e.configureXonoticTextSliderValues(e);
231 me.sliderTeams.disabled = me.labelTeams.disabled = !x;
233 me.mapListBox.refilter(me.mapListBox);
236 void XonoticServerCreateTab_gameTypeSelectNotify(entity me)
238 me.setFocus(me, me.mapListBox);