mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-30 17:58:54 +00:00
139 lines
3.2 KiB
Lua
139 lines
3.2 KiB
Lua
local Instances = {}
|
|
|
|
function GetInstancedPlayers()
|
|
|
|
local players = {}
|
|
|
|
for k,v in pairs(Instances) do
|
|
for i=1, #v.players, 1 do
|
|
table.insert(players, v.players[i])
|
|
end
|
|
end
|
|
|
|
return players
|
|
|
|
end
|
|
|
|
function CreateInstance(type, player, data)
|
|
|
|
Instances[player] = {
|
|
type = type,
|
|
host = player,
|
|
players = {},
|
|
data = data
|
|
}
|
|
|
|
TriggerClientEvent('instance:onCreate', player, Instances[player])
|
|
TriggerClientEvent('instance:onInstancedPlayersData', -1, GetInstancedPlayers())
|
|
|
|
end
|
|
|
|
function CloseInstance(instance)
|
|
|
|
for i=1, #Instances[instance].players, 1 do
|
|
TriggerClientEvent('instance:onClose', Instances[instance].players[i])
|
|
end
|
|
|
|
Instances[instance] = nil
|
|
|
|
TriggerClientEvent('instance:onInstancedPlayersData', -1, GetInstancedPlayers())
|
|
|
|
end
|
|
|
|
function AddPlayerToInstance(instance, player)
|
|
|
|
local found = false
|
|
|
|
for i=1, #Instances[instance].players, 1 do
|
|
if Instances[instance].players[i] == player then
|
|
found = true
|
|
break
|
|
end
|
|
end
|
|
|
|
if not found then
|
|
table.insert(Instances[instance].players, player)
|
|
end
|
|
|
|
TriggerClientEvent('instance:onEnter', player, Instances[instance])
|
|
|
|
for i=1, #Instances[instance].players, 1 do
|
|
if Instances[instance].players[i] ~= player then
|
|
TriggerClientEvent('instance:onPlayerEntered', Instances[instance].players[i], Instances[instance], player)
|
|
end
|
|
|
|
end
|
|
|
|
TriggerClientEvent('instance:onInstancedPlayersData', -1, GetInstancedPlayers())
|
|
|
|
end
|
|
|
|
function RemovePlayerFromInstance(instance, player)
|
|
|
|
if Instances[instance] ~= nil then
|
|
|
|
TriggerClientEvent('instance:onLeave', player, Instances[instance])
|
|
|
|
if Instances[instance].host == player then
|
|
|
|
for i=1, #Instances[instance].players, 1 do
|
|
if Instances[instance].players[i] ~= player then
|
|
TriggerClientEvent('instance:onPlayerLeft', Instances[instance].players[i], Instances[instance], player)
|
|
end
|
|
end
|
|
|
|
CloseInstance(instance)
|
|
|
|
else
|
|
|
|
for i=1, #Instances[instance].players, 1 do
|
|
if Instances[instance].players[i] == player then
|
|
Instances[instance].players[i] = nil
|
|
end
|
|
end
|
|
|
|
for i=1, #Instances[instance].players, 1 do
|
|
if Instances[instance].players[i] ~= player then
|
|
TriggerClientEvent('instance:onPlayerLeft', Instances[instance].players[i], Instances[instance], player)
|
|
end
|
|
|
|
end
|
|
|
|
TriggerClientEvent('instance:onInstancedPlayersData', -1, GetInstancedPlayers())
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
function InvitePlayerToInstance(instance, type, player, data)
|
|
TriggerClientEvent('instance:onInvite', player, instance, type, data)
|
|
end
|
|
|
|
RegisterServerEvent('instance:create')
|
|
AddEventHandler('instance:create', function(type, data)
|
|
CreateInstance(type, source, data)
|
|
end)
|
|
|
|
RegisterServerEvent('instance:close')
|
|
AddEventHandler('instance:close', function()
|
|
CloseInstance(source)
|
|
end)
|
|
|
|
RegisterServerEvent('instance:enter')
|
|
AddEventHandler('instance:enter', function(instance)
|
|
AddPlayerToInstance(instance, source)
|
|
end)
|
|
|
|
RegisterServerEvent('instance:leave')
|
|
AddEventHandler('instance:leave', function(instance)
|
|
RemovePlayerFromInstance(instance, source)
|
|
end)
|
|
|
|
RegisterServerEvent('instance:invite')
|
|
AddEventHandler('instance:invite', function(instance, type, player, data)
|
|
InvitePlayerToInstance(instance, type, player, data)
|
|
end)
|
|
|