

MatroseFuchs
Разработчик-
Публикации
1 341 -
Зарегистрирован
-
Посещение
-
Бои
7492 -
Клан
[LESTA]
Тип публикации
Профили
Форум
Календарь
Все публикации пользователя MatroseFuchs
-
Модификация – файл или совокупность файлов, относящихся к проекту WOWS, взаимодействующие прямо или опосредованно с клиентом игры (файлами клиента), и/или каким-либо образом изменяющие его поведение. Правила публикации модификаций: Все публикации и содержание модификаций должны соответствовать основным правилам форума и правилам раздела модификаций. Публикации проверяются администрацией раздела в срок от одного до трех дней. Если по истечении трех дней публикация не была одобрена и не были предъявлены замечания для устранения, автору публикации необходимо связаться с администрацией раздела в ЛС форума. Модификация должна относится к проекту WOWS. Модификация должна соответствовать описанию. Опубликованная модификация должна соответствовать текущей версии клиента игры. Публикации, имеющие спорные или пограничные моменты, разрешаются по усмотрению администрацией форума. Если замечания к публикации не будут устранены в течение 7 дней, то такая публикация будет перемещена в раздел архива модификаций. В названии публикации необходимо указывать версию совместимости с клиентом и название модификации (например: [0.8.0.0] My SuperMod), если модификация не зависит от версии клиента игры, то указывается [ALL]. Публикация модификации другого автора может быть только по согласованию с самим автором модификации. В этом случае автор модификации должен сообщить со своего основного аккаунта в ЛС администратору раздела (MatroseFuchs) о своем согласии. Содержание публикации: Обязательно: Описание модификации. Ссылка для скачивания на файловое хранилище (Google Drive, Yandex.Disk, Cloud.Mail, Dropbox и т.д.). Инструкция по установке в описании публикации или в архиве модификации. При публикации модификации другого автора, в описании указывается автор такой модификации. Интерфейсные и графические модификации в описании должны содержать скриншоты (не более трех) отражающие суть модификации. При наличии особенностей и любой другой важной информации при использовании модификации, информация об этом должна быть добавлена в описание и выделена. По желанию автора публикации: Дополнительные изображения и видеозаписи добавляемые для описания модификации должны быть скрыты в спойлерах. Автор модификации может в своей теме указать свои веб-кошельки/счета для того, чтобы пользователи могли добровольно поддержать автора любой доступной для них суммой. Рекомендуется в теме публиковать скриншот результата проверки с VirusTotal Модификация должна распространяться бесплатно, продажа модификаций запрещена. Модификация публикуется в соответствующем ей разделе (см. ниже). С выходом очередного обновления клиента игры, модификация, при необходимости, должна быть обновлена до текущей версии игры в течение трех дней с момента выхода обновления клиента, в противном случае модификация будет перемещена в раздел архива модификаций до момента обновления её до актуальной версии клиента. После обновления модификации, в заголовке публикации должна быть изменена версия клиента на актуальную. После того как модификация, находящаяся в разделе архива модификаций, была обновлена до актуальной версии игры, автору публикации необходимо написать администрации раздела модификаций (MatroseFuchs) для проверки. Администрация проекта придерживается политики невмешательства во взаимоотношения мододелов, однако при необходимости Администрация может принять окончательное решение в спорной ситуации, рассмотрев соответствующие аргументы каждой из сторон. Представитель Администрации проекта по решению спорных ситуаций - MedvedevTD. Запрещено публиковать, а также добавлять или изменять в существующих публикациях: Программы и модификации, которые помогают целиться способами, не предусмотренными в игре, например отображают маркеры упреждения. Программы (боты или скрипты), которые берут управление каким-либо аспектом игры на себя. Программы и модификации, которые как-либо работают с файлом клиента игры scripts.zip или заменяют его. Материалы содержащие изображения или видеозаписи обнаженных натур, эротического или порнографического характера. Материалы, содержащие немецкую нацистскую (фашистскую) символику. Ссылки на сторонние ресурсы, за исключением ссылки на файловое хранилище для скачивания модификации и фан-сайты, в соответствии с основными правилами форума, в данном подразделе и на форуме запрещены. Ссылки на сайты, которые не вошли в список фан-сайтов, будут удаляться. Администрация форума оставляет за собой право не одобрять (запрещать) публикации по своему усмотрению.
-
[UB] Документация по Unbound framework
MatroseFuchs ответил в тему MedvedevTD в Руководства для мододелов
Цвета Ограниченная палитра специальных цветов используется в игре для текстов и иконографики: В общем случае, цвета можно выбирать из палитры так называемых безопасных Web-цветов: -
На основном предварительно 0.8.1 или 0.8.2, насчет ПТ не обещаю.
-
пополним в одном из обновлений
-
Разберем создание модификаций с использованием Unbound на примере мода, отражающего наш процент побед в каруселе кораблей. Для создания модификации нам нужно решить три основные задачи: Получить нужные данные; Правильно обработать эти данные; Отобразить результат. Данную статистику мы можем наблюдать в клиенте игры в порту в разделе «Профиль» → «Сводка»: Заметим, что процент побед указан для конкретного типа боёв; это тоже нужно учесть при обработке данных. Теперь разберёмся, как получить эти данные. Для работы с файлами клиента игры, необходимо распаковать их при помощи утилиты. Для нашего мода распакуем директорию res\gui\unbound. Распакованные файлы будут лежать в “..\World_of_Warships\res_unpack\gui\unbound”. В полученных файлах нам нужно найти те, которые работают со статистикой процента побед. Зададим в поиск по всем файлам наиболее близкое по смыслу слово “victory” и посмотрим на результат: По полученным совпадениям увидим файл dock.xml, он же наш порт, а также наиболее близкое по значению совпадение. Так как наш профиль находится в порту, то логично начать поиски в этом файле. Откроем dock.xml и исследуем место совпадения поиска. Тут мы обнаруживаем строкой выше атрибут winRate: Вероятно, это то, что нам нужно. Как видим, этот параметр содержится в поле statData; теперь посмотрим, где оно находится. Поднявшись немного вверх, обнаружим что statData инициализируется в основном блоке <block className="PlayerSummary">, а также является свойством компонента dataComponent, который, в свою очередь, содержится в сущности statDataEntity. Посмотрим на содержимое statData. К сожалению, при работе с XML-файлами нет возможности использовать инструменты отладки, поэтому для отображения содержимого создадим обычный текстовый блок. Сразу добавим стилевой класс, чтобы текст выводился белым, а не чёрным, как по умолчанию: Так как некоторые параметры могут содержать в себе информацию не только в виде строковых или численных значений, но и в формате объекта, то для корректного отображения желаемого параметра используем метод reflect(), который аналогичен функции rtrace() в AS3. Т.к. этот блок будет выводить текст черным цветом, то рекомендую для удобства трассировки добавить в блок класс textDefault, который сделает цвет текста белым с контуром. Обратите внимание! Чтобы вносимые нами изменения в XML-файл отображались в клиенте игры, необходимо собрать SWF-файл и положить его в «World_of_Warships\res_mods\<Версия игры>\gui\flash», рядом положить USSExpressionsLoader.xml, в котором добавим путь к нашему SWF-файлу, а измененный XML — в «World_of_Warships\res_mods\<Версия игры>\gui\unbound» и запустить игру. После каждого изменения делаем новую сборку SWF-файла. Перейдя на вкладку «Профиль → Сводка» (мы помним, что статистика отображается в сводке профиля игрока), мы увидим, что отобразилось содержимое statData: Если мы изменим тип боя для отображения статистики в профиле, то можем увидеть, что и в statData произошли изменения: теперь данные отображаются по выбранному типу боя. Среди полученных данных найдём shipsList, состоящий из словарей с полями по каждому кораблю, среди которых есть и winRate. В dock.xml можем также заметить, что shipsList тоже содержится в dataComponent и уже объявлен в отдельной переменной. Можем считать, что первую задачу мы выполнили: теперь мы знаем, что процент побед по каждому кораблю содержится в shipsList в компоненте dataComponent. Теперь разберёмся, как получить те же данные, но для карусели кораблей. Начнем с того, что нам нужно отображать статистику по выбранному типу боя, который выбирается рядом с кнопкой входа в бой. Найдем этот параметр в коде. Как видим ниже, за тип боя отвечает переменная battleType: Можем предположить, что эта переменная, или что-то похожее на неё, будет располагаться также в блоке рядом с элементом кнопки «В БОЙ!». Попробуем найти элемент этой кнопки; поищем в коде что-нибудь, связанное с “button” и “battle”. Обнаружим вот такие элементы: StartBattleButtonBig и StartBattleButtonSmall, а ниже — BattleTypeChooser: Это похоже на то, что нам нужно. Исследуем эти элементы и вот что наблюдаем: Есть переменная selectedBattle, которая хранит в себе тип выбранного боя selectedBattle.type. Теперь мы знаем, как получить доступ к типу выбранного боя. Теперь разберёмся, как получить shipsList по выбранному типу боя. Мы уже знаем, что dataComponent содержится в statDataEntity. Посмотрим, что там полезного для нас найдётся: В процессе поиска shipsList мы могли заметить, что сущность (Entity) statDataEntity является элементом коллекции statDataEntities. Заглянув в эту коллекцию, обнаружим, что она состоит из одного элемента и содержит компоненты dataComponent и rankedSeasonHistory. Если взять энтити с другим компонентом и так же содержащий компонент dataComponent, и заглянуть в нее, то обнаружим, что компонент dataComponent этой энтити содержит информацию, относящуюся к выбранному компоненту. Можем заметить, что компонент rankedSeasonHistory содержит поле gameType, которое отвечает за тип боя. Следовательно, если мы зададим этому компоненту тип выбранного нами боя, то можем получить из dataComponent список shipsList с нужным процентом побед. Теперь проверим нашу гипотезу. Стоит заметить, что обращение к полю объекта осуществляется через точку (“object.field”) как к его свойству в AS3. В коде ниже можем заметить связку, которая даёт нам сущность с отфильтрованным компонентом по требуемому полю: Воспользуемся этим. Теперь получим значение выбранного типа боя: возьмем сущность, содержащую компонент rankedSeasonHistory с выбранным типом боя, а из компонента dataComponent (который, как мы уже знаем, будет у нашей сущности) получим shipsList и выведем на экран: Итак, мы видим список имеющихся у нас кораблей по выбранному типу боя с полями процента побед (строковое представление – winRate, числовое представление – winRateNum). Выберем другой тип боя и увидим, что в shipsList теперь отражаются данные по кораблям, которыми мы играли в этом типе боя. Можно считать, что и вторую задачу мы выполнили. Теперь перейдём к визуализации результата. Прежде всего, нам нужно найти тот элемент, в котором мы будем выводить наш процент побед. Искать будем карусель кораблей, и в ней — слот корабля. Поиск карусели по всем XML файлам выдаст большое количество совпадений, но если приглядеться, то обнаружим среди файлов наш dock.xml. Немного поискав и используя в качестве инструмента отладки обычный текстовый блок со значением “Hello World!” (см. документацию, раздел «Блоки»), обнаружим основной элемент карусели CarouselItem: Тут можно обработать наш список кораблей и получить процент побед для каждого корабля в отдельности. Для начала получим отфильтрованный список по типу боя: При работе со списком воспользуемся связкой indexOf, которая позволит получить элемент списка для текущего слота корабля. Очевидно, что для каждого слота карусели будет определяться свой корабль с различными свойствами, среди которых может быть и его идентификатор (id). Пролистав немного ниже, убедимся, что так и есть: Воспользуемся связкой indexOf, получим индекс элемента списка для текущего слота корабля и возьмем значение winRate. Взглянем на результат: Как видим, у нас отображается процент побед по каждому кораблю в зависимости от выбранного типа боя. Пойдем дальше: найдем элемент самого слота, большого и маленького, чтобы разместить процент побед внутри самого слота. Продолжив поиски, найдем ShipCarouselDefaultSlot – слот обычного размера, а ниже — элемент слота маленького размера ShipCarouselSmallSlot. Разберёмся, как передаются данные в слот — например, уровень корабля, и какие связки при этом используются. В элементе слота найдём блок, отвечающий за размещение значения уровня корабля: Здесь же видим, какой используется стиль текста, а также стиль расположения блока внутри элемента. Теперь посмотрим, как этот параметр передаётся в элемент слота: Передадим наше значение процента побед аналогичным способом: Далее добавим блок для отображения значения с такими же отступами сверху и справа, и со стилем текста, аналогичным уровню корабля, чтобы все элементы слота визуально сочетались между собой: Добавим последние штрихи, а именно — цветовую градацию процента побед аналогично танковому моду, и зададим условие: при отсутствии винрейта текстовый блок будет пустым. Для этого возьмём уже числовое представление процента побед, а для изменения цвета текста – связку <bind name="style" value="'textColor'; …”>: Продублируем блок для маленького слота: В результате получили модификацию, отражающую процент побед корабля для выбранного типа боя в компактной и обычной карусели. П.С. Не забываем после каждого изменения XML-документа пересобрать SWF-файл мода и заменить файлы в соответствующих папках в res_mods.
-
FlashAPI - StageModule Методы "StageModule" предоставляют возможность работать со сценой "Stage". Доступные методы: gameAPI.stage gameAPI.stage.addChild(child:displayObject) gameAPI.stage.addChildAt(child:displayObject, index:int) gameAPI.stage.removeChild(child:displayObject) gameAPI.stage.removeChildAt(index:int) gameAPI.stage.width() gameAPI.stage.height() gameAPI.stage.addChild(child:displayObject) Работает аналогично методу "addChild", добавляет экземпляр "displayObject" на сцену "Stage" для визуализации объекта. Входной аргумент "child" - создаваемый графический объект Flash-а. gameAPI.stage.addChildAt(child:displayObject, index:int) Аналогично методу "addChildAt", добавляет DispalyObject на определенный слой Stage'a. Входные аргументы: "child" - создаваемый графический объект Flash-а; index - порядковый номер слоя, на который должен быть добавлен DisplayObject. gameAPI.stage.removeChild(child:displayObject) Метод удаляет DispalyObject со Stage. Входной аргумент "child" - DisplayObject, который должен быть удален со Stage. gameAPI.stage.removeChildAt(index:int) Метод удаляет выбранный слой со Stage. Входной аргумент "index" - порядковый номер слоя, с которого должен быть удален DisplayObject. gameAPI.stage.width() Метод возвращает ширину сцены Stage. Возвращаемое значение имеет тип данных "Number". gameAPI.stage.height() Метод возвращает высоту Stage Возвращаемое значение имеет тип данных "Number".
-
[UB] Документация по Unbound framework
MatroseFuchs ответил в тему MedvedevTD в Руководства для мододелов
Типографика Шрифт Основной шрифт, используемый в игре, это Warhelios Condensed. Он бывает в двух начертаниях — обычном (WarheliosCondC) и жирном (WarheliosCondCBold). Правила использования Следует избегать использование своих стилей текста, и вместо этого использовать готовые стилевые классы: Класс Для чего используется $TextDefault13NM второстепенный (вспомогательный) текст $TextDefault15NM основной класс, используйте его в большинстве случаев $TextDefault17NM заголовки 4 уровня $TextDefault19NM заголовки 3 уровня $TextDefault21NM заголовки 2 уровня $TextDefault23NM заголовки 1 уровня $TextDefaultBoldNM имя корабля и его уровень, шапки таблиц, заголовки разворачиваемых списков, заголовки групп характеристик $TextDefaultBold17NM заголовки параграфов $TextDefaultBold19NM заголовки 3 уровня повышенной значимости $TextDefaultBold21NM заголовки 2 уровня повышенной значимости $TextDefaultBold23NM заголовки 1 уровня повышенной значимости, заголовки окон Пример стилизации текста Исходный текст: <block type="text""> <bind name="text" value="'Hello, world!'"/> # этот текст будет чёрного текста и в гарнитуре Arial </block> Теперь добавим стандартный стилевой класс, использующий белый цвет по умолчанию: <block type="text""> <styleClass value="$TextDefaultNM/> # теперь текст стал белым, с кеглем 15px, в гарнитуре Warhelios Condensed <bind name="text" value="'Hello, world!'"/> </block> Теперь поменяем текст, переопределив текст из класса своим, добавив атрибут (textColor) в блок (style): <block type="text""> <styleClass value="$TextDefaultNM/> <style> <textColor value="0xFFCC66"/> # золотистый цвет премиумных кораблей </style> <bind name="text" value="'Hello, world!'"/> </block> -
[UB] Документация по Unbound framework
MatroseFuchs ответил в тему MedvedevTD в Руководства для мододелов
Стили Облик элемента задаётся набором атомарных стилевых свойств, таких как высота, ширина, цвет, расположение и так далее. Отдельные стилевые свойства можно объединять в стилевые классы class — стилевой класс; style — выражение, задающее стиль элемента в конкретно этом блоке (так называемый inline-стиль) через перечисление стилевых свойств. атомарные стилевые свойства, По аналогии с HTML, применяется то стилевое свойство, которое применено к элементу последним: -
[UB] Документация по Unbound framework
MatroseFuchs ответил в тему MedvedevTD в Руководства для мододелов
Блоки Элемент — это независимый корневой блок самого верхнего уровня, внутри которого задаются остальные дочерние блоки. Пример описания корневого блока в XML файле: <block className="SomeClassName"> Объявление элемента нужно в двух случаях: Когда мы хотим создать новое окно; Когда мы хотим создать новый элемент, который будет использоваться в любом существующем окне. При этом, элемент может создаваться как динамически (на основе выполнения логических условий), так и статически. Пример динамического появления блока — кнопка «Забрать награду» в календаре: Дочерние блоки бывают следующих типов: block — спрайтовый блок; <block> ... </block> tf — текстоый блок; <block type="text"> mc — блок типа Movie Clip, определённый в каком-либо флэшовом *.fla-файле и экспортированный в ActionScript; <block className="some_class_name" type="native"> Если выполнить код выше, то на экране мы ничего не увидим, потому что по умолчанию блоки создаются без цветовой заливки, с нулевой высотой и шириной. Для управления их обликом как раз и используются стили, о них речь ниже. -
[UB] Документация по Unbound framework
MatroseFuchs ответил в тему MedvedevTD в Руководства для мододелов
Список поддерживаемых событий (events) для мыши Unbound поддерживает лишь часть мышиных событий из ActionScript 3.0. Пример: (bind dispatch "'click'; 'eventName'; {}") событие описание click Щелчок левой кнопкой мыши mouseDown Срабатывает в момент нажатия левой кнопки мыши mouseUp Срабатывает в момент отпускания левой кнопки мыши mouseWheel Прокрутка колёсика мыши в любом направлении mouseOver Наведение указателя на элемент mouseOut Срабатывает в момент ухода указателя мыши с элемента mouseMove Срабатывает в момент движения указателя над элементом rollOver Аналогично mouseOver, но не сработает над дочерними элементами rollOut Аналогично mouseOut, но не сработает над дочерними элементами Примечание В ActionScript есть разница между mouseOver/rollOver и mouseOut/rollOut, в Unbound она сохраняется. Это значит, что событие mouseOver сработает как над родителем, так и над детьми, в отличие от rollOver, который сработает один раз над родителем и не сработает над детьми. -
[UB] Документация по Unbound framework
MatroseFuchs ответил в тему MedvedevTD в Руководства для мододелов
Список байндингов DataHub 2.0 DHCollectionRepeatBinding DHCollectionGeneratorBinding DHCollectionBinding DHEntityBinding DHHandleEventBinding DHWatchBinding DHDataRefBinding -
[UB] Документация по Unbound framework
MatroseFuchs ответил в тему MedvedevTD в Руководства для мододелов
Список доступных байндингов UbChildBinding UbInstanceBinding UbEventBinding UbSyncBinding UbRepeatBinding UbGeneratorBinding UbDraggableBinding UbClikListBinding UbStyleBinding UbStyleClassBinding UbAppearBinding UbTransitionBinding UbTooltipBinding UbSequenceBinding UbPropertyBinding UBVariablesBinding UbCatchEventBinding UbDispatchBinding UbDispatchDelayResetBinding UbChangeDispatchBinding UbCountdownBinding UbClockBinding UbContainsBinding UbFileBinding UbEventSequenceBinding UbTimeFormatBinding UbRestrictFeedbackBinding UbIndexOfBinding UBAccountLevelBinding SFMRequestBinding и SFMActionBinding FocusBinding InputMappingBinding UbSubstituteBinding UbSubstituteBinding DesignerCollectionBinding ConcatBinding ClipboardBinding ColorTransformBinding SliceBinding ResourceBinding entityDH firstEntityDH primaryEntityDH DHCollectionGeneratorBinding GSTimelineBinding WowsResizeBinding UbPluralTextBinding UbContextMenuBinding UbWatchBinding ActionIsDisplayBinding UbRepeatWithScopeHoldBinding UBServerTimeBinding UbFeatureCheckBinding UbGeneratorBinding UbInOutActionBinding UbIMEEnableBinding UbFadeBinding UbBlurLayerBinding, UbBlurMapBinding UbStageSizeBinding UBClickSplitBinding UbLinearChartBinding -
Всем привет! От лица нашей команды, выражаем благодарность мододелам проекта, за участие в разработке модификаций для игры World of Warships. На сегодняшний день мододелы - это уже сложившееся отдельное сообщество активных и инициативных людей, которые постоянно разрабатывают новые и совершенствуют существующие модификации, стремясь сделать игровой процесс более удобным и интересным. Сообщество постоянно растет и развивается, появляются новые идеи для модификаций, и мы в свою очередь стараемся развивать и совершенствовать инструментарий для реализации Ваших идей. В качестве благодарности мы подготовили для мододелов специальные нашивки и эмблемы: Поздравляем с этим замечательным событием, желаем новых оригинальных идей и надеемся на дальнейшее плодотворное сотрудничество! С уважением
-
Спасибо что обратили внимание, ссылку добавил в документацию, на всякий случай дублирую еще тут https://drive.google.com/drive/folders/14VCPM7mOQGCq1MrvSVdv6r2wZoOP8Kfp. Свежая библиотека будет добавлена туда позже.
-
Приветствую, уважаемые мододелы! В связи с необходимостью доработки, доступ к игровым константам был перенесен на версию 7.12. Доступ реализован в небольшом меню разработчика, которое будет вызываться сочетанием клавиш. Меню имеет две кнопки для показа констант и перезагрузки мода. Полное описание будет добавлено в документацию ModAPI с выходом обновления.
-
Приветствую, уважаемые! Документация по ModAPI была обновлена, добавлены описания, новые методы и разделы, так же обновлена инструкция по созданию модов. Аналогичные темы на Европейском, Американском и Азиатском форумах будут обновлены немного позднее.
-
[ModAPI] Пример использования. (How-To)
MatroseFuchs ответил в тему MedvedevTD в Руководства для мододелов
Взаимодействие Python и Flash Возьмем наш мод "Hello World!" и посмотрим как взаимодействуют Python и Flash части мода: Дадим некоторые пояснения: Наш мод состоит из двух файлов - Main.py и Main.swf (скомпилированный файл из нашего проекта ".as"). Т.к. наш мод уже имеет и Flash часть, то и второй файл (Main.swf) мы так же добавим в папку с модом(!), где уже лежит Main.py. В Main.py создадим обработчик событий "events.onFlashReady", который сообщит нам что загрузился Flash файл и в него можно передать информацию. Теперь передадим строку "Hello World!" в Flash методом "flash.call". В это время Flash принимает наши данные методом "gameAPI.data.addCallBack" и передает в функцию-обработчик, которая была подписана на этот коллбэк. Далее функция-обработчик выводит сообщение на сцену, и вызывает методом "gameAPI.data.call" уже функцию в Python файле, но при этом никаких данных мы не передаем. Python файл получает вызов из Flash методом "flash.addExternalCallback", вызывает функцию-обработчик. И наконец функция-обработчик выводит сообщение об успешной работе в лог файл. Battle Mod Немного усложним задачу. Давайте попробуем изменить отображение какого-нибудь игрового эффекта, например изменим отображение получаемого нами урона от снарядов противника. Попробуем отобразить получаемый урон в другом месте, зададим другой цвет, размер шрифта и посмотрим что из этого получится. Комментарии к разработке: С помощью метода "battle.getPlayersInfo" получим ID нашего корабля. Метод "events.onReceiveShellInfo" сообщит нам о событии получения нашим кораблем урона и передаст информацию в функцию-обработчик. Далее функция-обработчик известным способом передаст информацию в Flash. И наконец Flash отобразит полученный урон так, как мы этого хотим. Как результат, мы получили мод, который отображает получаемый урон в заданном нами месте, имеет цвет и размер шрифта такой, какой мы хотим. В моде мы задали расположение сообщения выше центра, ярко-красным и оно отображается в течение трех секунд, если его не сменит другое сообщение. PS Данный мод является лишь идеей а не окончательным вариантом. Вы можете взять эту идею за основу для создания своего собственного мода и возможно именно Ваш мод войдет в официальный модпак. Удачи!- 3 ответа
-
- 5
-
-
[ModAPI] Пример использования. (How-To)
MatroseFuchs ответил в тему MedvedevTD в Руководства для мододелов
Мод "HelloWorld" на FlashAPI Теперь создадим простой Flash мод. Откроем наш проект в редакторе (см. документацию) и немного доработаем скрипт: Скомпилируем файл проекта, и полученный файл "Main.swf" положим в папку с нашим модом. Запустим клиент игры и убедимся что наш мод работает.- 3 ответа
-
- 2
-
-
FlashAPI - DataBridgeModule Методы "Data Bridge Module" позволяют моду передавать или получать данные в/из Python части мода. Доступные методы: gameAPI.data gameAPI.data.call(methodName:String, params:Array):void gameAPI.data.addCallBack(methodName:String, func:Function):void gameAPI.data.removeCallBack(methodName:String = null, callBack:Function = null):void gameAPI.data.call(methodName:String, params:Array) Метод позволяет передать информацию в Python часть мода. Входные параметры: "methodName" - имя, ключ коллбэка, на который подписана функция в Python (в Python - falsh.addExternalCallback(name, func), где "name" соответствует "methodName") "params" - список (Array) передаваемых параметров. gameAPI.data.addCallBack(methodName:String, func:Function) Метод добавляет коллбэк для получения информации из Python'a (в Python - flash.call(name, args)), на который подписана функция во Flash. Входные параметры: "methodName" - имя, ключ коллбэка, на который подписана функция во Flash части мода (Main.swf-файл) "func" - функция-обработчик коллбэка gameAPI.data.removeCallBack(methodName:String = null, callBack:Function = null) Метод удаляет коллбэк, на который подписана функция во Flash. Входные параметры: "methodName" - имя, ключ коллбэка, на который подписана функция во Flash части мода (Main.swf-файл) "callBack" - функция-обработчик коллбэка
-
FlashAPI Для создания Flash части мода нам потребуется редактор под ActionScript 3, подойдут такие как "FlashDevelop", "Adobe Flash Professional", "Adobe Flash Builder" и др. Создадим новый AS3 проект, главный файл назавем "Main", он будет иметь расширение "*.as", и в зависимости от выбранной IDE (редактора) добавим к проекту внешнюю SWC-библиотеку, актуальную версию которой можно будет взять из наших ресурсов. (пример добавления в Flash Builder) Далее в созданном проекте в файле "Main.as" доработаем скрипт для заготовки под наш мод. Теперь мы можем создать Flash часть мода. Как мы видим, наш главный класс имеет базовый класс "ModBase", который содержится в добавленной библиотеке, без этого класса наш Flash файл мода работать не будет.
-
PythonAPI - Devmenu Методы "devmenu" дают возможность использовать меню разработчика. Меню имеет две кнопки: "Constants" - открывает/скрывает список некоторых игровых констант: типы лутбоксов, наград, боевых лент и урона "Reload Mod" - перезагружает мод Доступные методы: devmenu devmenu.enable() constants devmenu.enable() После входа в порт позволяет вызвать меню разработчика. Показать/скрыть меню с помощью комбинацией клавиш "Ctrl" + "F1". Кнопка "Reload Mod" перезагружает мод, который осуществляет вызов меню. При вызове меню из нескольких модов, кнопка "Reload Mod" перезагрузит последний загруженный мод, который вызывает это меню. constants Дает доступ к значению константы. Получение значения конкретной константы (например кредиты), осуществляется следующим способом: constants.LootboxType.CREDITS. Возвращает значение типа int().
-
PythonAPI - Dock Методы "Dock" позволяют получить дополнительную игровую информацию в порту. Доступные методы: dock dock.getActiveShipId() dock.getShipInfoById(shipID) dock.getProfileInfo() dock.getActiveShipId() Данная функция возвращает ID выбранного корабля. dock.getShipInfoById(shipID) Данная функция возвращает объект с информацией о корабле. Входной параметр shipID - идентификатор ID выбранного корабля. dock.getProfileInfo() Данная функция возвращает объект с информацией профиля игрока. Объект содержит статистику (% побед) по кораблям игрока.
-
PythonAPI - UserMusic Методы "UserMusic" позволяют работать с аудиофайлами в формате ".mp3". - базовый путь для папки с аудиофайлами - "Korabli\res_mods\<game_version>\userMusic", базовая папка "userMusic" создается вручную, название папки должно быть таким как указано, в противном случае (если путь или название папки отлично от базового) путь устанавливается методом "userMusic.setPath" (описание ниже) - при формировании списка воспроизведения, все файлы (tuples) в списке перемешиваются автоматически - воспроизведение происходит по замкнутому кругу, по окончанию списка треков проигрыватель возвращается в начало списка продолжая воспроизведение - вариантом для остановки воспроизведения списка может быть следующий способ: в функции обработчике "SetOnPlayTrackCallback" (описание ниже) используйте "userMusic.clearPlaylist()" (описание ниже), произойдет очистка списка воспроизведения и полсле проигрывания текущего трека проигрыватель остановится - для использования собственных звуковых файлов в настройках звука установите флаг в чекбоксе "Использовать свою музыку", иначе при наложении пользовательских звуковых файлов на музыку в игре возможны конфликты и падение клиента игры Доступные методы: userMusic events.onPlayTrack(SetOnPlayTrackCallback) userMusic.setPath(path) userMusic.getPlaylist() userMusic.getMediaFileList(path) userMusic.addFiles(filelist) userMusic.removeFiles(idsList) userMusic.clearPlaylist() userMusic.playNext() userMusic.playPrevious() userMusic.play(id) userMusic.activate(state) events.onPlayTrack(SetOnPlayTrackCallback) Данный event срабатывает на воспроизведение аудиофайла. Метод принимает функцию обработчик "SetOnPlayTrackCallback", которая получает от проигрывателя вкачестве входного аргумента "arg" № индекса проигрываемого трека в списке воспроизведения. userMusic.setPath(path) Метод устанавливает путь к каталогу с аудиофайлами отличный от базового. При наличии базового каталога "Korabli\res_mods\<game_version>\userMusic", новый путь к каталогу "path" добавляется к базовому для поиска аудиофайлов для воспроизведения, добавляемые аудиофайлы перемешиваются. Входной аргумент - "path" путь к каталогу с аудиофайлами. userMusic.getPlaylist() Метод возвращает список "list" кортежей "tuples" с различной информацией об аудиофайлах с расширением "*.mp3" (путь к файлу, название композиции, исполнитель и др.), которые будут воспроизводиться, где индекс кортежа в списке воспроизведения - индекс аудиофайла для проигрывателя. userMusic.getMediaFileList(path) Метод возвращает список "list" с путями к аудиофайлам с расширением "*.mp3". Входной аргумент - "path" путь к каталогу с аудиофайлами. userMusic.addFiles(filelist) Метод добавляет "list" с путями к аудиофайлам с расширением "*.mp3" в основной список воспроизведения аудиофайлов. Входной аргумент "filelist" - list с path-ами к аудиофайлам. userMusic.removeFiles(idsList) Данный метод удаляет выбранные аудиофайлы из списка воспроизведения (userMusic.getPlaylist). Возвращает "True/False" если файл был найден/не найден в списке. Входной арагумент "idsList" - "list" с ID индексами файлов в списке проигрывателя (начиная с 0). userMusic.clearPlaylist() Метод очищает список воспроизведения аудиофайлов (getPlaylist). userMusic.playNext() Воспроизвести следующий трек из списка воспроизведения. Может начать воспроизведение треков со 2-го трека в списке воспроизведения если не вызван метод "userMusic.play(id)", тогда базовым индексом "id" принимается id = 1. userMusic.playPrevious() Воспроизвести предыдущий трек из списка воспроизведения. Может начать воспроизведение треков с 0-го трека если не вызван метод "userMusic.play(id)", тогда базовым индексом "id" принимается id = 1. userMusic.play(id) Метод позволяет воспроизвести выбранный трек из списка воспроизведения. Входной аргумент "id" - индекс трека (tuple в списке проигрывателя), воспроизводится следующий трек из списка, т.е. если выбран id = 0, воспроизводится id = 1 при наличии трека с таким индексом, если в списке воспроизведения не менее двух файлов и указанный индекс отсутствует, то воспроизводится файл id = 1. userMusic.activate(state) Метод активирует/деактивирует роигрыватель аудиофайлов Входной агрумент "state" - принимает "True/False" (False - базовое значение), переключение в False не останавливает воспроизведение.
-
Добрый день! На данный момент в ModAPI пока нет возможности получения информации по типу нанесенного/полученного урона.
-
Добрый день! На данный момент в планах этого нет пока. Как Вы хотели бы обрабатывать информацию из чата, какие инструменты/методы нужны?