About This File
set line 221 according to how NPCs behave on your server.
etc.:
// Ideal melee position (2-4 yards)
bool inMeleeRange = distanceToTarget >= 5f && distanceToTarget <= 6f;
Advanced Feral Tank – FightClass Documentation
etc.:
// Ideal melee position (2-4 yards)
bool inMeleeRange = distanceToTarget >= 5f && distanceToTarget <= 6f;
Overview
The Advanced Feral Tank FightClass is designed for Feral Druids in Bear Form to tank effectively in WoW 3.3.5 using WRobot. It automates:
-
Buff management (self and party)
-
Threat generation and taunting
-
Single-target and AoE tanking rotations
-
Emergency defensive cooldowns
-
Rage management
The class runs in a dedicated background thread, executing the rotation every 150 ms when in-game, alive, and not mounted.
Main Components
1. Main Class
Implements ICustomClass
:
-
Initialize() – Creates the rotation handler, starts the rotation thread, logs initialization.
-
RunRotation() – Loop that calls
PulseRotation()
if conditions are met. -
Dispose() – Stops the rotation thread and cleans up.
-
Range – Fixed at 5 yards (melee range).
-
ShowConfiguration() – Currently empty.
2. FeralDruidTankRotation
Handles all combat and out-of-combat logic.
Key Spell Constants
-
Forms:
Bear Form
,Dire Bear Form
-
Threat/Damage:
Mangle (Bear)
,Lacerate
,Swipe (Bear)
,Faerie Fire (Feral)
-
Debuffs:
Demoralizing Roar
-
Taunt:
Growl
-
Defensive CDs:
Survival Instincts
,Frenzied Regeneration
,Barkskin
-
Utility:
Enrage
-
Buffs:
Mark of the Wild
,Gift of the Wild
,Thorns
Rotation Logic
Out of Combat
-
BuffPartyMembers():
-
Applies
Gift of the Wild
orMark of the Wild
to unbuffed party members. -
Applies
Thorns
to tanking players. -
Buff checks occur every 5 seconds.
-
In Combat
-
EnsureBearForm() – Shifts into
Dire Bear Form
orBear Form
if not already active. -
HandleEmergency() – Uses defensive cooldowns based on health thresholds:
-
≤ 30% HP →
Survival Instincts
-
≤ 50% HP →
Frenzied Regeneration
-
≤ 60% HP →
Barkskin
-
Low rage & high HP →
Enrage
-
-
HandleThreatManagement() – Every 1 s:
-
Scans for hostile mobs attacking party members.
-
Uses
Growl
to taunt. -
Applies
Faerie Fire (Feral)
if missing.
-
-
ExecuteMainRotation():
-
Counts nearby enemies (≤ 8 yards).
-
AoE Rotation (≥ 3 enemies):
-
Demoralizing Roar
if missing -
Mangle (Bear)
-
Swipe (Bear)
-
Lacerate
-
-
Single Target Rotation (< 3 enemies):
-
Faerie Fire (Feral)
if missing -
Demoralizing Roar
if missing -
Mangle (Bear)
-
Maintain 5 stacks of
Lacerate
(refresh if < 5 stacks or < 3 s remaining) -
Swipe (Bear)
as filler -
Auto-attack if idle
-
-
Utility Functions
-
HasBuff() / HasBuffOnUnit() – Checks buffs on player or unit.
-
HasDebuffOnTarget() – Checks debuffs on target.
-
GetDebuffStacks() / GetDebuffTimeLeft() – Tracks
Lacerate
stacks and duration. -
GetPartyMembers() – Retrieves player and party members.
-
IsPlayerTank() – Detects if a party member is a tank (class/form check).
-
GetUnitId() – Resolves WoW unit IDs for Lua API calls.
Timers
Custom Timer
class prevents excessive checks:
-
threatCheckTimer – 1 s interval
-
buffCheckTimer – 5 s interval
-
emergencyTimer – 0.5 s interval
Key Features
-
Automatic form shifting into Bear/Dire Bear.
-
Party support with buffs and Thorns for tanks.
-
Smart threat control with taunts and debuffs.
-
Adaptive rotation for single-target and AoE.
-
Emergency survival logic with cooldown prioritization.
-
Rage management via Enrage when safe.
Intended Use
-
Class: Druid (Feral Tank)
-
Game Version: WoW 3.3.5 (Wrath of the Lich King)
-
Bot Framework: WRobot
-
Role: Main tank in dungeons/raids or off-tank in groups.
What's New in Version 1.0.39 See changelog
Released
How it works:
-
On enemy kill →
ClearDeadTarget()
immediately stops all movement -
Out of combat →
HandleOptimizedMovementLogic()
stops movement -
Without a target → Movement stops and does not restart
-
State check → Before each movement, the validity of the situation is checked
This should fix the issue with constant backpedaling. The character will now only move when:
-
In combat
-
Has a live target
-
There are enemies attacking it
-
Needs to adjust position
Main changes:
-
New method
ResetCameraPosition()
-
Stops all rotational movements
-
Uses
SetView(4)
to reset to rear view -
Calls
CameraOrSelectOrMoveStop()
for a full reset -
Works only out of combat (due to
InCombatLockdown()
)
-
-
Improved
ResetCombatState()
-
Automatically calls
ResetCameraPosition()
at the end of combat -
Reset is always performed when combat ends
-
-
Adjustment in
PulseRotation()
-
Explicitly stops movement out of combat
-
Ensures the camera resets correctly
-
-
Improved
TurnTowardsTarget()
-
Shorter turning time (faster reaction)
-
Smaller maximum turning time (300ms instead of 500ms)
-
-
Adjustment in
StopCurrentMovement()
-
After stopping rotation, calls
CameraOrSelectOrMoveStop()
-
Small pause for camera stabilization
-
How it works:
-
During combat → Normal turning for tanking
-
End of combat →
ResetCombatState()
→ResetCameraPosition()
-
After each turn → Small camera reset for stabilization
-
Out of combat → Camera auto-centers
This should fix the issue with a misaligned camera after combat. The camera will now automatically:
-
Reset after each combat
-
Stabilize after turning
-
Center when not in combat
Added Bash interrupt system to rotation:
New features:
-
New method
HandleInterruptWithBash()
-
Scans all enemies within 5 yards
-
Detects casting enemies
-
Prioritizes by cast type (heals, CC, damage)
-
Automatically switches target if an interrupt is needed
-
-
Method
CalculateInterruptPriority()
Determines interrupt priority based on:-
Highest priority (150+): Heal casts (
Heal
,Restoration
,Rejuvenation
,Regrowth
) -
High priority (120+): CC casts (
Fear
,Polymorph
,Cyclone
,Hex
) -
Medium priority (100+): Damage casts (
Pyroblast
,Chain Lightning
,Chaos Bolt
) -
Bonuses:
-
+50 if the cast is aimed at you
-
+80 if the cast is aimed at a party member with low HP
-
+30 for elite/boss mobs
-
-
-
Method
GetEnemyCastInfo()
-
Retrieves cast name via Lua
-
Checks both normal casts and channeled spells
-
Safe error handling
-
-
Integration into rotation
-
Bash has priority right after threat management
-
In single-target rotation, Bash is first priority if the target is casting
-
In AoE situations, a separate interrupt system is used
-
How it works:
-
Automatic detection: System constantly scans for casting enemies
-
Intelligent prioritization: Interrupts the most dangerous casts first
-
Multi-target support: Can switch target to interrupt and then return
-
Range check: Bash is only used if the enemy is within 5 yards
Usage:
-
In single target: Automatically interrupts your current target
-
In multi-target: Finds and interrupts the most important cast in range
-
Threat + Interrupt: Prioritizes enemies casting on party members
Bash will now automatically be used on:
-
Healers when casting
-
Casters using CC
-
Large damage casts
-
Any cast threatening party members