[法師] 物品合成系統概述

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間14年前 (2011/08/17 16:59), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
這個東西的資料結構在定義之前,要先從指令談起,合成 一般有兩種情況 > 合成 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
文章代碼(AID): #1EIuBWfh (mud_sanc)
文章代碼(AID): #1EIuBWfh (mud_sanc)