您當前的位置:首頁 > 曲藝

迷你世界排行榜教程來了

作者:由 DJI工坊客服中心 發表于 曲藝時間:2023-01-02

製作排行榜的第一步是弄好排行榜UI,

迷你世界排行榜教程來了

在開發者工具 -> 變數庫 -> 全域性變數 ->新增變數 在彈窗中選擇“排行榜”,“表”

迷你世界排行榜教程來了

建立排行榜:在全域性變數中新增的排行榜中,將名稱命名為“分數排行榜”,指令碼引用名稱設定為“rank_yang_001”, 後面lua指令碼中將會使用它,進行獲取雲端排行榜資料。

迷你世界排行榜教程來了

建立玩家資訊表:在全域性變數中新增的表中,將名稱命名為“玩家資訊表”,指令碼引用名稱設定為“user_yang_001”,後面lua指令碼中將會使用它,進行獲取雲端玩家資訊資料。

迷你世界排行榜教程來了

在私有變數中建立一個數值私有變數用於存放得分,一個字串私有變數用於存放排名名稱

建立score得分私有變數:變數型別:數值, 變數名稱設定為“score”,預設值為0。變數名score將在lua指令碼中被使用

迷你世界排行榜教程來了

然後在建立一個私有數值名稱為排行榜擊殺數,再弄雲變數。

迷你世界排行榜教程來了

建立rank排名名次私有變數:變數型別:字串, 變數名稱設定為“rank”,預設值為“暫未上榜”。變數名rank將在lua指令碼中被使用

迷你世界排行榜教程來了

在開發者工具中的指令碼中,建立一個指令碼,用於處理玩家進入遊戲請求自己的資料,以及排行榜資料,定時30秒上傳玩家資料,離開遊戲,結束遊戲時上傳玩家資料的指令碼。

詳細的指令碼及解釋說明如下,開發者可以根據自己的情況修改指令碼中的變數,以便實現自己的邏輯

——定義一個收集玩家的陣列

local

userAll

=

{}

local

isOver

=

false

——用於記錄當前進入的玩家迷你號

local

current_enter_player_id

=

0

——獲取雲服中儲存的玩家使用者資訊回撥

——ret 返回結果

——k 當前的迷你號

——v 當前的使用者資訊表中返回的內容,例項中的格式為: rank:2 score:120

local

get_UserData_callback

=

function

ret

k

v

if

ret

==

true

then

——拿到資料後,進行字串分割

local

myValue

=

v

print

‘當前獲取到的使用者資訊’

。。

myValue

local

my_rank

my_score

=

string。match

myValue

‘rank:([0-9]+)score:([0-9]+)’

if

my_rank

==

0

and

my_rank

==

0

then

print

‘使用者資訊表中獲得到的資料得分為0,初始值不處理’

return

end

——當前玩家的迷你號

local

objid

=

tonumber

k

local

actionattr

=

3

——變數型別:數值

——score為變數庫中命名的得分,開發者可以根據自己在變數庫中設定的內容,進行修改此處

local

msg

=

“score”

——設定私有數值“score”的值為my_score

local

score_result

=

VarLib2

setPlayerVarByName

objid

actionattr

msg

my_score

if

score_result

==

ErrorCode。OK

then

print

‘設定私有數值“score”的值為my_score 成功~~~~’

else

print

‘設定私有數值“score”的值為my_score 失敗~~~~’

end

local

rank_actionattr

=

4

——變數型別:字串

——rank為變數庫中宣告的排行榜,開發者可以根據自己在變數庫中設定的內容,進行修改此處變數名

local

rank_msg

=

“rank”

——設定私有數值“rank”為my_rank

local

rank_result

=

VarLib2

setPlayerVarByName

objid

rank_actionattr

rank_msg

my_rank

if

rank_result

==

ErrorCode。OK

then

print

‘設定私有數值“rank”為my_rank 成功~~~~’

else

print

‘設定私有數值“rank”為my_rank 失敗~~~~’

end

else

print

‘返回使用者資訊資料失敗’

end

end

——請求使用者資訊表中的資料

local

getUserTableInfo

=

function

()

——user_yang_001 為變數庫中 建立的 使用者資訊表的指令碼索引名稱,開發者根據自己的設定進行修改

local

libvarname

=

‘user_yang_001’

——將當前進入遊戲的玩家迷你號作為請求條件

local

str_player_id

=

tostring

current_enter_player_id

——獲取玩家的使用者資訊

local

ret

=

CloudSever

getDataListByKey

libvarname

str_player_id

get_UserData_callback

if

ret

==

ErrorCode。OK

then

print

‘game 中請求玩家使用者資料成功’

else

print

“game 請求求玩家使用者資料失敗”

end

end

——獲取自己的排名情況返回函式

——ret 返回結果

——k 是迷你號

——v 是得分

——ix 是排名

local

get_my_data_callback

=

function

ret

k

v

ix

if

ret

==

true

then

——獲取資料成功

local

actionattr

=

3

——變數型別:數值

——score為變數庫中命名的得分,型別為數值

local

msg

=

“score”

——變數名

——獲取私有數值“數值score”的值,賦值給score_value

local

numb_player_id

=

tonumber

k

local

actionattr2

=

4

——變數型別:字串

local

msg2

=

“rank”

——變數名

local

my_score

=

v

——設定當前玩家的私有變數:score得分資料,開發者可以根據自己的設定名稱進行更改

local

myscore_result

=

VarLib2

setPlayerVarByName

numb_player_id

actionattr

msg

my_score

if

myscore_result

==

ErrorCode。OK

then

——設定成功

print

‘game 中 設定得分成功。。。’

else

——設定失敗

print

‘game 中 設定得分失敗。。。’

end

local

actionattr_rank

=

4

——變數型別:字串

——rank 為變數庫中命名的排名,型別為字元

local

msg_rank

=

“rank”

——變數名,可修改

——獲取私有數值“rank”的值,為myrank

local

myrank

=

ix

if

ix

==

nil

or

ix

==

0

then

myrank

=

“暫未上榜”

end

local

myrand_sult

=

VarLib2

setPlayerVarByName

numb_player_id

actionattr_rank

msg_rank

myrank

if

myrand_sult

==

ErrorCode。OK

then

——設定成功

print

‘設定排名成功。。。’

else

——設定失敗

print

‘設定排名失敗。。。’

end

else

——沒有獲取到資訊,則從使用者資訊表中獲取

getUserTableInfo

()

end

end

——設定目前最新的本地資料到雲端排行榜

——new_value: 當前得分

——pl_id: 當前玩家迷你號

local

function

setNewDataToCloud

new_value

pl_id

local

libvarname

=

‘rank_yang_001’

local

player_id

=

tostring

pl_id

local

ret

=

CloudSever

setOrderDataBykey

libvarname

player_id

new_value

if

ret

==

ErrorCode。OK

then

print

‘Game中 setNewDataToCloud設定排行榜值成功 玩家ID = ’

。。

player_id

。。

‘當前得分: ’

。。

new_value

else

print

‘Game中 setNewDataToCloud設定排行榜值失敗’

end

end

——給使用者資訊表上傳資料

——user_id 玩家迷你號

——user_rank 當前排行

——user_score 當前得分

local

function

setUserInfoDataCloud

user_id

user_rank

user_score

——user_yang_001 為變數庫中定義的使用者資訊表的 指令碼引用名稱,開發者可以根據自己的設定,修改此名稱

local

libvarname

=

‘user_yang_001’

——將資料組合成 rank:20 score:120 格式進行儲存

local

m_text

=

‘rank:’

。。

user_rank

。。

‘score:’

。。

user_score

local

uid

=

tostring

user_id

——呼叫介面,進行儲存資訊到雲端的使用者資訊表中

local

ret

=

CloudSever

setDataListBykey

libvarname

uid

m_text

if

ret

==

ErrorCode。OK

then

print

‘setUserInfoDataCloud設定使用者資訊值成功 儲存資訊:’

。。

m_text

else

print

‘設定使用者資訊值失敗’

end

end

——離開和結束公共的設定玩家資訊方法

——pl 為迷你號

local

function

setUserInfoAll

pl

——如果傳來的引數為空,則直接終止

if

pl

==

nil

then

return

end

local

num_palyer_id

=

tonumber

pl

local

actionattr

=

3

——變數型別:數值

——score為變數庫中定義的得分,開發者可以根據自己的設定內容,進行修改此處變數名

local

msg

=

“score”

——獲取私有數值“score”的值,賦值給value

print

‘Game中 setUserInfoAll中 玩家迷你號==’

。。

num_palyer_id

local

result

value

=

VarLib2

getPlayerVarByName

num_palyer_id

actionattr

msg

if

result

==

ErrorCode。ok

then

print

‘Game中 setUserInfoAll中獲取資料本地資料前,value==’

。。

value

。。

‘ num_palyer_id==’

。。

num_palyer_id

end

—— 獲取私有排行榜

——rank為變數庫定義的排行榜,開發者可以根據自己的設定內容,進行修改此處變數名

local

msg2

=

“rank”

local

actionattr2

=

4

——變數型別:字串

local

result2

re_rank

=

VarLib2

getPlayerVarByName

num_palyer_id

actionattr2

msg2

if

value

~=

nil

and

re_rank

~=

nil

and

value

~=

0

then

——當前得分不是0,即不是初始值

——如果自己的本地資料比最後一名的得分都高,則將分數上傳到排行榜伺服器。

——如果分數小於最後一名的得分,則沒有必要上傳到伺服器的排行榜,只需要在離開,或者遊戲結束的時候將資訊上傳到使用者資訊中即可

setNewDataToCloud

value

pl

local

str_rank

=

re_rank

if

re_rank

==

“暫未上榜”

then

str_rank

=

0

end

——設定到使用者資訊表

if

isOver

==

true

then

——如果是離開遊戲,或者遊戲結束,則向伺服器上傳使用者資訊進行儲存

setUserInfoDataCloud

pl

str_rank

value

else

print

‘Game中 定時器中,不需要設定使用者資訊,設定了排行榜就可以了’

end

else

——這裡就是初始化的時候,無需處理

print

‘Game中 獲取本地私有變數資料都為空的時候,說明本地沒有資料’

end

end

——玩家進入遊戲,獲取排名,獲取玩家資訊,並設定本地資料rank,score

local

function

the_EnterGame_callback

e

local

pl

=

e。eventobjid

table。insert

userAll

pl

——將當前進入玩家迷你號,臨時存在變數中,後面回撥函式中使用

current_enter_player_id

=

pl

——rank_yang_001 為設定的排行榜中指令碼的引用名稱,開發者可以根據自己的設定,進行修改此命名

local

libvarname

=

‘rank_yang_001’

—— 請求當前進入玩家的排行榜資料

local

my_ret

=

CloudSever

getOrderDataByKey

libvarname

pl

get_my_data_callback

if

my_ret

==

ErrorCode。OK

then

print

‘請求自己的排行榜資料成功my_ret == ErrorCode。OK’

else

print

“請求自己的排行榜資料失敗”

——沒有自己的排行榜,則需要去使用者資訊表中獲取資訊,進行展示

getUserTableInfo

()

end

end

——{{{ 遊戲開始後,時鐘每(30ms)執行一次 ,向伺服器排行榜進行上傳玩家的資料

——[==[

——]==]

——}}}

local

function

dingShiSetDataForCloud

e

local

current

=

e。second

——定時30秒上傳一次資料到雲端

if

current

~=

nil

and

current

>=

30

and

current

-

30

%

30

==

0

then

for

kv

v

in

ipairs

userAll

do

setUserInfoAll

v

end

end

end

——如果比賽結束,將玩家的資訊儲存到雲端(排行榜和使用者資訊表)

local

function

thegame_end_callback

()

isOver

=

true

for

kv

v

in

pairs

userAll

do

setUserInfoAll

v

end

end

local

function

the_TeaveGame_callback

e

local

pl

=

e。eventobjid

isOver

=

true

setUserInfoAll

pl

——從本地資料中移除離開玩家的uin

table。remove

userAll

pl

end

——向伺服器提交資料

ScriptSupportEvent

registerEvent

“Game。RunTime”

dingShiSetDataForCloud

——監聽遊戲結束的事件

ScriptSupportEvent

registerEvent

[=[Game。End]=]

thegame_end_callback

——監聽玩家離開事件

ScriptSupportEvent

registerEvent

[=[Game。AnyPlayer。LeaveGame]=]

the_TeaveGame_callback

——監聽玩家進入

ScriptSupportEvent

registerEvent

[=[Game。AnyPlayer。EnterGame]=]

the_EnterGame_callback

在UI編輯中,在第一個僅有“按鈕”的介面的指令碼中,建立一個指令碼,用於處理玩家點選按鈕請求自己的排行榜情況,以及最新的排行榜資料。

——用於存放當前點選的玩家迷你號

local

current_click_player_id

=

0

——用於存放獲取到的雲端資料

local

cloud_data

=

nil

——暱稱文字控制元件ID

——開發者可以修改為自己的排行榜介面中第一、二、三。。。名暱稱稱控制元件ID

local

txt_name_id

=

{

1

=

‘7124235295204530136_13’

2

=

‘7124235295204530136_16’

3

=

‘7124235295204530136_17’

}

——得分文字控制元件ID

——開發者可以修改為自己的排行榜介面中第一、二、三。。。名得分控制元件ID

local

txt_score_id

=

{

1

=

‘7124235295204530136_14’

2

=

‘7124235295204530136_18’

3

=

‘7124235295204530136_19’

}

——統一設定第一名~第三名的資料展示

——開發者可以再此處設定自己的排行榜介面資料

local

function

setNewDataForUI

()

if

cloud_data

~=

nil

then

local

v_value

=

cloud_data

local

uiid

=

“7124235295204530136”

——將當前點選的玩家迷你號,轉換為數值型別

local

nu_current_player_id

=

tonumber

current_click_player_id

for

ix

v

in

ipairs

v_value

do

local

v_score

=

v。v

local

current_name

=

v。nick

——這裡為獲取玩家暱稱,開發者可以直接透過v。nick獲取到儲存在排行榜中對應玩家的暱稱

Customui

setText

nu_current_player_id

uiid

txt_score_id

ix

],

v_score

Customui

setText

nu_current_player_id

uiid

txt_name_id

ix

],

current_name

end

end

end

——請求排行榜返回的資料

local

get_now_data_callback

=

function

ret

value

—— 返回結果不一定有排名

if

ret

~=

false

and

value

~=

nil

then

——設定排行榜中的介面資料

——將獲取到的資料進行臨時儲存,以便後面使用

cloud_data

=

value

——測試

setNewDataForUI

()

——獲取到了資料,開始將資料顯示到介面層

——setUIData()

——有了資料後,顯示排行榜介面

local

result

=

Player

openUIView

current_click_player_id

‘7124235295204530136’

end

end

——設定玩家自己的資料,展示在介面

local

function

setMy_Data_InLocal

()

——當前需要設定的介面ID,7124235295204530136為排行榜所顯示的介面ID,開發者根據自己的介面ID進行修改此處

local

uiid

=

“7124235295204530136”

——7124235295204530136_21 為排行榜中排行的控制元件ID,開發者根據自己的控制元件ID修改此處

local

element_rank_id

=

‘7124235295204530136_21’

——7124235295204530136_24 為排行榜中玩家的名稱的控制元件ID,開發者根據自己的控制元件ID修改此處

local

element_nick_id

=

‘7124235295204530136_24’

local

numb_player_id

=

tonumber

current_click_player_id

——獲取變數值

local

actionattr

=

3

——變數型別:數值

——score為變數庫中設定的得分名稱,開發者可以根據自己的設定進行修改此處

local

msg

=

“score”

——獲取私有數值“score”的值,賦值給value

local

myscore_result

value

=

VarLib2

getPlayerVarByName

numb_player_id

actionattr

msg

if

myscore_result

==

ErrorCode。OK

then

print

‘請求玩家的得分資料正確,得分 ==’

。。

value

else

print

‘請求玩家的得分資料出錯’

end

local

rank_actionattr

=

4

——變數型別:字串

——rank 為變數庫中設定排行名稱,開發者可以根據自己的設定進行修改此處

local

rank_msg

=

“rank”

——變數名

——獲取私有數值“rank”的值,賦值給value

local

my_rank_result

my_rank_value

=

VarLib2

getPlayerVarByName

numb_player_id

rank_actionattr

rank_msg

if

my_rank_result

==

ErrorCode。OK

then

print

‘請求玩家的排名資料正確 my_rank_value==’

。。

my_rank_value

else

print

‘請求玩家的排名資料出錯’

end

——開始設定私有資料到介面

——7124235295204530136_27為介面層 得分的控制元件ID,開發者可以根據自己的介面,設定控制元件ID

local

element_score_id

=

‘7124235295204530136_27’

local

set_score_result

=

Customui

setText

numb_player_id

uiid

element_score_id

value

if

set_score_result

==

ErrorCode。OK

then

print

‘UI指令碼中設定自己的得分成功score_value=’

。。

value

else

print

‘UI指令碼中設定自己的 得分失敗 score_value=’

。。

value

end

——設定名字

local

name_result

my_name

=

Player

getNickname

numb_player_id

local

set_name_result

=

Customui

setText

numb_player_id

uiid

element_nick_id

my_name

if

set_name_result

==

ErrorCode。OK

then

print

‘指令碼中,設定自己的名稱成功my_name ==’

。。

my_name

else

print

‘指令碼中,設定自己的名稱成功’

end

——設定排名

if

my_rank_value

==

0

or

my_rank_value

==

nil

then

my_rank_value

=

“暫未上榜”

end

local

rank_set_result

=

Customui

setText

numb_player_id

uiid

element_rank_id

my_rank_value

if

rank_set_result

==

ErrorCode。OK

then

print

‘UI指令碼中 自己的排行榜設定正常 rank_value 。。 ’

。。

my_rank_value

else

print

‘UI指令碼中 自己的排行榜設定失敗 rank_value 。。 ’

。。

my_rank_value

end

end

——獎盃點選事件

——開發者可以設定自己的排行榜按鈕事件

local

function

jiangbei_click

e

local

pl

=

e。eventobjid

——是不是自己設定的排行榜按鈕,如果不是就直接不處理

——7124254390629128152_1 為介面層上排行榜按鈕,用於點選,開發者根據自己的排行榜按鈕進行修改此處

if

e。btnelenemt

~=

‘7124254390629128152_1’

then

return

end

——當前點選的玩家迷你號,用於回撥的時候使用

current_click_player_id

=

pl

—— rank_yang_001 為變數庫中設定的排行榜表的,指令碼介面引用名稱,開發者根據自己的設定,修改此處

local

libvarname

=

‘rank_yang_001’

——玩家進入遊戲,請求從大到小排序的前3名的資料;如果需要從小到大的排序,則將-3修改為3。

——開發者可以根據自己的設定的排行榜一共是多少名來設定該數字,直接取到前面多少名。

local

ret

=

CloudSever

getOrderDataIndexArea

libvarname

-

3

get_now_data_callback

if

ret

==

ErrorCode。OK

then

print

‘請求排行榜資料成功ret == ErrorCode。OK’

else

print

“請求排行榜資料失敗”

end

——設定進入的玩家自己的資訊

setMy_Data_InLocal

()

end

——監聽點選事件

ScriptSupportEvent

registerEvent

[=[UI。Button。Click]=]

jiangbei_click

標簽: RANK  id  score  排行榜  玩家