任务系统总览
石器时代没有任务日志窗口。所有任务都由一种叫「事件 NPC」(服务端类型 changeevent)的人物驱动:你身上带着什么、等级多少、以前做过什么,决定了 NPC 这次对你说什么、给你什么。看懂这套规则以后,NPC 的反应基本都能预判,也能少走很多冤枉路。
本文先讲机制,再给几条主要原版任务线的完整步骤。
一、任务旗标:完成与进行中
每个角色身上有两组旗标,各 192 位(编号 0~191):
| 旗标 | 意思 | 什么时候设上 | 什么时候清掉 |
|---|---|---|---|
| 完成旗标(ENDEV) | 这个任务已经做完 | 交差时 NPC 的 EndSetFlg |
只有 CleanFlg(「重置」类 NPC)会清 |
| 进行中旗标(NOWEV) | 接了任务、还没交 | 接任务(REQUEST)时,或某些剧情对话(MESSAGE)时 | 交差(EndSetFlg)时一并清掉;放弃任务时也清掉 |
任务编号就是旗标的位号。例如成人礼是 4 号任务:接任务后 NOWEV 4 被设上,交差后 ENDEV 4 被设上、NOWEV 4 被清掉。
出处:
include/char_base.hCHAR_ENDEVENTCHAR_ENDEVENT6、CHAR_NOWEVENTCHAR_NOWEVENT6(_NEWEVENT开启时 6 组 × 32 位);npc/npcutil.cNPC_EventSetFlg/NPC_NowEventSetFlg/NPC_NowEndEventSetFlgCls。
完成任务顺带拿声望
第一次设上某个完成旗标时,服务器会按一张固定表给你加个人声望(家族资料里显示的数值是内部值 ÷ 100)。不在家族里也照加,在家族里还会同步给家族。部分任务的数值:
| 任务编号 | 声望(内部值) | 任务编号 | 声望(内部值) |
|---|---|---|---|
| 1(哈罗山草药) | 15 | 19(哈恩造斧) | 120 |
| 2(弥生与日美子) | 5 | 22(强恩的奖赏) | 60 |
| 4(成人礼) | 10 | 35 | 225 |
| 16 | 120 | 40 | 600 |
| 17(龙之巢穴) | 90 | 71 / 72 | 15000 / 20000 |
表里没有的编号(或填 0 的)不给声望。判断「第一次」的依据只是该旗标位当时是否为 0,所以被 CleanFlg 重置过的任务再次完成会再加一次声望。
出处:
npc/npcutil.cFMAdvTbl[]、AddFMAdv(_PERSONAL_FAME、_FMVER21均开启,CHAR_earnFame不检查家族);NPC_EventSetFlg里的if (!(point & (1 << shift)))。声望另见 家族。
二、事件 NPC 怎么运作
一个事件 NPC 的设定由若干「段」组成,每段以 EventEnd 结尾。你和 NPC 说话时,服务器从第一段往下逐段检查,用第一段条件成立的段来回应;全部不成立就随机说一句闲聊(NomalMainMsg,显示在聊天栏)。
逐段检查时有两个要点:
- 段的
EventNo如果是你已经完成的任务号,整段直接跳过——所以做完的任务不会再接到。EventNo:-1表示与旗标无关,不会被跳过。 - 段里写了
KeyWord的,只有你在 NPC 面前用聊天说出这个词才会成立(2.5 数据里有 54 处,例如「近藏」)。
出处:
npc/npc_exchangeman.cNPC_TypeCheck。
四种段类型
| TYPE | 玩家看到的流程 | 发生的事 |
|---|---|---|
| REQUEST(委托) | 请求窗口(是/否)→ 选「是」→ 感谢窗口 | 给委托道具 / 收东西,设上 NOWEV |
| ACCEPT(交差 / 交换) | 确认窗口(是/否)→ 选「是」→ 感谢窗口 → 按「确定」 | 收东西、给奖励,按 EndSetFlg 设完成旗标,清 NOWEV |
| MESSAGE(剧情) | 一个或几页窗口,或聊天栏一句话 | 可能顺带给道具;EventNo 不是 -1 时设上 NOWEV |
| CLEAN(重置) | 确认窗口(是/否) | 选「是」后按 CleanFlg 清掉旗标,任务可以重做 |
几个流程细节:
- ACCEPT 要按完最后一页的「确定」才算交差。 版本开启了
_NEWEVENT,ACCEPT 的感谢词窗口按「确定」那一刻才收道具、发奖励、设旗标。中途关窗口什么都不会发生。 - 重复和接过任务的 NPC 说话:REQUEST 段在你已有 NOWEV 时会弹
StopMsg(「想放弃吗?」)。选「是」= 放弃任务:NPC 会收回当初给的委托道具,进行中旗标被清掉,魅力 -1。选「否」只是一句鼓励。 - 背包满:要给你东西时如果空格不够,会弹
ItemFullMsg并中止,什么都不交换。GetItem:编号*15这种一次给 15 个的,就需要 15 个空格。 - 石币:
GetStone会让石币超过上限时弹StoneFullMsg中止;DelStone不够时弹StoneLessMsg。DelStone:LV*40表示收「等级 × 40」石币,窗口里的%8d会显示实际金额。 - 和 NPC 对话的距离:面对面 2 格以内,或者紧贴 1 格。
出处:
npc/npc_exchangeman.cNPC_ExChangeManWindowTalked(CHAR_WINDOWTYPE_WINDOWEVENT_ACCTHANKNEW按 OK 才走NPC_MsgDisp(…, 8))、NPC_MsgDispcase 7(EndStopMsg:收回 + 魅力 -1)、NPC_ItemFullCheck、NPC_EventGetCost。
三、条件(EVENT)怎么读
每段的 EVENT: 写着成立条件:
- 逗号
,表示「或」,&表示「且」。例:NOWEV=1&ITEM!=2401,NOWEV=87&ITEM!=2401= 「接了 1 号任务且没有 2401」或「接了 87 号任务且没有 2401」。 - 比较符:
=、!=、<、>。没有>=,所以「Lv30 以上」写成LV>29。
| 条件 | 含义 | 备注 |
|---|---|---|
LV>n / LV<n / LV=n |
人物等级 | 见下方「怪处」 |
ITEM=id |
道具栏里有这件道具 | 只看道具栏,不看身上穿戴的 |
ITEM!=id |
道具栏里没有这件道具 | 同上 |
ITEM=id*n |
这件道具至少 n 个 | 堆叠按堆叠数算;这种写法连装备栏也算进去 |
ENDEV=n / ENDEV!=n |
n 号任务已完成 / 未完成 | |
NOWEV=n |
n 号任务进行中 | |
SP=n |
你在第 n 号记录点登记过 | 0~3 号是建角时选的出身村:0 萨姆吉尔、1 玛丽娜丝、2 加加、3 卡鲁它那 |
TIME=n |
当前游戏时段 | 0 夜、1 早、2 午、3 傍晚 |
IMAGE=n |
人物外形图号 | |
PET>lv-id*n |
带着 n 只编号 id、等级 > lv 的宠物 | 写成 PETEV… 时只认任务给的「事件宠」 |
reITEM>n |
道具栏空格数 |
PET 条件里的「宠物编号」是宠物图鉴编号(即本站 /pets/ 页的编号),比较符作用于宠物等级。例如猜谜大师任务的 PET=77-12 意思是「身上有一只等级恰好 77 的 金布伊」(详见 小游戏与猜谜塔)。
出处:
npc/npc_exchangeman.cNPC_ExChangeManEventCheck(,与&)、NPC_EventBigSmallCheck、NPC_EventFreeIfCheck、NPC_EventItemCheck(从CHAR_STARTITEMARRAY起)、NPC_EventReduce(从第 0 格起,计ITEM_USEPILENUMS)、NPC_SavePointCheck、NPC_PetLvCheck;char/char_data.cCHAR_getInitElderPosition(出身村 =1 << hometown);include/handletime.hLS_NIGHT~`LS_EVENING`。
原版条件的几个怪处
这些是原版服务端代码的实际行为,网页版也照样复刻:
LV!=n判定是反的:等级恰好等于 n 时才成立。NOWEV!=n永远成立;ITEM<n、ITEM>n永远不成立;ENDEV<n、ENDEV>n只看有没有完成。- 数据里拼错的条件(如
NOEEV、DR、?18542)一律当作不成立。
出处:
NPC_EventLevelCheck/NPC_NOWEventNoCheck/NPC_EventItemCheck中按flg分支的写法;网页版对照见仓库docs/QUEST_COVERAGE.md「原版的怪处」。
四、动作(NPC 给你 / 收你什么)
| 键 | 作用 |
|---|---|
GetItem:a,b*n |
给道具(逗号分隔多件,*n 给 n 个) |
GetRandItem:a,b,c |
从列表里随机给一件 |
DelItem:a,b |
收走道具:写编号不带 * 时,身上这种道具全部收走(含装备栏) |
DelItem:a*n |
见下方「收道具的怪处」 |
GetStone / DelStone |
给 / 收石币 |
GetPet:id / DelPet |
给宠物(逗号分隔 = 随机一只)/ 收宠物 |
EndSetFlg:n,m |
设完成旗标(同时清本任务的进行中旗标) |
CleanFlg:n |
清掉旗标 |
Charm:n |
魅力 +n(交差时,魅力未满 100 才加) |
NpcWarp |
NPC 自己换位置(轮流出现在列表里的几处),不是传送你 |
收道具的怪处:DelItem:编号*数量 只有段里同时写了 Break(道具「坏掉」)时才真的收走;没有 Break 的话原版代码是空分支,一件也不收。这直接影响好几条任务的结果,下面的攻略里会标出来。
出处:
npc/npc_exchangeman.cNPC_EventDelItem(if( breakflg != 1 ){ })、NPC_EventAddItem、NPC_RandItemGet、NPC_EventWarpNpc、NPC_MsgDispcase 8(Charm)。
五、传送员的条件
很多任务地点被「传送员」(npcgen_warpman)把守,它们的条件写法和事件 NPC 类似:
FREE:成立就免费送你过去(FreeMsg);不成立显示PayMsg。MONEY:-1表示条件不成立就不让过;MONEY:n是付 n 石币过去;MONEY:LV*k是付「等级 × k」。- 普通传送员不接待组队,要先解散队伍(
PartyMsg)。 - 传送员能用的条件比事件 NPC 多,例如
EQUIT=id(身上穿着某装备)、GOLD(石币)、TRANS(转生次数)、PARTY(队伍人数)。
出处:
npc/npc_warpman.cNPC_WarpMan_selectWindow、NPC_PARTY_CHAECK;npc/npc_eventaction.cNPC_ActionPassCheck、NPC_ActionFreeIfCheck。
六、小技巧
- 先看有没有 CLEAN 型 NPC。 有「重置」NPC 的任务可以反复做(如樵夫巴尔线),奖励和声望都能再拿。
- 交差前把任务道具放在道具栏,别穿在身上。
ITEM=条件不看装备栏。 - 一次只能拿一种奖励时先想清楚。 比如龙之巢穴三条龙,交给哪一条就只能拿它那件,另外两条随即进入「已完成」对话。
- 任务道具弄丢了先回去找发委托的人。 很多任务都有「弄丢了?再给你一次」的段(如哈恩的壶、巴尔的委托书、守护者的龙之笛)。
- 放弃任务扣魅力。 在 StopMsg 里选「是」会魅力 -1,不想放弃就选「否」。
七、任务线攻略
以下 NPC 坐标均为 (x, y)。道具与奖励说明摘自道具资料。
1. 成人礼(任务 4)
条件:Lv30 以上,单人。奖励:仪之兜(防 +15、敏 -3、全异常状态防止 +3),声望 10。
- 前往 海底通路地下2楼(地图 10202)(31,13) 的「仪的值班者」。等级 ≥ 30 且没有组队,免费传送进仪式之路 地图 10204 (2,6)。等级不足或组队都会被拒绝。
- 入口旁 (14,6) 的「仪式的审判」处接任务(REQUEST,条件
LV>0),设上进行中旗标 4。 - 沿这条路一直走到尽头 (188,13),找「仪式审判的差使」(ACCEPT,条件:任务 4 进行中且身上没有仪的玉)。他一次给你 15 个 仪的玉,需要 15 个空格。
- 带着 15 个仪的玉走回 (14,6) 交给仪式的审判(ACCEPT,条件
ITEM=2417*15)→ 获得仪之兜,任务 4 完成。
注意:
- 这条路上有敌人(地图 10204 设有遇敌)。
- 原版数据写的是
DelItem:2417*15而没有Break,按原版代码仪的玉不会被收走,交差后仍留在包里,可以丢掉腾空间。 - 交差后再和审判说话只会得到「以后也要不断地求进步」的祝福。
出处:
data/npc/jaruga/event/event04_1、event04_2、event.create;data/npc/genout/wpm_10202_31_13(WARP:10204,2,6、FREE:LV>29、MONEY:-1);data/encount.txt第 208 条(地图 10204)。
2. 哈罗山的草药(任务 1)
条件:无。奖励:老爷爷的护身符(魅 -1、全部状态异常耐性 +2),声望 15。
- 塔姆塔姆的民家 (16,15) 的「村庄小姑娘」请你去哈罗山顶拿草药(REQUEST)。
- 前往 森林洞窟山顶 (16,20) 找「咍罗山的医生」。任务进行中且身上没有草药时,他给你 哈罗的香草。他的话有好几页,按「下一页」看完再按确定。
- 回到村庄小姑娘处交出香草(ACCEPT,
DelItem:2401会收走)→ 拿到护身符。
小技巧:香草本身是「吃下去后耐久力回复 100」的回复道具。任务进行中把香草弄丢(或吃掉)了,可以再找医生要。
出处:
data/npc/jaruga/event/event01_1、event01_2。
3. 弥生与日美子(任务 2)
条件:无,起点由出身村决定。奖励:对方送的谢礼,声望 5。
这是一对互相寄东西的朋友,按建角时选的出身村分两个方向:
| 出身村 | 起点 | 送到 | 委托物 | 谢礼 |
|---|---|---|---|---|
| 萨姆吉尔、卡鲁它那(SP=0 / 3) | 萨姆吉尔村 (57,124) 日美子 | 玛丽娜丝渔村 (55,92) 弥生 | 仙尼亚的花 | 不可思议的贝壳 |
| 玛丽娜丝、加加(SP=1 / 2) | 玛丽娜丝渔村 (55,92) 弥生 | 萨姆吉尔村 (57,124) 日美子 | 不可思议的贝壳 | 仙尼亚的花 |
- 在起点 NPC 处接任务,拿到委托物。
- 送到另一位手上(ACCEPT,委托物被收走)→ 拿到谢礼,任务 2 完成。萨姆吉尔在玛丽娜丝的东北方向,中间隔着一片森林。
完成后如果把谢礼弄丢了,回送礼的那位说话,会出现「重置」窗口(CLEAN),选「是」清掉任务 2,可以再做一次。
出处:
data/npc/sainasu/event/event02_1、event02_2、event02.create;char/char_data.celders[](出身村 0~3 = 地图 1006/2006/3006/4006)。
4. 樵夫巴尔与造斧专家哈恩(任务 18、19)
条件:Lv15 以上。奖励:哈恩的斧头(攻 +35 防 -15 敏 -15)、哈恩改造的斧头(攻 +33 防 -10 敏 -10)、伐木打工最高 20000 石币 + 杉的手环(攻 +8 防 +5 敏 -5 魅 -5);任务 19 声望 120。
- 接委托:乌鲁力村 (60,75)「樵夫巴尔」说他的斧头断了(REQUEST,
LV>14)→ 给你 斧头制作依赖书。 - 找哈恩:深入阿鲁姆山的洞窟,到 哈恩的锻冶场 (12,11)「造斧专家哈恩」,带着依赖书说话(REQUEST)→ 拿到空的 哈恩的壶,让你去最下层打水。
- 打水:阿鲁姆山的洞窟地下7楼 (32,29)「看守用水的科巴尔特」把空壶换成装满水的 哈恩的壶。
- 造斧:回哈恩处(ACCEPT,条件:任务 19 进行中、有满水的壶和依赖书)→ 收走壶和依赖书,给你 哈恩的斧头,任务 19 完成。
- 交给巴尔:回乌鲁力村交给巴尔(ACCEPT)→ 拿到 巴尔的推荐书 和 折断的斧头,任务 18 完成。
- 数据写的是
DelItem:2465*1、没有Break,按原版代码哈恩的斧头不会被收走,你可以留着用。
- 数据写的是
- 改造斧头:把折断的斧头拿给哈恩(REQUEST,
ITEM=2484)→ 给你 哈恩改造的斧头。这里同样是DelItem:2484*1不带Break,折断的斧头也会留在你身上。注意身上若还带着哈恩的斧头,哈恩会先触发「这把斧头好用吗?」的对话,先把它放进仓库再来。 - 伐木打工:带推荐书到 加加村 (114,69)「木材商人赛尚」(REQUEST)→ 推荐书换成 采伐许可证。
- 带着采伐许可证在野外打「木」,掉 良质的木材(掉率 70%)。「木」这群敌人只在你持有采伐许可证时才会出现:加鲁卡大陆(地图 200)坐标 (516,238)~(772,452) 一带,占该区遇敌权重的一半。
- 回赛尚处结算(ACCEPT)。他按木材数量从多到少检查,取第一个满足的档:
| 木材数 | 酬劳(石币) | 木材数 | 酬劳(石币) |
|---|---|---|---|
| 14 以上 | 20000 + 杉的手环 | 7 | 5600 |
| 13 | 16000 | 6 | 4800 |
| 12 | 12000 | 5 | 4000 |
| 11 | 10000 | 4 | 3200 |
| 10 | 8000 | 3 | 2400 |
| 9 | 7200 | 2 | 1600 |
| 8 | 6400 | 1 | 400 |
结算时木材(不带 *,全部)和采伐许可证都会被收走,所以超过 14 根没有意义,凑够 14 根就去交。一根都没有时许可证照样被收回。
重做:乌鲁力村 (46,55)「喜欢八卦的年轻人」可以重置任务 18;任务 19 完成后,哈恩本人可以重置任务 19(都是 CLEAN;和哈恩说话时身上别带哈恩的斧头和折断的斧头,否则会先触发前面的段)。重置后整条线可以再跑一遍,再拿推荐书去打工;任务 19 重新完成时声望会再加。
出处:
data/npc/jaruga/event/20501ev1~`20501ev5、20501ev.create;data/enemy.txt「木」(掉 2468,几率 700‰);data/group.txt「木」第 414 组(GROUP_APPEARBYITEMID= 2478);data/encount.txt第 88 条;char/enemy.c(_FIX_ITEMPROB:RAND(0,999) < 掉率`)。
5. 龙之巢穴(任务 17)
条件:守护者本身不限等级,但巢穴里的龙是 Lv45~47 的敌人。奖励:三选一,声望 90。
| 奖励 | 谁给 | 说明 |
|---|---|---|
| 龙之衣 | 疾速龙 | 防 +13 敏 +4 魅 +2,复活的精灵 Lv1 |
| 龙之枪 | 刚气龙 | 攻 +36 防 -14 敏 -14 魅 +2,治愈的精灵 Lv2 |
| 龙之铠 | 钢格龙 | 防 +23 敏 -10 魅 +2,猛毒的精灵 Lv2 |
| 敌人 | 出没楼层 | 遇敌权重 | 掉落 |
|---|---|---|---|
| 疾速之龙 | 4 楼 | 1 / 31 | 疾速的龙的玉(80%) |
| 刚气之龙 | 5 楼 | 1 / 21 | 刚气的龙的玉(80%) |
| 钢格之龙 | 6 楼 | 1 / 21 | 钢格的龙的玉(80%) |
守护者也提醒「龙群可是没那么容易就现身的,耐着性子慢慢地找吧」。
- 集齐三颗龙玉,带着笛子到 龙的巢穴7楼。三条龙分别在:疾速龙 (7,8)、刚气龙 (23,6)、钢格龙 (41,14)。只能选一条交:交差时三颗龙玉和笛子全部收走,任务 17 完成,另外两条龙随即只会说「守护责任就交付给你了」。
笛子弄丢了可以回守护者处再要一支(任务进行中、身上没有笛子时)。
出处:
data/npc/jaruga/event/event17_1406 组(出现需持有 2505);event17_4、event17.create;data/group.txt第 404data/encount.txt第 261263 条;47,掉率 800‰)。data/enemy.txt疾速之龙 / 刚气之龙 / 钢格之龙(Lv45
6. 吉德的女儿(任务 20、21、22)
条件:无,但要深入强恩一族的洞窟 7 楼(山贼的地下城)。奖励:卡娜的木笛(魅 +2 毒 +5 石 -5 眠 +5,复活精灵 Lv2);强恩随机给一件山贼装备;任务 22 声望 60。
- 奇喀喀村 (59,66)「吉德的朋友」凯伊讲述 16 年前的事,给你 开在奇喀喀的花。拿到花之后别再和凯伊对话选「是」:他的下一段是「你不想帮我吗?」,确认后会把花收回去。
- 奇喀喀的村长家 (27,14)「吉德」——带着花说话,接下任务 20(REQUEST,花被收走)。
- 同屋 (28,17)「吉德的儿子」给你 母亲的发饰。
- 前往 强恩一族的洞窟7楼 (68,5) 找首领「强恩」(ACCEPT,任务 20 进行中 + 发饰)→ 任务 20 完成。旁边 (71,7) 强恩的妻子会告诉你女孩的房间在楼上。
- 沙拉的房间 (9,3)「沙拉」:把发饰交给她(REQUEST,发饰被收走,任务 21 进行中)。她决定留下。
- 回强恩处(ACCEPT)→ 从 山贼的羽饰、山贼的手环、山贼的投掷斧头、山贼的爪、山贼的小棍棒 中随机得一件,任务 22 完成。
- 再找沙拉 → 拿到 给双亲的信。
- 回奇喀喀村长家把信交给吉德(ACCEPT)→ 信被收走,获得卡娜的木笛,任务 21 完成。
出处:
data/npc/jaruga/event/event20_1~`event20_6、event20.create`。
八、网页版说明
网页版的事件 NPC、传送员、NPC 敌人都按原版 C 代码逐函数重写,并用差分测试与原版行为对照(包括上文所有「怪处」)。目前已知与原版的少数差异:
- 宠物栏是紧凑排列:原版交出宠物后留下空栏,网页版后面的宠物会前移。
- 原版在没有台词时也会送一个空白窗口,网页版不送。
- 原版连送两个窗口时客户端只剩后一个,网页版直接只送后一个。