LV. 42
GP 33k

RE:【問題】讓玩家"自由"合成武器的可能性提問討論~

樓主 解凍豬腳 johnny860726
GP10 BP-
 
單就你的標題來論的話

根據我 11 年的 coding 經驗,可以告訴你這一定可行

其實無論是 RMXP、RMVX、RMVA、RMMV

這些遊戲的系統都是先把內核建好,然後才另外寫腳本上去的

所以只要你懂得改這些 code,甚至自己生一套新的系統出來,遊戲的玩法可以完全不一樣

所以只有「如何做」的問題,沒有「做不做得到」的問題

我還是建議你,身為一個遊戲製作者,總要學著 coding,不要用現成的插件

因為一旦你想靠現成的插件來更改你的遊戲系統,那你的系統就會被那個插件的作者侷限了

懂得 coding,才能做出完全符合自己心意的系統



這個暫且不談,回正題

像以往我們的資料庫都是一個武器很多種屬性,這些數值個別設定

如果你想要自由合成武器的話,必須先注意一件事情就是「擴展性」



所謂的擴展性何解?

例如:今天有三種弓,分別是木弓、鋁弓、鈦合金弓

你可以把這些弓設定一個基礎數值,例如木弓的攻擊力是 21

那你就令掉寶的時候設定攻擊力為 21±3(隨機),然後你可以鑲嵌寶石進去

這些寶石有屬性,例如紅寶石有火焰持續燃燒三回合各 20 傷害效果、綠寶石有中毒無限回合扣 5 點生命效果,黃寶石有混亂三回合效果

那你可以重寫(或修改)道具、裝備欄、戰鬥系統,不要再只是以 { {物品編號, 數量}, {物品編號, 數量}, ... } 來儲存,而是以自訂的格式來儲存你想要的資料

例如木弓的編號是 1、鋁弓的編號是 2、鈦合金弓的編號是 3

紅寶石編號是 4、綠寶石的編號是 5、黃寶石的編號是 6

攻擊力(的記號)是 7、防禦力(的記號)是 8、可鑲嵌最大數量(的記號)是 9

而木弓的基礎數值如下:
編號:固定為 1
攻擊力:21±3(即 18+rand(7))
可鑲嵌最大數量:0~5(即 rand(6))

那你就可以將資料格式如此設計:

攻擊力 22、4 個鑲嵌欄位的木弓:{1, 7, 22, 9, 4, 0, 0, 0, 0}

(這裡的 array 我就不用中括號了,反正只是講觀念)

鑲上一個黃寶石的木弓:{1, 7, 22, 9, 4, 6, 0, 0, 0}

再鑲上一顆紅寶石的木弓:{1, 7, 22, 9, 4, 6, 4, 0, 0}

然後再把這個 array 塞進你自訂的物品欄的 array,變成一個二維的 array(當然你也可以用 hashtable 來存資料)

就可以完整保存各式各樣不同類型的武器在物品欄裡面了

等戰鬥的時候再來判斷你的武器有鑲嵌什麼東西,然後把這個效果計算進去



那當然,這樣設計的優點就是,屬性都是「可擴充」的

假設今天你想要增加一個屬性叫做耐久度,編號為 10

而這個武器的耐久度跟最大耐久度分別是 20 和 25

那你就再 push 兩個元素進去變成 {1, 7, 22, 9, 4, 6, 4, 0, 0, 10, 20, 25}

這樣在設計耐久度系統的時候,就可以判斷武器的耐久度上限跟現在的耐久度為何



再來就是如何解析格式的問題了

所謂的解析格式你可以先從這個 array 的第一個元素開始下手

假設你統一第一個元素都是這個武器的基礎類型(如木弓)

那你就讓解析系統發現它的第一個元素是 1,就知道這是木弓

接下來再看第二個元素,發現是 7,得知這是攻擊力的記號,所以知道下一個欄位儲存的東西表示它的攻擊力,得到 22

接下來看第四個元素,發現是 9,得知接下來的欄位儲存的東西表示物品可以鑲嵌的最大數量,得到 4

所以我們可以知道接下來 4 個欄位儲存著這個物品的鑲嵌狀態,得到「黃寶石、紅寶石、空、空」

結束以後,我們再發現下一個欄位編號為 10,得知接下來的兩個欄位用來表示耐久度與最大耐久度,得到是 20/25

那如果你今天想要讓玩家可以命名

首先你需要設計一個讓玩家可以輸入字串的介面(這個我應該不用多提了吧,方法有很多,那像 RMMV 要讓使用者輸入字串應該會更簡單)

然後設計一個記號來表示下一個欄位是武器的專屬名稱,假設 11 用來表示「下一個欄位儲存的是武器的專屬名稱」

那就可以:{1, 7, 22, 9, 4, 6, 4, 0, 0, 10, 20, 25, 11, '聖誕老公弓'}

你會發現,只要事先像這樣設計好每個編號後面會有多少個固定的欄位,然後用固定步驟去解析它,就可以自由儲存各式各樣的道具內容了

以上是資料格式的設計方法



接下來談製作方法,單論這種憑空生出武器的方法,你可能會需要自己建立一個數學模型出來

譬如木頭多的話就比較容易製造出木弓而不是鈦合金弓

你要去決定「什麼東西影響製成的武器的基礎類型?怎樣比較容易製造出劍?怎樣比較容易製造出弓?怎樣比較容易製造出法杖?製造原料限制幾個?越多一定越好嗎?」

然後也是為每個物品設計一個 array,例如 1 用來表示製造劍的係數,2 用來表示製造弓的係數,3 用來表示製造法杖的係數,4 用來表示木頭屬性的係數、5 用來表示鋁屬性的係數、6 用來表示鈦合金的係數、7 用來表示攻擊力、8 用來表示魔法攻擊

例如魔法石比較容易製造出法杖(係數為 5)、次要是劍(係數為 1),使得攻擊力 +5、魔法攻擊 +14,那就知道 {3, 5, 1, 1, 7, 5, 8, 14} 用來表示魔法石的製造意義

然後原木比較容易製造出法杖(係數為 5)、次要是弓(係數為 3),製造出來的東西比較像木頭,攻擊力 +2,魔法攻擊會 -2,所以原木的製造意義表示為 {3, 5, 2, 3, 4, 5, 7, 2, 8, -2}

當你用魔法石 + 原木製造的時候,發現杖係數(#3)的計算結果為 5+5 = 10、攻擊力係數(#7)的計算結果為 5+2 = 7,魔法攻擊係數(#8)計算結果為 14-2 = 12,接著讓系統去和其他武器類型的係數比較,接著再用機率去算

這樣算下來,魔法石 + 原木製造的時候,杖係數總和為 10、弓係數總和為 3、劍係數總和為 1

10+3+1 = 14(分母)

於是使得製造出法杖的機率為 10/14、製造出弓的機率為 3/14、製造出劍的機率為 1/14,攻擊力為 (5+2)±某個浮動數值,魔法攻擊為 (14-2)±某個浮動數值

當然解析系統同樣要自己生出一套出來,但因為有固定的格式來儲存,所以一定可以做得出 SOP 來計算這些東西,一個一個元素去分別加加減減或是哪些同質的東西分成一組

這樣就可以以原料的屬性來決定概率,並且隨機依照比例得出不同物件及不同屬性的方法,因為摻入了隨機的元素,所以得出來的東西可能性又更多了

至於耐久度、魔法攻擊等等屬性,也都可以基於這個系統去擴充,增加更多功能,整個系統都是活的,這就是擴充性



你會發現以上這些東西其實數學基礎不需要太好

頂多是加減乘除(除非你有特殊需要才用到其他的數學)

但是既然要寫出一個有彈性的東西

就必須自行建立完整的流程和數學模型來支持機率計算等環節



因為這是 coding 層面的東西

所以不要說 RMMV 了,就算你今天是用 RMXP 也做得出來

只要能像以上這樣想得出一套可解析、可擴充的流程和編制

要做這樣的系統是很簡單的

其實我上面舉的例子也是剛剛隨便想出來的

有很多地方是可以優化、加強,這個就需要時間來多方確認流程會不會有漏洞

這裡就考驗如何設計一個完善有結構又能擴充的系統了
 
10
-
未登入的勇者,要加入討論嗎?
板務人員:

2673 筆精華,09/04 更新
一個月內新增 4
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】