game_end.mcfunction 5.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. # 游戏结束,根据 total_score 判断排名,并返回主大厅
  2. # 计算排名
  3. tag @a remove total_rank1
  4. tag @a remove total_rank2
  5. tag @a remove total_rank3
  6. # 1
  7. function ltw:main/get_max_score
  8. execute as @a if score @s total_score = #score_max mem run tag @s add total_rank1
  9. tag @a[tag=total_rank1] add max_uncounted
  10. # 2
  11. function ltw:main/get_max_score
  12. execute as @a[tag=!max_uncounted] if score @s total_score = #score_max mem run tag @s add total_rank2
  13. tag @a[tag=total_rank2] add max_uncounted
  14. # 3
  15. function ltw:main/get_max_score
  16. execute as @a[tag=!max_uncounted] if score @s total_score = #score_max mem run tag @s add total_rank3
  17. tag @a[tag=max_uncounted] remove max_uncounted
  18. # 计算金粒奖励
  19. scoreboard players set #total_gold mem 0
  20. execute as @a[tag=!watcher] run scoreboard players add #total_gold mem 900
  21. # 无名次
  22. execute as @a[tag=!total_rank1,tag=!total_rank2,tag=!total_rank3,tag=!watcher] run scoreboard players remove #total_gold mem 100
  23. # 计算总权重与单份奖励
  24. scoreboard players set #total_weight mem 0
  25. execute as @a[tag=total_rank1] run scoreboard players add #total_weight mem 3
  26. execute as @a[tag=total_rank2] run scoreboard players add #total_weight mem 2
  27. execute as @a[tag=total_rank3] run scoreboard players add #total_weight mem 1
  28. scoreboard players operation #total_gold mem /= #total_weight mem
  29. # 计算名次奖励
  30. scoreboard players set #rank1_gold mem 3
  31. scoreboard players operation #rank1_gold mem *= #total_gold mem
  32. scoreboard players operation #rank1_gold mem /= #const_100 mem
  33. scoreboard players set #rank2_gold mem 2
  34. scoreboard players operation #rank2_gold mem *= #total_gold mem
  35. scoreboard players operation #rank2_gold mem /= #const_100 mem
  36. scoreboard players set #rank3_gold mem 1
  37. scoreboard players operation #rank3_gold mem *= #total_gold mem
  38. scoreboard players operation #rank3_gold mem /= #const_100 mem
  39. # 如果因为掉线强制结束则无奖励
  40. execute store result score #count mem if entity @a[tag=!watcher]
  41. execute if score #count mem matches ..2 run scoreboard players set #rank1_gold mem 0
  42. execute if score #count mem matches ..2 run scoreboard players set #rank2_gold mem 0
  43. execute if score #count mem matches ..2 run scoreboard players set #rank3_gold mem 0
  44. # 显示排名
  45. tellraw @a ["",{"text":"\n\n\n\n----- 游戏结束 -----\n","color":"green","bold":true}]
  46. tellraw @a ["",{"text": "第一名 - ","color":"green"},{"selector": "@a[tag=total_rank1]","color":"white"},{"text":" (","color":"gray"},{"score":{"name": "@p[tag=total_rank1]","objective": "total_score"},"color":"gray"},{"text":", +","color":"gray"},{"score":{"name": "#rank1_gold","objective": "mem"},"color":"gray"},{"text":"g)","color":"gray"}]
  47. execute if entity @a[tag=total_rank2] run tellraw @a ["",{"text": "第二名 - ","color":"green"},{"selector": "@a[tag=total_rank2]","color":"white"},{"text":" (","color":"gray"},{"score":{"name": "@p[tag=total_rank2]","objective": "total_score"},"color":"gray"},{"text":", +","color":"gray"},{"score":{"name": "#rank2_gold","objective": "mem"},"color":"gray"},{"text":"g)","color":"gray"}]
  48. execute if entity @a[tag=total_rank3] run tellraw @a ["",{"text": "第三名 - ","color":"green"},{"selector": "@a[tag=total_rank3]","color":"white"},{"text":" (","color":"gray"},{"score":{"name": "@p[tag=total_rank3]","objective": "total_score"},"color":"gray"},{"text":", +","color":"gray"},{"score":{"name": "#rank3_gold","objective": "mem"},"color":"gray"},{"text":"g)","color":"gray"}]
  49. tellraw @a ["\n"]
  50. # 给予金粒奖励
  51. execute as @a[tag=total_rank1] run scoreboard players operation @s gold += #rank1_gold mem
  52. execute as @a[tag=total_rank1] run scoreboard players operation @s gold_total += #rank1_gold mem
  53. tellraw @a[tag=total_rank1] ["",{"text": ">> ","color":"green","bold": true},"由于获得第一名, 你得到了 ",{"score":{"name": "#rank1_gold","objective": "mem"},"color":"green"},{"text": " 金粒","color":"green"}]
  54. execute as @a[tag=total_rank2] run scoreboard players operation @s gold += #rank2_gold mem
  55. execute as @a[tag=total_rank2] run scoreboard players operation @s gold_total += #rank2_gold mem
  56. tellraw @a[tag=total_rank2] ["",{"text": ">> ","color":"green","bold": true},"由于获得第二名, 你得到了 ",{"score":{"name": "#rank2_gold","objective": "mem"},"color":"green"},{"text": " 金粒","color":"green"}]
  57. execute as @a[tag=total_rank3] run scoreboard players operation @s gold += #rank3_gold mem
  58. execute as @a[tag=total_rank3] run scoreboard players operation @s gold_total += #rank3_gold mem
  59. tellraw @a[tag=total_rank3] ["",{"text": ">> ","color":"green","bold": true},"由于获得第三名, 你得到了 ",{"score":{"name": "#rank3_gold","objective": "mem"},"color":"green"},{"text": " 金粒","color":"green"}]
  60. scoreboard players add @a[tag=!total_rank1,tag=!total_rank2,tag=!total_rank3,tag=!watcher] gold 1
  61. scoreboard players add @a[tag=!total_rank1,tag=!total_rank2,tag=!total_rank3,tag=!watcher] gold_total 1
  62. tellraw @a[tag=!total_rank1,tag=!total_rank2,tag=!total_rank3,tag=!watcher] ["",{"text": ">> ","color":"aqua","bold": true},"由于没有获得名次, 你得到了 ",{"text": "1 金粒","color":"aqua"}]
  63. # 返回主大厅
  64. schedule function ltw:state/0/state_enter 2t replace
  65. execute as @a at @s run function lib:sounds/theend
  66. forceload remove all
  67. # TODO: [010] 给奖励选择阶段添加上层罩子
  68. # TODO: 用盔甲架给商店添加物品预览
  69. # TODO: 修改大厅简单跑酷的最后一段,让玩家需要经过一个节奏原地跳才能到达终点
  70. # TODO: 要不要真做一个用桶摸鱼的小游戏?
  71. # FIXME: 旁观疑似看不到倒计时条?