Regenerate thordekk core-hooks patch against thordekk/main b8a06fe8ba

This commit is contained in:
devbox
2026-08-15 10:08:03 +10:00
parent ef95f084d4
commit bfb544fcd7
@@ -804,35 +804,35 @@ index 0000000000..933281acf5
+#define sModuleUpdateManager Trinity::ModuleUpdateManager::instance() +#define sModuleUpdateManager Trinity::ModuleUpdateManager::instance()
\ No newline at end of file \ No newline at end of file
diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp
index 54489d0a3f..9d350a5780 100644 index b26abc7b73..df70951a9b 100644
--- a/src/server/database/Database/Implementation/LoginDatabase.cpp --- a/src/server/database/Database/Implementation/LoginDatabase.cpp
+++ b/src/server/database/Database/Implementation/LoginDatabase.cpp +++ b/src/server/database/Database/Implementation/LoginDatabase.cpp
@@ -205,6 +205,10 @@ void LoginDatabaseConnection::DoPrepareStatements() @@ -206,6 +206,10 @@ void LoginDatabaseConnection::DoPrepareStatements()
PrepareStatement(LOGIN_SEL_BNET_PLAYER_DATA_FLAGS_ACCOUNT, "SELECT storageIndex, mask FROM battlenet_account_player_data_flag WHERE battlenetAccountId = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_DEL_BNET_PLAYER_DATA_FLAGS_ACCOUNT, "DELETE FROM battlenet_account_player_data_flag WHERE battlenetAccountId = ? AND storageIndex = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_DEL_BNET_PLAYER_DATA_FLAGS_ACCOUNT, "DELETE FROM battlenet_account_player_data_flag WHERE battlenetAccountId = ? AND storageIndex = ?", CONNECTION_ASYNC);
PrepareStatement(LOGIN_INS_BNET_PLAYER_DATA_FLAGS_ACCOUNT, "INSERT INTO battlenet_account_player_data_flag (battlenetAccountId, storageIndex, mask) VALUES (?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(LOGIN_INS_BNET_PLAYER_DATA_FLAGS_ACCOUNT, "INSERT INTO battlenet_account_player_data_flag (battlenetAccountId, storageIndex, mask) VALUES (?, ?, ?)", CONNECTION_ASYNC);
+
+ // Playerbot module statements + // Playerbot module statements
+ PrepareStatement(LOGIN_SEL_BNET_ACCOUNT_EXISTS, "SELECT ba.id FROM battlenet_accounts ba LEFT JOIN account a ON a.battlenet_account = ba.id WHERE ba.id = ? LIMIT 1", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_BNET_ACCOUNT_EXISTS, "SELECT ba.id FROM battlenet_accounts ba LEFT JOIN account a ON a.battlenet_account = ba.id WHERE ba.id = ? LIMIT 1", CONNECTION_SYNCH);
+ PrepareStatement(LOGIN_SEL_BOT_ACCOUNTS_ALL, "SELECT ba.id, ba.email, a.id as legacy_account_id FROM battlenet_accounts ba LEFT JOIN account a ON a.battlenet_account = ba.id WHERE ba.email LIKE '%#%' OR ba.email LIKE '%@playerbot.local' ORDER BY ba.email", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_BOT_ACCOUNTS_ALL, "SELECT ba.id, ba.email, a.id as legacy_account_id FROM battlenet_accounts ba LEFT JOIN account a ON a.battlenet_account = ba.id WHERE ba.email LIKE '%#%' OR ba.email LIKE '%@playerbot.local' ORDER BY ba.email", CONNECTION_SYNCH);
} +
//WowCommunity
LoginDatabaseConnection::LoginDatabaseConnection(MySQLConnectionInfo& connInfo, ConnectionFlags connectionFlags) : MySQLConnection(connInfo, connectionFlags) PrepareStatement(LOGIN_INS_BATTLEPAY_PURCHASE, "INSERT INTO account_battlepay_purchase (id, account, productId, status, resultCode, basePrice, userPrice, timeCreated, walletName) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(LOGIN_SEL_BATTLEPAY_PURCHASE_ACCOUNT, "SELECT id, status, resultCode, productId, basePrice, userPrice, timeCreated FROM account_battlepay_purchase WHERE account = ? ORDER BY id ASC", CONNECTION_ASYNC);
diff --git a/src/server/database/Database/Implementation/LoginDatabase.h b/src/server/database/Database/Implementation/LoginDatabase.h diff --git a/src/server/database/Database/Implementation/LoginDatabase.h b/src/server/database/Database/Implementation/LoginDatabase.h
index 53d1d7a769..a2f9669cd2 100644 index e86ed2787c..acba19feb0 100644
--- a/src/server/database/Database/Implementation/LoginDatabase.h --- a/src/server/database/Database/Implementation/LoginDatabase.h
+++ b/src/server/database/Database/Implementation/LoginDatabase.h +++ b/src/server/database/Database/Implementation/LoginDatabase.h
@@ -190,6 +190,10 @@ enum LoginDatabaseStatements : uint32 @@ -189,6 +189,10 @@ enum LoginDatabaseStatements : uint32
LOGIN_SEL_BNET_PLAYER_DATA_FLAGS_ACCOUNT,
LOGIN_DEL_BNET_PLAYER_DATA_FLAGS_ACCOUNT, LOGIN_DEL_BNET_PLAYER_DATA_FLAGS_ACCOUNT,
LOGIN_INS_BNET_PLAYER_DATA_FLAGS_ACCOUNT, LOGIN_INS_BNET_PLAYER_DATA_FLAGS_ACCOUNT,
+
+ // Playerbot module statements + // Playerbot module statements
+ LOGIN_SEL_BNET_ACCOUNT_EXISTS, // SELECT ba.id FROM battlenet_accounts ba LEFT JOIN account a ON a.battlenet_account = ba.id WHERE ba.id = ? LIMIT 1 + LOGIN_SEL_BNET_ACCOUNT_EXISTS, // SELECT ba.id FROM battlenet_accounts ba LEFT JOIN account a ON a.battlenet_account = ba.id WHERE ba.id = ? LIMIT 1
+ LOGIN_SEL_BOT_ACCOUNTS_ALL, // SELECT ba.id, ba.email, a.id as legacy_account_id FROM battlenet_accounts ba LEFT JOIN account a ON a.battlenet_account = ba.id WHERE ba.email LIKE '%#%' OR ba.email LIKE '%@playerbot.local' ORDER BY ba.email + LOGIN_SEL_BOT_ACCOUNTS_ALL, // SELECT ba.id, ba.email, a.id as legacy_account_id FROM battlenet_accounts ba LEFT JOIN account a ON a.battlenet_account = ba.id WHERE ba.email LIKE '%#%' OR ba.email LIKE '%@playerbot.local' ORDER BY ba.email
+ //WowCommunity
MAX_LOGINDATABASE_STATEMENTS LOGIN_INS_BATTLEPAY_PURCHASE,
}; LOGIN_SEL_BATTLEPAY_PURCHASE_ACCOUNT,
diff --git a/src/server/database/Database/Implementation/WorldDatabase.cpp b/src/server/database/Database/Implementation/WorldDatabase.cpp diff --git a/src/server/database/Database/Implementation/WorldDatabase.cpp b/src/server/database/Database/Implementation/WorldDatabase.cpp
index e4af6c4cb0..4c4e587099 100644 index e4af6c4cb0..4c4e587099 100644
--- a/src/server/database/Database/Implementation/WorldDatabase.cpp --- a/src/server/database/Database/Implementation/WorldDatabase.cpp
@@ -1113,7 +1113,7 @@ index d4612fb3bf..8353805af7 100644
private: private:
Spell const* GetSpell(uint32 spellId) const; Spell const* GetSpell(uint32 spellId) const;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 2a06a02a56..23b4008092 100644 index b82bd78f34..d58f648db8 100644
--- a/src/server/game/Entities/Player/Player.cpp --- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp
@@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
@@ -1124,7 +1124,7 @@ index 2a06a02a56..23b4008092 100644
#include "AreaTrigger.h" #include "AreaTrigger.h"
#include "Account.h" #include "Account.h"
#include "AccountMgr.h" #include "AccountMgr.h"
@@ -2166,6 +2167,38 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate) @@ -2169,6 +2170,38 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
if (xp < 1) if (xp < 1)
return; return;
@@ -1163,7 +1163,7 @@ index 2a06a02a56..23b4008092 100644
if (!IsAlive() && !GetBattlegroundId()) if (!IsAlive() && !GetBattlegroundId())
return; return;
@@ -2175,6 +2208,15 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate) @@ -2178,6 +2211,15 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate)
if (victim && victim->GetTypeId() == TYPEID_UNIT && !victim->ToCreature()->hasLootRecipient()) if (victim && victim->GetTypeId() == TYPEID_UNIT && !victim->ToCreature()->hasLootRecipient())
return; return;
@@ -1179,7 +1179,7 @@ index 2a06a02a56..23b4008092 100644
uint8 level = GetLevel(); uint8 level = GetLevel();
sScriptMgr->OnGivePlayerXP(this, xp, victim); sScriptMgr->OnGivePlayerXP(this, xp, victim);
@@ -15055,6 +15097,10 @@ void Player::AddQuest(Quest const* quest, Object* questGiver) @@ -15097,6 +15139,10 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
sScriptMgr->OnQuestStatusChange(this, quest_id); sScriptMgr->OnQuestStatusChange(this, quest_id);
sScriptMgr->OnQuestStatusChange(this, quest, oldStatus, questStatusData.Status); sScriptMgr->OnQuestStatusChange(this, quest, oldStatus, questStatusData.Status);
@@ -1190,7 +1190,7 @@ index 2a06a02a56..23b4008092 100644
} }
void Player::CompleteQuest(uint32 quest_id) void Player::CompleteQuest(uint32 quest_id)
@@ -15452,6 +15498,17 @@ void Player::RewardQuest(Quest const* quest, LootItemType rewardType, uint32 rew @@ -15533,6 +15579,17 @@ void Player::RewardQuest(Quest const* quest, LootItemType rewardType, uint32 rew
SendQuestUpdate(quest_id, true, true); SendQuestUpdate(quest_id, true, true);
@@ -1208,7 +1208,7 @@ index 2a06a02a56..23b4008092 100644
bool updateVisibility = false; bool updateVisibility = false;
if (quest->HasFlag(QUEST_FLAGS_UPDATE_PHASESHIFT)) if (quest->HasFlag(QUEST_FLAGS_UPDATE_PHASESHIFT))
updateVisibility = PhasingHandler::OnConditionChange(this, false); updateVisibility = PhasingHandler::OnConditionChange(this, false);
@@ -16186,6 +16243,10 @@ void Player::RemoveActiveQuest(uint32 questId, bool update /*= true*/) @@ -16267,6 +16324,10 @@ void Player::RemoveActiveQuest(uint32 questId, bool update /*= true*/)
if (updateVisibility) if (updateVisibility)
UpdateObjectVisibility(); UpdateObjectVisibility();
@@ -1219,7 +1219,7 @@ index 2a06a02a56..23b4008092 100644
} }
void Player::RemoveRewardedQuest(uint32 questId, bool update /*= true*/) void Player::RemoveRewardedQuest(uint32 questId, bool update /*= true*/)
@@ -16720,6 +16781,10 @@ void Player::AreaExploredOrEventHappens(uint32 questId) @@ -16801,6 +16862,10 @@ void Player::AreaExploredOrEventHappens(uint32 questId)
if (CanCompleteQuest(questId)) if (CanCompleteQuest(questId))
CompleteQuest(questId); CompleteQuest(questId);
} }
@@ -1230,7 +1230,7 @@ index 2a06a02a56..23b4008092 100644
} }
//not used in Trinityd, function for external script library //not used in Trinityd, function for external script library
@@ -16845,6 +16910,10 @@ void Player::KilledMonsterCredit(uint32 entry, ObjectGuid guid /*= ObjectGuid::E @@ -16926,6 +16991,10 @@ void Player::KilledMonsterCredit(uint32 entry, ObjectGuid guid /*= ObjectGuid::E
UpdateCriteria(CriteriaType::KillCreature, real_entry, addKillCount, 0, killed); UpdateCriteria(CriteriaType::KillCreature, real_entry, addKillCount, 0, killed);
UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_MONSTER, entry, 1, guid); UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_MONSTER, entry, 1, guid);
@@ -1241,7 +1241,7 @@ index 2a06a02a56..23b4008092 100644
} }
void Player::KilledPlayerCredit(ObjectGuid victimGuid) void Player::KilledPlayerCredit(ObjectGuid victimGuid)
@@ -18114,6 +18183,13 @@ void Player::SetHomebind(WorldLocation const& loc, uint32 areaId) @@ -18265,6 +18334,13 @@ void Player::SetHomebind(WorldLocation const& loc, uint32 areaId)
stmt->setFloat(5, m_homebind.GetOrientation()); stmt->setFloat(5, m_homebind.GetOrientation());
stmt->setUInt64(6, GetGUID().GetCounter()); stmt->setUInt64(6, GetGUID().GetCounter());
CharacterDatabase.Execute(stmt); CharacterDatabase.Execute(stmt);
@@ -1255,7 +1255,7 @@ index 2a06a02a56..23b4008092 100644
} }
void Player::SendBindPointUpdate() const void Player::SendBindPointUpdate() const
@@ -25410,12 +25486,32 @@ void Player::SendInitialPacketsAfterAddToMap() @@ -25597,12 +25673,32 @@ void Player::SendInitialPacketsAfterAddToMap()
GetSession()->SendLoadCUFProfiles(); GetSession()->SendLoadCUFProfiles();
@@ -1291,7 +1291,7 @@ index 2a06a02a56..23b4008092 100644
setCompoundState.StateChanges.emplace_back(SMSG_MOVE_ROOT, m_movementCounter++); setCompoundState.StateChanges.emplace_back(SMSG_MOVE_ROOT, m_movementCounter++);
if (HasAuraType(SPELL_AURA_FEATHER_FALL)) if (HasAuraType(SPELL_AURA_FEATHER_FALL))
@@ -27542,6 +27638,13 @@ void Player::StoreLootItem(ObjectGuid lootWorldObjectGuid, uint8 lootSlot, Loot* @@ -27740,6 +27836,13 @@ void Player::StoreLootItem(ObjectGuid lootWorldObjectGuid, uint8 lootSlot, Loot*
Item* newitem = StoreNewItem(dest, item->itemid, true, item->randomBonusListId, item->GetAllowedLooters(), item->context); Item* newitem = StoreNewItem(dest, item->itemid, true, item->randomBonusListId, item->GetAllowedLooters(), item->context);
@@ -1306,10 +1306,10 @@ index 2a06a02a56..23b4008092 100644
if (Guild* guild = GetGuild()) if (Guild* guild = GetGuild())
guild->AddGuildNews(GUILD_NEWS_ITEM_LOOTED, GetGUID(), 0, item->itemid); guild->AddGuildNews(GUILD_NEWS_ITEM_LOOTED, GetGUID(), 0, item->itemid);
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 1ae247dd78..7481a5c602 100644 index 4577fffa77..1126d89a09 100644
--- a/src/server/game/Entities/Player/Player.h --- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h
@@ -2380,6 +2380,9 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player> @@ -2382,6 +2382,9 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
Loot* GetLootByWorldObjectGUID(ObjectGuid const& lootWorldObjectGuid) const; Loot* GetLootByWorldObjectGUID(ObjectGuid const& lootWorldObjectGuid) const;
std::unordered_map<ObjectGuid, Loot*> const& GetAELootView() const { return m_AELootView; } std::unordered_map<ObjectGuid, Loot*> const& GetAELootView() const { return m_AELootView; }
LootRoll* GetLootRoll(ObjectGuid const& lootObjectGuid, uint8 lootListId); LootRoll* GetLootRoll(ObjectGuid const& lootObjectGuid, uint8 lootListId);
@@ -1320,7 +1320,7 @@ index 1ae247dd78..7481a5c602 100644
void RemoveLootRoll(LootRoll* roll); void RemoveLootRoll(LootRoll* roll);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index e3163ab968..05f6972d17 100644 index 1f376653f2..971fb43af8 100644
--- a/src/server/game/Entities/Unit/Unit.cpp --- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -91,6 +91,7 @@ @@ -91,6 +91,7 @@
@@ -1331,7 +1331,7 @@ index e3163ab968..05f6972d17 100644
#include <queue> #include <queue>
#include <sstream> #include <sstream>
#include <cmath> #include <cmath>
@@ -869,6 +870,13 @@ bool Unit::HasBreakableByDamageCrowdControlAura(Unit const* excludeCasterChannel @@ -870,6 +871,13 @@ bool Unit::HasBreakableByDamageCrowdControlAura(Unit const* excludeCasterChannel
// Hook for OnDamage Event // Hook for OnDamage Event
sScriptMgr->OnDamage(attacker, victim, tmpDamage); sScriptMgr->OnDamage(attacker, victim, tmpDamage);
@@ -1345,7 +1345,7 @@ index e3163ab968..05f6972d17 100644
// if any script modified damage, we need to also apply the same modification to unscaled damage value // if any script modified damage, we need to also apply the same modification to unscaled damage value
if (tmpDamage != damageTaken) if (tmpDamage != damageTaken)
{ {
@@ -6040,6 +6048,10 @@ bool Unit::Attack(Unit* victim, bool meleeAttack) @@ -6041,6 +6049,10 @@ bool Unit::Attack(Unit* victim, bool meleeAttack)
if (Creature* cControlled = controlled->ToCreature()) if (Creature* cControlled = controlled->ToCreature())
if (CreatureAI* controlledAI = cControlled->AI()) if (CreatureAI* controlledAI = cControlled->AI())
controlledAI->OwnerAttacked(victim); controlledAI->OwnerAttacked(victim);
@@ -1356,7 +1356,7 @@ index e3163ab968..05f6972d17 100644
} }
return true; return true;
@@ -6623,6 +6635,13 @@ void Unit::SetCharm(Unit* charm, bool apply) @@ -6624,6 +6636,13 @@ void Unit::SetCharm(Unit* charm, bool apply)
// Hook for OnHeal Event // Hook for OnHeal Event
sScriptMgr->OnHeal(healer, victim, (uint32&)gain); sScriptMgr->OnHeal(healer, victim, (uint32&)gain);
@@ -1370,7 +1370,7 @@ index e3163ab968..05f6972d17 100644
Unit* unit = healer; Unit* unit = healer;
if (healer && healer->GetTypeId() == TYPEID_UNIT && healer->IsTotem()) if (healer && healer->GetTypeId() == TYPEID_UNIT && healer->IsTotem())
unit = healer->GetOwner(); unit = healer->GetOwner();
@@ -11451,6 +11470,13 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId) @@ -11459,6 +11478,13 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
if (attacker && !attacker->IsInMap(victim)) if (attacker && !attacker->IsInMap(victim))
attacker = nullptr; attacker = nullptr;
@@ -1552,7 +1552,7 @@ index db909ec44b..5cc5d35c6e 100644
if (!_player->InBattleground()) if (!_player->InBattleground())
_player->SetBattlegroundEntryPoint(); _player->SetBattlegroundEntryPoint();
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 3bf8d61e18..bc2134af05 100644 index 2788dd41ab..7a9bcea19b 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp --- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
@@ -1711,7 +1711,7 @@ index 3bf8d61e18..bc2134af05 100644
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_BANK_TAB_SETTINGS); stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_BANK_TAB_SETTINGS);
stmt->setUInt64(0, lowGuid); stmt->setUInt64(0, lowGuid);
@@ -1245,8 +1258,6 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder) @@ -1262,8 +1275,6 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder)
pCurrChar->GetMotionMaster()->Initialize(); pCurrChar->GetMotionMaster()->Initialize();
pCurrChar->SendDungeonDifficulty(); pCurrChar->SendDungeonDifficulty();
@@ -1720,7 +1720,7 @@ index 3bf8d61e18..bc2134af05 100644
WorldPackets::Character::LoginVerifyWorld loginVerifyWorld; WorldPackets::Character::LoginVerifyWorld loginVerifyWorld;
loginVerifyWorld.MapID = pCurrChar->GetMapId(); loginVerifyWorld.MapID = pCurrChar->GetMapId();
@@ -1392,9 +1403,19 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder) @@ -1409,9 +1420,19 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder)
stmt->setUInt64(0, pCurrChar->GetGUID().GetCounter()); stmt->setUInt64(0, pCurrChar->GetGUID().GetCounter());
CharacterDatabase.Execute(stmt); CharacterDatabase.Execute(stmt);
@@ -1743,7 +1743,7 @@ index 3bf8d61e18..bc2134af05 100644
pCurrChar->SetInGameTime(GameTime::GetGameTimeMS()); pCurrChar->SetInGameTime(GameTime::GetGameTimeMS());
@@ -1594,6 +1615,11 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder) @@ -1611,6 +1632,11 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder)
sScriptMgr->OnPlayerLogin(pCurrChar, firstLogin); sScriptMgr->OnPlayerLogin(pCurrChar, firstLogin);
@@ -2010,7 +2010,7 @@ index 84d92dcb7c..5ee621dd8a 100644
std::vector<Creature*> corpses; std::vector<Creature*> corpses;
if (aeLootEnabled) if (aeLootEnabled)
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index b10bbebcbf..2c4c5eb3fb 100644 index be0b342f3c..23b782b412 100644
--- a/src/server/game/Handlers/NPCHandler.cpp --- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -34,6 +34,7 @@ @@ -34,6 +34,7 @@
@@ -3791,7 +3791,7 @@ index bb8356c428..2bc203c2cf 100644
if (m_Socket[CONNECTION_TYPE_INSTANCE]) if (m_Socket[CONNECTION_TYPE_INSTANCE])
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 5554b683e8..90aead528e 100644 index cdc1681e23..3a56443d3e 100644
--- a/src/server/game/Server/WorldSession.h --- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h
@@ -51,6 +51,13 @@ class Player; @@ -51,6 +51,13 @@ class Player;
@@ -3837,8 +3837,8 @@ index 5554b683e8..90aead528e 100644
bool CanAccessAlliedRaces() const; bool CanAccessAlliedRaces() const;
/// Session in auth.queue currently /// Session in auth.queue currently
@@ -2796,6 +2812,8 @@ public: @@ -2801,6 +2817,8 @@ public:
AsyncCallbackProcessor<SQLQueryHolderCallback> _queryHolderProcessor; uint32 _lastBattlePayPurchaseMSTime = 0;
friend class World; friend class World;
+ friend class Playerbot::BotSession; + friend class Playerbot::BotSession;
@@ -3846,7 +3846,7 @@ index 5554b683e8..90aead528e 100644
protected: protected:
class DosProtection class DosProtection
{ {
@@ -2927,8 +2945,13 @@ public: @@ -2932,8 +2950,13 @@ public:
uint32 _lastClientPlotIndex = 0; uint32 _lastClientPlotIndex = 0;
ObjectGuid _lastCornerstoneGuid; ObjectGuid _lastCornerstoneGuid;
@@ -3861,7 +3861,7 @@ index 5554b683e8..90aead528e 100644
+ +
#endif #endif
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index f842742ba1..5d0d5c57fa 100644 index 97f32b5c66..4ce1b34453 100644
--- a/src/server/game/World/World.cpp --- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp
@@ -20,6 +20,9 @@ @@ -20,6 +20,9 @@
@@ -3882,7 +3882,7 @@ index f842742ba1..5d0d5c57fa 100644
#include "MiscPackets.h" #include "MiscPackets.h"
#include "ObjectAccessor.h" #include "ObjectAccessor.h"
#include "ObjectMgr.h" #include "ObjectMgr.h"
@@ -2420,6 +2424,27 @@ void World::Update(uint32 diff) @@ -2449,6 +2453,27 @@ void World::Update(uint32 diff)
} }
} }
@@ -3910,7 +3910,7 @@ index f842742ba1..5d0d5c57fa 100644
/// <li> Handle all other objects /// <li> Handle all other objects
///- Update objects when the timer has passed (maps, transport, creatures, ...) ///- Update objects when the timer has passed (maps, transport, creatures, ...)
{ {
@@ -2573,11 +2598,6 @@ void World::Update(uint32 diff) @@ -2619,11 +2644,6 @@ void World::Update(uint32 diff)
ProcessCliCommands(); ProcessCliCommands();
} }
@@ -3923,7 +3923,7 @@ index f842742ba1..5d0d5c57fa 100644
TC_METRIC_TIMER("world_update_time", TC_METRIC_TAG("type", "Update metrics")); TC_METRIC_TIMER("world_update_time", TC_METRIC_TAG("type", "Update metrics"));
// Stats logger update // Stats logger update
diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt
index 691ede0315..72e2133e83 100644 index 691ede0315..6c07b3aa26 100644
--- a/src/server/scripts/CMakeLists.txt --- a/src/server/scripts/CMakeLists.txt
+++ b/src/server/scripts/CMakeLists.txt +++ b/src/server/scripts/CMakeLists.txt
@@ -166,6 +166,15 @@ foreach(SCRIPT_MODULE ${SCRIPT_MODULE_LIST}) @@ -166,6 +166,15 @@ foreach(SCRIPT_MODULE ${SCRIPT_MODULE_LIST})
@@ -3944,7 +3944,7 @@ index 691ede0315..72e2133e83 100644
COMPILE_WARNING_AS_ERROR ${WITH_WARNINGS_AS_ERRORS} COMPILE_WARNING_AS_ERROR ${WITH_WARNINGS_AS_ERRORS}
diff --git a/src/server/scripts/Commands/cs_playerbot_v2.cpp b/src/server/scripts/Commands/cs_playerbot_v2.cpp diff --git a/src/server/scripts/Commands/cs_playerbot_v2.cpp b/src/server/scripts/Commands/cs_playerbot_v2.cpp
new file mode 100644 new file mode 100644
index 0000000000..993ac1bd772f183f12d3d4872b919e2e7e7f7e3c index 0000000000..993ac1bd77
--- /dev/null --- /dev/null
+++ b/src/server/scripts/Commands/cs_playerbot_v2.cpp +++ b/src/server/scripts/Commands/cs_playerbot_v2.cpp
@@ -0,0 +1,4714 @@ @@ -0,0 +1,4714 @@