首页/编程/伏路子:高效的使命实施
编程

伏路子:高效的使命实施

2020-09-04T14:22:24 + 02:00

良好的使命框架的主要特征。

每场比赛都生活在游戏中的“待办事项”中死亡。如果某些地方的球员有没有什么可乐趣的事情,他们可能更容易放弃比赛。即使有更多的内容,玩家还没有发现。因此,在任何时候都有很多良好的良好的任务和活动,这是至关重要的。即使在像渔船这样的沙箱游戏中,我们也实施了超过45个任务和活动,让玩家觉得总是有事要做的。

这些任务中的一些有几乎是教程的性格,旨在向玩家解释游戏机制。其他故事是相关的,为玩家提供了进展。和最后一个侧面任务。这些迷你故事和分配旨在让玩家忙碌的作用尚未准备好进步。

Avorion中的任务是连接到玩家的.LLU脚本。该引擎提供了若干入口点函数,如initialize(),更新(),secure()和restore()函数,以命名少数,但这些函数保持一般。

我们的前几个任务很难编码,只有最小的图书馆功能。每一个新的任务都是完全从头开始的。在所有公平中,代码质量本身随着每次迭代而改善,使得更新的任务更加强大,更好地表现。但随着越来越多的任务和活动实施,显而易见的是,一个集中式图书馆是必要的。在我们的早期实验的阶段,自我书面库只能处理接受和完成任务的最常见的行为,保存所有必要的数据并提供自动更新保存数据的更新功能。

特派团框架提供了许多舒适特征和自动节省任务数据。

很快就明确表示大多数任务有一些共同点:

  • 必须动态更新的描述并包含播放器所需的所有信息。例如,任务位置,对任务是什么以及最重要的说明:玩家可以用来跟踪任务的名称。
  • 服务器和客户端之间的同步。 vorion基于服务器 - 客户端模型。在一个非常粗略的抽象中:服务器可以保存和更新所有技术数据,例如,在玩家是的任务阶段。客户确实UI相关的一切,例如,在他的使命概述中显示球员概述了以下任务的下一步。每次玩家完成任务步骤时,都必须同步任务数据。显而易见的是,这种同步应该自动发生以降低误差潜力。
  • 使命发展的结构。通常情况下,任务的初始工作阶段是确定的依赖数据。这包括特派团位置,特别是如果任务要求玩家前往目的地并初始化必须产生的任何NPC。在初始阶段之后,通常存在要遵循的步骤列表。玩家必须完成每个步骤进行任务继续前进。如果最后一步完成,则会完成任务。

考虑到这一点,我们开始实施一个能够处理上述所有产品的框架,并在我们所想到的舒适功能中加入。框架的起点是我们在每次开始实施新任务时都会重复自己的代码。任务框架的关键点是:

  • 职能接受,完成或放弃任务
  • 跟踪,保存和同步播放器进度
  • 相结构(即状态机)
  • 动态描述
  • 舒适特色
  • 可变的任务


接受,完成或放弃任务的功能

每次使命自然都必须有一个开始和结束,并且特派团框架必须为此提供功能。

在伏路中有两种类型的任务。第一个是经典的故事或教程任务或自动给予播放器的随机事件。对于这些,我们需要一个名称,描述(对于任务概述UI),并且播放器必须接下来的步骤。

第二个是留言板任务,球员必须积极接受。那些是一个小小的棘手,因为我们需要在使命实际添加到播放器(因此初始化)之前了解事物。每个站都有一个留言板,提供各种各样的,有时随机生成的任务。在这里,我们需要特派团的名字,简要描述该做什么,难度和奖励。要解决这个问题并保持集中和清洁,任务可以通过框架定义公告。然后,此公告将自动用于显示留言板上的任务,并且在播放器接受它后,还可以使用必要的数据初始化任务。

有多种方法可以结束如何结束。第一个选择:一切都完美无缺。播放器完全按照我们计划的完全完成了整个任务。对于这些案件,任务可以在他们看到适合时定义奖励并完成使命。播放器收到奖励,并显示出“完成任务”通知。第二个选项是:玩家失败了使命。在这种情况下,任务框架提供了失败任务的功能,例如从NPC或“任务失败”通知中的投诉。使命开发人员甚至可以在这里增加惩罚。

但有时它不如那么简单。玩家可能已经完成了所有必要的步骤来完成使命,但仍然在某种程度上已经失败了。例如,我们实施了名为“转移船”的途径的任务。在其中,播放器被要求将船舶从造船厂带到目标位置。在途中,玩家可能会遇到海盗并受到伤害。当播放器到达时,船舶扫描损坏。任务步骤成功完成,但承包商如果船舶损坏太多,承包商会真正奖励玩家吗?不,所以任务框架必须提供在不提供奖励的情况下实现特派团的可能性,只有给玩家的部分奖励。如果玩家失败使命是一个重要的使命,这应该是相同的惩罚。

另一点源于我们的沙箱方法。 Avorion是一种空间沙箱,承诺玩家拥有充分的自由。因此,我们觉得它至关重要,在任何时候,玩家都可以决定不做一些事情。每次使命都可以随时抛弃。当然,放弃意味着必须删除任务和所有相关数据,并且玩家不应该获得奖励,而且没有惩罚(大多数时间)。该框架提供了特定的特定功能,就如何对消除使命的作出反应,具体取决于它被遗弃的任务中的一点。

任务框架本质上是一种经典状态机。

跟踪,保存和同步任务数据
跟踪和保存玩家进度是任务框架重要的另一个伟大示例。如果您有一个集中式库来处理自动处理,开发人员不再需要记住,产生清洁和更容易读取代码。此外,我们的框架能够在客户端和服务器之间同步任务数据,并在任务更新时执行此操作。这个关键点证明是对我们的使命发展影响最大的一个。由于vorion的发动机的服务器 - 客户端结构,客户端或服务器上有哪些数据的差异有时很难理解。特别是新的团队成员最初曾经与这斗争。随着框架照顾同步和保存数据,即使是新团队成员也能在很短的时间内生产强大的任务。

相结构
当我们分析了我们的早期任务时,大多数任务都可以遵循一步一步的操作,在揭示下一步之前必须完成一步。在我们的使命框架中,我们通过提供一个相位结构来模拟,这实际上是经典的状态机。该框架自动初始化任务的第一阶段,然后继续跟踪播放器进度。如果播放器完成阶段和两个任务的阶段,然后结束会话,框架将在下次登录时将所有数据恢复到那个点,并且玩家可以无缝地继续任务。

在使用相位结构实施前几个任务后,我们发现它有两个主要优点。第一个优点在于相位结构本身。如果您可以通过使用框架函数启动下一阶段时,可以跳转到任意阶段。这使得非线性任务可能是可能的,而无需在框架中更改。

第二个优点是,执行任务的强制结构也导致了更好的代码结构。尽管多个人在几个任务上工作,但书面代码自然地遵循了相同的编码样式。这是verorion这样的大项目的理想选择,因为它将保持对未来更容易的代码,并且另外允许新的团队成员更快地接受项目的编码风格。

动态描述
上述相结构的另一个非常重要的副作用是具有动态任务描述的能力。现在我们始终知道在哪个使命阶段是玩家,我们可以相应地更新描述。如果玩家失败了一个步骤并且重置为任务的早期阶段,则可以很容易地重置描述。如果描述依赖于在某个阶段确定的数据,我们只能在达到任务的阶段时添加该部分描述。

屏幕上的文本通知给出即时反馈,并为玩家创造成就的感觉。

舒适特色
当我们在编写新任务时必须重复代码时,我们的使命框架从情境中学到了什么。我们收集了所有这些实例并将其包含在框架中。我想在接下来的几段中突出一些其中一些。

我们发现至关重要的一个主要舒适功能是回调注册的简单工具。

使命的进展通常取决于发生的事件。例如,到达某个位置,对目标或船舶破坏造成损害。通过为框架中的这些事件提供预定义的工具,我们将样板代码移动到框架代码中处理所有这些组织物品,并保留了任务代码本身清洁。

类似于回调函数,我们发现在框架中包含检查播放器的周围环境非常有用。这些检查包括无论是敌人,站,小行星还是其他物体都接近玩家。如果一组船舶被销毁或者整个派系从一个部门征连,我们还增加了基本检查。该框架提供易于使用的功能,以提供在这些情况下运行的代码。

此外,我们添加了一些非常基本的触发器,程序员只需要提供定期检查的条件,并提供某些代码应该在满足条件时执行。关于这些触发器的重要事项(与一个简单的“语句相比,如果”语句)是您可以在触发时配置它们是否应该被禁用–即使在游戏中重新启动–或者如果它们应该重新评估每个蜱。
我想提到的最后一个舒适功能有点突出敌人的遭遇随机性。在伏路子中,大量子系统互相独立地工作,有时可以相互干扰。一个这样的例子将是在任务期间攻击的海盗。由于这些攻击可以通过杀死重要的NPC或销毁对象来极大地破坏任务,因此使命框架使我们能够轻松地实现功能,以将某些位置或NPC标记为“无随机遇到”,以防止随机攻击。这与将单个标志设置为“true”一样简单,并确保任务将为每个玩家顺利运行。

可变的任务
厌猎是一个沙箱,我们认为沙箱中的一些最好的体验是由社区内容创建的。因此,我们的使命框架和我们所有的任务都是在Lua编写的,而我们的游戏引擎是在C ++中。 .LUA文件通过Steam安装公开分发,可以由任何人访问和修改。与Mods的蒸汽研讨会的整合一起,我们希望激励我们的社区创造自己的任务!

他们需要的所有工具,以及广泛的文件都是我们任务框架的一部分,因此可以随意使用。

结论
我希望我能激励你们。如果您正在计划大型游戏项目,您可能希望考虑这样的使命框架。在没有框架的开始,编写一个使命,然后确保它实际上工作并强大地释放,我们带了大约一周。现在,在特派团框架的帮助下以及大部分的样板代码已经照顾,首次执行任务的实施可以在一天内完成。作为额外的优势,新的团队成员或实习生可以使用该框架来设计和实施短期任务,而无需了解渠道内部结构的每一个细节。


MargaretaBüche
社区与发展

玛格丽塔有很多角色:她照顾社区,发展,是我们勤奋的团队助理,并负责各种各样的事情,有时会出现在正常发展周期之外,如会议。她还负责社区必须告诉我们的所有其他事情。

关于作者: 4. 9月20日
类别:
去顶级