作者laechan (小太保)
看板mud_sanc
標題[wizs] 不必學會某技能、也能施展某技能
時間Thu Jun 16 14:59:34 2011
這個東西其實很簡單,只是要更動相對應的檔案而已。
所以如果有要做的話,最好是做統一的更改。
指令呼叫做法:
/cmds/std/技能施展相關指令 -> /d/相關技能/技能檔 -> start_skill
-> start_effect
可以設定當玩家身上有某物件時,亦可施展該技能
物件檔 -> add_action 相關函數及指令 -> 以指令呼叫函數 -> start_skill
-> start_effect
所謂需要做統一更改的地方則包括..
一、技能檔中相關數值計算的參考值要怎麼定
例如某技能看「施展者的 mag」,則當玩家拿某物件做施放
道具時「該看什麼值」
二、某些技能施展了會有熟練度
例如燃燒之手。則當玩家拿某物件做施放道具時,這時就不
能給熟練度。
各位 deep 級以上的 wiz 有空也可以玩玩看這個,有先玩過會比
較有概念,我寫個簡易版的..
// 燃燒之手杖, 可發射 Lv10 的燃燒之手攻擊
#define CEHCKD "/adm/daemons/check_d.c"
void init()
{
add_action("burning_xxx","burning");
}
int burning_xxx(string str)
{
object tar,env,ppl=this_player();
env=environment(ppl);
if(!tar=present(str,env))
return notify_fail("burning: 沒有 "+str+" 這個目標喔.\n");
if(ppl->query_temp("casting")>0)
return notify_fail("burning: 你正在忙,沒空喔.\n");
// 判斷能否攻擊對方
if(CHECKD->check_kill(ppl,tar,env,"cast"))
return 1;
// 執行施展敘述
"/d/spell/burning_hands"->start_skill(tar,10);
// 執行防止連續呼叫設定
ppl->add_temp("casting",秒數);
// 如果不要 delay 就直接用底下
// "/d/spell/burning_hands"->start_effect(tar,ppl,10,1000,連擊數);
// 如果要延遲出手就用這個
call_out("delay_spell",秒數,tar,ppl,env);
return 1;
}
int delay_spell(object tar,object ppl,object env)
{
if(!tar || !ppl || !env) return 1;
if(environment(tar)!=env) return 1;
"/d/spell/burning_hands"->start_effect(tar,ppl,10,1000,連擊數);
// 這時如果沒有更改技能檔,則該玩家將會得到熟練度
// 而且其威力計算中的 mag 值亦會看該玩家的 mag 值
return 1;
}
Belldandy.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: laechan 來自: 115.82.178.107 (06/16 14:59)
1F:→ hlead :這個以前好像有寫過... 06/16 15:13
2F:→ laechan :練習寫這個有助於思考的嚴謹化 06/16 15:23
3F:推 justinj :暫時玩家設定no_improve_skill....avert 06/17 09:32
4F:→ laechan :目前有想過多增加一個 count_dam or count_effect 的 06/17 10:02
5F:→ laechan :函數,然後把像是 mag,air 等數值傳過去算 06/17 10:02
6F:→ laechan :或者把 ppl->query("stat/mag") 的 ppl 改成別的東西 06/17 10:02
7F:→ laechan :↑上面以前倒是有做過 06/17 10:03