任务系统

MMORPG的任务系统的设计。以下是需要达到的几个设计目标:

  1. 任务逻辑与程序逻辑完全脱离;

  2. 服务器端程序和客户端程序提供有限的功能之后,可以由脚本程序员完成任务编写;

  3. 必须方便任务的更新。

  当然,任务系统的具体实现受策划案的影响很大,我这里只是空想的一个一般的实现方案:

  <场景编辑>:

  场景数据文件和任务相关的主要是NPC和调查触发器(例如调查一个石碑)。当玩家与NPC谈话,或者调查某个物品时,需要开启某个特定的任务。某个对象可以开启哪些任务,以及开启任务的条件需要事先编辑到场景数据文件中。任务条件也可以写入任务脚本文件中。

  <服务器端>:

  1. 每个角色身上保存(最多)N个任务体(WOW是20个),任务体应该包括任务名称或编号,以及几个任务变量(供任务脚本使用,个数依策划而定,但不可太多);

  2. 每个任务存储一个脚本文件,当游戏中特定的事件发生时,首先应该查询场景数据,看是否开启一个新的任务,然后逐个通知现有任务的脚本,每个任务的脚本来执行各自独立的任务逻辑,例如有某个任务脚本文件为Quest_001.script如下:

[AppleScript]  纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
OnTalkNpc ( string npcid )
 
{
 
if ( npcid = = “张三” )
 
{
 
if ( GetQuestVar ( 0 ) > = 10 ) / / 杀够了
 
{
 
ShowDlg ( “你这么快就杀了 10 只老虎?很厉害!” ) ;
 
IncPlayExp ( 1250 ) ; / / 经验奖励
 
}
 
else
 
ShowDlg ( “你好啊!” ) ; / / 向客户端发送命令,显示对话框
 
}
 
}
 
OnKillMonster ( int monsterID )
 
{
 
if ( monsterID = = 1000123 ) / / 是任务指定的怪物
 
{
 
IncQuestVar ( 0 ) ; / / 修改任务变量
 
}
 
}


  3. 因为大部分任务是只能执行一次的,所以服务器还需要记录此角色完成了哪些任务。

  <客户端>:

  可以查询视野中对象可能开启哪些任务,玩家是否满足条件来给出一些提示,例如头顶放一个叹号;

  当玩家与NPC对话或者调查某个物品时,发送通知给服务器;

  接收服务器的消息,更新任务显示信息。

  以一个典型的任务为例:玩家与张三谈话触发任务,杀十只老虎,回来交任务可以得到1250点经验。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值