mud_sanc 板


LINE

这是刚刚才产生的做法,我想理论上可能可以。 首先,假设某副本χ有m个房间,其中n个需要做 instance_check, 在χ物件里会宣告一个 int instance_check 函数,比方说我们一进 入某个需要 instance_check 的房间,该房间需做的判断是「怪物全 死光了没」.. int instance_check(string files,object room) { switch(files) { case "084": if(!present("INSTANCE_MOB",room)) tell_room(room,"\n[instance_check] 邪恶黑熊全部被你杀光了。\n"); 那我的意思就是,怪物全死光了之後,在上面加一行 room->set("mob_all_die",1); 再让心跳循环判断有没有 mob_all_die,它包含预设的以及自设的, 自设的就类似底下 int instance_check(string files,object room) { if(room->query("instance_ended")) return 1; switch(files) { case "084": // 怪物没死光时,持续判断怪物是否死光 if(!room->query("mob_all_die")) { if(!present("INSTANCE_MOB",room)) { tell_room(room,"\n[instance_check] 邪恶黑熊全部被你杀光了。\n"); room->set("mob_all_die",1); } } // 当怪物死光时就执行这里 if(room->query("mob_all_die")) { . . room->set or delete(xxx) } // 其它判断 . . } return 1; } 这样做法就很弹性了。然後某些比较麻烦的设定就交给「预设」, 例如 enter_msg (buff_msg) 目前就是采预设做法。 一般常看到的做法则是用 flag 型式,例如上面可改写为 flags=(int)query("instance_flag"); switch(flags) { // 最先判断怪物死光了没 case 0: if(!present("INSTANCE_MOB",room)) room->set("instance_flag",1); break; // 当怪物死光後(flag=1), 对所有玩家做定身 case 1: usr->set("block_command",10); usr->set("block_command_msg","(你要等一下喔!)\n"); room->set("instance_flag",2); room->set("next_times",10+time()); break; // 当所有玩家的定身都结束後(10 秒後), 解除往北路障 case 2: if(time()>room->query("next_times")) { room->delete("cant_go/north"); room->set("instance_flag",3); // 然後如果所有判断都结束也可以加上这一个 room->set("instance_ended",1); } break; } 这样一个旗标栏位+一个辅助判断栏位(next_times)就可以完成 一个副本房间的数阶段判断,连「打死怪物後隔几秒又生出新的 副本怪」理论上也可以用这方法做到,不过最好是呼叫专用函数 ,这也是副本要做的。 这样生怪段落就可以全部交给该函数负责,也就是底下 tmps=instance_mobs[files]; foreach(tmp in tmps) { mob=clone_object(instance_mob_datas[tmp]["files"]); mob->add("id",({"INSTANCE_MOB"})); . . 这些全部都应该函数化。下午会把重点放在这里。 Laechan --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.61.157.53
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1397454668.A.8F1.html 生怪段落已函数化,/std/new_ob/instance/instance_ob.c 新增 底下的函数 int birth_mobs(object room,mixed tmps,string names,int lv) 这东西的用法就是说,比方我们在某一副本房间,希望它能额外 生出怪物,它的做法就是 > call 001;birth_mobs;here;({"bear1","bear1"});"白瓦镇黑熊讨伐任务副本";120 你发觉邪 恶 黑 熊对你展开攻击! ☆☆☆ 战 斗 开 始 ☆☆☆ 你发觉邪 恶 黑 熊对你展开攻击! 房间(/std/new_ob/instance/laechan/001)-> birth_mobs( 房间(/std/new_ob/instance_room), ({ "bear1", "bear1" }), "白瓦镇黑熊讨伐任务副本", 120 ) = 1 而 001.c 平常也会被设定在每一个副本房间里头 instance_ob :"/std/new_ob/instance/laechan/001" 则每一只以此方法叫出的怪物,就都能具有副本怪物的特性,而 不需单独使用 clone_object 的方式再设定之,而且其等级与只 数(目前还不支援只数)亦可另订,这部份可讨论。 另外再补充一点,假设某副本所有房间是这麽宣告的... instance_rooms=({"100","100","100",......}); (也就是所有房间都是同一基底房间) 那麽理论上只要 instance_data 设定得宜,一样可做出判断.. switch(files) { case "100": switch(room->query("instance_data/real_room_number")) { ^^^^^^^^^^^^^^^^ 可自订 case "001": . . 我一般不建议使用同一房间去产生出副本区域(虽然办得到),但 如果真的这样做,最好还是要给每一个房间一个额外的识别用栏 位,才能避免判断上的不便。 Laechan ※ 编辑: laechan (210.61.157.53), 04/14/2014 14:37:45







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

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

TOP