]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/bot/default/waypoints.qc
Merge branch 'terencehill/cl_eventchase_death_2' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / bot / default / waypoints.qc
index b282f258e0f89dd13e75c41b1cf8b8b98a7f3dcc..c09d8f81d4fc927bdabe934b27ac86a9e0f3dcab 100644 (file)
@@ -341,6 +341,18 @@ void waypoint_unmark_hardwiredlink(entity wp_from, entity wp_to)
        return;
 }
 
+void waypoint_restore_hardwiredlinks(entity wp)
+{
+       if (wp.wphw00) waypoint_addlink(wp, wp.wphw00);
+       if (wp.wphw01) waypoint_addlink(wp, wp.wphw01);
+       if (wp.wphw02) waypoint_addlink(wp, wp.wphw02);
+       if (wp.wphw03) waypoint_addlink(wp, wp.wphw03);
+       if (wp.wphw04) waypoint_addlink(wp, wp.wphw04);
+       if (wp.wphw05) waypoint_addlink(wp, wp.wphw05);
+       if (wp.wphw06) waypoint_addlink(wp, wp.wphw06);
+       if (wp.wphw07) waypoint_addlink(wp, wp.wphw07);
+}
+
 void waypoint_setupmodel(entity wp)
 {
        if (autocvar_g_waypointeditor)
@@ -458,7 +470,7 @@ entity waypoint_spawn(vector m1, vector m2, float f)
                        }
                        else
                        {
-                               if(autocvar_developer)
+                               if(autocvar_developer > 0)
                                {
                                        LOG_INFO("A generated waypoint is stuck in solid at ", vtos(w.origin));
                                        backtrace("Waypoint stuck");
@@ -1024,7 +1036,7 @@ float waypoint_gettravelcost(vector from, vector to, entity from_ent, entity to_
        if(height > jumpheight_vec.z && autocvar_sv_gravity > 0)
        {
                float height_cost; // fall cost
-               if (boolean(from_ent.wpflags & WAYPOINTFLAG_JUMP))
+               if (from_ent.wpflags & WAYPOINTFLAG_JUMP)
                        height_cost = jumpheight_time + sqrt((height + jumpheight_vec.z) / (autocvar_sv_gravity / 2));
                else
                        height_cost = sqrt(height / (autocvar_sv_gravity / 2));
@@ -1219,6 +1231,11 @@ void waypoint_think(entity this)
                        }
                }
        });
+
+       // waypoint_clearlinks preserves references to old hardwired links (.wphwXX links)
+       // so they can be restored here when a wp is spawned over an existing one
+       waypoint_restore_hardwiredlinks(this);
+
        navigation_testtracewalk = 0;
        this.wplinked = true;
        this.dphitcontentsmask = dphitcontentsmask_save;
@@ -1241,6 +1258,8 @@ void waypoint_clearlinks(entity wp)
        wp.wp16mincost = wp.wp17mincost = wp.wp18mincost = wp.wp19mincost = wp.wp20mincost = wp.wp21mincost = wp.wp22mincost = wp.wp23mincost = f;
        wp.wp24mincost = wp.wp25mincost = wp.wp26mincost = wp.wp27mincost = wp.wp28mincost = wp.wp29mincost = wp.wp30mincost = wp.wp31mincost = f;
 
+       // don't remove references to hardwired links (.wphwXX fields)
+
        wp.wplinked = false;
 }
 
@@ -1839,8 +1858,7 @@ float waypoint_loadall()
                if (!s)
                        break;
                fl = stof(s);
-               if (fl & WAYPOINTFLAG_NORELINK__DEPRECATED)
-                       fl &= ~WAYPOINTFLAG_NORELINK__DEPRECATED;
+               fl &= ~WAYPOINTFLAG_NORELINK__DEPRECATED;
                waypoint_spawn(m1, m2, fl);
                if (m1 == m2)
                        cwp = cwp + 1;