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, sliderTeams, entity, NULL)
13 ATTRIB(XonoticServerCreateTab, sliderTimelimit, entity, NULL)
14 ATTRIB(XonoticServerCreateTab, labelFraglimit, entity, NULL)
15 ATTRIB(XonoticServerCreateTab, labelTeams, entity, NULL)
16 ENDCLASS(XonoticServerCreateTab)
17 entity makeXonoticServerCreateTab();
22 void GameType_ConfigureSliders(entity e, entity l, string pLabel, float pMin, float pMax, float pStep, string pCvar)
26 e.configureXonoticTextSlider(e, string_null);
28 e.disabled = l.disabled = TRUE;
32 e.configureXonoticTextSlider(e, pCvar);
36 for(i = 0; i <= e.nValues; ++i);
38 if(e.(valueStrings[i])) { strunzone(e.(valueStrings[i])); }
39 if(e.(valueIdentifiers[i])) { strunzone(e.(valueIdentifiers[i])); }
44 e.addValue(e, strzone(_("Default")), strzone("-1"));
45 for(i = pMin; i <= pMax; i += pStep) { e.addValue(e, strzone(ftos(i)), strzone(ftos(i))); }
46 e.addValue(e, strzone(_("Unlimited")), strzone("0"));
47 e.configureXonoticTextSliderValues(e);
51 e.disabled = l.disabled = FALSE;
55 entity makeXonoticServerCreateTab()
58 me = spawnXonoticServerCreateTab();
59 me.configureDialog(me);
63 void XonoticServerCreateTab_fill(entity me)
69 me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Game type:")));
71 me.TD(me, 8, 3, e = makeXonoticGametypeList());
80 //me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Match settings:"))); // pointless, overcrowds the dialog imo
82 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time limit:")));
83 me.TD(me, 1, 2, e = makeXonoticTextSlider("timelimit_override"));
84 e.addValue(e, _("Default"), "-1");
85 e.addValue(e, "1", "1");
86 e.addValue(e, "2", "2");
87 e.addValue(e, "3", "3");
88 e.addValue(e, "4", "4");
89 e.addValue(e, "5", "5");
90 e.addValue(e, "6", "6");
91 e.addValue(e, "7", "7");
92 e.addValue(e, "8", "8");
93 e.addValue(e, "9", "9");
94 e.addValue(e, "10", "10");
95 e.addValue(e, "15", "15");
96 e.addValue(e, "20", "20");
97 e.addValue(e, "25", "25");
98 e.addValue(e, "30", "30");
99 e.addValue(e, "40", "40");
100 e.addValue(e, "50", "50");
101 e.addValue(e, "60", "60");
102 e.addValue(e, _("Infinite"), "0");
103 e.configureXonoticTextSliderValues(e);
105 me.TD(me, 1, 1, me.labelFraglimit = makeXonoticTextLabel(0, _("Frag limit:")));
106 me.TD(me, 1, 2, me.sliderFraglimit = makeXonoticTextSlider("fraglimit_override"));
107 GameType_ConfigureSliders(me.sliderFraglimit, me.labelFraglimit, _("Frag limit:"), 5, 100, 5, "fraglimit_override");
109 me.TD(me, 1, 1, me.labelTeams = makeXonoticTextLabel(0, _("Teams:")));
110 me.TD(me, 1, 2, e = me.sliderTeams = makeXonoticTextSlider(string_null));
111 e.addValue(e, _("Default"), "0");
112 e.addValue(e, _("2 teams"), "2");
113 e.addValue(e, _("3 teams"), "3");
114 e.addValue(e, _("4 teams"), "4");
115 e.configureXonoticTextSliderValues(e);
117 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player slots:")));
118 me.TD(me, 1, 2, makeXonoticSlider(1, 32, 1, "menu_maxplayers"));
120 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Number of bots:")));
121 me.TD(me, 1, 2, makeXonoticSlider(0, 9, 1, "bot_number"));
123 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bot skill:")));
124 setDependent(e, "bot_number", 0, -1);
125 me.TD(me, 1, 2, e = makeXonoticTextSlider("skill"));
126 e.addValue(e, _("Botlike"), "0");
127 e.addValue(e, _("Beginner"), "1");
128 e.addValue(e, _("You will win"), "2");
129 e.addValue(e, _("You can win"), "3");
130 e.addValue(e, _("You might win"), "4");
131 e.addValue(e, _("Advanced"), "5");
132 e.addValue(e, _("Expert"), "6");
133 e.addValue(e, _("Pro"), "7");
134 e.addValue(e, _("Assassin"), "8");
135 e.addValue(e, _("Unhuman"), "9");
136 e.addValue(e, _("Godlike"), "10");
137 e.configureXonoticTextSliderValues(e);
138 setDependent(e, "bot_number", 0, -1);
141 me.TD(me, 1, 1, e = makeXonoticButton(_("Mutators..."), '0 0 0'));
142 e.onClick = DialogOpenButton_Click;
143 e.onClickEntity = main.mutatorsDialog;
144 main.mutatorsDialog.refilterEntity = me.mapListBox;
145 me.TD(me, 1, 2, e0 = makeXonoticTextLabel(0, string_null));
146 e0.textEntity = main.mutatorsDialog;
149 me.gotoRC(me, 1, 3.2); me.setFirstColumn(me, me.currentColumn);
150 me.mapListBox = makeXonoticMapList();
151 me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Map list:")));
152 makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);
154 me.TD(me, me.rows - 5, 3, me.mapListBox);
155 me.gotoRC(me, me.rows - 3, 3.2);
156 me.TDempty(me, 0.375);
157 me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select all"), '0 0 0'));
158 e.onClick = MapList_All;
159 e.onClickEntity = me.mapListBox;
160 me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select none"), '0 0 0'));
161 e.onClick = MapList_None;
162 e.onClickEntity = me.mapListBox;
164 me.gotoRC(me, me.rows - 1, 0);
165 me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Multiplayer!"), '0 0 0'));
166 e.onClick = MapList_LoadMap;
167 e.onClickEntity = me.mapListBox;
168 me.mapListBox.startButton = e;
170 me.gameTypeChangeNotify(me);
173 void XonoticServerCreateTab_gameTypeChangeNotify(entity me)
175 // tell the map list to update
178 gt = MapInfo_CurrentGametype();
179 e = me.sliderFraglimit;
180 l = me.labelFraglimit;
184 case MAPINFO_TYPE_CTF: GameType_ConfigureSliders(e, l, _("Capture limit:"), 1, 20, 1, "capturelimit_override"); break;
185 case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, "g_domination_point_limit"); break;
186 case MAPINFO_TYPE_KEYHUNT: GameType_ConfigureSliders(e, l, _("Point limit:"), 200, 1500, 50, "g_keyhunt_point_limit"); break;
187 case MAPINFO_TYPE_LMS: GameType_ConfigureSliders(e, l, _("Lives:"), 3, 50, 1, "g_lms_lives_override"); break;
188 case MAPINFO_TYPE_RACE: GameType_ConfigureSliders(e, l, _("Laps:"), 1, 25, 1, "g_race_laps_limit"); break;
189 case MAPINFO_TYPE_NEXBALL: GameType_ConfigureSliders(e, l, _("Goals:"), 1, 50, 1, "g_nexball_goallimit"); break;
190 case MAPINFO_TYPE_ASSAULT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
191 case MAPINFO_TYPE_ONSLAUGHT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
192 case MAPINFO_TYPE_CTS: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
193 default: GameType_ConfigureSliders(e, l, _("Frag limit:"), 5, 100, 5, "fraglimit_override"); break;
200 case MAPINFO_TYPE_CA: x = TRUE; e.configureXonoticTextSlider(e, "g_ca_teams_override"); break;
201 case MAPINFO_TYPE_DOMINATION: x = TRUE; e.configureXonoticTextSlider(e, "g_domination_teams_override"); break;
202 case MAPINFO_TYPE_FREEZETAG: x = TRUE; e.configureXonoticTextSlider(e, "g_freezetag_teams_override"); break;
203 case MAPINFO_TYPE_KEEPAWAY: x = TRUE; e.configureXonoticTextSlider(e, "g_keepaway_teams_override"); break;
204 case MAPINFO_TYPE_KEYHUNT: x = TRUE; e.configureXonoticTextSlider(e, "g_keyhunt_teams_override"); break;
205 case MAPINFO_TYPE_TEAM_DEATHMATCH: x = TRUE; e.configureXonoticTextSlider(e, "g_tdm_teams_override"); break;
207 default: x = FALSE; e.configureXonoticTextSlider(e, string_null); break;
209 e.configureXonoticTextSliderValues(e);
210 e.setText(e, _("Default"));
211 me.sliderTeams.disabled = me.labelTeams.disabled = !x;
213 me.mapListBox.refilter(me.mapListBox);