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

[Unbound 2] Практический пример работы с элементом "Компас"

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

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

13 656
[WG]
Разработчик
7 022 публикации
6 426 боёв

Всем привет.

Время идёт, меняются старые решения, оптимизируются, улучшаются.
Это нормальный процесс для большого проекта, но иногда подобные процессы затрагивают привычные методы модифицирования клиента игры.

 

В данной теме я опубликую решение которое поможет работать с элементом "Компас" и его отдельными частями в текущих реалиях.


Вообще есть два решения. 

Первое решение, это частичная работа с файлом battle_layout.xml и редакция файла compass.unbound

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

Плюс ко всему при оптимизации клиента игры некоторые части попросту убираются из него, переезжая в другой мир.

 

Второе решение, это работа с Unbound 2.

Собственно само решение выглядит так:
Создаём файл Mod_compass.unbound
И вносим туда следующий код

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

(def element CompassContainer () layout=true dispatch_size_change=true
    (scope
        (var selfAvatarEntity:gfx =  "$datahub.getSingleEntity(CC.playerAvatar)")
        (var isAlive:bool = "selfAvatarEntity.health.isAlive"  (event "selfAvatarEntity.health.evIsAliveChanged"))
 
        (var stageComponent:gfx = "$datahub.getSingleEntity(CC.stage).stage")
        (var stageWidth:number = "stageComponent.width" (event "stageComponent.evStageSizeChanged"))
        (var stageHeight:number = "stageComponent.height" (event "stageComponent.evStageSizeChanged"))
        (var compassScaleRatio:number = "0.6")
        (var leftOffset:number = "stageWidth / 2 - COMPASS_SIZE * compassScaleRatio / 2 - 20")
        (var bottomOffset:number = "stageHeight / 2 - COMPASS_SIZE * compassScaleRatio / 2 - 250")
    )
    (style
        (position = "absolute")
        (width = "COMPASS_SIZE")
        (height = "COMPASS_SIZE")
    )
 
    (controller $Instance renderer='CompassContainerInstance'
        (bind enabled "isAlive")
        (exprs
            (bind scaleX "compassScaleRatio")
            (bind scaleY "compassScaleRatio")
            (style
                (bind left "leftOffset")
                (bind bottom "bottomOffset")
            )
        )
    )
)

 

Оригинальный кусок кода в файле compass.unbound выглядит так (это просто для сравнения!):

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

 


(def element CompassContainer () layout=true dispatch_size_change=true
	(scope
		(var selfAvatarEntity:gfx =  "$datahub.getSingleEntity(CC.playerAvatar)")
		(var isAlive:bool = "selfAvatarEntity.health.isAlive"  (event "selfAvatarEntity.health.evIsAliveChanged"))
	)
	(style
		(position = "absolute")
		(bind width "COMPASS_SIZE")
		(bind height "COMPASS_SIZE")
	)

	(controller $Instance renderer='CompassContainerInstance'
		(bind enabled "isAlive")
	)
)

 

В файле unbound_settings.xml добавляем строку:

<file>./gui/unbound2/pc/battle/Mod_compass.unbound</file>

ВНИМАНИЕ!!! данная строка обрабатывается по правилу сортировки алфавита!
Первыми обрабатываются спецсимволы, например (!)
Затем заглавные буквы (A, B, C, D) в алфавитном порядке
Затем строчные буквы (a, b, c, d) в алфавитном порядке

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

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

443286969a6c516f011b35b62b03739e.png

 


 

Настройки размещения элемента.

 

(var compassScaleRatio:number = "0.6") - переменная отвечает за скалирование объекта, где 1.0 является 100% размером объекта

(var leftOffset:number = "stageWidth / 2 - COMPASS_SIZE * compassScaleRatio / 2 - 20") - переменная для размещения по горизонтали, где 20 это компенсация отступа объекта указанная в файле battle_layout и в текущем виде выставляет элемент по центру 

(var bottomOffset:number = "stageHeight / 2 - COMPASS_SIZE * compassScaleRatio / 2 - 250") - переменная для размещения по вертикали, где 250  это смещение от центра экрана

 


 

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

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

(def element CompassContainerInstance () layout=true
	(scope
		(var aircarrierEntity:gfx = "$datahub.getSingleEntity(CC.aircarrier)")
		(var squadronCameraMode:str = "aircarrierEntity.aircarrier.squadronCameraMode" (event "aircarrierEntity.aircarrier.evSquadronCameraModeChanged"))
		(var isLastLookCamera:bool = "squadronCameraMode != SquadronCameraModes.DEFAULT")
	)
	(style
		(position = "absolute")
		(bind width "COMPASS_SIZE")
		(bind height "COMPASS_SIZE")
	)

###	(element Compass
###		(style (position = "absolute"))
###	)

	(element ShipDollAirDefenseSectors
		(style
			(position = "absolute")
			(top = 100px)
			(left = 100px)
		)
	)

	(element ShipDoll
		(style
			(position = "absolute")
			(top = 100px)
			(left = 100px)
		)
		(bind visible "aircarrierEntity == null || !isLastLookCamera")
	)

	(element Frustum "200"
		(style (position = "absolute"))
	)

	(element GunsRotator
		(style (position = "absolute"))
	)

	(element CrosshairRotatorLock)
)

 

 

и в итоге получаем такую картину:

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

6579a06b9154287f84e76de51bb5e8b9.jpg

 

 


 

Чуть не забыл :)
Здесь прикреплю архивчик с готовым решением в качестве образца gui.zip
Верю в вас, что вы понимаете что файл unbound_settings.xml может иногда изменятся и вы конечно будете сверять с оригинальным файлом из каждого патча (ну строку то вписывать надо же), это не сложно :)
Поможет вам в этом, размечтательная тулза по извлечению файлов клиента игры из пэкэджей, вот из этой темы: [ALL] WOWS Unpack Tool: распаковка ресурсов клиента игры.

 

А, вспомнил!

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

 

С уважением,

  • Плюс 15
  • Круто 3

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


Ссылка на публикацию
Поделиться на других сайтах
2 442
[CROSS]
Участник
2 597 публикаций

Ой какой же большой респект Тимуру, но пытаюсь смотреть стрим, а тут такая инфа, выйду из клиента и начну эксперименты!!!

Стрим буду смотреть на 2 монике

ПыСы я не мододел, я просто играю и хочу играть комфортно

А тут Тимур подогнал образцы - вообще кайф :Smile_honoring:

Изменено пользователем McLaren
  • Плюс 2
  • Круто 1

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


Ссылка на публикацию
Поделиться на других сайтах
718
[RUSI4]
[RUSI4]
Участник, Коллекционер
1 853 публикации
12 324 боя

Благо дарю.

Только не усе вЪед:cap_yes:ут в сию премудрость и пойдёть волна словестная

  • Плюс 1
  • Минус 2

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


Ссылка на публикацию
Поделиться на других сайтах
2 442
[CROSS]
Участник
2 597 публикаций

Тимур @MedvedevTD, ты кросаВА!!! Угадал с масштабом и я совместил это с угломером :Smile_honoring:

:Smile_medal::Smile_medal:

Тимуру медаль на всю спину из золота!!!!!!!!

Но тонким слоем, дабы по офису её мог носить и хвастаться полезностью для игроков:Smile_medal:

Изменено пользователем McLaren
  • Ха-Ха 3

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


Ссылка на публикацию
Поделиться на других сайтах
0
[VCHK]
Участник
154 публикации
1 138 боёв

Ничего не понял, но это улучшение и это хорошо +

  • Ха-Ха 1
  • Минус 1

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


Ссылка на публикацию
Поделиться на других сайтах
718
[RUSI4]
[RUSI4]
Участник, Коллекционер
1 853 публикации
12 324 боя

Здравия желаю

Тимур, что то поламалося. Нать заново "Создаём файл Mod_compass.unbound.И вносим туда следующий код" ?

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

shot-19_09.16_08_38.15-0954.thumb.jpg.01b491b9906dcd4b4d821414d654c1d9.jpg

Усё исправил и подправил

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


shot-19_09.16_10_35.41-0836.thumb.jpg.979f93f17b843e721e88ab7e75285772.jpg

 

 

  • Минус 1

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


Ссылка на публикацию
Поделиться на других сайтах
718
[RUSI4]
[RUSI4]
Участник, Коллекционер
1 853 публикации
12 324 боя

Здравия желаю, Тимур.

Кукла категорически не желает перемещаться в центр.

В чём может быть проблема, файлы извлёк новые усё переделал shot-19_10.16_13_58.12-0223.thumb.jpg.426d0f4af1c7872196d4a764c71b75ae.jpg

(def element CompassContainer () layout=true dispatch_size_change=true
    (scope
        (var selfAvatarEntity:gfx =  "$datahub.getSingleEntity(CC.playerAvatar)")
        (var isAlive:bool = "selfAvatarEntity.health.isAlive"  (event "selfAvatarEntity.health.evIsAliveChanged"))
        
        (var stageComponent:gfx = "$datahub.getSingleEntity(CC.stage).stage")
        (var stageWidth:number = "stageComponent.width" (event "stageComponent.evStageSizeChanged"))
        (var stageHeight:number = "stageComponent.height" (event "stageComponent.evStageSizeChanged"))
        (var compassScaleRatio:number = "0.6")
        (var leftOffset:number = "stageWidth / 2 - COMPASS_SIZE * compassScaleRatio / 2 - 20")
        (var bottomOffset:number = "stageHeight / 2 - COMPASS_SIZE * compassScaleRatio / 2 - 250")
    )
    (style
        (position = "absolute")
        (bind width "COMPASS_SIZE")
        (bind height "COMPASS_SIZE")
    )

    (controller $Instance renderer='CompassContainerInstance'
        (bind enabled "isAlive")
        (exprs
            (bind scaleX "compassScaleRatio")
            (bind scaleY "compassScaleRatio")
            (style
                (bind left "leftOffset")
                (bind bottom "bottomOffset")
            )
        )
    )
)

(def element CompassContainerInstance () layout=true

Изменено пользователем SELEZEH1961
  • Минус 1

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


Ссылка на публикацию
Поделиться на других сайтах

×