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 me.gotoRC(me, 0.5, 0);
69 me.TD(me, 1, 3, makeXonoticHeaderLabel(_("Gametype")));
71 me.TD(me, 10.5, 3, e = makeXonoticGametypeList());
73 me.gotoRC(me, 12.5, 0);
74 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time limit:")));
75 me.TD(me, 1, 2, e = makeXonoticTextSlider("timelimit_override"));
76 e.addValue(e, ZCTX(_("TIMLIM^Default")), "-1");
77 e.addValue(e, ZCTX(_("TIMLIM^1 minute")), "1");
78 e.addValue(e, ZCTX(_("TIMLIM^2 minutes")), "2");
79 e.addValue(e, ZCTX(_("TIMLIM^3 minutes")), "3");
80 e.addValue(e, ZCTX(_("TIMLIM^4 minutes")), "4");
81 e.addValue(e, ZCTX(_("TIMLIM^5 minutes")), "5");
82 e.addValue(e, ZCTX(_("TIMLIM^6 minutes")), "6");
83 e.addValue(e, ZCTX(_("TIMLIM^7 minutes")), "7");
84 e.addValue(e, ZCTX(_("TIMLIM^8 minutes")), "8");
85 e.addValue(e, ZCTX(_("TIMLIM^9 minutes")), "9");
86 e.addValue(e, ZCTX(_("TIMLIM^10 minutes")), "10");
87 e.addValue(e, ZCTX(_("TIMLIM^15 minutes")), "15");
88 e.addValue(e, ZCTX(_("TIMLIM^20 minutes")), "20");
89 e.addValue(e, ZCTX(_("TIMLIM^25 minutes")), "25");
90 e.addValue(e, ZCTX(_("TIMLIM^30 minutes")), "30");
91 e.addValue(e, ZCTX(_("TIMLIM^40 minutes")), "40");
92 e.addValue(e, ZCTX(_("TIMLIM^50 minutes")), "50");
93 e.addValue(e, ZCTX(_("TIMLIM^60 minutes")), "60");
94 e.addValue(e, ZCTX(_("TIMLIM^Infinite")), "0");
95 e.configureXonoticTextSliderValues(e);
97 me.TD(me, 1, 1, me.labelFraglimit = makeXonoticTextLabel(0, _("Frag limit:")));
98 me.TD(me, 1, 2, me.sliderFraglimit = makeXonoticTextSlider("fraglimit_override"));
99 GameType_ConfigureSliders(me.sliderFraglimit, me.labelFraglimit, _("Frag limit:"), 5, 100, 5, "fraglimit_override");
101 me.gotoRC(me, 15, 0);
102 me.TD(me, 1, 1, me.labelTeams = makeXonoticTextLabel(0, _("Teams:")));
103 me.TD(me, 1, 2, e = me.sliderTeams = makeXonoticTextSlider(string_null));
104 e.addValue(e, _("Default"), "0");
105 e.addValue(e, _("2 teams"), "2");
106 e.addValue(e, _("3 teams"), "3");
107 e.addValue(e, _("4 teams"), "4");
108 e.configureXonoticTextSliderValues(e);
110 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player slots:")));
111 me.TD(me, 1, 2, makeXonoticSlider(1, 32, 1, "menu_maxplayers"));
113 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Number of bots:")));
114 me.TD(me, 1, 2, makeXonoticSlider(0, 9, 1, "bot_number"));
116 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bot skill:")));
117 setDependent(e, "bot_number", 0, -1);
118 me.TD(me, 1, 2, e = makeXonoticTextSlider("skill"));
119 e.addValue(e, _("Botlike"), "0");
120 e.addValue(e, _("Beginner"), "1");
121 e.addValue(e, _("You will win"), "2");
122 e.addValue(e, _("You can win"), "3");
123 e.addValue(e, _("You might win"), "4");
124 e.addValue(e, _("Advanced"), "5");
125 e.addValue(e, _("Expert"), "6");
126 e.addValue(e, _("Pro"), "7");
127 e.addValue(e, _("Assassin"), "8");
128 e.addValue(e, _("Unhuman"), "9");
129 e.addValue(e, _("Godlike"), "10");
130 e.configureXonoticTextSliderValues(e);
131 setDependent(e, "bot_number", 0, -1);
133 me.gotoRC(me, me.rows - 3.5, 0);
134 me.TD(me, 1, 3, e0 = makeXonoticTextLabel(0.5, string_null));
135 e0.textEntity = main.mutatorsDialog;
140 me.TD(me, 1, 2, e = makeXonoticButton(_("Mutators"), '0 0 0'));
141 e.onClick = DialogOpenButton_Click;
142 e.onClickEntity = main.mutatorsDialog;
143 main.mutatorsDialog.refilterEntity = me.mapListBox;
145 me.gotoRC(me, 0.5, 3.2); me.setFirstColumn(me, me.currentColumn);
146 me.mapListBox = makeXonoticMapList();
147 me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Maplist")));
148 makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);
150 // TODO can somebody help check TD and gotoRC size/position parameters (till the end of this function)?
152 me.TD(me, me.rows - 6, 3, me.mapListBox);
153 me.gotoRC(me, me.rows - 3.7, 3.2);
154 /* map string filter */
155 me.TD(me, 1, 0.6, e = makeXonoticTextLabel(1, _("Filter:")));
156 me.mapListBox.stringFilterBox = makeXonoticMapListStringFilterBox(me, 0, string_null);
157 me.TD(me, 1, 2.2, e = me.mapListBox.stringFilterBox);
158 e.onChange = MapList_StringFilter_Change;
159 e.onChangeEntity = me.mapListBox;
160 me.mapListBox.controlledTextbox = e;
162 me.gotoRC(me, me.rows - 2.5, 3.2);
163 me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select all"), '0 0 0'));
164 e.onClick = MapList_All;
165 e.onClickEntity = me.mapListBox;
166 me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select none"), '0 0 0'));
167 e.onClick = MapList_None;
168 e.onClickEntity = me.mapListBox;
170 me.gotoRC(me, me.rows - 1, 0);
171 me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Multiplayer!"), '0 0 0'));
172 e.onClick = MapList_LoadMap;
173 e.onClickEntity = me.mapListBox;
174 me.mapListBox.startButton = e;
176 me.gameTypeChangeNotify(me);
179 void XonoticServerCreateTab_gameTypeChangeNotify(entity me)
181 // tell the map list to update
184 gt = MapInfo_CurrentGametype();
185 e = me.sliderFraglimit;
186 l = me.labelFraglimit;
190 case MAPINFO_TYPE_CTF: GameType_ConfigureSliders(e, l, _("Capture limit:"), 1, 20, 1, "capturelimit_override"); break;
191 case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, "g_domination_point_limit"); break;
192 case MAPINFO_TYPE_KEYHUNT: GameType_ConfigureSliders(e, l, _("Point limit:"), 200, 1500, 50, "g_keyhunt_point_limit"); break;
193 case MAPINFO_TYPE_LMS: GameType_ConfigureSliders(e, l, _("Lives:"), 3, 50, 1, "g_lms_lives_override"); break;
194 case MAPINFO_TYPE_RACE: GameType_ConfigureSliders(e, l, _("Laps:"), 1, 25, 1, "g_race_laps_limit"); break;
195 case MAPINFO_TYPE_NEXBALL: GameType_ConfigureSliders(e, l, _("Goals:"), 1, 50, 1, "g_nexball_goallimit"); break;
196 case MAPINFO_TYPE_ASSAULT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
197 case MAPINFO_TYPE_ONSLAUGHT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
198 case MAPINFO_TYPE_CTS: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
199 case MAPINFO_TYPE_INVASION: GameType_ConfigureSliders(e, l, _("Point limit:"), 5, 0, 5, ""); break;
200 case MAPINFO_TYPE_TEAM_DEATHMATCH:GameType_ConfigureSliders(e, l, _("Point limit:"), 5, 100, 5, "g_tdm_point_limit"); break;
201 default: GameType_ConfigureSliders(e, l, _("Frag limit:"), 5, 100, 5, "fraglimit_override"); break;
204 string x = string_null;
208 case MAPINFO_TYPE_CA: x = "g_ca_teams_override"; break;
209 case MAPINFO_TYPE_DOMINATION: x = "g_domination_teams_override"; break;
210 case MAPINFO_TYPE_FREEZETAG: x = "g_freezetag_teams_override"; break;
211 case MAPINFO_TYPE_KEYHUNT: x = "g_keyhunt_teams_override"; break;
212 case MAPINFO_TYPE_TEAM_DEATHMATCH: x = "g_tdm_teams_override"; break;
214 e.configureXonoticTextSlider(e, x);
215 e.configureXonoticTextSliderValues(e);
218 me.sliderTeams.disabled = me.labelTeams.disabled = !x;
220 me.mapListBox.refilter(me.mapListBox);
223 void XonoticServerCreateTab_gameTypeSelectNotify(entity me)
225 me.setFocus(me, me.mapListBox);