X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmutators%2Fmutator%2Foverkill%2Foverkill.qc;h=b8a203990af6aaa2797788d24fd1f543e0974843;hb=2cc219c0762e106241165f3b08fac54a516cda89;hp=125025f205c40f8ce1908705ff831df50d18a252;hpb=29639b274e483ea5a94f839892023c73e6cd44a8;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/mutators/mutator/overkill/overkill.qc b/qcsrc/common/mutators/mutator/overkill/overkill.qc index 125025f20..b8a203990 100644 --- a/qcsrc/common/mutators/mutator/overkill/overkill.qc +++ b/qcsrc/common/mutators/mutator/overkill/overkill.qc @@ -41,7 +41,7 @@ REGISTER_MUTATOR(ok, cvar("g_overkill") && !cvar("g_instagib") && !g_nexball && MUTATOR_HOOKFUNCTION(ok, W_DecreaseAmmo) { - entity actor = MUTATOR_ARGV(0, entity); + entity actor = M_ARGV(0, entity); if (actor.ok_use_ammocharge) { ok_DecreaseCharge(actor, PS(actor).m_weapon.m_id); @@ -51,7 +51,7 @@ MUTATOR_HOOKFUNCTION(ok, W_DecreaseAmmo) MUTATOR_HOOKFUNCTION(ok, W_Reload) { - entity actor = MUTATOR_ARGV(0, entity); + entity actor = M_ARGV(0, entity); return actor.ok_use_ammocharge; } @@ -94,6 +94,12 @@ float ok_CheckWeaponCharge(entity ent, int wep) MUTATOR_HOOKFUNCTION(ok, PlayerDamage_Calculate, CBC_ORDER_LAST) { + entity frag_attacker = M_ARGV(1, entity); + entity frag_target = M_ARGV(2, entity); + float frag_deathtype = M_ARGV(3, float); + float frag_damage = M_ARGV(4, float); + vector frag_force = M_ARGV(6, vector); + if(IS_PLAYER(frag_attacker) && IS_PLAYER(frag_target)) if(DEATH_ISWEAPON(frag_deathtype, WEP_BLASTER)) { @@ -107,6 +113,9 @@ MUTATOR_HOOKFUNCTION(ok, PlayerDamage_Calculate, CBC_ORDER_LAST) Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_SECONDARY_NODAMAGE); frag_force = '0 0 0'; } + + M_ARGV(4, float) = frag_damage; + M_ARGV(6, vector) = frag_force; } return false; @@ -135,12 +144,14 @@ MUTATOR_HOOKFUNCTION(ok, PlayerDies) e.pickup_anyway = true; e.spawnfunc_checked = true; spawnfunc_item_armor_small(e); - e.movetype = MOVETYPE_TOSS; - e.gravity = 1; - e.reset = SUB_Remove; - setorigin(e, frag_target.origin + '0 0 32'); - e.velocity = '0 0 200' + normalize(targ.origin - frag_target.origin) * 500; - SUB_SetFade(e, time + 5, 1); + if (!wasfreed(e)) { // might have been blocked by a mutator + e.movetype = MOVETYPE_TOSS; + e.gravity = 1; + e.reset = SUB_Remove; + setorigin(e, frag_target.origin + '0 0 32'); + e.velocity = '0 0 200' + normalize(targ.origin - frag_target.origin) * 500; + SUB_SetFade(e, time + 5, 1); + } frag_target.ok_lastwep = PS(frag_target).m_switchweapon.m_id; @@ -245,28 +256,30 @@ MUTATOR_HOOKFUNCTION(ok, PlayerPreThink) } MUTATOR_HOOKFUNCTION(ok, PlayerSpawn) -{SELFPARAM(); +{ + entity player = M_ARGV(0, entity); + if(autocvar_g_overkill_ammo_charge) { - FOREACH(Weapons, it != WEP_Null, LAMBDA(self.ammo_charge[it.m_id] = autocvar_g_overkill_ammo_charge_limit)); + FOREACH(Weapons, it != WEP_Null, LAMBDA(player.ammo_charge[it.m_id] = autocvar_g_overkill_ammo_charge_limit)); - self.ok_use_ammocharge = 1; - self.ok_notice_time = time; + player.ok_use_ammocharge = 1; + player.ok_notice_time = time; } else - self.ok_use_ammocharge = 0; + player.ok_use_ammocharge = 0; // if player changed their weapon while dead, don't switch to their death weapon - if(self.impulse) - self.ok_lastwep = 0; + if(player.impulse) + player.ok_lastwep = 0; - self.ok_pauseregen_finished = time + 2; + player.ok_pauseregen_finished = time + 2; return false; } -void self_spawnfunc_weapon_hmg() { SELFPARAM(); spawnfunc_weapon_hmg(this); } -void self_spawnfunc_weapon_rpc() { SELFPARAM(); spawnfunc_weapon_rpc(this); } +void self_spawnfunc_weapon_hmg(entity this) { spawnfunc_weapon_hmg(this); } +void self_spawnfunc_weapon_rpc(entity this) { spawnfunc_weapon_rpc(this); } MUTATOR_HOOKFUNCTION(ok, OnEntityPreSpawn) {SELFPARAM(); @@ -285,7 +298,7 @@ MUTATOR_HOOKFUNCTION(ok, OnEntityPreSpawn) wep.respawntime = autocvar_g_overkill_superguns_respawn_time; wep.pickup_anyway = true; wep.spawnfunc_checked = true; - wep.think = self_spawnfunc_weapon_hmg; + setthink(wep, self_spawnfunc_weapon_hmg); wep.nextthink = time + 0.1; return true; } @@ -302,7 +315,7 @@ MUTATOR_HOOKFUNCTION(ok, OnEntityPreSpawn) wep.respawntime = autocvar_g_overkill_superguns_respawn_time; wep.pickup_anyway = true; wep.spawnfunc_checked = true; - wep.think = self_spawnfunc_weapon_rpc; + setthink(wep, self_spawnfunc_weapon_rpc); wep.nextthink = time + 0.1; return true; }