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

[ALL] UB2 Shared Libs (сборка от 13.09.2024)

В этой теме 6 комментариев

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

5 558
[MRDRS]
Мододел
3 024 публикации
1 465 боёв

Всем привет!

СКАЧАТЬ

(сборка от 13 сентября 2024)

 

Это техническая модификация, которая содержит в себе функции и компоненты для разметки Unbound2 для моддинга. Библиотека призвана помочь в разработке модификаций, чтобы не плодить один и тот же код в нескольких модах. А также при необходимости обновления небольшого участка кода какого-то компонента не придется переделывать все моды с ним (его копиями). 

 

Содержимое библиотеки:

Скрытый текст

Компоненты:

ModCheckBox - чекбокс

ModSlider - ползунок

ModOptionsButton - кнопка вызова элемента опции

ModDraggableElement - перетаскивание по экрану

ModRadioButtons - радиобатон (выбор исключающий остальные в группе)

 

Функции (основные макросы):

MOD_GET_TRANSLATE - получение авторского перевода

MOD_CREATE_SHIP_PARAMS - активация в DH информации о параметрах кораблей в бою

MOD_GET_SHIP_TTX - получение данных о ТТХ корабля игрока

MOD_MOUSE_ACTIVE_SCOPE - получение данных об активации мыши (нажатие Ctrl)

MOD_GET_UPREFS, MOD_VAR_BOOL, MOD_VAR_NUM - чтение сохраненных настроек пользователя

MOD_HDIVIDER, MOD_VDIVIDER - горизонтальный и вертикальный разделитель с предустановленными отступами 2px и 6px соответственно 

MOD_HP_SCOPE - получение данных из компонента health

 

Использование:

- Скачать архив с библиотекой

- Распаковать содержимое архива в папку модификаций клиента игры, к примеру в C:\Games\Korabli\bin\ABCD\res_mods\, где ABCD - номер актуального билда игры (папка с наибольшим числом в названии). 
 

Если вы используете хотя бы один из моих модов и устанавливаете их вручную (не через модпаки), то подпишитесь на эту тему, чтобы не пропустить новости об обновлении библиотеки. 

 

--

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

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

Изменено пользователем AutoSpy
  • Плюс 6

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


Ссылка на публикацию
3 759
[GA]
Разработчик, Коллекционер
2 686 публикаций
23 138 боёв

Опубликовано.

  • Плюс 2

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


Ссылка на публикацию
5 558
[MRDRS]
Мододел
3 024 публикации
1 465 боёв

ИНТЕРАКТИВНЫЕ ЭЛЕМЕНТЫ

 

К таким элементам относятся те, которые позволяют взаимодействовать с ними пользователю (как правило мышью) для управления соответствующими значениями опций: чекбокс, радиобатон, ползунок и т.д.

 

Особенности интерактивных элементов данной библиотеки:

- Самостоятельное взаимодействие с файлом пользовательских настроек preferenses.xml. То есть в коде не нужно обрабатывать события этого элемента, а также передавать ему заранее считанные значения из файла настроек.

- При отсутствии сохраненных настроек значение может быть взято из словарика (dict), объявленного в модификации и переданного элементу в качестве аргумента.

- Возможность указать название "родительской" опции, на основании значения которой элемент будет активен или наоборот - неактивен.

 

Пример записи опции в файле настроек preferenses.xml:

<myMod_showLevel> значение </myMod_showLevel>

Интерпретация в аргументах:

<_setKey_delim_setProp> значение </_setKey_delim_setProp>

 

Пример объявления словарика со значениями по умолчанию:

(def constant MY_MOD_DEFAULT_PARAMS 
   {
      showLevel: true, # for ModCheckBox
      alpha: 70, # for ModSlider
   }
)

 

Стандартные аргументы интерактивных элементов

(обязательные выделены зеленым цветоморанжевым - рекомендуемые)

 

Название Тип Значение по умолчанию Описание
_setKey str нет, обязательный параметр Первая часть в названии параметра, хранящегося в файле настроек. Значение должно быть уникальным по отношению к другим модификациям, например название мода: teamsMiniPanel
_setProp str нет, обязательный параметр Вторая часть в названии параметра, хранящегося в файле настроек. Это название самой опции, которое используются в коде как переменная, например: showLevel
_caption str нет Отображаемое название опции. При отсутствии аргумента будет подставлено значение _setProp
_defaults dict нет Константа или переменная (тип dict - словарик), в которой указано значение опции по умолчанию. При отсутствии этого аргумента значение опции будет установлено в false или 0
_delim str _ (знак подчеркивания) Соединительная часть между _setKey и _setProp. Используется для более удобного чтения файла при поиске в нем записанных значений
_enabled bool true Значение true/false, отвечающее за  активацию элемента, то есть доступен  он к взаимодействию с пользователем или нет
_parentProp str нет Название опции, отвечающее за активацию элемента, то есть доступен он к взаимодействию с пользователем или нет. Игнорируется если ничего не указано
_watchPrefs bool true Дополнительный аргумент для включения/отключения считывания значения опции из файла настроек


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

ModCheckBox - альтернатива клиентскому CheckBox (разг.: чекбокс, флажок).

Скрытый текст

 

В коде элемент объявлен следующим образом:


(def element ModCheckBox (_caption:str='', _setProp:str='', _setKey:str='', _delim:str='_', _defaults:dict={}, _enabled:bool=true, _parentProp:str='', _watchPrefs:bool=true) layout=true)

 

Используются стандартные аргументы элементов, своих уникальных нет.

 

Пример использования:


(element ModCheckBox 
   _setKey='myMod' 
   _setProp='showLevel' 
   _caption='Отображать уровень корабля'
   _defaults = "MY_MOD_DEFAULT_PARAMS"
)

 

 

ModSlider - альтернатива клиентскому Slider (разг.: ползунок).

Скрытый текст

 

В коде элемент объявлен следующим образом:


(def element ModSlider (_caption:str='', _showValue:bool=false, _setProp:str='', _setKey:str='', _delim:str='_', _defaults:dict={}, _enabled:bool=true, _parentProp:str='', _watchPrefs:bool=true, _min:number=0, _max:number=100, _width:number=174) layout=true)

 

Используются стандартные аргументы элементов, а также есть свои:

 

Название Тип Значение по умолчанию Описание
_showValue bool false Отображать или нет текущее значение в скобках после названия опции. Например: Прозрачность (10)
_min number 0 Минимальное значение "ползунка" (крайнее левое положение)
_max number 100 Максимальное значение "ползунка" (крайнее правое положение)
_width number 174 Ширина элемента

 

Пример использования:


(element ModSlider 
   _setKey='myMod' 
   _setProp='alpha' 
   _caption='Прозрачность' 
   _defaults = "MY_MOD_DEFAULT_PARAMS"
   _showValue=true 
   _min=5
   _max=90
   _width=140
)

 

 

ModRadioButtons - радиобатон (выбор исключающий остальные в группе)

Скрытый текст

В коде элемент объявлен следующим образом:


(def element ModRadioButtons (_caption:str='', _itemsCount:number=0, _itemsCaptions:array=[], _hflow:bool=false, _setProp:str='', _setKey:str='', _delim:str='_', _defaults:dict={}, _watchPrefs:bool=true)

Используются стандартные аргументы элементов, а также есть свои:

Название Тип Значение по умолчанию Описание
_itemsCount number 0 Количество элементов в группе
_itemsCaptions array [] Массив со строковыми значениями названий каждого элемента. По умолчанию название элемента Тип 1, Тип 2 и т.д. Если _itemsCount не указан, но заполнен данный параметр, то количество элементов будет равно количеству элементов этого массива
_hflow bool false Указывает на то, что нужно расположить элементы горизонтально
       

 

Пример использования:


(element ModRadioButtons
   _caption = "tr('IDS_COLORBLIND_FILTER_MODE') + ' (' + toLower(tr('IDS_SHIP_TYPES')) +'):'"
   _itemsCount=3
   _hflow=true
   _setProp='iconType'
   _setKey = "MOD_TM_PREF_KEY"
   _defaults = "MOD_TM_PARAMS"
)

 

 

 


 

Пост будет обновляться по мере появления новых интерактивных элементов или изменений в библиотеке.

Изменено пользователем AutoSpy
  • Плюс 1

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


Ссылка на публикацию
5 558
[MRDRS]
Мододел
3 024 публикации
1 465 боёв

РАБОТА С ФАЙЛОМ ПОЛЬЗОВАТЕЛЬСКИХ НАСТРОЕК PREFERENCES.XML

 

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

Чтение записей и их значений выполняется в коде разметки с помощью специального компонента в DataHub - userPrefs, а запись - специальной функцией python.

 

Ниже в сокращённом виде предоставлена структура файла, где показаны ключевые разделы в которых по традиции модификации хранят значения своих опций и параметров:

<preferences.xml>
	<scriptsPreferences>
		<ui>
			<elementsGroupExpand> # значения типа bool
				<myIndicator_enabled> true </myIndicator_enabled>
			</elementsGroupExpand>
          
			<chatBoxWidth> # значения типов number и string
				<myIndicator_alpha> 75.0000 </myIndicator_alpha>
			</chatBoxWidth>
		</ui>
    </scriptsPreferences>
</preferences.xml>

 


 

Для организации работы с компонентом userPrefs в библиотеке представлено несколько макросов, которые используются в scope элемента.

 

(def macro MOD_GET_UPREFS (_isActive:expression=true) - главный макрос, который обращается к компоненту userPrefs и создает два словарика с переменными bool и number. Макрос получает данные при загрузке кода (вход в бой, к примеру) , а обновляет их только если активен курсор мыши (зажата клавиша Ctrl). Это позволяет снизить влияние на FPS при установке и обновлении значений интерактивных элементов. Но есть дополнительная возможность ограничить обновление данных даже при зажатом Ctrl через единственный необязательный аргумент _isActive - выражение, результатом которого должно быть true или false (по умолчанию - true).

 

Макросы объявления переменных и присвоения им значений из userPrefs:

 

(def macro MOD_VAR_BOOL (_name:expression, _key:expression, _defaults:expression={}, _delim:expression='_') # тип bool

(def macro MOD_VAR_NUM (_name:expression, _key:expression, _defaults:expression={}, _delim:expression='_') # тип number

 

Аргументы этих макросов схожи по назначению со стандартными аргументами интерактивных элементов:

_name - название переменной и значения аналогично _setProp, обязательный аргумент.

_key - значение аналогичное _setKey, обязательный аргумент.

_defaults - словарик значений по умолчанию, желательно передать в макрос.

_delim - разделитель. По умолчанию знак подчеркивания.

 

В файле preferences.xml это выглядит так:

<_key_delim_name> значение </_key_delim_name>

 

Пример использования:

(scope
	# Объявление словаря значений по умолчанию
	(var defaultParams:dict = {enabled: true, alpha: 100})
 	# Объявление словарей uPrefsBool и uPrefsNum с данными из компонента userPrefs
	(macro MOD_GET_UPREFS)
 	# Объявление переменной с именем enabled с типом bool и присвоение ей значения из uPrefsBool
	(macro MOD_VAR_BOOL _name = "'enabled'" _key = "'myIndicator'" _defaults = "defaultParams")
	# Объявление переменной с именем alpha с типом number и присвоение ей значения из uPrefsNum
	(macro MOD_VAR_NUM _name = "'alpha'" _key = "'myIndicator'" _defaults = "defaultParams")
)

# Примеры оперирования полученными переменными
(bind visible "enabled")

(style
	(bind alpha "alpha")
)

 

Изменено пользователем AutoSpy
  • Плюс 2

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


Ссылка на публикацию
5 558
[MRDRS]
Мододел
3 024 публикации
1 465 боёв

ВСПОМОГАТЕЛЬНЫЕ ЭЛЕМЕНТЫ

 

ModOptionsButton - элемент вызова меню настроек мода. Представляет из себя кнопку в виде пиктограммы шестеренки (как пример такая кнопка есть у мини-карты). При нажатии на кнопку происходит открытие вашего элемента, содержащего набор компонентов для настроек: чекбоксы, слайдеры и т.д..

 

Объявление в коде:

(def element ModOptionsButton (_elemName:str, _posX:number=0, _posY:number=0) layout=true)

 

Аргументы:

_elemName - название вашего элемента-меню с набором компонентов для настройки мода. Обязательный параметр.

_posX и _posY - начальное положение меню относительно кнопки. По умолчанию 0.

 

Использование:

Скрытый текст

(def element MyModMain ()
	(scope
		...
	)
	
	...
 
	(element ModOptionsButton 
			_elemName='MyModMenu'
			_posX=10
			_posY=20
	)
 
 	...
)

(def element MyModMenu ()
	(scope
		...
	)
	
 	(tf
		(text='Настройки моего мода')
	)
	
 	(macro MOD_HDIVIDER) 
 
	(element ModCheckBox _caption='Отображать панель' _setProp='showPanel' _setKey='myMod' _defaults = "MY_MOD_DEFAULT_PARAMS")
	(element ModSlider _caption='Прозрачность' _setProp='alpha' _setKey='myMod' _defaults = "MY_MOD_DEFAULT_PARAMS") 
)
Изменено пользователем AutoSpy
  • Плюс 2

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


Ссылка на публикацию
5 558
[MRDRS]
Мододел
3 024 публикации
1 465 боёв

ФУНКЦИОНАЛ ПЕРЕТАСКИВАНИЯ МОДА ПО ЭКРАНУ (DRAG AND DROP)

 

ModDraggableElement - этот элемент необходимо поместить в блок кода элемента, за который пользователь будет перетаскивать мод по экрану.

Аргументы (обязательные):

Название Тип Значение по умолчанию Описание
_wndName str нет уникальное имя перемещаемого элемента в пределах всех модификаций игры, как правило - ключ для хранения настроек в файле preferences.xml
_defaults dict нет

словарик со значениями позиции элемента по осям X и Y по умолчанию

_defaults{positionX, positionY}

_elemSizes dict нет _elemSizes{width, height} - ширина и высота элемента для исключения случаев вылета за пределы экрана
_showHint bool true Отображать или нет всплывающую подсказку "Перенесите панель в любую удобную точку экрана (удержание левой кнопки мыши)"
_showBg bool false Отображать подложку

 

 

MOD_DRAGGABLE_GET_POSITION - получение сохраненных данных о позиции мода на экране (хранятся в файле preferences.xml).

Аргументы _wndName и _defaults

Результат функции: _dragPosX и _dragPosY (описание ниже)

 

MOD_DRAGGABLE_SET_POSITION - установка позиции мода на экране.

Аргументы:

Название Тип Значение по умолчанию Описание
_dragPosX number нет позиция элемента по оси X
_dragPosY number нет

позиция элемента по оси Y

 

 

Пример работы с этим функционалом можно посмотреть в моём моде Таймер боя

Изменено пользователем AutoSpy
  • Плюс 1

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


Ссылка на публикацию

×