Создание связанных событий (BindableEvent)
Связанные события (BindableEvent) позволяют создавать свои события в игре и обмениваться этими событиями между скриптами одного вида. Отправка событий происходит в одностороннем порядке без обратной связи между скриптами, т.е. один скрипт отправляет событие и не ждет выполнения этого события от другого скрипта.
Схематично это выглядит так:
Script 1 → Script 2
или
LocalScript 1 → LocalScript 2
Для создания связанных событий:
1. Добавляем «BindableEvent» к ServerScriptService (если обмениваемся событиями между Script) или ReplicatedStorage (если обмениваемся событиями между LocalScript).
2. В одном скрипте указываем условие для возникновения события и отправляем событие в другой скрипт с помощью команды «BindableEvent:Fire()».
3. В другом скрипте принимаем событие и указываем действия при выполнении события с помощью функции «BindableEvent.Event:Connect(function()».
Пример
Событие для создания парта в игре с помощью двух серверных скриптов (Script).
В первом скрипте отправляем событие через 10 секунд после запуска игры:
local BindableEvent = game.ServerScriptService:WaitForChild("Event")
wait(10)
BindableEvent:Fire()
Во втором скрипте принимаем событие из первого скрипта и создаем новый парт:
local BindableEvent = game.ServerScriptService:WaitForChild("Event")
BindableEvent.Event:Connect(function()
local part = Instance.new("Part")
part.Parent = workspace
part.Position = Vector3.new(0, 1, 0)
part.Name = "Новый парт"
end)
Создание связанных функций (BindableFunction)
Связанные функции (BindableFunction) позволяют создавать свои события в игре и обмениваться этими событиями между скриптами одного вида. Отправка событий происходит в двухстороннем порядке с установлением обратной связи между скриптами, т.е. один скрипт отправляет запрос с событием и ждет выполнение этого события от другого скрипта.
Схематично это выглядит так:
Script 1 → Script 2 → Script 1
или
LocalScript 1 → LocalScript 2 → LocalScript 1
Для создания связанных функций:
1. Добавляем «BindableFunction» к ServerScriptService (если обмениваемся событиями между Script) или ReplicatedStorage (если обмениваемся событиями между LocalScript).
2. В одном скрипте отправляем запрос с помощью команды «BindableFunction:Invoke()»
(можно поместить эту команду в переменную, например: «local invokeEvent = BindableFunction:Invoke()»).
3. В другом скрипте принимаем запрос, выполняем нужные действия и посылаем ответ с помощью функции «BindableFunction.OnInvoke = function()». В конце функции указываем «return» для возврата значений.
Пример
Событие для создания парта в игре с помощью двух серверных скриптов (Script) и отправкой информации о созданном парте.
В первом скрипте отправляем запрос через 10 секунд после запуска игры и выводим название парта после его создания во втором скрипте:
local BindableFunction = game.ServerScriptService:WaitForChild("Function")
wait(10)
local invokePart = BindableFunction:Invoke()
print(invokePart.Name)
Во втором скрипте принимаем запрос из первого скрипта, создаем новый парт и отправляем информацию о созданном парте в первый скрипт:
local BindableFunction = game.ServerScriptService:WaitForChild("Function")
BindableFunction.OnInvoke = function()
local part = Instance.new("Part")
part.Parent = workspace
part.Name = "Новый парт"
part.Position = Vector3.new(0, 1, 0)
return part
end
Создание удаленных событий (RemoteEvent)
Удаленные события (RemoteEvent) позволяют создавать свои события в игре и обмениваться этими событиями между скриптами разного вида. Отправка событий происходит в одностороннем порядке без обратной связи между скриптами, т.е. один скрипт отправляет событие и не ждет выполнения этого события от другого скрипта.
Схематично это выглядит так:
Script → LocalScript
или
LocalScript → Script
Для создания удаленных событий и их отправки из LocalScript в Script (от игрока на сервер):
1. К ReplicatedStorage или Tool (для ручных предметов) добавляем «RemoteEvent».
2. В LocalScript указываем условие для возникновения события и отправляем событие на сервер с помощью команды «RemoteEvent:FireServer()».
3. В Script принимаем событие на сервере и указываем действия при выполнении события с помощью функции «RemoteEvent.OnServerEvent:Connect(function(player)».
Пример
Событие для создания парта в игре с помощью локального скрипта (отправляет событие) и серверного скрипта (принимает событие).
В локальном скрипте (LocalScript) отправляем событие через 10 секунд после запуска игры:
local RemoteEvent = game.ReplicatedStorage:WaitForChild("RemoteEvent" )
wait(10)
RemoteEvent:FireServer()
В серверном скрипте (Script) принимаем событие из локального скрипта и создаем новый парт:
local RemoteEvent = game.ReplicatedStorage:WaitForChild("RemoteEvent" )
RemoteEvent.OnServerEvent:Connect(function(player)
print(player.Name .. " отправил событие")
local part = Instance.new("Part")
part.Parent = workspace
part.Position = Vector3.new(0, 1, 0)
part.Name = "Новый парт"
end)
Для создания удаленных событий и их отправки из Script в LocalScript (от сервера к игроку):
1. К ReplicatedStorage или Tool (для ручных предметов) добавляем «RemoteEvent».
2. В Script указываем условие для возникновения события и отправляем событие игрокам с помощью команды «RemoteEvent:FireClient(player)» (для одного игрока) или «RemoteEvent:FireAllClients()» (для всех игроков).
3. В LocalScript принимаем событие с сервера и указываем действия при выполнении события с помощью функции «RemoteEvent.OnClientEvent:Connect(function()».
Пример
Событие для создания парта в игре с помощью серверного скрипта (отправляет событие) и локального скрипта (принимает событие).
В серверном скрипте (Script) отправляем событие для всех игроков через 10 секунд после запуска игры:
local RemoteEvent = game.ReplicatedStorage:WaitForChild("RemoteEvent")
wait(10)
RemoteEvent:FireAllClients()
В локальном скрипте (LocalScript) принимаем событие из серверного скрипта и создаем новый парт:
local RemoteEvent = game.ReplicatedStorage:WaitForChild("RemoteEvent")
RemoteEvent.OnClientEvent:Connect(function()
local part = Instance.new("Part")
part.Parent = workspace
part.Position = Vector3.new(0, 1, 0)
part.Name = "Новый парт"
end)
Создание удаленных функций (RemoteFunction)
Удаленные функции (RemoteFunction) позволяют создавать свои события в игре и обмениваться этими событиями между скриптами разного вида. Отправка событий происходит в двухстороннем порядке с установлением обратной связи между скриптами, т.е. один скрипт отправляет запрос с событием и ждет выполнение этого события от другого скрипта.
Схематично это выглядит так:
LocalScript → Script → LocalScript
или
Script → LocalScript → Script (такой вариант не рекомендуется использовать!)
Для создания удаленных функций и установления связи LocalScript-Script-LocalScript (от игрока на сервер и обратно):
1. К ReplicatedStorage или Tool (для ручных предметов) добавляем «RemoteFunction».
2. В LocalScript отправляем запрос на сервер с помощью команды «RemoteFunction:InvokeServer()»
(можно поместить эту команду в переменную, например: «local invokeEvent = RemoteFunction:InvokeServer()»).
3. В Script принимаем запрос на сервере, выполняем нужные действия и посылаем ответ игроку с помощью функции «RemoteFunction.OnServerInvoke = function(player)». В конце функции указываем «return» для возврата значений.
Пример
Событие для создания парта в игре и обратной отправкой информации о созданном парте с помощью локального скрипта (отправляет запрос на событие) и серверного скрипта (принимает запрос и отправляет ответ).
В локальном скрипте (LocalScript) отправляем запрос через 10 секунд после запуска игры и выводим название парта после его создания в серверном скрипте:
local RemoteFunction = game.ReplicatedStorage:WaitForChild("RemoteFunction")
wait(10)
local invokePart = RemoteFunction:InvokeServer()
print(invokePart.Name)
В серверном скрипте (Script) принимаем запрос из локального скрипта, создаем новый парт и отправляем информацию о созданном парте в локальный скрипт:
local RemoteFunction = game.ReplicatedStorage:WaitForChild("RemoteFunction")
RemoteFunction.OnServerInvoke = function(player)
print(player.Name .. " отправил запрос")
local part = Instance.new("Part")
part.Parent = workspace
part.Name = "Новый парт"
part.Position = Vector3.new(0, 1, 0)
return part
end