萝卜说 - 罗布乐思 - 口袋核心

查看: 1007|回复: 0

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

[复制链接]

0

收听

0

听众

48

帖子

正式用户

Rank: 1

萝卜币
58
发表于 2021-5-31 18:12:52 | 显示全部楼层 |阅读模式
开发游戏的时候,有时候会需要区分不同国家和地区,这里以排行榜为例分享下方法
首先在玩家加入游戏时判断其是否为中国玩家
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
我们需要做的就是为中文玩家单独做一个排行榜,
把使用不同语言的玩家存到这两个排行榜里,
然后在玩家加入游戏时判断,显示对应的排行榜


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


学会了吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋| |京公网安备11010502045240号

Copyright © 2001-2013 Comsenz Inc.   All Rights Reserved.

Powered by Discuz! X3.4  备案:京ICP备2021013067号-2

快速回复 返回顶部 返回列表