]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/mutators/gamemode_freezetag.qc
Merge branch 'master' into Mario/monsters
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / gamemode_freezetag.qc
index 5e83a8c4a8d23945b4f3ed00bf5e8e78759169bf..c1cb5b85145ae42db57d844c1264552f60fb6a17 100644 (file)
@@ -218,7 +218,7 @@ void havocbot_role_ft_offense()
        }
 
        // If only one left on team or if role has timed out then start trying to free players.
-       if (((unfrozen == 0) && (self.frozen != 1)) || (time > self.havocbot_role_timeout))
+       if (((unfrozen == 0) && (!self.frozen)) || (time > self.havocbot_role_timeout))
        {
                dprint("changing role to freeing\n");
                self.havocbot_role = havocbot_role_ft_freeing;
@@ -286,7 +286,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerDies)
        if(round_handler_IsActive())
        if(round_handler_CountdownRunning())
        {
-               if(self.frozen == 1)
+               if(self.frozen)
                        freezetag_Unfreeze(world);
                freezetag_count_alive_players();
                return 1; // let the player die so that he can respawn whenever he wants
@@ -406,9 +406,9 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPreThink)
                n = 0;
                FOR_EACH_PLAYER(other) if(self != other)
                {
-                       if(!other.frozen)
+                       if(other.frozen == 0)
                        {
-                               if(other.team == self.team)
+                               if(SAME_TEAM(other, self))
                                {
                                        if(boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax))
                                        {
@@ -481,6 +481,17 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerDamage_Calculate)
 {
        if(frag_target.frozen == 1 && frag_deathtype != DEATH_HURTTRIGGER)
        {
+               if(autocvar_g_freezetag_revive_falldamage > 0)
+               if(frag_deathtype == DEATH_FALL)
+               if(frag_damage >= autocvar_g_freezetag_revive_falldamage)
+               {
+                       freezetag_Unfreeze(frag_target);
+                       frag_target.health = autocvar_g_freezetag_revive_falldamage_health;
+                       pointparticles(particleeffectnum("iceorglass"), frag_target.origin, '0 0 0', 3);
+                       Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_FREEZETAG_REVIVED_FALL, frag_target.netname);
+                       Send_Notification(NOTIF_ONE, frag_target, MSG_CENTER, CENTER_FREEZETAG_REVIVE_FALL);
+               }
+       
                frag_damage = 0;
                frag_force = frag_force * autocvar_g_freezetag_frozen_force;
        }
@@ -500,13 +511,6 @@ MUTATOR_HOOKFUNCTION(freezetag_BotRoles)
        return TRUE;
 }
 
-MUTATOR_HOOKFUNCTION(freezetag_SpectateCopy)
-{
-       self.frozen = other.frozen;
-       self.revive_progress = other.revive_progress;
-       return 0;
-}
-
 MUTATOR_HOOKFUNCTION(freezetag_GetTeamCount)
 {
        freezetag_teams = autocvar_g_freezetag_teams_override;
@@ -542,7 +546,6 @@ MUTATOR_DEFINITION(gamemode_freezetag)
        MUTATOR_HOOK(PlayerPreThink, freezetag_PlayerPreThink, CBC_ORDER_FIRST);
        MUTATOR_HOOK(PlayerDamage_Calculate, freezetag_PlayerDamage_Calculate, CBC_ORDER_ANY);
        MUTATOR_HOOK(HavocBot_ChooseRule, freezetag_BotRoles, CBC_ORDER_ANY);
-       MUTATOR_HOOK(SpectateCopy, freezetag_SpectateCopy, CBC_ORDER_ANY);
        MUTATOR_HOOK(GetTeamCount, freezetag_GetTeamCount, CBC_ORDER_EXCLUSIVE);
 
        MUTATOR_ONADD