@@ -1,7 +1,7 @@
/ / 计分板模块扩展插件
/ / 计分板模块扩展插件
/ / 忽略假人分数
/ / 忽略假人分数
/ / * * 请勿修改文件名 ! ! * *
/ / * * 请勿修改文件名 ! ! * *
global_app_version = ' 1.0-beta.8 ' ;
global_app_version = ' 1.0-beta.12 ' ;
global_current_scoreboard_list = [
global_current_scoreboard_list = [
' fzsd.module.scoreboard.display.activation ' ,
' fzsd.module.scoreboard.display.activation ' ,
' fzsd.module.scoreboard.display.damage_taken ' ,
' fzsd.module.scoreboard.display.damage_taken ' ,
@@ -14,6 +14,7 @@ global_current_scoreboard_list = [
' fzsd.module.scoreboard.display.aviating_distance ' ,
' fzsd.module.scoreboard.display.aviating_distance ' ,
' fzsd.module.scoreboard.display.placement_count '
' fzsd.module.scoreboard.display.placement_count '
] ;
] ;
global_app_name = system_info ( ' app_name ' ) ;
__config ( ) - > {
__config ( ) - > {
' scope ' - > ' global ' ,
' scope ' - > ' global ' ,
@@ -21,20 +22,34 @@ __config() -> {
' carpet ' - > ' >=1.4.45 ' ,
' carpet ' - > ' >=1.4.45 ' ,
' minecraft ' - > ' >=1.17 '
' minecraft ' - > ' >=1.17 '
} ,
} ,
' command_permission ' - > 4 ,
' command_permission ' - > 2 ,
' commands ' - > {
' commands ' - > {
' ' - > ' help ' ,
' ' - > ' help ' ,
' help ' - > ' help ' ,
' help ' - > ' help ' ,
' deleteOld <deleteOld > ' - > ' delete_old ' ,
' delete <version > ' - > ' command_delete ' ,
' updateFrom <updateFrom > ' - > ' update_from ' ,
' update <version > ' - > ' command_update ' ,
' restoreFrom ' - > ' restore_from ' ,
' restore whitelist ' - > [ ' command_restore ' , null , null ] ,
' restore whitelist <scoreboardID> ' - > _ ( scoreboardID ) - > command_restore ( null , scoreboardID ) ,
' restore player <playerName> ' - > [ ' command_restore ' , null ] ,
' restore player <playerName> <scoreboardID> ' - > ' command_restore ' ,
' restore <custom> whitelist <trade_count> ' - > _ ( custom , trade_count ) - > command_restore_trade_count_confirm ( custom , null , trade_count ) ,
' restore <custom> player <playerName> <trade_count> ' - > ' command_restore_trade_count_confirm ' ,
' recalculate <scoreboardID> ' - > ' recalculate_total_score ' ,
' recalculate <scoreboardID> ' - > ' recalculate_total_score ' ,
' recalculate ' - > ' recalculate_total_scores ' ,
' recalculate ' - > [ ' recalculate_total_score ' , null ] ,
' commandPlayer <boolean > ' - > ' command_player ' ,
' commandPlayer <permissionType > ' - > ' carpet_command_player ' ,
' reset <scoreboardPlayer> <scoreboardID> ' - > ' reset ' ,
' reset <scoreboardPlayer> <scoreboardID> ' - > ' command_reset ' ,
' reset <scoreboardPlayer> ' - > [ ' reset ' , null ]
' reset <scoreboardPlayer> ' - > [ ' command_reset ' , null ] ,
' set <playerName> <scoreboardID> <score> ' - > ' command_set '
} ,
} ,
' arguments ' - > {
' arguments ' - > {
' trade_count ' - > {
' type ' - > ' term ' ,
' suggest ' - > [ ' fzsd.module.scoreboard.display.trade_count ' ]
} ,
' playerName ' - > {
' type ' - > ' term ' ,
' suggester ' - > _ ( args ) - > player ( ' all ' )
} ,
' scoreboardID ' - > {
' scoreboardID ' - > {
' type ' - > ' term ' ,
' type ' - > ' term ' ,
' suggest ' - > global_current_scoreboard_list
' suggest ' - > global_current_scoreboard_list
@@ -43,10 +58,15 @@ __config() -> {
' type ' - > ' term ' ,
' type ' - > ' term ' ,
' suggester ' - > _ ( args ) - > get_scoreboard_player_list ( )
' suggester ' - > _ ( args ) - > get_scoreboard_player_list ( )
} ,
} ,
' boolean ' - > {
' permissionType ' - > {
' type ' - > ' bool '
' type ' - > ' term ' ,
' suggest ' - > [
' true ' ,
' false ' ,
' ops '
]
} ,
} ,
' updateFrom ' - > {
' version ' - > {
' type ' - > ' term ' ,
' type ' - > ' term ' ,
' suggest ' - > [
' suggest ' - > [
' 2.x ' ,
' 2.x ' ,
@@ -55,14 +75,13 @@ __config() -> {
' 3.0-beta.10 '
' 3.0-beta.10 '
]
]
} ,
} ,
' deleteOld ' - > {
' score ' - > {
' type ' - > ' int ' ,
' suggest ' - > [ ]
} ,
' custom ' - > {
' type ' - > ' term ' ,
' type ' - > ' term ' ,
' suggest ' - > [
' suggest ' - > [ ]
' 2.x ' ,
' 3.0-beta.4 ' ,
' 3.0-beta.9 ' ,
' 3.0-beta.10 '
]
}
}
}
}
} ;
} ;
@@ -102,8 +121,8 @@ __on_player_disconnects(player, reason) -> (
try_restore_team_from_cache ( player ) ;
try_restore_team_from_cache ( player ) ;
) ;
) ;
/ / 获取所有计分板下的所有玩家列表
get_scoreboard_player_list ( ) - > (
get_scoreboard_player_list ( ) - > (
/ / 获取所有计分板下的所有玩家列表
set = m ( ) ;
set = m ( ) ;
for ( global_current_scoreboard_list ,
for ( global_current_scoreboard_list ,
for ( scoreboard ( _ ) ,
for ( scoreboard ( _ ) ,
@@ -115,24 +134,23 @@ get_scoreboard_player_list() -> (
return ( keys ( set ) ) ;
return ( keys ( set ) ) ;
) ;
) ;
reset ( player , scoreboard ) - > (
/ / 重置玩家计分板分数
command_reset ( player , scoreboard ) - > (
if ( scoreboard == null ,
if ( scoreboard == null ,
(
for ( scoreboard ( ) ,
for ( global_current_scoreboard_list ,
scoreboard_remove ( _ , player ) ;
scoreboard_remove ( _ , player ) ;
) ;
) ;
recalculate_total_score ( null ) ;
recalculate_total_scores ( ) ;
print ( ' 已重置 ' + player + ' 的所有分数 ' ) ;
print ( ' 已重置 ' + player + ' 的所有分数 ' ) ;
return ( ) ;
) ,
(
scoreboard_remove ( scoreboard , player ) ;
recalculate_total_score ( scoreboard ) ;
print ( ' 已重置 ' + player + ' 的 ' + scoreboard + ' 分数 ' ) ;
)
) ;
) ;
scoreboard_remove ( scoreboard , player ) ;
recalculate_total_score ( scoreboard ) ;
print ( ' 已重置 ' + player + ' 的 ' + scoreboard + ' 分数 ' ) ;
return ( ) ;
return ( ) ;
) ;
) ;
/ / 尝试从缓存恢复玩家队伍 , 玩家 / 假人上下线时执行
try_restore_team_from_cache ( player ) - > (
try_restore_team_from_cache ( player ) - > (
player_team = player ~ ' team ' ;
player_team = player ~ ' team ' ;
player_name = player ~ ' name ' ;
player_name = player ~ ' name ' ;
@@ -154,7 +172,8 @@ help() -> (
return ( ) ;
return ( ) ;
) ;
) ;
delete_old ( fzsd_version ) - > (
/ / 删除旧版的计分板
command_delete ( fzsd_version ) - > (
if ( fzsd_version == ' 3.0-beta.10 ' ,
if ( fzsd_version == ' 3.0-beta.10 ' ,
(
(
scoreboard_remove ( ' fzsd.module.scoreboard.display.bedrock_broke_count ' ) ;
scoreboard_remove ( ' fzsd.module.scoreboard.display.bedrock_broke_count ' ) ;
@@ -184,18 +203,19 @@ delete_old(fzsd_version) -> (
return ( ) ;
return ( ) ;
) ;
) ;
update_from ( fzsd_version ) - > (
/ / 从某一旧版升级
command_update ( fzsd_version ) - > (
if ( fzsd_version == ' 3.0-beta.10 ' ,
if ( fzsd_version == ' 3.0-beta.10 ' ,
(
(
merge_score ( ' fzsd.module.scoreboard.display.bedrock_broke_count ' , ' fzsd.module.scoreboard.display.bedrock_broken_count ' , fzsd_version ) ;
merge_score ( ' fzsd.module.scoreboard.display.bedrock_broke_count ' , ' fzsd.module.scoreboard.display.bedrock_broken_count ' , fzsd_version ) ;
delete_old ( fzsd_version ) ;
command_delete ( fzsd_version ) ;
scoreboard_remove ( ' fzsd.module.scoreboard.display.placement_count ' , ' 总放置方块数 ' ) ;
scoreboard_remove ( ' fzsd.module.scoreboard.display.placement_count ' , ' 总放置方块数 ' ) ;
scoreboard_remove ( ' fzsd.module.scoreboard.display.general ' , ' 总放置方块数 ' ) ;
scoreboard_remove ( ' fzsd.module.scoreboard.display.general ' , ' 总放置方块数 ' ) ;
) ,
) ,
fzsd_version == ' 3.0-beta.9 ' ,
fzsd_version == ' 3.0-beta.9 ' ,
(
(
merge_score ( ' fzsd.extra.bbl.display ' , ' fzsd.module.scoreboard.display.bedrock_broken_count ' , fzsd_version ) ;
merge_score ( ' fzsd.extra.bbl.display ' , ' fzsd.module.scoreboard.display.bedrock_broken_count ' , fzsd_version ) ;
delete_old ( fzsd_version ) ;
command_delete ( fzsd_version ) ;
) ,
) ,
fzsd_version == ' 2.x ' ,
fzsd_version == ' 2.x ' ,
(
(
@@ -211,7 +231,7 @@ update_from(fzsd_version) -> (
[ ' fz.aviate1m ' , ' fzsd.module.scoreboard.display.aviating_distance ' ]
[ ' fz.aviate1m ' , ' fzsd.module.scoreboard.display.aviating_distance ' ]
] ;
] ;
for ( params , merge_score ( . . . _ , fzsd_version ) ) ;
for ( params , merge_score ( . . . _ , fzsd_version ) ) ;
delete_old ( fzsd_version ) ;
command_delete ( fzsd_version ) ;
) ,
) ,
fzsd_version == ' 3.0-beta.4 ' ,
fzsd_version == ' 3.0-beta.4 ' ,
(
(
@@ -228,16 +248,17 @@ update_from(fzsd_version) -> (
[ ' fz.module.scoreboard.display.placement_count ' , ' fzsd.module.scoreboard.display.placement_count ' ]
[ ' fz.module.scoreboard.display.placement_count ' , ' fzsd.module.scoreboard.display.placement_count ' ]
] ;
] ;
for ( params , merge_score ( . . . _ , fzsd_version ) ) ;
for ( params , merge_score ( . . . _ , fzsd_version ) ) ;
delete_old ( fzsd_version ) ;
command_delete ( fzsd_version ) ;
) ,
) ,
print ( ' 参数错误! ' ) ;
print ( ' 参数错误! ' ) ;
return ( ) ;
return ( ) ;
) ;
) ;
recalculate_total_scores ( ) ;
recalculate_total_score ( null ) ;
print ( ' 已从 ' + fzsd_version + ' 升级! ' ) ;
print ( ' 已从 ' + fzsd_version + ' 升级! ' ) ;
return ( ) ;
return ( ) ;
) ;
) ;
/ / 将两计分板分数合并到后者
merge_score ( from , to , fzsd_version ) - > (
merge_score ( from , to , fzsd_version ) - > (
/ / 如果目标计分板不存在则创建
/ / 如果目标计分板不存在则创建
if ( scoreboard ( ) ~ to == null , scoreboard_add ( to ) ) ;
if ( scoreboard ( ) ~ to == null , scoreboard_add ( to ) ) ;
@@ -270,7 +291,8 @@ merge_score(from, to, fzsd_version) -> (
return ( ) ;
return ( ) ;
) ;
) ;
/ / 因为新计分板允许玩家自定义显示的总榜名称 , 故续做复杂判断才能使脚本确定之
/ / 获取承载总榜数据的玩家名
/ / 因为新计分板允许玩家自定义显示的总榜名称 , 故做复杂判断才能使脚本确定用来承载总榜数据的玩家名
get_total_score_name_new ( scoreboard ) - > (
get_total_score_name_new ( scoreboard ) - > (
INT_MIN = - 2147483648 ;
INT_MIN = - 2147483648 ;
/ / 获取系统总榜id
/ / 获取系统总榜id
@@ -290,7 +312,7 @@ get_total_score_name_new(scoreboard) -> (
/ / 将总分赋值到显示计分板上
/ / 将总分赋值到显示计分板上
display_total_score ( scoreboard ) ;
display_total_score ( scoreboard ) ;
/ / 查找榜内最低分
/ / 查找显示计分板内的最低分玩家名
last_min_player = null ;
last_min_player = null ;
for ( scoreboard ( scoreboard ) ,
for ( scoreboard ( scoreboard ) ,
if ( last_min_player == null ,
if ( last_min_player == null ,
@@ -314,17 +336,16 @@ get_total_score_name_new(scoreboard) -> (
) ;
) ;
display_total_score ( scoreboard ) ;
display_total_score ( scoreboard ) ;
/ / 返回榜内最低分的名称
/ / 返回榜内最低分的玩家名 ( 承载总榜数据的玩家名 )
return ( last_min_player ) ;
return ( last_min_player ) ;
) ;
) ;
recalculate_total_scores ( ) - > (
/ / 重算总分 , scoreboard == null 时重算所有总分
for ( global_current_scoreboard_list , recalculate_total_score ( _ ) ) ;
print ( ' 已重新计算总分! ' ) ;
return ( ) ;
) ;
recalculate_total_score ( scoreboard ) - > (
recalculate_total_score ( scoreboard ) - > (
if ( scoreboard == null ,
for ( global_current_scoreboard_list , recalculate_total_score ( _ ) ) ;
return ( ) ;
) ;
total_score_name_new = get_total_score_name_new ( scoreboard ) ;
total_score_name_new = get_total_score_name_new ( scoreboard ) ;
/ / 计算总分
/ / 计算总分
total_score = 0 ;
total_score = 0 ;
@@ -343,6 +364,7 @@ recalculate_total_score(scoreboard) -> (
return ( ) ;
return ( ) ;
) ;
) ;
/ / 使用数据包函数标签将总分赋值到显示计分板上
display_total_score ( scoreboard ) - > (
display_total_score ( scoreboard ) - > (
/ / 获取计算总榜的函数标签名
/ / 获取计算总榜的函数标签名
str_1 = split ( ' \\ . ' , scoreboard ) ;
str_1 = split ( ' \\ . ' , scoreboard ) ;
@@ -352,21 +374,126 @@ display_total_score(scoreboard) -> (
return ( ) ;
return ( ) ;
) ;
) ;
restore_from ( ) - > (
/ / 恢复计分板分数 , player == null 时恢复所有玩家分数 , scoreboard == null 时恢复所有计分板分数
print ( ' 暂未开发 ' ) ;
command_restore ( player , scoreboard ) - > (
if ( player == null ,
for ( keys ( system_info ( ' server_whitelist ' ) ) , restore_score ( _ , scoreboard ) ) ;
if ( scoreboard == null ,
print ( ' 已恢复所有玩家的所有分数 ' )
,
print ( ' 已恢复所有玩家的 ' + scoreboard + ' 分数 ' ) ;
) ;
return ( ) ;
) ;
if ( scoreboard == null ,
for ( global_current_scoreboard_list , restore_score ( player , _ ) ) ;
print ( ' 已恢复 ' + player + ' 的所有分数 ' ) ;
return ( ) ;
) ;
if ( restore_score ( player , scoreboard ) ,
print ( ' 已恢复 ' + player + ' 的 ' + scoreboard + ' 分数 ' ) ;
) ;
return ( ) ;
return ( ) ;
) ;
) ;
merge_stat ( scoreboard , . . . stats ) - > (
/ / 恢复玩家的计分板分数
print ( ' 暂未开发 ' ) ;
restore_score ( player , scoreboard ) - > (
if ( scoreboard == ' fzsd.module.scoreboard.display.activation ' ,
(
play_ticks = statistic ( player , ' custom ' , ' play_time ' ) ;
scoreboard ( ' fzsd.event.play_ticks ' , player , play_ticks % 72000 ) ;
scoreboard ( scoreboard , player , play_ticks / 72000 ) ;
) ,
scoreboard == ' fzsd.module.scoreboard.display.damage_taken ' ,
restore_from_stat ( scoreboard , player , ' custom ' , ' damage_taken ' ) ;
,
scoreboard == ' fzsd.module.scoreboard.display.death_count ' ,
restore_from_stat ( scoreboard , player , ' custom ' , ' deaths ' ) ;
,
scoreboard == ' fzsd.module.scoreboard.display.dig_count ' ,
(
scoreboard ( scoreboard , player , 0 ) ;
for ( block_list ( ) ,
append_from_stat ( scoreboard , player , ' mined ' , _ ) ;
) ;
) ,
scoreboard == ' fzsd.module.scoreboard.display.fishing_count ' ,
scoreboard ( scoreboard , player , statistic ( player , ' custom ' , ' fish_caught ' ) ) ;
,
scoreboard == ' fzsd.module.scoreboard.display.kill_count ' ,
(
scoreboard ( scoreboard , player , 0 ) ;
for ( entity_types ( ' living ' ) ,
append_from_stat ( scoreboard , player , ' killed ' , _ ) ;
) ;
) ,
scoreboard == ' fzsd.module.scoreboard.display.trade_count ' ,
(
print ( ' 此操作会丢失猪灵交易分数,请输入 \n “/ ' + global_app_name + ' restore confirm whitelist fzsd.module.scoreboard.display.trade_count”或 \n “/ ' + global_app_name + ' restore confirm player <playerName> fzsd.module.scoreboard.display.trade_count”继续执行 ' ) ;
return ( false ) ;
) ,
scoreboard == ' fzsd.module.scoreboard.display.bedrock_broken_count ' ,
(
print ( ' 无法还原破基岩榜,已忽略 ' ) ;
return ( false ) ;
) ,
scoreboard == ' fzsd.module.scoreboard.display.aviating_distance ' ,
scoreboard ( scoreboard , player , statistic ( player , ' custom ' , ' aviate_one_cm ' ) / 200 ) ;
,
scoreboard == ' fzsd.module.scoreboard.display.placement_count ' ,
(
scoreboard ( scoreboard , player , 0 ) ;
for ( block_list ( ) ,
append_from_stat ( scoreboard , player , ' used ' , _ ) ;
) ;
) ,
print ( ' 未识别的计分板ID! ' ) ;
return ( false ) ;
) ;
recalculate_total_score ( scoreboard ) ;
return ( true ) ;
) ;
/ / 确定恢复交易榜
command_restore_trade_count_confirm ( confirm , player , trade_count ) - > (
if ( confirm != ' confirm ' | | trade_count != ' fzsd.module.scoreboard.display.trade_count ' ,
print ( ' 命令格式错误! ' ) ;
return ( ) ;
) ;
if ( player == null ,
for ( keys ( system_info ( ' server_whitelist ' ) ) ,
restore_from_stat ( scoreboard , _ , ' custom ' , ' traded_with_villager ' ) ;
) ;
return ( ) ;
) ;
restore_from_stat ( scoreboard , player , ' custom ' , ' traded_with_villager ' ) ;
return ( ) ;
return ( ) ;
) ;
) ;
command_player ( boolean ) - > (
restore_from_stat ( scoreboard , player , category , entry ) - > (
print ( run ( ' carpet setDefault commandPlayer ' + str ( boolean ) ) : 1 : 0 ) ;
scoreboard ( scoreboard , player , statistic ( player , category , entry ) ) ;
) ;
append_from_stat ( scoreboard , player , category , entry ) - > (
scoreboard ( scoreboard , player ,
statistic ( player , category , entry ) + scoreboard ( scoreboard , player )
) ;
) ;
/ / 修改地毯假人规则
carpet_command_player ( level ) - > (
print ( run ( ' carpet setDefault commandPlayer ' + level ) : 1 : 0 ) ;
return ( ) ;
return ( ) ;
) ;
) ;
/ / 设置玩家的计分板分数
command_set ( player , scoreboard , score ) - > (
i = scoreboard ( scoreboard , player , score ) ;
print ( ' 玩家 ' + player + ' 修改前的分数为: ' + i ) ;
recalculate_total_score ( scoreboard ) ;
return ( i ) ;
) ;
/ / 工具函数
/ / 工具函数
contains ( list , value ) - > (
contains ( list , value ) - > (
@@ -376,4 +503,4 @@ contains(list, value) -> (
debug ( msg ) - > (
debug ( msg ) - > (
logger ( ' debug ' , msg ) ;
logger ( ' debug ' , msg ) ;
return ( ) ;
return ( ) ;
) ;
) ;