Re: [wizs] 問題請教(二十三)
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間14年前 (2011/06/12 07:29)推噓2(2推 0噓 2→)留言4則, 2人參與討論串2/2 (看更多)
※ 引述《amosdeus (幽素)》之銘言:
: int i,r,j,l,time;
: object ppl,ob=this_object(),room;
: mixed usr;
: ppl = this_player();
: room = environment(ob);
// 加底下這個判斷
if(userp(room)) return 1;
: usr = all_inventory(room);
: //usr = ppl->query_temp("ats");
: r = random(3);
: time = query("S_R/time"); //移除計時
: if(!ob) time = time / 2; //使用者不在時間減少
: if( time < 1)
: {
: write(CYN"運轉四時劍陣的已經能源消耗完畢,劍陣一並崩然潰散。\n"NOR);
: remove();
: }
: else
: set("S_R/time",time-1);
這個判斷可以往前挪. 另外 remove() 下方要 return 1;
因為 ob=this_object(), 若 ob->remove() 程式就應停止
: foreach(ob in usr)
: {
: if(userp(ob))
: {
: if(!ob) continue;
: if(ob->query("no_attack")) continue;
: if(!ob->query("ats")) continue;
要知道玩家有無攻擊對象, 有兩種判斷方式
if(ob->query_attackers()) 代表若 ob 有攻擊對象
if(ob->query_current_attacker()) 代表若 ob「有正要攻擊的那個對象」
一般用第一個就行了。直接讀玩家的 ats 跟使用函數讀法的差異,
在於 ats 有可能為 ({ 0 }) 這樣的東西 = 實際上攻擊的對象已經
消失, 使用函數讀取時它判斷到 ({ 0 }) 會先移除.
: switch(r)
: {
: case 0:
: ppl->shut(HIM"\n\n$N【春之迷濛】->$O"NOR,11111,11111,({"dam","physics",2}),ob);
: break;
: case 1:
: ppl->shut(HIM"\n\n$N【夏之驕蹇】->$O"NOR,11111,11111,({"dam","physics",2}),ob);
: break;
: case 2:
: ppl->shut(HIM"\n\n$N【秋之纍綬】->$O"NOR,11111,11111,({"dam","physics",2}),ob);
: break;
: case 3:
: ppl->shut(HIM"\n\n$N【冬之離葬】->$O"NOR,11111,11111,({"dam","physics",2}),ob);
: break;
: }
: }
: else
: i++;
: }
: if(i==sizeof(usr))
: {
: delete("callouting");
: remove_call_out("room_check_poison");
: return 1;
: }
: call_out("room_check_poison",2); //兩回合攻擊一次
: return 1;
: }
: int disband(string str)
: {
: object ppl = this_player();
: if(!str || str == "" ) return notify_fail("什麼?\n"NOR);
: if(str!="range") return notify_fail("你是要解除劍陣嗎?(disband range)\n"NOR);
: if((string)ppl->query("name")!=query("name"))
: return notify_fail("你並不能控制這座劍陣。\n"NOR);
: command("drop all"); //drop沒反應 要改別的方式
: write("你解除四時劍陣了.\n");
: remove();
: return 1;
: }
: 問題一:
: 請問要怎樣讓 劍陣 在每一次 call_out("room_check_poison",2);
: 都能讀取到 使用者 正在攻擊的敵人 ppl->query_temp("ats");
: 讓 ppl->shut(HIM"\n\n$N【春之迷濛】->$O"................
: 能夠使用;
: 或者是 讓 劍陣 讀取到 使用者 的攻擊敵人參數
: 然後再用直接扣血的方式(但是要做抗性判斷,跟屬性閃避的判斷)
: 還要考慮玩家先布下劍陣時在進行戰鬥。
: 問題二:
: //增加劍法類的攻擊威力。
: //從slash的指令或是劍法的技能檔增加讀取到劍陣便增加攻擊力
: slash的檔案可以在哪裡看到,另一個構思中的技能:飛劍 也用得到
/cmds/std/_slash.c 以及 /d/slash/*.c
slash指令已經cp 一份到你的目錄 ~plain/_slash.c,
/d/slash 則應該有對你開放可讀權限.
因為你的劍陣是實體物品,只要設定特殊 id 跟參數,
就可以用 present 的方式去 check.
: 飛劍的攻擊與數量:
: 一:
: 只招換出一隻 飛劍 增加攻擊次數一
: 比如 "四時劍法" 攻擊次數為四,在讀取到飛劍參數後攻擊加一,變
: 成攻擊次數為五。
這個就依劍法的不同,自行決定做法即可。個人比較建議先讓
所有劍法都先 inherit 同一個 /d/slash 下的樣本繼承檔
(該樣本繼承檔則 inherit DAEMON;)
這樣你做相關修改才會比較方便. 不然根據經驗, 要一個一個
改技能檔, 容易有出錯的風險.
: 二:
: 可由 "劍士之心" 或是 "氣勁(air)" 除於三千最多能,同時有三把飛
: 劍(這部分由撰寫者決定)。
: 這裡的原則是一的情況下可以達到原攻擊的八九成,二的情況下飛劍隻
: 數多攻擊力就要下降。
: 直接從指令作修改比較快,修改劍類技能就比較麻煩也占記憶體。
: 以上 謝謝
: Plain@Sanc
重點在於你構想中的「多一劍」的實際執行形式為何,例如「
若大劍技+飛劍」時又是怎樣的呈現方式?
如果是我的話在不改技能檔的情況下只改指令檔也是可以的.
// _slash.c
已經先 call 劍法去施展出攻擊了
if(ob=present(特殊id,所處環境))
if(ob->query(特殊參數)) 或 if(ob->check_劍陣_是可運作中的())
ob->ppl_is_slashing(ppl,玩家施展的劍法,幾級,攻擊對象是誰);
return 1;
// ob檔
int ppl_is_slashing(object ppl,string skillname,int lv,object tar)
{
switch(skillname)
{
case "4-season slash": ppl->shut(四時相關敘述,傷害,命中,({xx}),tar); break;
case "crack slash": ...
.
.
.
}
}
這應該是不必動到技能檔本身的比較簡易的修改方式。
Belldandy.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.253.168.79
推
06/12 08:46, , 1F
06/12 08:46, 1F
→
06/12 09:20, , 2F
06/12 09:20, 2F
推
06/13 20:26, , 3F
06/13 20:26, 3F
→
06/15 00:09, , 4F
06/15 00:09, 4F
討論串 (同標題文章)
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
15
19