#include <server/antilag.qh>
#include <server/bot/api.qh>
#include <server/bot/default/cvars.qh>
+#include <server/bot/default/waypoints.qh>
#include <server/campaign.qh>
#include <server/chat.qh>
#include <server/cheats.qh>
}
#endif
-void SendWelcomemessage(entity this, bool force_centerprint)
-{
- msg_entity = this;
- WriteHeader(MSG_ONE, TE_CSQC_SERVERWELCOME);
- SendWelcomemessage_msg_type(this, force_centerprint, MSG_ONE);
-}
-
// NOTE csqc uses the active mutators list sent by this function
// to understand which mutators are enabled
// also note that they aren't all registered mutators, e.g. jetpack, low gravity
-void SendWelcomemessage_msg_type(entity this, bool force_centerprint, int msg_type)
+void SendWelcomeMessage(entity this, int msg_type)
{
WriteByte(msg_type, boolean(autocvar_g_campaign));
if (boolean(autocvar_g_campaign))
WriteString(msg_type, Campaign_GetMessage());
return;
}
- WriteByte(msg_type, force_centerprint);
WriteString(msg_type, autocvar_hostname);
WriteString(msg_type, autocvar_g_xonoticversion);
WriteByte(msg_type, CS(this).version_mismatch);
{
if (g_weaponarena_weapons == WEPSET(TUBA))
stuffcmd(this, "cl_cmd settemp chase_active 1\n");
+ // quickmenu file must be put in a subfolder with an unique name
+ // to reduce chances of overriding custom client quickmenus
+ if (waypointeditor_enabled)
+ stuffcmd(this, sprintf("cl_cmd settemp _hud_panel_quickmenu_file_from_server %s\n", "wpeditor.txt"));
+ else if (autocvar_sv_quickmenu_file != "" && strstrofs(autocvar_sv_quickmenu_file, "/", 0) && fexists(autocvar_sv_quickmenu_file))
+ stuffcmd(this, sprintf("cl_cmd settemp _hud_panel_quickmenu_file_from_server %s\n", autocvar_sv_quickmenu_file));
}
if (!autocvar_sv_foginterval && world.fog != "")
if (player_count == 1)
localcmd("\nsv_hook_firstjoin\n");
-
- if (IS_REAL_CLIENT(this) && !IS_PLAYER(this) && !autocvar_g_campaign)
- CS(this).motd_actived_time = -1; // the welcome message is shown by the client
}
/*
=============
{
if (!teamplay || autocvar_g_campaign || autocvar_g_balance_teams || this.team_selected || (CS(this).wasplayer && autocvar_g_changeteam_banned) || Player_HasRealForcedTeam(this))
return false;
- stuffcmd(this, "menu_showteamselect\n");
+ if (frametime) // once per frame is more than enough
+ stuffcmd(this, "_scoreboard_team_selection 1\n");
return true;
}
void Join(entity this)
return free_slots;
}
-void PrintWelcomeMessage(entity this)
-{
- if(CS(this).motd_actived_time == 0)
- {
- if (autocvar_g_campaign) {
- if ((IS_PLAYER(this) && PHYS_INPUT_BUTTON_INFO(this)) || (!IS_PLAYER(this))) {
- CS(this).motd_actived_time = time;
- SendWelcomemessage(this, false);
- }
- } else {
- if (PHYS_INPUT_BUTTON_INFO(this)) {
- CS(this).motd_actived_time = time;
- SendWelcomemessage(this, true);
- }
- }
- }
- else if(CS(this).motd_actived_time > 0) // showing MOTD or campaign message
- {
- if (autocvar_g_campaign) {
- if (PHYS_INPUT_BUTTON_INFO(this))
- CS(this).motd_actived_time = time;
- else if ((time - CS(this).motd_actived_time > 2) && IS_PLAYER(this)) { // hide it some seconds after BUTTON_INFO has been released
- CS(this).motd_actived_time = 0;
- Kill_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CPID_MOTD);
- }
- } else {
- if (PHYS_INPUT_BUTTON_INFO(this))
- CS(this).motd_actived_time = time;
- else if (time - CS(this).motd_actived_time > 2) { // hide it some seconds after BUTTON_INFO has been released
- CS(this).motd_actived_time = 0;
- Kill_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CPID_MOTD);
- }
- }
- }
- else //if(CS(this).motd_actived_time < 0) // just connected, motd is active
- {
- if(PHYS_INPUT_BUTTON_INFO(this)) // BUTTON_INFO hides initial MOTD
- CS(this).motd_actived_time = -2; // wait until BUTTON_INFO gets released
- else if (CS(this).motd_actived_time == -2)
- {
- // instantly hide MOTD
- CS(this).motd_actived_time = 0;
- Kill_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CPID_MOTD);
- }
- else if (IS_PLAYER(this) || IS_SPEC(this))
- {
- // FIXME occasionally for some reason MOTD never goes away
- // delay MOTD removal a little bit in the hope it fixes this bug
- if (CS(this).motd_actived_time == -1) // MOTD marked to fade away as soon as client becomes player or spectator
- CS(this).motd_actived_time = -(5 + floor(random() * 10)); // add small delay
- else //if (CS(this).motd_actived_time < -2)
- CS(this).motd_actived_time++;
- }
- }
-}
-
bool joinAllowed(entity this)
{
if (CS(this).version_mismatch) return false;
PlayerUseKey(this);
CS(this).usekeypressed = PHYS_INPUT_BUTTON_USE(this);
- if (IS_REAL_CLIENT(this))
- PrintWelcomeMessage(this);
-
if (IS_PLAYER(this)) {
if (IS_REAL_CLIENT(this) && time < CS(this).jointime + MIN_SPEC_TIME)
error("Client can't be spawned as player on connection!");