[wizs] 魔法陣樣本
inherit MONSTER;
void create()
{
set("level",對應級數);
set("race","無生物");
::create();
seteuid(getuid(this_object()));
/* 基本設定區 */
set("id",({"magic_cycle",其它}));
set("no_attack",1);
set("no_attack_msg","你不能攻擊它喔.\n");
set("user",1);
/* 其它設定區 */
set("id",({魔法陣id}));
set("short","魔法陣short");
set("long","魔法陣long");
set_living_name("magic_cycle");
set_name("魔法陣的name");
set_verbs(({"打向","搥向"}));
}
// 由 set_heart_beat 觸動
int heart_beat(int i)
{
int t=time();
mixed obs;
object env,cloner;
env=environment(this_object());
if(t>(int)query("clone_times"))
{
tell_room(env,query("short")+"消失了。\n");
remove();
}
obs=all_inventory(env);
foreach(env in obs)
if(env && userp(env))
env->set_temp("mc_effect",2+t);
// 有上述參數的人才會啟動魔法陣相關判斷
// 而理論上,魔法陣消失後 1~2 秒,效果還可能會存在
return 1;
}
void init()
{
// 依照不同的功能設定不同的 add_action()
int lv=query("level");
switch(lv)
{
case 1: add_action("spells_xxx","spells");
}
}
int spells(string str)
{
object ppl,spell;
string sname;
int num,sp,k,t;
if(!str || str=="")
return notify_fail(@LONG
spells(攻擊法術練習)指令說明:
===================================================
spells 連擊數 法術名稱 (如 spells 50 fire)
1.目前可用來練習的法術為 fire spell、ice spell、
thunder spell、wind spell、earth spell、
light spell。
2.可施放的連擊數最大為 你目前的mag屬性值/100。
3.連擊數越高,消耗的sp值越高,但是成功施放出來的話
得到的熟練度越高。
===================================================
LONG
);
ppl=this_player();
if(ppl->query_temp("casting")>0)
return notify_fail("spells: 你要等一會兒喔.\n");
t=time();
if(ppl->query_temp("time_record/magic_cycle_lv1_times")>t)
return notify_fail("spells: 你要等一會兒喔.\n");
if(ppl->query_attackers())
return notify_fail("spells: 你不能在戰鬥中喔.\n");
if(sscanf(str,"%d %s",num,sname)==2);
else
return notify_fail("語法: spells 連擊數 法術名稱.\n");
if(sname!="fire" && sname!="ice" && sname!="thunder" &&
sname!="wind" && sname!="earth" && sname!="light")
return notify_fail("請下 spells 指令觀看使用說明喔.\n");
str=sname;
sname=sname+" spell";
if(ppl->query("skill/"+sname)<100)
return notify_fail("spells: 你的 "+sname+" 技能值至少要有 100 喔.\n");
if(num<1 || num>99)
return notify_fail("spells: 你一次只能擊出 1~99 發的法術喔.\n");
if(num>(int)ppl->query("stat/mag")/10)
return notify_fail("spells: 你最多一次只能擊出 "+
(int)ppl->query("stat/mag")/10+" 發的法術喔.\n");
if(!ppl->query_temp("magic heart"))
return notify_fail("spells: 你在練習法術的時候必須先 heart magic 喔.\n");
// 計算 sp 消耗量以及再施展時間
// 連擊數過高時雖然有可能擊出, 但再施展時間會拖長
sp=ppl->query("sp");
k=ppl->query("skill/magic heart");
if(k>5000) k=5000;
k=k/50;
k=1+k*num*num*(200-k)/200;
// 過度消耗法力
if(k>(sp*11)/10)
{
k=40;
ppl->set("sp",1);
}
else if(k>sp)
{
k=15;
ppl->set("sp",1);
}
else
k=1+num/10;
ppl->set_temp("casting",k);
ppl->set_temp("time_record/magic_cycle_lv1_times",k+time());
spell=find_object_or_load("/d/spell/"+str);
spell->start_skill(this_object(),(int)ppl->query("skill/"+sname)/100);
show(ppl,this_object(),"$N對著$O大喊:"+skill_name(sname)+" "+num+"連發!");
call_out("magic_cycle_lv1",2,ppl,sname,num);
return 1;
}
int magic_cycle_lv1(objetc ppl,string sname,int num)
{
if(!ppl) return 1;
if(environment(ppl) != environment(this_object())) return 1;
num=1+(num*num)/10+random(num);
num=1+num/10; // <= 暫時加進去
ppl->improve_skill(sname,num);
show(ppl,this_object(),"$N對著由魔法陣設下的障壁擊出了 "+num+" 發的"+
skill_name(sname)+"!\n"+
"只見自障壁反射出的魔法光芒,如同煙火一般照亮了半個天空。"NOR);
return 1;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.83.14.146
→
06/07 11:47, , 1F
06/07 11:47, 1F
→
06/07 11:48, , 2F
06/07 11:48, 2F
→
06/07 11:48, , 3F
06/07 11:48, 3F
→
06/07 11:48, , 4F
06/07 11:48, 4F
→
06/07 11:48, , 5F
06/07 11:48, 5F
→
06/07 11:49, , 6F
06/07 11:49, 6F
→
06/07 11:49, , 7F
06/07 11:49, 7F
※ 編輯: laechan 來自: 117.19.205.81 (06/08 16:41)
※ 編輯: laechan 來自: 115.82.222.131 (06/13 11:14)
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
15
19