What's new
  • NEW: Happy Cataclysm gaming! The fresh 4.3.4 Cataclysm Repack V20.0 is now live - and downloadable from our brand-new Emucoach App.
    Download it now
  • Mists of Pandaria is calling! Heya - did you know that the newest 5.4.8 MoP Repack - version 7.1 - is now live?
    Download now

Copilotbuddy, a bot for WotLK 3.3.5a RELEASED

I tried the combat bot on prot warrior in my own server, but my fps drops and game starts lagging if there's lots of mobs around.
 
I tried the combat bot on prot warrior in my own server, but my fps drops and game starts lagging if there's lots of mobs around.
That's interesting. Could you please create a ticket on Discord and attach a log?
 
UPDATE 17
==========================

Navmesh tile format -> version 6:
--------------

* The multi-tile mmap format goes from 5 to 6, in lockstep
across the three projects that touch it: the extractor writes
it (commit 404c6c6, MagicBytes.MmapMultiTileVersion), the DLL
expects it (commit 8706d63, Navigation/
MoveMapSharedDefines.h) and the viewer loads it (commit
b2fa6da).
Every mmap must be regenerated. The DLL rejects v5 outright,
so an old movemaps folder does not degrade — it stops
loading.

Bug fixes — Pathing / Navigation:
--------------

* MeshNavigator: open closed doors that block the path (commit
06e8845, Styx/Logic/Pathing/MeshNavigator.cs + Styx/
WoWInternals/WoWObjects/LocalPlayer.cs). HB's door opener
(method_7/8/29) had never been ported, so a shut door was
handled by nothing: the bot walked into it, the stuck handler
strafed, dropped a blackspot and repathed, indefinitely. Now
handled in MoveTo at HB's position, before any path work.
One deliberate 3.3.5a deviation: HB skips a door carrying
GO_FLAG_LOCKED, and only then reads the Lock.dbc key. Retail
key doors carry a lockId without that flag; a 3.3.5a server
sets both — Scholomance Door 174626 is flags 0x22 with lock
1159, i.e. Skeleton Key 13704 — so HB's rule would mean
"never open a key door". A locked door is accepted when the
required item is actually carried. The new
LocalPlayer.GetCarriedItemCount counts the keyring, where
3.3.5a dungeon keys live. Verified in game on both doors of
Scholomance.

* MeshNavigator: run the on-path check every tick like HB
method_9 (commit 2f758cd). A local suppression flag kept a
stale waypoint alive after a scripted jump, so the bot turned
back on itself once it had landed.

* Blackspots: a spot whose tile is not loaded is left to
OnTileLoaded instead of being retried on every pathfind
(commit 32c7a1f, BlackspotManager.cs). HB 4.3.4 smethod_1
only ever marks from the tile-loaded callback.

* Flight: the no-path sentinel overflowed the fly vs walk
comparison (commit edfa1ba, FlightPaths.cs, Flightor.cs,
MeshNavigator.cs, Navigator.cs). It was folded into the total
instead of short-circuiting it, so an unreachable leg could
come out as the fastest route. A leg under 5 yards no longer
generates a path at all.

Bug fixes — DungeonBuddy:
--------------

* Dungeon scripts were never ticked (commit a1840f8,
DungeonBuddy.cs + Helpers/ScriptHelpers.cs). The SoloFarm
movement leaf returned RunStatus.Running, and a leaf that
returns Running parks the whole behaviour tree on itself —
TreeRoot only restarts the root when LastStatus is not
Running. For the entire walk every higher priority was
starved, the dungeon script included, and with it every
scripted jump. The leaf now returns Success each tick, per HB
4.3.4 Class132.method_3. Same commit ships the HB
ScriptHelpers set and a ledge-aware CreateForceJump.

* CreateForceJump / CreateJumpDown dropped their canRun
predicate and returned Success unconditionally (commit
c4e0f00), blocking the rest of the dungeon tree behind them.

* Typed TreeSharp wrappers, DungeonArea, and the point /
nav-height helpers the scripts expect (commit 31804e8).

* BossManager: build the roster from the XML profile (commit
6ff0e77, BossManager.cs + DungeonManager.cs). It was built
from [EncounterHandler] attributes alone, so a script
declaring none produced an empty roster — which reads as "all
bosses dead". The bot completed the dungeon on entry and
walked out. Profile bosses are registered first, in
KillOrder, then script-only ones.

* Ranged classes engaged in melee (commit 1245bf4). A local
block sat between HB's [5] MoveToTarget and [6] Pull and
navigated to a hard-coded 4 yards whenever the routine had no
MoveToTargetBehavior — which is every Singular spec, the
property is never overridden. Pull was only reached once
already in melee: a Balance druid walked 5 seconds before its
first Moonfire. HB 4.3.4 method_0 goes straight from [5] to
[6] and lets the routine own its range, which Singular does —
casters stop at 32 yards, melee ends on
CreateMoveToMeleeBehavior.

* CreateClearArea back to the HB shape, and Tank resolves to
the player in solo farm (commit b2f7e3f, ScriptHelpers.cs):
- CreateClearArea was a re-implementation, recomputing the
nearest unit every tick with no cached list, no
ContextChangeHandler, no FirstUnit == null guard, no
CanNavigateFully in the filter, and an extra Target()
call HB does not make. It fought the combat targeting and
oscillated between two mobs — reported in UBRS, whose
Emberseer hall clear is its only caller.
GetUnfriendlyNpsAtLocation was missing the HB filter and
the OrderBy too, while its sibling
GetUnfriendlyNpcsAtArea already had both;
- ScriptHelpers.Tank walks GroupInfo.RaidMembers, empty
when solo, so it returned null and every handler gated on
"Me == ScriptHelpers.Tank" was dead code in solo farm.
That is what stopped BRD opening the Shadowforge Lock and
entering the Ring of Law. The arena coordinate itself was
checked and is right: 4.17 yards from AreaTrigger 1526,
radius 8. Scoped to SoloFarm, group play untouched.

* StatusText is cleared after the boss branch, not before
(commit c997401) — it logged the activity every tick.

* BotPoi: skip the assignment and its log line when the POI has
not changed (commit 3c1258a).

Singular wotlk:
--------------

One new commit; Update 16 covered nine, up to 87af6ad.

* Group.cs: use HasRole for tank and healer (commit cb8e441).
The IsTank / IsHealer shortcuts were removed from
WoWPartyMember, so the raid-side checks no longer compiled.

Dungeon Scripts:
--------------

New repository, never covered before:
github.com/Likon69/Dungeon-Scripts, 19 commits. Separate
checkout inside the bot's "Dungeon Scripts" folder, versioned
independently of CopilotBuddy.

* Initial import of the WotLK 3.3.5a set (28af178) — 95 files,
12 511 lines — then normalised line endings (f3f2aa8).

* Fix duplicate and non-WotLK DungeonIds that silently disabled
three scripts (66801c3). Cataclysm merged both halves of
Blackrock Depths under one LFG entry so both scripts carried
30; 3.3.5a splits them and Upper City is 276. Upper Blackrock
Spire carried the 4.3.4 id 330 instead of 44. A wrong id
means the script is never matched.

* Fill in empty shells and correct wrong entries: Sethekk Halls
Heroic from the normal script (da5e4d0), Razorfen Kraul and
Downs (7cc77a8), Omor and Tavarok pointed at their real
creature entries (5c13b2e), boss and object labels that did
not match the game (fcb2e5a).

* Replace Cataclysm bosses with the WotLK ones: Scarlet
Monastery Cathedral (106d98c), Dire Maul Warpwood Quarter
(8a7631f), Stormwind Stockade (b7d78ab, then 7c8748f whose
wait logic covers Bazil Thredd fleeing), Lower Blackrock
Spire (0d9de2f), Scholomance (66555cc), Deadmines and
Shadowfang Keep (0cb6883, which also unfreezes the cached
object queries).

* Stormwind Stockade: entrance moved inside the areatrigger
volume (bd65b5f) — it sat 3 cm outside, so the portal never
fired.

* Blackfathom Deeps: surface when the breath timer runs low, as
the 5.4.8 script does (21eeab0).

extractor-csharp (WMO / offmesh / navmesh):
--------------

* navmesh: water surface, lava fix, road alpha maps and the
Detour params the DLL was dropping (commit 404c6c6). Four
independent faults:
- AdtParser wrote the MAP_LIQUID_TYPE flags as water 0x08
and magma 0x01, where MaNGOS uses 0x01 and 0x04. Lava was
being typed as something else entirely;
- the liquid surface is now emitted as its own 9x9 vertex
grid alongside the terrain, instead of only re-typing
terrain triangles;
- RoadExtractorService decodes the MCAL alpha map of every
non-base MCLY layer (RLE, 4096 raw bytes, or 2048 bytes
of 4-bit pairs) down to the 4x4 sub-zones, so a road
texture marks only where its alpha is painted instead of
the whole chunk;
- RecastBuildParams carried WalkableHeight/Radius/Climb in
world units, BuildBvTree and the two DetailSample fields
on the C# side, but the C++ struct never declared them,
so the DLL silently used its own defaults.

* Vmap: carry the WMO liquid grid into the navmesh (commit
6c550ca). The LIQU chunk was parsed then thrown away, so
indoor pools reached Recast with no water at all. Mirrors
VMAP::WmoLiquid — a TilesX x TilesY quad grid with corner
heights and per-quad flags, a quad with (flag & 0x0f) == 0x0f
carrying no surface.

* Mmap: resolve map directories from Map.dbc (commit cd684c5,
Formats/Dbc/MapDirectoryResolver.cs). The hardcoded list
missed every instance (map 48 is "Blackfathom", not
"Map0048") and was wrong for a continent it did list (map 530
is "Expansion01"; "Outland" is the display name) — both give
a WDT lookup that cannot succeed.
Same commit adds an optional per-ADT Recast resolution table
(TileResolutionTable.cs): individual tiles can be sharpened,
which helps dense cities and twisty WMO dungeons, at a cost
growing as the square of the resolution. Without the file
nothing changes.

* Recast: the mini-tile slab is what bounds polygon edge length
(commits e784fdf then ff7ee51, native/RecastBuilderDll/
RecastBuilderDll.cpp). Raising MINI_TILE_SIZE to 448 made one
slab cover the whole sub-tile and produced blade polygons
over 90 yards long across the level — navigable, and wrong.
Back to 80, MapBuilder.cpp VERTEX_PER_TILE. The follow-up
separates the two knobs, previously derived from each other:
the slab size, and the maxEdgeLen given to rcBuildContours.
The latter only reaches wall edges, so it cannot bound
polygon size on its own — with a 448 slab the Stockade tiles
came out bit-identical whether it was 80 or 449.

* offmesh.txt: 124 -> 297 entries (commits a524819, 2d764cb,
88d4d49, 9133d73, 0f3c2ef, 81438ed; 268daeb and f92fb6d keep
the source snapshots). The hand-copied battleground links are
replaced by HonorBuddy's own 52, keeping 14 manual jumps HB
never baked — without them the EotS and AV start platforms
are unreachable. Added: 141 audited drops, the Mechanar
elevator and the EotS platform falls from the 4.3.4 meshes,
the Acherus gryphons, the Duskwither Spire and Firewing Point
translocation orbs (both confirmed clickable against the
repack), and the Darnassus / Rut'theran teleporter rebuilt
from AreaTrigger.dbc — the HB meshes place the Rut'theran pad
400 yards off, on Cataclysm geometry. SotA teleporters
retyped from Ground to DefendersPortal. Every entry was
checked against the extractor's own parser, the tile formula
and a duplicate scan; both full extractions were verified at
the binary level.

Navigation C++ (wrapper):
--------------

* One commit, the format version bump above (8706d63). It is
the first change in this repo since 80cf1bf, which Update 16
reported as unchanged.

MeshViewer3D (navmesh / world viewer):
--------------

* One commit, loading mmtile version 6 (b2fa6da).

Version numbering:
--------------

Previous: v1.5.5 (Update 16).
This release: v1.6.5, a minor bump rather than v1.5.6. The
navmesh tile format changes, which forces a full re-extraction
and breaks every movemaps folder generated so far, and the
dungeon side went from "scripts never ticked" to working end to
end.
 
Back
Top