[摳頂] _absorb.c
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間12年前 (2013/08/24 09:04)推噓0(0推 0噓 1→)留言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)
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
0
1
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
15
26