Перейти к содержимому
Для публикации в этом разделе необходимо провести 1 боёв.
MedvedevTD

[ModAPI] Пример использования. (How-To)

В этой теме 4 комментария

Рекомендуемые комментарии

16 853
Разработчик
6 959 публикаций
8 248 боёв

Первый шаг к моду

 

В обычном состоянии клиента ModsAPI неактивно. Для его активации необходимо добавить папку "PnFMods" в каталог игры "World_of_Warships/res_mods/<game_version>". Далее пустой Python файл "PnFModsLoader.py" положить в тот же катклог "World_of_Warships/res_mods/<game_version>":

 

first_step.png

 

В папке "PnFMods" должны храниться папки с модами:

mods_folder.png

 

В самом простом случае мод может состоять всего из одного файла: "Main.py".

В итоге простейший мод может лежать по следующему пути: "World_of_Warships/res_mods/<версия_игры>/PnFMods/TestMod/Main.py".

ModsAPI состоит из двух частей: Python и Flash. Python-часть отвечает за загрузку Main.py, а Flash-часть загружает специально подготовленный Main.swf.

Python и Flash части мода работают изолированно от игрового клиента. Для получения и отправки различных данных используется предоставленный интерфейс.

 

  • Плюс 8

Рассказать о публикации


Ссылка на публикацию
16 853
Разработчик
6 959 публикаций
8 248 боёв

Мод "HelloWorld" на PythonAPI

  1. Открываем уже созданную нами папку "PnFMods" и создаем в ней папку с модом с названием "HelloWorld".
  2. В папке с модом создадим Python файл и назовем его "Main.py".
  3. Откроем файл в редакторе и запишем первую строчку API_VERSION = 'API_v1.0', это позволит ModAPI распознать наш файл как часть мода. Запишем еще одну строку - вывод сообщения "Hello World!".
  4. Сохраним изменения.

 

files_main.png

 

d9fd0a757e04c7538c64b47f6b6effc0.png

 

Запустим клиент игры, дождемся его загрузки и после этого закроем его. Откроем в "World_of_Warships\profile\" файл "python.log", в нем увидим примерно следующее:

bcc905b628dbdb78e110c6a6fc8e5876.png

  • Плюс 3

Рассказать о публикации


Ссылка на публикацию
5 070
[LESTA]
Разработчик
1 323 публикации
7 426 боёв

Мод "HelloWorld" на FlashAPI

Теперь создадим простой Flash мод. Откроем наш проект в редакторе (см. документацию) и немного доработаем скрипт:

mod_hello_flash.png

 

Скомпилируем файл проекта, и полученный файл "Main.swf" положим в папку с нашим модом.

mod_hello_folder.png

 

Запустим клиент игры и убедимся что наш мод работает.

mod_helloworld.png

  • Плюс 1

Рассказать о публикации


Ссылка на публикацию
5 070
[LESTA]
Разработчик
1 323 публикации
7 426 боёв

Взаимодействие Python и Flash

 

Возьмем наш мод "Hello World!" и посмотрим как взаимодействуют Python и Flash части мода:

mod_helloworld_code.png

 

Дадим некоторые пояснения:

  1. Наш мод состоит из двух файлов - Main.py и Main.swf (скомпилированный файл из нашего проекта ".as"). Т.к. наш мод уже имеет и Flash часть, то и второй файл (Main.swf) мы так же добавим в папку с модом(!), где уже лежит Main.py.
  2. В Main.py создадим обработчик событий "events.onFlashReady", который сообщит нам что загрузился Flash файл и в него можно передать информацию.
  3. Теперь передадим строку "Hello World!" в Flash методом "flash.call".
  4. В это время Flash принимает наши данные методом "gameAPI.data.addCallBack" и передает в функцию-обработчик, которая была подписана на этот коллбэк.
  5. Далее функция-обработчик выводит сообщение на сцену, и вызывает методом "gameAPI.data.call" уже функцию в Python файле, но при этом никаких данных мы не передаем.
  6. Python файл получает вызов из Flash методом "flash.addExternalCallback", вызывает функцию-обработчик.
  7. И наконец функция-обработчик выводит сообщение об успешной работе в лог файл.

 

 

Battle Mod

Немного усложним задачу. Давайте попробуем изменить отображение какого-нибудь игрового эффекта, например изменим отображение получаемого нами урона от снарядов противника. Попробуем отобразить получаемый урон в другом месте, зададим другой цвет, размер шрифта и посмотрим что из этого получится.

mod_selfDamage_py.pngmod_selfDamage_swf.pngmod_selfDamage.png

Комментарии к разработке:

  1. С помощью метода "battle.getPlayersInfo" получим ID нашего корабля.
  2. Метод "events.onReceiveShellInfo" сообщит нам о событии получения нашим кораблем урона и передаст информацию в функцию-обработчик.
  3. Далее функция-обработчик известным способом передаст информацию в Flash.
  4. И наконец Flash отобразит полученный урон так, как мы этого хотим.

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

 

PS

Данный мод является лишь идеей а не окончательным вариантом. Вы можете взять эту идею за основу для создания своего собственного мода и возможно именно Ваш мод войдет в официальный модпак. Удачи!

  • Плюс 4

Рассказать о публикации


Ссылка на публикацию
Гость
Эта тема закрыта для публикации новых ответов.

×