mud_sanc 板


LINE

首先是任务房的部份: 参考标的: /d/map/lodoos/room/que_room.c inherit /std/shop/que_room.c (QUEROOM) 房间设定: set("shop_name","Lodoos"); // 所属区域,建立LIST专用,必设。 /std/shop/que_room.c =================================================== #define MAX_QUEST 15 // 最大任务数量 #define MAX_NUM 3 // 每人可接取的最大任务量 #define LAST_POSITION 66 // 定位元 #define QUEST_PATH "/open/norr_data/quest/" #include <daemons.h> #include <config.h> inherit "/std/shop/quest_base_room.c"; /std/shop/quest_base_room.c =================================================== // a为杀怪类、b为寻物类。 static mapping KILL_QUESTS=([ // -------------------杀---怪---类---型------------------- "a001":([ "name":"斩杀在飞禽谷中的鸟兽", "type":"杀怪", "reward":(["record_data/newbie_money":100000, "ethic" :500, "up" :800, "exp" :250000,]), "mob":(["/d/ppl/word/bird/mob/bird01":35, "/d/ppl/word/bird/mob/bird02":20,]), ]), . . // -------------------寻---物---类---型------------------- "b001":([ "name":"寻找遗失的小镜子", "type":"寻物", "reward":(["record_data/newbie_money":100000, "up" :1500, "exp" :350000,]), "obj":(["/d/ppl/ina/moon/obj/mirror":1,]), ]), . . 我预设全 sanc 的任务房都是同一继承样本,同一设定方式,即 不管是罗德斯的任务房还是菲里德的任务房,所能观看、接取的 任务都是一样的,全部都长一样。 而其任务的增减则一律透过修改 /std/shop/quest_base_room.c 的资料档来完成,这个我最近会完成修改,让其 mapping 宣告的 型式改成 save/restore 的资料存取方式,方便後面的人对其做 增删改的动作。 ==== 分隔线 ==== 那因为任务房可以接 打怪 及 寻物 两种任务,依照我不靠谱的 印象,我确实有对 a 及 b 开头做过分类。因接取任务指令是写 在 /std/shop/que_room.c 因此看这个即可 quest_num = sizeof( ppl->query_temp("obj_record") )+ sizeof( ppl->query_temp("mob_record") ); 以上为 ppl 使用的 temp 栏位。 100% 100% 100% > receive a005 你成功地接取了这项任务,请加油! 100% 100% 100% > receive b001 你成功地接取了这项任务,请加油! > quest demo  ─╪☆ 任 务 状 况 表 ☆╪─   ---------------------------------------------------------------------- 杀怪任务: 『斩杀在狮子山深处的狮子王(a005)』  一对白狮 ( 0 / 5 ) 『斩杀在狮子山深处的狮子王(a005)』  狮子王-辛巴 ( 0 / 1 ) 寻物任务: 『寻找遗失的小镜子(b001)』  真实之镜 ( 0 / 1 ) ---------------------------------------------------------------------- 玩家身上的 temp_data 资料如下 mob_record : ([ "a005" : ([ "/d/ppl/fmf/lion/mob/white" : "##一对白狮##0/5", "/d/ppl/fmf/lion/mob/king" : "##狮子王-辛巴##0/1", "#name" : "斩杀在狮子山深处的狮子王" ]) ]) 跟 a005 资料的对照 "a005":([ "name":"斩杀在狮子山深处的狮子王", "type":"杀怪", "reward":(["record_data/newbie_money":100000, "ethic" :1200, "up" :800, "exp" :250000,]), "mob":(["/d/ppl/fmf/lion/mob/white":5, "/d/ppl/fmf/lion/mob/king" :1,]), ]), 所以 #name 取自 a005 资料,type 决定 mob_record 或 obj_record, 要杀的怪物的资料取自 mob,名字取自 mob->query("chi_name")。 obj_record : ([ "b001" : ([ "/d/ppl/ina/moon/obj/mirror" : "##真实之镜##0/1", "#name" : "寻找遗失的小镜子" ]) ]) 与 b001 资料的对照 "b001":([ "name":"寻找遗失的小镜子", "type":"寻物", "reward":(["record_data/newbie_money":100000, "up" :1500, "exp" :350000,]), "obj":(["/d/ppl/ina/moon/obj/mirror":1,]), ]), 与上面类似,type 决定类型,以及读取的标的。 switch(types) // 依照任务类型去分类 { case "杀怪": types="mob_record"; types2="mob"; break; case "寻物": types="obj_record"; types2="obj"; break; } 所以 types 不是 mob_record 就是 obj_record if(questing(types,"check",str,({ppl})) > 0) return notify_fail(HIR"你已经接取这项任务了唷!\n"NOR); 即 questing 已写好底下两个东西: questing("mob_record",要做啥,任务标记,({参数群})) questing("obj_record",要做啥,任务标记,({参数群})) 接 check 的情况,参数群[0] 即欲 check 的玩家,>0 就是已接取 了这项任务,即 if(!undefinedp(ppl->query_temp("mob_record/任务标记"))) if(!undefinedp(ppl->query_temp("obj_record/任务标记"))) 设定的情况: tmps=({ppl,quests[str]["name"]}); tmp_keys=keys(quests[str][types2]); // 读出所有要杀的mob。 foreach(tmp in tmp_keys) tmps+=({tmp,quests[str][types2][tmp]}); questing(types,"set",str,tmps); 接 set 的情况,参数群tmps=({要设定的玩家,要设定的任务名字, 要杀的怪物档名1,只数1, 要杀的怪物档名2,只数2, . . }); 或是 ({要设定的玩家,要设定的任务名字, 要取得的物品档名1,数量1, 要取得的物品档名2,数量2, . . }); 这样就可以在一般任务中增加临时的 杀怪 or 寻物 任务。 判断 杀怪 or 寻物 任务是否已完成: if(questing(types,"check",str,({ppl})) < 1) return notify_fail(HIR"你还尚未接取这项任务唷!\n"NOR); else if(questing(types,"finish",str,({ppl,1})) < 1) return notify_fail(HIR"你任务尚未完成唷!\n"NOR); questing(types,"delete",str,({ppl})); // 完成就删除标记 在 check 的情况,>0 就是接取了任务,<1 就是未接取。 这里需规定临时任务不可使用 a 与 b 开头(即任务店专用开头)。 判断是否完成任务(完成的话会同时执行因为给了 1) 1 代表实际执行(但会先确定是完成) if(questing(types,"finish",str,({ppl,1})) < 1) finish 的情况,参数群内的 1 意义为何不明,我刚查了一下, 在 mob_record 的判断上应该没有给 1 的必要,obj_record 才 会用到: if(sizeof(vars)>1 && vars[1]==1) { n=sizeof(qq2); for(m=0;m<n;m++) { if(stringp(qq2[m])) { x=strsrch(qq2[m],"=="); ob->vobjs("add",qq2[m][0..x-1],-atoi(qq2[m][x+2..strlen(qq2[m])-1])); } else { tmp_ob=qq2[m]; tmp_ob->remove(); } } } return 1; } return 0; break; 从上面可知,物品搜集任务也支援「虚拟物品」。那我知道给 1 的 原因了,它的回报分为两部份,第二部份实际扣除物品数量的部份, 唯有给 1 才会真正执行扣除。 这部份要多测试几次才行。 删除任务的部份 questing(types,"delete",str,({ppl})); // 完成就删除标记 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.126.145.135 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1666063411.A.46F.html ※ 编辑: laechan (59.126.145.135 台湾), 10/18/2022 17:20:21
1F:→ laechan : 任务房因为会随机跑出任务,我应该会设定一两个可以 10/18 17:22
2F:→ laechan : 拿到挪布币或挪布币兑现券的任务,随机跑出时就能接 10/18 17:22
3F:→ laechan : 任务会导向我做的新区域(因为我自己熟这些区域) 10/18 17:23
4F:→ laechan : 挪布币任务的杀怪不只两种怪,寻物不只一种物品 10/18 17:23







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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP