1 #ifndef DIALOG_MULTIPLAYER_CREATE_H
2 #define DIALOG_MULTIPLAYER_CREATE_H
4 CLASS(XonoticServerCreateTab, XonoticTab)
5 METHOD(XonoticServerCreateTab, fill, void(entity))
6 METHOD(XonoticServerCreateTab, gameTypeChangeNotify, void(entity))
7 METHOD(XonoticServerCreateTab, gameTypeSelectNotify, void(entity))
8 ATTRIB(XonoticServerCreateTab, title, string, _("Create"))
9 ATTRIB(XonoticServerCreateTab, intendedWidth, float, 0.9)
10 ATTRIB(XonoticServerCreateTab, rows, float, 23)
11 ATTRIB(XonoticServerCreateTab, columns, float, 6.2) // added extra .2 for center space
13 ATTRIB(XonoticServerCreateTab, mapListBox, entity, NULL)
14 ATTRIB(XonoticServerCreateTab, sliderFraglimit, entity, NULL)
15 ATTRIB(XonoticServerCreateTab, sliderTeams, entity, NULL)
16 ATTRIB(XonoticServerCreateTab, sliderTimelimit, entity, NULL)
17 ATTRIB(XonoticServerCreateTab, labelFraglimit, entity, NULL)
18 ATTRIB(XonoticServerCreateTab, labelTeams, entity, NULL)
19 ENDCLASS(XonoticServerCreateTab)
20 entity makeXonoticServerCreateTab();
25 void GameType_ConfigureSliders(entity e, entity l, string pLabel, float pMin, float pMax, float pStep, string pCvar)
29 e.configureXonoticTextSlider(e, string_null);
31 e.disabled = l.disabled = true;
35 e.configureXonoticTextSlider(e, pCvar);
39 for(i = 0; i <= e.nValues; ++i);
41 if(e.(valueStrings[i])) { strunzone(e.(valueStrings[i])); }
42 if(e.(valueIdentifiers[i])) { strunzone(e.(valueIdentifiers[i])); }
47 e.addValue(e, strzone(_("Default")), strzone("-1"));
48 for(i = pMin; i <= pMax; i += pStep) { e.addValue(e, strzone(ftos(i)), strzone(ftos(i))); }
49 e.addValue(e, strzone(_("Unlimited")), strzone("0"));
50 e.configureXonoticTextSliderValues(e);
54 e.disabled = l.disabled = false;
58 entity makeXonoticServerCreateTab()
61 me = NEW(XonoticServerCreateTab);
62 me.configureDialog(me);
66 void XonoticServerCreateTab_fill(entity me)
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;
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 = makeXonoticHeaderLabel(_("Maplist")));
150 makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);
152 me.TD(me, me.rows - 4, 3, me.mapListBox);
153 me.gotoRC(me, me.rows - 2.5, 3.2);
154 me.TDempty(me, 0.375);
155 me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select all"), '0 0 0'));
156 e.onClick = MapList_All;
157 e.onClickEntity = me.mapListBox;
158 me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select none"), '0 0 0'));
159 e.onClick = MapList_None;
160 e.onClickEntity = me.mapListBox;
162 me.gotoRC(me, me.rows - 1, 0);
163 me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Multiplayer!"), '0 0 0'));
164 e.onClick = MapList_LoadMap;
165 e.onClickEntity = me.mapListBox;
166 me.mapListBox.startButton = e;
168 me.gameTypeChangeNotify(me);
171 void XonoticServerCreateTab_gameTypeChangeNotify(entity me)
173 // tell the map list to update
176 gt = MapInfo_CurrentGametype();
177 e = me.sliderFraglimit;
178 l = me.labelFraglimit;
182 case MAPINFO_TYPE_CTF: GameType_ConfigureSliders(e, l, _("Capture limit:"), 1, 20, 1, "capturelimit_override"); break;
183 case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, "g_domination_point_limit"); break;
184 case MAPINFO_TYPE_KEYHUNT: GameType_ConfigureSliders(e, l, _("Point limit:"), 200, 1500, 50, "g_keyhunt_point_limit"); break;
185 case MAPINFO_TYPE_LMS: GameType_ConfigureSliders(e, l, _("Lives:"), 3, 50, 1, "g_lms_lives_override"); break;
186 case MAPINFO_TYPE_RACE: GameType_ConfigureSliders(e, l, _("Laps:"), 1, 25, 1, "g_race_laps_limit"); break;
187 case MAPINFO_TYPE_NEXBALL: GameType_ConfigureSliders(e, l, _("Goals:"), 1, 50, 1, "g_nexball_goallimit"); break;
188 case MAPINFO_TYPE_ASSAULT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
189 case MAPINFO_TYPE_ONSLAUGHT: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
190 case MAPINFO_TYPE_CTS: GameType_ConfigureSliders(e, l, _("Point limit:"), 50, 500, 10, ""); break;
191 case MAPINFO_TYPE_INVASION: GameType_ConfigureSliders(e, l, _("Point limit:"), 5, 0, 5, ""); break;
192 case MAPINFO_TYPE_TEAM_DEATHMATCH:GameType_ConfigureSliders(e, l, _("Point limit:"), 5, 100, 5, "g_tdm_point_limit"); break;
193 default: GameType_ConfigureSliders(e, l, _("Frag limit:"), 5, 100, 5, "fraglimit_override"); break;
196 string x = string_null;
200 case MAPINFO_TYPE_CA: x = "g_ca_teams_override"; break;
201 case MAPINFO_TYPE_DOMINATION: x = "g_domination_teams_override"; break;
202 case MAPINFO_TYPE_FREEZETAG: x = "g_freezetag_teams_override"; break;
203 case MAPINFO_TYPE_KEYHUNT: x = "g_keyhunt_teams_override"; break;
204 case MAPINFO_TYPE_TEAM_DEATHMATCH: x = "g_tdm_teams_override"; break;
206 e.configureXonoticTextSlider(e, x);
207 e.configureXonoticTextSliderValues(e);
210 me.sliderTeams.disabled = me.labelTeams.disabled = !x;
212 me.mapListBox.refilter(me.mapListBox);
215 void XonoticServerCreateTab_gameTypeSelectNotify(entity me)
217 me.setFocus(me, me.mapListBox);