X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fgamemode_ca.qc;h=f55c46e00ad5e34468bdfaae2e614227e7702aba;hb=f793281f2aba91beb14f7200ed33f1fec4d23f4e;hp=7c8c1cb77c62c8d451e5fa7f0def6c9cc5e5e019;hpb=65f71b6a7b489c6f5a2275928da75a672327a981;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/gamemode_ca.qc b/qcsrc/server/mutators/gamemode_ca.qc index 7c8c1cb77..f55c46e00 100644 --- a/qcsrc/server/mutators/gamemode_ca.qc +++ b/qcsrc/server/mutators/gamemode_ca.qc @@ -100,7 +100,7 @@ float CA_CheckWinner() void CA_RoundStart() { - if(inWarmupStage) + if(warmup_stage) allowed_to_spawn = TRUE; else allowed_to_spawn = FALSE; @@ -233,11 +233,45 @@ MUTATOR_HOOKFUNCTION(ca_SetStartItems) start_ammo_cells = cvar("g_lms_start_ammo_cells"); start_ammo_fuel = cvar("g_lms_start_ammo_fuel"); - start_items &~= IT_UNLIMITED_AMMO; + start_items &= ~IT_UNLIMITED_AMMO; return 0; } +MUTATOR_HOOKFUNCTION(ca_PlayerDamage) +{ + if(IS_PLAYER(frag_target)) + if(frag_target.deadflag == DEAD_NO) + if(frag_target == frag_attacker || SAME_TEAM(frag_target, frag_attacker) || frag_deathtype == DEATH_FALL) + frag_damage = 0; + + frag_mirrordamage = 0; + + return FALSE; +} + +MUTATOR_HOOKFUNCTION(ca_FilterItem) +{ + if(autocvar_g_powerups <= 0) + if(self.flags & FL_POWERUP) + return TRUE; + + if(autocvar_g_pickup_items <= 0) + return TRUE; + + return FALSE; +} + +MUTATOR_HOOKFUNCTION(ca_PlayerDamage_SplitHealthArmor) +{ + float excess = max(0, frag_damage - damage_take - damage_save); + + if(frag_target != frag_attacker && IS_PLAYER(frag_attacker)) + PlayerTeamScore_Add(frag_attacker, SP_SCORE, ST_SCORE, (frag_damage - excess) * autocvar_g_ca_damage2score_multiplier); + + return FALSE; +} + // scoreboard setup void ca_ScoreRules() { @@ -280,6 +314,9 @@ MUTATOR_DEFINITION(gamemode_ca) MUTATOR_HOOK(ForbidThrowCurrentWeapon, ca_ForbidThrowCurrentWeapon, CBC_ORDER_ANY); MUTATOR_HOOK(GiveFragsForKill, ca_GiveFragsForKill, CBC_ORDER_FIRST); MUTATOR_HOOK(SetStartItems, ca_SetStartItems, CBC_ORDER_ANY); + MUTATOR_HOOK(PlayerDamage_Calculate, ca_PlayerDamage, CBC_ORDER_ANY); + MUTATOR_HOOK(FilterItem, ca_FilterItem, CBC_ORDER_ANY); + MUTATOR_HOOK(PlayerDamage_SplitHealthArmor, ca_PlayerDamage_SplitHealthArmor, CBC_ORDER_ANY); MUTATOR_ONADD {