[法師] 物品合成系統概述
這個東西的資料結構在定義之前,要先從指令談起,合成
一般有兩種情況
> 合成 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
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
21
49