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, 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)
67 me.gotoRC(me, 0.5, 0);
68 me.TD(me, 1, 3, makeXonoticHeaderLabel(_("Gametype")));
70 me.TD(me, 10.5, 3, e = makeXonoticGametypeList());
72 me.gotoRC(me, 12.5, 0);
73 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time limit:")));
74 me.TD(me, 1, 2, e = makeXonoticTextSlider("timelimit_override"));
75 e.addValue(e, ZCTX(_("TIMLIM^Default")), "-1");
76 e.addValue(e, ZCTX(_("TIMLIM^1 minute")), "1");
77 e.addValue(e, ZCTX(_("TIMLIM^2 minutes")), "2");
78 e.addValue(e, ZCTX(_("TIMLIM^3 minutes")), "3");
79 e.addValue(e, ZCTX(_("TIMLIM^4 minutes")), "4");
80 e.addValue(e, ZCTX(_("TIMLIM^5 minutes")), "5");
81 e.addValue(e, ZCTX(_("TIMLIM^6 minutes")), "6");
82 e.addValue(e, ZCTX(_("TIMLIM^7 minutes")), "7");
83 e.addValue(e, ZCTX(_("TIMLIM^8 minutes")), "8");
84 e.addValue(e, ZCTX(_("TIMLIM^9 minutes")), "9");
85 e.addValue(e, ZCTX(_("TIMLIM^10 minutes")), "10");
86 e.addValue(e, ZCTX(_("TIMLIM^15 minutes")), "15");
87 e.addValue(e, ZCTX(_("TIMLIM^20 minutes")), "20");
88 e.addValue(e, ZCTX(_("TIMLIM^25 minutes")), "25");
89 e.addValue(e, ZCTX(_("TIMLIM^30 minutes")), "30");
90 e.addValue(e, ZCTX(_("TIMLIM^40 minutes")), "40");
91 e.addValue(e, ZCTX(_("TIMLIM^50 minutes")), "50");
92 e.addValue(e, ZCTX(_("TIMLIM^60 minutes")), "60");
93 e.addValue(e, ZCTX(_("TIMLIM^Infinite")), "0");
94 e.configureXonoticTextSliderValues(e);
96 me.TD(me, 1, 1, me.labelFraglimit = makeXonoticTextLabel(0, _("Frag limit:")));
97 me.TD(me, 1, 2, me.sliderFraglimit = makeXonoticTextSlider("fraglimit_override"));
98 GameType_ConfigureSliders(me.sliderFraglimit, me.labelFraglimit, _("Frag limit:"), 5, 100, 5, "fraglimit_override");
100 me.gotoRC(me, 15, 0);
101 me.TD(me, 1, 1, me.labelTeams = makeXonoticTextLabel(0, _("Teams:")));
102 me.TD(me, 1, 2, e = me.sliderTeams = makeXonoticTextSlider(string_null));
103 e.addValue(e, _("Default"), "0");
104 e.addValue(e, _("2 teams"), "2");
105 e.addValue(e, _("3 teams"), "3");
106 e.addValue(e, _("4 teams"), "4");
107 e.configureXonoticTextSliderValues(e);
109 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player slots:")));
110 me.TD(me, 1, 2, makeXonoticSlider(1, 32, 1, "menu_maxplayers"));
112 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Number of bots:")));
113 me.TD(me, 1, 2, makeXonoticSlider(0, 9, 1, "bot_number"));
115 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bot skill:")));
116 setDependent(e, "bot_number", 0, -1);
117 me.TD(me, 1, 2, e = makeXonoticTextSlider("skill"));
118 e.addValue(e, _("Botlike"), "0");
119 e.addValue(e, _("Beginner"), "1");
120 e.addValue(e, _("You will win"), "2");
121 e.addValue(e, _("You can win"), "3");
122 e.addValue(e, _("You might win"), "4");
123 e.addValue(e, _("Advanced"), "5");
124 e.addValue(e, _("Expert"), "6");
125 e.addValue(e, _("Pro"), "7");
126 e.addValue(e, _("Assassin"), "8");
127 e.addValue(e, _("Unhuman"), "9");
128 e.addValue(e, _("Godlike"), "10");
129 e.configureXonoticTextSliderValues(e);
130 setDependent(e, "bot_number", 0, -1);
132 me.gotoRC(me, me.rows - 3.5, 0);
133 me.TD(me, 1, 3, e0 = makeXonoticTextLabel(0.5, string_null));
134 e0.textEntity = main.mutatorsDialog;
139 me.TD(me, 1, 2, e = makeXonoticButton(_("Mutators"), '0 0 0'));
140 e.onClick = DialogOpenButton_Click;
141 e.onClickEntity = main.mutatorsDialog;
142 main.mutatorsDialog.refilterEntity = me.mapListBox;
144 me.gotoRC(me, 0.5, 3.2); me.setFirstColumn(me, me.currentColumn);
145 me.mapListBox = makeXonoticMapList();
146 me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Maplist")));
147 makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);
149 me.TD(me, me.rows - 4, 3, me.mapListBox);
150 me.gotoRC(me, me.rows - 2.5, 3.2);
151 me.TDempty(me, 0.375);
152 me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select all"), '0 0 0'));
153 e.onClick = MapList_All;
154 e.onClickEntity = me.mapListBox;
155 me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select none"), '0 0 0'));
156 e.onClick = MapList_None;
157 e.onClickEntity = me.mapListBox;
159 me.gotoRC(me, me.rows - 1, 0);
160 me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Multiplayer!"), '0 0 0'));
161 e.onClick = MapList_LoadMap;
162 e.onClickEntity = me.mapListBox;
163 me.mapListBox.startButton = e;
165 me.gameTypeChangeNotify(me);
168 void XonoticServerCreateTab_gameTypeChangeNotify(entity me)
170 // tell the map list to update
173 gt = MapInfo_CurrentGametype();
174 e = me.sliderFraglimit;
175 l = me.labelFraglimit;
179 case MAPINFO_TYPE_CTF: GameType_ConfigureSliders(e, l, _("Capture limit:"), 1, 20, 1, "capturelimit_override"); break;
180 case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, "g_domination_point_limit"); break;
181 case MAPINFO_TYPE_KEYHUNT: GameType_ConfigureSliders(e, l, _("Point limit:"), 200, 1500, 50, "g_keyhunt_point_limit"); break;
182 case MAPINFO_TYPE_LMS: GameType_ConfigureSliders(e, l, _("Lives:"), 3, 50, 1, "g_lms_lives_override"); break;
183 case MAPINFO_TYPE_RACE: GameType_ConfigureSliders(e, l, _("Laps:"), 1, 25, 1, "g_race_laps_limit"); break;
184 case MAPINFO_TYPE_NEXBALL: GameType_ConfigureSliders(e, l, _("Goals:"), 1, 50, 1, "g_nexball_goallimit"); break;
185 case MAPINFO_TYPE_ASSAULT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
186 case MAPINFO_TYPE_ONSLAUGHT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
187 case MAPINFO_TYPE_CTS: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
188 case MAPINFO_TYPE_INVASION: GameType_ConfigureSliders(e, l, _("Point limit:"), 5, 0, 5, ""); break;
189 case MAPINFO_TYPE_TEAM_DEATHMATCH:GameType_ConfigureSliders(e, l, _("Point limit:"), 5, 100, 5, "g_tdm_point_limit"); break;
190 default: GameType_ConfigureSliders(e, l, _("Frag limit:"), 5, 100, 5, "fraglimit_override"); break;
193 string x = string_null;
197 case MAPINFO_TYPE_CA: x = "g_ca_teams_override"; break;
198 case MAPINFO_TYPE_DOMINATION: x = "g_domination_teams_override"; break;
199 case MAPINFO_TYPE_FREEZETAG: x = "g_freezetag_teams_override"; break;
200 case MAPINFO_TYPE_KEYHUNT: x = "g_keyhunt_teams_override"; break;
201 case MAPINFO_TYPE_TEAM_DEATHMATCH: x = "g_tdm_teams_override"; break;
203 e.configureXonoticTextSlider(e, x);
204 e.configureXonoticTextSliderValues(e);
207 me.sliderTeams.disabled = me.labelTeams.disabled = !x;
209 me.mapListBox.refilter(me.mapListBox);
212 void XonoticServerCreateTab_gameTypeSelectNotify(entity me)
214 me.setFocus(me, me.mapListBox);