作者laechan (小太保)
看板mud_sanc
标题Re: [闲聊] en 5000 的特殊设定
时间Tue Mar 20 09:04:41 2012
normal_attack 有一段是这样的...
if(mod=me->get_skind(wptype,2))
get_skind 则定义在 user.c
mixed get_skind(string skind,int times)
{
if(query_temp("en/"+skind) && md[skind])
{
int i;
if(cal_cost(skind,0,times))
{
i=fz[skind];
if(i==1) return ({md[skind][0],co[skind][2],co[skind][3]});
return ({md[skind],co[skind][2],co[skind][3]});
}
}
}
所以基本上是这样子运作的,假设玩家 en return lance,
则 md["lance"] 就会储存 return lance 的 en 资讯,同时
me->set_temp("en/lance","return lance");
而且不只 md 还有 co 也会储存。
那麽,这样写其实是有问题的(每次都得传一堆资料过去),
不过暂时就先这样子。
那假设新特攻指令叫 forces,则关键程式段如下...
if(mod=me->get_skind(wptype,
1))
{
damage=mod[1];
damage=经过必要计算得出新值;
hit_chance=mod[2];
hit_chance=经过必要计算得出新值;
me->
shuts(mod[0],damage,hit_chance,types)
}
这里会出现两个新问题
一、要用回枪刺击原先的叙述,还是要创造新的叙述?
答案是「先用原先的叙述」,以节省写作时间
二、types 要怎麽定?
答案是「先用 ({"physics","dam",1})」以後再改
shuts 的函数内容大致如下...
// 读取全部的战斗目标
ats = me->query_attackers();
// 然後把$O改成"前方"
msg = substr(msg,"$O","前方");
// 接着就先秀出讯息
show(me,me,msg);
foreach(tar in ats)
{
经过必要的判断;
show(me,tar,
"",damage);
}
也就是说,传统的做法是 show(me,tar,msg,damage)
新的做法就是做两段 show,一段在 foreach 外面,一段
在 foreach 里面。
其呈现就如下...
> look
Lv86.王宫侍女(Court Lady)
Lv90.一对约会的情侣(Lovers) [2位]
Lv80.一队王城守卫军(Guard) [5位卫兵]
Lv76.菲里德城民(Felid Older)
Lv65.菲里德城民(Felid Woman)
Lv70.菲里德城民(Felid Man)
> call here;test_shows
你对着前方击出一道强大的剑气!
王宫侍女受了点伤,但没大碍。
「王宫侍女受了点伤,但没大碍。」
一对约会的情侣受了点伤,但没大碍。
「一对约会的情侣受了点伤,但没大碍。」
一队王城守卫军受了点伤,但没大碍。
「一队王城守卫军受了点伤,但没大碍。」
菲里德城民受了点伤,但没大碍。
「菲里德城民受了点伤,但没大碍。」
菲里德城民受了点伤,但没大碍。
「菲里德城民受了点伤,但没大碍。」
菲里德城民受了点伤,但没大碍。
「菲里德城民受了点伤,但没大碍。」
这就是上次提到的部份,由上面可知理论上是可行的,
星期三再来实作看看,新指令名预定 forces。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 223.141.133.149
1F:→ laechan :该上班了.. 03/20 09:04
2F:→ nahceal :cheer 03/21 05:02