一种解决Minecraft服务器常见经济问题的新尝试(背景篇)

Posted by

对于Minecraft多人服务器而言,经济系统可谓是不可或缺的玩法之一。在Spigot服务器中,必备插件之一的EssentialsX提供了便捷实用的balance模块,可以让玩家与他人轻松进行货币交易。特别是ChestShop等插件还可让玩家自行设立商店,让玩家们在Minecraft中体会到现实中创业的不易。

然而,无论是在现实中,还是在Minecraft服务器中,人们一直被与经济相关的难题困扰着。其中,“如何合理控制通货膨胀?”、“如何科学增发货币?”等问题长期以来难以得到完美的解答。特别是对于资源无穷无尽的Minecraft世界而言,绝大多数服务器都只能眼睁睁地望着货币不断贬值而手足无措。

对此,我所参与管理的DC商业梦想城服务器在最近的5年里,尝试通过各种方法来避免货币增发超速和通货膨胀的问题。特别是在本月(2024年11月),DC成功研发了更科学、更便捷的第3代收购系统,有望在不牺牲玩家体验的基础上解决令人头疼的经济问题。我将根据DC的经验,用2个文章介绍我们究竟是如何尝试解决Minecraft服务器中常见的经济问题的。

最初的尝试——第1代收购系统

DC服主kunjinkao_xs(欢迎作客锟斤拷同学的博客)曾在2020年制作了一套面向玩家的收购系统。由于这套系统是DC第一套收购系统,因此下文我们将其称为“第1代收购系统”。作为首个官方收购系统,第1代系统的目标十分简明,即“稳定向玩家提供货币”和“避免贫富差距越来越大”。

为了防止产生极端的贫富差距,如图1所示,第1代系统引入了一名为“定额等价差异化收购”的模式。这是一种对持有不同货币数的玩家采取不同收购价格的模式。当某位玩家持有的货币数量越多,则该玩家收购价格越低。虽然偶有认为该模式“不公平”的声音,但至少在解决Minecraft服务器经济问题的道路上,这算是迈出了十分勇敢的第一步。

图1 第1代收购系统采用的“定额等价差异化收购”模式
左表最左列的数字代表玩家目前所持货币的数量。

虽然第1代收购系统成功(或部分)达成了最初设定的目标,但是一大串问题接踵而来。首先,第1代收购系统必须由管理员手动开启。管理员需要高强度利用/balancetop等命令监视服务器货币总量,在确认已经增发了一定货币后还需手动关闭系统。这种人工控制开关带来的后果便是经常会出现超出预定增发额度的情况。在我和kunjinkao_xs聊到这个问题时,身为研发者的他甚至都评价道“太粗陋了”。

再者,越来越多的玩家变得只去收集诸如钻石等价格极高的物品,而不再理会产品价格偏低的农作、牧畜、打怪等其他玩法。甚至在一些时候,你可以看到全服玩家都聚集在资源世界挖矿的场景!不得不说的是,这种场景对于一个主打建设发展的服务器而言是十分不健康的,对收购系统的改进迫在眉睫。

自动化时代——第2代收购系统

面对上述问题,第1代收购系统的制作者kunjinkao_xs对自己研发的系统进行了大幅度改进,并于2022年3月完成了第2代收购系统的开发工作。第2代收购系统引入了单个物品占总额度比例的限制,解决了玩家扎堆出售高价物品而忽视其他玩法的问题。此外,第2代系统还添加了自动定时开启收购和数据统计等功能,为OP节省了许多在管理方面上的精力。

不过,正当我们以为解决了所有难题后,我们又遇到了一个“幸福”的麻烦。

2022年春天,由DC管理员DreamCityToger制作的《我的游戏人生》视频系列一夜间爆火。截至本文发稿时,《我的游戏人生》系列的总播放量已超过130万!《我的游戏人生》系列的爆火为DC引来了大量的新玩家。玩家数量的急剧增多,使得每次收购的额度在短短一两秒钟之内就被瞬间一抢而空,导致许多网络不佳和不熟悉系统的玩家无法通过收购系统赚得货币。“秒空”这一原本未曾出现在汉语词典里的词汇,一时成为了DC服务器内人人皆知的梗。而正是这个“秒空”,使得第2代收购系统突然出现了一些如图2所示的不尽人意之处。

图2 第2代收购系统因“秒空”现象出现的不尽人意之处

Science is Magic——第3代收购系统

当时已在大学里摸爬滚打了数年的我掌握了基本的编程能力。对于我这么一名物理系的学生,一些基本的数理模型也早已是司空见惯。面对上述问题,2023年暑假的时候,一种全新的思路在我的脑海里不断涌现……

然而,虽然我已在2023年8月就完成了第3代收购系统的大部分理论框架,但是如何将其写为脚本载入DC成为了最大的难题——只使用过Python的我无法在短时间之内利用JAVA实现我脑海中的风暴!随着新学期开学和备战考研,我也逐渐淡去了对新收购系统的关心,第3代收购系统长时间停留在了纸面上。

……

按理来说,这个故事如果就此结束,现在的我或许只会遗憾地感叹理论和实践的差距竟然如此之大。不过就在2024年春天,DC服主kunjinkao_xs向我传达了一个令我兴奋不已的好消息——利用PySpigot就可以通过Python来编写Minecraft的脚本!自此,第3代收购系统的故事迎来了谁也未曾预料到的大逆转。

2024年夏天,考研上岸后的我终于迎来了一阵闲暇时光。在kunjinkao_xs、SlinkierApple13、Sun_Yu_Xuan等同朋的帮助下,第3代收购系统的Python脚本终于在2024年10月浮现出了海面。此外,在脚本开发的过程中,SlinkierApple13、Qi_Miao、Sun_Yu_Xuan、yileen10、THEFREEMAN、BreakGraze、Oracles42、Dp_Dk_Fantasy、DreamCityToger、memon_tree、CHEN_chen_CHEN、Rex等DC玩家们也为我提供了许多关于基础理论、收购列表的宝贵建议。

最终,第3代收购系统的故事奇迹般地于2024年11月迎来了高潮——第3代收购系统正式于DC启用

图3 第3代收购系统研发过程集锦

那么,第3代收购系统到底是基于怎样的方法论实现的呢?敬请参见理论篇

3 comments

  1. 第二代收购系统最大的意义就是首次通过编程试图解决服务器内问题。但又因为是首个,实现方法怪异,不利于后续维护和开发,因此在投运后仅进行过一次“块收购”的功能更新。

Leave a Reply

您的邮箱地址不会被公开。 必填项已用 * 标注