精華區beta mud 關於我們 聯絡資訊
底下模擬幻想○域的其中一個聲望副本「地獄裂痕」,為方便測試 因此簡化了部份訊息及流程,實際上要完整模擬其流程也是辦得到 的,只是物件程式碼會比較長,而我只是要做個測試。 測試結果證明,mud 所建立的副本系統,絕對可以模擬線上遊戲的 副本,mud 本身又已經有相當多的素材可利用,因為我們早已寫了 許多的區域及怪物檔,因此,不僅創建副本的速度可以比線上遊戲 快非常多,其流程控制腳本也更好寫。 Laechan@sanc 副本物件設定部份 // 005.c // Laechan@Sanc add in 2014/04/26 #include "../instance.h" inherit INSTANCE_OB; void create() { string tmp; int i; ::create(); seteuid(getuid(this_object())); set("pre_clean",1); // 設定區開始 // 該副本的地圖,如下所示共八格 // 有個 instance_map2data 函數可將底下的圖 // 轉成實際的房間路線配置 written by justinj@sanc instance_map2data=@LONG 003-004-005 | | 002 006 | | 001 007 | 008 LONG ; instance_paths="/std/ob/"; instance_virtual="/std/ob/room"; instance_ob=base_name(this_object()); // 固定 instance_names="地獄裂痕副本"; // 該副本所有房間採用共同的 short 及 long (方便測試起見) instance_comm=(["short":"廢棄的礦坑", "long":"一座荒廢已久的礦坑,裡頭透著不尋常的氣息!\n\n",]); instance_data=([ "002":(["instance_check":1, "cant_go":(["north":1]), ]), "003":(["instance_check":1, "long2":HIR"\n* 這個地方現在出現了一個小型的空間裂縫。"NOR"\n\n", "cant_go":(["east":1]), ]), "005":(["instance_check":1, "long2":HIR"\n* 這個地方現在出現了一個中型的空間裂縫。"NOR"\n\n", "cant_go":(["south":1]), ]), "008":(["instance_check":1, "long2":HIR"\n* 這個地方現在出現了一個大型的空間裂縫。"NOR"\n\n", ]), ]); // 副本區域房間範圍 instance_files=({ "001","002","003","004","005","006","007","008" }); // 怪物資料, files 必備, 其它就是 short, long, ... 等可自訂 // 其中 files 的部份就相當於「借殼」,即借用現存的怪物檔 // 但是變更其 chi_name 等資訊 = 一隻新的怪物 instance_mob_datas=([ "bat":(["files":"/u/p/ppl/hiei/felid/forest1/mob/mob1", "level":150, "chi_name":"異界吸血蝙蝠", "id":({"ej bat","bat"}), ]), "giant":(["files":"/d/dfire/caresa/mob/mgiant", "level":175, "killer":1, "chi_name":"異界噬血巨人", "id":({"ej giant","giant"}), ]), "master":(["files":"/d/dfire/caresa/mob/mgiant", "level":220, "killer":1, "short":"異界噬血巨人─阿克罕(Akerhan)", "chi_name":"阿克罕", "id":({"giant","akerhan"}), ]), ]); // 副本各房間生怪資料, 所生的怪在 instance_mob_datas 都要有定義 // 例如 003 就是生出三隻 bat instance_mobs=([ "003":({"bat","bat","bat"}), "005":({"bat","bat","bat","giant","giant","giant"}), "008":({"giant","giant","giant","giant","giant","giant","master"}), ]); // 設定區結束 } // 預計讓一些房間跑的流程,通通設定在這裡 int instance_check(string files,object room) { int flags,t; object ob; flags=(int)room->query("instance_flags"); t=time(); switch(files) { // 西爾克交待任務 case "002": switch(flags) { case 0: // 生出 npc birth_npcs(room,INSTANCE_NPC, ({"short","不幸的魔法師─西爾克(Sealker)", "chi_name","不幸的魔法師─西爾克"})); // 設定間隔 tell_room 訊息 // 該訊息每 5 秒跑出一段 room->set("instance_data/enter_msgs", ({HIW"西爾克:你就是...來幫助我的人吧!"NOR"\n", HIW"西爾克:請幫助我打倒礦坑內的魔物吧!"NOR"\n", })); room->set("instance_next_times",12+t); room->set("instance_flags",1); break; case 1: if(t>room->query("instance_next_times")) { // 移除往北的 cant_go, 即玩家此時就可往北移動 room->delete("cant_go/north",1); room->set("instance_flags",2); } break; } break; // end of 002 case "003": switch(flags) { case 0: if(!present("INSTANCE_MOB",room)) { // 去讀 003 南邊的 002 的西爾克,若它還在就把它叫過來 if(ob=room->query("exits/south")) { if(ob=present("INSTANCE_NPC",ob)) ob->move(room); } // 若它不在了就生出新的西爾克 if(!present("INSTANCE_NPC",room)) birth_npcs(room,INSTANCE_NPC, ({"short","不幸的魔法師─西爾克(Sealker)", "chi_name","不幸的魔法師─西爾克"})); room->set("instance_flags",1); room->set("instance_data/enter_msgs", ({HIW"西爾克:現在就讓我施法,將這個裂縫關閉吧!"NOR"\n", HIW"只見西爾克對著裂縫唸出了一長串的咒語......"NOR"\n", HIW"裂縫緩緩地關閉了!"NOR"\n", HIW"西爾克:請繼續掃蕩礦坑裡的魔物,拜託了!"NOR"\n", })); room->set("instance_next_times",21+t); room->set("instance_flags",1); } break; case 1: if(t>(int)room->query("instance_next_times")) { room->delete("cant_go/east",1); room->delete("long2"); room->set("instance_flags",2); } break; } break; // end of 003 case "005": switch(flags) { case 0: if(!present("INSTANCE_MOB",room)) { if(ob=room->query("exits/west")) { if(ob=ob->query("exits/west")) { if(ob=present("INSTANCE_NPC",ob)) ob->move(room); } } if(!present("INSTANCE_NPC",room)) birth_npcs(room,INSTANCE_NPC, ({"short","不幸的魔法師─西爾克(Sealker)", "chi_name","不幸的魔法師─西爾克"})); room->set("instance_flags",1); room->set("instance_data/enter_msgs", ({HIW"西爾克:現在就讓我施法,將這個裂縫關閉吧!"NOR"\n", HIW"只見西爾克對著裂縫唸出了一長串的咒語......"NOR"\n", HIW"裂縫緩緩地關閉了!"NOR"\n", HIW"西爾克:請繼續掃蕩礦坑裡的魔物,拜託了!"NOR"\n", })); room->set("instance_next_times",21+t); room->set("instance_flags",1); } break; case 1: if(t>room->query("instance_next_times")) { room->delete("cant_go/south",1); room->delete("long2"); room->set("instance_flags",2); } break; } break; // end of 005 case "008": switch(flags) { case 0: if(!present("INSTANCE_MOB",room)) { if(ob=room->query("exits/north")) { if(ob=ob->query("exits/north")) { if(ob=ob->query("exits/north")) { if(ob=present("INSTANCE_NPC",ob)) ob->move(room); } } } if(!present("INSTANCE_NPC",room)) birth_npcs(room,INSTANCE_NPC, ({"short","不幸的魔法師─西爾克(Sealker)", "chi_name","不幸的魔法師─西爾克"})); room->set("instance_flags",1); room->set("instance_data/enter_msgs", ({HIW"西爾克:這就是最後的裂縫了!現在就讓我施法吧.."NOR"\n", HIW"只見西爾克對著裂縫唸出了一長串的咒語......"NOR"\n", HIW"裂縫緩緩地關閉了!"NOR"\n", HIW"西爾克:終於將所有的裂縫關閉了,感謝你的協助!"NOR"\n", })); room->set("instance_next_times",21+t); room->set("instance_flags",1); } break; case 1: if(t>room->query("instance_next_times")) { // 這時才讓副本產生出口 room->set("exits/out","/d/wiz/room/disc"); room->delete("long2"); room->set("instance_flags",2); // 發放獎勵。instance_members 就是最初進入副本的玩家集合 foreach(ob in (mixed)room->query("instance_members")) { // 若玩家還在線上,而且房間也來到了這格,才發獎勵 if(ob && environment(ob)==room) { tell_object(ob, CSI"1;37;44m[ 你協助了西爾克,得到 200 點戰功\聲望! ]"NOR"\n"); ob->add_warexp(200); } } } break; } break; // end of 008 } return 1; } 副本實測部份 * 你進入了地獄裂痕副本。 > look 廢棄的礦坑 一座荒廢已久的礦坑,裡頭透著不尋常的氣息! 明顯出口有: north. > map 目前所在位置: 廢棄的礦坑 | | | | > n 廢棄的礦坑 一座荒廢已久的礦坑,裡頭透著不尋常的氣息! 明顯出口有: north 和 south. Lv255.不幸的魔法師─西爾克(Sealker) > n 你現在無法往 north 這個方向離開喔! 西爾克:你就是...來幫助我的人吧! 西爾克:請幫助我打倒礦坑內的魔物吧! > n ☆☆☆ 戰 鬥 開 始 ☆☆☆ 你發覺異界吸血蝙蝠對你展開攻擊! 你發覺異界吸血蝙蝠對你展開攻擊! 你發覺異界吸血蝙蝠對你展開攻擊! 廢棄的礦坑 一座荒廢已久的礦坑,裡頭透著不尋常的氣息! 明顯出口有: south 和 east. * 這個地方現在出現了一個小型的空間裂縫。 [副本怪] [飄浮中]異界吸血蝙蝠(Instance ej bat) [17群異界吸血蝙蝠]氣血充足,絲毫 沒有任何外傷. 正在攻擊 摳頂機器(Laechan:進階法師)。 [副本怪] [飄浮中]異界吸血蝙蝠(Instance ej bat) [17群異界吸血蝙蝠]氣血充足,絲毫 沒有任何外傷. 正在攻擊 摳頂機器(Laechan:進階法師)。 [副本怪] [飄浮中]異界吸血蝙蝠(Instance ej bat) [17群異界吸血蝙蝠]氣血充足,絲毫 沒有任何外傷. 正在攻擊 摳頂機器(Laechan:進階法師)。 . . 異界吸血蝙蝠發出一聲慘叫!! 異界吸血蝙蝠慢慢的倒在地上死了...你得到 7590點的經驗值。 你得到了(2)點學習點數。 你取得了一個牙齒。 你拿起[副本怪] [飄浮中]異界吸血蝙蝠(Instance ej bat) [17群異界吸血蝙蝠]身上所有 的東西。 ○○○ 這場戰鬥結束了! ○○○ > l 廢棄的礦坑 一座荒廢已久的礦坑,裡頭透著不尋常的氣息! 明顯出口有: south 和 east. * 這個地方現在出現了一個小型的空間裂縫。 Lv255.不幸的魔法師─西爾克(Sealker) 西爾克:現在就讓我施法,將這個裂縫關閉吧! 只見西爾克對著裂縫唸出了一長串的咒語...... 裂縫緩緩地關閉了! 西爾克:請繼續掃蕩礦坑裡的魔物,拜託了! > e 廢棄的礦坑 一座荒廢已久的礦坑,裡頭透著不尋常的氣息! 明顯出口有: east 和 west. > e ☆☆☆ 戰 鬥 開 始 ☆☆☆ 你發覺異界吸血蝙蝠對你展開攻擊! 你發覺異界吸血蝙蝠對你展開攻擊! 你發覺異界吸血蝙蝠對你展開攻擊! 你發覺異界噬血巨人對你展開攻擊! 你發覺異界噬血巨人對你展開攻擊! 你發覺異界噬血巨人對你展開攻擊! 廢棄的礦坑 一座荒廢已久的礦坑,裡頭透著不尋常的氣息! 明顯出口有: south 和 west. * 這個地方現在出現了一個中型的空間裂縫。 [副本怪] [飄浮中]異界吸血蝙蝠(Instance ej bat) [17群異界吸血蝙蝠]氣血充足,絲毫 沒有任何外傷. 正在攻擊 摳頂機器(Laechan:進階法師)。 [副本怪] [飄浮中]異界吸血蝙蝠(Instance ej bat) [17群異界吸血蝙蝠]氣血充足,絲毫 沒有任何外傷. 正在攻擊 摳頂機器(Laechan:進階法師)。 [副本怪] [飄浮中]異界吸血蝙蝠(Instance ej bat) [17群異界吸血蝙蝠]氣血充足,絲毫 沒有任何外傷. 正在攻擊 摳頂機器(Laechan:進階法師)。 [副本怪] 異界吸血巨人(Giant)氣血充足,絲毫沒有任何外傷. 正在攻擊 摳 頂機器(Laechan:進階法師)。 [副本怪] 異界吸血巨人(Giant)氣血充足,絲毫沒有任何外傷. 正在攻擊 摳 頂機器(Laechan:進階法師)。 [副本怪] 異界吸血巨人(Giant)氣血充足,絲毫沒有任何外傷. 正在攻擊 摳 頂機器(Laechan:進階法師)。 . . 異界噬血巨人發出一聲慘叫!! 異界噬血巨人慢慢的倒在地上死了...你得到 7590點的經驗值。 你拿起[副本怪] 異界噬血巨人(Giant)身上所有的東西。 > l 廢棄的礦坑 一座荒廢已久的礦坑,裡頭透著不尋常的氣息! 明顯出口有: south 和 west. * 這個地方現在出現了一個中型的空間裂縫。 Lv255.不幸的魔法師─西爾克(Sealker) 西爾克:現在就讓我施法,將這個裂縫關閉吧! 只見西爾克對著裂縫唸出了一長串的咒語...... 裂縫緩緩地關閉了! 西爾克:請繼續掃蕩礦坑裡的魔物,拜託了! > s 廢棄的礦坑 一座荒廢已久的礦坑,裡頭透著不尋常的氣息! 明顯出口有: north 和 south. > s 廢棄的礦坑 一座荒廢已久的礦坑,裡頭透著不尋常的氣息! 明顯出口有: north 和 south. > s ☆☆☆ 戰 鬥 開 始 ☆☆☆ 你發覺異界噬血巨人對你展開攻擊! 你發覺異界噬血巨人對你展開攻擊! 你發覺異界噬血巨人對你展開攻擊! 你發覺異界噬血巨人對你展開攻擊! 你發覺異界噬血巨人對你展開攻擊! 你發覺異界噬血巨人對你展開攻擊! 你發覺阿克罕對你展開攻擊! > look [副本怪] 異界噬血巨人─阿克罕(Akerhan)氣血充足,絲毫沒有任何外傷. 正在攻擊 摳頂機器(Laechan:進階法師)。 [副本怪] 異界噬血巨人(Giant)氣血充足,絲毫沒有任何外傷. 正在攻擊 摳頂機器 (Laechan:進階法師)。 [副本怪] 異界噬血巨人(Giant)氣血充足,絲毫沒有任何外傷. 正在攻擊 摳頂機器 (Laechan:進階法師)。 [副本怪] 異界噬血巨人(Giant)氣血充足,絲毫沒有任何外傷. 正在攻擊 摳頂機器 (Laechan:進階法師)。 [副本怪] 異界噬血巨人(Giant)氣血充足,絲毫沒有任何外傷. 正在攻擊 摳頂機器 (Laechan:進階法師)。 [副本怪] 異界噬血巨人(Giant)氣血充足,絲毫沒有任何外傷. 正在攻擊 摳頂機器 (Laechan:進階法師)。 [副本怪] 異界噬血巨人(Giant)氣血充足,絲毫沒有任何外傷. 正在攻擊 摳頂機器 (Laechan:進階法師)。 . . 阿克罕發出一聲慘叫!! 阿克罕慢慢的倒在地上死了...你得到 7590點的經驗值。 你得到了(2)點學習點數。 你拿起[副本怪] 異界噬血巨人─阿克罕(Akerhan)身上所有的東西。 > look 廢棄的礦坑 一座荒廢已久的礦坑,裡頭透著不尋常的氣息! 明顯出口有: north. * 這個地方現在出現了一個大型的空間裂縫。 Lv255.不幸的魔法師─西爾克(Sealker) 西爾克:這就是最後的裂縫了!現在就讓我施法吧.. 只見西爾克對著裂縫唸出了一長串的咒語...... 裂縫緩緩地關閉了! 西爾克:終於將所有的裂縫關閉了,感謝你的協助! [ 你協助了西爾克,得到 200 點戰功聲望! ] > l 廢棄的礦坑 一座荒廢已久的礦坑,裡頭透著不尋常的氣息! 明顯出口有: north 和 out. Lv255.不幸的魔法師─西爾克(Sealker) > out 巨型高塔 這裡是羅德斯鎮的巨型高塔,是人們與神最為接近的地方,每天 都會有人來這裡遊蕩,他們時常從高塔上俯瞰美麗的風景。 west : 次元傳送鏡 east : 藥水店 north : 防具店 south : 武器店 up : 雲端的夢幻國度 down : 羅德斯廣場 明顯出口有: south, north, east, down, west, 和 up. Lv250.『你可以跟我 adv 屬性』小滷蛋(Lodao) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.224.75.79 ※ 文章網址: http://www.ptt.cc/bbs/mud/M.1398599474.A.6CA.html ※ 編輯: laechan (61.224.75.79), 04/27/2014 19:52:13 ※ 編輯: laechan (61.224.75.79), 04/27/2014 19:54:43
pssjim :神人wiz~推一下 61.223.104.44 04/27 21:09
nfsong :推 61.231.89.245 04/27 22:48
nosod :推啊 219.68.232.98 04/28 08:40