Regenerate thordekk core-hooks patch against thordekk/main b8a06fe8ba
This commit is contained in:
@@ -804,35 +804,35 @@ index 0000000000..933281acf5
|
||||
+#define sModuleUpdateManager Trinity::ModuleUpdateManager::instance()
|
||||
\ No newline at end of file
|
||||
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
|
||||
+++ b/src/server/database/Database/Implementation/LoginDatabase.cpp
|
||||
@@ -205,6 +205,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);
|
||||
@@ -206,6 +206,10 @@ void LoginDatabaseConnection::DoPrepareStatements()
|
||||
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);
|
||||
+
|
||||
|
||||
+ // 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_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);
|
||||
}
|
||||
|
||||
LoginDatabaseConnection::LoginDatabaseConnection(MySQLConnectionInfo& connInfo, ConnectionFlags connectionFlags) : MySQLConnection(connInfo, connectionFlags)
|
||||
+
|
||||
//WowCommunity
|
||||
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
|
||||
index 53d1d7a769..a2f9669cd2 100644
|
||||
index e86ed2787c..acba19feb0 100644
|
||||
--- a/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_INS_BNET_PLAYER_DATA_FLAGS_ACCOUNT,
|
||||
|
||||
+
|
||||
+ // 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_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
|
||||
+
|
||||
MAX_LOGINDATABASE_STATEMENTS
|
||||
};
|
||||
|
||||
//WowCommunity
|
||||
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
|
||||
index e4af6c4cb0..4c4e587099 100644
|
||||
--- a/src/server/database/Database/Implementation/WorldDatabase.cpp
|
||||
@@ -1113,7 +1113,7 @@ index d4612fb3bf..8353805af7 100644
|
||||
private:
|
||||
Spell const* GetSpell(uint32 spellId) const;
|
||||
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
|
||||
+++ b/src/server/game/Entities/Player/Player.cpp
|
||||
@@ -16,6 +16,7 @@
|
||||
@@ -1124,7 +1124,7 @@ index 2a06a02a56..23b4008092 100644
|
||||
#include "AreaTrigger.h"
|
||||
#include "Account.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)
|
||||
return;
|
||||
|
||||
@@ -1163,7 +1163,7 @@ index 2a06a02a56..23b4008092 100644
|
||||
if (!IsAlive() && !GetBattlegroundId())
|
||||
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())
|
||||
return;
|
||||
|
||||
@@ -1179,7 +1179,7 @@ index 2a06a02a56..23b4008092 100644
|
||||
uint8 level = GetLevel();
|
||||
|
||||
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, oldStatus, questStatusData.Status);
|
||||
@@ -1190,7 +1190,7 @@ index 2a06a02a56..23b4008092 100644
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
@@ -1208,7 +1208,7 @@ index 2a06a02a56..23b4008092 100644
|
||||
bool updateVisibility = false;
|
||||
if (quest->HasFlag(QUEST_FLAGS_UPDATE_PHASESHIFT))
|
||||
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)
|
||||
UpdateObjectVisibility();
|
||||
@@ -1219,7 +1219,7 @@ index 2a06a02a56..23b4008092 100644
|
||||
}
|
||||
|
||||
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))
|
||||
CompleteQuest(questId);
|
||||
}
|
||||
@@ -1230,7 +1230,7 @@ index 2a06a02a56..23b4008092 100644
|
||||
}
|
||||
|
||||
//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);
|
||||
|
||||
UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_MONSTER, entry, 1, guid);
|
||||
@@ -1241,7 +1241,7 @@ index 2a06a02a56..23b4008092 100644
|
||||
}
|
||||
|
||||
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->setUInt64(6, GetGUID().GetCounter());
|
||||
CharacterDatabase.Execute(stmt);
|
||||
@@ -1255,7 +1255,7 @@ index 2a06a02a56..23b4008092 100644
|
||||
}
|
||||
|
||||
void Player::SendBindPointUpdate() const
|
||||
@@ -25410,12 +25486,32 @@ void Player::SendInitialPacketsAfterAddToMap()
|
||||
@@ -25597,12 +25673,32 @@ void Player::SendInitialPacketsAfterAddToMap()
|
||||
|
||||
GetSession()->SendLoadCUFProfiles();
|
||||
|
||||
@@ -1291,7 +1291,7 @@ index 2a06a02a56..23b4008092 100644
|
||||
setCompoundState.StateChanges.emplace_back(SMSG_MOVE_ROOT, m_movementCounter++);
|
||||
|
||||
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);
|
||||
|
||||
@@ -1306,10 +1306,10 @@ index 2a06a02a56..23b4008092 100644
|
||||
if (Guild* guild = GetGuild())
|
||||
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
|
||||
index 1ae247dd78..7481a5c602 100644
|
||||
index 4577fffa77..1126d89a09 100644
|
||||
--- a/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;
|
||||
std::unordered_map<ObjectGuid, Loot*> const& GetAELootView() const { return m_AELootView; }
|
||||
LootRoll* GetLootRoll(ObjectGuid const& lootObjectGuid, uint8 lootListId);
|
||||
@@ -1320,7 +1320,7 @@ index 1ae247dd78..7481a5c602 100644
|
||||
void RemoveLootRoll(LootRoll* roll);
|
||||
|
||||
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
|
||||
+++ b/src/server/game/Entities/Unit/Unit.cpp
|
||||
@@ -91,6 +91,7 @@
|
||||
@@ -1331,7 +1331,7 @@ index e3163ab968..05f6972d17 100644
|
||||
#include <queue>
|
||||
#include <sstream>
|
||||
#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
|
||||
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 (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 (CreatureAI* controlledAI = cControlled->AI())
|
||||
controlledAI->OwnerAttacked(victim);
|
||||
@@ -1356,7 +1356,7 @@ index e3163ab968..05f6972d17 100644
|
||||
}
|
||||
|
||||
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
|
||||
sScriptMgr->OnHeal(healer, victim, (uint32&)gain);
|
||||
|
||||
@@ -1370,7 +1370,7 @@ index e3163ab968..05f6972d17 100644
|
||||
Unit* unit = healer;
|
||||
if (healer && healer->GetTypeId() == TYPEID_UNIT && healer->IsTotem())
|
||||
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))
|
||||
attacker = nullptr;
|
||||
|
||||
@@ -1552,7 +1552,7 @@ index db909ec44b..5cc5d35c6e 100644
|
||||
if (!_player->InBattleground())
|
||||
_player->SetBattlegroundEntryPoint();
|
||||
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
|
||||
+++ b/src/server/game/Handlers/CharacterHandler.cpp
|
||||
@@ -16,6 +16,7 @@
|
||||
@@ -1711,7 +1711,7 @@ index 3bf8d61e18..bc2134af05 100644
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_BANK_TAB_SETTINGS);
|
||||
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->SendDungeonDifficulty();
|
||||
@@ -1720,7 +1720,7 @@ index 3bf8d61e18..bc2134af05 100644
|
||||
|
||||
WorldPackets::Character::LoginVerifyWorld loginVerifyWorld;
|
||||
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());
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
@@ -1743,7 +1743,7 @@ index 3bf8d61e18..bc2134af05 100644
|
||||
|
||||
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);
|
||||
|
||||
@@ -2010,7 +2010,7 @@ index 84d92dcb7c..5ee621dd8a 100644
|
||||
std::vector<Creature*> corpses;
|
||||
if (aeLootEnabled)
|
||||
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
|
||||
+++ b/src/server/game/Handlers/NPCHandler.cpp
|
||||
@@ -34,6 +34,7 @@
|
||||
@@ -3791,7 +3791,7 @@ index bb8356c428..2bc203c2cf 100644
|
||||
|
||||
if (m_Socket[CONNECTION_TYPE_INSTANCE])
|
||||
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
|
||||
+++ b/src/server/game/Server/WorldSession.h
|
||||
@@ -51,6 +51,13 @@ class Player;
|
||||
@@ -3837,8 +3837,8 @@ index 5554b683e8..90aead528e 100644
|
||||
bool CanAccessAlliedRaces() const;
|
||||
|
||||
/// Session in auth.queue currently
|
||||
@@ -2796,6 +2812,8 @@ public:
|
||||
AsyncCallbackProcessor<SQLQueryHolderCallback> _queryHolderProcessor;
|
||||
@@ -2801,6 +2817,8 @@ public:
|
||||
uint32 _lastBattlePayPurchaseMSTime = 0;
|
||||
|
||||
friend class World;
|
||||
+ friend class Playerbot::BotSession;
|
||||
@@ -3846,7 +3846,7 @@ index 5554b683e8..90aead528e 100644
|
||||
protected:
|
||||
class DosProtection
|
||||
{
|
||||
@@ -2927,8 +2945,13 @@ public:
|
||||
@@ -2932,8 +2950,13 @@ public:
|
||||
uint32 _lastClientPlotIndex = 0;
|
||||
ObjectGuid _lastCornerstoneGuid;
|
||||
|
||||
@@ -3861,7 +3861,7 @@ index 5554b683e8..90aead528e 100644
|
||||
+
|
||||
#endif
|
||||
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
|
||||
+++ b/src/server/game/World/World.cpp
|
||||
@@ -20,6 +20,9 @@
|
||||
@@ -3882,7 +3882,7 @@ index f842742ba1..5d0d5c57fa 100644
|
||||
#include "MiscPackets.h"
|
||||
#include "ObjectAccessor.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
|
||||
///- 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();
|
||||
}
|
||||
|
||||
@@ -3923,7 +3923,7 @@ index f842742ba1..5d0d5c57fa 100644
|
||||
TC_METRIC_TIMER("world_update_time", TC_METRIC_TAG("type", "Update metrics"));
|
||||
// Stats logger update
|
||||
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
|
||||
+++ b/src/server/scripts/CMakeLists.txt
|
||||
@@ -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}
|
||||
diff --git a/src/server/scripts/Commands/cs_playerbot_v2.cpp b/src/server/scripts/Commands/cs_playerbot_v2.cpp
|
||||
new file mode 100644
|
||||
index 0000000000..993ac1bd772f183f12d3d4872b919e2e7e7f7e3c
|
||||
index 0000000000..993ac1bd77
|
||||
--- /dev/null
|
||||
+++ b/src/server/scripts/Commands/cs_playerbot_v2.cpp
|
||||
@@ -0,0 +1,4714 @@
|
||||
|
||||
Reference in New Issue
Block a user