Jump to content

Дерево элементов. Переопределение родителя элемента.


Recommended Posts

Насколько я понимаю, у каждого ресурса присутствует карта. Если же карты нет - появляется динамическая карта, дочерними элементами которой являются транспорт, педы и прочее, созданное в ресурсе. При остановке ресурса удаляются элементы, созданные ресурсом (т.е дочерние ресурсу элементы).

Рассмотрим ситуацию.

Существует ресурс "A" и существует ресурс "B". В ресурсе "А" создается транспорт, элементу транспорта применяется родитель - динамическая карта ресурса "B". 
Теперь, раз уж элемент транспорта является дочерним к динамической карте ресурса "B", то по всей видимости он должен быть автоматически удален при отключении ресурса "B". Но к сожалению это не происходит, удаляется транспорт только при остановке ресурса "А".

Возможно ли как то элемент, созданный в одном ресурсе сделать дочерним другому и таким образом получить удаление этого же элемента за счет остановки ресурса нового родителя?


 

 

Link to comment

Не совсем понятно.
Почему бы не использовать on(Client)ResourceStop и удалять все необходимые элементы? Возможно лезть в древо элементов впринципе не очень хорошая идея

Не совсем понятно.
Почему бы не использовать on(Client)ResourceStop и удалять все необходимые элементы? Возможно лезть в древо элементов впринципе не очень хорошая идея

 

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

https://wiki.multitheftauto.com/wiki/SetElementParent
This function does not change when an element will be destroyed - Elements are always destroyed when the resource that created them is stopped

Link to comment

Имеется система респавна авто,  она вынесена в отдельный ресурс.
Собственно, изначально транспорт создается именно в том ресурсе, в котором он и нужен ( взять к примеру какую то работу ). Далее с помощью экспортированной функции юзердата элемента и необходимые данные для респавна транспорта передаются в эту систему.

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

В общем вот и вся трагедия.
 

Link to comment

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

Link to comment
On 15/01/2020 at 16:20, Space_Unicorn said:

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

Я на своем опыте скажу, что это не так.
Почему?
Для маленьких модов да, можно в одном ресурсе, но дальше идут проблемы.
Если проект будет большой и нужно в режиме реального времени обновлять его, например внести изменения в конфиг, то сделать не получится такое если всё в одном ресурсе. Нужно будет перезапускать весь мод.
Также скорость разработки снизится, т.к сделав любое изменение вам придется долго ждать, особенно это касается верстки интерфейсов. Любое изменение в UI вы можете легко проверить в игре, сделав просто рестарт, остальные ресурсы будут работать как и работали.
Лучше когда много ресурсов, каждый ресурс выполняется в своем VM, так безопаснее чем это всё делать в одной.
Также если проект поделен по ресурсам есть другая проблема, это использование так называемых utility функций, их придется кидать в каждый ресурс, при грамотном подходе это решается легко.
Если будете делать командой, то можно легко делать разработку, каждый работает над своим ресурсом и он легко внедряется на сервер.

Организация ресурсов может быть такой:
[assets] // папка с вашыми ресурсами, это могут быть шрифты, картинки, шейдеры, модели, звуки и т.д
[ui] // UI вашего мода, например это может быть какой нибудь банк или автосалон
[engine] // Ваш мод, основные компоненты, база или какие-то функции, utilities
[third_party] // Ресурсы сторонних авторов
[game] // Сами ресурсы реализация, например создание автосалонов на стороне сервера

Также можно организовать папки по элементам
[player]
[vehicle] // например vehicle_tuning, vehicle_wheels.
[property]
и т.д

Это тоже интересный подход.

Edited by Kenix
  • Like 1
Link to comment
15 hours ago, Kenix said:

Я на своем опыте скажу, что это не так.
Почему?
Для маленьких модов да, можно в одном ресурсе, но дальше идут проблемы.
Если проект будет большой и нужно в режиме реального времени обновлять его, например внести изменения в конфиг, то сделать не получится такое если всё в одном ресурсе. Нужно будет перезапускать весь мод.
Также скорость разработки снизится, т.к сделав любое изменение вам придется долго ждать, особенно это касается верстки интерфейсов. Любое изменение в UI вы можете легко проверить в игре, сделав просто рестарт, остальные ресурсы будут работать как и работали.
Лучше когда много ресурсов, каждый ресурс выполняется в своем VM, так безопаснее чем это всё делать в одной.
Также если проект поделен по ресурсам есть другая проблема, это использование так называемых utility функций, их придется кидать в каждый ресурс, при грамотном подходе это решается легко.
Если будете делать командой, то можно легко делать разработку, каждый работает над своим ресурсом и он легко внедряется на сервер.

Организация ресурсов может быть такой:
[assets] // папка с вашыми ресурсами, это могут быть шрифты, картинки, шейдеры, модели, звуки и т.д
[ui] // UI вашего мода, например это может быть какой нибудь банк или автосалон
[engine] // Ваш мод, основные компоненты, база или какие-то функции, utilities
[third_party] // Ресурсы сторонних авторов
[game] // Сами ресурсы реализация, например создание автосалонов на стороне сервера

Также можно организовать папки по элементам
[player]
[vehicle] // например vehicle_tuning, vehicle_wheels.
[property]
и т.д

Это тоже интересный подход.

Есть в этом правда, но что-то внутри меня заставило отказаться от модульности, и я не пожалел. Отдельно у меня только тяжеловесные ресурсы -- звуки,карты и прочие ассеты, которые можно перезагрузить без прерывания игрового процесса

А на счёт конфигов зависит от того насколько лень, можно ведь сделать конфиги которые будут в реалтайме обновляться из xml или json 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...