Wiki

Clone wiki

wot.mods / GettingStarted

Getting Started

Данное руководство предназначено для людей, имеющих опыт программирования на Python, но никогда ранее не имевших опыта в создании модификаций игрового клиента WorldOfTanks.

Немного теории

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

Если в двух словах, то в игре используется две технологии:

  1. Flash с ActionScript для создания и отображения визуальных обьектов

  2. 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\ 

Если все сделано верно, то при запуске игры и входе в ангар в центре уведомлений должно появится наше сообщение.

hello.png

Установщик мода

Создадим для нашего архиполезного мода программу установки, чтобы не заставлять пользователей разбираться со структурой каталогов, куда его нужно поместить. Установщик сделаем при помощи пакета 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, который можно распространять.

setup.png

Updated