MMORPG的任务系统的设计。以下是需要达到的几个设计目标:
1. 任务逻辑与程序逻辑完全脱离;
2. 服务器端程序和客户端程序提供有限的功能之后,可以由脚本程序员完成任务编写;
3. 必须方便任务的更新。
当然,任务系统的具体实现受策划案的影响很大,我这里只是空想的一个一般的实现方案:
<场景编辑>:
场景数据文件和任务相关的主要是NPC和调查触发器(例如调查一个石碑)。当玩家与NPC谈话,或者调查某个物品时,需要开启某个特定的任务。某个对象可以开启哪些任务,以及开启任务的条件需要事先编辑到场景数据文件中。任务条件也可以写入任务脚本文件中。
<服务器端>:
1. 每个角色身上保存(最多)N个任务体(WOW是20个),任务体应该包括任务名称或编号,以及几个任务变量(供任务脚本使用,个数依策划而定,但不可太多);
2. 每个任务存储一个脚本文件,当游戏中特定的事件发生时,首先应该查询场景数据,看是否开启一个新的任务,然后逐个通知现有任务的脚本,每个任务的脚本来执行各自独立的任务逻辑,例如有某个任务脚本文件为Quest_001.script如下:
3. 因为大部分任务是只能执行一次的,所以服务器还需要记录此角色完成了哪些任务。
<客户端>:
可以查询视野中对象可能开启哪些任务,玩家是否满足条件来给出一些提示,例如头顶放一个叹号;
当玩家与NPC对话或者调查某个物品时,发送通知给服务器;
接收服务器的消息,更新任务显示信息。
以一个典型的任务为例:玩家与张三谈话触发任务,杀十只老虎,回来交任务可以得到1250点经验。
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点经验。
