X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_client.qc;h=a4df63edc99917ff69da8acbe4cfca7f739b23c3;hp=1ab2b7ab512ea82d0b7368fdec781a2124d97a73;hb=d6e1aa437e7eb8e182053cf17231597e79df0f81;hpb=fcf7fbf067d9cd2e8d5094c34e56a087af6d97d5 diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 1ab2b7ab51..a4df63edc9 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -167,7 +167,7 @@ void PutObserverInServer (void) MUTATOR_CALLHOOK(MakePlayerObserver); Portal_ClearAll(self); - + if(self.alivetime) { if(!warmup_stage) @@ -176,16 +176,18 @@ void PutObserverInServer (void) } if(self.vehicle) - vehicles_exit(VHEF_RELESE); + vehicles_exit(VHEF_RELESE); WaypointSprite_PlayerDead(); - if not(g_ca) // don't reset teams when moving a ca player to the spectators + if (!g_ca) // don't reset teams when moving a ca player to the spectators self.team = -1; // move this as it is needed to log the player spectating in eventlog if(self.killcount != -666) { Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_QUIT_SPECTATE, self.netname); + if(autocvar_g_chat_nospectators == 1 || (cvar("g_warmup") && !(warmup_stage || gameover) && autocvar_g_chat_nospectators == 2)) + Send_Notification(NOTIF_ONE_ONLY, self, MSG_INFO, INFO_CHAT_NOSPECTATORS); if(self.just_joined == FALSE) { LogTeamchange(self.playerid, -1, 4); @@ -198,7 +200,7 @@ void PutObserverInServer (void) accuracy_resend(self); self.spectatortime = time; - + self.classname = "observer"; self.iscreature = FALSE; self.teleportable = TELEPORT_SIMPLE; @@ -281,7 +283,7 @@ void FixPlayermodel() if(teamplay) { string s; - s = Team_ColorName_Lower(self.team); + s = Static_Team_ColorName_Lower(self.team); if(s != "neutral") { defaultmodel = cvar_string(strcat("sv_defaultplayermodel_", s)); @@ -400,6 +402,9 @@ void PutClientInServer (void) RemoveGrapplingHook(self); // Wazat's Grappling Hook + if(self.vehicle) + vehicles_exit(VHEF_RELESE); + self.classname = "player"; self.wasplayer = TRUE; self.iscreature = TRUE; @@ -423,11 +428,11 @@ void PutClientInServer (void) self.effects |= EF_TELEPORT_BIT | EF_RESTARTANIM_BIT; self.air_finished = time + 12; self.dmg = 2; - if(autocvar_g_balance_nex_charge) + if(WEP_CVAR(vortex, charge)) { - if(autocvar_g_balance_nex_secondary_chargepool) - self.nex_chargepool_ammo = 1; - self.nex_charge = autocvar_g_balance_nex_charge_start; + if(WEP_CVAR_SEC(vortex, chargepool)) + self.vortex_chargepool_ammo = 1; + self.vortex_charge = WEP_CVAR(vortex, charge_start); } if(warmup_stage) @@ -458,13 +463,13 @@ void PutClientInServer (void) else self.superweapons_finished = 0; - if(g_weaponarena_random) + if(g_weaponarena_random) // WEAPONTODO: more stuff that should be in a mutator. also: rename those cvars { if(g_weaponarena_random_with_laser) - self.weapons &= ~WEPSET_LASER; + self.weapons &= ~WEPSET_BLASTER; W_RandomWeapons(self, g_weaponarena_random); if(g_weaponarena_random_with_laser) - self.weapons |= WEPSET_LASER; + self.weapons |= WEPSET_BLASTER; } self.items = start_items; @@ -538,6 +543,9 @@ void PutClientInServer (void) self.event_damage = PlayerDamage; self.bot_attack = TRUE; + self.monster_attack = TRUE; + + self.spider_slowness = 0; self.statdraintime = time + 5; self.BUTTON_ATCK = self.BUTTON_JUMP = self.BUTTON_ATCK2 = 0; @@ -558,19 +566,19 @@ void PutClientInServer (void) //stuffcmd(self, "chase_active 0"); //stuffcmd(self, "set viewsize $tmpviewsize \n"); - + target_voicescript_clear(self); // reset fields the weapons may use for (j = WEP_FIRST; j <= WEP_LAST; ++j) { - weapon_action(j, WR_RESETPLAYER); + WEP_ACTION(j, WR_RESETPLAYER); // all weapons must be fully loaded when we spawn entity e; e = get_weaponinfo(j); if(e.spawnflags & WEP_FLAG_RELOADABLE) // prevent accessing undefined cvars - self.(weapon_load[j]) = cvar(strcat("g_balance_", e.netname, "_reload_ammo")); + self.(weapon_load[j]) = e.reloading_ammo; } oldself = self; @@ -622,30 +630,27 @@ float ClientInit_SendEntity(entity to, float sf) WriteInt24_t(MSG_ENTITY, compressShotOrigin(hook_shotorigin[1])); WriteInt24_t(MSG_ENTITY, compressShotOrigin(hook_shotorigin[2])); WriteInt24_t(MSG_ENTITY, compressShotOrigin(hook_shotorigin[3])); - WriteInt24_t(MSG_ENTITY, compressShotOrigin(electro_shotorigin[0])); - WriteInt24_t(MSG_ENTITY, compressShotOrigin(electro_shotorigin[1])); - WriteInt24_t(MSG_ENTITY, compressShotOrigin(electro_shotorigin[2])); - WriteInt24_t(MSG_ENTITY, compressShotOrigin(electro_shotorigin[3])); - WriteInt24_t(MSG_ENTITY, compressShotOrigin(gauntlet_shotorigin[0])); - WriteInt24_t(MSG_ENTITY, compressShotOrigin(gauntlet_shotorigin[1])); - WriteInt24_t(MSG_ENTITY, compressShotOrigin(gauntlet_shotorigin[2])); - WriteInt24_t(MSG_ENTITY, compressShotOrigin(gauntlet_shotorigin[3])); + WriteInt24_t(MSG_ENTITY, compressShotOrigin(arc_shotorigin[0])); + WriteInt24_t(MSG_ENTITY, compressShotOrigin(arc_shotorigin[1])); + WriteInt24_t(MSG_ENTITY, compressShotOrigin(arc_shotorigin[2])); + WriteInt24_t(MSG_ENTITY, compressShotOrigin(arc_shotorigin[3])); + if(sv_foginterval && world.fog != "") WriteString(MSG_ENTITY, world.fog); else WriteString(MSG_ENTITY, ""); WriteByte(MSG_ENTITY, self.count * 255.0); // g_balance_armor_blockpercent - WriteCoord(MSG_ENTITY, self.bouncefactor); // g_balance_grenadelauncher_bouncefactor - WriteCoord(MSG_ENTITY, self.bouncestop); // g_balance_grenadelauncher_bouncestop - WriteCoord(MSG_ENTITY, self.ebouncefactor); // g_balance_grenadelauncher_bouncefactor - WriteCoord(MSG_ENTITY, self.ebouncestop); // g_balance_grenadelauncher_bouncestop - WriteByte(MSG_ENTITY, autocvar_g_balance_nex_secondary); // client has to know if it should zoom or not - WriteByte(MSG_ENTITY, autocvar_g_balance_rifle_secondary); // client has to know if it should zoom or not + WriteCoord(MSG_ENTITY, self.bouncefactor); // g_balance_mortar_bouncefactor // WEAPONTODO + WriteCoord(MSG_ENTITY, self.bouncestop); // g_balance_mortar_bouncestop + WriteCoord(MSG_ENTITY, self.ebouncefactor); // g_balance_mortar_bouncefactor + WriteCoord(MSG_ENTITY, self.ebouncestop); // g_balance_mortar_bouncestop + WriteByte(MSG_ENTITY, WEP_CVAR(vortex, secondary)); // client has to know if it should zoom or not // WEAPONTODO + WriteByte(MSG_ENTITY, WEP_CVAR(rifle, secondary)); // client has to know if it should zoom or not // WEAPONTODO WriteByte(MSG_ENTITY, serverflags); // client has to know if it should zoom or not - WriteByte(MSG_ENTITY, autocvar_g_balance_minelayer_limit); // minelayer max mines - WriteByte(MSG_ENTITY, autocvar_g_balance_hagar_secondary_load_max); // hagar max loadable rockets + WriteByte(MSG_ENTITY, WEP_CVAR(minelayer, limit)); // minelayer max mines // WEAPONTODO + WriteByte(MSG_ENTITY, WEP_CVAR_SEC(hagar, load_max)); // hagar max loadable rockets // WEAPONTODO WriteCoord(MSG_ENTITY, autocvar_g_trueaim_minrange); - WriteByte(MSG_ENTITY, autocvar_g_balance_porto_secondary); + WriteByte(MSG_ENTITY, WEP_CVAR(porto, secondary)); // WEAPONTODO return TRUE; } @@ -657,14 +662,14 @@ void ClientInit_CheckUpdate() self.count = autocvar_g_balance_armor_blockpercent; self.SendFlags |= 1; } - if(self.bouncefactor != autocvar_g_balance_grenadelauncher_bouncefactor) + if(self.bouncefactor != autocvar_g_balance_mortar_bouncefactor) // WEAPONTODO { - self.bouncefactor = autocvar_g_balance_grenadelauncher_bouncefactor; + self.bouncefactor = autocvar_g_balance_mortar_bouncefactor; self.SendFlags |= 1; } - if(self.bouncestop != autocvar_g_balance_grenadelauncher_bouncestop) + if(self.bouncestop != autocvar_g_balance_mortar_bouncestop) { - self.bouncestop = autocvar_g_balance_grenadelauncher_bouncestop; + self.bouncestop = autocvar_g_balance_mortar_bouncestop; self.SendFlags |= 1; } if(self.ebouncefactor != autocvar_g_balance_electro_secondary_bouncefactor) @@ -766,7 +771,7 @@ void ClientKill_Now() if(!self.killindicator_teamchange) { self.vehicle_health = -1; - Damage(self, self, self, 1 , DEATH_KILL, self.origin, '0 0 0'); + Damage(self, self, self, 1 , DEATH_KILL, self.origin, '0 0 0'); } } @@ -934,7 +939,7 @@ void ClientKill (void) if(gameover) return; if(self.player_blocked) return; if(self.freezetag_frozen) return; - + ClientKill_TeamChange(0); } @@ -984,7 +989,7 @@ float PlayerInIDList(entity p, string idlist) string s; // NOTE: we do NOT check crypto_keyfp here, an unsigned ID is fine too for this - if not(p.crypto_idfp) + if (!p.crypto_idfp) return 0; // this function allows abbreviated player IDs too! @@ -1193,13 +1198,7 @@ void ClientConnect (void) if(!sv_foginterval && world.fog != "") stuffcmd(self, strcat("\nfog ", world.fog, "\nr_fog_exp2 0\nr_drawfog 1\n")); - 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); - fputs(self.hitplotfh, strcat("#name ", self.netname, "\n")); - } - else - self.hitplotfh = -1; + W_HitPlotOpen(self); if(g_race || g_cts) { string rr; @@ -1249,7 +1248,7 @@ void ClientDisconnect (void) if(self.vehicle) vehicles_exit(VHEF_RELESE); - if not(IS_CLIENT(self)) + if (!IS_CLIENT(self)) { print("Warning: ClientDisconnect without ClientConnect\n"); return; @@ -1259,11 +1258,7 @@ void ClientDisconnect (void) CheatShutdownClient(); - if(self.hitplotfh >= 0) - { - fclose(self.hitplotfh); - self.hitplotfh = -1; - } + W_HitPlotClose(self); anticheat_report(); anticheat_shutdown(); @@ -1277,7 +1272,7 @@ void ClientDisconnect (void) if(autocvar_sv_eventlog) GameLogEcho(strcat(":part:", ftos(self.playerid))); - + Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_QUIT_DISCONNECT, self.netname); MUTATOR_CALLHOOK(ClientDisconnect); @@ -1417,7 +1412,7 @@ void player_powerups (void) // add a way to see what the items were BEFORE all of these checks for the mutator hook olditems = self.items; - if((self.items & IT_USING_JETPACK) && !self.deadflag) + if((self.items & IT_USING_JETPACK) && !self.deadflag && !gameover) self.modelflags |= MF_ROCKET; else self.modelflags &= ~MF_ROCKET; @@ -1430,7 +1425,7 @@ void player_powerups (void) Fire_ApplyDamage(self); Fire_ApplyEffect(self); - if not(g_minstagib) + if (!g_minstagib) { if (self.items & IT_STRENGTH) { @@ -1516,7 +1511,7 @@ void player_powerups (void) self.superweapons_finished = 0; } } - + if(autocvar_g_nodepthtestplayers) self.effects = self.effects | EF_NODEPTHTEST; @@ -1577,44 +1572,42 @@ float CalcRotRegen(float current, float regenstable, float regenfactor, float re void player_regen (void) { - float minh, mina, minf, maxh, maxa, maxf, limith, limita, limitf, max_mod, regen_mod, rot_mod, limit_mod; - maxh = autocvar_g_balance_health_rotstable; - maxa = autocvar_g_balance_armor_rotstable; - maxf = autocvar_g_balance_fuel_rotstable; - minh = autocvar_g_balance_health_regenstable; - mina = autocvar_g_balance_armor_regenstable; - minf = autocvar_g_balance_fuel_regenstable; - limith = autocvar_g_balance_health_limit; - limita = autocvar_g_balance_armor_limit; - limitf = autocvar_g_balance_fuel_limit; - - max_mod = regen_mod = rot_mod = limit_mod = 1; - - maxh = maxh * max_mod; - //maxa = maxa * max_mod; - //maxf = maxf * max_mod; - minh = minh * max_mod; - //mina = mina * max_mod; - //minf = minf * max_mod; - limith = limith * limit_mod; - limita = limita * limit_mod; - //limitf = limitf * limit_mod; - - if(g_ca) - rot_mod = 0; - - if (!g_minstagib && !g_ca && (!g_lms || autocvar_g_lms_regenerate)) + if(!MUTATOR_CALLHOOK(PlayerRegen)) { + float minh, mina, maxh, maxa, limith, limita, max_mod, regen_mod, rot_mod, limit_mod; + maxh = autocvar_g_balance_health_rotstable; + maxa = autocvar_g_balance_armor_rotstable; + minh = autocvar_g_balance_health_regenstable; + mina = autocvar_g_balance_armor_regenstable; + limith = autocvar_g_balance_health_limit; + limita = autocvar_g_balance_armor_limit; + + max_mod = regen_mod = rot_mod = limit_mod = 1; + + maxh = maxh * max_mod; + minh = minh * max_mod; + limith = limith * limit_mod; + limita = limita * limit_mod; + self.armorvalue = CalcRotRegen(self.armorvalue, mina, autocvar_g_balance_armor_regen, autocvar_g_balance_armor_regenlinear, regen_mod * frametime * (time > self.pauseregen_finished), maxa, autocvar_g_balance_armor_rot, autocvar_g_balance_armor_rotlinear, rot_mod * frametime * (time > self.pauserotarmor_finished), limita); self.health = CalcRotRegen(self.health, minh, autocvar_g_balance_health_regen, autocvar_g_balance_health_regenlinear, regen_mod * frametime * (time > self.pauseregen_finished), maxh, autocvar_g_balance_health_rot, autocvar_g_balance_health_rotlinear, rot_mod * frametime * (time > self.pauserothealth_finished), limith); - - // if player rotted to death... die! - if(self.health < 1) - self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0'); } - if not(self.items & IT_UNLIMITED_WEAPON_AMMO) - self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, regen_mod * frametime * (time > self.pauseregen_finished) * ((self.items & IT_FUEL_REGEN) != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, rot_mod * frametime * (time > self.pauserotfuel_finished), limitf); + // if player rotted to death... die! + // check this outside above checks, as player may still be able to rot to death + if(self.health < 1) + self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0'); + + if (!(self.items & IT_UNLIMITED_WEAPON_AMMO)) + { + float minf, maxf, limitf; + + maxf = autocvar_g_balance_fuel_rotstable; + minf = autocvar_g_balance_fuel_regenstable; + limitf = autocvar_g_balance_fuel_limit; + + self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, frametime * (time > self.pauseregen_finished) * ((self.items & IT_FUEL_REGEN) != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, frametime * (time > self.pauserotfuel_finished), limitf); + } } float zoomstate_set; @@ -1713,8 +1706,8 @@ void SpectateCopy(entity spectatee) { self.switchweapon = spectatee.switchweapon; self.switchingweapon = spectatee.switchingweapon; self.weapon = spectatee.weapon; - self.nex_charge = spectatee.nex_charge; - self.nex_chargepool_ammo = spectatee.nex_chargepool_ammo; + self.vortex_charge = spectatee.vortex_charge; + self.vortex_chargepool_ammo = spectatee.vortex_chargepool_ammo; self.hagar_load = spectatee.hagar_load; self.minelayer_mines = spectatee.minelayer_mines; self.punchangle = spectatee.punchangle; @@ -1730,7 +1723,7 @@ void SpectateCopy(entity spectatee) { setorigin(self, spectatee.origin); setsize(self, spectatee.mins, spectatee.maxs); SetZoomState(spectatee.zoomstate); - + anticheat_spectatecopy(spectatee); self.hud = spectatee.hud; if(spectatee.vehicle) @@ -1746,27 +1739,27 @@ void SpectateCopy(entity spectatee) { self.vehicle_reload2 = spectatee.vehicle_reload2; msg_entity = self; - + 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); + // WriteEntity(MSG_ONE, self); //makevectors(spectatee.v_angle); - //setorigin(self, spectatee.origin - v_forward * 400 + v_up * 300);*/ + //setorigin(self, spectatee.origin - v_forward * 400 + v_up * 300);*/ } } float SpectateUpdate() { if(!self.enemy) - return 0; + return 0; if (self == self.enemy) return 0; - if not(IS_PLAYER(self.enemy)) + if (!IS_PLAYER(self.enemy)) return 0; SpectateCopy(self.enemy); @@ -1820,13 +1813,13 @@ entity CA_SpectateNext(entity start) { if (start.team == self.team) { return start; } - + other = start; // continue from current player while(other && other.team != self.team) { other = find(other, classname, "player"); } - + if (!other) { // restart from begining other = find(other, classname, "player"); @@ -1834,7 +1827,7 @@ entity CA_SpectateNext(entity start) { other = find(other, classname, "player"); } } - + return other; } @@ -1861,7 +1854,7 @@ float SpectatePrev() { // NOTE: chain order is from the highest to the lower entnum (unlike find) other = findchain(classname, "player"); - if not(other) // no player + if (!other) // no player return FALSE; entity first = other; @@ -1875,7 +1868,7 @@ float SpectatePrev() do { other = other.chain; } while(other && other.team != self.team); - if not(other) + if (!other) { other = first; while(other.team != self.team) @@ -2135,7 +2128,7 @@ void SpectatorThink() void PlayerUseKey() { - if not(IS_PLAYER(self)) + if (!IS_PLAYER(self)) return; if(self.vehicle) @@ -2143,7 +2136,7 @@ void PlayerUseKey() vehicles_exit(VHEF_NORMAL); return; } - + // a use key was pressed; call handlers MUTATOR_CALLHOOK(PlayerUseKey); } @@ -2268,17 +2261,17 @@ void PlayerPreThink (void) if(frametime) { - if(self.weapon == WEP_NEX && autocvar_g_balance_nex_charge) + if(self.weapon == WEP_VORTEX && WEP_CVAR(vortex, charge)) { - self.weaponentity_glowmod_x = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_animlimit); - self.weaponentity_glowmod_y = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_animlimit); - self.weaponentity_glowmod_z = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_animlimit); + self.weaponentity_glowmod_x = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_half * min(1, self.vortex_charge / WEP_CVAR(vortex, charge_animlimit)); + self.weaponentity_glowmod_y = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_half * min(1, self.vortex_charge / WEP_CVAR(vortex, charge_animlimit)); + self.weaponentity_glowmod_z = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_half * min(1, self.vortex_charge / WEP_CVAR(vortex, charge_animlimit)); - if(self.nex_charge > autocvar_g_balance_nex_charge_animlimit) + if(self.vortex_charge > WEP_CVAR(vortex, charge_animlimit)) { - self.weaponentity_glowmod_x = self.weaponentity_glowmod_x + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_full * (self.nex_charge - autocvar_g_balance_nex_charge_animlimit) / (1 - autocvar_g_balance_nex_charge_animlimit); - self.weaponentity_glowmod_y = self.weaponentity_glowmod_y + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_full * (self.nex_charge - autocvar_g_balance_nex_charge_animlimit) / (1 - autocvar_g_balance_nex_charge_animlimit); - self.weaponentity_glowmod_z = self.weaponentity_glowmod_z + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_full * (self.nex_charge - autocvar_g_balance_nex_charge_animlimit) / (1 - autocvar_g_balance_nex_charge_animlimit); + self.weaponentity_glowmod_x = self.weaponentity_glowmod_x + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_full * (self.vortex_charge - WEP_CVAR(vortex, charge_animlimit)) / (1 - WEP_CVAR(vortex, charge_animlimit)); + self.weaponentity_glowmod_y = self.weaponentity_glowmod_y + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_full * (self.vortex_charge - WEP_CVAR(vortex, charge_animlimit)) / (1 - WEP_CVAR(vortex, charge_animlimit)); + self.weaponentity_glowmod_z = self.weaponentity_glowmod_z + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_full * (self.vortex_charge - WEP_CVAR(vortex, charge_animlimit)) / (1 - WEP_CVAR(vortex, charge_animlimit)); } } else @@ -2305,10 +2298,10 @@ void PlayerPreThink (void) if(frametime) player_anim(); button_pressed = (self.BUTTON_ATCK || self.BUTTON_JUMP || self.BUTTON_ATCK2 || self.BUTTON_HOOK || self.BUTTON_USE); - + if (self.deadflag == DEAD_DYING) { - if(self.respawn_flags & RESPAWN_FORCE) + if((self.respawn_flags & RESPAWN_FORCE) && !autocvar_g_respawn_delay_max) self.deadflag = DEAD_RESPAWNING; else if(!button_pressed) self.deadflag = DEAD_DEAD; @@ -2317,6 +2310,8 @@ void PlayerPreThink (void) { if(button_pressed) self.deadflag = DEAD_RESPAWNABLE; + else if(time >= self.respawn_time_max && (self.respawn_flags & RESPAWN_FORCE)) + self.deadflag = DEAD_RESPAWNING; } else if (self.deadflag == DEAD_RESPAWNABLE) { @@ -2328,6 +2323,7 @@ void PlayerPreThink (void) if(time > self.respawn_time) { self.respawn_time = time + 1; // only retry once a second + self.respawn_time_max = self.respawn_time; respawn(); } } @@ -2336,6 +2332,8 @@ void PlayerPreThink (void) if(self.respawn_flags & RESPAWN_SILENT) self.stat_respawn_time = 0; + else if((self.respawn_flags & RESPAWN_FORCE) && autocvar_g_respawn_delay_max) + self.stat_respawn_time = self.respawn_time_max; else self.stat_respawn_time = self.respawn_time; } @@ -2356,7 +2354,10 @@ void PlayerPreThink (void) do_crouch = 0; if(self.freezetag_frozen) do_crouch = 0; - if(self.weapon == WEP_SHOTGUN && self.weaponentity.wframe == WFRAME_FIRE2 && time < self.weapon_nextthink) + + // WEAPONTODO: THIS SHIT NEEDS TO GO EVENTUALLY + // It cannot be predicted by the engine! + if((self.weapon == WEP_SHOCKWAVE || self.weapon == WEP_SHOTGUN) && self.weaponentity.wframe == WFRAME_FIRE2 && time < self.weapon_nextthink) do_crouch = 0; if (do_crouch) @@ -2404,16 +2405,20 @@ void PlayerPreThink (void) player_regen(); + // WEAPONTODO: Add a weapon request for this // rot nex charge to the charge limit - if(autocvar_g_balance_nex_charge_rot_rate && self.nex_charge > autocvar_g_balance_nex_charge_limit && self.nex_charge_rottime < time) - self.nex_charge = bound(autocvar_g_balance_nex_charge_limit, self.nex_charge - autocvar_g_balance_nex_charge_rot_rate * frametime / W_TICSPERFRAME, 1); + if(WEP_CVAR(vortex, charge_rot_rate) && self.vortex_charge > WEP_CVAR(vortex, charge_limit) && self.vortex_charge_rottime < time) + self.vortex_charge = bound(WEP_CVAR(vortex, charge_limit), self.vortex_charge - WEP_CVAR(vortex, charge_rot_rate) * frametime / W_TICSPERFRAME, 1); if(frametime) player_anim(); - + // secret status secrets_setstatus(); - + + // monsters status + monsters_setstatus(); + self.dmg_team = max(0, self.dmg_team - autocvar_g_teamdamage_resetspeed * frametime); //self.angles_y=self.v_angle_y + 90; // temp @@ -2427,8 +2432,9 @@ void PlayerPreThink (void) SpectatorThink(); } + // WEAPONTODO: Add weapon request for this if(!zoomstate_set) - SetZoomState(self.BUTTON_ZOOM || self.BUTTON_ZOOMSCRIPT || (self.BUTTON_ATCK2 && self.weapon == WEP_NEX) || (self.BUTTON_ATCK2 && self.weapon == WEP_RIFLE && autocvar_g_balance_rifle_secondary == 0)); + SetZoomState(self.BUTTON_ZOOM || self.BUTTON_ZOOMSCRIPT || (self.BUTTON_ATCK2 && self.weapon == WEP_VORTEX) || (self.BUTTON_ATCK2 && self.weapon == WEP_RIFLE && WEP_CVAR(rifle, secondary) == 0)); // WEAPONTODO float oldspectatee_status; oldspectatee_status = self.spectatee_status; @@ -2470,6 +2476,7 @@ void PlayerPreThink (void) target_voicescript_next(self); + // WEAPONTODO: Move into weaponsystem somehow // if a player goes unarmed after holding a loaded weapon, empty his clip size and remove the crosshair ammo ring if(!self.weapon) self.clip_load = self.clip_size = 0; @@ -2573,7 +2580,7 @@ void PlayerPostThink (void) return; // intermission or finale GetPressedKeys(); } - + #ifdef TETRIS } #endif @@ -2603,7 +2610,7 @@ void PlayerPostThink (void) if((g_cts || g_race) && self.cvar_cl_allow_uidtracking == 1 && self.cvar_cl_allow_uid2name == 1) { - if not(self.stored_netname) + if (!self.stored_netname) self.stored_netname = strzone(uid2name(self.crypto_idfp)); if(self.stored_netname != self.netname) { @@ -2615,7 +2622,7 @@ void PlayerPostThink (void) /* if(g_race) - dprint(sprintf("%f %.6f\n", time, race_GetFractionalLapCount(self))); + dprintf("%f %.6f\n", time, race_GetFractionalLapCount(self)); */ CSQCMODEL_AUTOUPDATE();