
在较早的文章中,我们介绍了用来帮助我们建立Tau站的经济交换系统。 进一步的出版物解释了它如何帮助我们编写简洁的代码并简化战斗代码。 在此技术博客文章中,我们更详细地介绍了经济交换系统。
我们的经济交换体系主要是声明性的,宣布交换步骤的顺序对结果至关重要。 除了订购外,我们还可以用“行为”标记交换步骤,从而进一步修改条件。 此示例代码来自废墟中的“搜索可回收物品”:
子清理($ self){
我的$库存= $自我->库存;
我的$ station_area = $ self-> station_area;
我的$ key ='找到的项目';
我的$ focus_cost = config(
qw /地区废墟scavenge_cost_focus /);
我的$ stamina_cost = config(
qw /地区废墟scavenge_cost_stamina /);
我的$ exchange = $ self-> new_exchange(
slug =>'清除',
脚步(
断言(
位置($ self => can_scavenge => $ station_area)
),
断言(
统计资料
$ self => minimum_required => {
curr_stamina => $ stamina_cost,
焦点=> $ focus_cost,
}
)
),
位置(
$ self =>清除=> {
station_area => $ station_area,
键=> $ key,
}
),
总是(
统计资料
$ self =>删除=>
{curr_stamina => $ stamina_cost}
)
),
统计资料
$ self =>删除=> {focus => $ focus_cost}
),
库存(
$库存=> add_item =>
{item => $ key,new_key =>'found'}
),
事件(
$ self =>存储=> {
event_type =>'找到',
藏匿=> {item => $ key}
}
),
),
);
返回$ exchange-> attempt;
}
暂时忽略行为,我们可以看到逻辑基本上是:
- 角色可以在这个车站附近进行扫荡吗?
- 角色是否具有最低的体力和专注力?
- 角色尝试捡拾物品。
- 降低角色的耐力。
- 降低角色的注意力。
- 将项目添加到库存。
- 存储“查找”游戏事件。
如前所述,我们声明步骤的顺序很重要。 默认情况下,如果单个步骤失败,那么将跳过所有后续步骤。 我们需要更多的灵活性,这才是行为的根源。
为了控制执行哪些步骤,我们可以添加称为“行为”的其他条件。 这些行为会改变步骤流程:
- ASSERT —如果此步骤失败,则不要由于任何原因调用任何其他步骤。
- 始终—始终执行此步骤(除非以前ASSERT失败)。
- 失败—如果任何先前的步骤失败(除非以前ASSERT失败),请运行此步骤。
应用这些行为,我们可以看到逻辑更加复杂:
- 如果角色无法在该车站区域进行扫荡,则中止。
- 如果角色没有所需的最低耐力和专注力,则中止。
- 角色尝试捡拾物品。
- 始终降低角色的耐力。
- 如果玩家发现了一些东西:
- 减少角色的注意力
- 将项目添加到库存
- 存储“查找”游戏事件
行为使我们能够完善经济交流中的逻辑,同时保持其可读性和简洁性。 行为还显示了为什么订购很重要,以及我们如何利用订购对我们有利。
最初于 2018 年4月20日 发布在 blog.taustation.space 上。