Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка в Roblox Studio

Миша Лоскутов Ученик (144), на голосовании 1 месяц назад
ошибка:16:45:12.064 Server Kick Message: - Studio

скрипт:
local ServerScriptService = game:GetService("ServerScriptService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local ProfileService = require(ServerScriptService.Modules.ProfileService)
local ProfileTemplate = require(script.ProfileTemplate)

local ProfileStore = ProfileService.GetProfileStore(
"Test Key",
ProfileTemplate
)

local module = {}
module.Profiles = {}

local function LoadPlayerInstances(Player, Profile)
for _, v in script.PlayerValues:GetChildren() do
v:Clone().Parent = Player
end
task.spawn(function()
while true do
for _, v in Player.leaderstats:GetChildren() do
local ActualValue = Profile.Data.leaderstats[ v.Name ]
v.Value = ActualValue
end
task.wait(0.1)
end
end)
end

local function PlayerAdded(Player)
local Profile = ProfileStore:LoadProfileAsync("Player_" .. Player.UserId)
if Profile then
Profile:AddUserId(Player.UserId)
Profile:Reconcile()
Profile:ListenToRelease(function()
module.Profiles[Player] = nil
Player:Kick()
end)

if Player:IsDescendantOf(Player) == true then
module.Profiles[Player] = Profile
LoadPlayerInstances(Player, Profile)
else
Profile:Release()
end
else
Player:Kick()
end
end

for _, Player in Players:GetPlayers() do
task.spawn(PlayerAdded, Player)
end

Players.PlayerAdded:Connect(PlayerAdded)

Players.PlayerRemoving:Connect(function(Player)
local Profile = module.Profiles[Player]
if Profile then
Profile:Release()
end
end)

return module
Голосование за лучший ответ
Рустам Абдрашитов Мыслитель (9465) 2 месяца назад
 local ServerScriptService = game:GetService("ServerScriptService")  
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local ProfileService = require(ServerScriptService.Modules.ProfileService)
local ProfileTemplate = require(script.ProfileTemplate)

local ProfileStore = ProfileService.GetProfileStore("Test Key", ProfileTemplate)

local module = {}
module.Profiles = {}

-- Функция для загрузки экземпляров игрока и синхронизации их значений
local function LoadPlayerInstances(player, profile)
-- Клонирование значений игрока из шаблона
for _, value in script.PlayerValues:GetChildren() do
value:Clone().Parent = player
end

-- Постоянное обновление leaderstats игрока из профиля
task.spawn(function()
while true do
for _, stat in player.leaderstats:GetChildren() do
local actualValue = profile.Data.leaderstats[stat.Name]
if actualValue then
stat.Value = actualValue
end
end
task.wait(0.5) -- Уменьшена частота до каждых 0.5 секунды
end
end)
end

-- Функция, вызываемая при присоединении игрока
local function PlayerAdded(player)
local profile = ProfileStore:LoadProfileAsync("Player_" .. player.UserId)

if profile then
profile:AddUserId(player.UserId)
profile:Reconcile()

-- Подписка на освобождение профиля
profile:ListenToRelease(function()
module.Profiles[player] = nil
player:Kick("Ваш профиль был освобожден.") -- Добавлено сообщение для ясности
end)

-- Проверка, что игрок все еще в игре перед загрузкой его профиля
if player:IsDescendantOf(Players) then
module.Profiles[player] = profile
LoadPlayerInstances(player, profile)
else
profile:Release() -- Освобождение, если игрок недействителен
end
else
player:Kick("Не удалось загрузить ваш профиль.") -- Добавлено сообщение для ясности
end
end

-- Загрузка профилей для игроков, уже находящихся в игре
for _, player in Players:GetPlayers() do
task.spawn(PlayerAdded, player)
end

-- Подключение функции PlayerAdded к событию PlayerAdded
Players.PlayerAdded:Connect(PlayerAdded)

-- Очистка при выходе игрока
Players.PlayerRemoving:Connect(function(player)
local profile = module.Profiles[player]
if profile then
profile:Release() -- Освобождение профиля игрока при выходе
end
end)

return module
Улучшенный скрипт
Рустам АбдрашитовМыслитель (9465) 2 месяца назад
Основные изменения объяснены:
Сниженная частота обновления: task.wait(0.1) изменено на task.wait(0.5) для снижения нагрузки на сервер, обновляя значения каждые полсекунды вместо десятых долей секунды.
Сообщения об ошибках при исключении: При исключении игроков из-за проблем с их профилями добавлены конкретные сообщения для улучшения пользовательского опыта и отладки.
Описание переменных: Изменены названия переменных, такие как v на value и stat, для лучшей читаемости.
Проверка существования профиля: Добавлена проверка, чтобы убедиться, что actualValue существует перед его присвоением, что предотвращает потенциальные ошибки.
Похожие вопросы