[摳頂] 大釜室

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間13年前 (2013/02/28 10:14), 編輯推噓0(004)
留言4則, 1人參與, 最新討論串1/2 (看更多)
// cauldron_room.c // Laechan@Sanc add in 2013/02/28 // cp from urd's alchemy_room.c // 哈利波特的大釜, 煉魔藥用 #define MED_COLOR ([\ "迷迭香":"白色","鼠尾草":"綠色","鳶尾根":"黃色","玫瑰瓣":"紅色",\ "忍冬花":"咖啡色","蜈蚣籐":"褐色","赤桔梗":"血紅色","魔羅果":"黑色",\ ]) #define IGNITE_MENU ([\ ]) // 藥粉 迷迭香(m991) 丟擲用,一般對自己 // 藥瓶 鼠尾草(m992) 丟擲用,可對敵,具特殊效果 // 藥丸 鳶尾根(m993) 自己食用,加 buff,持效型 // 藥水 玫瑰瓣(m994) 自己食用,瞬效,無持續效果 #define BREW_MENU ([\ "m991":({\ }),\ "m992":({ ({"酸蝕瓶", 1, "炙蟻酸液", 3,"蛇精之血", 1}),\ }),\ "m993":({\ }),\ "m994":({\ }),\ ]) #define CAULDRON_IGNITE_COST 10000 #defnie CAULDRON_IGNITE_TIME 1200 #define CAULDRON_IGNITE_MED0 99 #define CAULDRON_IGNITE_MED1 99 #define CAULDRON_IGNITE_MED2 99 inherit ROOM; static mapping cauldron=([]); static object vobjs_d; void create() { ::create(); seteuid(getuid(this_object())); if(file_exists("/open/cmds/cauldron.o")) restore_object("/open/cmds/cauldron"); else { set("light",1); set("short","法師公會大釜室"); set("long",@LONG 在這裡,你可以下三個指令: manual 大釜使用指南 ignite 點火加熱煮鍋底 brew 煉藥 LONG ); set("exits/out","/d/nmap/klon/room/mage-guild"); } } int save_room() { save_object("/open/cmds/cauldron"); return 1; } void init() { add_action("manual_xxx","manual"); add_action("ignite_xxx","ignite"); add_action("brew_xxx","brew"); } int manual_xxx(string str) { return notify_fail(@LONG 煉藥時所需的五大藥引為.. 而在煉藥中添進附加藥引,可以增加煉藥效果.. 蜈蚣籐 加快速度 赤桔梗 增加產量 魔羅果 增加成功率 LONG ); } int ignite_xxx(string str) { object ppl; string names,tmp,m0,m1,m2; mixed tmps=({}),objs=({}); int t,added; if(!str || str=="") return notify_fail(@LONG 語法: ignite -藥引名[,藥引名2] 例子: ignite -迷迭香 以迷迭香做為主要藥引 ignite -迷迭香,魔羅果 以迷迭香佐以魔羅果做為藥引 ignite status 觀看大釜狀態 藥引: 主要藥引─迷迭香、鼠尾草、鳶尾根、玫瑰瓣 附加藥引─蜈蚣籐、赤桔梗、魔羅果 共通藥引─忍冬花(煉藥時會自動添加進去) 煉藥時若添加附加藥引,可增加煉藥效果 收費: 大釜點火費每次 10000 影特幣,可煉藥 20 分鐘 ppl=this_player(); // 以後再考慮開放一般玩家調配 3p 藥水 if(!wizardp(ppl) && (string)ppl->query("adv_guild")!="alchemist") return notify_fail("ignite: 只有煉金術士才可以使用大釜喔.\n"); names=ppl->query("name"); t=time(); if(!vobjs_d) if(!vobjs_d=find_object_or_load("/open/cmds/vobjs_d")) return notify_fail("ignite: 目前虛擬物品系統有點問題喔.\n"); if(str=="status") { if(!cauldron[names]) return notify_fail("ignite: 你的大釜現在是熄火狀態.\n"); if(cauldron[names]["times"]<t) return notify_fail("ignite: 你的大釜需要重新點火添加藥引喔.\n"); } if(sscanf(str,"-%s",tmp)==1) { if(cauldron[names]) return notify_fail("ignite: 你的大釜已經有點火了喔.\n"+ " 你可以使用 ignite -status 觀看大釜狀態.\n"); objs=vobjs_d->vobjs_data("query_array","忍冬花"); m0=objs[0]; if(ppl->query_vobjs(m0)<CAULDRON_IGNITE_MED0) return notify_fail("ignite: 你身上的忍冬花不足 "+CAULDRON_IGNITE_MED0+ " "+objs[2]+" 了.\n"+ " 忍冬花是煉藥必備的共通藥引喔!\n"); tmps=explode(tmp,","); if(tmps[0]!="迷迭香" && tmps[0]!="鼠尾草" && tmps[0]!="鳶尾根" && tmps[0]!="玫瑰瓣") return notify_fail("ignite: 你不能放非藥引類的東西進去當主要藥引喔.\n"); objs=vobjs_d->vobjs_data("query_array",tmps[0]); m1=objs[0]; if(ppl->query_vobjs(m1)<CAULDRON_IGNITE_MED1) return notify_fail("ignite: 你身上的"+tmps[0]+"不足 "+CAULDRON_IGNITE_MED1+ " "+objs[2]+" 了.\n"); if(sizeof(tmps)>1) { if(tmps[1]!="蜈蚣籐" && tmps[1]!="赤桔梗" && tmps[1]!="魔羅果") return notify_fail("ignite: 你不能放非藥引類的東西進去當附加藥引喔.\n"); objs=vobjs_d->vobjs_data("query_array",tmps[1]); m2=objs[0]; if(ppl->query_vobjs(m2)<CAULDRON_IGNITE_MED1) return notify_fail("ignite: 你身上的"+tmps[1]+"不足 "+CAULDRON_IGNITE_MED2+ " "+objs[2]+" 了.\n"); added=1; } if(ppl->query("balance")<CAULDRON_IGNITE_COST) return notify_fail("ignite: 你的銀行存款不足點火費 "+ CAULDRON_IGNITE_COST+" 影特幣喔.\n"); ppl->add("balance",-CAULDRON_IGNITE_COST); ppl->vobjs("del",m0); ppl->vobjs("del",m1); if(added>0) ppl->vobjs("del",m2); cauldron[names]=([]); cauldron[names]["times"]=t+CAULDRON_IGNITE_TIME; cauldron["med1"]=m1; if(added>0) cauldron["med2"]=m2; cauldron[names]["brewing"]=([]); save_room(); str="你不是很熟練地打開了瓦斯爐,點火加熱大釜。\n"+ "\"Amazing!麻瓜的東西真是又快又方便!\"\n"; if(added>0) str+="你接著在大釜裡放入了適量的"+tmps[0]+"及"+tmps[1]+",\n"+ "只見一縷"+MED_COLOR[tmps[0]]+"及"+MED_COLOR[tmps[1]]+ "的輕煙緩緩自大釜裡升起...\n"; else str+="你接著在大釜裡放入了適量的"+tmps[0]+",\n"+ "只見一縷"+MED_COLOR[tmps[0]]+"的輕煙緩緩自大釜裡升起...\n"; return str; } return notify_fail("ignite: 沒有這個語法喔.\n"); } int brew_xxx(string str) { string names,tmp,tmp1,tmp2,tmp3; mixed tmps=({}); int t,i,j; object ppl; /* 名字未定 縮短再變身時間, 每吃一單位縮短剩餘時間的一半 名字未定 一定時間內增強 hp 藥水的服用效果或 hp 最大值   └藥材跟「陸」類怪物有關 名字未定 一定時間內增強 sp 藥水的服用效果或 sp 最大值   └藥材跟「海」類怪物有關 名字未定 一定時間內增強 pp 藥水的服用效果或 pp 最大值   └藥材跟「空」類怪物有關 名字未定 增加en連擊數的藥   └藥材跟一些動作很靈敏、攻擊很快的怪物有關 名字未定 增加特攻連擊數的藥   └同上 名字未定 解各種異常狀態 大力丸    吃了全種類攻擊傷害增加(=經驗值提高)   └藥材跟一些力量很大或打人很痛的怪物有關    ├可能會做個海灘放蟹    └可能會做個叢林放猩猩   一點靈    用了全種類攻擊命中增加(=熟練度提高)   └藥材跟一些眼睛很好的怪物有關,如蜥蜴、眼鏡猴、貓科動物等 名字未定 adv -屬性需要的藥 */ if(!str || str=="") return notify_fail(@LONG 語法: brew 藥名 from 藥材1[,藥材2,藥材3,..] 例如: brew 酸蝕藥瓶 from 炙蟻酸液,蛇精之血 LONG ); ppl=this_player(); names=ppl->query("name"); t=time(); if(sscanf(str,"%s from %s",tmp1,tmp2)==2) { if(!cauldron[names]) return notify_fail("brew: 你要先 ignite 你的大釜喔.\n"); // 有上面代表有 times, brewing if(sizeof(keys(cauldron[names]["brewing"]))>0) return notify_fail("brew: 你的大釜裡面有藥正在煉製中喔.\n"); // 沒有藥在煉製、但是 times 過期 if(cauldron[names]["times"]<t) { map_delete(cauldron,names); save_room(); return notify_fail("brew: 你的大釜已經過了租用時間囉.\n"+ " 你可以使用 ignite 指令重新租用它.\n"); } if(!vobjs_d) if(!vobjs_d=find_object_or_load("/open/cmds/vobjs_d")) return notify_fail("brew: 虛擬物品系統現在有點問題喔.\n"); tmp=vobjs_d->vobjs_data("get_mark",tmp1); if(tmp=="") return notify_fail("brew: 沒有這種藥物可以煉製喔.\n"); tmps=keys(BREW_DATA[cauldron[names]["med1"]]); j=sizeof(tmps); for(i=0;i<j;i++) if(tmps[i][0]==tmp1) break; if(ppl->query("sp")<((int)ppl->query("sp_src")*(int)tmps[i][1])/100) return notify_fail("brew: 你的 sp 不足 "+tmps[i][1]+"% 了喔.\n"); tmps=tmps[i][2]; j=sizeof(tmps); for(i=0;i<j;i=i+2) { tmp3=vobjs_d->vobjs_data("get_mark",tmps[i]); if(ppl->query_vobjs(tmp3)<tmps[i+1]) return notify_fail("brew: 要煉製"+tmp1+",你需要 "+implode(tmps)+" 喔!\n"); } for(i=0;i<j;i=i+2) { tmp3=vobjs_d->vobjs_data("get_mark",tmps[i]); ppl->vobjs("add",tmp3,-tmps[i+1]); } return notify_fail("brew: 沒有這個語法喔.\n"); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: laechan 來自: 1.165.182.181 (02/28 20:24)

02/28 20:24, , 1F
真難搞
02/28 20:24, 1F

02/28 22:05, , 2F
今天寫不完哩,明天繼續
02/28 22:05, 2F

03/01 09:28, , 3F
今天繼續 coding
03/01 09:28, 3F

03/01 10:21, , 4F
剩下最終的判斷
03/01 10:21, 4F
文章代碼(AID): #1HBhsJkH (mud_sanc)
討論串 (同標題文章)
文章代碼(AID): #1HBhsJkH (mud_sanc)