mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-11-29 15:58:20 +08:00
Minor fixes to spell and mount init (#863)
* Make summon imp non-temporary * Remove horse mount from troll * Set facing to during spell casting * Allow rpg status command * Init unarmed skill and fix skill clear * Cast delay after interrupt spell
This commit is contained in:
@@ -328,13 +328,14 @@ void PlayerbotAI::UpdateAI(uint32 elapsed, bool minimal)
|
|||||||
if (currentSpell && currentSpell->GetSpellInfo() && currentSpell->getState() == SPELL_STATE_PREPARING)
|
if (currentSpell && currentSpell->GetSpellInfo() && currentSpell->getState() == SPELL_STATE_PREPARING)
|
||||||
{
|
{
|
||||||
const SpellInfo* spellInfo = currentSpell->GetSpellInfo();
|
const SpellInfo* spellInfo = currentSpell->GetSpellInfo();
|
||||||
|
Unit* spellTarget = currentSpell->m_targets.GetUnitTarget();
|
||||||
// interrupt if target is dead
|
// interrupt if target is dead
|
||||||
if (currentSpell->m_targets.GetUnitTarget() && !currentSpell->m_targets.GetUnitTarget()->IsAlive() &&
|
if (spellTarget && !spellTarget->IsAlive() &&
|
||||||
!spellInfo->IsAllowingDeadTarget())
|
!spellInfo->IsAllowingDeadTarget())
|
||||||
{
|
{
|
||||||
InterruptSpell();
|
InterruptSpell();
|
||||||
SetNextCheckDelay(sPlayerbotAIConfig->reactDelay);
|
YieldThread(GetReactDelay());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isHeal = false;
|
bool isHeal = false;
|
||||||
@@ -357,10 +358,16 @@ void PlayerbotAI::UpdateAI(uint32 elapsed, bool minimal)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// interrupt if target ally has full health (heal by other member)
|
// interrupt if target ally has full health (heal by other member)
|
||||||
if (isHeal && isSingleTarget && currentSpell->m_targets.GetUnitTarget() && currentSpell->m_targets.GetUnitTarget()->IsFullHealth())
|
if (isHeal && isSingleTarget && spellTarget && spellTarget->IsFullHealth())
|
||||||
{
|
{
|
||||||
InterruptSpell();
|
InterruptSpell();
|
||||||
SetNextCheckDelay(sPlayerbotAIConfig->reactDelay);
|
YieldThread(GetReactDelay());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spellTarget && !bot->HasInArc(CAST_ANGLE_IN_FRONT, spellTarget) && (spellInfo->FacingCasterFlags & SPELL_FACING_FLAG_INFRONT))
|
||||||
|
{
|
||||||
|
sServerFacade->SetFacingTo(bot, spellTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
// wait for spell cast
|
// wait for spell cast
|
||||||
@@ -817,6 +824,7 @@ bool PlayerbotAI::IsAllowedCommand(std::string const text)
|
|||||||
unsecuredCommands.insert("sendmail");
|
unsecuredCommands.insert("sendmail");
|
||||||
unsecuredCommands.insert("invite");
|
unsecuredCommands.insert("invite");
|
||||||
unsecuredCommands.insert("leave");
|
unsecuredCommands.insert("leave");
|
||||||
|
unsecuredCommands.insert("rpg status");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (std::set<std::string>::iterator i = unsecuredCommands.begin(); i != unsecuredCommands.end(); ++i)
|
for (std::set<std::string>::iterator i = unsecuredCommands.begin(); i != unsecuredCommands.end(); ++i)
|
||||||
|
|||||||
@@ -1510,7 +1510,7 @@ void RandomPlayerbotMgr::PrepareTeleportCache()
|
|||||||
}
|
}
|
||||||
LOG_INFO("playerbots", ">> {} locations for level collected.", collected_locs);
|
LOG_INFO("playerbots", ">> {} locations for level collected.", collected_locs);
|
||||||
|
|
||||||
LOG_INFO("playerbots", "Preparing innkeepers locations for level collected...");
|
LOG_INFO("playerbots", "Preparing innkeepers locations for level...");
|
||||||
if (sPlayerbotAIConfig->enableNewRpgStrategy)
|
if (sPlayerbotAIConfig->enableNewRpgStrategy)
|
||||||
{
|
{
|
||||||
results = WorldDatabase.Query(
|
results = WorldDatabase.Query(
|
||||||
|
|||||||
@@ -2185,6 +2185,7 @@ void PlayerbotFactory::InitSkills()
|
|||||||
uint32 skillLevel = bot->GetLevel() < 40 ? 0 : 1;
|
uint32 skillLevel = bot->GetLevel() < 40 ? 0 : 1;
|
||||||
uint32 dualWieldLevel = bot->GetLevel() < 20 ? 0 : 1;
|
uint32 dualWieldLevel = bot->GetLevel() < 20 ? 0 : 1;
|
||||||
SetRandomSkill(SKILL_DEFENSE);
|
SetRandomSkill(SKILL_DEFENSE);
|
||||||
|
SetRandomSkill(SKILL_UNARMED);
|
||||||
switch (bot->getClass())
|
switch (bot->getClass())
|
||||||
{
|
{
|
||||||
case CLASS_DRUID:
|
case CLASS_DRUID:
|
||||||
@@ -2328,8 +2329,8 @@ void PlayerbotFactory::SetRandomSkill(uint16 id)
|
|||||||
|
|
||||||
uint16 step = bot->GetSkillValue(id) ? bot->GetSkillStep(id) : 1;
|
uint16 step = bot->GetSkillValue(id) ? bot->GetSkillStep(id) : 1;
|
||||||
|
|
||||||
if (!bot->HasSkill(id) || value > curValue)
|
// if (!bot->HasSkill(id) || value > curValue)
|
||||||
bot->SetSkill(id, step, value, maxValue);
|
bot->SetSkill(id, step, value, maxValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerbotFactory::InitAvailableSpells()
|
void PlayerbotFactory::InitAvailableSpells()
|
||||||
@@ -2475,7 +2476,7 @@ void PlayerbotFactory::InitClassSpells()
|
|||||||
case CLASS_WARLOCK:
|
case CLASS_WARLOCK:
|
||||||
bot->learnSpell(687, true);
|
bot->learnSpell(687, true);
|
||||||
bot->learnSpell(686, true);
|
bot->learnSpell(686, true);
|
||||||
bot->learnSpell(688, true); // summon imp
|
bot->learnSpell(688, false); // summon imp
|
||||||
if (level >= 10)
|
if (level >= 10)
|
||||||
{
|
{
|
||||||
bot->learnSpell(697, false); // summon voidwalker
|
bot->learnSpell(697, false); // summon voidwalker
|
||||||
@@ -2867,7 +2868,7 @@ void PlayerbotFactory::InitMounts()
|
|||||||
fast = {23225, 23223, 23222};
|
fast = {23225, 23223, 23222};
|
||||||
break;
|
break;
|
||||||
case RACE_TROLL:
|
case RACE_TROLL:
|
||||||
slow = {10796, 10799, 8395, 472};
|
slow = {10796, 10799, 8395};
|
||||||
fast = {23241, 23242, 23243};
|
fast = {23241, 23242, 23243};
|
||||||
break;
|
break;
|
||||||
case RACE_DRAENEI:
|
case RACE_DRAENEI:
|
||||||
|
|||||||
@@ -18,8 +18,11 @@
|
|||||||
|
|
||||||
bool TellRpgStatusAction::Execute(Event event)
|
bool TellRpgStatusAction::Execute(Event event)
|
||||||
{
|
{
|
||||||
|
Player* owner = event.getOwner();
|
||||||
|
if (!owner)
|
||||||
|
return false;
|
||||||
std::string out = botAI->rpgInfo.ToString();
|
std::string out = botAI->rpgInfo.ToString();
|
||||||
botAI->TellMasterNoFacing(out);
|
bot->Whisper(out.c_str(), LANG_UNIVERSAL, owner);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ protected:
|
|||||||
// const int32 setGrindInterval = 5 * 60 * 1000;
|
// const int32 setGrindInterval = 5 * 60 * 1000;
|
||||||
// const int32 setNpcInterval = 1 * 60 * 1000;
|
// const int32 setNpcInterval = 1 * 60 * 1000;
|
||||||
const int32 statusNearNpcDuration = 5 * 60 * 1000;
|
const int32 statusNearNpcDuration = 5 * 60 * 1000;
|
||||||
const int32 statusNearRandomDuration = 2 * 60 * 1000;
|
const int32 statusNearRandomDuration = 5 * 60 * 1000;
|
||||||
const int32 statusRestDuration = 30 * 1000;
|
const int32 statusRestDuration = 30 * 1000;
|
||||||
WorldPosition SelectRandomGrindPos();
|
WorldPosition SelectRandomGrindPos();
|
||||||
WorldPosition SelectRandomInnKeeperPos();
|
WorldPosition SelectRandomInnKeeperPos();
|
||||||
|
|||||||
Reference in New Issue
Block a user