X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_client.qc;h=6fb67b4f084dd36895993faf4ba1c73f0748e014;hb=7072a9dc696dc5bd2a5a2c4c706c4a2f5c0a24c5;hp=5972c06f5bade95ae7988143e2b43c2d3292d3b7;hpb=0bf8c513d709819cfed1c9aa07687f6751448c90;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 5972c06f5..6fb67b4f0 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -7,9 +7,9 @@ void send_CSQC_teamnagger() { } void Announce(string snd) { - WriteByte(MSG_ALL, SVC_TEMPENTITY); - WriteByte(MSG_ALL, TE_CSQC_ANNOUNCE); - WriteString(MSG_ALL, snd); + WriteByte(MSG_BROADCAST, SVC_TEMPENTITY); + WriteByte(MSG_BROADCAST, TE_CSQC_ANNOUNCE); + WriteString(MSG_BROADCAST, snd); } void AnnounceTo(entity e, string snd) { @@ -415,10 +415,7 @@ void PutObserverInServer (void) } if(self.vehicle) - vehicles_exit(VHEF_RELESE); - - if(self.flagcarried) - DropFlag(self.flagcarried, world, world); + vehicles_exit(VHEF_RELESE); WaypointSprite_PlayerDead(); @@ -448,6 +445,7 @@ void PutObserverInServer (void) self.classname = "observer"; self.iscreature = FALSE; + self.teleportable = TELEPORT_SIMPLE; self.damagedbycontents = FALSE; self.health = -666; self.takedamage = DAMAGE_NO; @@ -473,7 +471,7 @@ void PutObserverInServer (void) self.superweapons_finished = 0; self.pushltime = 0; self.istypefrag = 0; - self.think = SUB_Null; + self.think = func_null; self.nextthink = 0; self.hook_time = 0; self.runes = 0; @@ -556,7 +554,7 @@ void FixPlayermodel() if(teamplay) { string s; - s = Team_ColorNameLowerCase(self.team); + s = Team_ColorName_Lower(self.team); if(s != "neutral") { defaultmodel = cvar_string(strcat("sv_defaultplayermodel_", s)); @@ -641,7 +639,6 @@ PutClientInServer Called when a client spawns in the server ============= */ -//void() ctf_playerchanged; void PutClientInServer (void) { @@ -698,6 +695,7 @@ void PutClientInServer (void) self.classname = "player"; self.wasplayer = TRUE; self.iscreature = TRUE; + self.teleportable = TELEPORT_NORMAL; self.damagedbycontents = TRUE; self.movetype = MOVETYPE_WALK; self.solid = SOLID_SLIDEBOX; @@ -789,7 +787,7 @@ void PutClientInServer (void) self.invincible_finished = 0; self.pushltime = 0; // players have no think function - self.think = SUB_Null; + self.think = func_null; self.nextthink = 0; self.hook_time = 0; self.dmg_team = 0; @@ -925,9 +923,6 @@ void PutClientInServer (void) } else if(self.classname == "observer") { PutObserverInServer (); } - - //if(g_ctf) - // ctf_playerchanged(); } .float ebouncefactor, ebouncestop; // electro's values @@ -1118,7 +1113,7 @@ void KillIndicator_Think() return; } - if (self.owner.alpha < 0) + if (self.owner.alpha < 0 && !self.owner.vehicle) { self.owner.killindicator = world; remove(self); @@ -1246,10 +1241,10 @@ void ClientKill_TeamChange (float targetteam) // 0 = don't change, -1 = auto, -2 } else { - self.killindicator.colormod = TeamColor(targetteam); + self.killindicator.colormod = Team_ColorRGB(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); + Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, strcat("^7Changing to ", Team_ColoredFullName(targetteam), "^7 in %d seconds"), 1, self.killindicator.cnt); } } @@ -1291,7 +1286,7 @@ void FixClientCvars(entity e) stuffcmd(e, "cl_cmd settemp cl_movecliptokeyboard 2\n"); if(autocvar_g_antilag == 3) // client side hitscan stuffcmd(e, "cl_cmd settemp cl_prydoncursor_notrace 0\n"); - if(sv_gentle) + if(autocvar_sv_gentle) stuffcmd(e, "cl_cmd settemp cl_gentle 1\n"); /* * we no longer need to stuff this. Remove this comment block if you feel @@ -1340,8 +1335,6 @@ ClientConnect Called when a client connects to the server ============= */ -//void ctf_clientconnect(); -string ColoredTeamName(float t); void DecodeLevelParms (void); //void dom_player_join_team(entity pl); void set_dom_state(entity e); @@ -1361,7 +1354,7 @@ void ClientConnect (void) DecodeLevelParms(); #ifdef WATERMARK - sprint(self, strcat("^4SVQC Build information: ^1", WATERMARK(), "\n")); + sprint(self, strcat("^4SVQC Build information: ^1", WATERMARK, "\n")); #endif self.classname = "player_joining"; @@ -1369,6 +1362,16 @@ void ClientConnect (void) self.flags = FL_CLIENT; self.version_nagtime = time + 10 + random() * 10; + if(self.netaddress == "local") + { + print("^3server is local!\n"); + + if(server_is_local) + print("Multiple local clients???"); + else + server_is_local = TRUE; + } + if(player_count<0) { dprint("BUG player count is lower than zero, this cannot happen!\n"); @@ -1397,30 +1400,30 @@ void ClientConnect (void) { switch(autocvar_g_campaign_forceteam) { - case 1: self.team_forced = COLOR_TEAM1; break; - case 2: self.team_forced = COLOR_TEAM2; break; - case 3: self.team_forced = COLOR_TEAM3; break; - case 4: self.team_forced = COLOR_TEAM4; break; + case 1: self.team_forced = FL_TEAM_1; break; + case 2: self.team_forced = FL_TEAM_2; break; + case 3: self.team_forced = FL_TEAM_3; break; + case 4: self.team_forced = FL_TEAM_4; break; default: self.team_forced = 0; } } } else if(PlayerInIDList(self, autocvar_g_forced_team_red)) - self.team_forced = COLOR_TEAM1; + self.team_forced = FL_TEAM_1; else if(PlayerInIDList(self, autocvar_g_forced_team_blue)) - self.team_forced = COLOR_TEAM2; + self.team_forced = FL_TEAM_2; else if(PlayerInIDList(self, autocvar_g_forced_team_yellow)) - self.team_forced = COLOR_TEAM3; + self.team_forced = FL_TEAM_3; else if(PlayerInIDList(self, autocvar_g_forced_team_pink)) - self.team_forced = COLOR_TEAM4; + self.team_forced = FL_TEAM_4; else if(autocvar_g_forced_team_otherwise == "red") - self.team_forced = COLOR_TEAM1; + self.team_forced = FL_TEAM_1; else if(autocvar_g_forced_team_otherwise == "blue") - self.team_forced = COLOR_TEAM2; + self.team_forced = FL_TEAM_2; else if(autocvar_g_forced_team_otherwise == "yellow") - self.team_forced = COLOR_TEAM3; + self.team_forced = FL_TEAM_3; else if(autocvar_g_forced_team_otherwise == "pink") - self.team_forced = COLOR_TEAM4; + self.team_forced = FL_TEAM_4; else if(autocvar_g_forced_team_otherwise == "spectate") self.team_forced = -1; else if(autocvar_g_forced_team_otherwise == "spectator") @@ -1475,7 +1478,7 @@ void ClientConnect (void) bprint("^4", self.netname, "^4 connected"); if(self.classname != "observer" && (g_domination || g_ctf)) - bprint(" and joined the ", ColoredTeamName(self.team)); + bprint(" and joined the ", Team_ColoredFullName(self.team)); bprint("\n"); @@ -1512,10 +1515,6 @@ void ClientConnect (void) if(g_arena) Spawnqueue_Insert(self); } - /*else if(g_ctf) - { - ctf_clientconnect(); - }*/ attach_entcs(); @@ -1548,8 +1547,6 @@ void ClientConnect (void) if(!sv_foginterval && world.fog != "") stuffcmd(self, strcat("\nfog ", world.fog, "\nr_fog_exp2 0\nr_drawfog 1\n")); - SoundEntity_Attach(self); - if(autocvar_g_hitplots || strstrofs(strcat(" ", autocvar_g_hitplots_individuals, " "), strcat(" ", self.netaddress, " "), 0) >= 0) { self.hitplotfh = fopen(strcat("hits-", matchid, "-", self.netaddress, "-", ftos(self.playerid), ".plot"), FILE_WRITE); @@ -1597,6 +1594,8 @@ void ClientConnect (void) return; sv_notice_join(); + + MUTATOR_CALLHOOK(ClientConnect); } /* ============= @@ -1643,16 +1642,12 @@ void ClientDisconnect (void) bprint ("^4",self.netname); bprint ("^4 disconnected\n"); - SoundEntity_Detach(self); - DropAllRunes(self); MUTATOR_CALLHOOK(ClientDisconnect); Portal_ClearAll(self); RemoveGrapplingHook(self); - if(self.flagcarried) - DropFlag(self.flagcarried, world, world); // Here, everything has been done that requires this player to be a client. @@ -1792,15 +1787,9 @@ void player_powerups (void) olditems = self.items; if((self.items & IT_USING_JETPACK) && !self.deadflag) - { - SoundEntity_StartSound(self, CH_TRIGGER_SINGLE, "misc/jetpack_fly.wav", VOL_BASE, autocvar_g_jetpack_attenuation); self.modelflags |= MF_ROCKET; - } else - { - SoundEntity_StopSound(self, CH_TRIGGER_SINGLE); self.modelflags &~= MF_ROCKET; - } self.effects &~= (EF_RED | EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT | EF_FLAME | EF_NODEPTHTEST); @@ -2177,6 +2166,7 @@ void SpectateCopy(entity spectatee) { self.dmg_inflictor = spectatee.dmg_inflictor; self.v_angle = spectatee.v_angle; self.angles = spectatee.v_angle; + self.stat_respawn_time = spectatee.stat_respawn_time; if(!self.BUTTON_USE) self.fixangle = TRUE; setorigin(self, spectatee.origin); @@ -2250,8 +2240,13 @@ entity CA_SpectateNext(entity start) { return other; } -float SpectateNext() { - other = find(self.enemy, classname, "player"); +float SpectateNext(entity _prefer) { + + if(_prefer) + other = _prefer; + else + other = find(self.enemy, classname, "player"); + if (g_ca && !autocvar_g_ca_spectate_enemies && self.caplayer) { // CA and ca players when spectating enemies is forbidden other = CA_SpectateNext(other); @@ -2465,7 +2460,7 @@ void ObserverThink() self.flags |= FL_SPAWNING; } else if(self.BUTTON_ATCK && !self.version_mismatch) { self.flags &~= FL_JUMPRELEASED; - if(SpectateNext() == 1) { + if(SpectateNext(world) == 1) { self.classname = "spectator"; } } else { @@ -2496,7 +2491,7 @@ void SpectatorThink() self.flags |= FL_SPAWNING; } else if(self.BUTTON_ATCK) { self.flags &~= FL_JUMPRELEASED; - if(SpectateNext() == 1) { + if(SpectateNext(world) == 1) { self.classname = "spectator"; } else { self.classname = "observer"; @@ -2528,7 +2523,6 @@ void SpectatorThink() self.flags |= FL_CLIENT | FL_NOTARGET; } -float ctf_usekey(); void PlayerUseKey() { if(self.classname != "player") @@ -2541,9 +2535,6 @@ void PlayerUseKey() } // a use key was pressed; call handlers - if(ctf_usekey()) - return; - MUTATOR_CALLHOOK(PlayerUseKey); } @@ -2557,7 +2548,6 @@ Called every frame for each client before the physics are run ============= */ .float usekeypressed; -void() ctf_setstatus; void() nexball_setstatus; .float items_added; void PlayerPreThink (void) @@ -2568,6 +2558,11 @@ void PlayerPreThink (void) self.stat_allow_oldnexbeam = autocvar_g_allow_oldnexbeam; self.stat_leadlimit = autocvar_leadlimit; + if(g_arena || (g_ca && !allowed_to_spawn)) + self.stat_respawn_time = 0; + else + self.stat_respawn_time = self.respawn_time; + if(frametime) { // physics frames: update anticheat stuff @@ -2740,6 +2735,11 @@ void PlayerPreThink (void) } ShowRespawnCountdown(); } + + // if respawning, invert stat_respawn_time to indicate this, the client translates it + if(self.deadflag == DEAD_RESPAWNING && self.stat_respawn_time > 0) + self.stat_respawn_time *= -1; + return; } // FIXME from now on self.deadflag is always 0 (and self.health is never < 1) @@ -2794,7 +2794,8 @@ void PlayerPreThink (void) self.prevorigin = self.origin; - if (((self.BUTTON_CROUCH && !self.hook.state) || self.health <= g_bloodloss) && self.animstate_startframe != self.anim_melee_x) // prevent crouching if using melee attack + if (!self.vehicle) + if (((self.BUTTON_CROUCH && !self.hook.state) || self.health <= g_bloodloss) && self.animstate_startframe != self.anim_melee_x && !self.freezetag_frozen) // prevent crouching if using melee attack { if (!self.crouch) { @@ -2855,9 +2856,6 @@ void PlayerPreThink (void) if(frametime) player_anim(); - if(g_ctf) - ctf_setstatus(); - if(g_nexball) nexball_setstatus(); @@ -3034,10 +3032,6 @@ void PlayerPostThink (void) if (intermission_running) return; // intermission or finale GetPressedKeys(); - } else if (self.classname == "observer") { - //do nothing - } else if (self.classname == "spectator") { - //do nothing } #ifdef TETRIS @@ -3090,7 +3084,7 @@ void PlayerPostThink (void) if((g_cts || g_race) && self.cvar_cl_allow_uidtracking == 1 && self.cvar_cl_allow_uid2name == 1) { - if(!self.stored_netname) + if not(self.stored_netname) self.stored_netname = strzone(uid2name(self.crypto_idfp)); if(self.stored_netname != self.netname) {