戰鬥中的前衛後衛 - 聖殿英雄傳說 MUD

Table of Contents

我打算把這個固定化。

首先,假設怪物攻擊玩家時,是讀取以下函數:

tar=mob->query_current_attacker();

而該函數長底下這樣:

varargs object query_current_attacker(int n)
{
mixed ats=query_temp("ats");
.
.

然後假設 ats 的堆疊是正確的,也就是目前有多少生物在攻擊
這隻 mob,都被堆疊在 ats 裡頭。

這時,問題可簡化成需對 ats 做幾次必要的排序處理。

ats=sort_array(ats,(: sort_pri_guild :));

int sort_pri_guild(object a,object b)
{
string pa=(string)a->query("pri_guild");

if(pa=="fighter" || pa=="blader" || pa=="slasher")
return -1;
else if(pa=="mage" || pa=="clerical" || pa=="thief")
return 1;
else
return 0;
}

以下是線上隨便抓 20 個玩家的驗證結果:

ralfa fighter
hulk fighter
blademonk blader
juliannohl slasher
salvis slasher
garnettil slasher
wan blader
fencer blader
keer slasher
ailano slasher
fredman blader
ido fighter
freija fighter
newking slasher <= 到這裡為止都是所謂的前衛
parasite mage <= 從這裡開始都是廣義的後衛
asellus clerical
songb clerical
stephanie clerical
kindle clerical
terryw knight


也就是說,我先看主職業,只要是攻擊該怪物的對象,主職是
戰、刀、劍三種的,就歸類到前鋒,剩下的就歸類到後衛。

接下來:我怎麼隨機從前衛裡頭產生攻擊對象?

i=0;
foreach(ob in ats)
{
pri_guild=ob->query("pri_guild");
if(pri_guild=="fighter" || pri_guild=="blader" ||
pri_guild=="slasher")
{
i++;
continue;
}
// 全體隊員都不是戰、刀、劍主職時
if(i==0) i=sizeof(ats);
return ats[random(i)];
}

以下是驗證:

選中的對象 salvis slasher
選中的對象 keer slasher
選中的對象 garnettil slasher
選中的對象 hulk fighter
選中的對象 ailano slasher
選中的對象 fredman blader
選中的對象 fencer blader
選中的對象 hulk fighter
選中的對象 wan blader
選中的對象 wan blader
.
.


上面的設定有以下的好處:

一、兩人以上組隊,只要有隊員主職是戰、刀、劍時,怪物就會
優先打這些隊員。

二、兩人以上組隊,全體隊員都不是戰、刀、劍主職,或全體隊
  員都是戰、刀、劍主職時,每個隊員都可能被怪物打到。

三、若要更合理一點,應該要把[騎士]也加進前鋒。

四、該設定實裝後,就能接著實裝「斷法」的設計,只要玩家被
呼叫到 receive_damage,就會移除堆疊的 special_attack
資料串,就相當於被斷法(而且CD時間還在)。

五、因此理論上,應該先把法術攻擊全面 special_attack 化。

六、全面 special_attack 化可帶來另一個好處,就是施法時間
可以延長,我打算至少延長 1 秒。

七、該設定實裝後,可拉高怪物的攻擊頻率、以及增加全體攻擊
的類別。

八、後期全面實裝後,就能將特攻、fist 等也 special_attack
化,玩家基本上只要不被怪物打到就不會斷法,而 sanc 會
提供多種不被打到的方法。(比方法師上盾)

九、我會跟著實裝的設定是群式怪物會 n 連擊,n 與怪物隻數
有關。


其中第五項應該要是最優先事項。

總之以上全部實裝後,玩家組隊時至少會想一下要組什麼樣的成
員,而不是無腦組,但也不會花你太多時間去想。


Laechan

--

All Comments

Jake avatarJake2018-11-28
cast all
Xanthe avatarXanthe2018-11-30
視情況還可加入戰鬥中行動不能(自動變後衛)
Mia avatarMia2018-12-04
例如魔龍的咆哮廣範圍全體攻擊,被吼到的變行動不能y
假設隊員除了牧師其它都倒了,那牧師就會變成怪物攻
Skylar Davis avatarSkylar Davis2018-12-05
擊的主要目標;全員都倒時,才會隨機找一個打