
基础记分板。想要在服务器里开一个像模像样的商店,第一步就是建立货币系统,我用的是记分板指令,输入 scoreboard objectives add money dummy 然后就能给每个玩家一个名叫 money 的虚拟货币,再通过 scoreboard players set 某个玩家 money 数量来调整初始资金,注意这个 dummy 类型不会自动增减,全靠手动操作,非常稳定。
交易核心。玩家最常用的购买指令需要结合 clear 和 give 来实现,比如在命令方块里放一条指令,先检测玩家手里有没有足够的货币代币,实际中我用的是物品代替货币,比如钻石,执行 clear 最近玩家 diamond 0 1 来检测并扣除一颗钻石,然后 give 最近玩家 iron_sword 1 这样就完成了用一颗钻石换一把铁剑的交易,注意 clear 指令的返回值为成功或失败,需要配合条件命令方块来确保交易成立。
触发器妙用。为了让玩家自己点击按钮就能交易,我用 /trigger 指令配合记分板,先给玩家一个触发器权限,比如 scoreboard players enable 最近玩家 trade,然后在命令方块里用 execute 作为实体运行,检测玩家的 trade 分数是否等于某个值,再执行给予和扣除,这样玩家只需要在聊天框里输入 /trigger trade 就能自助购物,省去了管理员手动操作的麻烦。
防刷机制。新手开商店最容易忽略的就是刷物品漏洞,我吃过亏,后来用命令方块链加上计时器,比如在交易命令方块后面接一个延迟脉冲,再配合 blockdata 检测按钮是否被多次点击,或者使用 scoreboard 的分数限制,每个玩家每十分钟只能交易一次,具体做法是设置一个冷却记分板,每次交易后给玩家加一个分数,再用 testfor 检查分数是否超过阈值,超过就不执行。
函数封装。当商店指令越来越多,命令方块变得又乱又卡,我改用函数来管理,在数据包里的 functions 文件夹写一个 .mcfunction 文件,把所有指令按顺序排好,比如 shop_buy_sword 函数里写 clear 和 give 和 scoreboard 操作,然后在游戏里用 /function 命名空间 函数名 来调用,这样不仅指令复用性强,还能随时修改,甚至给不同商品设置独立的函数,维护起来特别轻松。
实际搭建。我在生存服务器里测试过一套完整的商店,先在地上放一个命令方块,设为循环无条件保持开启,里面写 execute 作为 最近玩家 检测他头顶的特定方块,比如金块,如果玩家站在金块上,就执行一个函数,函数里包含扣除货币和给予物品,然后在金块旁边放一个告示牌写上价格,玩家站上去自动触发,配合红石比较器还能显示库存,这套系统虽然简陋但非常稳定,运行了半年没出过问题。
个人经验。指令商店最怕的就是版本更新,我的世界每次大版本都会改动部分指令语法,比如从 1.12 到 1.13 的大改,我不得不重写所有函数,现在我会用最新版的数据包格式,并把核心指令写成宏,方便以后迁移,另外记得给命令方块加上权限限制,防止熊孩子破坏,最好用结构方块把整个商店区域保护起来,这样就算服务器重启也不会丢失数据。这就是我多年玩我的世界指令商店总结出来的干货,从记分板到触发器再到函数,每一步都踩过坑,希望你能少走弯路。
相关文章