Wiki
Clone wikiwot.mods / GettingStarted
Getting Started
Данное руководство предназначено для людей, имеющих опыт программирования на Python, но никогда ранее не имевших опыта в создании модификаций игрового клиента WorldOfTanks.
Немного теории
Есть полезное видео от разрабов, рассказывающее об устройстве игры с точки зрения мододела, с примером создания небольшого ангарного мода.
Если в двух словах, то в игре используется две технологии:
-
Flash с ActionScript для создания и отображения визуальных обьектов
-
Python для реализации игровой логики, обмена данными с серверами WG и управления визуальными обьектами.
Для каждого игрового обьекта/интерфейса, как правило, имеются параллельные функции на Flash и Python, которые взаимодействуют между собой при помощи Direct Access API.
В игровой клиент встроен интерпретатор Python 2.7.x который имеет ряд ограничений по составу стандартных библиотек (например, в этом интерпретаторе недоступна ctype). Встроенному питону игрового клиента доступна обьектная модель движка BigWorld, на котором построена игра WorlOfTanks.
Hello, WoT
Поставим перед собой задачу создать модификацию игрового клиента (мод), который выводит сообщение "Hello WoT!" в центре уведомлений при каждом запуске игрового клиента. Для решения этой задачи нам понадобится Python 2.7.x, любой текстовый редактор и рабочий игровой клиент WorlOfTanks.
Чтобы код нашего мода был загружен и выполнен игровым клиентом, нужно чтобы он находился в скомпилированном .pyc файле в подкаталоге res_mods\0.9.10\scripts\client\gui\mods игрового клиента. Вместо "0.9.10" нужно подставить номер актуальной версии игры. Имя файла мода должно начинаться с mod_.
Создаем в текстовом редакторе файл mod_hello.py следующего содержания:
#!python # -*- coding: utf-8-sig -*- # подключаем библиотеки игрового движка, доступные во встроенном python игрового клиента import BigWorld from gui import SystemMessages from Account import Account # наш код, заменяющий встроенный обработчик события входа в ангар. def hello(self): # выполнить встроенный обработчик parent(self) # вывести нужное сообщение в центре уведомлений. # тип сообщения SM_TYPE.Warning вызывает раскрытие ленты сообщений SystemMessages.pushMessage('Hello WoT!', type=SystemMessages.SM_TYPE.Warning) # восстанавливаем стандартный обработчик # если эту строку закомментировать, сообщение будет выводится при каждом входе в ангар (после каждого боя и т.д.) Account.onBecomePlayer = parent # сохраняем встроенный обработчик события входа в ангар parent = Account.onBecomePlayer # установить наш обработчик вместо встроенного Account.onBecomePlayer = hello
компилируем созданный файл в .pyc:
>python -c "import mod_hello;" Traceback (most recent call last): File "<string>", line 1, in <module> File "mod_hello.py", line 4, in <module> import BigWorld ImportError: No module named BigWorld
копируем полученный .pyc файл в нужный каталог игрового клиента
>copy mod_hello.pyc C:\Games\World_of_Tanks\res_mods\0.9.10\scripts\client\gui\mods\
Если все сделано верно, то при запуске игры и входе в ангар в центре уведомлений должно появится наше сообщение.
Установщик мода
Создадим для нашего архиполезного мода программу установки, чтобы не заставлять пользователей разбираться со структурой каталогов, куда его нужно поместить. Установщик сделаем при помощи пакета Inno Setup, который нужно скачать и установить. Кроме того, нам понадобится иконка приложения-установщика.
при помощи текстового редактора создаем файл настроек для создания программы-установщика hello_wot.iss
#define MyAppName "HelloWoT" #define MyAppURL "https://bitbucket.org/_vb_/wot.mods/wiki/GettingStarted" #define WOT "0.9.10" [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{59D45E49-B1DC-4873-8E72-A9516307F69C} AppName={#MyAppName} AppVersion={#WOT} AppPublisher={#MyAppURL} AppPublisherURL={#MyAppURL} DefaultDirName="C:\Games\World_of_Tanks" DefaultGroupName={#MyAppName} OutputBaseFilename={#MyAppName}Setup_{#WOT} SetupIconFile=wot.ico Compression=lzma SolidCompression=yes PrivilegesRequired=lowest [Languages] Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" Name: "english"; MessagesFile: "compiler:Default.isl" [Files] Source: "mod_hello.pyc"; DestDir: "{app}\res_mods\{#WOT}\scripts\client\gui\mods\"; Flags: ignoreversion recursesubdirs createallsubdirs [Run] Filename: "{app}\WoTLauncher.exe"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
и командный файл, для создания установщика make_setup.cmd
C:\Python27\python.exe -c "import mod_hello;" "C:\Program Files\Inno Setup 5\ISCC.exe" /o. hello_wot.iss
После запуска make_setup.cmd создается файл программы-установщика HelloWoTSetup_0.9.10.exe, который можно распространять.
Updated