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/m.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燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP