mud_sanc 板


LINE

所谓的任务物件,例如 n000 这个任务,其任务物件假设也 叫 n000,基本说明如下.. 一、每一个任务物件都会 inherit quest_d.c 二、每一个任务物件都有宣告一个 mapping quest_data,   但依据我的写法,你并不需要去知道其结构如何,只要   知道读取各项 key 值的方法(函数)即可。 三、每一个任务物件还有宣告 void create(),这代表这个   任务物件是可以暂存东西用的,例如.. n000->set("tmp_data/"+ppl->query("name"), bla bla...); 比方说我们有需要暂存一些东西时就可以这样做,在该   物件 reborn 或是系统 shutdown 後其值就会消失。 ==================================================== 因此关键在 quest_d.c,这篇其实就是在讲这个。 int check_nonseq(string names,string qq,int s,object ob); 这个函数的主要用途是做 nonseq 的相关判断,其关键参数 就是 s(names 已把 qq 这个任务解到第几步骤) 1.它判断到该任务有 nonseq 时,会自动在玩家的任务资料 上新增 quest_temp,使用 quest query 指令可以看到这 个 quest_temp 的结构。 2.nonseq允许设定两组以上。换言之,你可以设定这个任务 的第 a1~b1 步骤是 nonseq、然後第 a2~b2 步也是nonseq ,我没有实测,不过理论上是可行的。不过建议nonseq之  间至少隔一个任务步骤(如 2~5,7~10) 3.这个函数可以传回玩家在 nonseq 里面的未解部份,例如  说当 nonseq=2~7,玩家已解第 2,4,6 步骤时,它就传回 ({3,5,7}) 这个阵列。若玩家把第 2~7 都解过了(不用照  顺序),就传回 ({-7}) 这个值(用负的代表都解过了)。 int check_max_nonseq(int n); 比方 n000 设定 2~7 是 nonseq,它的意思就是玩家解完第 一步骤後,到第 7 步骤为止其顺序是可以随意的。 而比方你已经解到第 5 步骤了,这个函数可以传回 7 这个 值(也就是 nonseq 范围的最大值, 2~7, 那自然是 7) 而如果给定的范围不在 2~7 之间,就传回 0。换言之这个 函数就是用来判断你是不是已经解到了 nonseq 所包含的范 围。 (是的话,就不能要求你必须照顺序来解的意思) int check_test(); 这个函数是判断该任务物件是不是 wiz 测试用任务物件,它 主要是判断 test 这个参数,比方 l003 的 test 就设成 1 ,就代表它是任务物件。 其实 test 只要有设(不管设 0 设 1),它就会判断为测试用 ,这点要特别注意,判断为测试用时它会传 1 回来。 然後底下以 n000 为例,来说明一些简短的函数 // 取得 quest_data.c 这个物件(它会去读特定目录的档案) // 这东西就是用来存取玩家的任务已解/未解资料用的 object get_quest_data_ob(); // 取得 quest_data 这个 mapping 参数, 就是读取所有的 // 任务设定资料的意思, 通常不建议这样做 mapping query_quest_data(); // 传回这个任务物件设定的 keyword。当设定两组以上的 // keyword 时就传回阵列, 例如 n000 的 key 是 // ({"newbie quest","新手任务"}) // 其对映的值是 key mixed query_quest_key(); // 传回这个任务的「前置任务」,这个设定也很重要,可 // 以让 wiz 设定要解哪些任务前,必须先解哪些前置任务 // 其对映的值是 front,比方 front=n001;n002,代表要 // 解 n000 前要先解 n001 及 n002。玩家在 quest n000 // 时自动显示玩家需先解什麽任务。 mixed query_quest_front(); // 传回该任务总共设定了几个步骤,其对映值是 steps。 int query_quest_steps(); // 传回这个任务总共可以被玩家解几次,其对映值是 times. // 有设的话就传回它可被解几次, 没设的话就传回 1(只能解一次) // times 参数在任务有设 repeat 时是无效的(代表可解无限多次) int query_quest_times(); // 传回这个任务有没有设定可解无限多次,其对映值是 repeat。 // 有设的话就传回其设定的值(所以设 0 代表没设),没设传回 0 int query_quest_repeat(); // 这东西跟上面的 check_test 是类似的 int query_quest_test(); // 传回任务的正式名称. n000 是代号, "在新手村生活的第一步" // 就是 title,其对映值是 title。 string query_quest_title(); // 传回任务的作者. 若没有作者就会传回「无名氏」。 // 其对映的参数是 author string query_quest_author(); // 传回该任务的 date 标记。它可以当成「需重置的标记」,例 // 如说该任务在 2012/04/25 开放玩家解,但是 04/26 时你发现 // 该任务必须更动,且更动後玩家必须重解时,就更动 date 这 // 个标记,例如改成 2012/04/26,这样玩家就必须重解该任务。 // 换言之这个 date 不一定只能设成日期格式。 string query_quest_date(); // 传回该任务第 s 步骤的对映 npc 或物件,例如 n000 这个任 // 务的第 1 步骤是找 musi 对话,这时就传回 musi 的完整路径 // 档名。其对映值就是 stepX_npc,X 代表第几步骤。 string query_quest_npc(int s); // 传回该任务第 s 步骤的相关讯息 // 其对映值就是 stepX_msg,X 代表第几步骤。 mixed query_quest_msg(int s); // 这个设定的用意是,比方某任务设定最多可解三次, // 你可以设定解到第 3 次时显示不同的讯息跟领取不同 // 的报酬之类的, 这个函数主要是读取讯息 mixed query_time_msg(int s,int times); void show_quest(object quest_ob,string qq); void shows_quest(object quest_ob,string qq); 两种不同的任务资料显示格式,shows 显示的是原始资料 ,wiz 可透过 quest shows 去观看原始设定,然後再对照 原始脚本,就可以知道脚本跟设定的差异。 show 则是显示编译过的资料。 string query_quest_chat_npc(int s); string query_quest_chat_msg(int s); 这个函数的对映参数是 chatX_npc 及 chatX_msg,它的设 定意义是,比方某 npc 没有在某个任务的 n 个任务里头 ,但是你觉得玩家有可能会去 quest 他时,就可以把他设 进 chatX_npc 里头,任务系统会根据玩家目前已经解到第 几步骤,去读出该步骤对应的 chat_npc,若玩家在此时去 quest 他,可以得到「额外的讯息=chat_msg」。 例如说,某 npc 可能在任务 a 而不在任务 b,而任务 a 是任务 b 的前置,这时在解任务 b 时,该 npc 就不必然 是「不相干的人」。 check_quest(int s,string f,mixed tmp,mapping quest_temp,object npc) 这个函数就是任务物件的核心函数,本来应该更名的但我 忘记了(只好将错就错,原则上它不应该被叫这名字)。 这个函数是用来处理「当玩家解某个任务到第 n 个步骤 时,下一步该做什麽」。 其详细的内容就自行 more quest_d.c 观看即可。 (大部份我都有在程式内注解了) 其它自订函数的部份 这个我目前是倾向将这些自订函数另外收集起来写成一个 xxx.c 档,然後再让 quest_d.c 去 inherit 它。 (这样 quest_d.c 才不会太过肥大) 自订函数就是用来让任务脚本撰写者可以呼叫用的,它将 一呼叫格式化,例如.. ppl->set("up",500); 简化後就变成 set_v(ppl,"up",500); 格式化的用意在於「方便编译」,例如 set_v 就是设定值 ,ppl 就是玩家,up 就是学习点数,500 就是值,因此而 可以有底下的结果.. > quest show l001 ┌────────────────────────────────┐ │任务奖励: │ │ │ │ 学习点数 500 点。 │ └────────────────────────────────┘ 格式化的好处就是方便编译,不过这并不是编译的唯一手段 LAechan --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.81.173.167 ※ 编辑: laechan 来自: 111.81.173.167 (04/26 13:44)
1F:推 hlead :意思是无限多次解时要写times=repeat## ?.... 04/26 18:56
2F:→ laechan :repeat=1## (此时似乎就无视time) 04/27 01:36
3F:→ hlead :soga.. 04/27 06:57







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP