Моддинг World of Warcraft #2. Установка и настройка инструментов
Всем привет! В предыдущей статье мы познакомились с теоретической частью.
Прежде чем перейти к практической части, нам необходимо скачать очень много программного обеспечения, чистый клиент и сервер.
Список необходимых программ можно перечислять бесконечно. К счастью, Amaroth собрал всё необходимое в один архив. Я так же добавил недостающих программ в него, которые пригодятся в работе.
Описание папок и информация о программах, которые в них находятся.
• AmarothTools
○ AmarothsLauncherRelease — довольно примитивный лаунчер, основанный на чтении конфигурационных файлов и загрузке/закачке журнала изменений, патчей и дополнений с FTP.
○ AmarothsToolkit — старая версия тулкита от Amaroth.
○ ClientItem — пара инструментов для синхронизации item_template Item.dbc.
○ GobGenerator — генерирует объекты в gameobject_template из моделей, предоставленных в GameObjectDisplayInfo.dbc
Редактор карт warcraft 3(World Editor) видео урок №6 — как сделать сборку предметов
○ ListfileCreation — не используйте, если вы не знаете, что делаете.
○ NPCGenerator — для Creature displayID WMV > DBC > конвейер DB.
○ WMOListFile — для получения полного списка файлов, используемых ADT, M2/MDX и WMO в папках под этим. Обратите внимание, что его код отстой и не на 100% идеален..
• CASC
○ CascView — 32- и 64-битные версии CascView, необходимые для получения файлов Blizzard для конвертации в WotLK.
○ Listfile — listfiles для извлечения файлов с помощью CascView.
• DBC
○ LightMapper — можно использовать для отличной визуализации света на карте.
○ WoWSpellEditor_1.8.8 — инструмент для создания способностей, лучше скачать самую последнюю версию => GitHub — stoneharry/WoW-Spell-Editor: A Spell Editor for WoW versions WOTLK 3.3.5, TBC 2.4.3, or Vanilla 1.12.1..
○ WDBX Editor — для редактирования DBC, преобразования DBC CSV и т. д.
○ EnGBBlizzlikeDBCs — просто близзлайк DBCs, может пригодиться как бэкап.
• Map
○ AdtAdder — небольшой инструмент для массового копирования-вставки ADT для первоначального заполнения новой карты/новорасширенной карты, не забудьте потом запустить offsetfix.
○ ADTGrids — некоторые помощники, которые вы можете использовать, отражающие базовые сетки в АТД.
○ FuTa — инструмент для импорта и экспорта альфа-карт (рисование текстур на ADT с помощью Photoshop).
○ GroundEffects — инструменты для применения, удаления или изменения эффектов земли в ADT.
○ GruulMeWDT -редактирование WDT файлов.
○ NoggitQt_3_2771 — редактор карт (лучше найдите и скачайте более новую версию NoggitRed, она генерирует мини-карты сама).
○ NoggitSDL_3_1408 — старая версия Ноггита
• Модели
○ MultiConverter_3.3.0 — Официально конвертер Legion > WotLK, но, кажется, и с BFA все в порядке..
○ Scripts — смесь случайных вещей. OBJtoM2 может быть полезен, если вы по каким-либо причинам не можете использовать WoW Blender Studio.
○ WoW Blender Studio — необходим для создания 3D моделей.
○ FuckItUp.exe — удаляет (listfile) из MPQ, что затрудняет извлечение файлов и, следовательно, редактирование или кражу ваших работ.
○ MPQEditor.exe — позволяет редактировать MPQ-архивы.
• Other
○ 010 — скрипты и шаблоны для 010 Editor.
○ Mordred_LoginScreen — кастомный логин скрин от Mordred.
○ PuTTy для подключения к серверу по SSH
○ WMT335a — тестирование света на карте и пролёт по карте
○ WMV — программа для удобного просмотра m2/wmo и прочих моделей, а так же их вставки в Ноггит.
○ HxDsetup.exe — альтернатива 010 Editor.
○ xyz-hack.exe — полезно для более точного создания объектов
• BLP
○ Здесь находятся файлы для просмотра/редактирования/конвертации BLP изображений, а так же плагин для Adobe Photoshop (инструкция по установке внутри, работает на версиях ниже CC, если не ошибаюсь).
Wow.exe — удалена проверка MD5, разрешено редактировать пользовательский интерфейс в патчах и т. д. Его необходимо с заменой закинуть в корень с вашим клиентом 3.3.5a, а так же необходимо поделиться этим exe файлом со своими игроками, особенно если вы хотите что-то изменить в клиенте, например, создать собственный login screen.
Структура нашего рабочего окружения
Для эффективной работы необходимо создать собственную структуру для файлов и директорий. Для этого нам необходимо выполнить несколько простых действий. Ну что же, приступим!
1. Откроем диск, в котором у нас будет лежать директория, в которой будут находиться всевозможные необходимые вещи для создания модификаций World of Warcraft. В моём случае это Windows (C.
Важно! Путь не должен содержать кириллицу в названии, по этой причине я и создаю в корне. Если вы это не учтёте, у вас могут быть проблемы с запуском тех или иных программ и их настройкой. Это касается не только вов моддинга, но и многих других программ.
Создадим в ней папку WoWMod, далее откроем скачанный вами архив с необходимыми программами и извлечём Tools в данную папку
- Server, где будет находиться уже скомпилированное TrinityCore ядро. Информация о том, где его скачать — чуть ниже.
- Projects, в которой будут лежать наши проекты.
- Extracted MPQ 3.3.5a, в которой будут лежать извлечённые файлы из MPQ архивов.
- Client 3.3.5a, в которой будет находиться wotlk клиент. Информация о том, где его скачать — чуть ниже.
Источник: 1n-game.ru
World Editor Урок 23 — Создаём ботов АИ (AI) by godleonid
Представляю вашему вниманию 23ий урок по Ворлд Едитору — Создаём ботов АИ (AI) от godleonid’а. В данном уроке автор рассказывает, как создать ботов в карте АИ (AI). В основном он рассказывает об аниме картах, но в целом базовое знание однозначно даёт. Поэтому к просмотру обязателен!
- World Editor Урок 9 — Создаём способность Цукуёми by godleonid
- World Editor Урок 11 — Создаём 3 способности Камуи by godleonid
- World Editor Урок 14 — Создаём технику Мадары Мокутон by godleonid
- World Editor Урок 15 — Создаём Сусано в 3 стадии by godleonid
- World Editor Урок 16 — Создаём Аматерасу Итачи by godleonid
- World Editor Урок 18 — Создаём способность огненного дракона by godleonid
Помоги сайту — оставь комментарий!
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Источник: skachat-warcraft-3.ru
Пишем AddOn к World of Warcraft
На хабре как-то писали о создании ботов к WoW, а вот статей о написании аддонов я не нашел и решил описать этот процесс на примере одной поделки, которую я писал когда-то давно, когда я был еще студентом и моего времени хватало на игру в World of Warcraft и создание аддонов к нему. С деньгами тогда было туго и играл я не на официальном сервере, а на одном из бесплатных, имеющем кучу недоделок, багов, фич и аномалий.
После того, как за случайное использование одной из них я был забанен, появилась идея создать аддон, указывающий в игре на все отличия данного шарда от официального сервера, с предупреждениями о наказаниях за их использование.
Я выложил аддон на Google Code и форум серевера и он стал достаточно популярным (как для пиратского сервера). Кому интересно, как делаются аддоны — велкам под кат.
Введение
Итак, начнём с определения. Аддон в WoW — это набор некоторых файлов, которые позволяют пользователю изменить интерфейс клиентской части игры, но никак не влияют на серверную игровую механику. Аддоны были в WoW изначально, что выгодно отличает эту ММОРПГ от некоторых других, кричащих о своём превосходстве, но не имеющих возможности создания официальных аддонов и по сей день.
Аддонов есть тысячи, если не десятки тысяч. Почему так много? А потому, что стилей игры и игровых задач ровно столько же. И конечно же, разработчики молодцы, что с самого начала дали способ каждому создать что-то своё, а не навязывать единый интерфейс, требуя считать его удобным.
- Об аддонах
- Начинаем писать аддон
- World of Warcraft API
- О разработке интерфейса
Инструментарий
Никаких специальных инструментов для создания аддонов не нужно. Все они представляют собой текстовые файлы, так что берите свой любимый текстовый редактор — и вперёд! Если он имеет подсветку синтаксиса языка Lua (именно на нём создаются аддоны) — вообще прекрасно. Этим требованиям отвечает, например, Notepad++.
А еще, энтузиасты создали на базе движка Free Visual Studio Shell специальную open-source IDE, которая называется AddOn Studio.
- Дизайнер интерфейса
- Просмотре интерфейса в виде XML-дерева
- Браузер ресурсов WoW
- Автодополнение по WoW API
- Автогенерацию некоторых файлов
Пару концептуальных моментов
- Есть такая штука, как политика Blizzard, требующая от аддона бесплатности, соответствия EULA, отсутствия вреда для других пользователей и пару других скучных, но идейно верных вещей. Так что о идеях написания ботов, хаков, читов и прочего мусора лучше забыть.
- Хотите Вы того или нет, Ваш аддон будет opensource, потому что пишется на LUA+XML и распространяется в исходных кодах.
Из чего состоит аддон
1. TOC-файл (table of conteset). Это оглавление нашего аддона. Объясняет оболочке WoW кто мы такие, как называемся, кто автор, из чего состоим и пару других вещей. Вот, например, toc-файл моего аддона:
## Interface: 30000 ## Title: Wnet Featurer 1.3 ## Notes: Wnet Server Features List ## RequiredDeps: ## OptionalDeps: ## LoadWith: Blizzard_TalentUI ## SavedVariables: Data.lua WnetWarnings.lua WnetFeaturer.xml
2. XML-файлы, описывающие изменения в интерфейсе, которые мы хотим внести (фреймы, кнопки, привязку событий в интерфейсе к определенным функциям в коде). Вот xml-файл моего аддона:
WnetFeaturer_OnLoad(self); WnetFeaturer_OnEvent(self, event, . ); WnetChecker_GameTooltip_OnUpdate();
Что тут написано? Мы объявляем привязку этого файла интерфейса к файлу кода WnetFeaturer.lua, далее декларируем два фрейма — один чисто для возможности повесить на события загрузки плагина своё событие, второй будет использоваться в игре для показа собственных тултипов (подсказок) к определенным объектам игрового мира.
3. Lua-файлы. Это код на языке Lua. Надо признать, что Lua в WoW несколько урезанный (детали можно почитать в WoWWiki), но для большинства задач его хватает. Вот один из файлов кода аддона (самый короткий).
—сохраняем процедуру отрисовки текста квестов (мы ее заменим на свою) local before_wnet_featurer_old_QuestFrameDetailPanel_OnShow = QuestFrameDetailPanel_OnShow; function WnetFeaturer_Log( text ) SELECTED_CHAT_FRAME:AddMessage( text ); end function WnetFeaturer_OnLoad(self) if ( not IsAddOnLoaded( «Blizzard_TalentUI» ) ) then _, reason = LoadAddOn( «Blizzard_TalentUI» ); end if ( reason ) then return; end — Hook the Talent Frame’s Update function hooksecurefunc( «TalentFrame_Update», Planner_TalentFrame_AfterUpdate ); — Register for Loading Variables self:RegisterEvent( «PLAYER_ENTERING_WORLD» ); self:RegisterEvent( «PLAYER_LEAVING_WORLD» ); — Locale/Gender-neutral class names FTW wnet_featurer_classes = < [1] = «DEATHKNIGHT», [2] = «DRUID», [3] = «HUNTER», [4] = «MAGE», [5] = «PALADIN», [6] = «PRIEST», [7] = «ROGUE», [8] = «SHAMAN», [9] = «WARLOCK», [10] = «WARRIOR», >; end function WnetFeaturer_OnEvent( self, event, . ) if ( event == «PLAYER_ENTERING_WORLD» ) then tp_name = UnitName( «player» )..» of «..GetRealmName(); _, «player» ); for k, v in ipairs( wnet_featurer_classes ) do if ( v == class ) then tp_class = k; end end elseif ( tp_name ) then if ( event == «PLAYER_LEAVING_WORLD» ) then tp_name = nil; tp_class = nil; end end end function Planner_TalentFrame_AfterUpdate( frame ) local page = PanelTemplates_GetSelectedTab( PlayerTalentFrame ); local numTalents = GetNumTalents( page ); local inspect = PlayerTalentFrame.inspect; local pet = PlayerTalentFrame.pet; local _, «player» ); if ( pet or tp_standby or not tp_name or not tp_class or frame ~= PlayerTalentFrame or inspect ) then return; end for numTalents, 1 do local name, texture, row, col, rank, maxRank = GetTalentInfo( page, id ); local color = nil; if( wnet_talents[tp_class][page][name] ) then color = wnet_talents[tp_class][page][name]; else color = NORMAL_COLOR; end if ( color ) then getglobal( «PlayerTalentFrameTalent»..id..»Slot» ):SetVertexColor( color.r, color.g, color.b ); getglobal( «PlayerTalentFrameTalent»..id..»RankBorder» ):Show(); getglobal( «PlayerTalentFrameTalent»..id..»Rank» ):SetText( rank..»/»..maxRank..» » ); getglobal( «PlayerTalentFrameTalent»..id..»Rank» ):Show(); else getglobal( «PlayerTalentFrameTalent»..id..»RankBorder» ):Hide(); getglobal( «PlayerTalentFrameTalent»..id..»Rank» ):Hide(); end end end function checkIsItemValid( text ) if ( wnet_items[text] ) then return 1; else return nil; end end function checkIsNPCValid( text ) if ( wnet_npc[text] ) then return 1; else return nil; end end WnetChecker_GameTooltip_OnUpdate=function() local errorString = nil; for i=1, GameTooltip:NumLines(), 1 do local currentTooltipStr = getglobal(«GameTooltipTextLeft»..i):GetText(); —проверка на баговых NPC и вещи if ( i == 1 ) then —имя NPC или вещи находится всегда в первой строке тултипа. Искать во всех незачем. if( checkIsNPCValid( currentTooltipStr ) ) then errorString = «Wnet: этот NPC может работать неверно!»; elseif( checkIsItemValid( currentTooltipStr ) ) then errorString = «Wnet: эта вещь может работать неверно!»; end end if strfind( currentTooltipStr, «Unique(.)Equipped» ) then errorString = «Wnet: Одевать 2 таких вещи нельзя!»; elseif strfind( currentTooltipStr, «Target Dummy» ) then errorString = «Wnet: Использовать 2 таких вещи нельзя!»; elseif( strfind( currentTooltipStr, «Chance on hit(.) Stuns target for» ) or strfind( currentTooltipStr, «Chance on hit(.) Оглушает цель на» ) ) then errorString = «Wnet: Использовать эту вещь нельзя!»; elseif( strfind( currentTooltipStr, «Chance on hit(.) Knocks target silly for» ) ) then errorString = «Wnet: Использовать эту вещь нельзя!»; elseif( strfind( currentTooltipStr, «Blackblade of Shahram» ) ) then errorString = «Wnet: Использовать эту вещь нельзя!»; elseif( strfind( currentTooltipStr, «Seduction» ) ) then errorString = «Wnet: этот спелл запрещен!»; elseif( strfind( currentTooltipStr, «Ursius» ) or strfind( currentTooltipStr, «Avian Darkhawk» ) or strfind( currentTooltipStr, «Avian Ripper» ) or strfind( currentTooltipStr, «Windroc Matriarch» ) ) then errorString = «Wnet: петом брать нельзя!»; elseif( strfind( currentTooltipStr, «Wnet:») ) then errorString = nil; end end if errorString then GameTooltip:AddLine( errorString, 1, 0, 0 ); local i; local s=10; for i=1, GameTooltip:NumLines(), 1 do s=s+getglobal(«GameTooltipTextLeft»..i):GetHeight()+2; end GameTooltip:SetHeight(s+10); GameTooltip:SetWidth( max( GameTooltip:GetWidth(), 300 ) ); end end function checkIsQuestNotValid( questTitle ) if ( wnet_quests[questTitle] ) then return 1; else return nil; end end QuestFrameDetailPanel_OnShow=function() before_wnet_featurer_old_QuestFrameDetailPanel_OnShow(); if( checkIsQuestNotValid( GetTitleText() ) ) then QuestDescription:SetText(«|c00ff0000 Wnet: Этот квест может не работать!|r|n»..GetQuestText()); end end
Этот код выполняет следующий задачи:
- WnetFeaturer_Log — функция вывода в чат игроку всяких логов
- WnetFeaturer_OnLoad — вызывается при загрузке аддона (помните, в хмл-файле выше мы привязывали вызов этой функции к событию загрузки аддона). Проверяет необходимые зависимости, регистрирует пару хуков, подписывается на пару событий (например, событие входа игрока в игровой мир).
- WnetFeaturer_OnEvent — вызывается при возникновении некоторых событий, на которые мы подписались ранее. Внутри — обработчики каждого события.
- Planner_TalentFrame_AfterUpdate — самая сложная функция в этом файле. Нужна для отрисовки в дереве талантов персонажа зеленых, желтых и красных квадратиков поверх работающих, частично работающих и полностью сломанных талантов.
- checkIsItemValid, checkIsNPCValid, checkIsQuestNotValid — проверка того, является ли вещь или NPC валидно работающими на данном сервере. Эти функции вызываются из других мест кода, которые потом возле невалидных вещей рисуют вот такие картинки:
- WnetChecker_GameTooltip_OnUpdate — это хук на функцию показа тултипа. Здесь мы анализируем текст тултипа и, если в первой строке находим упоминание некоторого объекта, который работает неверно, мы изменяем текст тултипа.
В проекте есть еще пару файлов кода, но они, в большей своей части, являются просто базой невалидных объектов и подписей к ним. Интереса не вызывают.
Полные исходники можно посмотреть тут: http://code.google.com/p/wnet-featurer/downloads/list
А вот тема на форуме, где я более детально описывал фичи аддона.
Буду рад, если кому-нибудь это поможет. Спрашивайте, если что-то непонятно.
Источник: habr.com