]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/mutators/mutator/overkill/overkill.qc
Weapons: store switchweapon as direct weapon reference
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / overkill / overkill.qc
index 987074f49cb97d6d6297e23bf605966d887bbbde..952537e31f979bf5227847abe07d3cb3fdf7c9f0 100644 (file)
@@ -63,7 +63,7 @@ void ok_DecreaseCharge(entity ent, int wep)
 {
        if(!ent.ok_use_ammocharge) return;
 
-       entity wepent = get_weaponinfo(wep);
+       entity wepent = Weapons_from(wep);
 
        if(wepent.weapon == 0)
                return; // dummy
@@ -73,7 +73,7 @@ void ok_DecreaseCharge(entity ent, int wep)
 
 void ok_IncreaseCharge(entity ent, int wep)
 {
-       entity wepent = get_weaponinfo(wep);
+       entity wepent = Weapons_from(wep);
 
        if(wepent.weapon == 0)
                return; // dummy
@@ -87,7 +87,7 @@ float ok_CheckWeaponCharge(entity ent, int wep)
 {
        if(!ent.ok_use_ammocharge) return true;
 
-       entity wepent = get_weaponinfo(wep);
+       entity wepent = Weapons_from(wep);
 
        if(wepent.weapon == 0)
                return 0; // dummy
@@ -123,29 +123,30 @@ MUTATOR_HOOKFUNCTION(ok, PlayerDamage_SplitHealthArmor)
 }
 
 MUTATOR_HOOKFUNCTION(ok, PlayerDies)
-{SELFPARAM();
+{
+       SELFPARAM();
        entity targ = ((frag_attacker) ? frag_attacker : frag_target);
 
-       if(IS_MONSTER(self))
+       if(IS_MONSTER(this))
        {
                remove(other); // remove default item
-               other = world;
+               other = NULL;
        }
 
-       setself(new(droppedweapon)); // hax
-       self.ok_item = true;
-       self.noalign = true;
-       self.pickup_anyway = true;
-       spawnfunc_item_armor_small(this);
-       self.movetype = MOVETYPE_TOSS;
-       self.gravity = 1;
-       self.reset = SUB_Remove;
-       setorigin(self, frag_target.origin + '0 0 32');
-       self.velocity = '0 0 200' + normalize(targ.origin - self.origin) * 500;
-       SUB_SetFade(self, time + 5, 1);
-       setself(this);
-
-       self.ok_lastwep = self.switchweapon;
+       entity e = new(droppedweapon); // hax
+       e.ok_item = true;
+       e.noalign = true;
+       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 - self.origin) * 500;
+       SUB_SetFade(e, time + 5, 1);
+
+       this.ok_lastwep = PS(this).m_switchweapon.m_id;
 
        return false;
 }
@@ -185,7 +186,7 @@ MUTATOR_HOOKFUNCTION(ok, PlayerPreThink)
 
        if(self.ok_lastwep)
        {
-               self.switchweapon = self.ok_lastwep;
+               PS(self).m_switchweapon = Weapons_from(self.ok_lastwep);
                self.ok_lastwep = 0;
        }
 
@@ -223,13 +224,13 @@ MUTATOR_HOOKFUNCTION(ok, PlayerPreThink)
        if(self.ok_use_ammocharge)
        if(!ok_CheckWeaponCharge(self, self.weapon))
        {
-               if(autocvar_g_overkill_ammo_charge_notice && time > self.ok_notice_time && self.BUTTON_ATCK && IS_REAL_CLIENT(self) && self.weapon == self.switchweapon)
+               if(autocvar_g_overkill_ammo_charge_notice && time > self.ok_notice_time && self.BUTTON_ATCK && IS_REAL_CLIENT(self) && self.weapon == PS(self).m_switchweapon.m_id)
                {
                        //Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_OVERKILL_CHARGE);
                        self.ok_notice_time = time + 2;
                        play2(self, SND(DRYFIRE));
                }
-               Weapon wpn = get_weaponinfo(self.weapon);
+               Weapon wpn = Weapons_from(self.weapon);
                .entity weaponentity = weaponentities[0]; // TODO: unhardcode
                if(self.(weaponentity).state != WS_CLEAR)
                        w_ready(wpn, self, weaponentity, (self.BUTTON_ATCK ? 1 : 0) | (self.BUTTON_ATCK2 ? 2 : 0));
@@ -260,8 +261,8 @@ MUTATOR_HOOKFUNCTION(ok, PlayerSpawn)
        return false;
 }
 
-void _spawnfunc_weapon_hmg() { SELFPARAM(); spawnfunc_weapon_hmg(this); }
-void _spawnfunc_weapon_rpc() { SELFPARAM(); spawnfunc_weapon_rpc(this); }
+void self_spawnfunc_weapon_hmg() { SELFPARAM(); spawnfunc_weapon_hmg(this); }
+void self_spawnfunc_weapon_rpc() { SELFPARAM(); spawnfunc_weapon_rpc(this); }
 
 MUTATOR_HOOKFUNCTION(ok, OnEntityPreSpawn)
 {SELFPARAM();
@@ -279,7 +280,8 @@ MUTATOR_HOOKFUNCTION(ok, OnEntityPreSpawn)
                        wep.team = self.team;
                        wep.respawntime = autocvar_g_overkill_superguns_respawn_time;
                        wep.pickup_anyway = true;
-                       wep.think = _spawnfunc_weapon_hmg;
+                       wep.spawnfunc_checked = true;
+                       wep.think = self_spawnfunc_weapon_hmg;
                        wep.nextthink = time + 0.1;
                        return true;
                }
@@ -295,7 +297,8 @@ MUTATOR_HOOKFUNCTION(ok, OnEntityPreSpawn)
                        wep.team = self.team;
                        wep.respawntime = autocvar_g_overkill_superguns_respawn_time;
                        wep.pickup_anyway = true;
-                       wep.think = _spawnfunc_weapon_rpc;
+                       wep.spawnfunc_checked = true;
+                       wep.think = self_spawnfunc_weapon_rpc;
                        wep.nextthink = time + 0.1;
                        return true;
                }