以电报中的游戏机器人为例,我在游戏开发人员世界中的步骤,成功和错误

大家好! 我叫马克西姆(Maxim),我想告诉您有关“荒原大战”项目创建的故事。 我希望您会感兴趣,也许其中一些可以帮助您避免我的错误。

平台选择


Telegram是用于创建在线游戏的非常不标准的平台。 特别是对于MMORPG。 我想知道是否完全有可能在此平台上创建高质量的产品,如果可以,那么对此是否有任何需求。 因此,在2017年6月,我开始开发《荒原大战》。

病毒性


在开发的早期,决定组建一个由我的朋友组成的焦点小组进行游戏测试。 毕竟,在与IMO打交道时,仅进行测试是有问题的。 因此,我启动了游戏的封闭Beta测试,并使用一次性密钥访问了该机器人。 生成了10个片段后,我将它们发送给了TG的朋友。 推荐系统已经添加到了这一点上,尽管鉴于封闭测试,它实际上不起作用。 其实质是根据您的推荐给游戏中注册的每个人。 连结后,玩家可获得+1的最大耐力和一些上限(当地货币)的零用钱。 这导致了这样一个事实,即自PTA成立起的两周后,有50个人参加了该活动,而我的私人留言充斥着人们要求为他们的朋友再提供1-2-10个钥匙的请求。 我决定不专注于修复在测试中发现的错误并启动一个公开的beta测试,而不是不断生成新的密钥,并按密钥进行注销。 MBT的第一天,有120个人注册了游戏。 一个月后,每天的在线人数为200-250人,注册玩家总数接近800。而在我的PR游戏中,所有这些活动都没有动摇,这只游戏因口口相传和推荐系统而广为人知。

玩家喜欢的项目功能


在测试过程中,玩家注意到一种游戏风格,这种格式,完全的PVP战斗以及没有经典技能点和升级功能的玩家抽水系统极为罕见。 但是,令我感到惊讶的是-大多数人都称赞了游戏文字,特别是幽默的质素,对流行文化和氛围的提及,与戏剧中的黑色幽默形成对比。

技术细节


与Bot API平台相关的最初困难出现在开发的最初几天。 Telegram有两个主要系统可将其漫游器连接到您的服务器:所谓的Long Polling和Webhooks。 第一个含义是您的服务器将以一定间隔不断轮询Telegram以获取新请求,如果有请求,它将通过返回Bot API响应进行处理。 第二个实现起来比较困难-它包含以下事实:您的服务器告诉Telegram“如果有任何请求,请将它们放到该地址”。 因此,要使用Webhooks技术实现漫游器,至少需要一个自签名的永久IP地址和SSL证书。 在开始基于Long Polling的开发之后,一开始我没有注意到与该方法相关的任何问题。 但是,在连续运行一天之后,该漫游器意外崩溃了。 电报收到请求后便开始返回错误。 事实证明,此问题完全困扰着所有基于Long Polling的漫游器-电报会在一段时间后关闭该漫游器的请求处理,因此您必须不断地重新启动它。 首先,我决定尝试通过编写cron脚本来检查该过程的脉搏,并在患者未响应击打杆时重新启动,从而使机器人的“复活”过程自动化。 但是,这种不断重启的过程给玩家带来了不便,例如 花了一些时间,还重置了游戏中的当前计时器。 结果,该项目被转移到Webhooks,这个问题立即消失了。

从Bot API本身的复杂性来看,一切都很平静。 直到片刻。

该项目正在扩大范围,扩大受众并不断发展。 有一次,机器人在收到请求后突然开始“沉闷”。 更准确地说,机器人对玩家的响应有所延迟。 首先,我爬到服务器上,以为它已不再能够应对越来越多的请求。 但是,不可以,在高峰时间服务器负载不会超过30%,可用内存没有问题,系统日志中没有错误和警告。 但是刹车继续增长。 事实证明,该机器人在并发请求的数量方面开始违反Bot API的限制。 首先,我成功地减少并优化了自动程序以减少该数量。 但是,随着游戏向大众传播,这一点变得显而易见:该机器人很快就会达到这个极限,没有任何优化措施对我有帮助。 然后决定编写支持Telegram的请求,请求增加专门针对我的机器人的限制。 令我大吃一惊的是,他们在第二天回答了这个问题,尽管没有设定新的门槛,但限制有所增加。 此外,他们还告诉我,漫游器会限制特定类型的请求-所谓的回调。 内联按钮。 这是电报中的键盘,显示在特定消息下。 对于文本请求(包括带有普通按钮的请求),该限制要高得多,并且服务器响应的时间也没有限制为15秒。 问题在于游戏界面的70%是建立在嵌入式按钮上的。 我必须完全处理它,才能摆脱这种邪恶,如此方便和美丽的邪恶。

该项目遇到的下一个问题已经存在于我的开发环境和代码中。 具体来说,在Python 3中以及它如何与线程一起使用。 Python 3中的每个新线程都是与环境变量一起创建的,占用了大量内存。 游戏中充满了计时器(2分钟即可在位置之间切换,等待战斗等),然后在单独的流中启动它们会造成内存泄漏。 随着在线游戏的发展,泄漏已达到某种程度的疯狂,吞噬了所有可能的RAM并增加了SSD服务器的剩余内存。 当然,通过创建在每种类型的一个线程中处理的计时器队列解决了该问题。

文字游戏中的视觉部分


与Telegram中其他类似游戏相比,Wasteland Wars的主要特征之一是视觉部分的引入。 角色的交互式化身已添加到游戏中,并且视觉显示了游戏中每个设备的物品。 就像游戏平台上的大型RPG一样,玩家可以穿着不同的盔甲穿着自己的角色,给他使用不同的武器,然后在视觉上看到所有变化。 过了一会儿,我提出了这个想法,现在当另一个玩家在游戏中相遇时,他的化身也会显示出来-这样一来,就可能不知道敌人的抽水,以评估他的外表危险。 除了装备外,“面具”还显示在化身上-可以购买捐赠,它们对玩家没有任何好处,但是会改变他在化身中的外观。 此外,完整的交互式地图出现在游戏中。 找到任何位置后,它将被添加到地图上的播放器中。

所有图像均以相当低的分辨率显示,足以理解其内容。 这是由于以下事实:每个玩家都从许多不同的元素收集化身和地图,并且由于大量同时请求,它们的高分辨率组装会显着增加游戏服务器的负载。

项目发展计划


目前,该游戏已被复制到Go中-事实证明,这种语言更适合于此类项目的开发。 在Go中拥有自己的Web服务器及其速度使得我可以开始为项目创建自己的API,以便将其与Telegram中的一个平台解除绑定。 该API将允许您接收和处理来自任何客户端的请求,并且所有逻辑将仅在服务器上进行处理。

因此,为任何平台开发客户端都将像客户端本身一样简单,这将避免Telegram的许多局限性,阻止它的困难,并吸引游戏的大量新用户。

Source: https://habr.com/ru/post/zh-CN412805/


All Articles