mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-13 09:07:19 +00:00
Merge pull request #219 from liyunfan1223/miscs
[Miscs] Class spell & configuration for talents and glyphs
This commit is contained in:
@@ -485,21 +485,21 @@ 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>
|
||||
# AiPlayerbot.PremadeSpecGlyph.<class>.<specno> = <major 1>,<minor 1>,<major 2>,<minor 2>,<minor 3>,<major 3> #ItemId of the glyphs
|
||||
# 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.PremadeSpecGlyph.1.0 = 0,0,0,0,0,0
|
||||
AiPlayerbot.PremadeSpecGlyph.1.0 = 43418,43395,43423,43399,49084,43421
|
||||
AiPlayerbot.PremadeSpecLink.1.0.60 = 3022032023335100202012013031241
|
||||
AiPlayerbot.PremadeSpecLink.1.0.80 = 3022032123335100202012013031251-32505010002
|
||||
AiPlayerbot.PremadeSpecName.1.1 = fury pve
|
||||
AiPlayerbot.PremadeSpecGlyph.1.1 = 0,0,0,0,0,0
|
||||
AiPlayerbot.PremadeSpecGlyph.1.1 = 43418,43395,43414,43399,49084,43432
|
||||
AiPlayerbot.PremadeSpecLink.1.1.60 = -305053000500310053120501351
|
||||
AiPlayerbot.PremadeSpecLink.1.1.80 = 30202300233-305053000500310153120511351
|
||||
AiPlayerbot.PremadeSpecName.1.2 = prot pve
|
||||
AiPlayerbot.PremadeSpecGlyph.1.2 = 0,0,0,0,0,0
|
||||
AiPlayerbot.PremadeSpecGlyph.1.2 = 43424,43395,43425,43399,49084,45793
|
||||
AiPlayerbot.PremadeSpecLink.1.2.60 = --053351225000210521030113321
|
||||
AiPlayerbot.PremadeSpecLink.1.2.80 = 3500030023-301-053351225000210521030113321
|
||||
|
||||
@@ -520,15 +520,15 @@ 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.PremadeSpecGlyph.3.0 = 42912,43350,42902,43351,43338,45732
|
||||
AiPlayerbot.PremadeSpecLink.3.0.60 = 51200201505112243100511351
|
||||
AiPlayerbot.PremadeSpecLink.3.0.80 = 51200201505112253100531351-015305021
|
||||
AiPlayerbot.PremadeSpecName.3.1 = mm pve
|
||||
AiPlayerbot.PremadeSpecGlyph.3.1 = 0,0,0,0,0,0
|
||||
AiPlayerbot.PremadeSpecGlyph.3.1 = 42912,43350,42915,43351,43338,45732
|
||||
AiPlayerbot.PremadeSpecLink.3.1.60 = -015305101230013233135030051
|
||||
AiPlayerbot.PremadeSpecLink.3.1.80 = 502-035305101230013233135031351-5000002
|
||||
AiPlayerbot.PremadeSpecName.3.2 = surv pve
|
||||
AiPlayerbot.PremadeSpecGlyph.3.2 = 0,0,0,0,0,0
|
||||
AiPlayerbot.PremadeSpecGlyph.3.2 = 42912,43350,45731,43351,43338,45732
|
||||
AiPlayerbot.PremadeSpecLink.3.2.60 = --5000032500033330502135001331
|
||||
AiPlayerbot.PremadeSpecLink.3.2.80 = -005305101-5000032500033330522135301331
|
||||
|
||||
@@ -548,15 +548,15 @@ AiPlayerbot.PremadeSpecLink.4.2.80 = 0053231-2-5120222030321121050135231251
|
||||
|
||||
# Priest
|
||||
AiPlayerbot.PremadeSpecName.5.0 = disc pve
|
||||
AiPlayerbot.PremadeSpecGlyph.5.0 = 0,0,0,0,0,0
|
||||
AiPlayerbot.PremadeSpecGlyph.5.0 = 42408,43371,42400,43374,43342,45756
|
||||
AiPlayerbot.PremadeSpecLink.5.0.60 = 0503203130300512301323131051
|
||||
AiPlayerbot.PremadeSpecLink.5.0.80 = 0503203130300512331323231251-03520103
|
||||
AiPlayerbot.PremadeSpecName.5.1 = holy pve
|
||||
AiPlayerbot.PremadeSpecGlyph.5.1 = 0,0,0,0,0,0
|
||||
AiPlayerbot.PremadeSpecGlyph.5.1 = 42408,43371,42400,43374,43342,42396
|
||||
AiPlayerbot.PremadeSpecLink.5.1.60 = -035050031301152530000331331
|
||||
AiPlayerbot.PremadeSpecLink.5.1.80 = 05032031-235050032302152530000331351
|
||||
AiPlayerbot.PremadeSpecName.5.2 = shadow pve
|
||||
AiPlayerbot.PremadeSpecGlyph.5.2 = 0,0,0,0,0,0
|
||||
AiPlayerbot.PremadeSpecGlyph.5.2 = 42406,43371,42407,43374,43342,42415
|
||||
AiPlayerbot.PremadeSpecLink.5.2.60 = --325003041203010323150301351
|
||||
AiPlayerbot.PremadeSpecLink.5.2.80 = 0503203--325023051223010323152301351
|
||||
|
||||
@@ -594,17 +594,17 @@ AiPlayerbot.PremadeSpecLink.7.2.80 = -00505031-50005331335310501022331251
|
||||
|
||||
# Mage
|
||||
AiPlayerbot.PremadeSpecName.8.0 = arcane pve
|
||||
AiPlayerbot.PremadeSpecGlyph.8.0 = 0,0,0,0,0,0
|
||||
AiPlayerbot.PremadeSpecGlyph.8.0 = 42735,43339,44955,43364,43361,42751
|
||||
AiPlayerbot.PremadeSpecLink.8.0.60 = 23000503110033014032310150532
|
||||
AiPlayerbot.PremadeSpecLink.8.0.80 = 23000523310033015032310250532-03-203203001
|
||||
AiPlayerbot.PremadeSpecName.8.1 = fire pve
|
||||
AiPlayerbot.PremadeSpecGlyph.8.1 = 0,0,0,0,0,0
|
||||
AiPlayerbot.PremadeSpecGlyph.8.1 = 42739,43339,45737,43364,44920,42751
|
||||
AiPlayerbot.PremadeSpecLink.8.1.60 = -0055030012303330053120300351
|
||||
AiPlayerbot.PremadeSpecLink.8.1.80 = 23000503310003-0055030012303330053120300351
|
||||
AiPlayerbot.PremadeSpecName.8.2 = frost pve
|
||||
AiPlayerbot.PremadeSpecGlyph.8.2 = 0,0,0,0,0,0
|
||||
AiPlayerbot.PremadeSpecGlyph.8.2 = 42742,43339,50045,43364,43361,42751
|
||||
AiPlayerbot.PremadeSpecLink.8.2.60 = --3533103310203100232102231151
|
||||
AiPlayerbot.PremadeSpecLink.8.2.80 = 23002322010203--3533103310203100232102231151
|
||||
AiPlayerbot.PremadeSpecLink.8.2.80 = 23002322010203--0533003313203100232112231151
|
||||
|
||||
# Warlock
|
||||
AiPlayerbot.PremadeSpecName.9.0 = affli pve
|
||||
|
||||
@@ -277,12 +277,12 @@ void AiFactory::AddDefaultCombatStrategies(Player* player, PlayerbotAI* const fa
|
||||
switch (player->getClass())
|
||||
{
|
||||
case CLASS_PRIEST:
|
||||
if (tab == 2)
|
||||
{
|
||||
if (tab == 2) {
|
||||
engine->addStrategies("dps", "shadow debuff", "shadow aoe", "threat", nullptr);
|
||||
}
|
||||
else {
|
||||
engine->addStrategies("heal", "threat", nullptr);
|
||||
} else if (tab == PRIEST_TAB_DISIPLINE) {
|
||||
engine->addStrategies("heal", nullptr);
|
||||
} else {
|
||||
engine->addStrategies("holy heal", nullptr);
|
||||
}
|
||||
|
||||
engine->addStrategies("dps assist", "cure", nullptr);
|
||||
@@ -375,7 +375,7 @@ void AiFactory::AddDefaultCombatStrategies(Player* player, PlayerbotAI* const fa
|
||||
switch (player->getClass()) {
|
||||
case CLASS_PRIEST: {
|
||||
if (tab != PRIEST_TAB_SHADOW) {
|
||||
engine->addStrategies("holy", "shadow debuff", "shadow aoe", nullptr);
|
||||
engine->addStrategies("holy dps", "shadow debuff", "shadow aoe", nullptr);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -182,11 +182,11 @@ WorldObject* LootObject::GetWorldObject(Player* bot)
|
||||
return nullptr;
|
||||
}
|
||||
Creature* creature = botAI->GetCreature(guid);
|
||||
if (creature && creature->getDeathState() == DeathState::Corpse)
|
||||
if (creature && creature->getDeathState() == DeathState::Corpse && creature->IsInWorld())
|
||||
return creature;
|
||||
|
||||
GameObject* go = botAI->GetGameObject(guid);
|
||||
if (go && go->isSpawned())
|
||||
if (go && go->isSpawned() && go->IsInWorld())
|
||||
return go;
|
||||
|
||||
return nullptr;
|
||||
|
||||
@@ -26,17 +26,17 @@ inline std::string const GetActualBlessingOfMight(Unit* target)
|
||||
break;
|
||||
case CLASS_SHAMAN:
|
||||
if (tab == SHAMAN_TAB_ELEMENTAL || tab == SHAMAN_TAB_RESTORATION) {
|
||||
return "bless of wisdom";
|
||||
return "blessing of wisdom";
|
||||
}
|
||||
break;
|
||||
case CLASS_DRUID:
|
||||
if (tab == DRUID_TAB_RESTORATION || tab == DRUID_TAB_BALANCE) {
|
||||
return "bless of wisdom";
|
||||
return "blessing of wisdom";
|
||||
}
|
||||
break;
|
||||
case CLASS_PALADIN:
|
||||
if (tab == PALADIN_TAB_HOLY) {
|
||||
return "bless of wisdom";
|
||||
return "blessing of wisdom";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -42,3 +42,64 @@ void HolyPriestStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
triggers.push_back(new TriggerNode("medium mana", NextAction::array(0, new NextAction("shadowfiend", ACTION_HIGH), nullptr)));
|
||||
triggers.push_back(new TriggerNode("low mana", NextAction::array(0, new NextAction("mana burn", ACTION_HIGH), nullptr)));
|
||||
}
|
||||
|
||||
HolyHealPriestStrategy::HolyHealPriestStrategy(PlayerbotAI* botAI) : GenericPriestStrategy(botAI)
|
||||
{
|
||||
actionNodeFactories.Add(new GenericPriestStrategyActionNodeFactory());
|
||||
}
|
||||
|
||||
NextAction** HolyHealPriestStrategy::getDefaultActions()
|
||||
{
|
||||
return NextAction::array(0, new NextAction("shoot", ACTION_DEFAULT), nullptr);
|
||||
}
|
||||
|
||||
void HolyHealPriestStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
GenericPriestStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"group heal occasion",
|
||||
NextAction::array(0,
|
||||
new NextAction("circle of healing", ACTION_MEDIUM_HEAL + 8),
|
||||
new NextAction("prayer of healing on party", ACTION_MEDIUM_HEAL + 6),
|
||||
NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"medium group heal occasion",
|
||||
NextAction::array(0, new NextAction("divine hymn", ACTION_CRITICAL_HEAL + 5), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member critical health",
|
||||
NextAction::array(0,
|
||||
new NextAction("power word: shield on party", ACTION_CRITICAL_HEAL + 5),
|
||||
new NextAction("flash heal on party", ACTION_CRITICAL_HEAL + 3),
|
||||
new NextAction("prayer of mending on party", ACTION_CRITICAL_HEAL + 2),
|
||||
NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member low health",
|
||||
NextAction::array(0,
|
||||
new NextAction("circle of healing", ACTION_MEDIUM_HEAL + 4),
|
||||
new NextAction("greater heal on party", ACTION_MEDIUM_HEAL + 3),
|
||||
new NextAction("prayer of mending on party", ACTION_MEDIUM_HEAL + 2),
|
||||
new NextAction("flash heal on party", ACTION_MEDIUM_HEAL + 1),
|
||||
NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member medium health",
|
||||
NextAction::array(0,
|
||||
new NextAction("circle of healing", ACTION_LIGHT_HEAL + 7),
|
||||
new NextAction("prayer of mending on party", ACTION_LIGHT_HEAL + 6),
|
||||
new NextAction("flash heal on party", ACTION_LIGHT_HEAL + 5),
|
||||
// new NextAction("renew on party", ACTION_LIGHT_HEAL + 8),
|
||||
NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member almost full health",
|
||||
NextAction::array(0,
|
||||
new NextAction("renew on party", ACTION_LIGHT_HEAL + 2),
|
||||
// new NextAction("flash heal on party", ACTION_LIGHT_HEAL + 1),
|
||||
NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode("party member to heal out of spell range", NextAction::array(0, new NextAction("reach party member to heal", ACTION_CRITICAL_HEAL + 10), nullptr)));
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#define _PLAYERBOT_HOLYPRIESTSTRATEGY_H
|
||||
|
||||
#include "HealPriestStrategy.h"
|
||||
#include "GenericPriestStrategyActionNodeFactory.h"
|
||||
|
||||
class PlayerbotAI;
|
||||
|
||||
@@ -16,8 +17,20 @@ class HolyPriestStrategy : public HealPriestStrategy
|
||||
|
||||
NextAction** getDefaultActions() override;
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "holy"; }
|
||||
std::string const getName() override { return "holy dps"; }
|
||||
uint32 GetType() const override { return STRATEGY_TYPE_DPS | STRATEGY_TYPE_RANGED; }
|
||||
};
|
||||
|
||||
class HolyHealPriestStrategy : public GenericPriestStrategy
|
||||
{
|
||||
public:
|
||||
HolyHealPriestStrategy(PlayerbotAI* botAI);
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
NextAction** getDefaultActions() override;
|
||||
std::string const getName() override { return "holy heal"; }
|
||||
uint32 GetType() const override { return STRATEGY_TYPE_HEAL | STRATEGY_TYPE_RANGED; }
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -50,13 +50,15 @@ class PriestCombatStrategyFactoryInternal : public NamedObjectContext<Strategy>
|
||||
creators["heal"] = &PriestCombatStrategyFactoryInternal::heal;
|
||||
creators["shadow"] = &PriestCombatStrategyFactoryInternal::dps;
|
||||
creators["dps"] = &PriestCombatStrategyFactoryInternal::dps;
|
||||
creators["holy"] = &PriestCombatStrategyFactoryInternal::holy;
|
||||
creators["holy dps"] = &PriestCombatStrategyFactoryInternal::holy_dps;
|
||||
creators["holy heal"] = &PriestCombatStrategyFactoryInternal::holy_heal;
|
||||
}
|
||||
|
||||
private:
|
||||
static Strategy* heal(PlayerbotAI* botAI) { return new HealPriestStrategy(botAI); }
|
||||
static Strategy* dps(PlayerbotAI* botAI) { return new ShadowPriestStrategy(botAI); }
|
||||
static Strategy* holy(PlayerbotAI* botAI) { return new HolyPriestStrategy(botAI); }
|
||||
static Strategy* holy_dps(PlayerbotAI* botAI) { return new HolyPriestStrategy(botAI); }
|
||||
static Strategy* holy_heal(PlayerbotAI* botAI) { return new HolyHealPriestStrategy(botAI); }
|
||||
};
|
||||
|
||||
class PriestTriggerFactoryInternal : public NamedObjectContext<Trigger>
|
||||
|
||||
@@ -19,7 +19,7 @@ float DistanceValue::Calculate()
|
||||
return 0.0f;
|
||||
|
||||
WorldObject* obj = loot.GetWorldObject(bot);
|
||||
if (!obj)
|
||||
if (!obj || !obj->IsInWorld())
|
||||
return 0.0f;
|
||||
|
||||
return sServerFacade->GetDistance2d(botAI->GetBot(), obj);
|
||||
|
||||
Reference in New Issue
Block a user