Top.Mail.Ru
Ответы

Роблокс Студио (Rebirth)

Такая ситуация:
Было Coins 20, Wins 5, Rebirth 0

когда жму Rebirth, всё отлично сбрасывается (Coins 0, Wins 0, Rebirth 1)

НО, как только я поднимаю 1 монетку у меня почему-то становиться так:
Coins 21, Wins 0, Rebirth 1

И если заработаю 1 Wins, то отобразится Coins 21, Wins 6, Rebirth 0
-------------------
Вот код по leaderstats:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
 local dataStoreService = game:GetService("DataStoreService")
local leaderstatsDataStore = dataStoreService:GetDataStore("data") --data это имя сохранения

game.Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder",player)
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player
	 
	local wins = Instance.new("IntValue",leaderstats)
	wins.Name = "Wins"
	wins.Parent = leaderstats
	wins.Value = 0
	 
	local Rebirths = Instance.new("IntValue",leaderstats)
	Rebirths.Name = "Rebirths"
	Rebirths.Parent = leaderstats
	Rebirths.Value = 0

	local coins = Instance.new("IntValue",leaderstats)
	coins.Name = "Coins"
	coins.Parent = leaderstats
	coins.Value = 0
	
	local leaderstatsData = leaderstatsDataStore:GetAsync(player.UserId)
	if leaderstatsData ~= nil then
		wins.Value = leaderstatsData[1]
		Rebirths.Value = leaderstatsData[2]
		coins.Value = leaderstatsData[3]
	end
end)

game.Players.PlayerRemoving:Connect(function(player) --когда игрок покидает игру
	local values = {}
	for _, child in pairs(player.leaderstats:GetChildren()) do
		table.insert(values,child.Value)
	end
	pcall(function()
		leaderstatsDataStore:SetAsync(player.UserId, values)
	end)
end)

game:BindToClose(function() --привязка игры к закрытию (сохранение данных)
	for _, player in pairs(game.Players:GetPlayers()) do
		local values = {}
		for _, child in pairs(player.leaderstats:GetChildren()) do
			table.insert(values,child.Value)
		end
		pcall(function()
			leaderstatsDataStore:SetAsync(player.UserId, values)
		end)
	end
end) 

и код кнопки Rebirth

12345678910111213141516171819202122
 local player = game.Players.LocalPlayer
local wins = player:WaitForChild("leaderstats"):WaitForChild("Wins")
local coins = player:WaitForChild("leaderstats"):WaitForChild("Coins")
local rebirths = player:WaitForChild("leaderstats"):WaitForChild("Rebirths")
 
local price = script.Parent.Price.Value --цена
local amount = script.Parent.Amount.Value --сколько перерождений за эту цену

script.Parent.MouseButton1Click:Connect(function()
	if coins.Value >= price then -- Здесь указываем цену Ребёртса
		wins.Value = 0
		coins.Value = 0
		rebirths.Value += amount
		price = price * 2
	end
	
	if coins.Value < 2 then
		script.Parent.Text = "You have not Wins!"
		wait(2)
		script.Parent.Text = "Rebirth"
	end
end) 
По дате
По Рейтингу
Аватар пользователя
Гуру

В первом скрипте всё великолепно, изменения/сохранение всех значений выполняется на сервере.
А во втором скрипте ты накосячил (а), т. к. ты сохраняешь информацию о 'wins', 'coins', 'rebirths' на клиенте, а не на сервере (эти изменения не изменялись на сервере).

Надо сделать так, чтобы после нажатия на кнопку, на сервер поступал запрос о смене информации у игрока (аннулировать победы и коины, а так же добавить один 'rebirth')
Чтобы осуществить подобное, тебе нужно знать главные вещи которые позволяют взаимодействовать клиенту (игроку) с сервером (и наоборот):

1) Client-Server model: [ссылка заблокирована по решению администрации проекта] - это для понимания что такое клиент и сервер, если ты не знаешь.
2) RemoteEvent и RemoteFunction (2 документации, старая и новая): [ссылка заблокирована по решению администрации проекта] [ссылка заблокирована по решению администрации проекта]

Если лень читать все эти документации, то посмотри несколько видео о том как использовать Remote Event:
https://www.youtube.com/watch?v=GwhPXyYKkwU -- Англ. видео
https://www.youtube.com/watch?v=0J1AfkJeX3g -- Рус. видео
(Я их все вроде смотрел норм объясняли)

Главное научиться, а там уж всё легко.
Кстати ты в конце скрипта на кнопку Rebirth написал (а): script.Parent.Text = "You have not Wins!" А правильнее наверно будет писать: script.Parent.Text = "You have no Wins!" (Я тоже не мастер англ. если что, просто поправил)

Больше по теме