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, e = makeXonoticTextLabel(0.5, _("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;
142 me.TD(me, 1, 2, e = makeXonoticButton(_("Mutators"), '0 0 0'));
143 e.onClick = DialogOpenButton_Click;
144 e.onClickEntity = main.mutatorsDialog;
145 main.mutatorsDialog.refilterEntity = me.mapListBox;
147 me.gotoRC(me, 0.5, 3.2); me.setFirstColumn(me, me.currentColumn);
148 me.mapListBox = makeXonoticMapList();
149 me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Maplist")));
152 makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);
154 me.TD(me, me.rows - 4, 3, me.mapListBox);
155 me.gotoRC(me, me.rows - 2.5, 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 case MAPINFO_TYPE_INVASION: GameType_ConfigureSliders(e, l, _("Point limit:"), 5, 0, 5, ""); break;
194 default: GameType_ConfigureSliders(e, l, _("Frag limit:"), 5, 100, 5, "fraglimit_override"); break;
201 case MAPINFO_TYPE_CA: x = TRUE; e.configureXonoticTextSlider(e, "g_ca_teams_override"); break;
202 case MAPINFO_TYPE_DOMINATION: x = TRUE; e.configureXonoticTextSlider(e, "g_domination_teams_override"); break;
203 case MAPINFO_TYPE_FREEZETAG: x = TRUE; e.configureXonoticTextSlider(e, "g_freezetag_teams_override"); break;
204 case MAPINFO_TYPE_KEEPAWAY: x = TRUE; e.configureXonoticTextSlider(e, "g_keepaway_teams_override"); break;
205 case MAPINFO_TYPE_KEYHUNT: x = TRUE; e.configureXonoticTextSlider(e, "g_keyhunt_teams_override"); break;
206 case MAPINFO_TYPE_TEAM_DEATHMATCH: x = TRUE; e.configureXonoticTextSlider(e, "g_tdm_teams_override"); break;
208 default: x = FALSE; e.configureXonoticTextSlider(e, string_null); break;
210 e.configureXonoticTextSliderValues(e);
212 me.sliderTeams.disabled = me.labelTeams.disabled = !x;
214 me.mapListBox.refilter(me.mapListBox);
217 void XonoticServerCreateTab_gameTypeSelectNotify(entity me)
219 me.setFocus(me, me.mapListBox);