X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fgamemodes%2Fgamemode%2Fclanarena%2Fsv_clanarena.qc;h=ba2402f2768229c8576c3399a1084bb99649b02e;hp=48755883726e4ee4a09acb64c719bbd99ba2bf9e;hb=79012b90e96396059bcc310a8a95ae38918993a4;hpb=f1ca124dd302ff19f7d18cbc0fe8f97febd94602 diff --git a/qcsrc/common/gamemodes/gamemode/clanarena/sv_clanarena.qc b/qcsrc/common/gamemodes/gamemode/clanarena/sv_clanarena.qc index 487558837..ba2402f27 100644 --- a/qcsrc/common/gamemodes/gamemode/clanarena/sv_clanarena.qc +++ b/qcsrc/common/gamemodes/gamemode/clanarena/sv_clanarena.qc @@ -147,7 +147,7 @@ bool CA_CheckTeams() bool ca_isEliminated(entity e) { - if(e.caplayer == 1 && (IS_DEAD(e) || e.frags == FRAGS_LMS_LOSER)) + if(e.caplayer == 1 && (IS_DEAD(e) || e.frags == FRAGS_PLAYER_OUT_OF_GAME)) return true; if(e.caplayer == 0.5) return true; @@ -224,7 +224,6 @@ MUTATOR_HOOKFUNCTION(ca, reset_map_players) PutClientInServer(it); } }); - bot_relinkplayerlist(); return true; } @@ -286,11 +285,7 @@ MUTATOR_HOOKFUNCTION(ca, PlayerDies) } frag_target.respawn_flags |= RESPAWN_FORCE; if (!warmup_stage) - { eliminatedPlayers.SendFlags |= 1; - if (IS_BOT_CLIENT(frag_target)) - bot_clear(frag_target); - } return true; } @@ -310,9 +305,12 @@ MUTATOR_HOOKFUNCTION(ca, MakePlayerObserver) if (IS_PLAYER(player) && !IS_DEAD(player)) ca_LastPlayerForTeam_Notify(player); if (player.killindicator_teamchange == -2) // player wants to spectate + { + entcs_update_players(player); player.caplayer = 0; + } if (player.caplayer) - player.frags = FRAGS_LMS_LOSER; + player.frags = FRAGS_PLAYER_OUT_OF_GAME; if (!warmup_stage) eliminatedPlayers.SendFlags |= 1; if (!player.caplayer) @@ -333,15 +331,15 @@ MUTATOR_HOOKFUNCTION(ca, GiveFragsForKill, CBC_ORDER_FIRST) MUTATOR_HOOKFUNCTION(ca, SetStartItems) { - start_items &= ~IT_UNLIMITED_AMMO; - start_health = warmup_start_health = cvar("g_lms_start_health"); - start_armorvalue = warmup_start_armorvalue = cvar("g_lms_start_armor"); - start_ammo_shells = warmup_start_ammo_shells = cvar("g_lms_start_ammo_shells"); - start_ammo_nails = warmup_start_ammo_nails = cvar("g_lms_start_ammo_nails"); - start_ammo_rockets = warmup_start_ammo_rockets = cvar("g_lms_start_ammo_rockets"); - start_ammo_cells = warmup_start_ammo_cells = cvar("g_lms_start_ammo_cells"); - start_ammo_plasma = warmup_start_ammo_plasma = cvar("g_lms_start_ammo_plasma"); - start_ammo_fuel = warmup_start_ammo_fuel = cvar("g_lms_start_ammo_fuel"); + start_items &= ~(IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS); + start_health = warmup_start_health = cvar("g_ca_start_health"); + start_armorvalue = warmup_start_armorvalue = cvar("g_ca_start_armor"); + start_ammo_shells = warmup_start_ammo_shells = cvar("g_ca_start_ammo_shells"); + start_ammo_nails = warmup_start_ammo_nails = cvar("g_ca_start_ammo_nails"); + start_ammo_rockets = warmup_start_ammo_rockets = cvar("g_ca_start_ammo_rockets"); + start_ammo_cells = warmup_start_ammo_cells = cvar("g_ca_start_ammo_cells"); + start_ammo_plasma = warmup_start_ammo_plasma = cvar("g_ca_start_ammo_plasma"); + start_ammo_fuel = warmup_start_ammo_fuel = cvar("g_ca_start_ammo_fuel"); } MUTATOR_HOOKFUNCTION(ca, Damage_Calculate) @@ -368,7 +366,7 @@ MUTATOR_HOOKFUNCTION(ca, FilterItem) entity item = M_ARGV(0, entity); if (autocvar_g_powerups <= 0) - if (item.flags & FL_POWERUP) + if (item.itemdef.instanceOfPowerup) return true; if (autocvar_g_pickup_items <= 0) @@ -377,16 +375,40 @@ MUTATOR_HOOKFUNCTION(ca, FilterItem) MUTATOR_HOOKFUNCTION(ca, PlayerDamage_SplitHealthArmor) { + if (time < game_starttime || (round_handler_IsActive() && !round_handler_IsRoundStarted())) + return; + entity frag_attacker = M_ARGV(1, entity); entity frag_target = M_ARGV(2, entity); + float frag_deathtype = M_ARGV(6, float); float frag_damage = M_ARGV(7, float); float damage_take = bound(0, M_ARGV(4, float), GetResource(frag_target, RES_HEALTH)); float damage_save = bound(0, M_ARGV(5, float), GetResource(frag_target, RES_ARMOR)); float excess = max(0, frag_damage - damage_take - damage_save); + //non-friendly fire if (frag_target != frag_attacker && IS_PLAYER(frag_attacker) && DIFF_TEAM(frag_target, frag_attacker)) GameRules_scoring_add_team(frag_attacker, SCORE, (frag_damage - excess) * autocvar_g_ca_damage2score_multiplier); + + //friendly fire + if (SAME_TEAM(frag_target, frag_attacker)) + GameRules_scoring_add_team(frag_attacker, SCORE, (-1 * (frag_damage - excess)) * autocvar_g_ca_damage2score_multiplier); + + //handle (environmental hazard) suiciding, check first if player has a registered attacker who most likely pushed them there to avoid punishing pushed players as pushers are already rewarded + //deathtypes: + //kill = suicide, drown = drown in water/liquid, hurttrigger = out of the map void or hurt triggers inside maps like electric sparks + //camp = campcheck, lava = lava, slime = slime + //team change / rebalance suicides are currently not included + if (!IS_PLAYER(frag_attacker) && ( + frag_deathtype == DEATH_KILL.m_id || + frag_deathtype == DEATH_DROWN.m_id || + frag_deathtype == DEATH_HURTTRIGGER.m_id || + frag_deathtype == DEATH_CAMP.m_id || + frag_deathtype == DEATH_LAVA.m_id || + frag_deathtype == DEATH_SLIME.m_id || + frag_deathtype == DEATH_SWAMP.m_id)) + GameRules_scoring_add_team(frag_target, SCORE, (-1 * (frag_damage - excess)) * autocvar_g_ca_damage2score_multiplier); } MUTATOR_HOOKFUNCTION(ca, CalculateRespawnTime) @@ -483,11 +505,6 @@ MUTATOR_HOOKFUNCTION(ca, ClientCommand_Spectate) return MUT_SPECCMD_CONTINUE; } -MUTATOR_HOOKFUNCTION(ca, WantWeapon) -{ - M_ARGV(2, bool) = true; // all weapons -} - MUTATOR_HOOKFUNCTION(ca, HideTeamNagger) { return true; // doesn't work well with the whole spectator as player thing @@ -502,12 +519,14 @@ MUTATOR_HOOKFUNCTION(ca, GetPlayerStatus) MUTATOR_HOOKFUNCTION(ca, SetWeaponArena) { - // most weapons arena - if (M_ARGV(0, string) == "0" || M_ARGV(0, string) == "") M_ARGV(0, string) = "most"; + if (M_ARGV(0, string) == "0" || M_ARGV(0, string) == "") + M_ARGV(0, string) = autocvar_g_ca_weaponarena; } MUTATOR_HOOKFUNCTION(ca, SV_ParseServerCommand) { - shuffleteams_on_reset_map = !allowed_to_spawn; + string cmd_name = M_ARGV(0, string); + if (cmd_name == "shuffleteams") + shuffleteams_on_reset_map = !allowed_to_spawn; return false; }