作者laechan (小太保)
看板mud_sanc
标题[wizs] 套装制作的另类方式
时间Wed Apr 7 14:38:04 2010
这是取自 party 的构想、在实作上较为简单的方式。
当玩家 wear all 时...
suit_ob=({});
wear all 回圈(obs)
{
suit=eq->query("suit_ob"); // suit=该套装统一控制档
if(suit && member_array(suit,suit_ob)==-1)
suit_ob+=({suit});
}
foreach(suit in suit_ob)
call_other(suit,"check_suit",obs);
它的优点是,假设玩家身上有n件A套装防具、m件B
套装防具时,则此时 suit_ob size 为 2,就会做两次
套装判断。
而若是以前,则会做n+m次判断。
它的另一个好处是套装统一由每一个 suit_ob 定义,透
过适当的设定就可以轻易让管理者管理并浏览所有的套
装,同时可轻易更动所有套装的设定。
这个我最近会找时间实装,完成後会请各 wiz 甚至 ppl
帮忙撰写档案(ppl 会撰写的话给予稿酬,档案很简单),
上面也适用 wear 单一物件的情况。
它的进化式,则是各 suit 统一归纳到同一个大 SUIT 中
,因为 obs 是同一个就能单独传过去,变成..
call_other(SUIT,"check_suit",obs,suit_ob);
即变成内回型式就能增快判断速度。
理论上上述做法没有缺点,但要完全将缺点降到零的话,
最好还是为每一个装备新增 remove_func,这可能也会统
一对 /std/ob/armor.c 做修改。
至於套装统一控制档,它的构成基本如下..
mapping suit_data=([
定义一大堆套装资料, 便於读取及迅速观看理解该套装属性
]);
void check_suit(object me,mixed obs)
{
判断套装;
}
string get_suit_string(object eq)
{
回传套装资料;
// 这里大概会用 switch(base_name(eq)) 来判断
}
指令 view 的修改则以底下为重点..
if(eq->query("suit_ob"))
str+=(string)call_other((string)eq->query("suit_ob"),"get_suit_string",eq);
显示出来的样子就类似..
属性:str+5 con-10
套装:名称─[邪灵杀意]
属性─str+10 con+20 <= 多出来的两行, 即若变成套装
各位 wiz 若觉得这样写 ok,本周会公布相关档案,
有兴趣的也可先行试做。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.225.160.106
1F:推 justinj :...如果10件A套装内有5件可组成B套装..可以用吗?... 04/07 16:33
理论上可以,但是 suit_ob 会写的很复杂,因为它必须先判断
某 eq 有没有先被组成 5 件而不是 10 件,再者就是判断它有
没有已满足 10 件套装。
但是某 eq 可以同时是 A 套装装备也可以同时是 B 套装装备,
唯一的条件是若 eq 已经变 A 套装状态时就不能再是 B 套装状
态。
简单一点假设 A 套装有三件 eq 分别为 A1, A2, C, B 套装有
三件分别为 B1, B2, C, C 就是重覆到的 eq。
则 C 的 suit_ob 可设为 SUIT_A 或 SUIT_B,这是因为要真正
执行 check_suit 的程式段一定是同时穿有 A 或 B 的情况,这
时假若穿了 A1, C, B1, B2,则 SUIT_A 会判断到无法成为套装
, SUIT_B 则会判断到可成为套装,这时 C 就会变成 B 套装的
一部份,而不会再被 A 套装影响到。
(因为 wearing 的判断也会纳入, 已 wearing 的东西不会再被
套装判断到)
这也是写成 suit_ob 的优点之一,这个特点的最大好处就是..
A套装:A1, A2, A3 or A1, A2, A4 or A2, A3, A4 ,..
B套装:A1, A2, A3, A4
因为 suit_ob 是总和判断式的,所以它允许玩家穿任三件时可
以是一件套装,穿上第四件时又是另一个套装。
(我想 deus 应该会对这种设定感兴趣)
我个人比较倾向这样的方式,而不是五件是一套、十件是一套,
因为那会很复杂。多一件是另一套,这样比较好写。
但不管如何 suit_ob 可以突破武防限制,以及不用大幅更动原
先的武防档,是这东西实作的基本用意。
Laechan
※ 编辑: laechan 来自: 61.225.160.106 (04/07 17:27)
※ 编辑: laechan 来自: 61.225.160.106 (04/07 17:28)