Jump to content

MTA мод на C++


Recommended Posts

цель: создать среду для написания мода на С++. lua будет тоже использоваться на стороне сервера (миссии) и клиента (только GUI + визуальные эффекты).

скачал шаблонный проект модуля отсюда: https://wiki.multitheftauto.com/wiki/Modules.

вроде бы разобрался что к чему, а именно как делать функции в C++ модуле чтобы потом они были доступны в lua.

Вопросы:

1) как перехватывать события https://wiki.multitheftauto.com/wiki/Ser ... ing_Events. в модуле?

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

Писал в пм lil Toady но он не ответил. Может он занят или не знает, хз))

------

Недавно копался в исходниках МТА, (расскажу как я понял, так что поправьте если что не так) и увидел как организован мультилпеер МТА а именно: он состоит из системной части CORE и mods (моды).

Теоретически в папке моды могут лежать много игровых режимов, я там нашел только deathmatch.

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

Так вот, абстракция игрового режима предполагает наличие API логики и новые события (Events). В режиме же deathmatch реализовано максимально возможное количество событий и базовая логика и он является основным: на нем даже построены гоночные режимы. хотя было бы разумней сделать режимы: race / deathmatch / RPG...

приведу примеры:

режим гонка: API расставить тачки / пикапы починки / смены модели авто у игрока / цвета / итд

события: взрыв авто, повреждение авто, итд

режим RPG: API достаточно большое: системы бaнд, зданий, бизнесов, фабрик, территорий, автомобили, дома, скиллы (важно), миссии (локальные (per player), глобальные, групповые (банда, или иное множество игроков)).

события: только 3 штуки! PvP, PvE, и Pulse() мира.

режим deathmatch: API: распределение по командам, установки скина команде, итп

события: смерть члена команды, смерть игрока, захват флага, убийство целевого игрока.итд...

Edited by Guest
Link to comment

Не надо мне в ПМ писать, я их даже не читаю.

Если знаком с чистым C/C++ (не .NET), то пульсы - это цикл в котором выполняются все действия сервера. Если запустишь МТА сервер, то увидишь там в серой строке ФПС - это как раз сколько пульсов сделано в секунду, следовательно их количество зависит от нагрузки. Но модули предназначены не для того чтобы писать в них моды, без луа это просто не возможно. Они предназначены для расширения функционала сервера, например mysql, socket'ы, irc модули. События модуль не видит вообще, как и МТАшные луа функции, их можно связать только через ресурс (вызывать функции модуля по событию, и связать функции МТА с модулем)

Link to comment

да, вариант через модули не "честный" но пока что не вижу другого способа, как реализовывать большие проекты не на луа (куча игроков, заглянем в будущее, 500+ игроков, куча объектов, которые обрабатываются в циклах итд...). обновил 1 пост, там представлен 2 вариант написания модов на С++.

зы: спс за ответ, lil Toady.

Link to comment

Да, структура МТА изначально предполагала работу с несколькими модами и играми на одном движке (race, deathmatch/game_sa, game_vc...). Но в итоге deathmatch был развит на столько, что потребность в других модах отпала, всё реализуется в ресурсах. По сути deathmatch больше совсем не deathmatch, просто название модуля и структура МТА так и тащится уже многие годы.

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

А Ресурсы это небольшие кусочки в общей картине, они могут общаться друг с другом через экспорты и собственные эвенты. Большой гейм-мод не должен состоять из одного ресурса, лучше разделять логику на несколько разных. Так же очень важно понять как работает древо элементов, если найти правильный подход можно невероятно сильно оптимизировать свои ресурсы.

Link to comment

Я так понял, что речь о том, что при большой нагрузке юзать Луа скрипты уже не так эффективно (: Ну вроде как они медленнее. Это не так. Как раз-таки гибкость, простота и функциональность Lua позволяет создавать большие, но простые для понимания, моды. Новый человек в МТА коммьюнити, который пришел к нам с сэмпа, тоже искал путь написания модов на С++. Я ему в двух словах по асе рассказал о разных вкусностях Lua и он задумался.

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

Link to comment

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

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...