Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
dialog_welcome.qc
Go to the documentation of this file.
1#include "dialog_welcome.qh"
2
3#include "image.qh"
4#include "textlabel.qh"
5#include "textbox.qh"
6#include "radiobutton.qh"
7#include "commandbutton.qh"
8#include "slider.qh"
10
12{
13 strcpy(me.serverinfo_name, _("Welcome"));
14 strcpy(me.serverinfo_MOTD, "");
15}
16
17float XonoticWelcomeDialog_keyDown(entity me, float key, float ascii, float shift)
18{
19 switch(key)
20 {
21 case K_KP_ENTER:
22 case K_ENTER:
23 case K_SPACE:
24 XonoticCommandButton_Click(me.joinButton_ent, me);
25 return true;
26 default:
27 return SUPER(XonoticWelcomeDialog).keyDown(me, key, ascii, shift);
28 }
29}
30
31// the same implentation in mousePress apparently works, but for some reason if you try to open
32// the dialog again it doesn't show up and requires opening it a seconds time to show up
34{
35 if (pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1)
36 {
37 return SUPER(XonoticWelcomeDialog).mouseRelease(me, pos);
38 }
39 me.close(me);
40 return true;
41}
42
44{
45 cvar_set("_menu_welcome_dialog_available", "0");
46}
47
49{
50 int i = 0;
51 string s;
53 if(argsbuf >= 0)
54 while((s = bufstr_get(argsbuf, i)) != "")
55 {
56 if(s == "HOSTNAME")
57 strcpy(me.serverinfo_name, bufstr_get(argsbuf, ++i));
58 else if(s == "WELCOME")
59 strcpy(me.serverinfo_MOTD, bufstr_get(argsbuf, ++i));
60 else if(s == "CAMPAIGN")
61 {
62 strcpy(me.serverinfo_name, campaign_title);
63
64 int level = stoi(bufstr_get(argsbuf, ++i)) - 1;
65 string campaign_msg;
66 if (level < 0 || level >= campaign_entries)
67 campaign_msg = strcat("^1Error: invalid level number ", itos(level + 1));
68 else
69 {
70 string desc = strcat(campaign_shortdesc[level], "\n\n", campaign_longdesc[level]);
71 desc = strreplace("\n", "\\n", desc);
72 campaign_msg = strreplace("_LEVEL_DESC", desc, bufstr_get(argsbuf, ++i));
73 }
74 strcpy(me.serverinfo_MOTD, campaign_msg);
75 break;
76 }
77 else if(s == "RESET")
78 {
80 break;
81 }
82 ++i;
83 }
84 //me.serverinfo_name_ent.setText(me.serverinfo_name_ent, me.serverinfo_name);
85 me.serverinfo_MOTD_ent.setText(me.serverinfo_MOTD_ent, me.serverinfo_MOTD);
86 me.frame.setText(me.frame, me.serverinfo_name);
87}
88
90{
92
94 me.close(me);
95
96 if(me.serverinfo_MOTD == "" && (gamestatus & (GAME_CONNECTED | GAME_ISSERVER)))
97 {
98 // if serverinfo_MOTD is empty while connected it means we are connected to an old server
99 // in this case show the csqc welcome message and instantly close the dialog
100 localcmd("\n+show_info0; defer 2 -show_info0\n");
101 me.close(me);
102 }
103
104 if (isdemo())
105 {
106 me.joinButton_ent.disabled = true;
107 me.spectateButton_ent.disabled = true;
108 }
109 else
110 {
111 me.joinButton_ent.disabled = false;
112 me.spectateButton_ent.disabled = false;
113 }
114}
115
117{
118 registercvar("_menu_welcome_dialog_available", "0", 0);
119 cvar_set("_menu_welcome_dialog_available", "1");
120
121 me.frame.allowColors = true; // allow color codes in the title
122
123 entity e;
124
125 me.TR(me);
126 me.TD(me, me.rows - 1, me.columns, me.serverinfo_MOTD_ent = makeXonoticTextBox());
127 me.serverinfo_MOTD_ent.align = 0.5;
128 me.serverinfo_MOTD_ent.allowColors = true;
129 me.serverinfo_MOTD_ent.escapedNewLines = true;
130 me.gotoRC(me, me.rows - 1, 0);
131 me.TD(me, 1, me.columns / 2, me.joinButton_ent = makeXonoticCommandButton(_("Join"), '0 1 0', "cmd join", COMMANDBUTTON_CLOSE));
132 me.joinButton_ent.preferredFocusPriority = 1;
133 me.TD(me, 1, me.columns / 2, me.spectateButton_ent = makeXonoticCommandButton(_("Spectate"), '0 0 0', "cmd spectate", COMMANDBUTTON_CLOSE));
134}
string campaign_title
int campaign_entries
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
entity makeXonoticCommandButton(string theText, vector theColor, string theCommand, int theFlags)
void XonoticCommandButton_Click(entity me, entity other)
#define COMMANDBUTTON_CLOSE
void XonoticWelcomeDialog_destroy(entity me)
void XonoticWelcomeDialog_readInputArgs(entity me, int argsbuf)
float XonoticWelcomeDialog_keyDown(entity me, float key, float ascii, float shift)
void XonoticWelcomeDialog_fill(entity me)
bool XonoticWelcomeDialog_mouseRelease(entity me, vector pos)
void XonoticWelcomeDialog_draw(entity me)
void welcomeDialog_resetStrings(entity me)
#define stoi(s)
Definition int.qh:4
#define itos(i)
Definition int.qh:6
float K_SPACE
Definition keycodes.qc:10
float K_ENTER
Definition keycodes.qc:8
float K_KP_ENTER
Definition keycodes.qc:74
const int GAME_ISSERVER
Definition menu.qh:11
const int GAME_CONNECTED
Definition menu.qh:12
int gamestatus
Definition menu.qh:16
float registercvar(string name, string value, float flags)
void localcmd(string command,...)
void cvar_set(string name, string value)
float isdemo()
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
#define SUPER(cname)
Definition oo.qh:231
vector
Definition self.qh:92
#define strcpy(this, s)
Definition string.qh:52
entity makeXonoticTextBox()
Definition textbox.qc:4