제가 알고있는건 Script: local datastore = game:GetService("DataStoreService") local teamsave = datastore:GetDataStore("team") game.Players.PlayerAdded:Connect(function(plr) local t local success, e = pcall(function() t = teamsave:GetAsync(plr.UserId) end) if not success then print("wow save not success!!!") else if t ~= nil then plr.TeamColor = BrickColor.new(t) plr:LoadCharacter() end end end) function save(plr) pcall(function() teamsave:SetAsync(plr.UserId, plr.TeamColor.Name) end) end game.Players.PlayerRemoving:Connect(function(plr) save(plr) end) while wait(300) do for i,v in pairs(game.Players:GetPlayers())do save(v) end end
안녕하세요 페어님 저는 로비와 스테이지 두 가지의 플레이스로 구성되어있는 게임을 만들고 있습니다. 게임을 시작하면 로비로 진입하고 로비에서 스테이지로 이동하면 게임을 진행하는 거죠. 그리고 스테이지에서 게임을 클리어하면 leaderstats에 stage.value를 +1 해주려고 합니다. 지금 페어님이 올려주신 LeaderstatSave 스크립트를 로비와 스테이지 두 플레이스의 ServerScriptService에 모두 넣어두고, leaderstat을 생성하는 스크립트는 로비 플레이스의 ServerScriptService 에 넣어두었습니다. 인게임에서 로비로 진입했을 때는 leaderstat이 정상적으로 나타나는데 스테이지로 진입하면 leaderstat이 사라집니다. 스테이지 플레이스에 진입했을 때에도 LeaderstatSave 스크립트를 실행하게 되는데 왜 leaderstat이 사라질까요? 스테이지 플레이스에도 leaderstat 생성하는 스크립트를 넣어줘야 나타날까요? 답변 주시면 정말 감사하겠습니다.
스튜디오에서 작동 확인이 안되나요? 최신업데이트로 랭킹을 스튜디오로 확인이 가능한것으로 아는데요. 안될까요? 발판을 밝거나, 다른 월드에서 정보를 받았을때 적용할려고 테스트를 하는데. 오류로 확인되서 2022.06.23기준으로 문의드립니다. 용도: 저장된 데이터를 게시판형(블록) 리더보드에 적용 오류메세지. Workspace.Ranking.Leaderboard.Script:20: attempt to call a boolean value - 서버 - Script:20 Humnoid is not a valid member of Player "Players.캐릭터명" - 서버 - Script:7
리더보드 저장이 안돼요 local data = game:GetService("DataStoreService") local leader = data:GetDataStore("leaderboardsave") local dontsave = {} function checkname(coin) for i, v in pairs(dontsave)do if v == coin then return false end end return true end function savedata(plr) local runservice = game:GetService("RunService") if runservice:IsStudio() then return end if not plr:FindFirstChild("loaded") or plr.loaded.Value == false then return end plr:WaitForChild("leaderstats") for i, v in pairs(plr.leaderstats:GetChildren())do if string.find(v.ClassName, "Value") and checkname(v.coin) then repeat local success = pcall(function() leader:SetAsync(plr.UserId..v.coin, v.Value) end) wait(0.5) until success end end end function loaddata(plr) local runservice = game:GetService("RunService") if runservice:IsStudio() then return end plr:WaitForChild("leaderstats") wait(1) for i, v in pairs(plr.leaderstats:GetChildren())do if string.find(v.ClassName, "Value") and checkname(v.coin) then local success = pcall(function() local data = leader:GetAsync(plr.UserId..v.coin) if data ~= nil then v.Value = data end end) if not success then wait(3) local success = pcall(function() local data = leader:GetAsync(plr.UserId..v.coin) if data ~= nil then v.Value = data end end) if not success then wait(3) local success = pcall(function() local data = leader:GetAsync(plr.UserId..v.coin) if data ~= nil then v.Value = data end end) if not success then wait(3) local success = pcall(function() local data = leader:GetAsync(plr.UserId..v.coin) if data ~= nil then v.Value = data end end) if not success then plr:Kick("리더보드 데이터 불러오기 실패, 재접하세요.") return end end end end end end local isloaded = Instance.new("BoolValue", plr) isloaded.Name= "loaded" isloaded.Value = true end game.Players.PlayerAdded:Connect(function(plr) local runservice = game:GetService("RunService") if runservice:IsStudio() then return end loaddata(plr) while wait(300) do savedata(plr) end end) game.Players.PlayerRemoving:Connect(function(plr) savedata(plr) end) game:BindToClose(function() local runservice = game:GetService("RunService") if runservice:IsStudio() then return end for i, v in pairs(game.Players:GetPlayers())do savedata(v) end wait(30) end) 여기서 뭐가 문제인지 모르겠어요
local data = game:GetService("DataStoreService") local leader = data:GetDataStore("leaderboardsave") local dontsave = {"Time Played", } function checkname(name) -- for i, v in pairs(dontsave)do if v == name then return false end end return true -- 4줄에 이름 없을 때 참으로 내보냄 end function savedata(plr) -- 저장 local runservice = game:GetService("RunService") if runservice:IsStudio() then return end
if not plr:FindFirstChild("loaded") or plr.loaded.Value == false then return end plr:WaitForChild("leaderstats") for i, v in pairs(plr.leaderstats:GetChildren())do if string.find(v.ClassName, "Value") and checkname(v.Name) then
repeat local success = pcall(function( leader:SetAsync(plr.UserId..v.Name, v.Value) end) wait(0.5) until success
end end end function loaddata(plr) local runservice = game:GetService("RunService") if runservice:IsStudio() then return end
plr:WaitForChild("leaderstats") wait() for i, v in pairs(plr.leaderstats:GetChildren())do if string.find(v.ClassName, "Value") and checkname(v.Name) then local success = pcall(function() local data = leader:GetAsync(plr.UserId..v.Name) if data ~= nil then v.Value = data end end) if not success then plr:Kick("Data loading failed sorry. Please try again.") return end
end end local isloaded = Instance.new("BoolValue", plr) isloaded.Name = "loaded" isloaded.Value = true end game.Players.PlayerAdded:Connect(function(plr) local runservice = game:GetService("RunService") if runservice:IsStudio() then return end
loaddata(plr) while wait(300) do savedata(plr) end end)
game.Players.PlayerRemoving:Connect(function(plr) savedata(plr) end) game:BindToClose(function() local runservice = game:GetService("RunService") if runservice:IsStudio() then return end
for i, v in pairs(game.Players:GetPlayers())do savedata(v) end wait(30) end)
@@funkytown.kr.co.neguma 음 "Date store request has added to the queue" 만 고치면 될듯한데.. 아마 좀 어려울 겁니다. 외국 스크립트 짜는 곳에서도 찾아봤는데 안되서.. 아 그리고 글로벌 리더 보드도 있어서 좀 힘드실 겁니다.
안녕하세요.페어님 제가 지금 오비를 만들고 있는중입니다 그 스크립트에서 잘못된부분이 있는지 나갔다와도 플레이어의 팀이 유지되지 않고 다시 처음 인 팀으로 돌아갑니다. 스크립트에서 function checkname 의 가로 안에 플레이어의 이름을 쓰면 안되나요? 아 그리고 페어님의 스크립트에서 한글만 지우고 다 입력했습니다.(복사->붙여넣기)잘못된부분이 있다면 알려주세요. 감사합니다:) 😷건강조심하세요👍
파트 스크립트 script.Parent.Touched:Connect(function(hit) if hit.Parent:FindFirstChild("Humanoid") then local plr = game.Players:GetPlayerFromCharacter(hit.Parent) plr.leaderstats.리더보드 이름.Value += 올라갈 값 end end) 밟을때 중복이 되서 스코어 엄청 많이 올라갈 수 있어요. 그건 따로 쿨타임 해주셔야해요.
local data = game:GetService("DataStoreService") -- 서비스 local leader = data:GetDataStore("leaderboardsave") local dontsave = {"Time Played", } -- 저장하기 싫은 리더보드 이름(대소문자 정확히) function checkname(name) -- 저장하려는 리더보드 이름 확인 for i, v in pairs(dontsave)do if v == name then return false end -- 4줄에 입력한 이름과 일치하는 게 있으면 거짓 내보냄 end return true -- 4줄에 이름 없을 때 참으로 내보냄 end function savedata(plr) -- 저장 local runservice = game:GetService("RunService") if runservice:IsStudio() then return end -- 스튜디오에서 스크립트 실행하면 에러나기 때문에 스튜디오면 함수 취소
if not plr:FindFirstChild("loaded") or plr.loaded.Value == false then return end --불러오기 했는지 1,2차 확인/ 불러오기 안한채로 저장하면 데이터 초기화되니까 plr:WaitForChild("leaderstats") -- 리더보드 생성되길 기다리기 for i, v in pairs(plr.leaderstats:GetChildren())do -- 리더보드 열어봄 if string.find(v.ClassName, "Value") -- 제대로 된 value 오브젝트인지 구함 and checkname(v.Name) then -- 저장하는 리더보드인지 확인(스크립트 4줄)
repeat -- 반복 local success = pcall(function()-- 성공했는지 알려주는 함수(pcall)와 변수(success) leader:SetAsync(plr.UserId..v.Name, v.Value) -- 저장 end) wait(0.5) -- 약간의 기다림. 반복 딜레이가 너무 짧으면 서버 과부하됨 until success --저장 성공할때까지
end end end function loaddata(plr) -- 불러오기 local runservice = game:GetService("RunService") if runservice:IsStudio() then return end -- 스튜디오에서 스크립트 실행하면 에러나기 때문에 스튜디오면 함수 취소
plr:WaitForChild("leaderstats") -- 리더보드 생성되길 기다림 wait() for i, v in pairs(plr.leaderstats:GetChildren())do -- 리더보드 열어봄 if string.find(v.ClassName, "Value") -- 제대로 된 value 오브젝트인지 구함 and checkname(v.Name) then -- 저장하는 리더보드인지 확인(스크립트 4줄) local success = pcall(function() -- 성공했는지 알려주는 함수(pcall)와 변수(success) local data = leader:GetAsync(plr.UserId..v.Name) -- 불러오기(수정된 부분) if data ~= nil then -- 불러온 데이터가 있는 경우에만 v.Value = data -- 불러온 값 적용 end -- 이부분은 영상에 없었는데 나중에 추가함 end) if not success then -- 불러오기 실패시 plr:Kick("Data loading failed sorry. Please try again.") -- 강퇴(따옴표 사이에 메세지) return -- 불러오기 함수 취소 end
end end local isloaded = Instance.new("BoolValue", plr) -- 불러오기 했다는 표시 isloaded.Name = "loaded" -- 불러오기 했다는 표시 isloaded.Value = true -- 2차 표시 end game.Players.PlayerAdded:Connect(function(plr) -- 새 플레이어 접속 local runservice = game:GetService("RunService") if runservice:IsStudio() then return end -- 스튜디오에서 스크립트 실행하면 에러나기 때문에 스튜디오면 함수 취소
loaddata(plr) -- 불러오기 while wait(300) do -- 300초마다 savedata(plr) -- 저장 --(시간 바꿔도 되는데 최소 1분 이상은 유지할 것, 너무 자주 세이브하면 서버 과부하됨) end end)
game.Players.PlayerRemoving:Connect(function(plr) -- 플레이어 나갈 때 savedata(plr) -- 저장 end) game:BindToClose(function() -- 모종의 이유로 게임 서버가 닫힐 때(업데이트, 서버 폭발 등등) local runservice = game:GetService("RunService") if runservice:IsStudio() then return end -- 스튜디오에서 스크립트 실행하면 에러나기 때문에 스튜디오면 함수 취소
for i, v in pairs(game.Players:GetPlayers())do -- 모든 플레이어 savedata(v) -- 저장 end wait(30) -- 30초 기다려서 스크립트가 데이터 저장할 시간을 벌어줌 end)
최신 버전
ua-cam.com/video/547H3OaSCIA/v-deo.html
질문이 있는데요.
파트를 밟으면 10초 기달리고 리더보드 포인트를 늘리는 스크립트는 어떻게 적나요?
스크립트 또는 영상 해 주실 수 있나요?
그러네요. 영상 준비하겠습니다
@@nofair 감사합니다 🙏
제가 알고있는건 Script: local datastore = game:GetService("DataStoreService")
local teamsave = datastore:GetDataStore("team")
game.Players.PlayerAdded:Connect(function(plr)
local t
local success, e = pcall(function()
t = teamsave:GetAsync(plr.UserId)
end)
if not success then
print("wow save not success!!!")
else
if t ~= nil then
plr.TeamColor = BrickColor.new(t)
plr:LoadCharacter()
end
end
end)
function save(plr)
pcall(function()
teamsave:SetAsync(plr.UserId, plr.TeamColor.Name)
end)
end
game.Players.PlayerRemoving:Connect(function(plr)
save(plr)
end)
while wait(300) do
for i,v in pairs(game.Players:GetPlayers())do
save(v)
end
end
진짜되네요!!! 감사합니다!!!
아 잠만 이거 옛날 거예요
ua-cam.com/video/547H3OaSCIA/v-deo.html
이게 최신꺼
위의 스크립트를 통해서 별도 월드의 로비에 데이터를 저장하고 다른 월드에서 로비에 저장한 데이터를 가져올수 있을까요?
해결 : 모듈을 사용하면 됨.
다른 스크립트에 적용시키기 위해 리더보드의 띄어쓰기를 지우게 되었습니다, 그렇게 되니 리더보드에 데이터가 연동이 안되는데 전에 있던 데이터를 다른 리더보드로 옮길 수는 없을까요?
제 게임에서 십만초, 몇만초를 잠수탄 사람들이 가득한데 zz
안녕하세요 페어님
저는 로비와 스테이지 두 가지의 플레이스로 구성되어있는 게임을 만들고 있습니다.
게임을 시작하면 로비로 진입하고 로비에서 스테이지로 이동하면 게임을 진행하는 거죠.
그리고 스테이지에서 게임을 클리어하면 leaderstats에 stage.value를 +1 해주려고 합니다.
지금 페어님이 올려주신 LeaderstatSave 스크립트를 로비와 스테이지 두 플레이스의 ServerScriptService에 모두 넣어두고,
leaderstat을 생성하는 스크립트는 로비 플레이스의 ServerScriptService 에 넣어두었습니다.
인게임에서 로비로 진입했을 때는 leaderstat이 정상적으로 나타나는데 스테이지로 진입하면 leaderstat이 사라집니다.
스테이지 플레이스에 진입했을 때에도 LeaderstatSave 스크립트를 실행하게 되는데 왜 leaderstat이 사라질까요?
스테이지 플레이스에도 leaderstat 생성하는 스크립트를 넣어줘야 나타날까요?
답변 주시면 정말 감사하겠습니다.
게임 테스트 끝내고 데이터를 다 지워서 초기화하려면 그냥 이 스크립트를 주석으로 바꿔서 업로드 했다가 다시 정상화 시키면 될까요?
스튜디오에서 작동 확인이 안되나요? 최신업데이트로 랭킹을 스튜디오로 확인이 가능한것으로 아는데요. 안될까요?
발판을 밝거나, 다른 월드에서 정보를 받았을때 적용할려고 테스트를 하는데. 오류로 확인되서 2022.06.23기준으로 문의드립니다.
용도: 저장된 데이터를 게시판형(블록) 리더보드에 적용
오류메세지.
Workspace.Ranking.Leaderboard.Script:20: attempt to call a boolean value - 서버 - Script:20
Humnoid is not a valid member of Player "Players.캐릭터명" - 서버 - Script:7
해결 : 모듈을 사용하면 됨.
리더보드 저장이 안돼요
local data = game:GetService("DataStoreService")
local leader = data:GetDataStore("leaderboardsave")
local dontsave = {}
function checkname(coin)
for i, v in pairs(dontsave)do
if v == coin then return false end
end
return true
end
function savedata(plr)
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
if not plr:FindFirstChild("loaded") or plr.loaded.Value == false then return end
plr:WaitForChild("leaderstats")
for i, v in pairs(plr.leaderstats:GetChildren())do
if string.find(v.ClassName, "Value")
and checkname(v.coin) then
repeat
local success = pcall(function()
leader:SetAsync(plr.UserId..v.coin, v.Value)
end)
wait(0.5)
until success
end
end
end
function loaddata(plr)
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
plr:WaitForChild("leaderstats")
wait(1)
for i, v in pairs(plr.leaderstats:GetChildren())do
if string.find(v.ClassName, "Value")
and checkname(v.coin) then
local success = pcall(function()
local data = leader:GetAsync(plr.UserId..v.coin)
if data ~= nil then
v.Value = data
end
end)
if not success then
wait(3)
local success = pcall(function()
local data = leader:GetAsync(plr.UserId..v.coin)
if data ~= nil then
v.Value = data
end
end)
if not success then
wait(3)
local success = pcall(function()
local data = leader:GetAsync(plr.UserId..v.coin)
if data ~= nil then
v.Value = data
end
end)
if not success then
wait(3)
local success = pcall(function()
local data = leader:GetAsync(plr.UserId..v.coin)
if data ~= nil then
v.Value = data
end
end)
if not success then
plr:Kick("리더보드 데이터 불러오기 실패, 재접하세요.")
return
end
end
end
end
end
end
local isloaded = Instance.new("BoolValue", plr)
isloaded.Name= "loaded"
isloaded.Value = true
end
game.Players.PlayerAdded:Connect(function(plr)
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
loaddata(plr)
while wait(300) do
savedata(plr)
end
end)
game.Players.PlayerRemoving:Connect(function(plr)
savedata(plr)
end)
game:BindToClose(function()
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
for i, v in pairs(game.Players:GetPlayers())do
savedata(v)
end
wait(30)
end)
여기서 뭐가 문제인지 모르겠어요
페어님 두 게임이 같은 리더보드, 같은 데이터를 공유하게 하려면 어떻게 해야 하나요 제발 알려주세요 ㅠㅠ
리더보드 똑같이 만들고 데이터 스토어도 통일시키면 안될까요
local data = game:GetService("DataStoreService")
local leader = data:GetDataStore("leaderboardsave")
local dontsave = {"Time Played", }
function checkname(name) --
for i, v in pairs(dontsave)do
if v == name then return false end
end
return true -- 4줄에 이름 없을 때 참으로 내보냄
end
function savedata(plr) -- 저장
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
if not plr:FindFirstChild("loaded") or plr.loaded.Value == false then return end
plr:WaitForChild("leaderstats")
for i, v in pairs(plr.leaderstats:GetChildren())do
if string.find(v.ClassName, "Value")
and checkname(v.Name) then
repeat
local success = pcall(function(
leader:SetAsync(plr.UserId..v.Name, v.Value)
end)
wait(0.5)
until success
end
end
end
function loaddata(plr)
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
plr:WaitForChild("leaderstats")
wait()
for i, v in pairs(plr.leaderstats:GetChildren())do
if string.find(v.ClassName, "Value")
and checkname(v.Name) then
local success = pcall(function()
local data = leader:GetAsync(plr.UserId..v.Name)
if data ~= nil then
v.Value = data
end
end)
if not success then
plr:Kick("Data loading failed sorry. Please try again.")
return
end
end
end
local isloaded = Instance.new("BoolValue", plr)
isloaded.Name = "loaded"
isloaded.Value = true
end
game.Players.PlayerAdded:Connect(function(plr)
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
loaddata(plr)
while wait(300) do
savedata(plr)
end
end)
game.Players.PlayerRemoving:Connect(function(plr)
savedata(plr)
end)
game:BindToClose(function()
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
for i, v in pairs(game.Players:GetPlayers())do
savedata(v)
end
wait(30)
end)
일단 스크립트 복사해서 leaderstats라는걸 다 skinlock이라 바꿨는데(Ctrl+Shift+F로 검색해서) 그 안에 변수가 다 bool값이여도 작동이 되나요?
안된다면 왜 안되는지 알려주실수 있나요?
노페어님 plr 리더보드 Value 를 Gui 식으로 이제 plr 이름 치고 보낼금액 쳐서 보낼수 있게끔 좀.. 스크좀 짜서 영상 올려주시면 좋겠습니다.
F9 누르시고 서버로그 들어가서 game.Players.(닉네임).leaderstats.(돈 이름).Value=(보낼 양) 이렇게 치시면 그냥 되요
페어님 이거 리더보드 스크립트 잘쓰다가 갑자기 저장이 안되는데 어떻게해요? 제가 게임을 만들었는데 저장이 안되면 게임자체가 망한거여서... 답변 부탁드립니다.
제가 해드리져 스튜 초대 좀요
@@funkytown.kr.co.neguma 음 "Date store request has added to the queue" 만 고치면 될듯한데.. 아마 좀 어려울 겁니다. 외국 스크립트 짜는 곳에서도 찾아봤는데 안되서.. 아 그리고 글로벌 리더 보드도 있어서 좀 힘드실 겁니다.
@@user-wm1rj4cg1u 이유 못찾으셨나요?
안녕하세요.페어님
제가 지금 오비를 만들고 있는중입니다
그 스크립트에서 잘못된부분이 있는지 나갔다와도 플레이어의 팀이 유지되지 않고 다시 처음 인 팀으로 돌아갑니다. 스크립트에서 function checkname 의 가로 안에 플레이어의 이름을 쓰면 안되나요? 아 그리고 페어님의 스크립트에서 한글만 지우고 다 입력했습니다.(복사->붙여넣기)잘못된부분이 있다면 알려주세요. 감사합니다:) 😷건강조심하세요👍
로블록스 맵만들면 망치표시 뜨잖아요 다른사람에게 주고싶은데 그런스크립트 있으면 알려주세요 !
그런건 아마 없을거예요... 맵 개발자는 자신 뿐이니까요...
@@샤드를 있습니다
그룹만들어서 겜을 그룹겜으로 만들고 그룹설정어세 역할에서 망치모양뜰역할을 접근불가를 바꾸면됨
복사 복붙도돼나여?
페어님 리더보드에 있는 리더스탯이 정해진 수가 되면 뱃지를 지급하는 스크립트 혹시 아시나요? 아시다면 스크립트 좀 보내주실수있나요?
파트를 밟았을때 스코어보드가 올라가는 스크립트 주실수 있나요?
파트 스크립트
script.Parent.Touched:Connect(function(hit)
if hit.Parent:FindFirstChild("Humanoid") then
local plr = game.Players:GetPlayerFromCharacter(hit.Parent)
plr.leaderstats.리더보드 이름.Value += 올라갈 값
end
end)
밟을때 중복이 되서 스코어 엄청 많이 올라갈 수 있어요.
그건 따로 쿨타임 해주셔야해요.
페어님 이거 스크립트만 따로 저장하는법좀 알려주세요;;
스크립트는 자동으로 저장 되요
노페어님 점프맵 스테이지 저장하는거 알려주세요.
그거 저가 알려드릴 수 있을 거 같아요
팀저장하는 스크립트는 없나요 모르는 사람이 너무 많아요..
로블록스 스튜디오 팀 저장하기 검색하시면 나올겁니다
팀저장이 그저장이 아니라
:team 이름 팀이름치면 팀에들어가지는데 나가면 다른팀이 되는거 때문에
팀에들어가고 나가도 다른팀이 되지 않게 하는거를..
네, 그 스크립트가 플레이어 나가기 직전 팀을 저장하고 다시 들어왔을 때 저장한 팀으로 넣어줍니다.
페어님, 로블록스 리더보드에 돈시스템 넣고, 그 돈시스템으로 사람들과 주고받을 수 있는 GUI제작하는 과정(방법) 올려주실 수 있으시면 올려주세요~^^!
감사합니다ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
설명한것들다 수정해야되요?
혹시 돈을 넣었다 뺄 수 있는 은행도 가능한가요
제 생각에는 당연히 가능한 것 같습니다
다른 리더보드스크립트로도 이거 넣을수 있나요?
네
@@nofair 님 궁금한게 있는데요 저 리더보드랑 gui상점이 작동을 않해요
왜작동이 않돼나요? 저는 로블록스 업데이트로 스크립트가 빠뀐걸로 알고있는데... 혹시 알고계시면 답글좀 해주세요
@@익명-n6u gui 상점은 조만간 다시 올리겠습니다. 리더보드는 저거 저장이 안된다는 뜻인가요?
@@nofair 그 저장이 아니라 리더보드를 다 친후 작동을 시켰는데 리더보드글자가 않나와요
다시올려주시면 감사합니다
@@익명-n6u 스크립트 보여줘봐요
리더보드 말고 그냥 value 저장스크는 없나요
앗 이부분!!!
8:37
? 뭐가있길래
@@리스-g5t 저게 없었으면 이중반복문 싸야해서요
@@IAmAYeezus 아항
저 이거 보면 제발 답좀 uncommitted라면서 저장할때 뜨는데
어케행햐해여 스크립트 실행이 안됨 ;;
Drafts 가서 그거 commit 하면 됌
저장안할 리더보드가 없는디 어케해요
나갔다와도 그스테이지에 태어날수 없음요?
알려주세요 저이거 필요해서ㅠㅠ
목소리가 작아요;;
페어님 복사가안되요...
local data = game:GetService("DataStoreService") -- 서비스
local leader = data:GetDataStore("leaderboardsave")
local dontsave = {"Time Played", } -- 저장하기 싫은 리더보드 이름(대소문자 정확히)
function checkname(name) -- 저장하려는 리더보드 이름 확인
for i, v in pairs(dontsave)do
if v == name then return false end -- 4줄에 입력한 이름과 일치하는 게 있으면 거짓 내보냄
end
return true -- 4줄에 이름 없을 때 참으로 내보냄
end
function savedata(plr) -- 저장
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
-- 스튜디오에서 스크립트 실행하면 에러나기 때문에 스튜디오면 함수 취소
if not plr:FindFirstChild("loaded") or plr.loaded.Value == false then return end
--불러오기 했는지 1,2차 확인/ 불러오기 안한채로 저장하면 데이터 초기화되니까
plr:WaitForChild("leaderstats") -- 리더보드 생성되길 기다리기
for i, v in pairs(plr.leaderstats:GetChildren())do -- 리더보드 열어봄
if string.find(v.ClassName, "Value") -- 제대로 된 value 오브젝트인지 구함
and checkname(v.Name) then -- 저장하는 리더보드인지 확인(스크립트 4줄)
repeat -- 반복
local success = pcall(function()-- 성공했는지 알려주는 함수(pcall)와 변수(success)
leader:SetAsync(plr.UserId..v.Name, v.Value) -- 저장
end)
wait(0.5) -- 약간의 기다림. 반복 딜레이가 너무 짧으면 서버 과부하됨
until success --저장 성공할때까지
end
end
end
function loaddata(plr) -- 불러오기
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
-- 스튜디오에서 스크립트 실행하면 에러나기 때문에 스튜디오면 함수 취소
plr:WaitForChild("leaderstats") -- 리더보드 생성되길 기다림
wait()
for i, v in pairs(plr.leaderstats:GetChildren())do -- 리더보드 열어봄
if string.find(v.ClassName, "Value") -- 제대로 된 value 오브젝트인지 구함
and checkname(v.Name) then -- 저장하는 리더보드인지 확인(스크립트 4줄)
local success = pcall(function() -- 성공했는지 알려주는 함수(pcall)와 변수(success)
local data = leader:GetAsync(plr.UserId..v.Name) -- 불러오기(수정된 부분)
if data ~= nil then -- 불러온 데이터가 있는 경우에만
v.Value = data -- 불러온 값 적용
end -- 이부분은 영상에 없었는데 나중에 추가함
end)
if not success then -- 불러오기 실패시
plr:Kick("Data loading failed sorry. Please try again.") -- 강퇴(따옴표 사이에 메세지)
return -- 불러오기 함수 취소
end
end
end
local isloaded = Instance.new("BoolValue", plr) -- 불러오기 했다는 표시
isloaded.Name = "loaded" -- 불러오기 했다는 표시
isloaded.Value = true -- 2차 표시
end
game.Players.PlayerAdded:Connect(function(plr) -- 새 플레이어 접속
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
-- 스튜디오에서 스크립트 실행하면 에러나기 때문에 스튜디오면 함수 취소
loaddata(plr) -- 불러오기
while wait(300) do -- 300초마다
savedata(plr) -- 저장
--(시간 바꿔도 되는데 최소 1분 이상은 유지할 것, 너무 자주 세이브하면 서버 과부하됨)
end
end)
game.Players.PlayerRemoving:Connect(function(plr) -- 플레이어 나갈 때
savedata(plr) -- 저장
end)
game:BindToClose(function() -- 모종의 이유로 게임 서버가 닫힐 때(업데이트, 서버 폭발 등등)
local runservice = game:GetService("RunService")
if runservice:IsStudio() then return end
-- 스튜디오에서 스크립트 실행하면 에러나기 때문에 스튜디오면 함수 취소
for i, v in pairs(game.Players:GetPlayers())do -- 모든 플레이어
savedata(v) -- 저장
end
wait(30) -- 30초 기다려서 스크립트가 데이터 저장할 시간을 벌어줌
end)
혹시 그 점프맵하다 보변 있는 불투명해서 점프해서 앞으로가면 통과돼면서 슉 올라가는 그거 만드는 법점...^^
옐롯님 영상에 엘리베이터 있는데 그게 아마 맞을겁니다
감사합니다