WoW Planet -информационный портал игры World Of WarCraft

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » WoW Planet -информационный портал игры World Of WarCraft » Установка / Настройка TrinityCore » Компиляция ядра,создание сборки Trinity 3.3.5|Win32


Компиляция ядра,создание сборки Trinity 3.3.5|Win32

Сообщений 1 страница 3 из 3

1

Доброго времени суток Ув. Форумчане!
Вот что нам понадобится для работы:

Visual C++ 2008 Express или Visual C++ 2010. Express издания не поддерживают компиляцию на системах с 64 битной архитектурой.
.NET Framework 3.5 - вполне возможно, что он уже скачан вами во время обновления системы Windows.
MySQL - сервер баз данных, рекомендуется использовать версии 5.1.х.
TortoiseHg – графическая оболочка для управления системой контроля версий Mercurial.
Git - распределённая система управления версиями файлов.
CMake - программа для построения проекта и подготовки исходного кода непосредственно к процессу компиляции.
OpenSSL - система безопасных сокетов позволяющая создавать ключи RSA, DH, DSA и сертификаты.
Navicat - приложение для графического управления сервером MySQL, рекомендуется использовать Lite версию программы.

После того как мы скачали и установили весь необходимый софт, идём дальше по плану, который состоит из следующих пунктов:

1. Скачивание исходников.
2. "Накатывание" патчей на ядро.
3. Сборка компилятора.
4. Компиляция ядра.
5. Настройка ядра.
6. Работа с базами.
6.1. Создание баз.
6.2. Заполнение баз.
6.3. Настройки баз.
7. Запуск сервера.

Начинаем.
1. Скачивание исходников.
Создаем рабочий каталог в "корне" диска, например:
Код:

Код:
D:\Trinity - Путь не должен содержать кириллицы.

В контекстном меню созданной нами папки выбираем TortoiseHg - Clone...:
http://s2.ipicture.ru/uploads/20110104/19lgSAPM.jpg
В появившемся окне, в графе Source Path, указываем адрес официального репозитория Trinity Core:
https://trinitycore.googlecode.com/hg/ и нажимаем Clone
http://s1.ipicture.ru/uploads/20110104/0LtO2Jhy.jpg
После скачивания, переименуем папку с нашими исходниками, в source (для удобства), так, чтобы путь к исходникам был такой:
http://s1.ipicture.ru/uploads/20110104/k5ToV4yS.jpg
Код:

Код:
D:\work\source

Скачивание исходников завершено.
2. "Накатывание" патчей на ядро.
Патч - это некая модификация для ядра, написанная на CPP, которая может в корне изменить работоспособность сервера, начиная от работы спелов заканчивая Гильд-Хаусами.
Установка патчей производится с помощью программы Git.
Для примера "накатывания" патча, я предлагаю Вам воспользоваться патчем, который дает возможность игрокам получать различные звания за убийства игроков противоположной фракции в зависимости от количества убийств.

Сам патч:

Код:
[size=8]# HG changeset patch -- Bitbucket.org 
 # Project EasyCore 
 # URL [url]http://bitbucket.org/easytrinity/easycore/overview[/url] 
 # User easytrinity <admin@likenet.ru> 
 # Date 1285770323 -14400 
 # Node ID ccb906b16695e1f93c91ea9d6f173f60968b9c45 
 # Parent  9696c9e8cca39bf0626faaf07240ed434d2df805 
 added PvP Rank system 
           
 --- a/src/server/game/World/World.cpp 
 +++ b/src/server/game/World/World.cpp 
 @@ -862,6 +862,18 @@ void World::LoadConfigSettings(bool relo 
              sLog.outError("MinPetitionSigns (%i) must be in range 0..9. Set to 9.", m_int_configs[CONFIG_MIN_PETITION_SIGNS]); 
              m_int_configs[CONFIG_MIN_PETITION_SIGNS] = 9; 
          } 
 +    rate_values[RATE_PVP_RANK_EXTRA_HONOR] = sConfig.GetFloatDefault("PvPRank.Rate.ExtraHonor", 1); 
 +    std::string s_pvp_ranks = sConfig.GetStringDefault("PvPRank.HKPerRank", "10,50,100,200,450,750,1300,2000,3500,6000,9500,15000,21000,30000"); 
 +    char *c_pvp_ranks = const_cast<char*>(s_pvp_ranks.c_str()); 
 +    for (int i = 0; i !=HKRANKMAX; i++) 
 +    { 
 +        if (i==0) 
 +            pvp_ranks[0] = 0; 
 +        else if (i==1) 
 +            pvp_ranks[1] = atoi(strtok (c_pvp_ranks, ",")); 
 +        else 
 +            pvp_ranks[i] = atoi(strtok (NULL, ",")); 
 +    } 
           
          m_int_configs[CONFIG_GM_LOGIN_STATE]        = sConfig.GetIntDefault("GM.LoginState", 2); 
          m_int_configs[CONFIG_GM_VISIBLE_STATE]      = sConfig.GetIntDefault("GM.Visible", 2); 
           
 --- a/src/server/game/World/World.h 
 +++ b/src/server/game/World/World.h 
 @@ -390,9 +390,30 @@ enum Rates 
          RATE_DURABILITY_LOSS_PARRY, 
          RATE_DURABILITY_LOSS_ABSORB, 
          RATE_DURABILITY_LOSS_BLOCK, 
 +    RATE_PVP_RANK _EX TRA _HO NOR,        
          RATE_MOVESPEED, 
          MAX_RATES 
      }; 
 +         
 +enum HonorKillPvPRank 
 +{ 
 +    HKRANK00, 
 +    HKRANK01, 
 +    HKRANK02, 
 +    HKRANK03, 
 +    HKRANK04, 
 +    HKRANK05, 
 +    HKRANK06, 
 +    H    KRANK07, 
 +    HKRANK08, 
 +    HKRANK09, 
 +    HKRANK10, 
 +    HKRANK11, 
 +    HKRANK12, 
 +    HKRANK13, 
 +    HKRANK14, 
 +    HKRANKMAX 
 +  }  ; 
           
      /// Can be used in SMSG_AUTH_RESPONSE packet 
      enum BillingPlanFlags 
 @@ -639,6 +660,8 @@ class World 
              void SendZoneText(uint32 zone, const char *text, WorldSession *self = 0, uint32 team = 0); 
              void SendServerMessage(ServerMessageType type, const char *text = "", Player* player = NULL); 
           
 +        uint32 pvp_ranks[HKRANKMAX]; 
 + 
              /// Are we in the middle of a shutdown? 
              bool IsShutdowning() const { return m_ShutdownTimer > 0; } 
              void ShutdownServ(uint32 time, uint32 options, uint8 exitcode); 
           
 --- a/src/server/game/Entities/Player/Player.cpp 
 +++ b/src/server/game/Entities/Player/Player.cpp 
 @@ -6770,6 +6770,7 @@ bool Player::RewardHonor(Unit *uVictim,      
           
          uint64 victim_guid = 0; 
          uint32 victim_rank = 0; 
 +    uint32 rank_diff = 0; 
           
          // need call before fields update to have chance move yesterday data to appropriate fields before today data change. 
          UpdateHonorFields(); 
 @@ -6808,22 +6809,52 @@ bool Player::RewardHonor(Unit *uVictim,      
                  //  [15..28] Horde honor titles and player name 
                  //  [29..38] Other title and player name 
                  //  [39+]    Nothing 
 -            uint32 victim_title = pVictim->GetUInt32Value(PLAYER_CHOSEN_TITLE); 
 -                    // Get Killer titles, CharTitlesEntry::bit_index 
 +            // PLAYER__FIELD_KNOWN_TITLES describe which titles player can use, 
 +            // so we must find biggest pvp title , even for killer to find extra honor value 
 +            uint32 vtitle = pVictim->GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES); 
 +            uint32 victim_title = 0; 
 +            uint32 ktitle = GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES); 
 +            uint32 killer_title = 0; 
 +            if (PLAYER_TITLE_MASK_ALL_PVP & ktitle) 
 +            { 
 +                for (int i = ((GetTeam() == ALLIANCE) ? 1:HKRANKMAX);i!=((GetTeam() == ALLIANCE) ? HKRANKMAX : (2*HKRANKMAX-1));i++) 
 +                { 
 +                    if (ktitle & (1<<i)) 
 +                        killer_title = i; 
 +                } 
 +            } 
 +            if (PLAYER_TITLE_MASK_ALL_PVP & vtitle) 
 +            { 
 +                for (int i = ((pVictim->GetTeam() == ALLIANCE) ? 1:HKRANKMAX);i!=((pVictim->GetTeam() == ALLIANCE) ? HKRANKMAX : (2*HKRANKMAX-1));i++) 
 +                { 
 +                    if (vtitle & (1<<i)) 
 +                        victim_title = i; 
 +                } 
 +            } 
 +            // Get Killer titles, CharTitlesEntry::bit_index 
                  // Ranks: 
                  //  title[1..14]  -> rank[5..18] 
                  //  title[15..28] -> rank[5..18] 
                  //  title[other]  -> 0 
                  if (victim_title == 0) 
 +                victim_guid = 0;                        // Don't show HK: <rank> message, only log.] 
 +            else if (victim_title < HKRANKMAX) 
 +                victim_rank = victim_title + 4; 
 +            else if (victim_title < (2*HKRANKMAX-1)) 
 +                victim_rank = victim_title - (HKRANKMAX-1) + 4; 
 +            else 
                      victim_guid = 0;                        // Don't show HK: <rank> message, only log. 
 -            else if (victim_title < 15) 
 -                victim_rank = victim_title + 4; 
 -            else if (victim_title < 29) 
 -                victim_rank = victim_title - 14 + 4; 
 -            else 
 -                victim_guid = 0;                        // Don't show HK: <rank> message, only log. 
 +      
 +            // now find rank difference 
 +            if (killer_title == 0 && victim_rank>4) 
 +                rank_diff = victim_rank - 4; 
 +            else if (killer_title < HKRANKMAX) 
 +                rank_diff = (victim_rank>(killer_title + 4))? (victim_rank - (killer_title + 4)) : 0; 
 +            else if (killer_title < (2*HKRANKMAX-1)) 
 +                rank_diff = (victim_rank>(killer_title - (HKRANKMAX-1) +4))? (victim_rank - (killer_title - (HKRANKMAX-1) + 4)) : 0; 
           
 -             honor_f = ceil(Trinity::Honor::hk_honor_at_level_f(k_level) * (v_level - k_grey) / (k_level - k_grey)); 
 +            honor_f = 1 + sWorld.getRate(RATE_PVP_RANK_EXTRA_HONOR)*(((float)rank_diff) / 10.0f); 
           
                  // count the number of playerkills in one day 
                  ApplyModUInt32Value(PLAYER_FIELD_KILLS, 1, true); 
 @@ -6832,6 +6863,7 @@ bool Player::RewardHonor(Unit *uVictim,      
                  UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL); 
                  UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS, pVictim->getClass()); 
                  UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HK_RACE, pVictim->getRace()); 
 +            UpdateKnownTitles(); 
              } 
              else 
              { 
 @@ -6905,6 +6937,30 @@ bool Player::RewardHonor(Unit *uVictim,      
          return true; 
      } 
           
 +void Player::UpdateKnownTitles() 
 +{ 
 +    uint32 new_title = 0; 
 +    uint32 honor_kills = GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS); 
 +    uint32 old_title = GetUInt32Value(PLAYER_CHOSEN_TITLE); 
 +    RemoveFlag64(PLAYER__FIELD_KNOWN_TITLES,PLAYER_TITLE_MASK_ALL_PVP); 
 +    if (honor_kills < 0) 
 +        return; 
 +    bool max_rank = ((honor_kills >= sWorld.pvp_ranks[HKRANKMAX-1]) ? true : false); 
 +    for (int i = HKRANK01; i != HKRANKMAX; ++i) 
 +    { 
 +        if (honor_kills < sWorld.pvp_ranks[i] || (max_rank)) 
 +        { 
 +            new_title = ((max_rank) ? (HKRANKMAX-1) : (i-1)); 
 +            if (new_title > 0) 
 +                new_title += ((GetTeam() == ALLIANCE) ? 0 : (HKRANKMAX-1)); 
 +            break; 
 +        } 
 +    } 
 +    SetFlag64(PLAYER__FIELD_KNOWN_TITLES,uint64(1) << new_title); 
 +    if (old_title > 0 && old_title < (2*HKRANKMAX-1) && new_title > old_title) 
 +        SetUInt32Value(PLAYER_CHOSEN_TITLE,new_title); 
 +} 
 + 
      void Player::ModifyHonorPoints(int32 value) 
      { 
          if (value < 0) 
           
 --- a/src/server/game/Entities/Player/Player.h 
 +++ b/src/server/game/Entities/Player/Player.h 
 @@ -387,6 +387,27 @@ enum PlayerFlags 
          PLAYER_FLAGS_NO_XP_GAIN     = 0x02000000 
      }; 
           
 +#define PLAYER_TITLE_MASK_ALLIANCE_PVP             \ 
 +    (PLAYER_TITLE_PRIVATE | PLAYER_TITLE_CORPORAL |       
 +      PLAYER_TITLE_SERGEANT_A | PLAYER_TITLE_MASTER_SERGEANT |      
 +      PLAYER_TITLE_SERGEANT_MAJOR | PLAYER_TITLE_KNIGHT |      
 +      PLAYER_TITLE_KNIGHT_LIEUTENANT | PLAYER_TITLE_KNIGHT_CAPTAIN |      
 +      PLAYER_TITLE_KNIGHT_CHAMPION | PLAYER_TITLE_LIEUTENANT_COMMANDER |      
 +      PLAYER_TITLE_COMMANDER | PLAYER_TITLE_MARSHAL |      
 +      PLAYER_TITLE_FIELD_MARSHAL | PLAYER_TITLE_GRAND_MARSHAL) 
 + 
 +#define PLAYER_TITLE_MASK_HORDE_PVP                           \ 
 +    (PLAYER_TITLE_SCOUT | PLAYER_TITLE_GRUNT |       
 +      PLAYER_TITLE_SERGEANT_H | PLAYER_TITLE_SENIOR_SERGEANT |      
 +      PLAYER_TITLE_FIRST_SERGEANT | PLAYER_TITLE_STONE_GUARD |      
 +      PLAYER_TITLE_BLOOD_GUARD | PLAYER_TITLE_LEGIONNAIRE |      
 +      PLAYER_TITLE_CENTURION | PLAYER_TITLE_CHAMPION |      
 +      PLAYER_TITLE_LIEUTENANT_GENERAL | PLAYER_TITLE_GENERAL |      
 +      PLAYER_TITLE_WARLORD | PLAYER_TITLE_HIGH_WARLORD) 
 + 
 +#define PLAYER_TITLE_MASK_ALL_PVP  \ 
 +    (PLAYER_TITLE_MASK_ALLIANCE_PVP | PLAYER_TITLE_MASK_HORDE_PVP) 
 + 
      // used for PLAYER__FIELD_KNOWN_TITLES field (uint64), (1<<bit_index) without (-1) 
      // can't use enum for uint64 values 
      #define PLAYER_TITLE_DISABLED              UI64LIT(0x0000000000000000) 
 @@ -1975,6 +1996,7 @@ class Player : public Unit, public GridO 
                  if (value) 
                      AddKnownCurrency(ITEM_ARENA_POINTS_ID); // Arena Points 
              } 
 +        void UpdateKnownTitles(); 
           
              //End of PvP System      [/size]

Копируем всё это содержимое, сохраняем в файл с расширением .patch, например:

Код:

Код:
rank.patch

После того как мы сохранили наш патч на компьютере, нам необходимо перенести его в папку с нашими исходниками, а точнее:
Код:

Код:
D:\work\source

Так чтобы полный путь к патчу был такой:
Код:

Код:
D:\work\source\rank.patch

Так следует поступать с любым устанавливаемым патчем.

После того как мы перенесли наш патч, жмем ПКМ(Правая Кнопка Мыши) по папке с исходниками, а точнее:
Код:

Код:
D:\work\source

И выбираем Git Bash Here:
http://s1.ipicture.ru/uploads/20110104/qQ55SW5L.jpg
В появившемся окне, пишем:
Код:

Код:
patch -p1 < название.patch, в нашем случае:

http://s1.ipicture.ru/uploads/20110104/34J5ZWiV.jpg
Жмем Enter.
Если после завершения вы видите:
http://s1.ipicture.ru/uploads/20110104/5V7vuXik.jpg
Значит всё в порядке, можно продолжать.
Вы можете продолжить установку других патчей (если они у вас имеются), но у нас он один, так что мы продолжим. Закрываем Git.

3. Сборка компилятора.
Создаем новую папку в нашей рабочей директории, например:
Код:

Код:
D:\work\tc - в этой папке будет хранится готовый к компиляции проект.

После того как мы подготовили директорию, запускаем ранее нами установленный CMake.

Where is the source code - папка с исходниками, у нас это:
Код:

Код:
D:\work\source

Where to build the binaries - папка для готового проекта VS, у нас это:
Код:

Код:
D:\work\tc

Указываем эти данные в программе:
http://s1.ipicture.ru/uploads/20110104/TrgYS6Q3.jpg
После жмем Configure и выбираем, на какой платформе будем компилировать, в моем случае это Visual Studio 10, выбираем, после чего жмем Finish:
http://s1.ipicture.ru/uploads/20110104/3ZjwUg3Z.jpg
Ждем завершение процесса, после чего вы увидите:
http://s1.ipicture.ru/uploads/20110104/VZtA7SXe.jpg
Столбец - TOOLS, позволяет нам после компилирования получить экстракторы карт. Так что ставим галочку.
Больше ничего не меняем.
Снова жмем Configure и видим:
http://s1.ipicture.ru/uploads/20110104/oF1BTqS3.jpg
После жмем:
http://s1.ipicture.ru/uploads/20110104/B2R671n1.jpg
Если все прошло успешно - то мы увидим:
http://s1.ipicture.ru/uploads/20110104/sdPC2eTN.jpg
Можно закрывать CMake.

4. Компиляция ядра.
Наш проект теперь хранится в:
Код:

Код:
D:\work\tc

Запускаем файл с расширением .sln, в нашем случае это:
Код:

Код:
TrinityCore.sln

После открытия VS, запускаем Диспетчер конфигураций... и меняем Активную конфигурацию решения с Debug на Release, после жмем Закрыть:
http://s1.ipicture.ru/uploads/20110104/V37zzjfm.jpg
Если мы все сделали как надо, то можно смело жать F7 (Построить решение).
http://s1.ipicture.ru/uploads/20110104/PLJxWvMx.jpg
Если после компиляции мы видим результат без ошибок, значит, компиляция прошла успешно.
Все, наше ядро скомпилировано, но оно ещё не работоспособно.
5. Настройка ядра.
Наше скомпилированное ядро хранится в папке:
Код:

Код:
D:\work\tc\bin\Release

Для удобства переместим и переименуем папку с ядром.
Перенесем папку Release в корень нашей рабочей папки, то есть:
Код:

Код:
D:\work\Release

И переименуем в server:
Код:

Код:
D:\work\server

После этого, нашему ядру не хватает три файла:
Код:

Код:
libeay32.dll, ssleay32.dll и libmysql.dll

Найти libeay32.dll и ssleay32.dll мы может в папке с ранее установленным OpenSSL-Win32. Копируем libeay32.dll и ssleay32.dll с директории OpenSSL-Win32 в директорию с ядром:
Код:

Код:
D:\work\server

Файл libmysql.dll у нас в ядре имеется, но нам необходимо его заменить на тот, что использует наш MySQL сервер , взять его нужно отсюда:
Код:

Код:
C:\Program Files\MySQL\MySQL Server\bin

Копируем его и вставляем в директорию с ядром с заменой имеющегося.

После чего переименовываем файлы:
Код:

Код:
worldserver.conf.dist в worldserver.conf 
 authserver.conf.dist в аuthserver.conf

Теперь надо настроить подключение ядра к БД.
Для этого открываем уже переименованный authserver.conf и настраиваем строчку:
Код:

Код:
LoginDatabaseInfo = "127.0.0.1;3306;trinity;trinity;auth"

Распишу по порядку:

Код:

Код:
127.0.0.1 - адрес БД, выставлено по умолчанию. 
 3306 - порт БД, выставлено по умолчанию. 
 trinity - логин БД - менять на свой. 
 trinity - пароль БД - менять на свой. 
 auth - название БД, выставлено по умолчанию.

Нам необходимо поменять только логин и пароль на те, которые мы указали при установке MySQL сервера.
После этого, сохраняем и закрываем authserver.conf.
Открываем worldserver.conf, тут хранятся все настройки сервера, мы пока в них вникать не будем, сделаем только необходимое:
Код:

Код:
LoginDatabaseInfo     = "127.0.0.1;3306;trinity;trinity;auth" 
 WorldDatabaseInfo     = "127.0.0.1;3306;trinity;trinity;world" 
 CharacterDatabaseInfo = "127.0.0.1;3306;trinity;trinity;characters"

Настраиваем также как и в authserver.conf.
Закрываем worldserver.conf.
После нам необходимо указать путь к папке содержащей карты для сервера, как извлечь я объясню чуть позже, а пока создаем папку в корне нашей рабочей папки с названием data:
Код:

Код:
D:\work\data - тут будут храниться карты.

Теперь нам необходимо указать путь к папке data, для этого снова открываем worldserver.conf и строку:

Код:

Код:
DataDir = "."

меняем на:
Код:

Код:
DataDir = "D:\work\data\"

После, нам необходимо выключить проверку на vmaps, т.к. мы их извлекать не будем, так что меняем строки:
Код:

Код:
vmap.enableLOS    = 1 
 vmap.enableHeight = 1

на
Код:

Код:
vmap.enableLOS    = 0 
 vmap.enableHeight = 0

Сохраняем, закрываем.
Если вы помните, в программе CMake мы ставили галочку в столбце TOOLS, впоследствии чего мы получили экстракторы карт.
Карты необходимы для работы сервера.
Есть 3 вида карт:
Код:

Код:
dbc & maps - самые необходимые для работы сервера. 
 vmaps - дополнительные карты, позволяющие более точно смоделировать мир World of Warcraft, исключает стрельбу и агр через стены. 
 maps - это расчет траектории обхода препятствий мобов. То есть моб при агре не будет лететь к вам по воздуху, а будет искать путь по земле.

Сейчас мы будем извлекать только необходимые для работы сервера карты .maps и dbc. Без VMAPS и MAPS.
Для этого в папке с ядром:
Код:

Код:
D:\work\server

Имеется файл:
Код:

Код:
mapextractor.exe

Переносим его в папку с игровым клиентом и запускаем.
ВАЖНО "Версии ядра, экстрактора и игрового клиента должны быть ИДЕНТИЧНЫ"
http://s1.ipicture.ru/uploads/20110104/N7Ow9nrZ.jpg
После того как экстрактор закончит работу, он создаст 2 папки:
Код:

Код:
dbc и maps

Переноси эти 2 папки в папку data, которую мы создали ранее:
Код:

Код:
D:\work\data

http://s1.ipicture.ru/uploads/20110104/W52UOVWF.jpg
На этом начальная настройка ядра окончена.

6. Работа с базами.
Trinity Core имеет три базы:
auth - база аккаунтов.
characters - база персонажей.
world - база мира, игрового
Сейчас мы займемся созданием этих трех баз.

6.1. Создание баз.
Открываем скаченный нами ранее Navicat, жмем на Conntection, заполняем:
Код:

Код:
User name: логин MySQL сервера 
 Password: пароль MySQL сервера

http://s1.ipicture.ru/uploads/20110104/eqzz9TxB.jpg
После в левой части у нас появится подключение, открываем его и видим:
http://s1.ipicture.ru/uploads/20110104/Ru129uoT.jpg
Щелкаем ПКМ(Правая Кнопка Мыши) на нашем подключении и выбираем:
Код:

Код:
New database...

Далее заполняем название базы и кодировки как на скрине:
http://s1.ipicture.ru/uploads/20110104/5nLjZIM7.jpg
Жмем ОК, теперь мы создали одну из трех баз. Также поступаем с остальными двумя. Меняется только название
После того как мы создали все три базы, мы видим:

http://s1.ipicture.ru/uploads/20110104/mzAMN4i9.jpg
Все, базы созданы. Можно пока закрыть Navicat. Наши базы ещё пусты, нам необходимо их заполнить
6.2. Заполнение баз.
Заполнение баз auth и characters не вызовет у вас лишних вопросов, а вот с world можно подумать.
Но все по порядку.
Сами .sql файлы с базами лежат тут:
Код:

Код:
D:\work\source\sql\base

У нас имеются все три базы, но заливать будем только две, auth и characters, т.к. world будем качать.

Заполнение базы auth.
Заливать будем через консоль.

Код:

Код:
1. Открываем консоль - Пуск > Все программы > MySQL > MySQL Server > MySQL Command Line Client. 
 2. Вводим пароль MySQL сервера. 
 3. Подключаемся к БД, набираем: 
 \u название базы, в нашем случае: 
 \u auth 
 4. Выполняем "заливку" базы: 
 \. D:\work\source\sql\base\auth_database.sql

http://s2.ipicture.ru/uploads/20110104/SuUzZ520.jpg
И жмем Enter.

По завершению процесса, меняем базу с auth на characters и выполняем:
Код:

Код:
\. D:\work\source\sql\base\characters_database.sql

http://s2.ipicture.ru/uploads/20110104/P4aVziGQ.jpg
После этого закрываем консоль, т.к. стандартную базу world_database.sql мы заливать не будем, мы будем использовать базу YTDB.
Официальный сайт - http://ytdb.ru/showthread.php?t=5227

Качать необходимо последнюю FULL базу с последующими обновлениями.
То есть, пройдя по ссылке http://ytdb.ru/showthread.php?t=5227, последняя FULL база:
Код:

Код:
YTDB_0.14.0_R570_TC_R10316_TDBAI_335.0.1_RuDB_38.4

Качаем ее и последующие патчи, извлекаем все содержимое архивов и кидаем в нашу рабочую папку:
Код:

Код:
D:\work

http://s1.ipicture.ru/uploads/20110104/ktecopD4.jpg
После чего снова запускаем консоль MySQL, вводим пароль, указываем базу world и выполняем файлы в такой последовательности:
Код:

Код:
YTDB_0.14.0_R570_TC_R10316_TDBAI_335.0.1_RuDB_R38.4 
 571_corepatch_world_10316_10340 
 571_updatepack_world_10340 
 572_corepatch_world_1034     0_10394 
 572_updatepack_world_10394

По завершению процесса, можно закрыть консоль.
6.3. Настройки баз.
К настройке баз, в частности относится изменение имени Игрового мира и смены адреса сервера (Realmlist).
Для того чтобы изменить имя и Realmlist сервера, открываем Navicat, открываем созданное нами ранее подключение, открываем базу auth, таблицу realmlist и меняем на наше усмотрение:
http://s1.ipicture.ru/uploads/20110104/uul0hVTM.jpg
Подтверждаем наше действие кнопкой внизу окна
http://s1.ipicture.ru/uploads/20110104/vTL5WTNW.jpg
Можно закрывать Navicat. Работа с базами окон.

0

2

Надеюсь на хорошие отзывы...

0

3

у тебя большёе будущие

0





Вы здесь » WoW Planet -информационный портал игры World Of WarCraft » Установка / Настройка TrinityCore » Компиляция ядра,создание сборки Trinity 3.3.5|Win32