쉬운방법: ruclips.net/video/FUOiNBslPjs/видео.htmlsi=v7iQQgj_6EnGLpVj 현재 도구상자 검색에서 모델이 안잡힙니다 링크 들어가서 받아주세요: create.roblox.com/marketplace/asset/12095787197 그후에 도구상자에서 인벤토리(창문 모양 아이콘) 들어가면 찾을수있습니다
리더보드 불러오는 스크에 OnValueChanged 함수밑에 체인지된거 다 적기 귀찮으신분들은 이거 쓰셈 체인지드있는거 다 빼고 for i , v in pairs(leaderstats:GetChildren()) do v.Changed:Connect(function() OnValueChanged(v) end) end
음...노페어님 영상보니 좀 그런데요 앞에서 보여준 리더보드 스크립트가 문제가 있는게 아닌데 앞에 보여준게 기본인거고 노페어님이 만드신건 거기에 추가로 중간중간 저장하는건데 표현이 이건 아니다 이렇게 쓰면 절대 안된다 이런식이던데 혹시나 스크립트를 잘 모르는 분들이 보면 오해할수도 있을듯 아니면 다른 뜻이 있는건가
StarterPlayer에 넣어도 그게 플레이어 개체 안에 직접 들어오지는 않습니다. 대신 leaderstats 파일과 IntValue를 어디에 따로 만들어둔 다음에 플레이어 안에 그걸 Clone() 써서 복제해 넣는 건 가능합니다만 최적화에 있어서는 Instance.new로 직접 생성하는 것이 나아 이 방법을 쓰고 있습니다
궁금하게 있는데요. 배드워즈 같은 여러 게임에서는 로비에서 순간이동 같은걸 해서 본격적으로 게임이 시작 되는데 다른 게임으로 순간이동을 하는 법은 알겠는데 이동하는 게임이 공개가 되어있어야 플레이어가 들어올 수 있는 거 같아서 비공개로 바꾸면은 안될거 같고 근데 또 공개로 바꾸면 바로 본게임으로 들어갈 수 있게될 거 같아서 여러 게임들처럼 처음 들어간 게임을 통해서만 본게임에 들어갈 수 있는 방법 없나요?
리더보드는 제가 처음으로 스크립트를 적어보는거라서 여러 영상들을 보다가, 노페어님 영상을 보고 그룹 리더보드의 문자값을 보여주셨어서 이 부분까지는 쉽게 따라서 할 수 있었는데요, 이제 그 후에 제가 막히는 것은 불러온 데이터 설정하는 부분과 데이터 업데이트/저장하는 부분 그리고 데이터 저장 스크립트를 열어서 누른 후에 데이터 템플릿에서는 기본값을 어떻게 적어나가야하는지 설명이 없으셔서 자세히 알고싶은데 알려주실 수 있을까요?
06:26초? 부분의 원리라 해야하나 스크립트 상에 요구하는걸 토데로 제가 만들어 봤는데 이 스크립트에서는 무슨 문제가 발생할수 있을까요 문제가 있다면 조언좀 해주실수 있으실까요 local DataStoreService = game:GetService('DataStoreService') local Players = game:GetService('Players') local DataStack = {} local UpdateStats = {} local function AddLeaderstats(type, name, value, player) local stats = Instance.new(type, player.leaderstats) stats.Name = name stats.Value = value
DataStack[player][name] = value UpdateStats[player][name] = function(value) stats.Value = value DataStack[player][name] = stats.Value end
return stats end local function GetDatas(player, stack) local a, b = pcall(function() return DataStoreService:GetGlobalDataStore():GetAsync(player.userId) end)
if a then return b end
if stack and stack > 5 then return false end
GetDatas(player, stack and stack + 1 or 1) end local function SaveData(player, stackOff) delay(0, function() DataStoreService:GetGlobalDataStore():SetAsync(player, DataStack[player]) if player:IsDescendantOf(Players) then SaveData(player) end if stackOff == true then return 0; end SaveData(player, true) end) end Players.PlayerAdded:Connect(function(player) DataStack[player] = {} UpdateStats[player] = {}
local LeaderStats = Instance.new('Folder', player) LeaderStats.Name = 'leaderstats' local Money = AddLeaderstats('NumberValue', 'Money', 500, player) local Crystal = AddLeaderstats('NumberValue', 'Crystal', 0, player) local Coal = AddLeaderstats('NumberValue', 'Coal', 10, player) local Gold = AddLeaderstats('NumberValue', 'Gold', 0, player)
local Datas = GetDatas(player)
if Datas then for i,v in next,Datas do UpdateStats[player][i](v) end end
일단 type랑 stats가 이미 쓰이고 있는 이름이라 변수명을 바꿔야 된다는 걸 빼면 준수하게 잘 쓰셨습니다. 엄청 깔끔하네요. 다만 :SetAsync(player, DataStack[player]) 에서 .userId 빼먹으셨네요 GetAsync에서는 쓰셨는데.. 그리고 SetAsync 시도가 실패했을 경우에 대한 대비가 없습니다. 플레이어 나갈 때 저장이랑 자동저장 부분을 나중에 추가할다 쳤을 때 플레이어가 만약 들어오자마자 나가버리면 UpdateStats[player][i](v)를 하기 전에 DataStack[player] = {}로 데이터가 저장될 위험도 있습니다. 그 경우 그냥 다 날아가버리는 거죠. 드문 경우이긴 한데 한 플레이어가 동시에 2개의 서버에 접속했을 때 경우도 대비할 필요가 있습니다. 저는 이런 것들을 하나씩 죄다 신경쓰며 스크립트를 쓰고 싶지 않아서 그냥 모듈을 쓰곤 합니다. 그런데 좋은 시도였어요. 저도 모듈 쓰기 전에는 저렇게 여러모로 시도해보았고 그랬으니까요.
@@nofair userId 빼먹으셨네요 - 추가 했습니다. SetAsync 시도가 실패했을 경우에 대한 대비가 없습니다. - wait과 같은 효과를 불러오는 Async상 실패시 바로 SaveData가 호출되어 스택이 쌓이는 경우를 배제하고 다시 시도하게 만들었습니다. (재귀함수) 플레이어 나갈 때 저장이랑 자동저장 부분을 나중에 추가할다 쳤을 때 플레이어가 만약 들어오자마자 나가버리면 UpdateStats[player][i](v)를 하기 전에 DataStack[player] = {}로 데이터가 저장될 위험도 있습니다. 그 경우 그냥 다 날아가버리는 거죠. - AddLeaderstats로 데이터 확장이 먼저되고 그후 GetData가 로딩될때까지 기다리기에 SaveData가 호출이 된다해도 상관은 없습니다. 드문 경우이긴 한데 한 플레이어가 동시에 2개의 서버에 접속했을 때 경우도 대비할 필요가 있습니다. - 이거는 좀 더 생각해 보는 게 좋겠네요. 제 시점에서는 2개 모두 다 잘 처리가 되있어 보여서 한번더 물어봅니다.
일단 로블록스 스튜디오에 저장되는 건 없습니다 데이터 저장 영상에 나오는데 게임 설정에서 스튜디오 저장을 허용하면 게임 데이터베이스랑 그걸 공유합니다 플레이어 이름, 아바타, 기어, 그룹 관련 정보, 로벅스, 프리미엄페이 등 로블록스 전체에 적용되는 정보는 우리가 저장할 필요가 없습니다 다만 게임 안에서의 돈, 레벨, 아이템 등 해당 게임에서만 쓰는 정보는 우리가 따로 저장 스크립트를 써줘야합니다. 정보는 게임 내 데이터베이스에 저장됩니다. 예외로 게임패스와 배지 정보는 로블록스가 알아서 기록해줘서 저장할 필요가 없는데 그것 말고는 다 저장 스크립트를 씁니다.
안녕하세요 노페어님! 덕분에 리더보드 스크립트는 무사히 완료 할 수 있었는데, 게임 플레이 시간으로 무언갈 하는 게임을 만들다 보니깐 아직은 스크립팅 매우 초보라 저 많고 많은 복잡한 스크립트 중에서 어디다가 1초마다 리더보드 변수? 라고 해야하는지 암튼 "Times" 값이 1씩 올라가는 걸 넣어야 할지 모르겠어서, 실례지만 페어님께서 넣으면 적절할 것 같은 위치를 찾아 알려주시면 감사하겠습니다! 유튜브 많이 참고 하며 만든 스크립트의 내용은 이렇습니다! while task.wait(1) do Times.Value = Times.Value + 1 end end) 도움을 주신다면 정말 감사드리겠습니다!
진짜 대충 그리고 제 실력도 많이 안좋아서 잘 작동할진 모르겠지만, local Players = game:GetService("players") local DM =game:GetService("ServerScriptService).DataManager Players.PlayerAdded:connect(function(plr)local times1 = plr.leaderstats.times local Data = DM:GetData(plr) while Not Data Do Data = Dm:GetData(plr) while true do for I =1, 250 do times1.value = times1.value + 1 DM:UpdateData(plr, times, times1.value) task.wait(1) end DM:SaveData end end) (서버 팔때 플레이어는 작동 안할수도)
노페어님 저는 페어님 강좌 꼬박꼬박 들으면서 겜을 만들고 있습니다. 이번 데이터 저장 스크립트를 쓰고 데이터를 추가하면서 문제가 생겨서 물어봅니다 리더보드 스크립트에 leaderstats 폴더를 추가하는 부분에 두번째 leaderstats폴더를 추가하고 그안에 다른 데이터를 저장하게 해보았는데 저장이 안돼서 여쭤봅니다 참고로 2번째 leaderstats폴더의 데이터는 리더보드에 표시하지 않을꺼입니다.(이름도 leaderstats가 아닌 다른이름)
로컬스크립트에서 값을 조작할 수 있으면 핵쟁이들이 돈을 9999999999만큼 불릴 수 있습니다. 그래서 로블록스에서 자동으로 막혀있어요 로컬스크립트에서는 플레이어가 어떤 행동을 했다 정도만 리모트 이벤트로 신호 보내주고 서버 스크립트에서 그 신호를 받아 올려주면 됩니다.
ruclips.net/video/qYXex74gGYI/видео.html 이 영상 보면 11:16에서 데이터 초기화하는 거 보여줍니다. 기본 데이터 템플릿으로 바꿔주는 스크립트인데 DataManager 스크립트 열어서 맨 아래 보시면 해당 함수 확인 가능해요 아예 nil로 모든 정보를 없앨 수도 있고 원하는 다른 데이터로 교체하시면 됩니다
제가 두 리더보드 항목 money와 Rebirth를 만들고 위와같이 했더니 money는 정상적으로 저장 되지만 Rebirth는 저장이 되지 않습니다. 제가 money만 만들고 테스트후 Rebirth 항목을 추가해 저장 할려고 했더니 이부분에서 문제가 생긴거 같은데 영상에 6:44 를 따라 해도 Revirth는 저장이 되지 않아요
리모트 이벤트 자체는 못막습니다. 그래서 이게 진짜 가능한 이벤트 신호인지 서버에서 확인 작업을 거쳐주어야 합니다. 예를 들면 상점 구매 리모트 이벤트를 쐈다 하면 이 플레이어가 정말 돈이 충분한지 확인하는 조건문을 써주거나 할 수 있죠. 이상한 리모트 이벤트 신호가 지나치게 많이 오면 킥하는 스크립트를 추가해도 좋고요
쉬운방법: ruclips.net/video/FUOiNBslPjs/видео.htmlsi=v7iQQgj_6EnGLpVj
현재 도구상자 검색에서 모델이 안잡힙니다
링크 들어가서 받아주세요: create.roblox.com/marketplace/asset/12095787197
그후에 도구상자에서 인벤토리(창문 모양 아이콘) 들어가면 찾을수있습니다
빠른 대처 감사합니다.
👍👍
리더보드 불러오는 스크에 OnValueChanged 함수밑에 체인지된거 다 적기 귀찮으신분들은 이거 쓰셈 체인지드있는거 다 빼고
for i , v in pairs(leaderstats:GetChildren()) do
v.Changed:Connect(function()
OnValueChanged(v)
end)
end
와 대박 한국 유튜버가 다른 한국 유튜버 스크립트를 고쳤는데;;
음...노페어님 영상보니 좀 그런데요 앞에서 보여준 리더보드 스크립트가 문제가 있는게 아닌데 앞에 보여준게 기본인거고 노페어님이 만드신건 거기에 추가로 중간중간 저장하는건데 표현이 이건 아니다 이렇게 쓰면 절대 안된다 이런식이던데 혹시나 스크립트를 잘 모르는 분들이 보면 오해할수도 있을듯 아니면 다른 뜻이 있는건가
문제많아요 pcall도 없어서 그냥 데이터 엄청나게 잘 날아가는 스큽니다 pcall이 있어도 엄청나게 잘 날아가서 그냥 앞에서 보여준 스크는 초보가 짠스크고 데이터 저장이 되기는하지만 저장할 항목이 조금만 많아져도 저장이 아예 안됩니다
이렇게 쓰면 절대 안된다고 한적은 없고 위험하다고 했습니다. 저렇게 저장하면 정말 데이터 날아갈 수 있어서 그래요
저장 부분 빼면 리더보드 스크립트 자체는 완벽합니다.
변수명이 몇개 다른 건 그냥 사람들이 일반적으로 그렇게 안쓰는 것 뿐이지 문제는 없어요
확실히 이전 저장 강좌에 비해서 스크립트가 많이 깔끔해졌네요! 감사히 잘 쓰겠습니당
리더보드는 무조껀 스크립트로 추가 해야 하는건가요? 스타터 플레이어 안에 leaderstats 파일 추가하고 intvalue 추가하면 안되는건지 궁금합미다!
StarterPlayer에 넣어도 그게 플레이어 개체 안에 직접 들어오지는 않습니다.
대신 leaderstats 파일과 IntValue를 어디에 따로 만들어둔 다음에 플레이어 안에 그걸 Clone() 써서 복제해 넣는 건 가능합니다만
최적화에 있어서는 Instance.new로 직접 생성하는 것이 나아 이 방법을 쓰고 있습니다
@@nofair 아핫 감사합니다!
오늘도 유용한 정보 알려주셔서 감사합니다!
0:57 초에 그거 만든사람 옐롯 님이에요 ... ㅠ
옐롯꺼 쓰지마셈
혹시 로컬 스크립트에서 바뀐값을 저장 할 수는 없나요?
플레이어가 들어왔다 바로 나가면 데이터가 기본값으로 저장되버려서 데이터가 유실되는데 플레이어 데이터가 로드되면 테이블에 이름넣고 저장할 때 테이블에 플레이어가 있을때만 저장하게 만들면 이 버그는 고칠 수 있지 않을까요
그걸 하는게 바로 프로필서비스
페어님 혹시 e키를 누르면 돈이 지급되는 스크립트를 알려주실 수 있으실까요..? 제가 아무리 다른 영상을 찾아봐도 안돼요.. 부탁드립니다 페어님 ㅠㅜ
++ 제 스스로 여러가지 방법과 시도를 한 끝에 해결했습니다... 죄송합니다 페어님 ㅋ큐ㅜㅜㅋㅋ
궁금하게 있는데요. 배드워즈 같은 여러 게임에서는 로비에서 순간이동 같은걸 해서 본격적으로 게임이 시작 되는데 다른 게임으로 순간이동을 하는 법은 알겠는데 이동하는 게임이 공개가 되어있어야 플레이어가 들어올 수 있는 거 같아서 비공개로 바꾸면은 안될거 같고 근데 또 공개로 바꾸면 바로 본게임으로 들어갈 수 있게될 거 같아서 여러 게임들처럼 처음 들어간 게임을 통해서만 본게임에 들어갈 수 있는 방법 없나요?
게임 안에 플레이스가 여러개 있는 구조는
본게임은 반드시 로비를 통해서만 들어갈 수 있습니다
로블록스 시스템이 그러니 안심해도 됩니다
바로 들어갈 수 있는 경우는 아예 별개의 게임으로 텔레포트한 거예요.
역시 노페어 그는 갓이야!
진짜 급한데 리더보드에서 먼저 들어온 사람은 리더보드가 정상이지만 재접하면 한팀으로 가있어요 다 대충 경비 관리자가 있는데 재접하면 경비로 보임요
리더보드는 제가 처음으로 스크립트를 적어보는거라서 여러 영상들을 보다가, 노페어님 영상을 보고 그룹 리더보드의 문자값을 보여주셨어서 이 부분까지는 쉽게 따라서 할 수 있었는데요, 이제 그 후에 제가 막히는 것은 불러온 데이터 설정하는 부분과 데이터 업데이트/저장하는 부분 그리고 데이터 저장 스크립트를 열어서 누른 후에 데이터 템플릿에서는 기본값을 어떻게 적어나가야하는지 설명이 없으셔서 자세히 알고싶은데 알려주실 수 있을까요?
각각 4:26, 5:16, 5:37 보시면 나와있습니다!
조만간 더 쉽게 할수 있게 다시 영상 올려볼게요
06:26초? 부분의 원리라 해야하나 스크립트 상에 요구하는걸 토데로 제가 만들어 봤는데 이 스크립트에서는 무슨 문제가 발생할수 있을까요 문제가 있다면 조언좀 해주실수 있으실까요
local DataStoreService = game:GetService('DataStoreService')
local Players = game:GetService('Players')
local DataStack = {}
local UpdateStats = {}
local function AddLeaderstats(type, name, value, player)
local stats = Instance.new(type, player.leaderstats)
stats.Name = name
stats.Value = value
DataStack[player][name] = value
UpdateStats[player][name] = function(value)
stats.Value = value
DataStack[player][name] = stats.Value
end
stats:GetPropertyChangedSignal('Value'):Connect(function()
DataStack[player][name] = stats.Value
end)
return stats
end
local function GetDatas(player, stack)
local a, b = pcall(function()
return DataStoreService:GetGlobalDataStore():GetAsync(player.userId)
end)
if a then
return b
end
if stack and stack > 5 then
return false
end
GetDatas(player, stack and stack + 1 or 1)
end
local function SaveData(player, stackOff)
delay(0, function()
DataStoreService:GetGlobalDataStore():SetAsync(player, DataStack[player])
if player:IsDescendantOf(Players) then
SaveData(player)
end
if stackOff == true then
return 0;
end
SaveData(player, true)
end)
end
Players.PlayerAdded:Connect(function(player)
DataStack[player] = {}
UpdateStats[player] = {}
local LeaderStats = Instance.new('Folder', player)
LeaderStats.Name = 'leaderstats'
local Money = AddLeaderstats('NumberValue', 'Money', 500, player)
local Crystal = AddLeaderstats('NumberValue', 'Crystal', 0, player)
local Coal = AddLeaderstats('NumberValue', 'Coal', 10, player)
local Gold = AddLeaderstats('NumberValue', 'Gold', 0, player)
local Datas = GetDatas(player)
if Datas then
for i,v in next,Datas do
UpdateStats[player][i](v)
end
end
SaveData(player)
end)
일단 type랑 stats가 이미 쓰이고 있는 이름이라 변수명을 바꿔야 된다는 걸 빼면 준수하게 잘 쓰셨습니다. 엄청 깔끔하네요.
다만 :SetAsync(player, DataStack[player]) 에서
.userId 빼먹으셨네요 GetAsync에서는 쓰셨는데.. 그리고 SetAsync 시도가 실패했을 경우에 대한 대비가 없습니다.
플레이어 나갈 때 저장이랑 자동저장 부분을 나중에 추가할다 쳤을 때 플레이어가 만약 들어오자마자 나가버리면 UpdateStats[player][i](v)를 하기 전에 DataStack[player] = {}로 데이터가 저장될 위험도 있습니다. 그 경우 그냥 다 날아가버리는 거죠.
드문 경우이긴 한데 한 플레이어가 동시에 2개의 서버에 접속했을 때 경우도 대비할 필요가 있습니다.
저는 이런 것들을 하나씩 죄다 신경쓰며 스크립트를 쓰고 싶지 않아서 그냥 모듈을 쓰곤 합니다.
그런데 좋은 시도였어요. 저도 모듈 쓰기 전에는 저렇게 여러모로 시도해보았고 그랬으니까요.
@@nofair
userId 빼먹으셨네요
- 추가 했습니다.
SetAsync 시도가 실패했을 경우에 대한 대비가 없습니다.
- wait과 같은 효과를 불러오는 Async상 실패시 바로 SaveData가 호출되어 스택이 쌓이는 경우를 배제하고 다시 시도하게 만들었습니다. (재귀함수)
플레이어 나갈 때 저장이랑 자동저장 부분을 나중에 추가할다 쳤을 때 플레이어가 만약 들어오자마자 나가버리면 UpdateStats[player][i](v)를 하기 전에 DataStack[player] = {}로 데이터가 저장될 위험도 있습니다. 그 경우 그냥 다 날아가버리는 거죠.
- AddLeaderstats로 데이터 확장이 먼저되고 그후 GetData가 로딩될때까지 기다리기에 SaveData가 호출이 된다해도 상관은 없습니다.
드문 경우이긴 한데 한 플레이어가 동시에 2개의 서버에 접속했을 때 경우도 대비할 필요가 있습니다.
- 이거는 좀 더 생각해 보는 게 좋겠네요.
제 시점에서는 2개 모두 다 잘 처리가 되있어 보여서 한번더 물어봅니다.
@@Journey-n-time 만약 저장이 잘된다면 그대로 쓰셔도 괜찮습니다만
개인적으로는 역시 모듈을 쓰는 게 더 안전하다고 생각합니다
저도 로블록스의 신은 아니다보니 이걸 딱 보고 문제 있겠다 없겠다 확신은 못하겠네요
제가 요즘 로블록스 맵을 만들면서 스크립트 사용할때 자주 봅니다. 좋은 정보 정말로 감사합니다. 그런데 저 스크립트에서 리더보드에 어떠한 행동을 했을때 리더보드에 수가 추가되는 법을 알려주실수있을까요?
플레이어만 구하면 player.leaderstats.money.Value += 1 식으로 올려줄 수 있습니다
그 전 첨에 시작할떼 리더보드 점수가 이미 있었는데 그러니까 리더보드랑 관련된 시스템 만들기가 어렵더라구요...이거 고치는법이나 왜 그런지 알려주시면 감사하겠습니다ㅜ
페어님!!궁금한게 있는데요 idle이용해서 툴을 들을때 애니메이션을 만들었는데 idle모션은 잘 작동 되는데 클릭 했을때 애니메이션이 오류인지 뭔지 작동이 안되는데 겹쳐쓰는게 안되는 건가요 제가 스크립트를 잘 못 쓴건가요..
그거 보통 애니메이션 에디터에서 만들 때 우선순위를 action으로 안바꾸고 그냥 바로 저장해서 그런경우가 많습니다.
어떻게 바꾸나요
@@jjeonge priority라고 쓰인 메뉴가 있을거예요
@@nofair 감사합니다
감사합니다
바로 구독 박았습니다
개인적 질문입니다!
게임에서의 저장 그리깐 플레이어스에 캐릭터이름,폴더,벨류에있는 값은 ROBLOX서버에서의 저장인가요??
아니면 ROBLOX STUDIO에 저장되는거인가요??
일단 로블록스 스튜디오에 저장되는 건 없습니다
데이터 저장 영상에 나오는데 게임 설정에서 스튜디오 저장을 허용하면 게임 데이터베이스랑 그걸 공유합니다
플레이어 이름, 아바타, 기어, 그룹 관련 정보, 로벅스, 프리미엄페이 등 로블록스 전체에 적용되는 정보는 우리가 저장할 필요가 없습니다
다만 게임 안에서의 돈, 레벨, 아이템 등 해당 게임에서만 쓰는 정보는 우리가 따로 저장 스크립트를 써줘야합니다. 정보는 게임 내 데이터베이스에 저장됩니다.
예외로 게임패스와 배지 정보는 로블록스가 알아서 기록해줘서 저장할 필요가 없는데 그것 말고는 다 저장 스크립트를 씁니다.
@@nofair 와 이렇게나 자세한 내용 정말정말 감사합니다.
안녕하세요 노페어님! 덕분에 리더보드 스크립트는 무사히 완료 할 수 있었는데, 게임 플레이 시간으로 무언갈 하는 게임을 만들다 보니깐 아직은 스크립팅 매우 초보라 저 많고 많은 복잡한 스크립트 중에서 어디다가 1초마다 리더보드 변수? 라고 해야하는지 암튼 "Times" 값이 1씩 올라가는 걸 넣어야 할지 모르겠어서, 실례지만 페어님께서 넣으면 적절할 것 같은 위치를 찾아 알려주시면 감사하겠습니다! 유튜브 많이 참고 하며 만든 스크립트의 내용은 이렇습니다!
while task.wait(1) do
Times.Value = Times.Value + 1
end
end)
도움을 주신다면 정말 감사드리겠습니다!
진짜 대충 그리고 제 실력도 많이 안좋아서 잘 작동할진 모르겠지만,
local Players = game:GetService("players")
local DM =game:GetService("ServerScriptService).DataManager
Players.PlayerAdded:connect(function(plr)local times1 = plr.leaderstats.times
local Data = DM:GetData(plr)
while Not Data Do
Data = Dm:GetData(plr)
while true do
for I =1, 250 do
times1.value = times1.value + 1
DM:UpdateData(plr, times, times1.value)
task.wait(1)
end
DM:SaveData
end
end)
(서버 팔때 플레이어는 작동 안할수도)
요즘은 스튜디오에서 포인트 리더보드를 무조건 주는 바람에 리더보드를 스튜디오에선 테스트를 못하네요
노페어님 저는 페어님 강좌 꼬박꼬박 들으면서 겜을 만들고 있습니다. 이번 데이터 저장 스크립트를 쓰고 데이터를 추가하면서 문제가 생겨서 물어봅니다
리더보드 스크립트에 leaderstats 폴더를 추가하는 부분에 두번째 leaderstats폴더를 추가하고 그안에 다른 데이터를 저장하게 해보았는데 저장이 안돼서 여쭤봅니다
참고로 2번째 leaderstats폴더의 데이터는 리더보드에 표시하지 않을꺼입니다.(이름도 leaderstats가 아닌 다른이름)
이론적으로는 그렇게 해도 가능해야 하는데
스크립트에서 에러 뜨는 거없나요?
@@nofair 에러 나는 부분이 두번째 리더스탯 폴더 안에 벨류를
Value.Value = Data.Value
이 부분에서 오류가 나옵니다.
저 벨류가 문자벨류인것 때문일까요?
@@RobotScriptStudio 에러 메시지 뭐라고 뜨던가요?
@@nofair 다른 방식으로 해보려고 현재 스크립트를 되돌려놔서 에러메세지를 모르겠네요 아직 포기한건 아니라서
다시 할때 에러메세지 뭐라고 뜨는지 알려드리겠습니다 죄송합니다.
저만 이런건지 모르겠는데
API 서비스와 HTTPS 를 키고
저 스크립트를 해봐도 적용이 안됩니다..
한쪽이 컴이고 한쪽이 모바인데
모바라서 그런건지 아니면 기기가 달라서 그런건지
원래 저장되던 스크립트도 작동이 안되네요
이건 맵을 옮겨야하나요..?
그 데이터 매니저 들어가서
원래 저장하던 스크립트와 DataStoreName 똑같도록 통일해보시겠어요?
혹시 과정 중에 빠트린 거 없는지도 한번 확인해보시고 그래도 작동이 안되면 꼭 알려주세요
이러니까 노페어가 짱이다. 옐롯은 이렇게 하면 됀다라고 하면서 바로 영상 끝나면서, 나중에 또 다시 와서 보게 만드는데, 노페어는 그냥 머리속에 넣어서 저장시켜버리누
옐롯은 초보자 스크 모르는 사람한테 좋고 노페어는 스크좀 다룰줄 아는 사람한테 좋은듯
그 죽일때마다 킬 수가 오르는 스크립트 강좌 올려주실 수 있으신가요?😢
알겠습니다
@@nofair 감사합니다!!
이거 매우 잘 사용하면서 데이터 저장하고 있는데요,
혹시 특정 플레이어의 값을 변경하려면 어떻게 하나요?
DataManager 찾아봤는데 엄청 복잡해서 못 찾겠고
어떻게 하나요?
어렵네요..
저도 방법 생각해보고 영상으로 만들어보겠습니다!
0:55 그거 옐롯님이 만들건 ㄷ..
정말 잘 사용하고 있는데요! Localscript 에서 Value 변화를 주면 저장이 안되는데 어떻게 해야할까요??
로컬스크립트에서 값을 조작할 수 있으면 핵쟁이들이 돈을 9999999999만큼 불릴 수 있습니다. 그래서 로블록스에서 자동으로 막혀있어요
로컬스크립트에서는 플레이어가 어떤 행동을 했다 정도만 리모트 이벤트로 신호 보내주고
서버 스크립트에서 그 신호를 받아 올려주면 됩니다.
@@nofair 제가 하수라서 받아 올리는게 이상하네요 ㅠㅠ 혹시 예제 하나만 간단히 작성해주실수 있으실까요?
local REMOTE = game.ReplicatedStorage:WaitForChild("EXPLOSIONXP")
player = game.Players
REMOTE.OnServerEvent:Connect(function()
player.leaderstats.TP.Value = player.leaderstats.TP.Value - 30 --gold
end)
이 스크립트가 작동이 안됩니다 ㅜㅜ
@@illbanyein
local REMOTE = game.ReplicatedStorage:WaitForChild("EXPLOSIONXP")
REMOTE.OnServerEvent:Connect(function(player
)
player.leaderstats.TP.Value = player.leaderstats.TP.Value - 30 --gold
end)
@@nofair 와 무슨 수를 써도 안되던 것이 역시 전문가 이십니다 항상 응원하겠습니다!!
로블복스 스튜디오 말고 로블록스에서 사람들이랑 할려면 어떻게 해야되나요?
노페어님 이건 좀 힘들거같긴하지만 채팅이랑 관련된 함수나 등등 이런거 알려주실수있나요..? 어드민 만들고싶어서
create.roblox.com/docs/reference/engine/classes/Chat
채팅 관련 함수들 모아둔 문서입니다!
@nofair 늦었지만 감사합니다!
초 같은 단위를 1초마다 리더보드에서 바뀌게 하려면 어떻게 해야하나요?
Tool 데이터 저장스크랑 리더보드 저장 스크 둘다 어떻게 쓰나요?
리더보드가 안뜨는데 어떻께여? ㅜㅜ
상단메뉴 보기 가서
출력 창 열어보시고
혹시 뭐 뜨는 거 없는지 확인해보세요
강의 감사합니다! 혹시 이름이 한글로 되어있으면 데이터를 불러오지 못하는 버그가 있는데 수정할 수 있는 방법이 있을까요?
표시용 이름만 한글로 하고
저장할 때 쓸 이름은 영어로 해야합니다!
apple.Name = "사과"
apple.Value = data.apple 이런 식으로요
@@nofair 그런 방식인데도 불러오는게 안되네요
@@ice_duck 스크립트 한번 보여주세요
데이터 템플릿도 확인해봅시다
@@nofair 지금 업무중이라서 내일 오전쯤에 보여드리겠습니다~
로비안에 맵1과 로비안에 맵2가 서로 정보를 공유하고 저장하는법이 뭔가요??
같은 게임이면 이미 같은 데이터스토어 공유합니다
제가 시험해 보려고 Cash로 설정 한 다음 F로 상호작용을 하면 돈이 들어오게끔 했는데
기본값을 100으로 했는데도 불과하고 10000이 들어오고 2이 플레이 하면 2명이 5000씩 나눠 가지고 상호작용을 해서 돈을 먹으면
모든 사람이 먹게 되는데 어떻게 하죠
네?
의도치 않은 암살 ..
리더보드 옐롯님꺼였는데...?
옐롯보다 노페어가 더 짬이 찼으니까 노페어님 입장에선 그렇게 보이는거죠
유튜버가 능력자도 아니고
이처럼 만들면 스튜디오에서 테스트후 정지시 화면이 끊기면서 정지 되는데 게임엔 지장이 없는거죠?
원래 그렇습니다
게임 설정가서 스튜디오 API 접근 막으면 다시 데이터 저장 꺼지면서 괜찮아질거예요
게임이 비공개로 되어있으면 작동을 안하나요?
형 좀비 같은거 AI죽이면 리더보드에 점수 올라가는 거도 만들어죠 좀비마다 다 다르게 점수 주고 싶은데 ㅠ
노페어님 군대권력게임 만든는법도 올려주세요!
에반데
@@nofair 영상을 나누면 어떤가여 1편2편같이요
@@jisigiyoutube 권력게임 제발 만들지 않는걸 추천드림 수틀리면 테러당하고 페러노이드한테 돈으로 테러당할수 있음
에반데
땡쓰 브로
그리고 숫자를 쓰면 킬로 바뀌는대요?
굿
노페어 형님 빙고겜 만드는법 알려주세요 ㅠㅠ
스크립트 datamanager에서 값을 0으로 설정하면 저장을 해도 값이 0이되는데 어떻게 해야하나요?
그건 저장이 안 된 겁니다
스튜디오에서 테스트하시려면 게임 설정 -> 보안 -> API 액세스 관련 항목 켜시면 됩니다
문자열고 똑같이 하면되나요?
네네 맞아요
StringValue만 쓰면 됩니다!
아이템 저장도 이걸로 가능한가요?
그건 따로 올려드리겠습니다
@@nofair 감사합니다!!
베리 라는 게속성에 없는대 어케해요?
노페어님 특정사람이 특정팀에 못들어가게 만드는건 어떻게 하나요..?
팀 속성 중 AutoAssignable을 끄면 팀에 자동으로 못들어가게 됩니다. 거기에 이제 원하는 사람만 넣으면 됩니다
👍
초기화 할려면 어떻게 해야하나요
가장 간단한 방법은 그냥 데이터스토어 이름을 변경하는 겁니다
영상과 관련없는 질문해서 죄송하지만 스튜디오에서는 걷기 애니메이션이 적용이 되는데 실제 로블록스 플레이어에서 실행시키면 플레이어가 걸을때 가만히 경직된채로 움직입니다. 해결방법 알려주시면 정말 감사할것 같습니다
알겠습니다
@@nofair 오 영상으로 만들어 주신다는 건가??
저작권 문제군요.
님이 만든 애니메이션을 쓰면 돼요
@@xxsdcdrrr 감사합니다. 해결했어요
@@1ampersvnd네ㅎ
저장된 유저 데이터 삭제나 수정은 어떻게하나요?
ruclips.net/video/qYXex74gGYI/видео.html
이 영상 보면 11:16에서 데이터 초기화하는 거 보여줍니다. 기본 데이터 템플릿으로 바꿔주는 스크립트인데 DataManager 스크립트 열어서 맨 아래 보시면 해당 함수 확인 가능해요
아예 nil로 모든 정보를 없앨 수도 있고
원하는 다른 데이터로 교체하시면 됩니다
@@nofair 감사합니다 보았는데 한 유저 데이터초기화 하는방법이더라구요. 데이터들을 어디서 보나요? 나중에 데이터 너무 쌓이면 오래 접속안한 유저등의 데이터들을 삭제해줘야할거같아서요
옐롯님 ㅠㅠㅠㅜ 아이고...
페어님 타워디펜스 만드는법 알려주세요 제발..
한 영상에 1시간 분량이여도
5영상 안에는 다 못만들어요.
저기 옐롯이라고 써진건뭐지?
옐롯님꺼네여 ㅎㅎ
제가 두 리더보드 항목 money와 Rebirth를 만들고 위와같이 했더니 money는 정상적으로 저장 되지만 Rebirth는 저장이 되지 않습니다. 제가 money만 만들고 테스트후 Rebirth 항목을 추가해 저장 할려고 했더니 이부분에서 문제가 생긴거 같은데 영상에 6:44 를 따라 해도 Revirth는 저장이 되지 않아요
아마 템플릿을 중간에 수정해서 그런 것 같은데
방금 리더보드 데이터 저장 모델 업데이트했으니 DataManager 스크립트를 새걸로 교체해서 다시 해보면 될 겁니다
@@nofair 고쳐 졌습니다 언제나 배우고 갑니다
@@nofair 혹시 저장된 사람들의 리더보드를 수동으로 제가 바꿀순 없나요? 또는 모든 사람 리더보드를 초기화 시키는 방법이요
해당 플레이어가 게임에 접속해있지 않는 한 없습니다
모든 사람의 리더보드 초기화라면 10줄의 StoreName을 아예 다른 것으로 바꿔버리는 게 편합니다.
리더보드 데이터 라고 검색해도 안나오는데 어케 된건가요... :(
고정댓글에 링크 추가해드렸습니다
@@nofair 헉.. 감사합니다 😍😍
페어님. 다른사람이 어떻게 하고 있는지 볼수있는건 없나요?
리더보드에는 이미 다른 사람 점수도 같이 뜹니다
아니면 다른 거 원하시는 게 있나요?
@@nofair음 그니까 제가 점프맵을 만드는데 다른 사람 시점을 볼수있게 할려고요 그.. 머더할때 죽으면 다른사람 관전하는 거 있잖아요? 저는 그걸 넣으려구요
@@이수수-g5t 아아아 그거요
@@이수수-g5t spectator gui roblox studio 이런 식으로 검색하면 괜찮은 것들 많아요
노페어님 핵쟁이들이 리모트 이벤트로 해킹하는데 잡는 방법 없을까요
리모트 이벤트 자체는 못막습니다.
그래서 이게 진짜 가능한 이벤트 신호인지 서버에서 확인 작업을 거쳐주어야 합니다.
예를 들면 상점 구매 리모트 이벤트를 쐈다 하면 이 플레이어가 정말 돈이 충분한지 확인하는 조건문을 써주거나 할 수 있죠.
이상한 리모트 이벤트 신호가 지나치게 많이 오면 킥하는 스크립트를 추가해도 좋고요
😎😎😎😎
하고 게시하기 해서 해봤는데 안되요 무슨문제일까요?
어디서 막히나요?
클릭하면 리더보드는 올라가요 근데 나갔다 들어오면 저장이 안되네요
@@thdrjsgh5 리더보드 스크립트 사이사이에 print 넣고 print(data.money) 식으로 출력해봐서 어디까지 작동하는지 한번 확인해보세요
실제 게임에서는 F9 누르면 출력창 볼 수 있어요
친구와 가치 어떻게 하나요
상단메뉴 보기 가서
팀 제작 켜시면됩니다
Stage리더보드땜에작동이않ㄷㅙ요
"stringvalue"
😱😱😎😎
잠만 옐롯 ㅋㅋㅋ
한국어 리더보드는 리더보드 숫자를 못 늘리나요
plr:WaitForChild("leaderstats").돈.Value += 1 라고하면 돈을 인식 못하는데
plr:WaitForChild("leaderstats")["돈"].Value += 1
이렇게하면 됩니다
다만 개인적으로는 그냥 영어로 한 다음에
번역 기능 이용해서 한국어로 바꾸는 걸 추천드립니다
@@nofair 감사합니다
😎😎😎😎