diff --git a/maps/bots/_bot_debug.gsc b/maps/bots/_bot_debug.gsc index 13e1e8c..894e9d2 100644 --- a/maps/bots/_bot_debug.gsc +++ b/maps/bots/_bot_debug.gsc @@ -71,14 +71,126 @@ beginDebug() self endon( "zombified" ); self thread debug(); + self thread watch_for_unlink(); self thread textScroll( "^1xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" ); } +watch_for_unlink() +{ + self endon( "disconnect" ); + self endon( "zombified" ); + + self notifyOnPlayerCommand( "+smoke", "toggle_unlink" ); + + for ( ;; ) + { + self waittill( "toggle_unlink" ); + + if ( self.closest == -1 ) + { + self iprintln( "not close to node" ); + continue; + } + + firstwp = level.waypoints[self.closest]; + + self iprintln( "wp selected for unlink: " + firstwp getNodeNumber() ); + + self waittill( "toggle_unlink" ); + + if ( self.closest == -1 ) + { + self iprintln( "not close to node" ); + continue; + } + + self toggle_link( firstwp, level.waypoints[self.closest] ); + } +} + +array_contains( arr, it ) +{ + for ( i = 0; i < arr.size; i++ ) + { + if ( arr[i] == it ) + return true; + } + + return false; +} + +toggle_link( firstwp, secondwp ) +{ + // check if it exists + key = firstwp getNodeNumber() + ""; + secnum = secondwp getNodeNumber(); + + links = firstwp getLinkedNodes(); + linked = false; + + for ( i = 0; i < links.size; i++ ) + { + if ( links[i] getNodeNumber() == secnum ) + { + linked = true; + break; + } + } + + if ( !linked ) + { + self iprintln( "no link: " + key + " " + secnum ); + return; + } + + if ( key == secnum + "" ) + { + self iprintln( "same unlink: " + key + " " + secnum ); + return; + } + + if ( isDefined( level.bot_ignore_links[key] ) && array_contains( level.bot_ignore_links[key], secnum ) ) + { + a = level.bot_ignore_links[key]; + + a = array_remove( a, secnum ); + + if ( a.size <= 0 ) + { + level.bot_ignore_links[key] = undefined; + } + else + { + level.bot_ignore_links[key] = a; + } + + self iprintln( "removed unlink: " + key + " " + secnum ); + PrintConsole( "toggle_link: add: " + key + " " + secnum ); + } + else + { + if ( !isDefined( level.bot_ignore_links[key] ) ) + { + level.bot_ignore_links[key] = []; + } + + a = level.bot_ignore_links[key]; + a[a.size] = secnum; + + level.bot_ignore_links[key] = a; + + self iprintln( "added unlink: " + key + " " + secnum ); + PrintConsole( "toggle_link: del: " + key + " " + secnum ); + } +} + debug() { self endon( "disconnect" ); self endon( "zombified" ); + self.closest = -1; + for ( ;; ) { wait 0.05; @@ -131,6 +243,11 @@ debug() } } } + + if ( distance( self.origin, level.waypoints[closest].origin ) < 64 ) + self.closest = closest; + else + self.closest = -1; } } diff --git a/maps/bots/_bot_utility.gsc b/maps/bots/_bot_utility.gsc index 560589f..01409cf 100644 --- a/maps/bots/_bot_utility.gsc +++ b/maps/bots/_bot_utility.gsc @@ -811,7 +811,127 @@ load_waypoints() switch ( level.script ) { case "nazi_zombie_sumpf": + a = []; + a[a.size] = 1825; + a[a.size] = 1826; + a[a.size] = 1829; + a[a.size] = 1830; + a[a.size] = 1833; + a[a.size] = 1837; + level.bot_ignore_links[1603 + ""] = a; + a = []; + a[a.size] = 1829; + level.bot_ignore_links[1604 + ""] = a; + + a = []; + a[a.size] = 1904; + level.bot_ignore_links[1823 + ""] = a; + + a = []; + a[a.size] = 1603; + a[a.size] = 1903; + a[a.size] = 1904; + a[a.size] = 1906; + level.bot_ignore_links[1825 + ""] = a; + + a = []; + a[a.size] = 1603; + a[a.size] = 1903; + a[a.size] = 1904; + a[a.size] = 1907; + level.bot_ignore_links[1826 + ""] = a; + + a = []; + a[a.size] = 1904; + level.bot_ignore_links[1827 + ""] = a; + + a = []; + a[a.size] = 1603; + a[a.size] = 1604; + a[a.size] = 1903; + a[a.size] = 1904; + a[a.size] = 1906; + a[a.size] = 1907; + level.bot_ignore_links[1829 + ""] = a; + + + a = []; + a[a.size] = 1603; + a[a.size] = 1903; + a[a.size] = 1904; + a[a.size] = 1907; + level.bot_ignore_links[1830 + ""] = a; + + a = []; + a[a.size] = 1904; + level.bot_ignore_links[1831 + ""] = a; + + a = []; + a[a.size] = 1603; + a[a.size] = 1903; + a[a.size] = 1904; + a[a.size] = 1906; + a[a.size] = 1907; + level.bot_ignore_links[1833 + ""] = a; + + a = []; + a[a.size] = 1903; + a[a.size] = 1904; + level.bot_ignore_links[1834 + ""] = a; + + a = []; + a[a.size] = 1603; + a[a.size] = 1903; + a[a.size] = 1904; + a[a.size] = 1906; + a[a.size] = 1907; + level.bot_ignore_links[1837 + ""] = a; + + a = []; + a[a.size] = 1903; + a[a.size] = 1904; + level.bot_ignore_links[1838 + ""] = a; + + a = []; + a[a.size] = 1825; + a[a.size] = 1826; + a[a.size] = 1829; + a[a.size] = 1830; + a[a.size] = 1833; + a[a.size] = 1834; + a[a.size] = 1837; + a[a.size] = 1838; + level.bot_ignore_links[1903 + ""] = a; + + a = []; + a[a.size] = 1823; + a[a.size] = 1825; + a[a.size] = 1826; + a[a.size] = 1827; + a[a.size] = 1829; + a[a.size] = 1830; + a[a.size] = 1831; + a[a.size] = 1833; + a[a.size] = 1834; + a[a.size] = 1837; + a[a.size] = 1838; + level.bot_ignore_links[1904 + ""] = a; + + a = []; + a[a.size] = 1825; + a[a.size] = 1829; + a[a.size] = 1833; + a[a.size] = 1837; + level.bot_ignore_links[1906 + ""] = a; + + a = []; + a[a.size] = 1826; + a[a.size] = 1829; + a[a.size] = 1830; + a[a.size] = 1833; + a[a.size] = 1837; + level.bot_ignore_links[1907 + ""] = a; break; }