X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_client.qc;h=3ccd515fc297505496965905a877bfdbcd665d92;hp=9a1d4100473f0967dae2bea37e158ed5103805a2;hb=42b501c5da481b2598db9bfc1b93b06fede3657a;hpb=84c1fec4b12978d77e526be62253cb361d0a3a4a diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 9a1d41004..3ccd515fc 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -614,6 +614,9 @@ void PutObserverInServer (void) DropAllRunes(self); MUTATOR_CALLHOOK(MakePlayerObserver); + if (g_minstagib) + minstagib_stop_countdown(); + Portal_ClearAll(self); if(self.alivetime) @@ -1060,7 +1063,7 @@ void PutClientInServer (void) //stuffcmd(self, "set viewsize $tmpviewsize \n"); if (autocvar_g_spawnsound) - sound (self, CHAN_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM); if(g_assault) { if(self.team == assault_attacker_team) @@ -1277,7 +1280,9 @@ void ClientKill_Now() } } - remove(self.killindicator); + if(self.killindicator && !wasfreed(self.killindicator)) + remove(self.killindicator); + self.killindicator = world; if(self.killindicator_teamchange) @@ -1316,17 +1321,6 @@ void KillIndicator_Think() { if(self.cnt <= 10) AnnounceTo(self.owner, strcat(ftos(self.cnt), "")); - if(self.owner.killindicator_teamchange) - { - if(self.owner.killindicator_teamchange == -1) - centerprint(self.owner, strcat("Changing team in ", ftos(self.cnt), " seconds")); - else if(self.owner.killindicator_teamchange == -2) - centerprint(self.owner, strcat("Spectating in ", ftos(self.cnt), " seconds")); - else - centerprint(self.owner, strcat("Changing to ", ColoredTeamName(self.owner.killindicator_teamchange), " in ", ftos(self.cnt), " seconds")); - } - else - centerprint(self.owner, strcat("^1Suicide in ", ftos(self.cnt), " seconds")); } self.nextthink = time + 1; self.cnt -= 1; @@ -1397,14 +1391,35 @@ void ClientKill_TeamChange (float targetteam) // 0 = don't change, -1 = auto, -2 if(self.killindicator) { if(targetteam == 0) // just die + { self.killindicator.colormod = '0 0 0'; + if(clienttype(self) == CLIENTTYPE_REAL) + if(self.killindicator.cnt > 0) + Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "^1Suicide in %d seconds", 1, self.killindicator.cnt); + } else if(targetteam == -1) // auto + { self.killindicator.colormod = '0 1 0'; + if(clienttype(self) == CLIENTTYPE_REAL) + if(self.killindicator.cnt > 0) + Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "Changing team in %d seconds", 1, self.killindicator.cnt); + } else if(targetteam == -2) // spectate + { self.killindicator.colormod = '0.5 0.5 0.5'; + if(clienttype(self) == CLIENTTYPE_REAL) + if(self.killindicator.cnt > 0) + Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "Spectating in %d seconds", 1, self.killindicator.cnt); + } else + { self.killindicator.colormod = TeamColor(targetteam); + if(clienttype(self) == CLIENTTYPE_REAL) + if(self.killindicator.cnt > 0) + Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, strcat("Changing to ", ColoredTeamName(targetteam), " in %d seconds"), 1, self.killindicator.cnt); + } } + } void ClientKill (void) @@ -1675,8 +1690,6 @@ void ClientConnect (void) bprint("\n"); - self.welcomemessage_time = 0; - stuffcmd(self, strcat(clientstuff, "\n")); stuffcmd(self, strcat("exec maps/", mapname, ".cfg\n")); stuffcmd(self, "cl_particles_reloadeffects\n"); @@ -1790,6 +1803,9 @@ void ClientConnect (void) set_dom_state(self); CheatInitClient(); + + if(!autocvar_g_campaign) + Send_CSQC_Centerprint_Generic(self, CPID_MOTD, getwelcomemessage(), autocvar_welcome_message_time, 0); } /* @@ -1985,48 +2001,7 @@ void play_countdown(float finished, string samp) if(clienttype(self) == CLIENTTYPE_REAL) if(floor(finished - time - frametime) != floor(finished - time)) if(finished - time < 6) - sound (self, CHAN_AUTO, samp, VOL_BASE, ATTN_NORM); -} - -/** - * When sv_timeout is used this function returs strings like - * "Timeout begins in 2 seconds!\n" or "Timeout ends in 23 seconds!\n". - * Called by centerprint functions - * @param addOneSecond boolean, set to 1 if the welcome-message centerprint asks for the text - */ -string getTimeoutText(float addOneSecond) { - if (!autocvar_sv_timeout || !timeoutStatus) - return ""; - - local string retStr; - if (timeoutStatus == 1) { - if (addOneSecond == 1) { - retStr = strcat("Timeout begins in ", ftos(remainingLeadTime + 1), " seconds!\n"); - } - else { - retStr = strcat("Timeout begins in ", ftos(remainingLeadTime), " seconds!\n"); - } - return retStr; - } - else if (timeoutStatus == 2) { - if (addOneSecond) { - retStr = strcat("Timeout ends in ", ftos(remainingTimeoutTime + 1), " seconds!\n"); - //don't show messages like "Timeout ends in 0 seconds"... - if ((remainingTimeoutTime + 1) > 0) - return retStr; - else - return ""; - } - else { - retStr = strcat("Timeout ends in ", ftos(remainingTimeoutTime), " seconds!\n"); - //don't show messages like "Timeout ends in 0 seconds"... - if (remainingTimeoutTime > 0) - return retStr; - else - return ""; - } - } - else return ""; + sound (self, CH_INFO, samp, VOL_BASE, ATTN_NORM); } void player_powerups (void) @@ -2036,12 +2011,12 @@ void player_powerups (void) if((self.items & IT_USING_JETPACK) && !self.deadflag) { - SoundEntity_StartSound(self, CHAN_PLAYER, "misc/jetpack_fly.wav", VOL_BASE, autocvar_g_jetpack_attenuation); + SoundEntity_StartSound(self, CH_TRIGGER_SINGLE, "misc/jetpack_fly.wav", VOL_BASE, autocvar_g_jetpack_attenuation); self.modelflags |= MF_ROCKET; } else { - SoundEntity_StopSound(self, CHAN_PLAYER); + SoundEntity_StopSound(self, CH_TRIGGER_SINGLE); self.modelflags &~= MF_ROCKET; } @@ -2497,7 +2472,8 @@ void LeaveSpectatorMode() bprint ("^4", self.netname, "^4 is playing now\n"); if(!autocvar_g_campaign) - centerprint(self,""); // clear MOTD + if (time < self.jointime + autocvar_welcome_message_time) + Send_CSQC_Centerprint_Generic_Expire(self, CPID_MOTD); // clear MOTD return; } else { @@ -2510,7 +2486,7 @@ void LeaveSpectatorMode() } else { //player may not join because of g_maxplayers is set - centerprint_atprio(self, CENTERPRIO_MAPVOTE, PREVENT_JOIN_TEXT); + centerprint(self, PREVENT_JOIN_TEXT); } } @@ -2561,11 +2537,9 @@ void ObserverThink() { if (self.flags & FL_JUMPRELEASED) { if (self.BUTTON_JUMP && !self.version_mismatch) { - self.welcomemessage_time = 0; self.flags &~= FL_JUMPRELEASED; self.flags |= FL_SPAWNING; } else if(self.BUTTON_ATCK && !self.version_mismatch) { - self.welcomemessage_time = 0; self.flags &~= FL_JUMPRELEASED; if(SpectateNext() == 1) { self.classname = "spectator"; @@ -2582,18 +2556,15 @@ void ObserverThink() } } } - PrintWelcomeMessage(self); } void SpectatorThink() { if (self.flags & FL_JUMPRELEASED) { if (self.BUTTON_JUMP && !self.version_mismatch) { - self.welcomemessage_time = 0; self.flags &~= FL_JUMPRELEASED; self.flags |= FL_SPAWNING; } else if(self.BUTTON_ATCK) { - self.welcomemessage_time = 0; self.flags &~= FL_JUMPRELEASED; if(SpectateNext() == 1) { self.classname = "spectator"; @@ -2602,7 +2573,6 @@ void SpectatorThink() PutClientInServer(); } } else if (self.BUTTON_ATCK2) { - self.welcomemessage_time = 0; self.flags &~= FL_JUMPRELEASED; self.classname = "observer"; PutClientInServer(); @@ -2624,7 +2594,6 @@ void SpectatorThink() PutObserverInServer(); } - PrintWelcomeMessage(self); self.flags |= FL_CLIENT | FL_NOTARGET; } @@ -2660,6 +2629,7 @@ Called every frame for each client before the physics are run void() ctf_setstatus; void() nexball_setstatus; .float items_added; +.float motd_actived_time; // used for both motd and campaign_message void PlayerPreThink (void) { WarpZone_PlayerPhysics_FixVAngle(); @@ -2738,14 +2708,46 @@ void PlayerPreThink (void) PlayerUseKey(); self.usekeypressed = self.BUTTON_USE; + if (self.motd_actived_time == 0) { + if (autocvar_g_campaign) { + if (self.classname == "player" && self.BUTTON_INFO) { + self.motd_actived_time = time; + Send_CSQC_Centerprint_Generic(self, CPID_MOTD, campaign_message, -1, 0); + } + } else { + if ((self.classname == "player" || time - self.jointime > autocvar_welcome_message_time) && self.BUTTON_INFO) { + self.motd_actived_time = time; + Send_CSQC_Centerprint_Generic(self, CPID_MOTD, getwelcomemessage(), -1, 0); + } + } + } else { // showing MOTD or campaign message + if (autocvar_g_campaign) { + if (self.classname == "player") { + if (self.BUTTON_INFO) + self.motd_actived_time = time; + else if (time - self.motd_actived_time > 2) { // hide it some seconds after BUTTON_INFO has been released + self.motd_actived_time = 0; + Send_CSQC_Centerprint_Generic_Expire(self, CPID_MOTD); + } + } + } else { + if (self.classname == "player" || (time - self.jointime) > autocvar_welcome_message_time) { + if (self.BUTTON_INFO) + self.motd_actived_time = time; + else if (time - self.motd_actived_time > 2) { // hide it some seconds after BUTTON_INFO has been released + self.motd_actived_time = 0; + Send_CSQC_Centerprint_Generic_Expire(self, CPID_MOTD); + } + } + } + } + if(self.classname == "player") { // if(self.netname == "Wazat") // bprint(self.classname, "\n"); CheckRules_Player(); - PrintWelcomeMessage(self); - if (intermission_running) { IntermissionThink (); // otherwise a button could be missed between @@ -2801,6 +2803,9 @@ void PlayerPreThink (void) player_powerups(); } + if (g_minstagib) + minstagib_ammocheck(); + if (self.deadflag != DEAD_NO) { float button_pressed, force_respawn; @@ -2848,6 +2853,8 @@ void PlayerPreThink (void) } return; } + // FIXME from now on self.deadflag is always 0 (and self.health is never < 1) + // so (self.deadflag == DEAD_NO) is always true in the code below if(g_touchexplode) if(time > self.touchexplode_time) @@ -2959,9 +2966,6 @@ void PlayerPreThink (void) if(frametime) player_anim(); - if (g_minstagib) - minstagib_ammocheck(); - if(g_ctf) ctf_setstatus(); @@ -3009,7 +3013,7 @@ void PlayerPreThink (void) oldself = self; self = self.teamkill_soundsource; oldpusher = self.pusher; self.pusher = oldself; - PlayerSound(playersound_teamshoot, CHAN_VOICE, VOICETYPE_LASTATTACKER_ONLY); + PlayerSound(playersound_teamshoot, CH_VOICE, VOICETYPE_LASTATTACKER_ONLY); self.pusher = oldpusher; self = oldself; @@ -3019,7 +3023,7 @@ void PlayerPreThink (void) if(time > self.taunt_soundtime) { self.taunt_soundtime = 0; - PlayerSound(playersound_taunt, CHAN_VOICE, VOICETYPE_AUTOTAUNT); + PlayerSound(playersound_taunt, CH_VOICE, VOICETYPE_AUTOTAUNT); } target_voicescript_next(self); @@ -3088,7 +3092,21 @@ void PlayerPostThink (void) { // WORKAROUND: only use dropclient in server frames (frametime set). Never use it in cl_movement frames (frametime zero). float timeleft; + if (time - self.parm_idlesince < 1) // instead of (time == self.parm_idlesince) to support sv_maxidle <= 10 + { + if(self.idlekick_lasttimeleft) + { + Send_CSQC_Centerprint_Generic_Expire(self, CPID_DISCONNECT_IDLING); + self.idlekick_lasttimeleft = 0; + } + return; + } timeleft = ceil(sv_maxidle - (time - self.parm_idlesince)); + if(timeleft == min(10, sv_maxidle - 1)) // - 1 to support sv_maxidle <= 10 + { + if(!self.idlekick_lasttimeleft) + Send_CSQC_Centerprint_Generic(self, CPID_DISCONNECT_IDLING, "^3Stop idling!\n^3Disconnecting in %d seconds...", 1, timeleft); + } if(timeleft <= 0) { bprint("^3", self.netname, "^3 was kicked for idling.\n"); @@ -3099,16 +3117,9 @@ void PlayerPostThink (void) else if(timeleft <= 10) { if(timeleft != self.idlekick_lasttimeleft) - { - centerprint_atprio(self, CENTERPRIO_IDLEKICK, strcat("^3Stop idling!\n^3Disconnecting in ", ftos(timeleft), "...")); - AnnounceTo(self, strcat(ftos(timeleft), "")); - } + AnnounceTo(self, ftos(timeleft)); + self.idlekick_lasttimeleft = timeleft; } - else - { - centerprint_expire(self, CENTERPRIO_IDLEKICK); - } - self.idlekick_lasttimeleft = timeleft; } #ifdef TETRIS @@ -3133,7 +3144,7 @@ void PlayerPostThink (void) } else if (self.classname == "spectator") { //do nothing } - + /* float i; for(i = 0; i < 1000; ++i) @@ -3174,7 +3185,8 @@ void PlayerPostThink (void) else { if(self.showheadshotbbox) - remove(self.showheadshotbbox); + if(self.showheadshotbbox && !wasfreed(self.showheadshotbbox)) + remove(self.showheadshotbbox); } playerdemo_write();