mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-11-29 15:58:20 +08:00
Merge pull request #224 from liyunfan1223/autogear
[Command] Command autogear
This commit is contained in:
@@ -167,6 +167,18 @@ AiPlayerbot.AddClassCommand = 1
|
|||||||
# default: 1 (enable)
|
# default: 1 (enable)
|
||||||
AiPlayerbot.MaintenanceCommand = 1
|
AiPlayerbot.MaintenanceCommand = 1
|
||||||
|
|
||||||
|
# Enable/Disable autogear command, auto upgrade player bots gears, the quality is limited by AutoGearQualityLimit and AutoGearScoreLimit
|
||||||
|
# default: 1 (enable)
|
||||||
|
AiPlayerbot.AutoGearCommand = 1
|
||||||
|
|
||||||
|
# Equips quality limitation for auto gear command (1 = normal, 2 = uncommon, 3 = rare, 4 = epic, 5 = legendary)
|
||||||
|
# default: 3 (rare)
|
||||||
|
AiPlayerbot.AutoGearQualityLimit = 3
|
||||||
|
|
||||||
|
# Equips quality limitation for auto gear command (0 = no limit)
|
||||||
|
# default: 0 (no limit)
|
||||||
|
AiPlayerbot.AutoGearScoreLimit = 0
|
||||||
|
|
||||||
# Automation
|
# Automation
|
||||||
|
|
||||||
# Bots keep looting when group loop method is free for all
|
# Bots keep looting when group loop method is free for all
|
||||||
|
|||||||
@@ -276,6 +276,9 @@ bool PlayerbotAIConfig::Initialize()
|
|||||||
autoInitEquipLevelLimitRatio = sConfigMgr->GetOption<float>("AiPlayerbot.AutoInitEquipLevelLimitRatio", 1.0);
|
autoInitEquipLevelLimitRatio = sConfigMgr->GetOption<float>("AiPlayerbot.AutoInitEquipLevelLimitRatio", 1.0);
|
||||||
addClassCommand = sConfigMgr->GetOption<int32>("AiPlayerbot.AddClassCommand", 1);
|
addClassCommand = sConfigMgr->GetOption<int32>("AiPlayerbot.AddClassCommand", 1);
|
||||||
maintenanceCommand = sConfigMgr->GetOption<int32>("AiPlayerbot.MaintenanceCommand", 1);
|
maintenanceCommand = sConfigMgr->GetOption<int32>("AiPlayerbot.MaintenanceCommand", 1);
|
||||||
|
autoGearCommand = sConfigMgr->GetOption<int32>("AiPlayerbot.AutoGearCommand", 1);
|
||||||
|
autoGearQualityLimit = sConfigMgr->GetOption<int32>("AiPlayerbot.autoGearQualityLimit", 3);
|
||||||
|
autoGearScoreLimit = sConfigMgr->GetOption<int32>("AiPlayerbot.AutoGearScoreLimit", 0);
|
||||||
|
|
||||||
playerbotsXPrate = sConfigMgr->GetOption<int32>("AiPlayerbot.KillXPRate", 1);
|
playerbotsXPrate = sConfigMgr->GetOption<int32>("AiPlayerbot.KillXPRate", 1);
|
||||||
botActiveAlone = sConfigMgr->GetOption<int32>("AiPlayerbot.BotActiveAlone", 10);
|
botActiveAlone = sConfigMgr->GetOption<int32>("AiPlayerbot.BotActiveAlone", 10);
|
||||||
|
|||||||
@@ -212,6 +212,7 @@ class PlayerbotAIConfig
|
|||||||
float autoInitEquipLevelLimitRatio;
|
float autoInitEquipLevelLimitRatio;
|
||||||
int32 addClassCommand;
|
int32 addClassCommand;
|
||||||
int32 maintenanceCommand;
|
int32 maintenanceCommand;
|
||||||
|
int32 autoGearCommand, autoGearQualityLimit, autoGearScoreLimit;
|
||||||
|
|
||||||
std::string const GetTimestampStr();
|
std::string const GetTimestampStr();
|
||||||
bool hasLog(std::string const fileName) { return std::find(allowedLogFiles.begin(), allowedLogFiles.end(), fileName) != allowedLogFiles.end(); };
|
bool hasLog(std::string const fileName) { return std::find(allowedLogFiles.begin(), allowedLogFiles.end(), fileName) != allowedLogFiles.end(); };
|
||||||
|
|||||||
@@ -1523,6 +1523,10 @@ void PlayerbotFactory::InitEquipment(bool incremental)
|
|||||||
uint32 newItemId = ids[index];
|
uint32 newItemId = ids[index];
|
||||||
|
|
||||||
uint16 dest;
|
uint16 dest;
|
||||||
|
|
||||||
|
if (oldItem && oldItem->GetTemplate()->ItemId == newItemId)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!CanEquipUnseenItem(slot, dest, newItemId))
|
if (!CanEquipUnseenItem(slot, dest, newItemId))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -1537,10 +1541,15 @@ void PlayerbotFactory::InitEquipment(bool incremental)
|
|||||||
}
|
}
|
||||||
if (oldItem)
|
if (oldItem)
|
||||||
{
|
{
|
||||||
|
// uint8 dstBag = NULL_BAG;
|
||||||
|
// WorldPacket packet(CMSG_AUTOSTORE_BAG_ITEM, 3);
|
||||||
|
// packet << INVENTORY_SLOT_BAG_0 << slot << dstBag;
|
||||||
|
// bot->GetSession()->HandleAutoStoreBagItemOpcode(packet);
|
||||||
bot->DestroyItem(INVENTORY_SLOT_BAG_0, slot, true);
|
bot->DestroyItem(INVENTORY_SLOT_BAG_0, slot, true);
|
||||||
}
|
}
|
||||||
uint16 dest;
|
uint16 dest;
|
||||||
if (!CanEquipUnseenItem(slot, dest, bestItemForSlot)) {
|
if (!CanEquipUnseenItem(slot, dest, bestItemForSlot))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Item* newItem = bot->EquipNewItem(dest, bestItemForSlot, true);
|
Item* newItem = bot->EquipNewItem(dest, bestItemForSlot, true);
|
||||||
|
|||||||
@@ -364,9 +364,9 @@ Player* PlayerbotHolder::GetPlayerBot(ObjectGuid::LowType lowGuid) const
|
|||||||
void PlayerbotHolder::OnBotLogin(Player* const bot)
|
void PlayerbotHolder::OnBotLogin(Player* const bot)
|
||||||
{
|
{
|
||||||
sPlayerbotsMgr->AddPlayerbotData(bot, true);
|
sPlayerbotsMgr->AddPlayerbotData(bot, true);
|
||||||
|
playerBots[bot->GetGUID()] = bot;
|
||||||
OnBotLoginInternal(bot);
|
OnBotLoginInternal(bot);
|
||||||
|
|
||||||
playerBots[bot->GetGUID()] = bot;
|
|
||||||
|
|
||||||
PlayerbotAI* botAI = GET_PLAYERBOT_AI(bot);
|
PlayerbotAI* botAI = GET_PLAYERBOT_AI(bot);
|
||||||
if (!botAI) {
|
if (!botAI) {
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ class ChatActionContext : public NamedObjectContext<Action>
|
|||||||
creators["de"] = &ChatActionContext::dead;
|
creators["de"] = &ChatActionContext::dead;
|
||||||
creators["trainer"] = &ChatActionContext::trainer;
|
creators["trainer"] = &ChatActionContext::trainer;
|
||||||
creators["maintenance"] = &ChatActionContext::maintenance;
|
creators["maintenance"] = &ChatActionContext::maintenance;
|
||||||
|
creators["autogear"] = &ChatActionContext::autogear;
|
||||||
creators["equip upgrade"] = &ChatActionContext::equip_upgrade;
|
creators["equip upgrade"] = &ChatActionContext::equip_upgrade;
|
||||||
creators["attack my target"] = &ChatActionContext::attack_my_target;
|
creators["attack my target"] = &ChatActionContext::attack_my_target;
|
||||||
creators["chat"] = &ChatActionContext::chat;
|
creators["chat"] = &ChatActionContext::chat;
|
||||||
@@ -214,6 +215,7 @@ class ChatActionContext : public NamedObjectContext<Action>
|
|||||||
static Action* attack_my_target(PlayerbotAI* botAI) { return new AttackMyTargetAction(botAI); }
|
static Action* attack_my_target(PlayerbotAI* botAI) { return new AttackMyTargetAction(botAI); }
|
||||||
static Action* trainer(PlayerbotAI* botAI) { return new TrainerAction(botAI); }
|
static Action* trainer(PlayerbotAI* botAI) { return new TrainerAction(botAI); }
|
||||||
static Action* maintenance(PlayerbotAI* botAI) { return new MaintenanceAction(botAI); }
|
static Action* maintenance(PlayerbotAI* botAI) { return new MaintenanceAction(botAI); }
|
||||||
|
static Action* autogear(PlayerbotAI* botAI) { return new AutoGearAction(botAI); }
|
||||||
static Action* equip_upgrade(PlayerbotAI* botAI) { return new EquipUpgradeAction(botAI); }
|
static Action* equip_upgrade(PlayerbotAI* botAI) { return new EquipUpgradeAction(botAI); }
|
||||||
static Action* co(PlayerbotAI* botAI) { return new ChangeCombatStrategyAction(botAI); }
|
static Action* co(PlayerbotAI* botAI) { return new ChangeCombatStrategyAction(botAI); }
|
||||||
static Action* nc(PlayerbotAI* botAI) { return new ChangeNonCombatStrategyAction(botAI); }
|
static Action* nc(PlayerbotAI* botAI) { return new ChangeNonCombatStrategyAction(botAI); }
|
||||||
|
|||||||
@@ -150,9 +150,11 @@ void TrainerAction::TellFooter(uint32 totalCost)
|
|||||||
|
|
||||||
bool MaintenanceAction::Execute(Event event)
|
bool MaintenanceAction::Execute(Event event)
|
||||||
{
|
{
|
||||||
if (!sPlayerbotAIConfig->maintenanceCommand)
|
if (!sPlayerbotAIConfig->maintenanceCommand) {
|
||||||
|
botAI->TellMaster("maintenance command is not allowed, please check the configuration.");
|
||||||
return false;
|
return false;
|
||||||
botAI->TellMaster("maintenance");
|
}
|
||||||
|
botAI->TellMaster("I'm maintaining");
|
||||||
PlayerbotFactory factory(bot, bot->GetLevel());
|
PlayerbotFactory factory(bot, bot->GetLevel());
|
||||||
factory.InitBags(false);
|
factory.InitBags(false);
|
||||||
factory.InitAmmo();
|
factory.InitAmmo();
|
||||||
@@ -171,4 +173,25 @@ bool MaintenanceAction::Execute(Event event)
|
|||||||
}
|
}
|
||||||
bot->DurabilityRepairAll(false, 1.0f, false);
|
bot->DurabilityRepairAll(false, 1.0f, false);
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AutoGearAction::Execute(Event event)
|
||||||
|
{
|
||||||
|
if (!sPlayerbotAIConfig->autoGearCommand) {
|
||||||
|
botAI->TellMaster("autogear command is not allowed, please check the configuration.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
botAI->TellMaster("I'm auto gearing");
|
||||||
|
uint32 gs = sPlayerbotAIConfig->autoGearScoreLimit == 0 ? 0 :
|
||||||
|
PlayerbotFactory::CalcMixedGearScore(sPlayerbotAIConfig->autoGearScoreLimit, sPlayerbotAIConfig->autoGearQualityLimit);
|
||||||
|
PlayerbotFactory factory(bot,
|
||||||
|
bot->GetLevel(),
|
||||||
|
sPlayerbotAIConfig->autoGearQualityLimit,
|
||||||
|
gs);
|
||||||
|
factory.InitEquipment(true);
|
||||||
|
if (bot->getLevel() >= sPlayerbotAIConfig->minEnchantingBotLevel) {
|
||||||
|
factory.ApplyEnchantAndGemsNew();
|
||||||
|
}
|
||||||
|
bot->DurabilityRepairAll(false, 1.0f, false);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
@@ -34,4 +34,12 @@ class MaintenanceAction : public Action
|
|||||||
MaintenanceAction(PlayerbotAI* botAI) : Action(botAI, "maintenance") { }
|
MaintenanceAction(PlayerbotAI* botAI) : Action(botAI, "maintenance") { }
|
||||||
bool Execute(Event event) override;
|
bool Execute(Event event) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class AutoGearAction : public Action
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AutoGearAction(PlayerbotAI* botAI) : Action(botAI, "autogear") { }
|
||||||
|
bool Execute(Event event) override;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ ChatCommandHandlerStrategy::ChatCommandHandlerStrategy(PlayerbotAI* botAI) : Pas
|
|||||||
supported.push_back("de");
|
supported.push_back("de");
|
||||||
supported.push_back("trainer");
|
supported.push_back("trainer");
|
||||||
supported.push_back("maintenance");
|
supported.push_back("maintenance");
|
||||||
|
supported.push_back("autogear");
|
||||||
supported.push_back("equip upgrade");
|
supported.push_back("equip upgrade");
|
||||||
supported.push_back("chat");
|
supported.push_back("chat");
|
||||||
supported.push_back("home");
|
supported.push_back("home");
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ class ChatTriggerContext : public NamedObjectContext<Trigger>
|
|||||||
creators["de"] = &ChatTriggerContext::dead;
|
creators["de"] = &ChatTriggerContext::dead;
|
||||||
creators["trainer"] = &ChatTriggerContext::trainer;
|
creators["trainer"] = &ChatTriggerContext::trainer;
|
||||||
creators["maintenance"] = &ChatTriggerContext::maintenance;
|
creators["maintenance"] = &ChatTriggerContext::maintenance;
|
||||||
|
creators["autogear"] = &ChatTriggerContext::autogear;
|
||||||
creators["equip upgrade"] = &ChatTriggerContext::equip_upgrade;
|
creators["equip upgrade"] = &ChatTriggerContext::equip_upgrade;
|
||||||
creators["attack"] = &ChatTriggerContext::attack;
|
creators["attack"] = &ChatTriggerContext::attack;
|
||||||
creators["chat"] = &ChatTriggerContext::chat;
|
creators["chat"] = &ChatTriggerContext::chat;
|
||||||
@@ -167,6 +168,7 @@ class ChatTriggerContext : public NamedObjectContext<Trigger>
|
|||||||
static Trigger* attack(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "attack"); }
|
static Trigger* attack(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "attack"); }
|
||||||
static Trigger* trainer(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "trainer"); }
|
static Trigger* trainer(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "trainer"); }
|
||||||
static Trigger* maintenance(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "maintenance"); }
|
static Trigger* maintenance(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "maintenance"); }
|
||||||
|
static Trigger* autogear(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "autogear"); }
|
||||||
static Trigger* equip_upgrade(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "equip upgrade"); }
|
static Trigger* equip_upgrade(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "equip upgrade"); }
|
||||||
static Trigger* co(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "co"); }
|
static Trigger* co(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "co"); }
|
||||||
static Trigger* nc(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "nc"); }
|
static Trigger* nc(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "nc"); }
|
||||||
|
|||||||
Reference in New Issue
Block a user