作者laechan (小太保)
看板mud_sanc
标题[法师] 物品合成系统概述
时间Wed Aug 17 16:44:35 2011
这个东西的资料结构在定义之前,要先从指令谈起,合成
一般有两种情况
> 合成 a,b
> 合成 a,b,c
上面是假设 a,b 可以合成 s、而 a,b,c 却成合成 t 的情
况,一般来说比较简单的定义方式就是..
mapping data=([
"s的档案":({"a的档案","b的档案",}),
"t的档案":({"a的档案","b的档案","c的档案"}),
]);
但是上面的定法有个问题,就是如果 a,b → s,但是 c,d
的合成物品也是 s 时就无法支援。
解决的方法如下..
mapping data=([
"s的档案":({ ({"a的档案","b的档案"}),
({"c的档案","d的档案"}),
}),
"t的档案":({ ({"a的档案","b的档案","c的档案"}), }),
]);
上面就可以看到一个问题,它虽可以解决合成 s 的问题,
却会造成「即便一个物品只有一种合成方式,也得宣告为
二维阵列的浪费」情况。
不过圣殿可以允许这种浪费,所以资料结构大概就是上面
那样,那麽判断的方法就非常简单了..
> 合成 a,b,c
mixed files=({}),keys_data,tmps=({});
int i=0;
object ob,me=this_player();
string tmp,tar_fils;
files=explode(str,",");
foreach(tmp in files)
if(ob=present(tmp,me))
files[i++]=base_name(ob);
// 产生出一组合成物阵列
keys_data=keys(data);
foreach(tmp in keys_data)
{
tmps=data[tmp];
i=sizeof(tmps);
while(i-->0)
{
if(tmps[i]==files) // 有判断到一组合成要素与 files 一样时
{
tar_files=tmp;
break; // 离开回圈
}
}
if(tar_files && tar_files!="") break;
}
if(!tar_files || tar_files=="")
return notify_fail("这些东西不能合成物品喔.\n");
// 通过上述的判断就代表物品可以被合成, 而且合成後
// 的物品档案即是 tar_files
各位 wiz 们可参考,我自己本身就是希望同一件物品可
以有两种以上的合成方式,这样圣殿链金术士的物品合成
技能才会比较好玩一些。
後续设定部份是被合成物品本身一定会设定特殊函数,以
及同一种组合也可以有数量上的变化→让圣殿的物品合成
系统得以独立於其它游戏之外自成一格。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 115.80.198.99