RU/triggerClientEvent

From Multi Theft Auto: Wiki
Jump to navigation Jump to search

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

Передавать можно почти любые типы данных, включая элементы (element) и сложные вложенные таблицы (table). Данные неэлементных типов МТА, например указатели на xml (xmlNodes) или указатели на ресурсы не могут быть переданы, поскольку у них может и не существовать какого-либо представления на стороне клиента.

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

Синтаксис

bool triggerClientEvent ( [element triggerFor=getRootElement()], string name, element theElement, [arguments...] )

Обязательные аргументы

  • name: Название события на стороне клиента. Оно должно быть зарегистрировано на стороне клиента с помощью addEvent и иметь хотя бы один обработчик, добавленный с помощью addEventHandler.
  • theElement: Элемент, который будет источником source события. Это может быть, например, другой игрок, или корень (root element), если это непринципиально.

Дополнительные аргументы

NOTE: When using optional arguments, you might need to supply all arguments before the one you wish to use. For more information on optional arguments, see optional arguments.

  • triggerFor: Событие будет вызвано для всех игроков ( player ) которые являются потомками этого элемента. По умолчанию это корень, поэтому событие будет вызвано для всех элементов (для всех игроков). Если вы укажете только конкретного игрока, событие будет вызвано только для него.
  • arguments...: Список аргументов, которые будут передаваться вместе с событием. Можно передавать любые типы lua (кроме функций), а также любые элементы (element).

Вывод

Возвращает true если вызов события был успешно сделан, false если указаны некорректные аргументы.

Примеры

Пример 1

В этом примере сервер передает простое сообщение "Превед медвед!" всем клиентам.

Click to collapse [-]
Client
function greetingHandler ( message )
    outputChatBox ( "The server says: " .. message )
end
addEvent( "onGreeting", true )
addEventHandler( "onGreeting", getRootElement(), greetingHandler )
Click to collapse [-]
Server
function greetingCommand ( playerSource, commandName )
    triggerClientEvent ( "onGreeting", getRootElement(), "Превед медвед!" )
end
addCommandHandler ( "greet", greetingCommand )

Когда выполняется консольная команда "greet" (вводится через консоль сервера или игрока), на стороне сервера вызывается функция greetingCommand. Она вызывает срабатывание на стороне клиента события onGreeting с параметром "Превед медвед!". В результате вызывается функция-обработчик greetingHandler, которая и пишет полученное с сервера сообщение в чат.


Пример 2

В этом примере сервер передает простое сообщение "Превед медвед!" только одному клиенту.

Click to collapse [-]
Client
function greetingHandler ( message )
    outputChatBox ( "The server says: " .. message )
end
addEvent( "onGreeting", true )
addEventHandler( "onGreeting", getRootElement(), greetingHandler )
Click to collapse [-]
Server
function greetingCommandOne ( playerSource, commandName, playerName )
    if playerName then
        local thePlayer = getPlayerFromName ( playerName )
        if thePlayer then
            triggerClientEvent ( thePlayer, "onGreeting", getRootElement(), "Превед медвед!" )
        else
            -- указано неправильное имя
        end
    else
        -- не указано имя
    end 
end
addCommandHandler ( "greet_one", greetingCommandOne )

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

Смотрите также