#184 Factorio五岁了
从第一次版本提交到今天,Factorio已经走过了整整五年。你可能不知道,第一个版本是用java编写的,在做了12天后,我(kovarex)才发现用java不是一个好主意,转而用C++开发。
作为一个小小的庆祝活动,我提供了0.1版本的Factorio pre-alpha。
0.1版本链接:
http://www.kovarex.com/download/Factorio-prealpha9-campaigns1RE.zip这是一个很好的纪念,可以看到现在的游戏在各个方面的全面进步。
控件是繁琐的,图形很有喜感还有很多小bug,而GUI(用户图形界面)让人望而生畏。
这个战役有四个级别,其中最后一个是相当具有挑战性的防御任务。
还有两个存档和Factorio有史以来建造的第一个工厂。
输入操作权限系统(Rseding)
在0.14中对多人游戏的优化,使进行开放的多人游戏已经没什么问题了。但这也带来了一个新问题,因为没办法保护自己免受那些以破坏捣乱为乐趣的人的行为。为了解决这个问题,我为0.15添加了三项新功能:
1. 白名单支持
2 禁止队友伤害功能
3. 输入操作权限系统
Factorio通过玩家的“动作输入”系统处理所有的玩家动作和交互。 动作输入告诉游戏玩家想要做什么,他在哪里和按了什么键,基本上所有的游戏状态交互都是用输入操作完成的。这使现在可以通过权限系统来控制那些输入操作,通过限制他们可以执行的输入操作,就可以比较容易地将玩家的行为分离成可以做的和不能做的。
允许服务器管理员为该组中的每个人定义允许/禁止的操作。不过您也有可以拒绝自己编辑权限的自由(在确认后),如果由于某种原因你想要这样做的话。
服务器控制台(还有RCON——服务器创建者权限)可以无限制地访问编辑权限。所以,如果你锁定了自己(我不建议你这样做),你可以随时获取权限。
此外,权限也可以通过Lua的API进行修改,因为合乎逻辑的方法应该是用一些自动化系统在公共服务器上慢慢地给予一些玩家的权限,这是我们下一个要做的。
Lua API会对编辑权限进行检查,因此能访问控制台的玩家如果没有所需的权限,并不能自己授予权限。
铁路建筑优化(Rseding)
总是会有玩家几乎是完全围绕火车来搞个存档玩,并在运行时遇到同一个性能问题:当你的火车过多时,铁路相关实体的建设和拆除的耗时开始变得很长。我已经花了一段时间去了解性能问题,但铁路系统是我为数不多没有经验的几个领域之一(从在编程的角度了解整个轨道系统上来看)。
在我去布拉格期间,我可以借此机会,从团队的其他成员那里获取有关铁路系统的信息。我和hanziQ一起工作几天,最终找到了一些解决方法。
在0.14和以前,铁路系统是如何工作:
● 建设任何轨道->如果路径无效,要求所有列车重新计算路径
● 建设任何轨道->如果路径无效,要求所有列车重新计算路径
● 建设一个车站 -> .同上
● 拆除一个车站 -> .同上
● 与火车轨道相关的任何事情->同上
显然这让性能并不是那么好。但我不是从解决这个明显的问题开着手,我利用这样一个特点,即建立任何轨道将导致每个火车重新路径。我改进了列车的逻辑,以确定它们是否需要找到新的路径,并优化了路径查找的代码,最终的效果如何还要进行检测。在此之后,这是需要建立一系列条件的问题,当火车有什么变化时才通知火车,不同的情况都要进行考虑。
解决方法有些很简单:当火车站被拆除时,只有目前开往到这个停靠点的火车才会受到影响。其他的复杂一点:当轨道被拆除时,除非有信号,火车站或连接到对面的两个或多个轨道存在,否则不会将它的损坏告知其他设施。最终的结果是,在0.15对建设和管理铁路系统中的任何东西,对性能的影响几乎微乎其微了。