Почему монеты сохраняются только при первом вступлении игрока в игру? - PullRequest
0 голосов
/ 07 апреля 2020

Итак, я делаю Обби в Роблокс. У меня есть хранилище данных для сохранения значения таблицы лидеров, которые представляют собой монеты и контрольные точки. Хранилище данных, которое у меня есть, находится в ServerScriptService.

Проблема в том, что, когда игрок впервые присоединяется к игре, и он, например, проходит первые 5 уровней игры и получает 2 монеты. В следующий раз, когда они присоединятся к игре, они все еще находятся на 5 уровне, и у них все еще есть 2 монеты из предыдущей игры. Но если они теперь играют в игру (то есть, они входят в игру во второй раз) и, скажем, они достигают уровня 10 и имеют 4 монеты, процесс должен go выглядеть так, если игрок сейчас выходит из игры и когда они возвращаются , они должны быть на уровне 10 и иметь 4 монеты.

Но происходит то, что они не на уровне 10, и у них нет 4 монет, они все еще на уровне 5 и их монеты равны 2. Так же, как их прогресс был в их первой игре.

Почему это хранилище данных не обновляет значения в таблице лидеров в третий раз, когда игрок входит в игру? И так далее?

Вот скрипт, который содержит все хранилище данных, которое находится в ServerScriptService:

local DataStoreService = game:GetService("DataStoreService")
local myDataStore = DataStoreService:GetDataStore("myDataStore")


game.Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder", player)
leaderstats.Name = "leaderstats"

local Checkpoint = Instance.new("IntValue", leaderstats)
Checkpoint.Name = "Checkpoint"
Checkpoint.Value = 1

local coins = Instance.new("IntValue", leaderstats)
coins.Name = "Coins"
coins.Value = 0

--Checkpoint Section
player.CharacterAdded:Connect(function(character)

    repeat wait() until player.character ~= nil
    local checkpoint = game.Workspace.Checkpoints:FindFirstChild(Checkpoint.Value)
    character:WaitForChild("HumanoidRootPart").CFrame = CFrame.new(checkpoint.Position + 
Vector3.new(0, 2, 0))

end)

-- Data Store Section

local playerUserId = "Player_"..player.UserId
print(playerUserId)

-- Load Data

local data
local success, errormessage = pcall(function()
     data = myDataStore:GetAsync(playerUserId)

end)


if success then
    if data then
    coins.Value = data.Coins
    Checkpoint.Value = data.Checkpoint
    -- Set our data equal to the current Coins
    end
end

end)

game.Players.PlayerRemoving:Connect(function(player)
local playerUserId = "Player_"..player.UserId

local data = {

Coins = player.leaderstats.Coins.Value;
Checkpoint = player.leaderstats.Checkpoint.Value;

}

local success, errormessage = pcall(function()
    myDataStore:SetAsync(playerUserId, data)
end)

    if success then
        print("Data successfully saved!")
    else
        print("There was an error saving the data!")
        warn(errormessage)  
    end

end)

Пожалуйста, помогите, так как мне действительно нужен ответ.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...