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've been working on Copilotbuddy for five months. I'm reverse-engineering HonorBuddy 4.3.4 and adapting it for WoW Wrath of the Lich King 3.3.5a. For several years now, people have been asking me for a working version of HonorBuddy for Wrath of the Lich King. So I got to work. Here's a video :

So, let's talk about what's been done. The navigation was based on HB from WoD and Legion. For the tiles, we'll use Mangos generated with our parameters, which are the closest to HB.
The bot's API is 98% similar to HB 4.3.4. I had to adopt several things because they simply don't exist in WotLK.
For the UI, I chose the HB WoD version.
Singular was ported from HB 4.3.4.

For anyone who knows XML and a little C#, and who wants to become a beta tester, work on profiles and report bugs or black spots for navigation.
DM me.

PS: Don't expect to play with it on Warmen or a custom server. Original WotLK build 3.3.5a 12340.



On Discord, there's a dedicated section for discussion and bug reports.

[Hidden content]
Awesome, brings back many botting memories :)
 
CopilotBuddy — HonorBuddy for WotLK 3.3.5a

Five months in. Reverse-engineering HB 4.3.4 and adapting it for WoW Wrath of the Lich King 3.3.5a (build 12340).

People have been asking for a working HB on WotLK for years. So I built one.

What's done:

  • Navigation — based on HB WoD/Legion navigation.
  • Bot API — 98% parity with HB 4.3.4. Some parts had to be adapted or stubbed since they simply don't exist in WotLK.
  • UI — HB WoD version.
  • Singular — ported from HB 4.3.4.

If you know XML and a bit of C#, and you want to help — test, write profiles, report bugs or nav blackspots — DM me.

WotLK original only. Build 12340. No Warmane, no custom servers.



Discord has a dedicated section for discussion and bug reports.

[Hidden content]
Nice
 
mmap-extractor
==========================

New features:
--------------
* Recast/Detour
- Upgraded sources 2009 → 1.6.0; recompiled Recast + Detour .lib with DT_POLYREF64

* MapBuilder — generation parameters
- Vertical cell height (ch) now independent from horizontal resolution (cs)
- WalkableHeight, WalkableClimb, WalkableRadius aligned to exact HB values
- WalkableSlopeAngle lowered; per-map overrides removed
- Contour simplification: AREA_EDGES flag removed
- PolyMesh area flags explicit for all surface types (Ground / Road / Lava / Fall)
- generateJumpDownConnections removed (dead code)

* offmesh.txt
- 13+ tiles corrected (inverted coordinates or out-of-bounds entries)
- Vanilla / TBC / Northrend elevators recalculated from the tile coordinate formula
- Ebon Hold portals added (map 0 + map 609)
- Ebon Hold NPC taxi connections added (areaType 13)

* Data
- gameobject_spawns.bin added — enriches GO detection during extraction


Bot
==========================

New features:
--------------
* Navigation — C++ DLL
- MAX_POLYS_BUFFER and MAX_PATH_LENGTH raised 740 → 8192 (HB 6.2.3 / Tripper values)
- NavMesh query pool raised 65535 → 748983 (HB 6.2.3 WorldMeshManager value)
- dtNodeIndex promoted from unsigned short to unsigned int — supports >65535 nodes
- PathFinder area costs aligned to HB 4.3.4: Ground=1.66, Water=3.33, Lava=55.0,
Road=1.0, Fall=1.7
- NavBridge: added SetNavLogCallback_C — CalculatePathEx routes FAILED / partial
results back to the managed C# logger

* Navigator / Navigation stack
- MeshNavigator: navmesh raycast off-path check; off-mesh connection segments
skipped in the collision check (portals, jump links)
- Navigator: delegates to Flightor when CanFly is true — QuestBot / LevelBot now
use flying mounts automatically in Northrend and Outland
- BlackspotManager: rewritten to match HB 4.3.4/6.2.3 pattern; blackspot polygons
now use RECAST flag 0x0800 — truly impassable instead of high-cost only
- StuckHandler upgraded to HB 6.2.3: Stopwatch + PathDistance stuck detection

* Flightor / PolyNav
- Ported PolyNav 2D path queue from WoD (smethod_10); replaces single CTM line
- Added ShouldWalk() — prefers ground nav when mount+fly time > walk time
- Added CanFly property (WotLK-adapted from HB 6.2.3)
- Anti-stuck (smethod_14): position check every 500 ms, ascend/strafe/back sequence
- No-fly zone and elevator detection redirect to ground nav
- Smart-Z on intermediate waypoints: holds altitude until within 200 m of destination
- Added FlightorNavigation/ (PolyNav.cs, Areas.cs, AerialBlackspotManager.cs)
and FlightorAnnotation/IndoorEntrance.cs — ported from HB 6.2.3

* DungeonBuddy — Avoidance
- Added AvoidancePriority enum (Low / Normal / High / Critical)
- AvoidInfo and AvoidanceManager accept and sort by priority
- Added WorldObstacleManager — dynamic world obstacles as avoidance zones
- Added DynamicBlackspot and DynamicBlackspotManager — runtime injection/removal
- WoWPulsator: NavAvoidanceUpdater pulsed each tick

* DungeonBuddy — Settings / targeting
- Added LootRollType enum (Need / Greed / Pass)
- Added SellItemQuality, MailBoeItems, MinFreeBagSlots, LootRollType settings
- BossManager: CurrentBoss returns full Boss object; Location, MarkAsDead, Reset added
- DungeonTargeting: SoloFarm (PartyMode.Off) acts as tank in include filter and scoring
- ScriptHelpers: CreateMountBehavior returns Fail inside dungeon instances
- Added CanNavigateWithinDistance(start, dest, maxPath) to Navigator (HB Class81.method_10)

* DungeonBuddy — FormConfig / PathView
- PathView tab wired to Secret tab "Show Path" button (Add / Remove / Clear)
- ToggleControlForSelection correctly hides/shows dungeon tree and Select All button

* GatherBuddy — full WoD port
- Rewrote gather loop against WoD reference; removed dead code
- Approach point: OrderByDescending Z + 2f ceiling; avoids unnecessary descend/climb
- Blacklist API preserved (public HashSet<WoWPoint>) for plugin compatibility
- Added BagHelper; wired profile-reload event; Flightor.Clear on Start
- Per-tick 'Flying to' log spam suppressed

* Quest / RunCode behavior
- Added ProfileBatchManager — Roslyn compile batch per profile (HB WoD Class1208)
- Added CompileBatch, CompileError, DelayCompiledExpression
- Added CompileExpressionAttribute, CompileStringAttribute,
CustomBehaviorFileNameAttribute, IXmlObject interface
- ForcedCodeBehavior: hooked into ProfileBatchManager lifecycle

* Core
- Custom client support (Epoch / Ascension): build 0 accepted; LARGEADDRESSAWARE
clients no longer throw OverflowException on reads above 0x7FFFFFFF
- WoWObject: IsOutdoors / IsIndoors via client routine 0x71B7F0 (inline ASM);
IsFlying shortcut added
- Ported HB 6.2.3 global exception handlers: Dispatcher, AppDomain,
UnobservedTaskException — all crashes now land in the log
- CircularQueue: Bounce mode added; CycleTo method added
- WoWMovement: Pulse() added; unused helpers removed

* Singular — Shaman
- Added DisableTotems toggle to ShamanSettings — guards all totem drops
- Added CreateRecallTotems — totems recalled before re-drop on reposition; throttled
- Added Throttle composite to Helpers (configurable time-window gate)

* Tripper / AreaType
- Added missing AreaType values (KnownBuilding, Misc4–Misc10) from HB 6.2.3

Bug fixes:
--------------
* Navigation — C++ DLL
- Reverted experimental Detour modifications back to stock pathfinding

* Navigator / Pathing
- StuckHandler: removed automatic nearby-object blackspotting — was permanently
blackspotting campfires, traps, and other non-colliding GameObjects
- Navigator: false-stuck triggers on slopes and mid-air descents eliminated
- Navigator: Flightor delegation removed from Navigator.MoveTo
- WoWMovement: CTM calls synchronized on executor lock
- WoWMovement: ActiveInputControl offset corrected to 0xC24954; MoveStop flag mask
fixed; TurnLeft/Right stop added
- Mount: cant-mount spots limited to permanent geometry only; cleared on success
- Flightor: mountain collision fixed (HitTestGroundAndStructures); takeoff spot
cache ported (smethod_5/4)
- Flightor: swimming ascent dead code removed; ShouldWalk skips swimming branch;
Druid handler covers WotLK riverbeds via HitTestLiquid
- Flightor: LOS range 30f → 10f (HB 6.2.3)
- Off-mesh link: Orgrimmar gate corrected (tile 40,29 = 0012940)
- ForcedMoveTo: arrival detection and quest completion restored; null-quest guard added

* DungeonBuddy
- Combat targeting loop: mobs were skipped due to bad iteration order
- CanNavigateWithinDistance reverted to 40f (HB 4.3.4 original value)
- 4 SoloFarm runtime bugs fixed: loot filter, bag-slot check, vendor trigger, re-queue
- DungeonManager: InstanceNotFoundException caught in SetDungeon
- ShouldSellItemsInSoloFarm: uses Me.FreeBagSlots instead of Lua call
- LfgManager: AcceptProposal simplified to direct Lua call
- LfgManager: GetPartyLFGID wrapped in pcall — avoids Lua error outside LFG group
- Proposal flow and maintenance checks realigned to HB parity
- DungeonManager: dispose current dungeon and reset complete reason on exit
- TreeRoot: tick frame handling stabilized under CPU load
- TreeSharp: Switch<T> passes tree context through RunSwitch() — fixes NRE in
DiscoBot follow behavior

* DungeonBuddy — FormConfig (6 UI fixes)
- button1_Click (Target Info): now logs boss.IsAlive from BossEncounters (not
boss.IsDead from BossManager)
- dbgButton2_Click (Navigation): was a copy-paste of button1; now correctly checks
CanNavigateFully and skips Optional bosses
- btnToggleMovement_Click: calls WoWMovement.MoveStop() when disabling movement
- GenerateTreeView: dungeon list appends [Map Id: X] after each name
- ShowAllDungeons now persisted; FormConfig_Load reads the actual setting
- Button row: StackPanel → WrapPanel; buttons wrap on narrow windows (360 px)

* GatherBuddy
- Double-interact / false /sit: Z-check that triggered sit-to-gather removed
- IgnoreElites scan made lazy (not per-tick)
- Sorrowmoss harvest node corrected (was mapped to Plaguebloom)

* LevelBot
- NeedToSell / NeedToRepair / NeedToTrain: null guards added
- Bot no longer attempts gather when the gather setting is disabled mid-run
- IsPathBlocked stutter removed — was forcing a full repath every tick
- WorldObstacleManager wired on Start/Stop

* DiscoBot
- Leader connection wrapped in try/catch with user-friendly error message
- SafeRaF: CurrentTarget returns leader's target, not the leader unit itself

* Core
- LocalPlayer.IsInInstance: reads Map.dbc field 2 via WoWDb (not Lua)
- WoWDb: _initialized made static; null guard added before SetTrue
- TreeSharp: ContextChanger applied before child execution in PrioritySelector
- WoWSpell.GetSpellCooldown: Lua call now passes spell name, not numeric ID
- WoWTotemInfo.GetSpellLink: Lua crash fixed — WotLK requires name, not slot index
- WoWPartyMember.Role: calls UnitGroupRolesAssigned() — returns Healer/Damage/Tank
- WoWObject: interact timer extended 1s → 2s (HB 4.3.4 waitTimer_0)
- BotEvents: two missing event hookup fixes
- WoWMovementInfo: IsDescending / IsAscending corrected
- WoWChat: reduced to WotLK-relevant message types; MoP+ channel IDs removed

* Singular — Shaman
- Weapon imbue spam fixed; imbues no longer re-apply every pulse when active
- Enchant ID checks replaced with IsValid guard
- Totem re-cast on reposition no longer triggers while mounted

* Singular — Rogue
- Combo finisher: target GUID resolution corrected
- Assassination: Sinister Strike added as Mutilate fallback

* Singular — Movement / Casting
- Cast branch waits for facing before allowing ranged spells
- LOS check limited to ranged spells only (rangeId != 2)
- UnfriendlyUnitsNearTarget and IsBoss NRE fixes during melee approach

* Singular — Warrior
- Protection and Fury rotations updated

* Singular — Group
- Healer/tank detection: UnitGroupRolesAssigned() with class-based fallback
(Paladin/Warrior/Druid → tank; Priest/Druid/Shaman → healer)

* Singular — Lowbie
- Rest behavior added to all classes (eat/drink via CreateDefaultRestBehaviour)
 
Back
Top