Сохранение данных в Roblox Studio | Сохраняем инвентарь, очки и деньги в игре

Поділитися
Вставка
  • Опубліковано 10 лют 2025

КОМЕНТАРІ • 130

  • @robloxmast
    @robloxmast  Рік тому +7

    СКРИПТ ДЛЯ СОХРАНЕНИЯ «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)

  • @besquait2882
    @besquait2882 Рік тому +2

    Бро, только сегодня эта тема понадобилась, видео в посмотреть позже понадобавлял разных, думал завтра гляну, а тут урок от тебя, наверное теперь уже другие и не понадобятся, ты темы очень хорошо раскрываешь)

  • @Vova_vtvp
    @Vova_vtvp Рік тому +1

    Оооо, то что я вообще не знаю, вот это уже имба

  • @ВадимДавыдов-я6о
    @ВадимДавыдов-я6о 11 місяців тому

    Спасибо тебе огромное, отлично объясняешь по больше бы таких как ты авторов, Надеюсь что ты добьешься успехов

    • @ВадимДавыдов-я6о
      @ВадимДавыдов-я6о 11 місяців тому

      Вопрос такой, а при смерти персонажа как сделать сохранение инвентаря ?

    • @robloxmast
      @robloxmast  11 місяців тому

      Можно к 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)

  • @TAMEPLAH
    @TAMEPLAH 10 місяців тому

    спасибо большое помог очень сильно делал игру по типу Line runner и надо было сохранение искал способы 2 недели, спасибо ещё раз❤

  • @frogbghsapdc259
    @frogbghsapdc259 10 місяців тому

    Боже боже боже ТЫ ЛУЧШИЙ СПАСИБО ОГРОМНОЕ Я ИСКАЛ ТЕБЯ 2 ДНЯ!!

  • @RelaxantStudio
    @RelaxantStudio 6 місяців тому

    спасибо, очень хорошо всё объяснил

  • @ArbuzikGamesRu-oq3eo
    @ArbuzikGamesRu-oq3eo Рік тому +1

    ДВА ВИДИО ЗА 2 ДНЯ УРААААА

    • @robloxmast
      @robloxmast  Рік тому +1

      Ну пока одно видео я выложил))

    • @ArbuzikGamesRu-oq3eo
      @ArbuzikGamesRu-oq3eo Рік тому

      а ой простите перепутал@@robloxmast

  • @oksvay
    @oksvay 8 місяців тому

    спасибо за скрипт и хорошее объяснение как он работает

  • @Roblik0
    @Roblik0 10 місяців тому

    Спасибо огромное

  • @JustOLeg-q4u
    @JustOLeg-q4u Рік тому

    Ура,победа😎😎😎😎

  • @__Adam__12347
    @__Adam__12347 Місяць тому +2

    Сохранение инвентаря не работает скрипт вписал а оно не работает

  • @NpccGaeming
    @NpccGaeming Рік тому

    можешь сделать туториал как создать магнат слияния? пожалуйста очень нужно😮

    • @robloxmast
      @robloxmast  Рік тому

      Я не играл в эту игру и не знаю какая там механика

  • @mirtlife7740
    @mirtlife7740 3 місяці тому

    спасибо у меня изза твоего скрипта слетел симулятор и теперь прийдется либо переписывать все скрипты и заного их создавать либо писать новые скрипты заного

    • @robloxmast
      @robloxmast  3 місяці тому

      Из-за моего скрипта не может ничего "слететь". Скрипт только записывает данные в игре и не влияет на саму игру. Если этот скрипт конфликтует с другими скриптами в игре, то просто удали его из игры.

    • @mirtlife7740
      @mirtlife7740 3 місяці тому

      @robloxmast у меня лидерстаты сбросились хотя всё под себя переписал и кнопки перестали работать и выдавать нужное количество валюты и за правильную стоимость, мне пришлось заного скрипты переписывать что бы исправить в любом случае скрипт не рабочий

  • @yanas2226
    @yanas2226 11 місяців тому +1

    а если мне нужно сохранить что у игрока есть доступ к функции, как это сделать?

    • @robloxmast
      @robloxmast  11 місяців тому

      А что это за функция? Что она делает?

    • @yanas2226
      @yanas2226 11 місяців тому

      @@robloxmast ну допустим функция экипировки оружия как в какомнибуть ninja legends

    • @robloxmast
      @robloxmast  11 місяців тому

      @@yanas2226 Здесь трудно что-то конкретное сказать, ибо я не играл и не знаю как эта механика реализована в игре. А от способа создания механики и будет зависеть способ сохранения.

    • @yanas2226
      @yanas2226 11 місяців тому

      @@robloxmast можно ли создать файл по типу того что в лидерстатс, и использовать его как буловую переменную, меняя значение между 0 и 1, где 0 - нет доступа, а 1 - есть, и чтобы это не отображалось в табе?

    • @robloxmast
      @robloxmast  11 місяців тому

      Да, конечно. Все эти контейнеры разных видов можно создавать без таблицы. Помимо числовых контейнеров ("NumberValue" и "IntValue") можно еще добавить к любому игровому объекту "BoolValue" для булевых значений и "StringValue" для строковых значений. И через скрипты менять эти значения при нужных событиях в игре. Потом эти значения можно сохранить также как таблицу лидеров (только вместо таблицы в скрипте указываем значения из этих контейнеров).

  • @kiruha-t3h
    @kiruha-t3h 8 місяців тому +2

    не сохраняет предметы ну там просто не пишет что сохранено и в игре ничего не происходит

    • @hoolz2746
      @hoolz2746 8 місяців тому

      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) вот доделаный скрипт

    • @ValentinValentin-s4h
      @ValentinValentin-s4h 5 місяців тому

      @@hoolz2746 Все хорошо, только character:WaitForChild("Humanoid"):UnequipTools() не отрабатывает почему то, соответственно Экипированный предмет не сохраняется

  • @aber-kraber1692
    @aber-kraber1692 11 місяців тому +1

    Проблема... Значения полученный локальным скриптом записываю в leaderstats. Записывается как надо, но при сохрании они не сохраняются. Сохранение идет через скрипт в ServerScripts. Сохраняются только данные получаемые серверными скриптами, а это для меня не вариант

    • @robloxmast
      @robloxmast  11 місяців тому

      Да, хранилищем можно пользоваться только через серверные скрипты. Но можно передать данные из локального скрипта в серверный через событие RemoteEvent или RemoteFunction.

    • @aber-kraber1692
      @aber-kraber1692 11 місяців тому

      Правильно ли понял - игрок через локальный скрипт получает некие данные, которые заносятся в его leaderstats. Заносятся корректно. Пока игрок в игре все в leaderstats отображается как и надо. Выходит из игры - сохранение производит серверный скрипт, но данные записанные в leaderstats из локального скрипта не цепляет. Получается, что данные из локального скрипта надо передать на серверный скрипт. Вернее запись в leaderstas надо произвести серверным скриптом, а не локальным. Так?@@robloxmast

    • @robloxmast
      @robloxmast  11 місяців тому

      @@aber-kraber1692 Да

    • @aber-kraber1692
      @aber-kraber1692 11 місяців тому

      Спс. Однако, что-то не срабатывает 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

  • @4el736
    @4el736 Рік тому

    код работает отлично но есть проблемка когда у меня сохраняются предметы в инвентаре после перезахода они дублируются и после смерти тоже

    • @robloxmast
      @robloxmast  Рік тому

      Хм, странно. Вообще я прописывал в скрипте специальные проверки, чтобы такого не было. Когда тестировал всё было норм.

    • @4el736
      @4el736 Рік тому

      что тогда с этим делать?@@robloxmast

    • @robloxmast
      @robloxmast  Рік тому

      @@4el736 Ну, надо будет проверить еще раз и может скрипт отредактирую потом

    • @4el736
      @4el736 Рік тому

      Вы выпустите видео если код обновиться? ​@@robloxmast

    • @robloxmast
      @robloxmast  Рік тому +1

      @@4el736 Если скрипт обновится, то я исправлю его в закрепленном комментарии

  • @baccababanimations-qy4og
    @baccababanimations-qy4og 10 місяців тому +1

    Не сохраняет инвентарь, я всё правильно сделал, и все названия и т.д совпадают со скриптом, так как я его скопировал. Вообще не работает.

    • @baccababanimations-qy4og
      @baccababanimations-qy4og 10 місяців тому +1

      Может ли это быть из-за того, что там по-сути стартовый набор называется не startergear, а starterpack?

    • @baccababanimations-qy4og
      @baccababanimations-qy4og 10 місяців тому +1

      И да, так-же в Output нету никаких намёков на этот скрипт.

    • @baccababanimations-qy4og
      @baccababanimations-qy4og 10 місяців тому +1

      Просидел более часа, так и не понял в чём проблема.

    • @robloxmast
      @robloxmast  10 місяців тому

      StarterGear и StarterPack - это разные хранилища. Для сохранения инвентаря конкретного игрока нужно указывать именно StarterGear. А StarterPack сохраняет одинаковые предметы для всех игроков (т.е. это именно стартовый набор в игре). В окне Output вообще ничего не выводит? Ты инвентарный предмет убираешь, когда выходишь из игры или он у тебя в руке?

    • @baccababanimations-qy4og
      @baccababanimations-qy4og 10 місяців тому

      @@robloxmast , я все предметы убираю, но ничего не работает, а в output вообще никаких намеков на то, что скрипт работает. То есть, вообще ничего не выводит.

  • @HEEDNEED
    @HEEDNEED 5 місяців тому

    Есть проблемка, При выходе сохраняется только 1 раз, а если заходить и выходить дальше, то загружаеться тадата которая была сохранена первой :\

    • @HEEDNEED
      @HEEDNEED 5 місяців тому

      та дата*

    • @robloxmast
      @robloxmast  5 місяців тому

      @@HEEDNEED Да, надо бы апдейтить скрипт, но у меня пока руки не доходят это сделать.

  • @oksvay
    @oksvay Рік тому

    все принты что сохранено и все такое есть но оно не сохраняется но я изменял количество валюты прям заходя в explorer в value в этом дело или что?

    • @robloxmast
      @robloxmast  Рік тому

      Да, может из-за этого не сохранять

  • @garrotax5854
    @garrotax5854 10 місяців тому

    Вроде бы всё работает но есть одно но, в самом roblox studio это отличное работает и сохраняется, а вот уже конкретно в игре в обычном roblox, увы инструменты не сохраняются, сталкивался кто-то с эти? может знаете в чем проблема

    • @robloxmast
      @robloxmast  10 місяців тому

      Ты пробовал сохранять, когда инструмент в руках и когда инструмент убран? Во всех случаях не сохраняет?

    • @garrotax5854
      @garrotax5854 10 місяців тому

      @@robloxmast Да и так и сяк пробовал, безрезультатно, вообще не понимаю как оно так может работать, в студио хорошо а в самом роблоксе нет.

    • @robloxmast
      @robloxmast  10 місяців тому

      @@garrotax5854 Да, странно. Надо будет перепроверить скрипт.

    • @garrotax5854
      @garrotax5854 10 місяців тому

      @@robloxmast да было бы круто, если будет возможность проверьте сразу и в роблоксе обычном, спасибо за ответы, очень оперативно

    • @garrotax5854
      @garrotax5854 10 місяців тому

      @@robloxmast Спасибо за оперативный ответ, если будет возможность проверить и в обычном роблоксе то было бы славно, возможно и ваша версия сейчас работает в роблоксе.

  • @Comen-v7s
    @Comen-v7s 4 місяці тому

    А как сделать так чтобы из другой игры в другую игру сохранились данные игрока?

    • @robloxmast
      @robloxmast  4 місяці тому

      @@Comen-v7s Не знаю, я так не делал

    • @Comen-v7s
      @Comen-v7s 4 місяці тому

      @@robloxmast всё я сделал спасибо

    • @DjLemoN
      @DjLemoN 4 місяці тому

      Никак, на каждую игру своя дата
      Но можно перекидывать через телепорт данные

  • @GoodHider
    @GoodHider 15 днів тому

    Пишет данные сохранены, но они не загружаются в лидерстатс роблокса и все по 0(

    • @robloxmast
      @robloxmast  15 днів тому

      После обновлений Роблокса скрипт может некорректно работать

  • @mr.chick..6399
    @mr.chick..6399 9 місяців тому

    ой наверное ты меня не заметишь но у меня оружие не сохранились а деньги сохранились не знаю почему но все равно спасибо за старание

    • @robloxmast
      @robloxmast  9 місяців тому

      Да, у некоторых не сохраняется. Надо бы перепроверить и улучшить этот скрипт, но у меня пока руки не доходят))

  • @JustOLeg-q4u
    @JustOLeg-q4u Рік тому

    У меня так же есть вопрос насчёт инвентаря. Я делаю такой момент что мне нужно нажать на монтировку и после этого она должна появиться в инвентаре ну мой скрипт не робит. мой скрипт ниже

    • @JustOLeg-q4u
      @JustOLeg-q4u Рік тому

      script.Parent.ClickDetector.MouseClick:Connect(function(click)
      local b=Instance.new("Tool")
      b.Parent = game.Players.LocalPlayer.Backpack
      end)

    • @robloxmast
      @robloxmast  Рік тому

      @@JustOLeg-q4u Этот скрипт не пойдет. Получается, ты создаешь пустой "Tool" и помещаешь его в рюкзак. Но это так не работает)) Элемент "Tool" должен быть совмещен с конкретным предметом (в данном случае с монтировкой).
      19:07 - посмотри в этом моменте как выглядят инвентарные предметы. Предмет уже должен содержать "Tool" и "Handle", чтобы поместить его в рюкзак.
      И команда для определения игрока "game.Players.LocalPlayer" будет работать только в локальном скрипте (LocalScript). Т.е. если ты пишешь эту строку в серверном скрипте (Script), то будет ошибка.

    • @JustOLeg-q4u
      @JustOLeg-q4u Рік тому

      понял принял@@robloxmast

    • @JustOLeg-q4u
      @JustOLeg-q4u Рік тому

      получается мне нужно в workspace создать монтировку ту самую и при нажатие дублировать в рюкзак?

    • @robloxmast
      @robloxmast  Рік тому

      Ну в твоем случае я бы сделал так:
      1. Поместить инвентарную монтировку (которая содержит "Tool" и "Handle") в ServerStorage.
      2. В Workspace поместить неактивную копию монтировки, чтобы она не бралась в игре без клика. Для этого можно убрать внутри "Tool" или переименовать "Handle".
      3. В скрипте после клика прописать копирование монтировки в рюкзак из ServerStorage (примерно также, как у меня это действие прописано в скрипте для сохранения инвентаря).

  • @BuldiVlad
    @BuldiVlad 8 місяців тому

    не работает скрипт для сохранения вещей:( а мне нада для игры пвп в которой можно получить новое оружие а чтобы игроку не переполучать ещё раз например оружие сложно получить то так он вообще скорее игру забросит

    • @robloxmast
      @robloxmast  8 місяців тому

      Буду дорабатывать скрипт потом

    • @hoolz2746
      @hoolz2746 8 місяців тому

      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) вот доделаный скрипт

  • @AmoHr-Games
    @AmoHr-Games 8 місяців тому +2

    у меня не работает

    • @hoolz2746
      @hoolz2746 8 місяців тому

      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) вот доделаный скрипт

  • @majeeer
    @majeeer Рік тому

    сделал как в видео, но не получилось сделать сохранение

    • @robloxmast
      @robloxmast  Рік тому

      В окне Output ошибки пишет какие-нибудь?

    • @majeeer
      @majeeer Рік тому

      нет никаких ошибок не пишет. пишет что Данные сохранены в хранилище PlayerDataSaves а потом когда заходишь - Данные загружены из хранилища PlayerDataSaves - Server - saving sats:54

    • @majeeer
      @majeeer Рік тому

      но не сохраняется
      когда захожу ничего нету

    • @robloxmast
      @robloxmast  Рік тому

      Хм... Вообще, если пишет "Данные загружены из хранилища", значит что-то было сохранено. Ты ведь сохраняешь данные из таблицы лидеров? Сама таблица лидеров у тебя нормально работает?

    • @majeeer
      @majeeer Рік тому

      @@robloxmast теперь у меня сохраняется только 1 предмет из 2. в папке tools все предметы есть

  • @l_spore_l
    @l_spore_l Рік тому

    У меня чёт данные не хотят сохраняться при выходе

    • @robloxmast
      @robloxmast  Рік тому

      В окне "Output" какие-нибудь ошибки выводятся?

    • @l_spore_l
      @l_spore_l Рік тому

      Нет, вообще ничего не пишет ни ошибок ничего

    • @robloxmast
      @robloxmast  Рік тому

      @@l_spore_l А не сохраняются данные из таблицы лидеров или инвентарь?

    • @l_spore_l
      @l_spore_l Рік тому

      @@robloxmast Из таблицы лидеров

    • @l_spore_l
      @l_spore_l Рік тому

      Даже так скажу, я как только вставил скрипт и пробывал сохранять в первый раз сохранилось, во второй раз сохранилось только старое сохранение, потом через ещё 2-3 попытки перезаходов перестало вообще сохранять

  • @Strim_gams
    @Strim_gams 14 днів тому

    Скрипт на сохранение инвентаря не работает пожалуйста проверте скрипт

    • @robloxmast
      @robloxmast  14 днів тому

      @@Strim_gams Да, после обновлений Роблокса есть проблемы с этим вариантом скрипта

  • @KPRP2G
    @KPRP2G 9 місяців тому

    Не срабатывает CharacterRemoving и из за этого срабатывает

    • @robloxmast
      @robloxmast  9 місяців тому

      Что срабатывает?

    • @KPRP2G
      @KPRP2G 9 місяців тому

      @@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, то сохранение произойдет. Но хотелось бы , чтобы оружие все таки убиралось из рук и сохранялось

    • @robloxmast
      @robloxmast  9 місяців тому

      Да, надо будет с этим разобраться. Может потом обновлю скрипт.

  • @icegamer8815
    @icegamer8815 10 місяців тому

    не работает

  • @Roblox-ui2bo4yt5h
    @Roblox-ui2bo4yt5h Рік тому

    у меня ошибки выходят из 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
      @robloxmast  Рік тому

      Эти ошибки не связаны с сохранением. В этих ошибках говорится о проблемах с настройками текстур в графическом интерфейсе.

    • @Roblox-ui2bo4yt5h
      @Roblox-ui2bo4yt5h Рік тому

      @@robloxmast а как это исправить теперь?

    • @robloxmast
      @robloxmast  Рік тому

      @@Roblox-ui2bo4yt5h Здесь не подскажу, ведь я не знаю что у тебя добавлено в игру.

    • @Roblox-ui2bo4yt5h
      @Roblox-ui2bo4yt5h Рік тому

      @@robloxmast у меня сыллка на игру пропадает могу ник сказать там последняя игра clicker money называется ник c0cuskA_kiler

    • @robloxmast
      @robloxmast  Рік тому

      @@Roblox-ui2bo4yt5h Дружище, у меня нет времени разбирать чужие игры и искать там ошибки)) Загугли эти ошибки - наверняка найдешь ответ.