СКРИПТ ДЛЯ СОХРАНЕНИЯ «LEADERSTATS» local DataStoreService = game:GetService("DataStoreService") local DataStore = DataStoreService:GetDataStore("PlayerDataSaves") -- Функция для сохранения данных игрока в отдельную таблицу: function PlayerData(player) local playerData = {} --Сохранение данных из "leaderstats": for _, stat in pairs(player.leaderstats:GetChildren()) do playerData[stat.Name] = stat.Value end return playerData end -- Функция для загрузки данных игрока: function LoadPlayerData(player, data) --Загрузка данных в "leaderstats": for _, stat in pairs(player.leaderstats:GetChildren()) do stat.Value = data[stat.Name] end end -- Когда игрок выходит из игры: function PlayerRemoving(player) --Сохранение данных в хранилище: local playerData = PlayerData(player) --создание таблицы с данными игрока local setSuccess, errorMessage = pcall(function() DataStore:SetAsync(player.UserId, playerData) end) --Проверка сохранения данных игрока: if setSuccess then print("Данные сохранены в хранилище", DataStore.Name) else warn(errorMessage) end end --Сохранение данных при выходе из игры: game.Players.PlayerRemoving:Connect(PlayerRemoving) -- Когда игрок заходит в игру: function PlayerAdded(player) --Получение данных из хранилища: local getSuccess, savedData = pcall(function() return DataStore:GetAsync(player.UserId) end) --Проверка доступа к хранилищу: if getSuccess then print("Подключено хранилище", DataStore.Name) else warn("Не удалось подключиться к хранилищу", DataStore.Name) end --Проверка сохраненных данных игрока: if savedData then LoadPlayerData(player, savedData) --вызов функции для загрузки сохранений print("Данные загружены из хранилища", DataStore.Name) else warn("Нет сохраненных данных в", DataStore.Name) end end --Загрузка данных при заходе в игру: game.Players.PlayerAdded:Connect(PlayerAdded)
-- Резервное сохранение данных: game:BindToClose(function(player) task.wait(1) PlayerRemoving(player) --вызов функции для сохранения данных end) СКРИПТ ДЛЯ СОХРАНЕНИЯ ИНВЕНТАРЯ local DataStoreService = game:GetService("DataStoreService") local DataStore = DataStoreService:GetDataStore("PlayerInventorySaves ") -- Функция для сохранения инвентаря в отдельную таблицу: function PlayerInventory(player) local playerInventory = {} for _, tool in pairs(player.Backpack:GetChildren()) do if tool then table.insert(playerInventory, tool.Name) --запись в таблицу названий предметов из инвентаря end end return playerInventory end -- Функция для загрузки инвентаря: function LoadPlayerInventory(player, data) for _, tool in pairs(data) do local toolInStorage = game.ServerStorage.Tools:FindFirstChild(tool) local toolInBackpack = player.Backpack:FindFirstChild(tool) local toolInStarterGear = player.StarterGear:FindFirstChild(tool) --Если в ServerStorage есть предмет из сохранения и его еще нет у игрока: if toolInStorage and toolInBackpack == nil and toolInStarterGear == nil then toolInStorage:Clone().Parent = player.Backpack --копируем предмет в рюкзак игрока toolInStorage:Clone().Parent = player.StarterGear --копируем предмет в стартовый набор игрока end end end -- Когда игрок выходит из игры: function PlayerRemoving(player) --Когда персонаж выходит из игры: player.CharacterRemoving:Connect(function(character) character:WaitForChild("Humanoid"):UnequipTools() --убираем экипированные предметы --Сохранение данных в хранилище: local playerInventory = PlayerInventory(player) --создание таблицы с предметами из инвентаря local setSuccess, errorMessage = pcall(function() DataStore:SetAsync(player.UserId, playerInventory) end) --Проверка сохранения данных игрока: if setSuccess then print("Данные сохранены в хранилище", DataStore.Name) else warn(errorMessage) end end) end --Сохранение данных при выходе из игры: game.Players.PlayerRemoving:Connect(PlayerRemoving) -- Когда игрок заходит в игру: function PlayerAdded(player) --Получение данных из хранилища: local getSuccess, savedData = pcall(function() return DataStore:GetAsync(player.UserId) end) --Проверка доступа к хранилищу: if getSuccess then print("Подключено хранилище", DataStore.Name) else warn("Не удалось подключиться к хранилищу", DataStore.Name) end --Проверка сохраненных данных игрока: if savedData then LoadPlayerInventory(player, savedData) --вызов функции для загрузки инвентаря print("Данные загружены из хранилища", DataStore.Name) else warn("Нет сохраненных данных в", DataStore.Name) end end --Загрузка данных при заходе в игру: game.Players.PlayerAdded:Connect(PlayerAdded) -- Резервное сохранение данных: game:BindToClose(function(player) task.wait(1) PlayerRemoving(player) --вызов функции для сохранения данных end)
Бро, только сегодня эта тема понадобилась, видео в посмотреть позже понадобавлял разных, думал завтра гляну, а тут урок от тебя, наверное теперь уже другие и не понадобятся, ты темы очень хорошо раскрываешь)
Можно к ServerScriptService добавить такой скрипт: game.Players.PlayerAdded:Connect(function(player) player.CharacterAdded:Connect(function(character) character.Humanoid.Died:Connect(function() character:WaitForChild("Humanoid"):UnequipTools() for _, tool in pairs(player.Backpack:GetChildren()) do local toolInStarterGear = player.StarterGear:FindFirstChild(tool.Name) if toolInStarterGear == nil then tool:Clone().Parent = player.StarterGear end end end) end) end)
спасибо у меня изза твоего скрипта слетел симулятор и теперь прийдется либо переписывать все скрипты и заного их создавать либо писать новые скрипты заного
Из-за моего скрипта не может ничего "слететь". Скрипт только записывает данные в игре и не влияет на саму игру. Если этот скрипт конфликтует с другими скриптами в игре, то просто удали его из игры.
@robloxmast у меня лидерстаты сбросились хотя всё под себя переписал и кнопки перестали работать и выдавать нужное количество валюты и за правильную стоимость, мне пришлось заного скрипты переписывать что бы исправить в любом случае скрипт не рабочий
@@yanas2226 Здесь трудно что-то конкретное сказать, ибо я не играл и не знаю как эта механика реализована в игре. А от способа создания механики и будет зависеть способ сохранения.
@@robloxmast можно ли создать файл по типу того что в лидерстатс, и использовать его как буловую переменную, меняя значение между 0 и 1, где 0 - нет доступа, а 1 - есть, и чтобы это не отображалось в табе?
Да, конечно. Все эти контейнеры разных видов можно создавать без таблицы. Помимо числовых контейнеров ("NumberValue" и "IntValue") можно еще добавить к любому игровому объекту "BoolValue" для булевых значений и "StringValue" для строковых значений. И через скрипты менять эти значения при нужных событиях в игре. Потом эти значения можно сохранить также как таблицу лидеров (только вместо таблицы в скрипте указываем значения из этих контейнеров).
local DataStoreService = game:GetService("DataStoreService") local DataStore = DataStoreService:GetDataStore("PlayerInventorySaves")
function PlayerInventory(player) local playerInventory = {} for _, tool in pairs(player.Backpack:GetChildren()) do if tool then table.insert(playerInventory, tool.Name) end end return playerInventory end function LoadPlayerInventory(player, data) for _, tool in pairs(data) do local toolInStorage = game.ServerStorage.Tools:FindFirstChild(tool) local toolInBackpack = player.Backpack:FindFirstChild(tool) local toolInStarterGear = player.StarterGear:FindFirstChild(tool)
if toolInStorage and not toolInBackpack and not toolInStarterGear then toolInStorage:Clone().Parent = player.Backpack toolInStorage:Clone().Parent = player.StarterGear end end end function PlayerRemoving(player) local character = player.Character if character then character:WaitForChild("Humanoid"):UnequipTools() end
local playerInventory = PlayerInventory(player) local setSuccess, errorMessage = pcall(function() DataStore:SetAsync(player.UserId, playerInventory) end)
if setSuccess then print("Данные сохранены в хранилище", DataStore.Name) else warn(errorMessage) end end game.Players.PlayerRemoving:Connect(PlayerRemoving) function PlayerAdded(player)
local getSuccess, savedData = pcall(function() return DataStore:GetAsync(player.UserId) end)
if getSuccess then print("Подключено хранилище", DataStore.Name) else warn("Не удалось подключиться к хранилищу", DataStore.Name) end
if savedData then LoadPlayerInventory(player, savedData) print("Данные загружены из хранилища", DataStore.Name) else warn("Нет сохраненных данных в", DataStore.Name) end end game.Players.PlayerAdded:Connect(PlayerAdded)
game:BindToClose(function() for _, player in pairs(game.Players:GetPlayers()) do PlayerRemoving(player) end
@@hoolz2746 Все хорошо, только character:WaitForChild("Humanoid"):UnequipTools() не отрабатывает почему то, соответственно Экипированный предмет не сохраняется
Проблема... Значения полученный локальным скриптом записываю в leaderstats. Записывается как надо, но при сохрании они не сохраняются. Сохранение идет через скрипт в ServerScripts. Сохраняются только данные получаемые серверными скриптами, а это для меня не вариант
Да, хранилищем можно пользоваться только через серверные скрипты. Но можно передать данные из локального скрипта в серверный через событие RemoteEvent или RemoteFunction.
Правильно ли понял - игрок через локальный скрипт получает некие данные, которые заносятся в его leaderstats. Заносятся корректно. Пока игрок в игре все в leaderstats отображается как и надо. Выходит из игры - сохранение производит серверный скрипт, но данные записанные в leaderstats из локального скрипта не цепляет. Получается, что данные из локального скрипта надо передать на серверный скрипт. Вернее запись в leaderstas надо произвести серверным скриптом, а не локальным. Так?@@robloxmast
Спс. Однако, что-то не срабатывает RemoteEven... Есть такая функция в локальном скрипте. Лежит в стартерплайер в скрипте. Ссылка на событие в ReplicatedStorage есть if player.statsplayer.Stone.Value >=1 then screen.Enabled = true screen.AlwaysOnTop = true local sumRCoin = players.LocalPlayer.statsplayer.Stone.Value * 2 players.LocalPlayer.leaderstats.RCoin.Value = players.LocalPlayer.leaderstats.RCoin.Value + sumRCoin print("У вас сдано камней - "..players.LocalPlayer.statsplayer.Stone.Value) cntkamen.Text = "Сдано камней: "..players.LocalPlayer.statsplayer.Stone.Value players.LocalPlayer.statsplayer.Stone.Value = 0
print("Получено денег - "..sumRCoin) print(player.Name) end отрабатывает на ура. там же лежит простой скрипт с отработкой события: local players = game:GetService("Players") local addcoinEvant = game.ReplicatedStorage:WaitForChild("AddCoinsEvent") addcoinEvant.OnServerEvent:Connect(function(owner,coinssum) print("Пришло: "..coinssum.." от --end end) Что тут может быть? голова уже кипит@@robloxmast
StarterGear и StarterPack - это разные хранилища. Для сохранения инвентаря конкретного игрока нужно указывать именно StarterGear. А StarterPack сохраняет одинаковые предметы для всех игроков (т.е. это именно стартовый набор в игре). В окне Output вообще ничего не выводит? Ты инвентарный предмет убираешь, когда выходишь из игры или он у тебя в руке?
@@robloxmast , я все предметы убираю, но ничего не работает, а в output вообще никаких намеков на то, что скрипт работает. То есть, вообще ничего не выводит.
Вроде бы всё работает но есть одно но, в самом roblox studio это отличное работает и сохраняется, а вот уже конкретно в игре в обычном roblox, увы инструменты не сохраняются, сталкивался кто-то с эти? может знаете в чем проблема
@@robloxmast Спасибо за оперативный ответ, если будет возможность проверить и в обычном роблоксе то было бы славно, возможно и ваша версия сейчас работает в роблоксе.
У меня так же есть вопрос насчёт инвентаря. Я делаю такой момент что мне нужно нажать на монтировку и после этого она должна появиться в инвентаре ну мой скрипт не робит. мой скрипт ниже
@@JustOLeg-q4u Этот скрипт не пойдет. Получается, ты создаешь пустой "Tool" и помещаешь его в рюкзак. Но это так не работает)) Элемент "Tool" должен быть совмещен с конкретным предметом (в данном случае с монтировкой). 19:07 - посмотри в этом моменте как выглядят инвентарные предметы. Предмет уже должен содержать "Tool" и "Handle", чтобы поместить его в рюкзак. И команда для определения игрока "game.Players.LocalPlayer" будет работать только в локальном скрипте (LocalScript). Т.е. если ты пишешь эту строку в серверном скрипте (Script), то будет ошибка.
Ну в твоем случае я бы сделал так: 1. Поместить инвентарную монтировку (которая содержит "Tool" и "Handle") в ServerStorage. 2. В Workspace поместить неактивную копию монтировки, чтобы она не бралась в игре без клика. Для этого можно убрать внутри "Tool" или переименовать "Handle". 3. В скрипте после клика прописать копирование монтировки в рюкзак из ServerStorage (примерно также, как у меня это действие прописано в скрипте для сохранения инвентаря).
не работает скрипт для сохранения вещей:( а мне нада для игры пвп в которой можно получить новое оружие а чтобы игроку не переполучать ещё раз например оружие сложно получить то так он вообще скорее игру забросит
local DataStoreService = game:GetService("DataStoreService") local DataStore = DataStoreService:GetDataStore("PlayerInventorySaves")
function PlayerInventory(player) local playerInventory = {} for _, tool in pairs(player.Backpack:GetChildren()) do if tool then table.insert(playerInventory, tool.Name) end end return playerInventory end function LoadPlayerInventory(player, data) for _, tool in pairs(data) do local toolInStorage = game.ServerStorage.Tools:FindFirstChild(tool) local toolInBackpack = player.Backpack:FindFirstChild(tool) local toolInStarterGear = player.StarterGear:FindFirstChild(tool)
if toolInStorage and not toolInBackpack and not toolInStarterGear then toolInStorage:Clone().Parent = player.Backpack toolInStorage:Clone().Parent = player.StarterGear end end end function PlayerRemoving(player) local character = player.Character if character then character:WaitForChild("Humanoid"):UnequipTools() end
local playerInventory = PlayerInventory(player) local setSuccess, errorMessage = pcall(function() DataStore:SetAsync(player.UserId, playerInventory) end)
if setSuccess then print("Данные сохранены в хранилище", DataStore.Name) else warn(errorMessage) end end game.Players.PlayerRemoving:Connect(PlayerRemoving) function PlayerAdded(player)
local getSuccess, savedData = pcall(function() return DataStore:GetAsync(player.UserId) end)
if getSuccess then print("Подключено хранилище", DataStore.Name) else warn("Не удалось подключиться к хранилищу", DataStore.Name) end
if savedData then LoadPlayerInventory(player, savedData) print("Данные загружены из хранилища", DataStore.Name) else warn("Нет сохраненных данных в", DataStore.Name) end end game.Players.PlayerAdded:Connect(PlayerAdded)
game:BindToClose(function() for _, player in pairs(game.Players:GetPlayers()) do PlayerRemoving(player) end
local DataStoreService = game:GetService("DataStoreService") local DataStore = DataStoreService:GetDataStore("PlayerInventorySaves")
function PlayerInventory(player) local playerInventory = {} for _, tool in pairs(player.Backpack:GetChildren()) do if tool then table.insert(playerInventory, tool.Name) end end return playerInventory end function LoadPlayerInventory(player, data) for _, tool in pairs(data) do local toolInStorage = game.ServerStorage.Tools:FindFirstChild(tool) local toolInBackpack = player.Backpack:FindFirstChild(tool) local toolInStarterGear = player.StarterGear:FindFirstChild(tool)
if toolInStorage and not toolInBackpack and not toolInStarterGear then toolInStorage:Clone().Parent = player.Backpack toolInStorage:Clone().Parent = player.StarterGear end end end function PlayerRemoving(player) local character = player.Character if character then character:WaitForChild("Humanoid"):UnequipTools() end
local playerInventory = PlayerInventory(player) local setSuccess, errorMessage = pcall(function() DataStore:SetAsync(player.UserId, playerInventory) end)
if setSuccess then print("Данные сохранены в хранилище", DataStore.Name) else warn(errorMessage) end end game.Players.PlayerRemoving:Connect(PlayerRemoving) function PlayerAdded(player)
local getSuccess, savedData = pcall(function() return DataStore:GetAsync(player.UserId) end)
if getSuccess then print("Подключено хранилище", DataStore.Name) else warn("Не удалось подключиться к хранилищу", DataStore.Name) end
if savedData then LoadPlayerInventory(player, savedData) print("Данные загружены из хранилища", DataStore.Name) else warn("Нет сохраненных данных в", DataStore.Name) end end game.Players.PlayerAdded:Connect(PlayerAdded)
game:BindToClose(function() for _, player in pairs(game.Players:GetPlayers()) do PlayerRemoving(player) end
нет никаких ошибок не пишет. пишет что Данные сохранены в хранилище PlayerDataSaves а потом когда заходишь - Данные загружены из хранилища PlayerDataSaves - Server - saving sats:54
Хм... Вообще, если пишет "Данные загружены из хранилища", значит что-то было сохранено. Ты ведь сохраняешь данные из таблицы лидеров? Сама таблица лидеров у тебя нормально работает?
Даже так скажу, я как только вставил скрипт и пробывал сохранять в первый раз сохранилось, во второй раз сохранилось только старое сохранение, потом через ещё 2-3 попытки перезаходов перестало вообще сохранять
@@robloxmast При входе: Подключено хранилище PlayerDataSaves - Server - Stars:47 10:18:07.008 Данные загружены из хранилища PlayerDataSaves - Server - Stars:54 10:18:07.008 Подключено хранилище PlayerInventorySaves - Server - Save:65 10:18:07.009 Нет сохраненных данных в PlayerInventorySaves - Server - Save:74 При выходе: Disconnect from ::ffff:127.0.0.1|49869 - Studio 10:19:09.633 Данные сохранены в хранилище PlayerDataSaves - Функция не срабатывает из за строчки player.CharacterRemoving: потому что кажется, что это действие не отслеживается после удаления игрока. Если закомментировать функцию и убрать UnequipTools, то сохранение произойдет. Но хотелось бы , чтобы оружие все таки убиралось из рук и сохранялось
у меня ошибки выходят из qutput cloud_10366079803.Add Easy Textures.UI.Main:334: setState cannot be used in the и ещё Check the definition of render in the component "Main". что делатьь
СКРИПТ ДЛЯ СОХРАНЕНИЯ «LEADERSTATS»
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("PlayerDataSaves")
-- Функция для сохранения данных игрока в отдельную таблицу:
function PlayerData(player)
local playerData = {}
--Сохранение данных из "leaderstats":
for _, stat in pairs(player.leaderstats:GetChildren()) do
playerData[stat.Name] = stat.Value
end
return playerData
end
-- Функция для загрузки данных игрока:
function LoadPlayerData(player, data)
--Загрузка данных в "leaderstats":
for _, stat in pairs(player.leaderstats:GetChildren()) do
stat.Value = data[stat.Name]
end
end
-- Когда игрок выходит из игры:
function PlayerRemoving(player)
--Сохранение данных в хранилище:
local playerData = PlayerData(player) --создание таблицы с данными игрока
local setSuccess, errorMessage = pcall(function()
DataStore:SetAsync(player.UserId, playerData)
end)
--Проверка сохранения данных игрока:
if setSuccess then
print("Данные сохранены в хранилище", DataStore.Name)
else
warn(errorMessage)
end
end
--Сохранение данных при выходе из игры:
game.Players.PlayerRemoving:Connect(PlayerRemoving)
-- Когда игрок заходит в игру:
function PlayerAdded(player)
--Получение данных из хранилища:
local getSuccess, savedData = pcall(function()
return DataStore:GetAsync(player.UserId)
end)
--Проверка доступа к хранилищу:
if getSuccess then
print("Подключено хранилище", DataStore.Name)
else
warn("Не удалось подключиться к хранилищу", DataStore.Name)
end
--Проверка сохраненных данных игрока:
if savedData then
LoadPlayerData(player, savedData) --вызов функции для загрузки сохранений
print("Данные загружены из хранилища", DataStore.Name)
else
warn("Нет сохраненных данных в", DataStore.Name)
end
end
--Загрузка данных при заходе в игру:
game.Players.PlayerAdded:Connect(PlayerAdded)
-- Резервное сохранение данных:
game:BindToClose(function(player)
task.wait(1)
PlayerRemoving(player) --вызов функции для сохранения данных
end)
СКРИПТ ДЛЯ СОХРАНЕНИЯ ИНВЕНТАРЯ
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("PlayerInventorySaves ")
-- Функция для сохранения инвентаря в отдельную таблицу:
function PlayerInventory(player)
local playerInventory = {}
for _, tool in pairs(player.Backpack:GetChildren()) do
if tool then
table.insert(playerInventory, tool.Name) --запись в таблицу названий предметов из инвентаря
end
end
return playerInventory
end
-- Функция для загрузки инвентаря:
function LoadPlayerInventory(player, data)
for _, tool in pairs(data) do
local toolInStorage = game.ServerStorage.Tools:FindFirstChild(tool)
local toolInBackpack = player.Backpack:FindFirstChild(tool)
local toolInStarterGear = player.StarterGear:FindFirstChild(tool)
--Если в ServerStorage есть предмет из сохранения и его еще нет у игрока:
if toolInStorage and toolInBackpack == nil and toolInStarterGear == nil then
toolInStorage:Clone().Parent = player.Backpack --копируем предмет в рюкзак игрока
toolInStorage:Clone().Parent = player.StarterGear --копируем предмет в стартовый набор игрока
end
end
end
-- Когда игрок выходит из игры:
function PlayerRemoving(player)
--Когда персонаж выходит из игры:
player.CharacterRemoving:Connect(function(character)
character:WaitForChild("Humanoid"):UnequipTools() --убираем экипированные предметы
--Сохранение данных в хранилище:
local playerInventory = PlayerInventory(player) --создание таблицы с предметами из инвентаря
local setSuccess, errorMessage = pcall(function()
DataStore:SetAsync(player.UserId, playerInventory)
end)
--Проверка сохранения данных игрока:
if setSuccess then
print("Данные сохранены в хранилище", DataStore.Name)
else
warn(errorMessage)
end
end)
end
--Сохранение данных при выходе из игры:
game.Players.PlayerRemoving:Connect(PlayerRemoving)
-- Когда игрок заходит в игру:
function PlayerAdded(player)
--Получение данных из хранилища:
local getSuccess, savedData = pcall(function()
return DataStore:GetAsync(player.UserId)
end)
--Проверка доступа к хранилищу:
if getSuccess then
print("Подключено хранилище", DataStore.Name)
else
warn("Не удалось подключиться к хранилищу", DataStore.Name)
end
--Проверка сохраненных данных игрока:
if savedData then
LoadPlayerInventory(player, savedData) --вызов функции для загрузки инвентаря
print("Данные загружены из хранилища", DataStore.Name)
else
warn("Нет сохраненных данных в", DataStore.Name)
end
end
--Загрузка данных при заходе в игру:
game.Players.PlayerAdded:Connect(PlayerAdded)
-- Резервное сохранение данных:
game:BindToClose(function(player)
task.wait(1)
PlayerRemoving(player) --вызов функции для сохранения данных
end)
Бро, только сегодня эта тема понадобилась, видео в посмотреть позже понадобавлял разных, думал завтра гляну, а тут урок от тебя, наверное теперь уже другие и не понадобятся, ты темы очень хорошо раскрываешь)
Оооо, то что я вообще не знаю, вот это уже имба
Спасибо тебе огромное, отлично объясняешь по больше бы таких как ты авторов, Надеюсь что ты добьешься успехов
Вопрос такой, а при смерти персонажа как сделать сохранение инвентаря ?
Можно к ServerScriptService добавить такой скрипт:
game.Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(character)
character.Humanoid.Died:Connect(function()
character:WaitForChild("Humanoid"):UnequipTools()
for _, tool in pairs(player.Backpack:GetChildren()) do
local toolInStarterGear = player.StarterGear:FindFirstChild(tool.Name)
if toolInStarterGear == nil then
tool:Clone().Parent = player.StarterGear
end
end
end)
end)
end)
спасибо большое помог очень сильно делал игру по типу Line runner и надо было сохранение искал способы 2 недели, спасибо ещё раз❤
Боже боже боже ТЫ ЛУЧШИЙ СПАСИБО ОГРОМНОЕ Я ИСКАЛ ТЕБЯ 2 ДНЯ!!
спасибо, очень хорошо всё объяснил
ДВА ВИДИО ЗА 2 ДНЯ УРААААА
Ну пока одно видео я выложил))
а ой простите перепутал@@robloxmast
спасибо за скрипт и хорошее объяснение как он работает
Спасибо огромное
Ура,победа😎😎😎😎
Сохранение инвентаря не работает скрипт вписал а оно не работает
можешь сделать туториал как создать магнат слияния? пожалуйста очень нужно😮
Я не играл в эту игру и не знаю какая там механика
спасибо у меня изза твоего скрипта слетел симулятор и теперь прийдется либо переписывать все скрипты и заного их создавать либо писать новые скрипты заного
Из-за моего скрипта не может ничего "слететь". Скрипт только записывает данные в игре и не влияет на саму игру. Если этот скрипт конфликтует с другими скриптами в игре, то просто удали его из игры.
@robloxmast у меня лидерстаты сбросились хотя всё под себя переписал и кнопки перестали работать и выдавать нужное количество валюты и за правильную стоимость, мне пришлось заного скрипты переписывать что бы исправить в любом случае скрипт не рабочий
а если мне нужно сохранить что у игрока есть доступ к функции, как это сделать?
А что это за функция? Что она делает?
@@robloxmast ну допустим функция экипировки оружия как в какомнибуть ninja legends
@@yanas2226 Здесь трудно что-то конкретное сказать, ибо я не играл и не знаю как эта механика реализована в игре. А от способа создания механики и будет зависеть способ сохранения.
@@robloxmast можно ли создать файл по типу того что в лидерстатс, и использовать его как буловую переменную, меняя значение между 0 и 1, где 0 - нет доступа, а 1 - есть, и чтобы это не отображалось в табе?
Да, конечно. Все эти контейнеры разных видов можно создавать без таблицы. Помимо числовых контейнеров ("NumberValue" и "IntValue") можно еще добавить к любому игровому объекту "BoolValue" для булевых значений и "StringValue" для строковых значений. И через скрипты менять эти значения при нужных событиях в игре. Потом эти значения можно сохранить также как таблицу лидеров (только вместо таблицы в скрипте указываем значения из этих контейнеров).
не сохраняет предметы ну там просто не пишет что сохранено и в игре ничего не происходит
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("PlayerInventorySaves")
function PlayerInventory(player)
local playerInventory = {}
for _, tool in pairs(player.Backpack:GetChildren()) do
if tool then
table.insert(playerInventory, tool.Name)
end
end
return playerInventory
end
function LoadPlayerInventory(player, data)
for _, tool in pairs(data) do
local toolInStorage = game.ServerStorage.Tools:FindFirstChild(tool)
local toolInBackpack = player.Backpack:FindFirstChild(tool)
local toolInStarterGear = player.StarterGear:FindFirstChild(tool)
if toolInStorage and not toolInBackpack and not toolInStarterGear then
toolInStorage:Clone().Parent = player.Backpack
toolInStorage:Clone().Parent = player.StarterGear
end
end
end
function PlayerRemoving(player)
local character = player.Character
if character then
character:WaitForChild("Humanoid"):UnequipTools()
end
local playerInventory = PlayerInventory(player)
local setSuccess, errorMessage = pcall(function()
DataStore:SetAsync(player.UserId, playerInventory)
end)
if setSuccess then
print("Данные сохранены в хранилище", DataStore.Name)
else
warn(errorMessage)
end
end
game.Players.PlayerRemoving:Connect(PlayerRemoving)
function PlayerAdded(player)
local getSuccess, savedData = pcall(function()
return DataStore:GetAsync(player.UserId)
end)
if getSuccess then
print("Подключено хранилище", DataStore.Name)
else
warn("Не удалось подключиться к хранилищу", DataStore.Name)
end
if savedData then
LoadPlayerInventory(player, savedData)
print("Данные загружены из хранилища", DataStore.Name)
else
warn("Нет сохраненных данных в", DataStore.Name)
end
end
game.Players.PlayerAdded:Connect(PlayerAdded)
game:BindToClose(function()
for _, player in pairs(game.Players:GetPlayers()) do
PlayerRemoving(player)
end
task.wait(1)
end) вот доделаный скрипт
@@hoolz2746 Все хорошо, только character:WaitForChild("Humanoid"):UnequipTools() не отрабатывает почему то, соответственно Экипированный предмет не сохраняется
Проблема... Значения полученный локальным скриптом записываю в leaderstats. Записывается как надо, но при сохрании они не сохраняются. Сохранение идет через скрипт в ServerScripts. Сохраняются только данные получаемые серверными скриптами, а это для меня не вариант
Да, хранилищем можно пользоваться только через серверные скрипты. Но можно передать данные из локального скрипта в серверный через событие RemoteEvent или RemoteFunction.
Правильно ли понял - игрок через локальный скрипт получает некие данные, которые заносятся в его leaderstats. Заносятся корректно. Пока игрок в игре все в leaderstats отображается как и надо. Выходит из игры - сохранение производит серверный скрипт, но данные записанные в leaderstats из локального скрипта не цепляет. Получается, что данные из локального скрипта надо передать на серверный скрипт. Вернее запись в leaderstas надо произвести серверным скриптом, а не локальным. Так?@@robloxmast
@@aber-kraber1692 Да
Спс. Однако, что-то не срабатывает RemoteEven...
Есть такая функция в локальном скрипте. Лежит в стартерплайер в скрипте. Ссылка на событие в ReplicatedStorage есть
if player.statsplayer.Stone.Value >=1 then
screen.Enabled = true
screen.AlwaysOnTop = true
local sumRCoin = players.LocalPlayer.statsplayer.Stone.Value * 2
players.LocalPlayer.leaderstats.RCoin.Value = players.LocalPlayer.leaderstats.RCoin.Value + sumRCoin
print("У вас сдано камней - "..players.LocalPlayer.statsplayer.Stone.Value)
cntkamen.Text = "Сдано камней: "..players.LocalPlayer.statsplayer.Stone.Value
players.LocalPlayer.statsplayer.Stone.Value = 0
addcoinEvant:FireServer(players.LocalPlayer,sumRCoin)
print("Получено денег - "..sumRCoin)
print(player.Name)
end
отрабатывает на ура.
там же лежит простой скрипт с отработкой события:
local players = game:GetService("Players")
local addcoinEvant = game.ReplicatedStorage:WaitForChild("AddCoinsEvent")
addcoinEvant.OnServerEvent:Connect(function(owner,coinssum)
print("Пришло: "..coinssum.." от
--end
end)
Что тут может быть? голова уже кипит@@robloxmast
код работает отлично но есть проблемка когда у меня сохраняются предметы в инвентаре после перезахода они дублируются и после смерти тоже
Хм, странно. Вообще я прописывал в скрипте специальные проверки, чтобы такого не было. Когда тестировал всё было норм.
что тогда с этим делать?@@robloxmast
@@4el736 Ну, надо будет проверить еще раз и может скрипт отредактирую потом
Вы выпустите видео если код обновиться? @@robloxmast
@@4el736 Если скрипт обновится, то я исправлю его в закрепленном комментарии
Не сохраняет инвентарь, я всё правильно сделал, и все названия и т.д совпадают со скриптом, так как я его скопировал. Вообще не работает.
Может ли это быть из-за того, что там по-сути стартовый набор называется не startergear, а starterpack?
И да, так-же в Output нету никаких намёков на этот скрипт.
Просидел более часа, так и не понял в чём проблема.
StarterGear и StarterPack - это разные хранилища. Для сохранения инвентаря конкретного игрока нужно указывать именно StarterGear. А StarterPack сохраняет одинаковые предметы для всех игроков (т.е. это именно стартовый набор в игре). В окне Output вообще ничего не выводит? Ты инвентарный предмет убираешь, когда выходишь из игры или он у тебя в руке?
@@robloxmast , я все предметы убираю, но ничего не работает, а в output вообще никаких намеков на то, что скрипт работает. То есть, вообще ничего не выводит.
Есть проблемка, При выходе сохраняется только 1 раз, а если заходить и выходить дальше, то загружаеться тадата которая была сохранена первой :\
та дата*
@@HEEDNEED Да, надо бы апдейтить скрипт, но у меня пока руки не доходят это сделать.
все принты что сохранено и все такое есть но оно не сохраняется но я изменял количество валюты прям заходя в explorer в value в этом дело или что?
Да, может из-за этого не сохранять
Вроде бы всё работает но есть одно но, в самом roblox studio это отличное работает и сохраняется, а вот уже конкретно в игре в обычном roblox, увы инструменты не сохраняются, сталкивался кто-то с эти? может знаете в чем проблема
Ты пробовал сохранять, когда инструмент в руках и когда инструмент убран? Во всех случаях не сохраняет?
@@robloxmast Да и так и сяк пробовал, безрезультатно, вообще не понимаю как оно так может работать, в студио хорошо а в самом роблоксе нет.
@@garrotax5854 Да, странно. Надо будет перепроверить скрипт.
@@robloxmast да было бы круто, если будет возможность проверьте сразу и в роблоксе обычном, спасибо за ответы, очень оперативно
@@robloxmast Спасибо за оперативный ответ, если будет возможность проверить и в обычном роблоксе то было бы славно, возможно и ваша версия сейчас работает в роблоксе.
А как сделать так чтобы из другой игры в другую игру сохранились данные игрока?
@@Comen-v7s Не знаю, я так не делал
@@robloxmast всё я сделал спасибо
Никак, на каждую игру своя дата
Но можно перекидывать через телепорт данные
Пишет данные сохранены, но они не загружаются в лидерстатс роблокса и все по 0(
После обновлений Роблокса скрипт может некорректно работать
ой наверное ты меня не заметишь но у меня оружие не сохранились а деньги сохранились не знаю почему но все равно спасибо за старание
Да, у некоторых не сохраняется. Надо бы перепроверить и улучшить этот скрипт, но у меня пока руки не доходят))
У меня так же есть вопрос насчёт инвентаря. Я делаю такой момент что мне нужно нажать на монтировку и после этого она должна появиться в инвентаре ну мой скрипт не робит. мой скрипт ниже
script.Parent.ClickDetector.MouseClick:Connect(function(click)
local b=Instance.new("Tool")
b.Parent = game.Players.LocalPlayer.Backpack
end)
@@JustOLeg-q4u Этот скрипт не пойдет. Получается, ты создаешь пустой "Tool" и помещаешь его в рюкзак. Но это так не работает)) Элемент "Tool" должен быть совмещен с конкретным предметом (в данном случае с монтировкой).
19:07 - посмотри в этом моменте как выглядят инвентарные предметы. Предмет уже должен содержать "Tool" и "Handle", чтобы поместить его в рюкзак.
И команда для определения игрока "game.Players.LocalPlayer" будет работать только в локальном скрипте (LocalScript). Т.е. если ты пишешь эту строку в серверном скрипте (Script), то будет ошибка.
понял принял@@robloxmast
получается мне нужно в workspace создать монтировку ту самую и при нажатие дублировать в рюкзак?
Ну в твоем случае я бы сделал так:
1. Поместить инвентарную монтировку (которая содержит "Tool" и "Handle") в ServerStorage.
2. В Workspace поместить неактивную копию монтировки, чтобы она не бралась в игре без клика. Для этого можно убрать внутри "Tool" или переименовать "Handle".
3. В скрипте после клика прописать копирование монтировки в рюкзак из ServerStorage (примерно также, как у меня это действие прописано в скрипте для сохранения инвентаря).
не работает скрипт для сохранения вещей:( а мне нада для игры пвп в которой можно получить новое оружие а чтобы игроку не переполучать ещё раз например оружие сложно получить то так он вообще скорее игру забросит
Буду дорабатывать скрипт потом
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("PlayerInventorySaves")
function PlayerInventory(player)
local playerInventory = {}
for _, tool in pairs(player.Backpack:GetChildren()) do
if tool then
table.insert(playerInventory, tool.Name)
end
end
return playerInventory
end
function LoadPlayerInventory(player, data)
for _, tool in pairs(data) do
local toolInStorage = game.ServerStorage.Tools:FindFirstChild(tool)
local toolInBackpack = player.Backpack:FindFirstChild(tool)
local toolInStarterGear = player.StarterGear:FindFirstChild(tool)
if toolInStorage and not toolInBackpack and not toolInStarterGear then
toolInStorage:Clone().Parent = player.Backpack
toolInStorage:Clone().Parent = player.StarterGear
end
end
end
function PlayerRemoving(player)
local character = player.Character
if character then
character:WaitForChild("Humanoid"):UnequipTools()
end
local playerInventory = PlayerInventory(player)
local setSuccess, errorMessage = pcall(function()
DataStore:SetAsync(player.UserId, playerInventory)
end)
if setSuccess then
print("Данные сохранены в хранилище", DataStore.Name)
else
warn(errorMessage)
end
end
game.Players.PlayerRemoving:Connect(PlayerRemoving)
function PlayerAdded(player)
local getSuccess, savedData = pcall(function()
return DataStore:GetAsync(player.UserId)
end)
if getSuccess then
print("Подключено хранилище", DataStore.Name)
else
warn("Не удалось подключиться к хранилищу", DataStore.Name)
end
if savedData then
LoadPlayerInventory(player, savedData)
print("Данные загружены из хранилища", DataStore.Name)
else
warn("Нет сохраненных данных в", DataStore.Name)
end
end
game.Players.PlayerAdded:Connect(PlayerAdded)
game:BindToClose(function()
for _, player in pairs(game.Players:GetPlayers()) do
PlayerRemoving(player)
end
task.wait(1)
end) вот доделаный скрипт
у меня не работает
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("PlayerInventorySaves")
function PlayerInventory(player)
local playerInventory = {}
for _, tool in pairs(player.Backpack:GetChildren()) do
if tool then
table.insert(playerInventory, tool.Name)
end
end
return playerInventory
end
function LoadPlayerInventory(player, data)
for _, tool in pairs(data) do
local toolInStorage = game.ServerStorage.Tools:FindFirstChild(tool)
local toolInBackpack = player.Backpack:FindFirstChild(tool)
local toolInStarterGear = player.StarterGear:FindFirstChild(tool)
if toolInStorage and not toolInBackpack and not toolInStarterGear then
toolInStorage:Clone().Parent = player.Backpack
toolInStorage:Clone().Parent = player.StarterGear
end
end
end
function PlayerRemoving(player)
local character = player.Character
if character then
character:WaitForChild("Humanoid"):UnequipTools()
end
local playerInventory = PlayerInventory(player)
local setSuccess, errorMessage = pcall(function()
DataStore:SetAsync(player.UserId, playerInventory)
end)
if setSuccess then
print("Данные сохранены в хранилище", DataStore.Name)
else
warn(errorMessage)
end
end
game.Players.PlayerRemoving:Connect(PlayerRemoving)
function PlayerAdded(player)
local getSuccess, savedData = pcall(function()
return DataStore:GetAsync(player.UserId)
end)
if getSuccess then
print("Подключено хранилище", DataStore.Name)
else
warn("Не удалось подключиться к хранилищу", DataStore.Name)
end
if savedData then
LoadPlayerInventory(player, savedData)
print("Данные загружены из хранилища", DataStore.Name)
else
warn("Нет сохраненных данных в", DataStore.Name)
end
end
game.Players.PlayerAdded:Connect(PlayerAdded)
game:BindToClose(function()
for _, player in pairs(game.Players:GetPlayers()) do
PlayerRemoving(player)
end
task.wait(1)
end) вот доделаный скрипт
сделал как в видео, но не получилось сделать сохранение
В окне Output ошибки пишет какие-нибудь?
нет никаких ошибок не пишет. пишет что Данные сохранены в хранилище PlayerDataSaves а потом когда заходишь - Данные загружены из хранилища PlayerDataSaves - Server - saving sats:54
но не сохраняется
когда захожу ничего нету
Хм... Вообще, если пишет "Данные загружены из хранилища", значит что-то было сохранено. Ты ведь сохраняешь данные из таблицы лидеров? Сама таблица лидеров у тебя нормально работает?
@@robloxmast теперь у меня сохраняется только 1 предмет из 2. в папке tools все предметы есть
У меня чёт данные не хотят сохраняться при выходе
В окне "Output" какие-нибудь ошибки выводятся?
Нет, вообще ничего не пишет ни ошибок ничего
@@l_spore_l А не сохраняются данные из таблицы лидеров или инвентарь?
@@robloxmast Из таблицы лидеров
Даже так скажу, я как только вставил скрипт и пробывал сохранять в первый раз сохранилось, во второй раз сохранилось только старое сохранение, потом через ещё 2-3 попытки перезаходов перестало вообще сохранять
Скрипт на сохранение инвентаря не работает пожалуйста проверте скрипт
@@Strim_gams Да, после обновлений Роблокса есть проблемы с этим вариантом скрипта
Не срабатывает CharacterRemoving и из за этого срабатывает
Что срабатывает?
@@robloxmast
При входе:
Подключено хранилище PlayerDataSaves - Server - Stars:47
10:18:07.008 Данные загружены из хранилища PlayerDataSaves - Server - Stars:54
10:18:07.008 Подключено хранилище PlayerInventorySaves - Server - Save:65
10:18:07.009 Нет сохраненных данных в PlayerInventorySaves - Server - Save:74
При выходе:
Disconnect from ::ffff:127.0.0.1|49869 - Studio
10:19:09.633 Данные сохранены в хранилище PlayerDataSaves -
Функция не срабатывает из за строчки player.CharacterRemoving: потому что кажется, что это действие не отслеживается после удаления игрока. Если закомментировать функцию и убрать UnequipTools, то сохранение произойдет. Но хотелось бы , чтобы оружие все таки убиралось из рук и сохранялось
Да, надо будет с этим разобраться. Может потом обновлю скрипт.
не работает
у меня ошибки выходят из qutput cloud_10366079803.Add Easy Textures.UI.Main:334: setState cannot be used in the
и ещё Check the definition of render in the component "Main". что делатьь
Эти ошибки не связаны с сохранением. В этих ошибках говорится о проблемах с настройками текстур в графическом интерфейсе.
@@robloxmast а как это исправить теперь?
@@Roblox-ui2bo4yt5h Здесь не подскажу, ведь я не знаю что у тебя добавлено в игру.
@@robloxmast у меня сыллка на игру пропадает могу ник сказать там последняя игра clicker money называется ник c0cuskA_kiler
@@Roblox-ui2bo4yt5h Дружище, у меня нет времени разбирать чужие игры и искать там ошибки)) Загугли эти ошибки - наверняка найдешь ответ.