作者laechan (挥泪斩马云)
看板mud_sanc
标题[wizs] 战斗中的前卫後卫
时间Mon Nov 26 22:57:43 2018
我打算把这个固定化。
首先,假设怪物攻击玩家时,是读取以下函数:
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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.117.106.224
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1543244265.A.019.html
1F:→ laechan : cast all 11/26 23:00
2F:→ laechan : 视情况还可加入战斗中行动不能(自动变後卫) 11/27 13:52
3F:→ laechan : 例如魔龙的咆哮广范围全体攻击,被吼到的变行动不能y 11/27 13:53
4F:→ laechan : 假设队员除了牧师其它都倒了,那牧师就会变成怪物攻 11/27 13:53
5F:→ laechan : 击的主要目标;全员都倒时,才会随机找一个打 11/27 13:54