Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
dialog_multiplayer_create.qc
Go to the documentation of this file.
2
5
6#include "gametypelist.qh"
7#include "maplist.qh"
8#include <common/mapinfo.qh>
9
10#include "checkbox.qh"
11#include "image.qh"
12#include "mixedslider.qh"
13#include "textlabel.qh"
14#include "slider.qh"
15#include "mainwindow.qh"
16#include "button.qh"
17#include "commandbutton.qh"
18#include "leavematchbutton.qh"
19#include "inputbox.qh"
20
21void GameType_ConfigureSliders(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip)
22{
23 int i;
24 entity e = me.sliderFraglimit;
25 entity l = me.labelFraglimit;
26 e.configureXonoticMixedSlider(e, pCvar, pTooltip);
27 e.disabled = l.disabled = !pCvar;
28 l.setText(l, pLabel);
29
30 // clear old values
31 for(i = 0; i < e.nValues; ++i);
32 strfree(e.(valueStrings[i]));
33 e.clearValues(e);
34
35 if(pCvar != "")
36 {
37 // set new values
38 e.addText(e, strzone(_("Default")), -1);
39 e.addRange(e, pMin, pMax, pStep);
40 e.addText(e, strzone(_("Unlimited")), 0);
41 }
42 e.configureXonoticMixedSliderValues(e);
43
44
45 entity t = me.sliderTeams;
46 entity tl = me.labelTeams;
47 t.configureXonoticMixedSlider(t, tCvar, string_null);
48 tl.disabled = t.disabled = !tCvar;
49 t.nValues = (tCvar == "") ? 0 : 4; // instead of clearing / readding the very same values
50 t.configureXonoticMixedSliderValues(t);
51}
52
58
60{
62 me.configureDialog(me);
63 return me;
64}
65
67{
68 if (cvar("g_campaign"))
69 return false;
70 return e.parent.sliderTeams.value < 2; // either default (2) or 2 teams
71}
72
74{
75 // returns true if there will be bots
76 return ((allowBotVsHuman(e) && (cvar("bot_vs_human")))
77 || (!cvar("g_campaign") && !cvar("bot_vs_human") && cvar("bot_number") > 0));
78}
79
81{
82 entity e, e0;
83
84 // the left half begins here
85
86 me.gotoRC(me, 0.5, 0);
87 me.TD(me, 1, 3, makeXonoticHeaderLabel(_("Gametype")));
88 me.TR(me);
89 me.TD(me, 11, 3, e = makeXonoticGametypeList());
90
91 me.gotoRC(me, 12.5, 0);
92 me.TDempty(me, 0.1);
93 me.TD(me, 1, 2.9, e = makeXonoticCheckBox_T(0, "menu_create_show_all", _("Show all"),
94 _("Show all available gametypes")));
95 me.gotoRC(me, 14, 0);
96 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time limit:")));
97 me.TD(me, 1, 2, e = makeXonoticMixedSlider_T("timelimit_override",
98 _("Time limit in minutes that when hit, will end the match")));
99 e.formatString = "m";
100 e.addText(e, ZCTX(_("TIMLIM^Default")), -1);
101 e.addRange(e, 1, 10, 1);
102 e.addRange(e, 15, 30, 5);
103 e.addRange(e, 40, 60, 10);
104 e.addText(e, ZCTX(_("TIMLIM^Infinite")), 0);
105 e.configureXonoticMixedSliderValues(e);
106 me.TR(me);
107 me.TD(me, 1, 1, me.labelFraglimit = makeXonoticTextLabel(0, _("Frag limit:")));
108 me.TD(me, 1, 2, e = me.sliderFraglimit = makeXonoticMixedSlider("fraglimit_override"));
109
110 me.gotoRC(me, 16.5, 0);
111 me.TD(me, 1, 1, me.labelTeams = makeXonoticTextLabel(0, _("Teams:")));
112 me.TD(me, 1, 2, e = me.sliderTeams = makeXonoticMixedSlider(string_null));
113 e.addText(e, _("Default"), 0);
114 e.addText(e, _("2 teams"), 2);
115 e.addText(e, _("3 teams"), 3);
116 e.addText(e, _("4 teams"), 4);
117 e.configureXonoticMixedSliderValues(e);
118 me.TR(me);
119 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player slots:")));
120 me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 32, 1, "menu_maxplayers",
121 _("The maximum amount of players or bots that can be connected to your server at once")));
122 me.TR(me);
123 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Number of bots:")));
124 setDependent(e, "g_campaign", 0, 0);
125 setDependentAND(e, "bot_vs_human", 0, 0);
126 me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 9, 1, "bot_number",
127 _("Amount of bots on your server")));
128 setDependent(e, "g_campaign", 0, 0);
129 setDependentAND(e, "bot_vs_human", 0, 0);
130 me.TR(me);
131 me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bot skill:")));
133 me.TD(me, 1, 2, e = makeXonoticMixedSlider_T("skill",
134 _("Specify how experienced the bots will be")));
135 e.addText(e, _("Botlike"), 0);
136 e.addText(e, _("Beginner"), 1);
137 e.addText(e, _("You will win"), 2);
138 e.addText(e, _("You can win"), 3);
139 e.addText(e, _("You might win"), 4);
140 e.addText(e, _("Advanced"), 5);
141 e.addText(e, _("Expert"), 6);
142 e.addText(e, _("Pro"), 7);
143 e.addText(e, _("Assassin"), 8);
144 e.addText(e, _("Unhuman"), 9);
145 e.addText(e, _("Godlike"), 10);
146 e.configureXonoticMixedSliderValues(e);
148 me.TR(me);
149 me.TDempty(me, 0.1);
150 me.TD(me, 1, 2.9, e = makeXonoticCheckBox_T(0, "bot_vs_human", _("Bots against humans"),
151 _("Force humans to play on the same team against an equal-sized team of bots")));
153
154 // The right half begins here
155
156 me.mapListBox = makeXonoticMapList();
157 me.gotoRC(me, 0.5, 3.2); me.setFirstColumn(me, me.currentColumn);
158 // the maplistbox
159 me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Maplist")));
160 makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);
161 me.TR(me);
162 // we use 7.8 here to visually match the component on the left
163 me.TD(me, me.rows - 7.8, 3, me.mapListBox);
164
165 me.gotoRC(me, me.rows - 6, me.firstColumn);
166 // string filter label and box
167 me.TD(me, 1, 0.35, e = makeXonoticTextLabel(1, _("Filter:")));
168 me.mapListBox.stringFilterBox = makeXonoticInputBox_T(0, string_null,
169 _("Click here or CTRL+F to provide a keyword to narrow down the list; CTRL+DEL to clear; ENTER when done."));
170 me.TD(me, 1, me.columns - me.firstColumn - 0.35, e = me.mapListBox.stringFilterBox);
173 e.onChangeEntity = me.mapListBox;
174
175 me.gotoRC(me, me.rows - 5, me.firstColumn);
176 // the selection buttons
177 me.TDempty(me, 0.2);
178 me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Add shown"), '0 0 0',
179 _("Add the maps shown in the list to your selection")));
180 e.onClick = MapList_Add_Shown;
181 e.onClickEntity = me.mapListBox;
182 me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Remove shown"), '0 0 0',
183 _("Remove the maps shown in the list from your selection")));
184 e.onClick = MapList_Remove_Shown;
185 e.onClickEntity = me.mapListBox;
186 me.gotoRC(me, me.rows - 4, me.firstColumn);
187 me.TDempty(me, 0.2);
188 me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Add all"), '0 0 0',
189 _("Add every available map to your selection")));
190 e.onClick = MapList_Add_All;
191 e.onClickEntity = me.mapListBox;
192 me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Remove all"), '0 0 0',
193 _("Remove all the maps from your selection")));
194 e.onClick = MapList_Remove_All;
195 e.onClickEntity = me.mapListBox;
196
197 // here we use the following line instead of me.TR(me) for better visual spacing;
198 // this decision was made in this poll: http://forums.xonotic.org/showthread.php?tid=5445
199 me.gotoRC(me, me.rows - 2.5, me.firstColumn);
200 me.TDempty(me, 0.5);
201 me.TD(me, 1, 2, e = makeXonoticButton_T(_("Mutators..."), '0 0 0',
202 _("Mutators and weapon arenas")));
203 e.onClick = DialogOpenButton_Click;
204 e.onClickEntity = main.mutatorsDialog;
205 main.mutatorsDialog.refilterEntity = me.mapListBox;
206 setDependent(e, "g_campaign", 0, 0);
207
208 // bottom row
209 me.gotoRC(me, me.rows - 1, 0);
210 me.TDempty(me, me.columns * 1/12);
211 me.TD(me, 1, me.columns * 5/12, e = makeXonoticLeaveMatchButton('0 0 0', 0));
212 me.TD(me, 1, me.columns * 5/12, e = makeXonoticButton(_("Start multiplayer!"), '0 0 0'));
213 e.onClick = MapList_LoadMap;
214 e.onClickEntity = me.mapListBox;
215 me.mapListBox.startButton = e;
216
218}
219
221{
223
224 me.mapListBox.refilter(me.mapListBox);
225}
226
228{
229 me.setFocus(me, me.mapListBox);
230}
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
virtual void m_configuremenu()
Definition mapinfo.qh:91
void GameType_ConfigureSliders(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip)
void GameType_ConfigureSliders_for_CurrentGametype(entity me)
void XonoticServerCreateTab_fill(entity me)
float allowBotSkill(entity e)
void XonoticServerCreateTab_gameTypeChangeNotify(entity me)
void XonoticServerCreateTab_gameTypeSelectNotify(entity me)
entity makeXonoticServerCreateTab()
float allowBotVsHuman(entity e)
entity makeXonoticGametypeList()
#define ZCTX(s)
Definition i18n.qh:68
entity makeXonoticLeaveMatchButton(vector theColor, int theFlags)
#define main
Definition _all.inc:202
Gametype MapInfo_CurrentGametype()
Definition mapinfo.qc:1482
void MapList_StringFilterBox_Change(entity box, entity me)
Definition maplist.qc:226
float MapList_StringFilterBox_keyDown(entity me, float scan, float ascii, float shift)
Definition maplist.qc:385
void MapList_Remove_All(entity btn, entity me)
Definition maplist.qc:268
entity makeXonoticMapList()
Definition maplist.qc:15
void MapList_Add_Shown(entity btn, entity me)
Definition maplist.qc:235
void MapList_Add_All(entity btn, entity me)
Definition maplist.qc:258
void MapList_Remove_Shown(entity btn, entity me)
Definition maplist.qc:247
void MapList_LoadMap(entity btn, entity me)
Definition maplist.qc:274
entity makeXonoticButton_T(string theText, vector theColor, string theTooltip)
Definition button.qc:3
entity makeXonoticButton(string theText, vector theColor)
Definition button.qc:9
void setDependentWeird(entity e, float(entity) func)
Definition util.qc:249
void makeCallback(entity e, entity cbent, void(entity, entity) cbfunc)
Definition util.qc:107
void setDependentAND(entity e, string theCvarName, float theCvarMin, float theCvarMax)
Definition util.qc:213
void setDependent(entity e, string theCvarName, float theCvarMin, float theCvarMax)
Definition util.qc:180
float cvar(string name)
string strzone(string s)
void DialogOpenButton_Click(entity button, entity tab)
string string_null
Definition nil.qh:9
#define NEW(cname,...)
Definition oo.qh:117
#define strfree(this)
Definition string.qh:59
entity makeXonoticTextLabel(float theAlign, string theText)
Definition textlabel.qc:3
entity makeXonoticHeaderLabel(string theText)
Definition textlabel.qc:9
entity makeXonoticCheckBox_T(float isInverted, string theCvar, string theText, string theTooltip)
Definition checkbox.qc:3
entity makeXonoticInputBox_T(bool doEditColorCodes, string theCvar, string theTooltip)
Definition inputbox.qc:3
entity makeXonoticMixedSlider(string theCvar)
Definition mixedslider.qc:9
entity makeXonoticMixedSlider_T(string theCvar, string theTooltip)
Definition mixedslider.qc:3
entity makeXonoticSlider_T(float theValueMin, float theValueMax, float theValueStep, string theCvar, string theTooltip)
Definition slider.qc:3