Skip to content

Работа с инжектом в функции

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

Система приоритетов

В Metrostroi Extensions у каждого инжекта в функцию есть приоритет.

  • Функции с негативным приоритетом будут выполнены ДО вызова стандартной функции. Чем меньше значение приоритета, тем раньше данная функция будет вызвана (тоесть, функция с приоритетом -100 будет вызвана раньше, чем функция с приоритетом -10).
  • Функции с положительным приоритетом будут выполнены ПОСЛЕ вызова стандартной функции. Чем больше значение приоритета, тем раньше данная функция будет вызвана (тоесть, функция с приоритетом 100 будет вызвана раньше, чем функция с приоритетом 10)
  • Функции с приоритетом 0 не может существовать - такой функцией считается стандартная функция

Возвраты (return) из функции

Если последним аргументом внутри вашей инжектированной функции вернуть MEL.Return, то произойдет return из исходной функции. Все аргументы до этого вернуться из исходной функции.

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

Аргументы в инжектированную функцию

Первым аргументом, передающимся в инжектированную функцию всегда является энтити вагона.

Если инжектированная функция имеет положительный приоритет - то вторым аргументом будет то, что вернула стандартная функция. Последующие аргументы будут такие же, как и те, что передавались в исходную функцию.

Если инжектированная функция имеет отрицательный приоритет - то последующие аргументы будут такие же, как и те, что передавались в исходную функцию.

MEL.InjectIntoSharedFunction - произвести инжект в функцию на сервере и клиенте

MEL.InjectIntoSharedFunction(ent_or_entclass, function_name, function_to_inject, priority) - произвести инжект в функцию на сервере и клиенте

(scope: Shared)

  • ent_or_entclass - энтити вагона или его класс
  • function_name - имя функции, в которую необходимо произвести инжект
  • function_to_inject - функция, которая будет инжектирована
  • [priority] - приоритет инжекта. См. система приоритетов

MEL.InjectIntoClientFunction - произвести инжект в функцию на клиенте

MEL.InjectIntoClientFunction(ent_or_entclass, function_name, function_to_inject, priority) - произвести инжект в функцию на клиенте

(scope: Client)

  • ent_or_entclass - энтити вагона или его класс
  • function_name - имя функции, в которую необходимо произвести инжект
  • function_to_inject - функция, которая будет инжектирована
  • [priority] - приоритет инжекта. См. система приоритетов

MEL.InjectIntoServerFunction - произвести инжект в функцию на сервере

MEL.InjectIntoServerFunction(ent_or_entclass, function_name, function_to_inject, priority) - произвести инжект в функцию на сервере

(scope: Server)

  • ent_or_entclass - энтити вагона или его класс
  • function_name - имя функции, в которую необходимо произвести инжект
  • function_to_inject - функция, которая будет инжектирована
  • [priority] - приоритет инжекта. См. система приоритетов

MEL.InjectIntoSystemFunction - произвести инжект в функцию системы

Warning

В данный момент данный функционал работает только для систем, которые имеют флаг DontAccelerateSimulation - то есть, которые не используют Turbostroi.

Команда разработки Metrostroi Extensions в данный момент ищет возможности для реализации работы инжекта в функции, использующие Turbostroi.

MEL.InjectIntoSystemFunction(system_name, function_name, function_to_inject, priority) - произвести инжект в функцию системы

(scope: Shared)

  • system_name - имя системы
  • function_name - имя функции, в которую необходимо произвести инжект
  • function_to_inject - функция, которая будет инжектирована
  • [priority] - приоритет инжекта. См. система приоритетов