diff --git a/scripts/census.sc b/scripts/census.sc index 0c8efd8..9391afc 100644 --- a/scripts/census.sc +++ b/scripts/census.sc @@ -1,10 +1,10 @@ // by shenjack -// write at carpet 1.16.5 1.4.31 v210407 +// write at carpet 1.16.5 1.4.44 // with carpet-extra-1.16.5-1.4.30 // with carpet-tis-addition-mc1.16.4-1.15.0+build.492 // with fabric-api-0.26.0+1.16 (because on server Api Version > 0.26 will cause bug) -global_version = '1.2.0'; +global_version = '1.3.2'; global_carpet_version = split('\\+v',system_info('scarpet_version')); global_require_carpet_version = ['1.4.30', 210407]; global_filename = system_info('app_name'); @@ -29,23 +29,23 @@ __config() -> { 'legacy_command_type_support' -> true, 'requires' -> { 'minecraft' -> '>=1.16', // best at 1.16+ haven't test in 1.15.2 and 1.14.4 - 'fabric-api' -> '>=0.26.0', // for some reason api left in 0.26.0 'carpet' -> '>=1.4.31' // best at 1.4.31 because fix issue of read_file() }, 'commands' -> { '' -> 'help', 'help' -> 'help', + 'print' -> ['print_score', 'mined'], 'reload' -> 'reload_script', 'score load' -> 'load_scores', 'score save' -> 'save_scores', - 'score print' -> 'print_scores', + 'score print' -> ['print_score', 'mined'], 'debug level' -> ['debug_level', null], 'debug level ' -> 'debug_level', 'debug add_mine ' -> 'add_mine', }, 'arguments' -> { 'player' -> { - 'type' -> 'players' + 'type' -> 'players', }, 'block' -> { 'type' -> 'string', @@ -59,6 +59,51 @@ __config() -> { }; }; +// import('lib', 'callme'); + +help_message = { + 'name': 'census', + 'version': global_version, + 'information': 'census 是一个用于统计玩家各类数据的 script', + 'commands': { + 'info': '同 /{app_name} help 显示帮助信息', + 'hint': '然而并没有什么隐藏信息(确信)', + 'run': '{app_name} help', + 'sub_command': { + 'help': { + 'info': '显示你现在在看的这条帮助信息!', + 'hint': 'g 你就在看着我呢~', + 'run': '{command}', + }, + 'reload': { + 'info': '重新加载script', + 'hint': 'g 获得成就:我重载我自己', + 'run': '{command}', + }, + 'score': { + 'sub_command': { + 'load': { + 'info': '从数据文件夹中加载数据并覆盖现有数据', + 'hint': 'rub 本操作会覆盖现有数据,所以请自行输入命令', + 'copy': '{command}' + }, + 'save': { + 'info': '保存现有数据', + 'hint': 'ub 提醒:这个操作会覆盖文件数据(虽说其实没啥事)', + 'run': '{command}', + }, + 'print': { + 'info': '打印分数', + 'hint': '获得成就:我打印了分数', + 'run': '{command}', + } + } + } + } + } +}; + + __on_close() -> ( // 保存一些debug信息 debug_info = {'debug_level' -> global_debug_level}; @@ -70,7 +115,7 @@ __on_close() -> ( printl(message, level = 2, say = false, reply = true) -> ( if(global_debug_level <= level, if(reply, print(message)); - if(say, run('say' + message))); + if(say, run('say ' + message))); ); debug_level(level) -> ( @@ -82,18 +127,26 @@ debug_level(level) -> ( logger(type = 'info', 'DEBUG等级已经设置为: ' + global_debug_level); ); +// fmt_cmd(cmd, msg, hint, do = false) -> ( +// if(do, +// command = '!/' + global_filename + cmd, +// command = '/' + global_filename + cmd); +// return(command); +// ); + +gloal_help_config = {}; + help() -> ( print(format('y ' + '-'*10 + '帮助信息' + '-'*10)); - print(format('m 提醒:大部分信息都可以点击来执行相对应的命令,所以请小心点击', '^g 包括我! 点我来执行 /' + global_filename, '! /' + global_filename)); + print(format('m 提醒:大部分信息都可以点击来执行相对应的命令,所以请小心点击', '^g 包括我! 点我来执行 /' + global_filename, '!/' + global_filename)); print(format('e /' + global_filename + ' -> ', 'c 同 /' + global_filename + ' help')); - print(format('e /' + global_filename + ' help -> ', 'c 显示这条帮助信息', '^g 你就在看着我呢!', '! /' + global_filename + ' help')); - print(format('e /' + global_filename + ' reload -> ', 'c 重新加载script', '^g 获得成就:我重载我自己', '! /' + global_filename + ' reload')); + print(format('e /' + global_filename + ' help -> ', 'c 显示这条帮助信息', '^g 你就在看着我呢!', '!/' + global_filename + ' help')); + print(format('e /' + global_filename + ' reload -> ', 'c 重新加载script', '^g 获得成就:我重载我自己', '!/' + global_filename + ' reload')); print(format('e /' + global_filename + ' score load -> ', 'c 加载各项榜单', '^rub 警告:这会覆盖游戏内的现有数据(所以请自行输入命令)')); - print(format('e /' + global_filename + ' score save -> ', 'c 保存各项榜单', '^ub 提醒:这会覆盖文件数据', '! /' + global_filename + ' score save')); - print(format('e /' + global_filename + ' score print -> ', 'c 输出各项榜单数据', '^gs 吐槽一下,scarpet的字符串处理真的麻烦死了', '! /' + global_filename + ' score print')); - print(format('e /' + global_filename + ' debug level -> ', 'c 显示DEBUG信息等级', '^g (没啥可吐槽的)', '! /' + global_filename + ' debug level')); + print(format('e /' + global_filename + ' score save -> ', 'c 保存各项榜单', '^ub 提醒:这会覆盖文件数据', '!/' + global_filename + ' score save')); + print(format('e /' + global_filename + ' score print -> ', 'c 输出各项榜单数据', '^gs 吐槽一下,scarpet的字符串处理真的麻烦死了', '!/' + global_filename + ' score print')); + print(format('e /' + global_filename + ' debug level -> ', 'c 显示DEBUG信息等级', '^g (没啥可吐槽的)', '!/' + global_filename + ' debug level')); print(format('e /' + global_filename + ' debug level -> ', 'c 设置DEBUG信息等级为 ', '^g 为 0-4的正整数,默认为2', '?/' + global_filename + ' debug level ')); -// print(format('e /' + global_filename + ' xxx -> ', 'c xxx', '^g xxx', '! /' + global_filename + ' xxx')); print(format('y [系统信息]' + global_filename + ' 版本: ' + global_version)); print(format('y [系统信息]' + global_filename + ' 文件名: ' + global_filename)); print(format('y [插件信息]' + global_filename + ' 数据存储路径: ' + global_score_path)); @@ -101,6 +154,7 @@ help() -> ( ); reload_script() -> ( + save_scores(); print('script ' + global_filename + ' 重载中···'); run(str('script load ' + global_filename)); ); @@ -117,7 +171,7 @@ load_scores() -> ( printl(data + '\n\n' + _, 1, false, true)); // DEBUG 输出 ); -print_scores() -> ( +score_print(type) -> ( // 目前只会输出挖掘榜 printl(global_score, 0, false, true); print('§7' + '-'*10 + '挖掘榜' + '-'*10); // 输出标题 @@ -125,9 +179,11 @@ print_scores() -> ( max_len = 1; // 初始化两个数据 for(global_score, + if(global_score:_:'mined':'total' == null || global_score:_:'mined':'total' == '0', + continue();); max_len = max(max_len, length(_)); // 如果这个名字的长度大于之前的,就把最大长度换成这个名字的 - put(mine, 0, [_, global_score:_:'mine':'total'], 'insert')); + put(mine, 0, [_, global_score:_:'mined':'total'], 'insert')); // 把所有的数据加到mine里备用,等待排序 mine = sort_key(mine, -_:1); // 根据每个挖掘数据的挖掘量进行排序(排序用的分数是挖掘量的倒数,这样可以倒序排列) printl(mine, 1, false, true); @@ -137,6 +193,16 @@ print_scores() -> ( ); +print_score(type) -> ( + // 输出指定类型的榜单 + mapper = { + 'mined' -> '挖掘', + 'killed' -> '击杀' + }; + maped_type = mapper:type; + task_thread('temp', 'score_print', type); +); + save_scores() -> ( print('计分数据保存中'); for(global_score, @@ -146,7 +212,7 @@ save_scores() -> ( ); make_player_score(player) -> ( - score = {'mine'-> {'total'-> 0}, + score = {'mined'-> {'total'-> 0}, 'kill'-> {}}; // 基本信息 put(global_score, player, score); // 加到列表里 ); @@ -166,21 +232,21 @@ __on_player_breaks_block(player, block) -> ( add_mine(player, block) -> ( block = str(block); - splayer = player ~ 'name'; + splayer = query(player, 'name'); if(!player(splayer), return()); // 如果玩家列表里没有输入的玩家就返回 if(!has(global_score:splayer), make_player_score(splayer)); // 如果榜单里没有玩家就加入玩家的榜单 - if(!has(global_score:splayer:'mine', block), - put(global_score:splayer:'mine':block, 1), + if(!has(global_score:splayer:'mined', block), + put(global_score:splayer:'mined':block, 1), // 如果玩家的记录里没有这个方块就把这个方块加到挖掘列表里 - score = get(global_score:splayer:'mine':block); - put(global_score:splayer:'mine':block, score + 1)); + score = get(global_score:splayer:'mined':block); + put(global_score:splayer:'mined':block, score + 1)); // 如果记录里有就 += 1 - full_score = get(global_score:splayer:'mine':'total'); - put(global_score:splayer:'mine':'total', full_score + 1); + full_score = get(global_score:splayer:'mined':'total'); + put(global_score:splayer:'mined':'total', full_score + 1); // print(global_score); );