X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_client.qc;h=006db3c36b6d5e73f3c7f9b6c5a35a45121281bc;hb=fbf83f546eb4266e347f7cb51cdcf6f07444c851;hp=18922fea776ae144ad23dcdf50ded97e18be6241;hpb=7934038c339fd0f238485b8990d3a1f900b3b52d;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 18922fea7..006db3c36 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -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; @@ -472,6 +470,7 @@ void PutObserverInServer (void) self.invincible_finished = 0; self.superweapons_finished = 0; self.pushltime = 0; + self.istypefrag = 0; self.think = SUB_Null; self.nextthink = 0; self.hook_time = 0; @@ -547,15 +546,15 @@ void FixPlayermodel() vector m1, m2; defaultmodel = ""; + defaultskin = 0; + chmdl = FALSE; if(autocvar_sv_defaultcharacter == 1) { - defaultskin = 0; - 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)); @@ -640,7 +639,6 @@ PutClientInServer Called when a client spawns in the server ============= */ -//void() ctf_playerchanged; void PutClientInServer (void) { @@ -697,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; @@ -758,7 +757,7 @@ void PutClientInServer (void) { if(g_weaponarena_random_with_laser) WEPSET_ANDNOT_EW(self, WEP_LASER); - self.weapons = randombits(self.weapons, g_weaponarena_random, FALSE); + W_RandomWeapons(self, g_weaponarena_random); if(g_weaponarena_random_with_laser) WEPSET_OR_EW(self, WEP_LASER); } @@ -867,9 +866,6 @@ void PutClientInServer (void) //stuffcmd(self, "chase_active 0"); //stuffcmd(self, "set viewsize $tmpviewsize \n"); - if (autocvar_g_spawnsound) - sound (self, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM); - if(g_assault) { if(self.team == assault_attacker_team) centerprint(self, "You are attacking!"); @@ -921,12 +917,12 @@ void PutClientInServer (void) self.alivetime = time; antilag_clear(self); + + if (autocvar_g_spawnsound) + soundat(world, self.origin, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM); } else if(self.classname == "observer") { PutObserverInServer (); } - - //if(g_ctf) - // ctf_playerchanged(); } .float ebouncefactor, ebouncestop; // electro's values @@ -1069,8 +1065,7 @@ void ClientKill_Now_TeamChange() { if(self.killindicator_teamchange == -1) { - self.team = -1; - JoinBestTeam( self, FALSE, FALSE ); + JoinBestTeam( self, FALSE, TRUE ); } else if(self.killindicator_teamchange == -2) { @@ -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); @@ -1355,7 +1348,7 @@ void ClientConnect (void) return; } - if(Ban_MaybeEnforceBan(self)) + if(Ban_MaybeEnforceBanOnce(self)) return; DecodeLevelParms(); @@ -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") @@ -1439,7 +1442,7 @@ void ClientConnect (void) } else { if(teamplay) { - if(autocvar_g_balance_teams || autocvar_g_balance_teams_force) + if(autocvar_g_balance_teams) { self.classname = "player"; campaign_bots_may_start = 1; @@ -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(); @@ -1532,7 +1531,7 @@ void ClientConnect (void) if(clienttype(self) == CLIENTTYPE_REAL) { - if(autocvar_g_bugrigs || WEPSET_EQ_AW(g_weaponarena, WEP_TUBA)) + if(autocvar_g_bugrigs || WEPSET_EQ_AW(g_weaponarena_weapons, WEP_TUBA)) stuffcmd(self, "cl_cmd settemp chase_active 1\n"); } @@ -1564,7 +1563,6 @@ void ClientConnect (void) rr = CTS_RECORD; else rr = RACE_RECORD; - t = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "time"))); msg_entity = self; race_send_recordtime(MSG_ONE); @@ -1598,6 +1596,8 @@ void ClientConnect (void) return; sv_notice_join(); + + MUTATOR_CALLHOOK(ClientConnect); } /* ============= @@ -1652,8 +1652,6 @@ void ClientDisconnect (void) 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. @@ -2123,6 +2121,15 @@ void GetPressedKeys(void) { self.pressedkeys |= KEY_CROUCH; else self.pressedkeys &~= KEY_CROUCH; + + if (self.BUTTON_ATCK) + self.pressedkeys |= KEY_ATCK; + else + self.pressedkeys &~= KEY_ATCK; + if (self.BUTTON_ATCK2) + self.pressedkeys |= KEY_ATCK2; + else + self.pressedkeys &~= KEY_ATCK2; } /* @@ -2163,29 +2170,24 @@ void SpectateCopy(entity spectatee) { self.minelayer_mines = spectatee.minelayer_mines; self.punchangle = spectatee.punchangle; self.view_ofs = spectatee.view_ofs; - self.v_angle = spectatee.v_angle; self.velocity = spectatee.velocity; self.dmg_take = spectatee.dmg_take; self.dmg_save = spectatee.dmg_save; self.dmg_inflictor = spectatee.dmg_inflictor; + self.v_angle = spectatee.v_angle; self.angles = spectatee.v_angle; if(!self.BUTTON_USE) self.fixangle = TRUE; setorigin(self, spectatee.origin); setsize(self, spectatee.mins, spectatee.maxs); SetZoomState(spectatee.zoomstate); - - anticheat_spectatecopy(spectatee); - - //self.vehicle = spectatee.vehicle; - + + anticheat_spectatecopy(spectatee); self.hud = spectatee.hud; if(spectatee.vehicle) { - setorigin(self, spectatee.origin); - self.velocity = spectatee.vehicle.velocity; - self.v_angle += spectatee.vehicle.angles; - //self.v_angle_x *= -1; + self.fixangle = FALSE; + //self.velocity = spectatee.vehicle.velocity; self.vehicle_health = spectatee.vehicle_health; self.vehicle_shield = spectatee.vehicle_shield; self.vehicle_energy = spectatee.vehicle_energy; @@ -2193,11 +2195,18 @@ void SpectateCopy(entity spectatee) { self.vehicle_ammo2 = spectatee.vehicle_ammo2; self.vehicle_reload1 = spectatee.vehicle_reload1; self.vehicle_reload2 = spectatee.vehicle_reload2; - + msg_entity = self; - WriteByte (MSG_ONE, SVC_SETVIEWPORT); - WriteEntity(MSG_ONE, spectatee); - //self.tur_head = spectatee.vehicle.vehicle_viewport; + + WriteByte (MSG_ONE, SVC_SETVIEWANGLES); + WriteAngle(MSG_ONE, spectatee.v_angle_x); + WriteAngle(MSG_ONE, spectatee.v_angle_y); + WriteAngle(MSG_ONE, spectatee.v_angle_z); + + //WriteByte (MSG_ONE, SVC_SETVIEW); + // WriteEntity(MSG_ONE, self); + //makevectors(spectatee.v_angle); + //setorigin(self, spectatee.origin - v_forward * 400 + v_up * 300);*/ } } @@ -2240,8 +2249,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); @@ -2255,17 +2269,19 @@ float SpectateNext() { self.enemy = other; if(self.enemy.classname == "player") { - if(self.enemy.vehicle) + /*if(self.enemy.vehicle) { + msg_entity = self; - WriteByte(MSG_ONE, SVC_SETVIEWPORT); + WriteByte(MSG_ONE, SVC_SETVIEW); WriteEntity(MSG_ONE, self.enemy); //stuffcmd(self, "set viewsize $tmpviewsize \n"); + self.movetype = MOVETYPE_NONE; accuracy_resend(self); } else - { + {*/ msg_entity = self; WriteByte(MSG_ONE, SVC_SETVIEW); WriteEntity(MSG_ONE, self.enemy); @@ -2275,7 +2291,7 @@ float SpectateNext() { if(!SpectateUpdate()) PutObserverInServer(); - } + //} return 1; } else { return 0; @@ -2315,7 +2331,7 @@ void LeaveSpectatorMode() if(!teamplay || autocvar_g_campaign || autocvar_g_balance_teams || (self.wasplayer && autocvar_g_changeteam_banned) || self.team_forced > 0) { self.classname = "player"; - if(autocvar_g_campaign || autocvar_g_balance_teams || autocvar_g_balance_teams_force) + if(autocvar_g_campaign || autocvar_g_balance_teams) JoinBestTeam(self, FALSE, TRUE); if(autocvar_g_campaign) @@ -2377,7 +2393,7 @@ float nJoinAllowed(entity ignore) { // TODO simplify this entity e; - float totalClients; + float totalClients = 0; FOR_EACH_CLIENT(e) if(e != ignore) totalClients += 1; @@ -2385,7 +2401,7 @@ float nJoinAllowed(entity ignore) { if (!autocvar_g_maxplayers) return maxclients - totalClients; - float currentlyPlaying; + float currentlyPlaying = 0; FOR_EACH_REALPLAYER(e) currentlyPlaying += 1; @@ -2453,7 +2469,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 { @@ -2484,7 +2500,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"; @@ -2516,7 +2532,6 @@ void SpectatorThink() self.flags |= FL_CLIENT | FL_NOTARGET; } -float ctf_usekey(); void PlayerUseKey() { if(self.classname != "player") @@ -2529,9 +2544,6 @@ void PlayerUseKey() } // a use key was pressed; call handlers - if(ctf_usekey()) - return; - MUTATOR_CALLHOOK(PlayerUseKey); } @@ -2545,7 +2557,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) @@ -2782,7 +2793,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) { @@ -2843,9 +2855,6 @@ void PlayerPreThink (void) if(frametime) player_anim(); - if(g_ctf) - ctf_setstatus(); - if(g_nexball) nexball_setstatus();