[摳頂] _absorb.c

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間12年前 (2013/08/24 09:04), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/2 (看更多)
// _absorb.c // Laechan@Sanc add in 2013/08/24 // 魂力吸取 or 魂力吸收 for 鍊金術士 // 名稱,所需點數 // 堅毅水晶, 稜光水晶, 鏡像水晶, 強護水晶, 彩虹水晶, 充能水晶 // 減少 CD 時間的水晶, 灌入技能的水晶, 無敵水晶, 鋼鐵水晶 // 水晶製造除了需要魂力點數外還需要別的東西(一般怪掉落物) #define CRYSTAL_POINT ({\ "生命水晶",500,\ "續戰水晶",\ "犧牲水晶",\ "記憶水晶",\ "自爆水晶",\ "轉移水晶",\ "重置水晶",\ "傳送水晶",\ }) #define ABSORB_CRYSTAL_TIMES 10 #define ABSORB_NEED_SP 1 inherit DAEMON; static object vobjs_d; void help() { write(@LONG absorb(魂力)指令使用說明: =================================================== absorb crystal list 可製造的水晶列表 absorb crysbal 水晶名 使用魂力點數製造該水晶 absort 對象id 對戰鬥中的目標使用魂力吸收 這個指令限定職業為鍊金術士且學會魂力吸收(absorb)技 能值達到 1000 的進階法師才能使用。 =================================================== LONG ); int cmd_absorb(string str,object me) { int sp,t,i,sk; string cnames; mixed tmps; object tar; if(!str || str=="") { help(); return notify_fail(""); } if(!vobjs_d) if(catch(vobjs_d=find_object_or_load("/open/cmds/vobjs_d"))) return notify_fail("absorb: 目前虛擬物品系統出了一點問題,不能使用喔。\n"); if((string)me->query("adv_guild")!="alchemist") return notify_fail("absorb: 只有鍊金術士才可以使用這項能力。\n"); sk=me->query("skill/absorb"); if(sk<1000) return notify_fail("absorb: 你的魂力吸取技能必須達到 1000 才能使用喔。\n"); if(sscanf(str,"crystal %s",cnames)==1) { if(cnames=="list") { str="可製作水晶 所需點數\n"+ "====================\n"; t=sizeof(CRYSTAL_POINT); for(i=0;i<t;i=i+2) str+=sprintf("%-10s%6d\n",CRYSTAL_POINT[i],CRYSTAL_POINT[i+1]); str+="====================\n你目前的魂力點數: "+ me->query("record_data/absorb_point")+".\n"; return notify_fail(str); } if(me->query_attackers()) return notify_fail("absorb: 戰鬥中,你沒空喔...\n"); t=time(); if(me->query_temp("time_record/absorb_crystal_times")>t) return notify_fail("absorb: 你要再等一下才能再使用這項能力喔。\n"); i=member_array(cname,CRYSTAL_POINT); if(i==-1) return notify_fail("absorb: "+cnames+"不能使用這項能力製造喔。\n"); if(me->query("record_data/absorb_point")<CRYSTAL_POINT[i+1]) return notify_fail("absorb: 要製造"+CRYSTAL_POINT[i]+"需要魂力點數 "+ CRYSTAL_POINT[i+1]+" 點喔!\n"); tmps=vobjs_d->vobjs_data("query_array",cnames); if(sizeof(tmps)<6) return notify_fail("absorb: 現在還不能製造"+cnames+"喔。\n"); if((int)me->query_vobjs(tmps[0])>=(int)tmps[5]) return notify_fail("obsorb: 你身上的"+tmps[1]+"已經達到攜帶上限了喔。\n"); me->set_temp("time_record/absorb_crystal_times",ABSORB_CRYSTAL_TIMES+t); me->vobjs("add",tmps[0],1); me->add("record_data/absorb_point",-CRYSTAL_POINT[i+1]); // 加上一些敘述 return notify_fail("absorb: 你消耗 "+CRYSTAL_POINT[i+1]+" 點的魂力點數,"+ "製作出了一顆"+cnames+"。\n"); } sp=me->query("record_data/absorb_point"); if(sp>=sk) return notify_fail("absort: 依你現在的魂力吸取技能值,你最多只能儲存 "+ sk+" 點魂力點數喔。\n"); if(me->query_temp("casting")>0) return notify_fail("absorb: 你正在忙喔。\n"); if(!tar=present(str,environment(me))) return notify_fail("absorb: 這裡沒有 "+str+" 這個目標喔。\n"); if(wizardp(tar)) return notify_fail("absorb: 這裡沒有 "+str+" 這個目標喔。\n"); if(userp(tar) || !living(tar)) return notify_fail("absorb: 你不能對 "+str+" 使用魂力吸取喔。\n"); if(!me->query_attackers()) return notify_fail("absorb: 戰鬥中你才可以使用魂力吸收喔。\n"); if(member_array(tar,(mixed)me->query_temp("ats"))==-1) return notify_fail("absorb: "+str+" 必須是你戰鬥的對象你才能使用喔。\n"); sp=((int)me->query("sp_src")/100)*ABSORB_NEED_SP; if(me->query("sp")<sp) return notify_fail("absorb: 你的剩餘 sp 不足 "+ABSORB_NEED_SP+"% 了喔。\n"); me->add_temp("casting",1); me->add("sp",-sp); // 計算成功率 // 1.有基本成功率值 // 2.技能值越高,成功率越高 // 3.越多隻,成功率越低 // 4.等級越高,成功率越低 // 5.道德值設定越低的怪物,成功率越高 // 5.BOSS、no_absorb 怪物無法被吸收 // 吸收成功得到魂力點數, 隻數, 等級, 額外魂力點設定, .. // 跟隻數只會有一點點關係,主要是等級差,採除法分配 sp=tar->query("member"); sp=1+random(sp); sp= me->add("record_data/absorb_point",sp); // 被吸收魂力值的怪物會陣亡 cnames=tar->query("chi_name"); tar->die(); return notify_fail("absorb: 你成功\吸取了"+cnames+"的 "+sp+" 點魂力點數!\n"+ " 你現在的魂力點數為 "+ me->query("absorb_point")+" 點。\n"); } -- ※ 發信站: 批踢踢實業坊(ptt.cc)

08/24 10:01, , 1F
嘛..大致是這種感覺..
08/24 10:01, 1F
※ 編輯: laechan 來自: 1.165.174.133 (08/24 20:25)
文章代碼(AID): #1I60Qxjg (mud_sanc)
討論串 (同標題文章)
文章代碼(AID): #1I60Qxjg (mud_sanc)