• Внимание!!! Правила раздела.

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

Компиляция TrinityCore на Windows 10 х64

WinWoolF

Верховный Вождь
Команда форума
Администратор
Регистрация
13 Окт 2013
Сообщения
4.748
Оценка реакций
507
Баллы
159
Возраст
36
Местоположение
99 RUS
Сайт
www.1n-game.ru
Гайд по компиляции сервера TrinityCore на Windows 10 х64

windows10.jpg


Это подробный гайд по компиляции (сборке) серверов World of Warcraft на базе ядра TrinityCore. Следуя подсказкам гайда вы сможете скомпилировать сервер любой из доступных версий с сайта разработчика GitHub - TrinityCore/TrinityCore: TrinityCore Open Source MMO Framework (master = 7.3.5.25996, 3.3.5 = 3.3.5a.12340). В гайде будет подробно рассказано о том какой софт необходим и сам процесс сборки сервера из исходников.
Так же сразу стоит отметить, что этот гайд создавался с целью показать как собрать сервер у себя на ПК для людей которые до этого ни когда этим не занимались и не имеют каких либо познаний в этой области. По этому в нем будут опущены все технические моменты тех или иных настроек программ и компонентов локального сервера, которые будут только путать новичков. Для тех кому интересно разобраться допустим с принципами работы MySQL есть специализированные сайты, где это все подробно можно изучить.
Гайд составлен именно под windows 10 64 битной разрядности а не более ранние версии windows. Это обоснованно тем, что разработчики TrinityCore всегда оптимизируют свои продукты под последние стабильные версии софта, это приводит к различным отличиям от компиляции на более ранних версиях windows. И если опытному человеку не составит труда скомпилировать и на XP, то у новичка возникнет много сложностей и вопросов. Так же весь набор программ, на которые тут будут приведены ссылки, будут корректно работать только с windows 10 х64.


Нужный софт:
Для компиляции сервера и дальнейшей работы с ним потребуются определенные программы и пакеты библиотек. Ниже будет приведен список софта с пояснениями для каждой программы. Вы сможете скачать их по ссылкам (рекомендуется), либо найти в сети самостоятельно. Так же советую сначала установить все необходимые программы из списка, и только потом переходить к следующим шагам из гайда.

boost_1_64_0-msvc-14.1-64 - Набор библиотек C ++ необходимых для работ программ для компиляции - скачать.
Win64OpenSSL-1_0_2m - Так же набор динамических библиотек необходимых для работы сервера TrinityCore - скачать.
Git 2.15.1.2 - софт для получения исходников, так же у него существует очень полезная функция сохранности файлов. Если один из файлов был удален или изменен, то Git об этом сразу же начнет сигнализировать изменив значок на папке с зеленого на красный - скачать.
mysql-5.5.23 - Софт необходимый для работы баз данных сервера - скачать.
cmake-3.10.0 - Программа для генерации файлов из исходного кода разработчиков - скачать.
Microsoft: Visual Studio - Программа для компиляции сгенерированных файлов - скачать.
NavicatPremium12.0.16 - Программа для работы с базами данных сервера, имеющая отличный функционал - скачать.


Установка и настройка программ:
Рекомендую установку программ производить по дефолтному пути установки указанному в установщике, в дальнейшем это поможет избежать лишних сложностей.
Так же желательно соблюсти порядок установки программ соответствующий этому списку.

Boost:
Установка этой программы не вызовет ни каких сложностей и вопросов. Просто следуйте по шагам установки не изменяя стандартных настроек. После того как установили программу нужно настроить windows для корректной работы. Для этого переходим в панель "Система" и во вкладку "Дополнительные параметры системы"
Untitled-1.jpg

В открывшемся окне переходим во вкладку "Переменные среды".
Untitled-2.jpg

Далее в окне "Системные переменные" кликаем по кнопке "создать"
Untitled-3.jpg

И в открывшемся окне указываем необходимые данные.
В поле "Имя переменной" пишем BOOST_ROOT
в поле "Значение переменной" пишем путь к к папке в которую устанавливали boost. Если установку проводили как и рекомендовалось с дефолтными настройками то путь будет C:/local/boost_1_64_0.

Untitled-4.jpg

После нажимаем "ОК" и сохраняем все изменения.


OpenSSL:
Установка этих библиотек так же не вызовет ни каких вопросов или сложностей. Просто следуйте пунктам установки сохроняя дефолтные настройки инсталятора. Каких либо дополнительных настроек эти библиотеки не требуют.


Git:
Во время установки Git так же оставляем все установочные пути без изменений. Большая часть установки не потребует внесения каких либо изменений. Но есть и пункты в которых будет необходимо указать правильный пункт.

В окне выбора устанавливаемых компонентов проследите чтоб у вас были указанны все галочки как на скриншоте ниже
Git (1).jpg

В окне выбора того, как будет использоваться Git так же нужно установить галочку как на скриншоте.
Git (2).jpg

И последний пункт в котором необходимо правильно указать выбор при установке. Указываем использование библиотек OpenSSL.
Git (3).jpg

Далее следуйте пунктам установки до окончания процесса. Дополнительных настроек Git не требует.


MySQL:
Это весьма важный компонент сервера и от правильности его установки в дальнейшем будет зависеть очень многое. По этому в точности соблюдайте пункты установки, которые будут показаны ниже.

В окне выбора типа установки выбираем пункт "Typical"
мускул (1).jpg

Дойдя до этого пункта обязательно ставим в самом низу галочку как на скриншоте. Если этого не сделать, то все дальнейшие настройки MySQL окажутся недоступными.
мускул (2).jpg

В этом окне выбираем пункт с детальной конфигурацией как показано на скриншоте.
мускул (3).jpg

В этом окне выбираем в каком качестве будет использоваться MySQL. На наиболее полезным будет параметр для разработчиков. Устанавливаем галочку как показано на скриншоте.
мускул (4).jpg

В этом окне выбираем тип работы баз данных. Нам требуется мультифункциональный тип. Устанавливаем галочку как на скриншоте.
мускул (5).jpg

В этом окне мы указываем адрес порта на котором будет работать MySQL. Рекомендую оставить адрес порта без изменений 3306. Если же по каким либо причинам вы измените этот порт, то в дальнейшем будет необходимо изменить его и в настройках нашей сборки.
мускул (6).jpg

В окне выбора языковой кодировки указываем пункт с UTF 8, как показано на скриншоте ниже. Выбор других пунктов может вызвать в дальнейшем некорректное отображение букв.
мускул (7).jpg

В этом окне указываем пароль для root доступа к серверу MySQL. Укажите все настройки как на скрине ниже. Естественно пароль необходимо запомнить или записать. Логин по умолчанию root.
мускул (8).jpg

Это финальная часть установки. Если вы сделали все правильно то в конце установки при проверке параметров у вас должно получится так же как и на скриншоте.
мускул (9).jpg


Сmake:
При установке cmake нам нужно будет выбрать только один нужный параметр. Все остальные шаги проходят с настройками по умолчанию

Дойдя до этого окна установки выберите параметр как указан на скриншоте ниже.
.cmake.jpg

Все дальнейшие шаги установки выполняем без изменений.


Microsoft: Visual Studio:
Это так же важный сфот при установке которого потребуется проследить за правильностью устанавливаемых компонентов программы. Запускаем установку и в открывшемся окне во вкладке "Рабочие нагрузки" в левой части окна отмечаем пункт с разработкой приложений на С++, а в правой части окна устанавливаем в списке все галочки как показаны на скриншоте.вс.jpg

После этого переходим во вкладку "Отдельные компоненты". Все галочки которые уже установлены мы не трогаем. Дойдя до раздела в списке "Пакеты SDK, библиотеки и платформы" отмечаем галочками все пункты которые указанны ниже.
  • Инструменты для Entity Framework 6
  • Пакет SDK для графических инструментов Windows 8.1
  • Пакет SDK для TypeScript 2.3
  • Пакет SDK для Windows 10 (10.0.15063.0) для UWP: C#, VB, JS
  • Пакет SDK для Windows 10 (10.0.15063.0) для UWP: C++
  • Поддержка Visual C++ ATL
  • Windows 10 SDK (10.0.10586.0)
  • Windows 10 SDK (10.0.15063.0) для Desktop C++ (x86 и x64)
  • Windows 10 SDK (10.0.16299.0) для Desktop C++ (x86 и x64)
  • Windows 10 SDK (10.0.16299.0) для UWP: C#, VB, JS
  • Windows 10 SDK (10.0.16299.0) для UWP: C++
Далее не изменяя пути установки кликаем по кнопке установить и дожидаемся окончания установки. Это достаточно долгий процесс, поскольку установщик будет качать из сети все необходимые ему файлы. После окончания установки нужно перезагрузить ПК как того и просит установщик.


NavicatPremium:
Здесь нет ни чего сложного, по этому просто следуем шагам установки до окончания. После чего читаем текстовый вайл идущий в комплекте и делаем все как там написано.



Компиляция и настройка сервера:

Теперь когда весь необходимый софт установлен и настроен перейдем непосредственно к компиляции эмулятора сервера WoW.

Получение исходников (сырцов) ядра TrinityCore:
Создаем на диске С: папку Trinity и сразу же в ней создаем папку Build. Вы можете создавать папку в любом удобном вам месте и с любым названием, так же и вторую папку вы можете назвать как хотите. Главное чтоб в названиях не было пропусков и оно состояло только из английского алфавита.
Далее кликаем правой кнопкой мыши по папке Trinity и в появившемся меню выбираем пункт Git Clone

git clone.jpg

В открывшемся окне в строке url указываем адрес github откуда будет идти загрузка.
Поле directory обычно заполнять не требуется, оно автоматически заполняется и создает подпапку TrinityCore в которую и будут загружены исходники. Если вам нужно вы можете в ручную создать папку для загрузки и указать к ней путь.
Отмечаем галочкой поле Branch и в зависимости от того какой сервер мы компилируем указываем в нем данные.
  • Для сервера WOTLK пишем - 3.3.5.
  • Для Legion пишем - master. Заполнение этого поля указывает программе исходники какого сервера необходимо скачать.
После того как все необходимые поля заполнены жмем Ок.

git.jpg

Я для примера использовал исходники WOTLK. Далее программа откроет окно загрузки, нам остается только дождаться окончания зарузки.

gitdownload.jpg


Накатывание патчей:
Большинство патчей устанавливаются непосредственно в само ядро сервера. И их необходимо устанавливать до компиляции. По этому переходим к накатыванию патчей, если вам не нужно устанавливать патчи, то просто переходим к следующему разделу. Если же вы все таки решили накатить патчи, то советую перед этим сделать копию папки с загруженными исходниками, поскольку если патч окажется кривой или что то пойдет не так, вам придется по новой выкачивать исходники.
Для примера рассмотрим накатывание патча позволяющего получать различные звания за количество убийств пвп. Вот сам код патча:
Код:
# 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_EXTRA_HONOR,
     RATE_MOVESPEED,
     MAX_RATES
};
+
+enum HonorKillPvPRank
+{
+    HKRANK00,
+    HKRANK01,
+    HKRANK02,
+    HKRANK03,
+    HKRANK04,
+    HKRANK05,
+    HKRANK06,
+    HKRANK07,
+    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
Копируем содержимое и вставляем в текстовой документ, который нужно сохранить с расширением .patch, например honorrank.patch. Далее копируем этот патч в папку с загруженными исходниками, у меня это С:\Trinity\TrinityCore, если вы изменяли путь и название, то скопируйте в нужную вам папку.
Далее кликаем по папке с исходниками правой кнопкой мышки и выбираем в появившемся меню пункт Git Bash Here

patchgit.jpg

В появившейся консоли нам нужно указать путь до устанавливаемого патча, у меня это выглядит так
patch -p1 < honorrank.patch
Если у вас название патча написано иначе, то вместо honorrank укажите свое название.

gitbashpatch.jpg

После того как прописали путь до патча, жмем Enter.
Если после завершения установки патча в консоли мы видим примерно следующий текст

okpatch.jpg

Значит патч установился правильно и не вызвал ни каких ошибок. Если же в тексте будут сообщения об ошибках, то это значит что ваш патч не под ту версию ядра или криво написанный. С таким патчем сервер не будет работать. И вам стоит отказаться от установки этого патча и продолжить дальнейшую работу с сохраненной копией исходников. Вы же сделали копию как я и говорил?!.
В нашем случае все прошло успешно, и мы можем перейти к установки следующего патча. Все патчи в ядро ставятся именно таким способом, по этому мы закончим с показательной установкой патчей и перейдем к следующему пункту.


Компиляция ядра сервера:

Запускаем программу Смаке и в открывшемся окне заполняем необходимые поля:
В первом поле указываем путь до папки с исходниками - С:\Trinity\TrinityCore.
Во втором поле до созданной нами папки Build - С:\Trinity\Build

смаке777.jpg

и жмем Configure. И в открывшемся окне выбираем из списка Visual Studio 15 2017 Win64

смакевыбор.jpg

Далее жмем Finish и ожидаем окончания построения конфигурации. После того как программа закончит построение вы увидите новое окно, в котором необходимо отметить галочкой пункт Tools, если по умолчанию он не отмечен.

смакетулс.jpg

После этого еще раз нажимаем Configure и потом Generate. Ожидаем завершения процесса. По окончанию процесса вы можете прям в Смаке кликнуть по кнопке Open Project и тогда скомпилированный проект сборки сам откроется в Visual Studio. Либо перейти в папку С:\Trinity\Build и вручную открыть от туда файл с расширением .sln. В нашем случае этот файл будет называться TrinityCore.sln.

Далее ждем когда в Visual Studio полностью прогрузится наша сборка. Далее в конфигураторе решения изменяем значение на Release.

vs1.jpg

Переходим во вкладку "Сборка", где сначала выбираем пункт "Очистить решение", и дождавшись окончания процесса выбираем пункт "Собрать решение". Далее остается только дождаться завершения сборки, насколько быстро это произойдет зависит только от вашего ПК.
Когда решение будет собрано вы увидите примерно следующий текст
Код:
========== Сборка: успешно: 19, с ошибками: 0, без изменений: 0, пропущено: 2 ==========
Если вы видите примерно такую же надпись, значит у вас все прошло успешно. Если же в поле с ошибками будет указанно значение кроме 0, значит вы что то сделали не верно, и стоит попробовать сделать все заново. Возможно даже по новой скачать исходники, поскольку бывает что Git качает с пропусками или ошибками.


Подготовка к запуску:

После построения сборки наш сервер практически готов к запуску. Его можно найти по следующему пути C:\Trinity\Build\bin\Release.

Если все прошло успешно, то в сборке WOTLK у вас должны присутствовать следующие файлы:
  1. authserver.exe
  2. authserver.pdb
  3. authserver.conf.dist
  4. worldserver.exe
  5. worldserver.pdb
  6. worldserver.conf.dist
  7. libmysql.dll
  8. libeay32.dll
  9. ssleay32.dll
А в сборке Legion у вас должны присутствовать следующие файлы:
  1. bnetserver.exe
  2. bnetserver.pdb
  3. bnetserver.conf.dist
  4. bnetserver.cert.perm
  5. bnetserver.key.perm
  6. worldserver.exe
  7. worldserver.pdb
  8. worldserver.conf.dist
  9. libmysql.dll
  10. libeay32.dll
  11. ssleay32.dll
Сразу переименуем файлы конфигов, а точнее уберем из расширения .dist. И после этого отредактируем в конфигах соединение с базами MySQL под свои настройки, которые вы указывали в процессе установки.

Далее нам потребуется в папку с готовым сервером скопировать файлы библиотек.
libmySQL.dll --> C:\Program Files\MySQL\MySQL Server 5.x\lib\
libeay32.dll, ssleay32.dll --> C:\OpenSSL-Win64\

Теперь переходим в папку TrinityCore\contrib и копируем из нее файл extractor.bat в папку с клиентом и запускаем его.
, а так же из папки с готовым проектом перенести файлы:
  • mapextractor.exe
  • mmaps_generator.exe
  • vmap4assembler.exe
  • vmap4extractor.exe
Иначе extractor.bat не сработает.
учекфктор.jpg
В открывшейся консоли видим 5 вариантов действий. По очереди запускаем пункты от 1 до 3. Это извлечет из клиента файлы карт и создаст папки с ними dbc, maps, mmaps и vmaps. Папка vmaps не является необходимой, но все же желательно извлечь и эти карты.
Можно сразу выбрать 4 пункт действий, тогда программа сама выполнит все необходимые пункты. Это весьма длительный процесс, который может занять несколько часов времени. По окончании работы программы нажимаем цифру 5 и закрываем программу.
Теперь в папке C:\Trinity\Build\bin\Release создаем папку Data и из папки с клиентом копируем в нее папки с картами.
Далее открываем файл worldserver.conf находим в нем строку
DataDir = "."
и редактируем значение в ковычках на название нашей папки с картами Data. Это укажет серверу на папку в которой у нас расположены файлы с картами. В результате у вас должно получится
DataDir = "Data"

На этом подготовка сервера к запуску завершена и нам остается только заполнить базы данных.


Работа с БД.

Базы создаются запросом в MySQL

Для серверов 3.3.5
SQL:
CREATE DATABASE `world` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE DATABASE `characters` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE DATABASE `auth` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Далее запускаем файл worldserver.exe и при запросе сервера на создание баз данных нажимаем Enter и ждем пока базы заполнятся автоматически.

Для серверов 7.х.х
SQL:
CREATE DATABASE `world` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE DATABASE `characters` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE DATABASE `auth` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE DATABASE `hotfixes` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Для серверов версии 7.х.х так же необходимо скопировать файлы « TDB_world_» и «TDB_hotfixes_» из \TrinityCore\sql\base\dev в папку C:\Trinity\Build\bin\Release и запускаем файл worldserver.exe, при запросе сервера на создание баз данных нажимаем Enter и ждем пока базы заполнятся автоматически.

После того как сервер заполнит все базы и полностью загрузится он уже полностью готов к работе. Остается только запустить сервер авторизации authserver.exe и можно переходить к созданию учетной записи и игре.
















Гайд составлен специально для сайта
Игровой портал 1n-GAME
Любое использование материала
разрешено только при наличии

активной ссылки на источник!
 
Последнее редактирование:

Drogon

Залетный
Не проверенный
Регистрация
1 Июн 2018
Сообщения
3
Оценка реакций
3
Баллы
2
Возраст
29
Местоположение
Samara
Привет всем!
Когда ждать продолжения темы? :)
 

Drogon

Залетный
Не проверенный
Регистрация
1 Июн 2018
Сообщения
3
Оценка реакций
3
Баллы
2
Возраст
29
Местоположение
Samara
@WinWoolF, во первых огромное спасибо за потраченное время, гайд очень сильно помог не заморачиваться на самостоятельные и скорее всего безуспешные попытки что-то сделать :)

При возможности добавь несколько строк:
Теперь переходим в папку TrinityCore\contrib и копируем из нее файл extractor.bat в папку с клиентом и запускаем его.
, а так же из папки с готовым проектом перенести файлы:
  • mapextractor.exe
  • mmaps_generator.exe
  • vmap4assembler.exe
  • vmap4extractor.exe
Иначе extractor.bat не сработает.
 

WinWoolF

Верховный Вождь
Команда форума
Администратор
Регистрация
13 Окт 2013
Сообщения
4.748
Оценка реакций
507
Баллы
159
Возраст
36
Местоположение
99 RUS
Сайт
www.1n-game.ru
Да, упустил момент. Гайд дополнил.
 

Drogon

Залетный
Не проверенный
Регистрация
1 Июн 2018
Сообщения
3
Оценка реакций
3
Баллы
2
Возраст
29
Местоположение
Samara
Ну что же... Сделаем небольшую оценку гайду:
- Все очень подробно и доходчиво написано, что довольно редко встречается в рунете и сразу видно, что @WinWoolF качественно подошел к его написанию.
- Следуя инструкциям получилось сделать сборку своими руками из-за размеров файлов и их количества занявшее у меня почти два дня ( с учетом перерывов на работу и сон) :rolleyes:
- Ну и на последок, потратив вышеуказанное время нужного результата я не добился (но в среднем и в целом это совершенно не вина гайда и его автора), а скорее всего моя криворукость и недальновидность :) Когда весь замечательный процесс формирования файлов был наконец то завершен, из двух файлов стартует только реалм, сам сервер прочитывает db2 и автоматически закрывается. Решения (так же как и проблемы) пока не нашел и в логах нет ни какой информации о креше.

Буду искать дальше.
 

WinWoolF

Верховный Вождь
Команда форума
Администратор
Регистрация
13 Окт 2013
Сообщения
4.748
Оценка реакций
507
Баллы
159
Возраст
36
Местоположение
99 RUS
Сайт
www.1n-game.ru
@Drogon, ну я так понимаю разговор идет о 7.3.5, по этому совершенно не удивительно что такое произошло. могу лишь посоветовать воспользоваться исходниками Ashaman и его же базой. Но боюсь что и там будет не все так просто.
А для закрепления навыков в компиляции можно потренироваться со сборкой 3.3.5, там должно проити все гладко.
 

iskezil

Залетный
Новичок
Регистрация
17 Май 2018
Сообщения
16
Оценка реакций
7
Баллы
3
Возраст
24
Местоположение
Москва

dren

Залетный
Новичок
Регистрация
5 Июн 2017
Сообщения
46
Оценка реакций
0
Баллы
3
Возраст
19
спасибо
 

GogiSan

Залетный
Не проверенный
Регистрация
1 Июл 2018
Сообщения
1
Оценка реакций
0
Баллы
1
Возраст
35
Местоположение
Bratskoe
Всем доброго дня. Застопорился на этапе запуска worldserver.exe:
Using configuration file d:/Trinity/Build/bin/Release/worldserver.conf.
Using SSL version: OpenSSL 1.0.2m 2 Nov 2017 (library: OpenSSL 1.0.2n 7 Dec 2017)
Using Boost version: 1.64.0
Updating Auth database...
>> Auth database is up-to-date! Containing 9 new and 115 archived updates.
Updating Character database...
>> Character database is up-to-date! Containing 3 new and 77 archived updates.
Updating World database...
>> World database is up-to-date! Containing 204 new and 2262 archived updates.
Updating Hotfixes database...
>> Hotfixes database is up-to-date! Containing 18 new and 130 archived updates.
Realm running as realm ID 1
Using World DB: TDB 735.00
Using enUS DBC Locale
Will clear `logs` table of entries older than 1209600 seconds every 10 minutes.
Using DataDir data/
WORLD: MMap data directory is: data/mmaps
VMap support included. LineOfSight: 1, getHeight: 1, indoorCheck: 1
VMap data directory is: data/vmaps
Missing name Guild.SaveInterval in config file d:/Trinity/Build/bin/Release/worldserver.conf, add "Guild.SaveInterval = 15" to this file
Initialize PlayerDump...
>> Initialized 370 PlayerDump ColumnDefinitions in 114 ms.
Loading Trinity strings...
>> Loaded 965 trinity strings in 2 ms
Initialize data stores...

Some required *.db2 files (231 from 1) not found or not compatible:
Achievement.db2
AnimKit.db2
AreaGroupMember.db2
AreaTable.db2
AreaTrigger.db2
ArmorLocation.db2
Artifact.db2
ArtifactAppearance.db2
ArtifactAppearanceSet.db2
ArtifactCategory.db2
ArtifactPower.db2
ArtifactPowerLink.db2
ArtifactPowerPicker.db2
ArtifactPowerRank.db2
AuctionHouse.db2
BankBagSlotPrices.db2
BannedAddons.db2
BarberShopStyle.db2
BattlePetBreedQuality.db2
BattlePetBreedState.db2
BattlePetSpecies.db2
BattlePetSpeciesState.db2
BattlemasterList.db2
BroadcastText.db2
Cfg_Regions.db2
CharacterFacialHairStyles.db2
CharBaseSection.db2
CharSections.db2
CharStartOutfit.db2
CharTitles.db2
ChatChannels.db2
ChrClasses.db2
ChrClassesXPowerTypes.db2
ChrRaces.db2
ChrSpecialization.db2
CinematicCamera.db2
CinematicSequences.db2
ConversationLine.db2
CreatureDisplayInfo.db2
CreatureDisplayInfoExtra.db2
CreatureFamily.db2
CreatureModelData.db2
CreatureType.db2
Criteria.db2
CriteriaTree.db2
CurrencyTypes.db2
Curve.db2
CurvePoint.db2
DestructibleModelData.db2
Difficulty.db2
DungeonEncounter.db2
DurabilityCosts.db2
DurabilityQuality.db2
Emotes.db2
EmotesText.db2
EmotesTextSound.db2
Faction.db2
FactionTemplate.db2
GameObjects.db2
GameObjectDisplayInfo.db2
GarrAbility.db2
GarrBuilding.db2
GarrBuildingPlotInst.db2
GarrClassSpec.db2
GarrFollower.db2
GarrFollowerXAbility.db2
GarrPlotBuilding.db2
GarrPlot.db2
GarrPlotInstance.db2
GarrSiteLevel.db2
GarrSiteLevelPlotInst.db2
GemProperties.db2
GlyphBindableSpell.db2
GlyphProperties.db2
GlyphRequiredSpec.db2
GuildColorBackground.db2
GuildColorBorder.db2
GuildColorEmblem.db2
GuildPerkSpells.db2
Heirloom.db2
Holidays.db2
ImportPriceArmor.db2
ImportPriceQuality.db2
ImportPriceShield.db2
ImportPriceWeapon.db2
ItemAppearance.db2
ItemArmorQuality.db2
ItemArmorShield.db2
ItemArmorTotal.db2
ItemBagFamily.db2
ItemBonus.db2
ItemBonusListLevelDelta.db2
ItemBonusTreeNode.db2
ItemChildEquipment.db2
ItemClass.db2
ItemCurrencyCost.db2
ItemDamageAmmo.db2
ItemDamageOneHand.db2
ItemDamageOneHandCaster.db2
ItemDamageTwoHand.db2
ItemDamageTwoHandCaster.db2
ItemDisenchantLoot.db2
ItemEffect.db2
Item.db2
ItemExtendedCost.db2
ItemLevelSelector.db2
ItemLevelSelectorQuality.db2
ItemLevelSelectorQualitySet.db2
ItemLimitCategory.db2
ItemLimitCategoryCondition.db2
ItemModifiedAppearance.db2
ItemPriceBase.db2
ItemRandomProperties.db2
ItemRandomSuffix.db2
ItemSearchName.db2
ItemSet.db2
ItemSetSpell.db2
ItemSparse.db2
ItemSpec.db2
ItemSpecOverride.db2
ItemUpgrade.db2
ItemXBonusTree.db2
Keychain.db2
LFGDungeons.db2
Light.db2
LiquidType.db2
Lock.db2
MailTemplate.db2
Map.db2
MapDifficulty.db2
ModifierTree.db2
MountCapability.db2
Mount.db2
MountTypeXCapability.db2
MountXDisplay.db2
Movie.db2
NameGen.db2
NamesProfanity.db2
NamesReserved.db2
NamesReservedLocale.db2
OverrideSpellData.db2
Phase.db2
PhaseXPhaseGroup.db2
PlayerCondition.db2
PowerDisplay.db2
PowerType.db2
PrestigeLevelInfo.db2
PVPDifficulty.db2
PVPItem.db2
PvpReward.db2
PvpTalent.db2
PvpTalentUnlock.db2
QuestFactionReward.db2
QuestMoneyReward.db2
QuestPackageItem.db2
QuestSort.db2
QuestV2.db2
QuestXP.db2
RandPropPoints.db2
RewardPack.db2
RewardPackXCurrencyType.db2
RewardPackXItem.db2
RulesetItemUpgrade.db2
SandboxScaling.db2
ScalingStatDistribution.db2
Scenario.db2
ScenarioStep.db2
SceneScript.db2
SceneScriptGlobalText.db2
SceneScriptPackage.db2
SceneScriptText.db2
SkillLine.db2
SkillLineAbility.db2
SkillRaceClassInfo.db2
SoundKit.db2
SpecializationSpells.db2
Spell.db2
SpellAuraOptions.db2
SpellAuraRestrictions.db2
SpellCastTimes.db2
SpellCastingRequirements.db2
SpellCategories.db2
SpellCategory.db2
SpellClassOptions.db2
SpellCooldowns.db2
SpellDuration.db2
SpellEffect.db2
SpellEquippedItems.db2
SpellFocusObject.db2
SpellInterrupts.db2
SpellItemEnchantment.db2
SpellItemEnchantmentCondition.db2
SpellLearnSpell.db2
SpellLevels.db2
SpellMisc.db2
SpellPower.db2
SpellPowerDifficulty.db2
SpellProcsPerMinute.db2
SpellProcsPerMinuteMod.db2
SpellRadius.db2
SpellRange.db2
SpellReagents.db2
SpellScaling.db2
SpellShapeshift.db2
SpellShapeshiftForm.db2
SpellTargetRestrictions.db2
SpellTotems.db2
SpellXSpellVisual.db2
SummonProperties.db2
TactKey.db2
Talent.db2
TaxiNodes.db2
TaxiPath.db2
TaxiPathNode.db2
TotemCategory.db2
Toy.db2
TransmogHoliday.db2
TransmogSet.db2
TransmogSetGroup.db2
TransmogSetItem.db2
TransportAnimation.db2
TransportRotation.db2
UnitPowerBar.db2
Vehicle.db2
VehicleSeat.db2
WMOAreaTable.db2
WorldEffect.db2
WorldMapArea.db2
WorldMapOverlay.db2
WorldMapTransforms.db2
WorldSafeLocs.db2
Повторно запускал extractor.bat, ошибка не уходит. Где я мог накосячить?
 

WinWoolF

Верховный Вождь
Команда форума
Администратор
Регистрация
13 Окт 2013
Сообщения
4.748
Оценка реакций
507
Баллы
159
Возраст
36
Местоположение
99 RUS
Сайт
www.1n-game.ru
Some required *.db2 files (231 from 1) not found or not compatible:
и ниже по списку. Всех перечисленных файлов сервер не увидел. Либо извлекались файлы не из не 100% скаченного клиента, либо ошибка экстрактора, либо не верно перемещены файлы в каталог сервера, либо не верно указанны настройки в конфигах.
 

Sisil

Залетный
Новичок
Регистрация
28 Июн 2018
Сообщения
7
Оценка реакций
0
Баллы
2
Возраст
23
Местоположение
Россия, г.Иркутск
По-моему, я тупо проклята. Либо у меня мозгов меньше грецкого ореха.
Устанавливала все программы как вы и прописали, @WinWoolF, однако же начались проблемы буквально вначале получения исходников. Как видно на скрине, таких пунктов у меня тупо нет(Windows 8.1, установлено точно по инструкции):



Получение исходников (сырцов) ядра TrinityCore:
Создаем на диске С: папку Trinity и сразу же в ней создаем папку Build. Вы можете создавать папку в любом удобном вам месте и с любым названием, так же и вторую папку вы можете назвать как хотите. Главное чтоб в названиях не было пропусков и оно состояло только из английского алфавита.
Далее кликаем правой кнопкой мыши по папке Trinity и в появившемся меню выбираем пункт Git Clone

 

WinWoolF

Верховный Вождь
Команда форума
Администратор
Регистрация
13 Окт 2013
Сообщения
4.748
Оценка реакций
507
Баллы
159
Возраст
36
Местоположение
99 RUS
Сайт
www.1n-game.ru
@Sisil, гайд составлен под 10тую винду, возможна некоя несовместимость софта. Я бы посоветовал в таком случае использовать вот этот софт для скачки исходников Git Extensions. Это практически равноценные софтины, правда та, на которую ссылался я, более просто и предназначена для новичков в этом деле. Gitextensions на которую я сейчас оставил ссылку, напичкана большим набором функций для профи, но для цели выкачивания исходников она так же подходит. Там нужно будет выбрать пункт в меню GitExt Clone
 

Sisil

Залетный
Новичок
Регистрация
28 Июн 2018
Сообщения
7
Оценка реакций
0
Баллы
2
Возраст
23
Местоположение
Россия, г.Иркутск
@Sisil, гайд составлен под 10тую винду, возможна некоя несовместимость софта. Я бы посоветовал в таком случае использовать вот этот софт для скачки исходников Git Extensions. Это практически равноценные софтины, правда та, на которую ссылался я, более просто и предназначена для новичков в этом деле. Gitextensions на которую я сейчас оставил ссылку, напичкана большим набором функций для профи, но для цели выкачивания исходников она так же подходит. Там нужно будет выбрать пункт в меню GitExt Clone
Сделала так как вы сказали. В поле действительно появилось GitExt Clone. Но окно, открывшееся мне, координально отличается от того что есть в гайде. Я в замешательстве.

Сообщения были автоматически объединены:

Прошу прощения... Но я жду помощи. Пыталась делать всё сама - не выходит. Устанавливала другие, более ранние версии Git - тоже нет результата(как и нужного пункта). К сожалению, я не программист, и поэтому не понимаю что мне делать в этом случае.
 
Последнее редактирование:

Borisov99

Залетный
Не проверенный
Регистрация
11 Июл 2018
Сообщения
5
Оценка реакций
0
Баллы
1
Возраст
20
Местоположение
Красноярск
Привет! у меня исходники декабрь 2017, могу ли я воспользоваться данным гайдом?
 

WinWoolF

Верховный Вождь
Команда форума
Администратор
Регистрация
13 Окт 2013
Сообщения
4.748
Оценка реакций
507
Баллы
159
Возраст
36
Местоположение
99 RUS
Сайт
www.1n-game.ru
@Sisil, я думаю что не требуется быть программистом для того что бы понять, что поле внешний репозиторой нужно для указания внешнего адреса откуда идет загрузка. А поле назначение нужно для выбора каталога в который идет загрузка.
@Borisov99, да
 

Sisil

Залетный
Новичок
Регистрация
28 Июн 2018
Сообщения
7
Оценка реакций
0
Баллы
2
Возраст
23
Местоположение
Россия, г.Иркутск
@Sisil, я думаю что не требуется быть программистом для того что бы понять, что поле внешний репозиторой нужно для указания внешнего адреса откуда идет загрузка. А поле назначение нужно для выбора каталога в который идет загрузка.
Блин... Помогите... Сделала вот всё как надо, в точности. .exe - файлы не патчатся(никакие, даже более ранней версии), на сервера зайти не могу. В голове каша. Ушло на всю эту магию около 10-ти часов(возможно, этого мало). Мне нужна помощь.
Где прописывать БД? Что делать с тем, что .exe не пропатчиваются? Что за authserver.exe? И возможно ли с вами хоть как-то связаться, чтобы разобраться конкретно с проблемой по мере поступления? Потому что это уже выше моих знаний и сил
 
Последнее редактирование:

Borisov99

Залетный
Не проверенный
Регистрация
11 Июл 2018
Сообщения
5
Оценка реакций
0
Баллы
1
Возраст
20
Местоположение
Красноярск
А можно как-нибудь с 1.64 бустом использоваться Travis Ci ?
 

WinWoolF

Верховный Вождь
Команда форума
Администратор
Регистрация
13 Окт 2013
Сообщения
4.748
Оценка реакций
507
Баллы
159
Возраст
36
Местоположение
99 RUS
Сайт
www.1n-game.ru
А можно как-нибудь с 1.64 бустом использоваться Travis Ci ?
Возможно я чего то не понимаю, но какая связь между бустом и тревисом? Буст это сборник библиотек для С++, Тревис это вообще веб сервис для тестирования ПО. Или мы говорим о разных вещах?
 

Sisil

Залетный
Новичок
Регистрация
28 Июн 2018
Сообщения
7
Оценка реакций
0
Баллы
2
Возраст
23
Местоположение
Россия, г.Иркутск
Ну блииин... Я понимаю, что я вас уже зае...здила...
 
Вверх Снизу