本帖最后由 DJXGAME 于 2013-1-25 17:24 编辑

计分板

计分板系统是一套复杂的游戏机制。通常可以由命令命令方块进行控制。

对象

对象由名称(name)显示名称(displayname)判据(criteria)以及每位玩家所对应的整数数据组成。分数的范围为-2,147,483,648至2,147,483,647,没有小数。

对象的名称用于在命令中进行引用,目标参数以及在文件格式中使用。这一变量区分大小写并且只能为单一单词。

与之相反,显示名称可以由很多个单词组成,用于在不同场合进行显示。也是区分大小写的。

对象的判据决定了其行为:

  • "虚拟环境(dummy)":只能通过命令修改分数,诸如死亡等游戏行为并不能修改分数。这一项可以涌入某些特定的事件标记。
  • "死亡次数(deathCount)": 当玩家死亡时,分数会自动增加。
  • "杀敌数量(playerKillCount)": 当玩家杀死其他玩家时分数会自动增加。
  • "击杀数量(totalKillCount)": 当玩家杀死其他生物时分数会自动增加。


在任何实体中无论何种判据,玩家的分数都可以通过命令的方式进行修改。可以增加或减少特定的值,也可以直接设置成某一特定值。命令方块也能通过参数score_name以及score_name_min对玩家的分数进行监测。在上述参数中name为所检测对象中的内部名称。score_name表示玩家分数最多为某一特定值,而score_name_min则为玩家分数至少为某一特定值。举例来说,在命令方块中输入"@p[score_deaths=5,score_deaths_min=1]"即制作一个可以当如下情况方能输出的红石比较器:基于"死亡数量"判据下,假定deaths为其中的一个对象,选择死亡次数至少1次,最多为5次的玩家。


参考命令
命令
描述
scoreboard <objectives|players>使用计分板系统的底层命令。
scoreboard objectives [list]列出所有已知的对象,其显示名称以及判据。可选参数"list"与之效果相同并可以省略。
scoreboard objectives add <name><criteria> [display name...]通过输入内部名称名称(name),某一判据(criteria),以及可选项——显示名称(displayname),创建一个新的对象。显示名称的默认值为名称所对应的值。前文中已经为这些参数进行了纤细的叙述。所有的参量都是区分大小写的。
scoreboard objectives remove <name>在计分板系统中移除名称为name的对象的所有数据。会从对象列表,玩家分数中删除对应数据,若在显示列表中,删除后即无法显示。
scoreboard objectives setdisplay <slot>[objective]以某种特定的显示形式(slot)显示对象(objective)。其中slots分为"列表(list)"和"侧边栏(sidebar)"。"列表"会在玩家列表中以黄色文字在玩家名称后显示分数信息(默认为Tab键),并不会显示对象名称。"侧边栏"则会在屏幕右侧实时显示分数信息,并会在列表的最上方显示对象的显示名称。即使玩家离线,如果在该对象下存在一定分数也会在"侧边栏"中进行显示。值得注意的是:对象(objective)参数为可选参数:如果不提供对象则显示列表会并清零(便为其默认状态)。
scoreboard objectives cleardisplay未使用;可能为BUG。在代码中亦没有相关说明,但是在语言文件以及错误信息中有所提及。如果希望使用清楚显示数据,可以参考上一命令。
scoreboard players [list]显示所有被追踪的玩家,换句话说,在计分板系统中的玩家。可选参数"list"的效果相同,可以省略。
scoreboard players set <player><objective> <score>对象玩家的分数设置为score的值,会覆盖之前的数据。
scoreboard players add <player><objective> <count>对象(objective)下的玩家(player)分数增加某一特定值countcount至少为1。
scoreboard players remove <player><objective> <count>对象(objective)下的玩家(player)分数减少某一特定值countcount至少为1。
scoreboard players reset <player>重置玩家(player)分数。需要注意:这一命令会对所有对象都产生影响,并不仅仅是将其置零:而是将其整体移除计分板系统。并且很神奇的是,这一命令在与诸如'@p'这类的提示符的配合下并不能正常使用。是一个BUG?
scoreboard players player未使用;可能为BUG。在代码中亦没有相关说明,但是在语言文件以及错误信息中有所提及。当前命令中也没有在聊天窗口中显示特定分数的命令,可能为正在制作的特性。
[编辑] NBT 格式计分板数据存储在地图文件夹下的scoreboard.dat文件中,存储形式为GZip'd NBT格式
  • 根标签。
  • data: 计分板数据、
    • Objectives:代表对象的复合标签列表。
      • 对象。
        • CriteriaName:该对象的判据。必须为以下四种之一:"虚拟环境(dummy)", "死亡次数(deathCount)","杀敌数量(playerKillCount)"以及"击杀数量(totalKillCount)"。
        • DisplayName:对象的显示名称。如果在创建对象时没有涉及,则会与下文中名称标签相同。
        • Name:对象的内部名称。
    • PlayerScores:在计分板系统中所追踪的分数的复合标签列表。
      • 拥有分数的玩家或对象。
        • Score:此对象中玩家的分数。
        • Name:对象中拥有此分数的玩家名称。Objective:玩家分数所在对象的内部名称。
    • DisplaySlots:正在显示的对象的显示模式。
      • slot_0:正在以"列表"模式显示的对象的内部名称。
      • slot_1:正在以"侧边栏"模式显示的对象的内部名称。

历史
未来
13w04a添加计分板系统

画廊



以"列表"形式显示的某一玩家在这一对象下获得了2点分数,同时在"侧边栏"模式中则为某一显示名称为"QuestPoints"的对象,其中该玩家没有获得分数


这个机制读起来有些复杂,所以我来给大家来解释一下: O(∩_∩)O~
13w04a中引入了计分板系统,什么是计分板系统呢?

就是如上图所示的可以用来显示排名的东西啦~当然具体是什么的排名就要看各位地图作者的创意和灵感了。如果希望使用计分板系统首先需要创建一个对象。对象也是计分板系统的依托~只有使用对象才能正确的使用计分板。也正如前文所说对象需要您输入三个参数:名称、显示名称和判据。其中判据不要忘记只能从上述的四个中选择一个,只有第一个是必须通过命令进行更改的,后面的三个都可以自动增加。当然对应的情况不同。此处注意:判据必须一字不差,而且区分大小写!


关于文中的那个例子:


@p[score_deaths=5,score_deaths_min=1]

首先@p的意思是选择附近的一个玩家,这里的前提是您创建了一个名称为deaths的对象,当然如果您创建的对象是obj1的话,就需要把deaths替换为obj1了。这个句子的含义就是:选择满足deaths对象中满足分数大于等于1小于等于5的离命令方块最近的玩家~不是说一定是死亡次数哦~这个和您的对象所使用的判据有关。


关于命令:

  • 如果希望使用计分板系统不要忘记创建对象!
  • 命令的语句必须一字不差,大小写切记~是objectives,players,都是复数的!!!
  • 标记为BUG和疑似BUG的语句不要尝试!
  • 如果使用侧边栏模式也是需要按一下TAB键才能出来的,而且侧边栏模式所显示的名称是显示名称!

一些感想:

这语句太长了,我在测试的时候经常输错%>_<%



有什么问题可以在下面留言提出,或者PM我也行~