【QAQ】如何制作一个智能分区的排行榜

开发游戏的时候,有时候会需要区分不同国家和地区,这里以排行榜为例分享下方法

首先在玩家加入游戏时判断其是否为中国玩家

local Players = game:GetService("Players")
local Policy = game:GetService("PolicyService")

Players.PlayerAdded:Connect(function(player)
	local ChinaInfo = Policy:GetPolicyInfoForPlayerAsync(player)
	if ChinaInfo.IsSubjectToChinaPolicies then
		--判断结果为中国玩家,做一些特殊的操作
	else
		--判断结果为其他地区,做另外的操作
	end
end)

然后下面是我写的一个排行榜代码,稍微改下就可以拿去用
这个排行榜显示的是所有服务器,包括离线玩家的数据排行

local DataStoreService = game:GetService("DataStoreService")
local BestLeaderboard = DataStoreService:GetOrderedDataStore("BestLeaderboard")
    local function updateLeaderboard()
    	local success, errorMessage = pcall (function()
    		local Data = BestLeaderboard:GetSortedAsync(false, 10)
    		local BestPage = Data:GetCurrentPage()
    		for Rank, data in ipairs(BestPage) do
    			local userName = game.Players:GetNameFromUserIdAsync(tonumber(data.key))
    			local Name = userName
    			local Best = data.value
    			local isOnLeaderboard = false
    			for i, v in pairs(game.Workspace.GlobalLeaderboard.LeaderboardGUI.Holder:GetChildren()) do
    				if v.Player.Text == Name then
    					isOnLeaderboard = true
    					break
    				end
    			end

    			if Best and isOnLeaderboard == false then
    				local newLbFrame = game.ReplicatedStorage:WaitForChild("LeaderboardFrame"):Clone()
    				newLbFrame.Player.Text = Name
    				newLbFrame.Best.Text = Best 
    				newLbFrame.Rank.Text = "#"..Rank
    				newLbFrame.Position = UDim2.new(0, 0, newLbFrame.Position.Y.Scale + (.1 * #game.Workspace.GlobalLeaderboard.LeaderboardGUI.Holder:GetChildren()), 0)
    				newLbFrame.Parent = game.Workspace.GlobalLeaderboard.LeaderboardGUI.Holder
    			end
    		end
    	end)

    	if not success then
    		print(errorMessage)
    	end
    end

    while true do

    	for _, player in pairs(game.Players:GetPlayers()) do
    		BestLeaderboard:SetAsync(player.UserId, player.leaderstats.Best.Value)
    	end

    	for _, frame in pairs (game.Workspace.GlobalLeaderboard.LeaderboardGUI.Holder:GetChildren()) do
    		frame:Destroy()
    	end

    	updateLeaderboard()
    	print("Updated!")

    	wait(300)
    end

我们需要做的就是为中文玩家单独做一个排行榜,
把使用不同语言的玩家存到这两个排行榜里,
然后在玩家加入游戏时判断,显示对应的排行榜

:warning:由于各个游戏的排行榜实现方式不同,这里的代码仅为示例,
并不能直接使用,请结合两段代码自行修改。:warning:

:face_with_raised_eyebrow: 学会了吗?

5 个赞

放在大厅里的一个所有玩家都能看到的排行榜怎样根据玩家是否为中国玩家进行区别显示呢?

关于我们    加入我们    条款    隐私政策
©2021 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。
粤ICP备20013629号