void welcomeDialog_resetStrings(entity me)
{
- if(me.serverinfo_name)
- strunzone(me.serverinfo_name);
- me.serverinfo_name = strzone(_("<NO NAME>"));
-
- if(me.serverinfo_MOTD)
- strunzone(me.serverinfo_MOTD);
- me.serverinfo_MOTD = strzone(_("<NO MOTD>"));
+ strcpy(me.serverinfo_name, _("Welcome"));
+ strcpy(me.serverinfo_MOTD, "");
}
float XonoticWelcomeDialog_keyDown(entity me, float key, float ascii, float shift)
case K_KP_ENTER:
case K_ENTER:
case K_SPACE:
- me.close(me);
+ XonoticCommandButton_Click(me.joinButton_ent, me);
return true;
default:
return SUPER(XonoticWelcomeDialog).keyDown(me, key, ascii, shift);
}
}
-void XonoticWelcomeDialog_configureDialog(entity me)
+// the same implentation in mousePress apparently works, but for some reason if you try to open
+// the dialog again it doesn't show up and requires opening it a seconds time to show up
+bool XonoticWelcomeDialog_mouseRelease(entity me, vector pos)
{
- welcomeDialog_resetStrings(me);
- SUPER(XonoticWelcomeDialog).configureDialog(me);
- registercvar("_menu_welcome_dialog_available", "0", 0);
- cvar_set("_menu_welcome_dialog_available", "1");
+ if (pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1)
+ {
+ return SUPER(XonoticWelcomeDialog).mouseRelease(me, pos);
+ }
+ me.close(me);
+ return true;
}
void XonoticWelcomeDialog_destroy(entity me)
cvar_set("_menu_welcome_dialog_available", "0");
}
-void XonoticWelcomeDialog_readInputArgs(entity me, float argsbuf)
+void XonoticWelcomeDialog_readInputArgs(entity me, int argsbuf)
{
int i = 0;
string s;
if(argsbuf >= 0)
while((s = bufstr_get(argsbuf, i)) != "")
{
- if(s == "name")
+ if(s == "HOSTNAME")
+ strcpy(me.serverinfo_name, bufstr_get(argsbuf, ++i));
+ else if(s == "WELCOME")
+ strcpy(me.serverinfo_MOTD, bufstr_get(argsbuf, ++i));
+ else if(s == "RESET")
{
- if(me.serverinfo_name)
- strunzone(me.serverinfo_name);
- me.serverinfo_name = strzone(bufstr_get(argsbuf, i + 1));
- ++i;
- }
- else if(s == "motd")
- {
- if(me.serverinfo_MOTD)
- strunzone(me.serverinfo_MOTD);
- me.serverinfo_MOTD = strzone(bufstr_get(argsbuf, i + 1));
- ++i;
+ welcomeDialog_resetStrings(me);
+ break;
}
++i;
}
me.frame.setText(me.frame, me.serverinfo_name);
}
+void XonoticWelcomeDialog_draw(entity me)
+{
+ SUPER(XonoticWelcomeDialog).draw(me);
+
+ if (!(gamestatus & (GAME_ISSERVER | GAME_CONNECTED)))
+ me.close(me);
+
+ if(me.serverinfo_MOTD == "" && gamestatus & (GAME_CONNECTED | GAME_ISSERVER))
+ {
+ // if serverinfo_MOTD is empty while connected it means we are connected to an old server
+ // in this case show the csqc welcome message and instantly close the dialog
+ localcmd("\n+show_info0; defer 2 -show_info0\n");
+ me.close(me);
+ }
+
+ if (isdemo())
+ {
+ me.joinButton_ent.disabled = true;
+ me.spectateButton_ent.disabled = true;
+ }
+ else
+ {
+ me.joinButton_ent.disabled = false;
+ me.spectateButton_ent.disabled = false;
+ }
+}
+
void XonoticWelcomeDialog_fill(entity me)
{
+ registercvar("_menu_welcome_dialog_available", "0", 0);
+ cvar_set("_menu_welcome_dialog_available", "1");
+
+ me.frame.allowColors = true; // allow color codes in the title
+
entity e;
me.TR(me);
me.serverinfo_MOTD_ent.allowColors = true;
me.serverinfo_MOTD_ent.escapedNewLines = true;
me.gotoRC(me, me.rows - 1, 0);
- me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
- e.onClick = Dialog_Close;
- e.onClickEntity = me;
- e.preferredFocusPriority = 1;
+ me.TD(me, 1, me.columns / 2, me.joinButton_ent = makeXonoticCommandButton(_("Join"), '0 1 0', "cmd join", COMMANDBUTTON_CLOSE));
+ me.joinButton_ent.preferredFocusPriority = 1;
+ me.TD(me, 1, me.columns / 2, me.spectateButton_ent = makeXonoticCommandButton(_("Spectate"), '0 0 0', "cmd spectate", COMMANDBUTTON_CLOSE));
}