Compare commits

...

3 Commits
v0.3.0 ... main

Author SHA1 Message Date
3cdd7997d6
Add chinese translation
Signed-off-by: szdytom <szdytom@qq.com>
2023-10-08 16:24:37 +08:00
7999bc1d7b
Fix i18n dump filename
Signed-off-by: szdytom <szdytom@qq.com>
2023-10-07 11:57:51 +08:00
291a3e420e
Add locate button in player list
Signed-off-by: szdytom <szdytom@qq.com>
2023-10-07 11:13:26 +08:00
8 changed files with 183 additions and 27 deletions

View File

@ -17,7 +17,7 @@ ICollect-Alpha 是一个使用 [Carpet 脚本](https://github.com/gnembon/fabric
3. 每10分钟会有一个投票环节投票为一人一票不记名投票后不可撤销。所有玩家都可以把票投给一个自己怀疑是狼人的玩家票数最高者出局。可以投弃权票如果票数最高者有多人得票数相同或票数最高者得票数不严格多于弃权票数量则该轮投票无人出局。 3. 每10分钟会有一个投票环节投票为一人一票不记名投票后不可撤销。所有玩家都可以把票投给一个自己怀疑是狼人的玩家票数最高者出局。可以投弃权票如果票数最高者有多人得票数相同或票数最高者得票数不严格多于弃权票数量则该轮投票无人出局。
4. 如果好人阵营没能在规定时间内完成收集任务则坏人阵营获胜。反之如果好人阵营成功完成6个物品的收集则好人阵营获胜。 4. 如果好人阵营没能在规定时间内完成收集任务则坏人阵营获胜。反之如果好人阵营成功完成6个物品的收集则好人阵营获胜。
5. 每个玩家只有一条生命,被杀死、票死或者因为环境而死的玩家将变成旁观者模式。在准备阶段内死亡不会变成旁观者,而是会正常复活。 5. 每个玩家只有一条生命,被杀死、票死或者因为环境而死的玩家将变成旁观者模式。在准备阶段内死亡不会变成旁观者,而是会正常复活。
6. 游戏过程中玩家获得持续的生命回复II和伤害吸收III20秒更新一次状态效果为30秒 6. 游戏过程中玩家获得持续的生命回复II和伤害吸收III10秒更新一次状态效果为20秒
【望远镜的特殊能力】 【望远镜的特殊能力】
@ -26,7 +26,7 @@ ICollect-Alpha 是一个使用 [Carpet 脚本](https://github.com/gnembon/fabric
3. 建筑烟花:发射在其下方生成道路的烟花火箭(道路建筑材料为 _石化橡木台阶_)。 3. 建筑烟花:发射在其下方生成道路的烟花火箭(道路建筑材料为 _石化橡木台阶_)。
【指令使用】 【指令使用】
1. `/ica`:列出物品收集目标和时限信息 1. `/ica`:列出物品收集目标、时限和玩家信息
2. `/ica submit <slot>`:递交一个目标要求的物品 2. `/ica submit <slot>`:递交一个目标要求的物品
3. `/ica me`:查看自己的身份 3. `/ica me`:查看自己的身份
4. `/ica seed`:查看地图种子 4. `/ica seed`:查看地图种子

View File

@ -2,6 +2,7 @@ __config() -> {
'scope' -> 'global', 'scope' -> 'global',
'command_permission' -> 'ops', 'command_permission' -> 'ops',
'commands' -> { 'commands' -> {
'' -> 'cmdList',
'list' -> 'cmdList', 'list' -> 'cmdList',
'confirm' -> 'cmdStart', 'confirm' -> 'cmdStart',
'reset' -> 'cmdResetClear' 'reset' -> 'cmdResetClear'
@ -9,9 +10,8 @@ __config() -> {
}; };
import('ica-libs', 'shuffleList', 'countCareer', 'playerListNbt' import('ica-libs', 'shuffleList', 'countCareer', 'playerListNbt'
, 'findVoteMax', 'resetVotes', 'getFirstUnsetGoal', 'useIcaInstead' , 'findVoteMax', 'resetVotes', 'getFirstUnsetGoal');
, 'startedReject'); import('ica-i18n', 'getLocaleKey', 'useIcaInstead', 'startedReject');
import('ica-i18n', 'getLocaleKey');
__on_start() -> ( __on_start() -> (
if(nbt_storage('ica:data'):'Goals' == null, ( if(nbt_storage('ica:data'):'Goals' == null, (
@ -108,7 +108,7 @@ endGameTitle(p, m, s) -> (
endTimeout(iv) -> ( endTimeout(iv) -> (
endGameTitle(getPigPlayers(), getLocaleKey('pig.timeout.title') endGameTitle(getPigPlayers(), getLocaleKey('pig.timeout.title')
, str(getLocaleKey('pig.timeout.subtitle'), iv)); , str(getLocaleKey('pig.timeout.subtitle'), iv));
endGameTitle(getWolfPlayers(), getLocaleKey('wolf.timeout.subtitle') endGameTitle(getWolfPlayers(), getLocaleKey('wolf.timeout.title')
, str(getLocaleKey('wolf.timeout.subtitle'), iv)); , str(getLocaleKey('wolf.timeout.subtitle'), iv));
endCleanup(); endCleanup();
); );
@ -264,7 +264,7 @@ cmdStart() -> (
builder_n = countCareer('builder') + hunter_n; builder_n = countCareer('builder') + hunter_n;
firework_hunter_n = countCareer('firework_hunter') + builder_n; firework_hunter_n = countCareer('firework_hunter') + builder_n;
if(firework_hunter_n > length(participants_list), ( if(firework_hunter_n > length(participants_list), (
print(format(getLocaleKey('reject.leckplayer'))); print(getLocaleKey('reject.leckplayer'));
return(false); return(false);
)); ));
@ -303,5 +303,5 @@ cmdStart() -> (
cmdList() -> ( cmdList() -> (
useIcaInstead(); useIcaInstead();
run('/ica'); run('/ica list');
); );

View File

@ -10,11 +10,13 @@ __config() -> {
}, },
}; };
import('ica-i18n', 'getLocaleKey');
getStatus() -> ( getStatus() -> (
if(global_enabled, ( if(global_enabled, (
print('effect-applier: on') print(getLocaleKey('effect-applier.on'));
), ( ), (
print('effect-applier: off') print(getLocaleKey('effect-applier.off'));
)) ))
); );

View File

@ -7,7 +7,7 @@ __config() -> {
}, },
}; };
global_TranslateKeysEnUS = { global_TranslateKeysEnCN = {
'pig.timeout.title' -> 'Timeout!', 'pig.timeout.title' -> 'Timeout!',
'pig.timeout.subtitle' -> 'You didn\'t complete %d goals in time', 'pig.timeout.subtitle' -> 'You didn\'t complete %d goals in time',
'wolf.timeout.title' -> 'You won!', 'wolf.timeout.title' -> 'You won!',
@ -137,16 +137,157 @@ global_TranslateKeysEnUS = {
'misc.clipboard' -> 'Click To Copy', 'misc.clipboard' -> 'Click To Copy',
'license.header' -> 'ICollect-Alpha, Copyright (C) 2023 方而静\nICollect-Alpha comes with ABSOLUTELY NO WARRANTY;\nfor details type \'/ica-loader show w\'.\nThis is free software, and you are welcome to redistribute it\nunder certain conditions; type \'/ica-loader show c\' for details.' 'effect-applier.on' -> 'effect-applier status: enabled.',
'effect-applier.off' -> 'effect-applier status: disabled.',
'license.header' -> 'ICollect-Alpha, Copyright (C) 2023 %s\nICollect-Alpha comes with ABSOLUTELY NO WARRANTY;\nfor details type \'/ica-loader show w\'.\nThis is free software, and you are welcome to redistribute it\nunder certain conditions; type \'/ica-loader show c\' for details.'
}; };
global_TranslateKeysZhHans = {
'pig.timeout.title' -> '超时!',
'pig.timeout.subtitle' -> '%d 个收集目标超时',
'wolf.timeout.title' -> '取得胜利!',
'wolf.timeout.subtitle' -> '他们的收集任务失败了,做得好',
'pig.complete.title' -> '恭喜!',
'pig.complete.subtitle' -> '全部目标物品已集齐',
'wolf.complete.title' -> '失败',
'wolf.complete.subtitle' -> '他们已完成全部收集任务',
'submit.ddl.1' -> '[注意] 提交将在 1 分钟内结束。',
'submit.ddl.2' -> '[注意] 提交将在 %d 秒钟内结束。',
'submit.ddl.3' -> '[注意] 提交将在 %d 秒钟内结束。',
'submit.success' -> '提交成功。',
'submit.missing.before' -> '未找到',
'submit.missing.after' -> '',
'submit.already.before' -> '重复提交',
'submit.already.after' -> '',
'election.kill' -> '%s 已被票出。',
'election.ddl' -> '[注意] 本轮投票将在 1 分钟内结束。',
'election.result.nobody' -> '无人被票出',
'election.result.kill' -> '[注意] 你已被票出!你将在 10 秒内出局。',
'election.new' -> '新一轮投票已开始。',
'election.result' -> '票选结果:%s',
'hint.instead.before' -> '请使用命令 ',
'hint.instead.after' -> '',
'hint.allset.before' -> '全部目标已设置,你可以使用命令 ',
'hint.allset.after' -> ' 开始游戏',
'goal.set.before' -> '目标 %d 已设置为 ',
'goal.set.after' -> '',
'bossbar.prepare.title' -> '准备阶段',
'bossbar.time.title' -> '收集中',
'bossbar.progress.title' -> '收集进度',
'career.display.title' -> '身份职业配置为:',
'career.display.wolf' -> ' - 狼人:%d 个玩家。',
'career.display.hunter' -> ' - 火球猎人:%d 个玩家。',
'career.display.firework_hunter' -> ' - 烟花猎人:%d 个玩家。',
'career.display.builder' -> ' - 建筑师:%d 个玩家。',
'career.display.piggy' -> ' - 平民:其余全部玩家。',
'career.set' -> '%s已设为 %d 个玩家。',
'career.title.bystander' -> '旁观者',
'career.title.piggy' -> '平民',
'career.title.hunter' -> '火球猎人',
'career.title.firework_hunter' -> '烟花猎人',
'career.title.builder' -> '建筑师',
'career.title.wolf' -> '狼人',
'career.help.bystander' -> '你只能旁观。',
'career.help.piggy' -> '完成全部收集任务以取得胜利!',
'career.help.hunter' -> '保护平民,找出并杀死狼人,完成全部收集任务。',
'career.help.firework_hunter' -> '保护平民,找出并杀死狼人,完成全部收集任务。',
'career.help.builder' -> '建筑防御并完成全部收集任务。',
'career.help.wolf' -> '隐藏自己的身份,阻止他们完成收集目标。',
'career.whoami' -> '你是%s%s',
'ablity.title.voter' -> '投票',
'ablity.title.flyer' -> '飞行',
'ablity.title.fireball_spyglasser' -> '火球',
'ablity.title.firework_spyglasser' -> '烟花',
'ablity.title.build_spyglasser' -> '筑路',
'ablity.title.coordinator' -> '追踪',
'ablity.help.voter' -> '你可以投票。',
'ablity.help.flyer' -> '你可以使用鞘翅飞行。',
'ablity.help.fireball_spyglasser' -> '你可以使用望远镜发射恶魂火球(准备阶段除外)。',
'ablity.help.firework_spyglasser' -> '你可以使用望远镜发射烟花火箭(准备阶段除外)。',
'ablity.help.build_spyglasser' -> '你可以使用望远镜建筑道路(准备阶段除外)。',
'ablity.help.coordinator' -> '你可以定位其他玩家。',
'ablity.format' -> '[能力] %s%s',
'reject.pending.before' -> '游戏还未开始,请使用命令 ',
'reject.pending.after' -> ' 以开始游戏。',
'reject.started.before' -> '游戏已开始,请使用命令 ',
'reject.started.after' -> ' 以中断游戏。',
'reject.leckplayer' -> '在线玩家数不足,游戏无法开始。',
'reject.goal.missing' -> '%d 个收集目标尚未设置。',
'reject.goal.enough.before' -> '全部目标已设置,请使用命令 ',
'reject.goal.enough.after' -> ' 修改目标。',
'reject.spyglass' -> '冷却中,距离可再次使用剩余 %.2f 秒。',
'reject.unable' -> '你没有此能力。',
'reject.bystand' -> '你只能旁观。',
'reject.reparing.submit' -> '请在准备阶段结束后提交。',
'reject.reparing.switch' -> '请在准备阶段结束后切换。',
'list.title.pending' -> '等待游戏开始:',
'list.title.collecting' -> '收集阶段剩余 %d 秒,%d 个任务已完成:',
'list.title.preparing' -> '准备阶段剩余 %d 秒:',
'list.item.unset' -> '未设置',
'list.item.submit' -> '[点此提交]',
'list.marker.0' -> ' - ',
'list.marker.1' -> ' + ',
'list.item.id' -> '#%d',
'vote.title' -> '共有 %d 个玩家:',
'vote.deceased' -> '[已死亡]',
'vote.amount.1' -> '[%02d票] ',
'vote.amount.2' -> '[%02d票] ',
'vote.footer' -> '当前得票数最多的玩家:',
'vote.nobody' -> '(无)',
'vote.abstain' -> '(弃权)',
'vote.button.vote' -> '[点此投票]',
'vote.button.abstain' -> '[点此弃权]',
'vote.marker' -> ' - ',
'vote.already' -> '你已投过票了。',
'vote.notfound' -> '未找到玩家 %s',
'vote.success' -> '投票成功。',
'locate.notfound' -> '未找到玩家 %s',
'locate.offline' -> '玩家 %s 不在线。',
'seed.title' -> '地图种子:',
'ps.wolf' -> '[狼人]',
'ps.button.locate' -> '[点此定位]',
'ps.marker' -> ' - ',
'ps.me' -> '[你]',
'ps.offline' -> '[离线]',
'ps.title' -> '共有 %d 个玩家:',
'misc.clipboard' -> '点此复制',
'effect-applier.on' -> '状态效果广播器:已启用。',
'effect-applier.off' -> '状态效果广播器:已禁用。',
'license.header' -> 'ICollect-Alpha版权所有 (C) 2023 %s\nICollect-Alpha 绝对不附带任何保证;\n请输入 \'/ica-loader show w\' 查看详情。\n这是自由软件,你可以在特定条款下重分发它。\n请输入 \'/ica-loader show c\' 查看详情。'
};
global_TranslateKeysEnabled = global_TranslateKeysZhHans;
getLocaleKey(keyid) -> ( getLocaleKey(keyid) -> (
if(has(global_TranslateKeysEnUS:keyid), global_TranslateKeysEnUS:keyid, 'tkey:' + keyid) if(has(global_TranslateKeysEnabled:keyid), global_TranslateKeysEnabled:keyid, 'tkey:' + keyid)
); );
useIcaInstead() -> ( useIcaInstead() -> (
print(format('d ' + getLocaleKey('hint.instead.before') print(format('d ' + getLocaleKey('hint.instead.before')
, 'mb /ica', '?/ica' , 'mb /ica list', '?/ica list'
, 'd ' + getLocaleKey('hint.instead.after'))); , 'd ' + getLocaleKey('hint.instead.after')));
); );
@ -163,5 +304,5 @@ pendingReject() -> (
); );
cmdDump() -> ( cmdDump() -> (
write_file('ica-i18n-keys.json', 'shared_json', global_TranslateKeysEnUS); write_file('ica-i18n-table', 'shared_json', global_TranslateKeysEnabled);
); );

View File

@ -19,7 +19,7 @@ CopyrightInfo() -> (
); );
cmdLoad() -> ( cmdLoad() -> (
print(getLocaleKey('license.header')); print(str(getLocaleKey('license.header'), '方而静'));
run('script load ica-admin'); run('script load ica-admin');
run('script load ica-effect-applier'); run('script load ica-effect-applier');
run('script load ica-spyglass'); run('script load ica-spyglass');

View File

@ -2,6 +2,7 @@ __config() -> {
'scope' -> 'global', 'scope' -> 'global',
'command_permission' -> 'ops', 'command_permission' -> 'ops',
'commands' -> { 'commands' -> {
'' -> 'cmdList',
'list' -> 'cmdList', 'list' -> 'cmdList',
'set <slot> <item>' -> 'cmdSet', 'set <slot> <item>' -> 'cmdSet',
'add <item>' -> 'cmdSetAppend', 'add <item>' -> 'cmdSetAppend',
@ -23,7 +24,7 @@ import('ica-libs', 'countCareer', 'getFirstUnsetGoal');
cmdList() -> ( cmdList() -> (
useIcaInstead(); useIcaInstead();
run('/ica'); run('/ica list');
); );
cmdSet(slot_id, goal_item_tuple) -> ( cmdSet(slot_id, goal_item_tuple) -> (

View File

@ -17,16 +17,16 @@ __config() -> {
}; };
import('ica-libs', 'listContain', 'countVotes', 'findVoteMax', 'countAbstainVotes'); import('ica-libs', 'listContain', 'countVotes', 'findVoteMax', 'countAbstainVotes');
import('ica-i18n', 'getLocaleKey'); import('ica-i18n', 'getLocaleKey', 'pendingReject');
cmdInfo() -> ( cmdInfo() -> (
if(!nbt_storage('ica:data'):'Started', ( if(!nbt_storage('ica:data'):'Started', (
print(format(getLocaleKey('reject.pending'))); pendingReject();
return(false) return(false)
)); ));
cand_names = parse_nbt(nbt_storage('ica:voting'):'Candidates'); cand_names = parse_nbt(nbt_storage('ica:voting'):'Candidates');
cand_n = length(cand_names); cand_n = length(cand_names);
print(str(getLocaleKey('vote.title', cand_n))); print(str(getLocaleKey('vote.title'), cand_n));
for(cand_names, ( for(cand_names, (
p = player(_); p = player(_);
v_cnt = countVotes(_); v_cnt = countVotes(_);
@ -57,7 +57,7 @@ cmdInfo() -> (
beforeVoteChecks() -> ( beforeVoteChecks() -> (
if(!nbt_storage('ica:data'):'Started', ( if(!nbt_storage('ica:data'):'Started', (
print(format(getLocaleKey('reject.pending'))); pendingReject();
return(false) return(false)
)); ));
myself = player(); myself = player();

View File

@ -1,6 +1,6 @@
__config() -> { __config() -> {
'commands' -> { 'commands' -> {
'' -> 'cmdList', '' -> 'cmdAllInfo',
'list' -> 'cmdList', 'list' -> 'cmdList',
'submit <slot>' -> 'cmdSubmit', 'submit <slot>' -> 'cmdSubmit',
'refill' -> 'cmdRefill', 'refill' -> 'cmdRefill',
@ -273,7 +273,19 @@ cmdListPalyer() -> (
&& query(p, 'has_scoreboard_tag', 'ica.wolf'), ( && query(p, 'has_scoreboard_tag', 'ica.wolf'), (
put(fcomp, null, ' ' + getLocaleKey('ps.wolf')); put(fcomp, null, ' ' + getLocaleKey('ps.wolf'));
)); ));
if(me != p && query(me, 'has_scoreboard_tag', 'ica.coordinator')
&& !query(p, 'has_scoreboard_tag', 'ica.deceased'), (
put(fcomp, null, 'mb ' + getLocaleKey('ps.button.locate'));
put(fcomp, null, '!/ica locate ' + _);
));
)); ));
print(format(fcomp)); print(format(fcomp));
)); ));
); );
cmdAllInfo() -> (
if(nbt_storage('ica:data'):'Started', (
cmdListPalyer();
));
cmdList();
);