Skip to content

Commit

Permalink
Merge pull request liyunfan1223#175 from liyunfan1223/config/spec
Browse files Browse the repository at this point in the history
Improve premade spec links
  • Loading branch information
liyunfan1223 authored Apr 10, 2024
2 parents 7131ede + 7cd74da commit 839257c
Show file tree
Hide file tree
Showing 15 changed files with 187 additions and 78 deletions.
130 changes: 89 additions & 41 deletions conf/playerbots.conf.dist
Original file line number Diff line number Diff line change
Expand Up @@ -475,112 +475,160 @@ Playerbots.Updates.EnableDatabases = 1
##############################################
# AiPlayerbot.PremadeSpecName.<class>.<specno> = <name> #Name of the talent specialisation
# AiPlayerbot.PremadeSpecLink.<class>.<specno>.<level> = <link> #Wowhead style link the bot should work towards at given level.
# AiPlayerbot.PremadeSpecGlyph.<class>.<specno> = <major 1>,<minor 1>,<major 2>,<minor 2>,<minor 3>,<major 3>
# e.g., formulate the link on https://www.wowhead.com/wotlk/talent-calc/warrior/3022032123335100202012013031251-32505010002
# 0 <= specno < 20, 1 <= level <= 80

# Warrior
AiPlayerbot.PremadeSpecName.1.0 = arms pve
AiPlayerbot.PremadeSpecLink.1.0.60 =
AiPlayerbot.PremadeSpecGlyph.1.0 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.1.0.60 = 3022032023335100202012013031241
AiPlayerbot.PremadeSpecLink.1.0.80 = 3022032123335100202012013031251-32505010002
# AiPlayerbot.PremadeSpecGlyph.1.0 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecName.1.1 = fury pve
AiPlayerbot.PremadeSpecLink.1.1.60 =
AiPlayerbot.PremadeSpecGlyph.1.1 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.1.1.60 = -305053000500310053120501351
AiPlayerbot.PremadeSpecLink.1.1.80 = 30202300233-305053000500310153120511351
AiPlayerbot.PremadeSpecName.1.2 = prot pve
AiPlayerbot.PremadeSpecLink.1.2.60 =
AiPlayerbot.PremadeSpecGlyph.1.2 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.1.2.60 = --053351225000210521030113321
AiPlayerbot.PremadeSpecLink.1.2.80 = 3500030023-301-053351225000210521030113321

# Paladin
AiPlayerbot.PremadeSpecName.2.0 = holy pve
AiPlayerbot.PremadeSpecLink.2.0.60 =
AiPlayerbot.PremadeSpecGlyph.2.0 = 41106,43367,45741,43369,43365,41109
AiPlayerbot.PremadeSpecLink.2.0.60 = 50350151020013053100515221
AiPlayerbot.PremadeSpecLink.2.0.80 = 50350152220013053100515221-503201312
AiPlayerbot.PremadeSpecName.2.1 = prot pve
AiPlayerbot.PremadeSpecLink.2.1.60 =
AiPlayerbot.PremadeSpecGlyph.2.1 = 41100,43367,43869,43369,43365,45745
AiPlayerbot.PremadeSpecLink.2.1.60 = -05005135203102311333112321
AiPlayerbot.PremadeSpecLink.2.1.80 = -05005135203132311333312321-5023005
AiPlayerbot.PremadeSpecName.2.2 = ret pve
AiPlayerbot.PremadeSpecLink.2.2.60 =
AiPlayerbot.PremadeSpecGlyph.2.2 = 41092,43367,41099,43369,43365,43869
AiPlayerbot.PremadeSpecLink.2.2.60 = --05230051203331302133231131
AiPlayerbot.PremadeSpecLink.2.2.65 = -05-05230051203331302133231131
AiPlayerbot.PremadeSpecLink.2.2.80 = 050501-05-05232051203331302133231331

# Hunter
AiPlayerbot.PremadeSpecName.3.0 = bm pve
AiPlayerbot.PremadeSpecGlyph.3.0 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.3.0.60 = 51200201505112243100511351
AiPlayerbot.PremadeSpecLink.3.0.80 = 51200201505112253100531351-015305021
AiPlayerbot.PremadeSpecName.3.1 = mm pve
AiPlayerbot.PremadeSpecLink.3.1.60 =
AiPlayerbot.PremadeSpecGlyph.3.1 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.3.1.60 = -015305101230013233135030051
AiPlayerbot.PremadeSpecLink.3.1.80 = 502-035305101230013233135031351-5000002
AiPlayerbot.PremadeSpecName.3.2 = surv pve
AiPlayerbot.PremadeSpecLink.3.2.60 =
AiPlayerbot.PremadeSpecLink.3.2.80 = -0053041-5000032500033330523134321331
AiPlayerbot.PremadeSpecGlyph.3.2 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.3.2.60 = --5000032500033330502135001331
AiPlayerbot.PremadeSpecLink.3.2.80 = -005305101-5000032500033330522135301331

# Rogue
AiPlayerbot.PremadeSpecName.4.0 = as pve
AiPlayerbot.PremadeSpecLink.4.0.60 =
AiPlayerbot.PremadeSpecLink.4.0.80 = 005323005350100520103331051-005005003-502
AiPlayerbot.PremadeSpecGlyph.4.0 = 45768,43379,45761,43380,43378,45767
AiPlayerbot.PremadeSpecLink.4.0.60 = 005323005350100520103331051
AiPlayerbot.PremadeSpecLink.4.0.80 = 005323005350100520103331051-005005005003-2
AiPlayerbot.PremadeSpecName.4.1 = combat pve
AiPlayerbot.PremadeSpecLink.4.1.60 =
AiPlayerbot.PremadeSpecLink.4.1.80 = 30530000522-0252051000035015223100501251
AiPlayerbot.PremadeSpecGlyph.4.1 = 45762,43379,45767,43380,43378,45766
AiPlayerbot.PremadeSpecLink.4.1.60 = -0252051000035015223100501251
AiPlayerbot.PremadeSpecLink.4.1.80 = 00532000523-0252051000035015223100501251
AiPlayerbot.PremadeSpecName.4.2 = subtlety pve
AiPlayerbot.PremadeSpecLink.4.2.60 =
AiPlayerbot.PremadeSpecGlyph.4.2 = 42967,43379,45764,43380,43378,45767
AiPlayerbot.PremadeSpecLink.4.2.60 = --5120122030321121050135031241
AiPlayerbot.PremadeSpecLink.4.2.80 = 0053231-2-5120222030321121050135231251

# Priest
AiPlayerbot.PremadeSpecName.5.0 = disc pve
AiPlayerbot.PremadeSpecLink.5.0.60 =
AiPlayerbot.PremadeSpecLink.5.0.80 = 0503203130300512331323231251-03530003
AiPlayerbot.PremadeSpecGlyph.5.0 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.5.0.60 = 0503203130300512301323131051
AiPlayerbot.PremadeSpecLink.5.0.80 = 0503203130300512331323231251-03520103
AiPlayerbot.PremadeSpecName.5.1 = holy pve
AiPlayerbot.PremadeSpecLink.5.1.60 =
AiPlayerbot.PremadeSpecGlyph.5.1 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.5.1.60 = -035050031301152530000331331
AiPlayerbot.PremadeSpecLink.5.1.80 = 05032031-235050032302152530000331351
AiPlayerbot.PremadeSpecName.5.2 = shadow pve
AiPlayerbot.PremadeSpecLink.5.2.60 =
AiPlayerbot.PremadeSpecGlyph.5.2 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.5.2.60 = --325003041203010323150301351
AiPlayerbot.PremadeSpecLink.5.2.80 = 0503203--325023051223010323152301351

# DeathKnight
AiPlayerbot.PremadeSpecName.6.0 = blood pve
AiPlayerbot.PremadeSpecLink.6.0.60 =
AiPlayerbot.PremadeSpecGlyph.6.0 = 45805,43673,43827,43544,43672,43554
AiPlayerbot.PremadeSpecLink.6.0.60 = 0055021533003313201020131151
AiPlayerbot.PremadeSpecLink.6.0.80 = 0355021533003313201020131351-005-005032
AiPlayerbot.PremadeSpecName.6.1 = frost pve
AiPlayerbot.PremadeSpecLink.6.1.60 =
AiPlayerbot.PremadeSpecLink.6.1.80 = 03-32002350352203012300033101351-230200305
AiPlayerbot.PremadeSpecGlyph.6.1 = 45805,43673,43547,43544,43672,43543
AiPlayerbot.PremadeSpecLink.6.1.60 = -32003350332203012300023101351
AiPlayerbot.PremadeSpecLink.6.1.80 = -32002350352203012300033101351-230200305003
AiPlayerbot.PremadeSpecName.6.2 = unholy pve
AiPlayerbot.PremadeSpecLink.6.2.60 =
AiPlayerbot.PremadeSpecLink.6.2.80 = 23050202--2302003350032152003150003133151
AiPlayerbot.PremadeSpecGlyph.6.2 = 43542,43673,45804,43544,43672,43549
AiPlayerbot.PremadeSpecLink.6.2.60 = --2300303050032152000150213130051
AiPlayerbot.PremadeSpecLink.6.2.80 = -320053500002-2300303050032152000150213130051
AiPlayerbot.PremadeSpecName.6.3 = double aura blood pve
AiPlayerbot.PremadeSpecGlyph.6.3 = 45805,43673,43827,43544,43672,43554
AiPlayerbot.PremadeSpecLink.6.3.60 = 005512153330030320102013-305
AiPlayerbot.PremadeSpecLink.6.3.80 = 005512153330030320102013-3050505002023001-002

# Shaman
AiPlayerbot.PremadeSpecName.7.0 = ele pve
AiPlayerbot.PremadeSpecLink.7.0.60 =
AiPlayerbot.PremadeSpecGlyph.7.0 = 41536,43385,41532,43386,44923,45776
AiPlayerbot.PremadeSpecLink.7.0.60 = 4530001520213351102301351
AiPlayerbot.PremadeSpecLink.7.0.80 = 3530001523213351322301351-005050031
AiPlayerbot.PremadeSpecName.7.1 = enh pve
AiPlayerbot.PremadeSpecLink.7.1.60 =
AiPlayerbot.PremadeSpecGlyph.7.1 = 41530,43385,41539,43386,44923,41540
AiPlayerbot.PremadeSpecLink.7.1.60 = -30205033005001333031131131051
AiPlayerbot.PremadeSpecLink.7.1.80 = 053030052-30205033005021333031131131051
AiPlayerbot.PremadeSpecName.7.2 = resto pve
AiPlayerbot.PremadeSpecLink.7.2.60 =
AiPlayerbot.PremadeSpecGlyph.7.2 = 41517,43385,41527,43386,44923,45775
AiPlayerbot.PremadeSpecLink.7.2.60 = --50005301335310501002331241
AiPlayerbot.PremadeSpecLink.7.2.80 = -00505031-50005331335310501022331251

# Mage
AiPlayerbot.PremadeSpecName.8.0 = arcane pve
AiPlayerbot.PremadeSpecLink.8.0.60 =
AiPlayerbot.PremadeSpecLink.8.0.80 = 235005030100230150323102505321-03-203023001
AiPlayerbot.PremadeSpecGlyph.8.0 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.8.0.60 = 23000503110033014032310150532
AiPlayerbot.PremadeSpecLink.8.0.80 = 23000523310033015032310250532-03-203203001
AiPlayerbot.PremadeSpecName.8.1 = fire pve
AiPlayerbot.PremadeSpecLink.8.1.60 =
AiPlayerbot.PremadeSpecGlyph.8.1 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.8.1.60 = -0055030012303330053120300351
AiPlayerbot.PremadeSpecLink.8.1.80 = 23000503310003-0055030012303330053120300351
AiPlayerbot.PremadeSpecName.8.2 = frost pve
AiPlayerbot.PremadeSpecLink.8.2.60 =
AiPlayerbot.PremadeSpecGlyph.8.2 = 0,0,0,0,0,0
AiPlayerbot.PremadeSpecLink.8.2.60 = --3533103310203100232102231151
AiPlayerbot.PremadeSpecLink.8.2.80 = 23002322010203--3533103310203100232102231151

# Warlock
AiPlayerbot.PremadeSpecName.9.0 = affli pve
AiPlayerbot.PremadeSpecLink.9.0.60 =
AiPlayerbot.PremadeSpecLink.9.0.80 = 2350020021123510253500331151--55000005
AiPlayerbot.PremadeSpecGlyph.9.0 = 45785,43390,50077,43394,43393,45779
AiPlayerbot.PremadeSpecLink.9.0.60 = 2350022001113510053500131151
AiPlayerbot.PremadeSpecLink.9.0.70 = 2350022001113510053500131151--55
AiPlayerbot.PremadeSpecLink.9.0.80 = 2350022001113510253500331151--5500000501
AiPlayerbot.PremadeSpecName.9.1 = emo pve
AiPlayerbot.PremadeSpecLink.9.1.60 =
AiPlayerbot.PremadeSpecLink.9.1.80 = -003203301135212530135211351-55000005
AiPlayerbot.PremadeSpecGlyph.9.1 = 45785,43390,50077,43394,43393,42459
AiPlayerbot.PremadeSpecLink.9.1.60 = -003203301135112530131201-55
AiPlayerbot.PremadeSpecLink.9.1.70 = -003203301135112530135201051-55
AiPlayerbot.PremadeSpecLink.9.1.80 = -003203301135112530135221351-55000005
AiPlayerbot.PremadeSpecName.9.2 = destro pve
AiPlayerbot.PremadeSpecLink.9.2.60 =
AiPlayerbot.PremadeSpecGlyph.9.2 = 45785,43390,50077,43394,43393,42454
AiPlayerbot.PremadeSpecLink.9.2.60 = --05203205210131051313230341
AiPlayerbot.PremadeSpecLink.9.2.80 = -03310030003-05203205210331051335230351

# Druid
AiPlayerbot.PremadeSpecName.11.0 = balance pve
AiPlayerbot.PremadeSpecLink.11.0.60 =
AiPlayerbot.PremadeSpecGlyph.11.0 = 40916,43331,40921,43335,44922,40919
AiPlayerbot.PremadeSpecLink.11.0.60 = 5012203115331003213302301231
AiPlayerbot.PremadeSpecLink.11.0.80 = 5012203125331103213305301231--205003212
AiPlayerbot.PremadeSpecName.11.1 = feral pve
AiPlayerbot.PremadeSpecLink.11.1.60 =
AiPlayerbot.PremadeSpecName.11.1 = bear pve
AiPlayerbot.PremadeSpecGlyph.11.1 = 40897,43331,46372,43335,43332,40899
AiPlayerbot.PremadeSpecLink.11.1.60 = -500232130322110353100301310501
AiPlayerbot.PremadeSpecLink.11.1.80 = -501232130322110353120303313511-20350001
AiPlayerbot.PremadeSpecGlyph.11.1 = 40897,43331,46372,43335,43332
AiPlayerbot.PremadeSpecName.11.2 = resto pve
AiPlayerbot.PremadeSpecLink.11.2.60 =
AiPlayerbot.PremadeSpecGlyph.11.2 = 40913,43331,40906,43335,44922,45602
AiPlayerbot.PremadeSpecLink.11.2.60 = --230033312031501531050013051
AiPlayerbot.PremadeSpecLink.11.2.80 = 05320001--230033312031512531153313051
AiPlayerbot.PremadeSpecName.11.3 = cat pve
AiPlayerbot.PremadeSpecGlyph.11.3 = 40902,43331,40901,43335,44922,45604
AiPlayerbot.PremadeSpecLink.11.3.60 = -553202032322010052100030310501
AiPlayerbot.PremadeSpecLink.11.3.80 = -553202032322010053100030310511-205503012

##############################################
# Default TalentSpec for random bots #
Expand Down
2 changes: 1 addition & 1 deletion src/PlayerbotAI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1388,7 +1388,7 @@ bool PlayerbotAI::IsCombo(Player* player)
{
int tab = AiFactory::GetPlayerSpecTab(player);
return player->getClass() == CLASS_ROGUE ||
(player->getClass() == CLASS_DRUID && tab == DRUID_TAB_FERAL && !IsTank(bot));
(player->getClass() == CLASS_DRUID && player->HasAura(768)); // cat druid
}

bool PlayerbotAI::IsRangedDps(Player* player)
Expand Down
26 changes: 16 additions & 10 deletions src/PlayerbotFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2882,6 +2882,9 @@ void PlayerbotFactory::InitGlyphs(bool increment)

if ((proto->AllowableClass & bot->getClassMask()) == 0 || (proto->AllowableRace & bot->getRaceMask()) == 0)
continue;

if (proto->RequiredLevel > bot->GetLevel())
continue;

uint32 glyph = 0;
for (uint32 spell = 0; spell < MAX_ITEM_PROTO_SPELLS; spell++)
Expand Down Expand Up @@ -3666,12 +3669,12 @@ float PlayerbotFactory::CalculateItemScore(uint32 item_id, Player* bot)
{
case SPELL_AURA_MOD_DAMAGE_DONE:
// case SPELL_AURA_MOD_HEALING_DONE: duplicated
spell_power += spellInfo->Effects[i].BasePoints + 1;
spell_power += (spellInfo->Effects[i].BasePoints + 1) * 0.2;
break;
case SPELL_AURA_MOD_ATTACK_POWER:
attack_power += spellInfo->Effects[i].BasePoints + 1;
attack_power += (spellInfo->Effects[i].BasePoints + 1) * 0.2;
case SPELL_AURA_MOD_SHIELD_BLOCKVALUE:
block += spellInfo->Effects[i].BasePoints + 1;
block += (spellInfo->Effects[i].BasePoints + 1) * 0.2;
default:
break;
}
Expand Down Expand Up @@ -3747,25 +3750,25 @@ float PlayerbotFactory::CalculateItemScore(uint32 item_id, Player* bot)
score *= 0.5;
}
// spec without double hand
// enhancement, rogue, ice dk, shield tank, fury warrior without titan's grip but with duel wield
// enhancement, rogue, ice dk, unholy dk, shield tank, fury warrior without titan's grip but with duel wield
if (isDoubleHand &&
((cls == CLASS_SHAMAN && tab == 1 && bot->HasSpell(674)) ||
((cls == CLASS_SHAMAN && tab == 1 && bot->CanDualWield()) ||
(cls == CLASS_ROGUE) ||
(cls == CLASS_DEATH_KNIGHT && tab == 1) ||
(cls == CLASS_WARRIOR && tab == 1 && !bot->HasAura(49152) && bot->HasSpell(674)) ||
(cls == CLASS_DEATH_KNIGHT && tab != 0) ||
(cls == CLASS_WARRIOR && tab == 1 && !bot->CanTitanGrip() && bot->CanDualWield()) ||
IsShieldTank(bot))) {
score *= 0.1;
}
// spec with double hand
// fury with titan's grip, fury without duel wield, arms, bear, retribution, blood dk
if (isDoubleHand &&
((cls == CLASS_WARRIOR && tab == WARRIOR_TAB_FURY && bot->HasAura(49152)) ||
(cls == CLASS_WARRIOR && tab == WARRIOR_TAB_FURY && !bot->HasSpell(674)) ||
((cls == CLASS_WARRIOR && tab == WARRIOR_TAB_FURY && bot->CanTitanGrip()) ||
(cls == CLASS_WARRIOR && tab == WARRIOR_TAB_FURY && !bot->CanDualWield()) ||
(cls == CLASS_WARRIOR && tab == WARRIOR_TAB_ARMS) ||
(cls == CLASS_DRUID && tab == 1) ||
(cls == CLASS_PALADIN && tab == 2) ||
(cls == CLASS_DEATH_KNIGHT && tab == 0) ||
(cls == CLASS_SHAMAN && tab == 1 && !bot->HasSpell(674)))) {
(cls == CLASS_SHAMAN && tab == 1 && !bot->CanDualWield()))) {
score *= 10;
}
}
Expand All @@ -3777,6 +3780,9 @@ float PlayerbotFactory::CalculateItemScore(uint32 item_id, Player* bot)
score *= 0.1;
}
}
if (proto->ItemSet != 0) {
score *= 1.1;
}
return (0.0001 + score) * itemLevel * (quality + 1);
}

Expand Down
2 changes: 1 addition & 1 deletion src/strategy/actions/MovementActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle,
// }
bool generatePath = !bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) &&
!bot->IsFlying() && !bot->HasUnitMovementFlag(MOVEMENTFLAG_SWIMMING) && !bot->IsInWater();
float modifiedZ = SearchBestGroundZForPath(x, y, z, generatePath, 20.0f, normal_only);
float modifiedZ = SearchBestGroundZForPath(x, y, z, generatePath, 20.0f, normal_only, 8.0f);
if (modifiedZ == INVALID_HEIGHT) {
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion src/strategy/actions/MovementActions.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class MovementAction : public Action
bool MoveInside(uint32 mapId, float x, float y, float z, float distance = sPlayerbotAIConfig->followDistance);
void CreateWp(Player* wpOwner, float x, float y, float z, float o, uint32 entry, bool important = false);
private:
float SearchBestGroundZForPath(float x, float y, float z, bool generatePath, float range = 15.0f, bool normal_only = false, float step = 3.0f);
float SearchBestGroundZForPath(float x, float y, float z, bool generatePath, float range = 20.0f, bool normal_only = false, float step = 8.0f);
};

class FleeAction : public MovementAction
Expand Down
6 changes: 3 additions & 3 deletions src/strategy/deathknight/BloodDKStrategy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ void BloodDKStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
triggers.push_back(new TriggerNode("rune strike", NextAction::array(0, new NextAction("rune strike", ACTION_NORMAL + 3), nullptr)));
triggers.push_back(new TriggerNode("blood tap", NextAction::array(0, new NextAction("blood tap", ACTION_HIGH + 5), nullptr)));
triggers.push_back(new TriggerNode("lose aggro", NextAction::array(0, new NextAction("dark command", ACTION_HIGH + 3), nullptr)));
triggers.push_back(new TriggerNode("low health", NextAction::array(0, new NextAction("blood tap", ACTION_HIGH + 5),
new NextAction("vampiric blood", ACTION_HIGH + 3), new NextAction("death strike", ACTION_HIGH + 4), nullptr)));

triggers.push_back(new TriggerNode("low health", NextAction::array(0, new NextAction("army of the dead", ACTION_HIGH + 5),
new NextAction("vampiric blood", ACTION_HIGH + 4), new NextAction("death strike", ACTION_HIGH + 3), nullptr)));
// triggers.push_back(new TriggerNode("army of the dead", NextAction::array(0, new NextAction("army of the dead", ACTION_HIGH + 6), nullptr)));
}
4 changes: 2 additions & 2 deletions src/strategy/deathknight/DKActions.h
Original file line number Diff line number Diff line change
Expand Up @@ -224,10 +224,10 @@ class CastDeathCoilAction : public CastSpellAction
CastDeathCoilAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "death coil") { }
};

class CastBloodBoilAction : public CastBuffSpellAction
class CastBloodBoilAction : public CastSpellAction
{
public:
CastBloodBoilAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "blood boil") { }
CastBloodBoilAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "blood boil") { }
};

class CastDeathAndDecayAction : public CastSpellAction
Expand Down
Loading

0 comments on commit 839257c

Please sign in to comment.