]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/hook.qc
Fix current custom gametype not being kept if gametype vote ends without votes
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / hook.qc
index 6042a48e1a61edae4c6bd572d3564f051e959017..e734addfaae91615d0dd6e53d6ad17199eacb16d 100644 (file)
@@ -1,29 +1,30 @@
 #include "hook.qh"
 
-#include <server/bot/api.qh>
-#include <common/weapons/_all.qh>
-#include <common/stats.qh>
-#include <server/damage.qh>
-#include <server/miscfunctions.qh>
+#include <common/constants.qh>
 #include <common/effects/all.qh>
-#include "weapons/common.qh"
-#include "weapons/csqcprojectile.qh"
-#include "weapons/weaponsystem.qh"
-#include "weapons/selection.qh"
-#include "weapons/tracing.qh"
-#include "player.qh"
-#include "command/common.qh"
-#include "command/vote.qh"
-#include "round_handler.qh"
-#include "../common/state.qh"
-#include "../common/physics/player.qh"
-#include "../common/vehicles/all.qh"
-#include "../common/constants.qh"
-#include "../common/util.qh"
 #include <common/net_linked.qh>
+#include <common/physics/player.qh>
+#include <common/state.qh>
+#include <common/stats.qh>
+#include <common/util.qh>
+#include <common/vehicles/all.qh>
+#include <common/weapons/_all.qh>
 #include <common/weapons/_all.qh>
-#include "../lib/warpzone/common.qh"
-#include "../lib/warpzone/server.qh"
+#include <lib/warpzone/common.qh>
+#include <lib/warpzone/server.qh>
+#include <server/bot/api.qh>
+#include <server/command/common.qh>
+#include <server/command/vote.qh>
+#include <server/damage.qh>
+#include <server/mutators/_mod.qh>
+#include <server/player.qh>
+#include <server/round_handler.qh>
+#include <server/weapons/common.qh>
+#include <server/weapons/csqcprojectile.qh>
+#include <server/weapons/selection.qh>
+#include <server/weapons/tracing.qh>
+#include <server/weapons/weaponsystem.qh>
+#include <server/world.qh>
 
 /*============================================
 
@@ -160,7 +161,9 @@ void GrapplingHookThink(entity this)
                error("Owner lost the hook!\n");
                return;
        }
-       if(LostMovetypeFollow(this) || game_stopped || (round_handler_IsActive() && !round_handler_IsRoundStarted()) || ((this.aiment.flags & FL_PROJECTILE) && this.aiment.classname != "nade"))
+       if((this.move_movetype == MOVETYPE_FOLLOW && LostMovetypeFollow(this))
+               || game_stopped || (round_handler_IsActive() && !round_handler_IsRoundStarted())
+               || ((this.aiment.flags & FL_PROJECTILE) && this.aiment.classname != "nade"))
        {
                RemoveHook(this);
                return;
@@ -414,7 +417,8 @@ void FireGrapplingHook(entity actor, .entity weaponentity)
        Net_LinkEntity(missile, false, 0, GrapplingHookSend);
 }
 
-void GrappleHookInit()
+// NOTE: using PRECACHE here to make sure it's called after everything else
+PRECACHE(GrappleHookInit)
 {
        if(g_grappling_hook)
        {
@@ -427,9 +431,10 @@ void GrappleHookInit()
        {
                Weapon w = WEP_HOOK;
                w.wr_init(w);
-               hook_shotorigin[0] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK.m_id), false, false, 1);
-               hook_shotorigin[1] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK.m_id), false, false, 2);
-               hook_shotorigin[2] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK.m_id), false, false, 3);
-               hook_shotorigin[3] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK.m_id), false, false, 4);
+               vector vecs = CL_Weapon_GetShotOrg(WEP_HOOK.m_id);
+               hook_shotorigin[0] = shotorg_adjust(vecs, false, false, 1);
+               hook_shotorigin[1] = shotorg_adjust(vecs, false, false, 2);
+               hook_shotorigin[2] = shotorg_adjust(vecs, false, false, 3);
+               hook_shotorigin[3] = shotorg_adjust(vecs, false, false, 4);
        }
 }