Item use check

This commit is contained in:
Yunfan Li
2024-02-14 01:01:28 +08:00
parent 21e9e2e2aa
commit a1903ad888
6 changed files with 26 additions and 7 deletions

View File

@@ -600,7 +600,7 @@ void AiFactory::AddDefaultNonCombatStrategies(Player* player, PlayerbotAI* const
nonCombatEngine->ChangeStrategy(sPlayerbotAIConfig->randomBotNonCombatStrategies);
}
else {
// nonCombatEngine->addStrategy("pvp");
nonCombatEngine->addStrategy("pvp");
nonCombatEngine->ChangeStrategy(sPlayerbotAIConfig->nonCombatStrategies);
}
}

View File

@@ -97,9 +97,11 @@ void PlayerbotFactory::Prepare()
bot->ResurrectPlayer(1.0f, false);
bot->CombatStop(true);
uint32 currentLevel = bot->GetLevel();
bot->GiveLevel(level);
bot->SetUInt32Value(PLAYER_XP, 0);
if (level != currentLevel) {
bot->SetUInt32Value(PLAYER_XP, 0);
}
if (!sPlayerbotAIConfig->randomBotShowHelmet || !urand(0, 4))
{
bot->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM);
@@ -158,6 +160,7 @@ void PlayerbotFactory::Randomize(bool incremental)
if (sPlayerbotAIConfig->randomBotPreQuests)
{
uint32 currentXP = bot->GetUInt32Value(PLAYER_XP);
LOG_INFO("playerbots", "Initializing quests...");
pmo = sPerformanceMonitor->start(PERF_MON_RNDBOT, "PlayerbotFactory_Quests");
InitQuests(classQuestIds);
@@ -169,7 +172,7 @@ void PlayerbotFactory::Randomize(bool incremental)
ClearInventory();
bot->SetUInt32Value(PLAYER_XP, 0);
bot->SetUInt32Value(PLAYER_XP, currentXP);
CancelAuras();
bot->SaveToDB(false, false);
if (pmo)

View File

@@ -1329,7 +1329,10 @@ void RandomPlayerbotMgr::Randomize(Player* bot)
RandomizeFirst(bot);
}
else if (bot->getLevel() < sPlayerbotAIConfig->randomBotMaxLevel || !sPlayerbotAIConfig->downgradeMaxLevelBot) {
IncreaseLevel(bot);
uint8 level = bot->getLevel();
PlayerbotFactory factory(bot, level);
factory.Randomize(true);
// IncreaseLevel(bot);
}
else {
RandomizeFirst(bot);

View File

@@ -56,6 +56,9 @@ bool FollowAction::isUseful()
return false;
}
Formation* formation = AI_VALUE(Formation*, "formation");
if (!formation) {
return false;
}
std::string const target = formation->GetTargetName();
Unit* fTarget = nullptr;

View File

@@ -86,7 +86,9 @@ bool UseItemAction::UseItem(Item* item, ObjectGuid goGuid, Item* itemTarget, Uni
if (item->GetTemplate()->Spells[i].SpellId > 0)
{
spellId = item->GetTemplate()->Spells[i].SpellId;
break;
if (!botAI->CanCastSpell(spellId, bot, false, item)) {
return false;
}
}
}
@@ -195,7 +197,7 @@ bool UseItemAction::UseItem(Item* item, ObjectGuid goGuid, Item* itemTarget, Uni
for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; i++)
{
spellId = item->GetTemplate()->Spells[i].SpellId;
uint32 spellId = item->GetTemplate()->Spells[i].SpellId;
if (!spellId)
continue;

View File

@@ -19,6 +19,7 @@ class GenericDruidNonCombatStrategyActionNodeFactory : public NamedObjectFactory
creators["rejuvenation on party"] = &rejuvenation_on_party;
creators["remove curse on party"] = &remove_curse_on_party;
creators["abolish poison on party"] = &abolish_poison_on_party;
creators["revive"] = &revive;
}
private:
@@ -81,6 +82,13 @@ class GenericDruidNonCombatStrategyActionNodeFactory : public NamedObjectFactory
/*A*/ NULL,
/*C*/ NULL);
}
static ActionNode* revive(PlayerbotAI* ai)
{
return new ActionNode ("revive",
/*P*/ NextAction::array(0, new NextAction("caster form"), nullptr),
/*A*/ NULL,
/*C*/ NULL);
}
// static ActionNode* innervate([[maybe_unused]] PlayerbotAI* botAI)
// {
// return new ActionNode ("innervate",