]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/mutators/mutator/gamemode_lms.qc
Purge self from the damage/death mutator hooks
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / mutator / gamemode_lms.qc
index 4f84c5abbcb6c71994884d3a68e13f2ef703c5c8..8670bbbef8c9bc36ba45c8c0a3c5a0bedf882026 100644 (file)
@@ -13,7 +13,7 @@ REGISTER_MUTATOR(lms, false)
                        error("This is a game type and it cannot be added at runtime.");
                lms_Initialize();
 
-               SetLimits(((!autocvar_g_lms_lives_override) ? -1 : autocvar_g_lms_lives_override), 0, -1, -1);
+               SetLimits(((!autocvar_g_lms_lives_override) ? -1 : autocvar_g_lms_lives_override), 0, autocvar_timelimit_override, -1);
        }
 
        MUTATOR_ONROLLBACK_OR_REMOVE
@@ -168,18 +168,22 @@ MUTATOR_HOOKFUNCTION(lms, reset_map_players)
 }
 
 MUTATOR_HOOKFUNCTION(lms, PutClientInServer)
-{SELFPARAM();
+{
+       entity player = M_ARGV(0, entity);
+
        // player is dead and becomes observer
        // FIXME fix LMS scoring for new system
-       if(PlayerScore_Add(self, SP_LMS_RANK, 0) > 0)
+       if(PlayerScore_Add(player, SP_LMS_RANK, 0) > 0)
        {
-               TRANSMUTE(Observer, self);
-               Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_LMS_NOLIVES);
+               TRANSMUTE(Observer, player);
+               Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_LMS_NOLIVES);
        }
 }
 
 MUTATOR_HOOKFUNCTION(lms, PlayerDies)
 {
+       entity frag_target = M_ARGV(2, entity);
+       
        frag_target.respawn_flags |= RESPAWN_FORCE;
        return false;
 }
@@ -228,8 +232,8 @@ MUTATOR_HOOKFUNCTION(lms, ClientConnect)
 
 MUTATOR_HOOKFUNCTION(lms, PlayerPreThink)
 {SELFPARAM();
-       if(self.deadflag == DEAD_DYING)
-               self.deadflag = DEAD_RESPAWNING;
+       if(this.deadflag == DEAD_DYING)
+               this.deadflag = DEAD_RESPAWNING;
 
        return false;
 }
@@ -249,6 +253,8 @@ MUTATOR_HOOKFUNCTION(lms, ForbidThrowCurrentWeapon)
 
 MUTATOR_HOOKFUNCTION(lms, GiveFragsForKill)
 {
+       entity frag_target = M_ARGV(1, entity);
+
        // remove a life
        float tl;
        tl = PlayerScore_Add(frag_target, SP_LMS_LIVES, -1);
@@ -263,7 +269,7 @@ MUTATOR_HOOKFUNCTION(lms, GiveFragsForKill)
                PlayerScore_Add(frag_target, SP_LMS_RANK, lms_next_place); // won't ever spawn again
                --lms_next_place;
        }
-       frag_score = 0;
+       M_ARGV(2, float) = 0;
 
        return true;
 }
@@ -298,8 +304,8 @@ MUTATOR_HOOKFUNCTION(lms, FilterItem)
        return true;
 }
 
-void lms_extralife()
-{SELFPARAM();
+void lms_extralife(entity this)
+{
        StartItem(this, ITEM_ExtraLife);
 }
 
@@ -312,7 +318,7 @@ MUTATOR_HOOKFUNCTION(lms, OnEntityPreSpawn)
        if (self.classname != "item_health_mega") return false;
 
        entity e = spawn();
-       e.think = lms_extralife;
+       setthink(e, lms_extralife);
 
        e.nextthink = time + 0.1;
        e.spawnflags = self.spawnflags;