mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-11-29 15:58:20 +08:00
Merge pull request #622 from Bobblybook/master
Preferred mount selection for bots
This commit is contained in:
10
sql/playerbots/base/playerbots_preferred_mounts.sql
Normal file
10
sql/playerbots/base/playerbots_preferred_mounts.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
DROP TABLE IF EXISTS `playerbots_preferred_mounts`;
|
||||||
|
CREATE TABLE `playerbots_preferred_mounts` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`guid` INT(11) NOT NULL,
|
||||||
|
`type` TINYINT(3) NOT NULL COMMENT '0: Ground, 1: Flying',
|
||||||
|
`spellid` INT(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `guid` (`guid`),
|
||||||
|
KEY `type` (`type`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
@@ -270,6 +270,42 @@ bool CheckMountStateAction::Mount()
|
|||||||
: 0;
|
: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for preferred mounts table in db
|
||||||
|
QueryResult checkTable = PlayerbotsDatabase.Query(
|
||||||
|
"SELECT EXISTS(SELECT * FROM information_schema.tables WHERE table_schema = 'acore_playerbots' AND table_name = 'playerbots_preferred_mounts')");
|
||||||
|
|
||||||
|
if (checkTable)
|
||||||
|
{
|
||||||
|
uint32 tableExists = checkTable->Fetch()[0].Get<uint32>();
|
||||||
|
if (tableExists == 1)
|
||||||
|
{
|
||||||
|
// Check for preferred mount entry
|
||||||
|
QueryResult result = PlayerbotsDatabase.Query(
|
||||||
|
"SELECT spellid FROM playerbots_preferred_mounts WHERE guid = {} AND type = {}",
|
||||||
|
bot->GetGUID().GetCounter(), masterMountType);
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
std::vector<uint32> mounts;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
Field* fields = result->Fetch();
|
||||||
|
uint32 spellId = fields[0].Get<uint32>();
|
||||||
|
mounts.push_back(spellId);
|
||||||
|
} while (result->NextRow());
|
||||||
|
|
||||||
|
uint32 index = urand(0, mounts.size() - 1);
|
||||||
|
// Validate spell ID
|
||||||
|
if (index < mounts.size() && sSpellMgr->GetSpellInfo(mounts[index]))
|
||||||
|
{
|
||||||
|
// TODO: May want to do checks for 'bot riding skill > skill required to ride the mount'
|
||||||
|
return botAI->CastSpell(mounts[index], bot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// No preferred mount found (or invalid), continue with random mount selection
|
||||||
std::map<int32, std::vector<uint32>>& spells = allSpells[masterMountType];
|
std::map<int32, std::vector<uint32>>& spells = allSpells[masterMountType];
|
||||||
if (hasSwiftMount)
|
if (hasSwiftMount)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user