|
楼主 |
发表于 2018-10-6 14:49:31
|
显示全部楼层
本帖最后由 小丑遊戲 于 2018-11-4 01:02 编辑
第一章:MOD概論
騎馬與砍殺MOD系統(MS,全名是ModuleSystem,中文說法是模組系統)是一組Python腳本,藉由編寫python代碼後,將python腳本編譯生成二進制碼的txt文檔。
而後點進遊戲的主程序,程序有選拉式選單可以讓我們選擇要運行的MOD,確認後按進入遊戲,會從Mount&Blade/Module文件夾裡讀取資料,就可以進入遊戲。
基於此,我們可以利用python腳本來修改物品、兵種、人物、任務和對話,以及遊戲的元素,甚至可以顛覆騎砍以往的玩法,做出新的遊戲MOD出來。
由於騎馬與砍殺遊戲主要讀取的是編譯後的txt文檔,而不是python腳本,所以修改txt文檔也可以做出MOD,但是編譯後的txt文檔除了可讀性差之外,要深度的修改則是相當艱難。
開發MOD中有兩種方法,一種是修改官方開放出來的Native的MS腳本,而後編譯生成txt文檔,這種方法是比較正規的。
另一種是修改txt文檔,在歷代的版本中,有著官方或者是民間(非官方)騎砍txt文檔編輯器,其中以開發戰團的txt文檔,魔球編輯器最為盛名。
但是,不管是哪種類型的騎砍文檔編輯器,共通的特點是修改的侷限遠不如用python腳本去修改來的大。
目前,騎砍有分原版跟戰團這兩種類型。
原版主程序1.011版(MS代碼為1.010)為最終版本,在這之前還有0.9、0.89x、0.80x….版本,而有開放相對應的代碼,但是系統卻是不能向下兼容txt文檔。
官方原版不再更新後,重心往戰團開發,戰團的版本中,其遊戲程序能夠向下兼容txt文檔。
戰團目前最新主程序是1.173版本,MS代碼為1.171版。 |
製作MOD工具及配置:
本教學是以程序編輯為主,要編譯Python腳本編程要有以下條列的程序和物件。
• Python程序
• 文檔編輯器
• MS代碼
• 騎馬與砍殺主程序 |
製作MOD是由Python腳本所構成,所以要下載python的程序,
其Python的主頁鏈結:https://www.python.org/
在主頁上,將鼠標滑向Download上,有下拉選單,點選你目前所用的系統,而我則是用Windows 10系統,所以點選Windows,進入下載頁面。
在下載Python的版本中,2.7x和3.x的兩種版本,由於騎砍所運行的Python腳本是用2.6版本(2.5版本也可以),
而這裡提供的是2.7x的版本,這版本騎砍Python腳本其實也可以運用,而3開頭版本的則是行不通,所以下載2.7x版本。
下一頁就是點選要下載檔案,這有分Windows 64位元和32位元的,系統是哪一個位元的就下載哪個。
下載完後按安裝檔,第一步默認下一步,第二步就設置下載的路徑,我的例子是路徑設在D槽後下一步。
到這裡有個安裝設定,其中有個加入環境變量的設定,但是預設是沒有的,所以將他加入設定值然後下一步就開始安裝了,之後慢慢等待,就安裝成功了。
|
如果在安裝設定時沒有將環境變數加入設定值,或者是某個版本中沒有這個選項,需要自己去設置。
沒預設環境變數的話,那編譯python腳本的話絕對會出現錯誤的。
所以,不論是否有在安裝時加入環境變數,手動環境變數這步驟是需要去學習的。
各種版本有各種不同的設定,我這教學是以window 10新版去設定的。
首先要做的是點開電腦本機,然後鼠標在項目的本機中,按下滑鼠右鍵,點選選單的內容。
進入到系統裡面後,點選進階系統設定。會出現系統內容的視窗,在進階的資料中,點選環境變數。
進入到環境變數視窗,在系統變數中選則Path變數後,按下編輯進入編輯環境變數。
如果有在安裝設定中有加入環境變數的設定的話,在列表中會出現D:\Python27\(Python安裝路徑)和D:\Python27\Scripts(此設定不影響騎砍Python腳本運作),這也表示Python環境變數設定完成。
如果沒有,只要按新增,輸入Python安裝路徑之後都按確定就設定成功了。
|
下載完Python並把環境變數加入進去後,就可以開始著手使用Python語言了。
打開Python腳本檔案可以用記事本去開啟,不過記事本的功能簡陋,運用起來不方便。
所以在這推薦用一款文檔編輯器,Notepad++。
雖然說有著其他的文檔編輯器軟件可以使用,但是Notepad++在所有的軟件中,使用性和方便性是屈指可數的,
而它免費和開放原始碼的自由軟件特性,更是讓許多人去使用。
至於使用Notepad++的部分,會在後面部分慢慢講解。下載Notepad++則自行摸索。
Notepad++的官網首頁如下:https://notepad-plus-plus.org/
點選任一個py檔案後按右鍵,點選內容。將開啟方式變更為Notepad++,這樣日後就能夠直接編輯python內部程式碼了。
|
在Notepad++文檔編輯器中,上方選單中點選檢視>文件夾工作區,出現文件夾工作區的區塊。
然後將然將MS代碼檔案夾丟進文件夾工作區的白色區塊,這樣以後只要在那點選檔案就可以開啟了。
|
第二章:MOD內容
現在,已經把基本配置弄完成了,點開Module_system 1.171文件夾。在文件夾裡,有一個build_module的bat批次檔(也是PY程式編寫的)和PY檔案。
在PY檔案裡,有分四種文件:
• header_前綴文件
• process_前綴文件
• ID_前綴文件
• module_前綴文件
header_文件,是屬於MOD中的常數文件,可以去修改的文件,但是在未深入開發時則不建議去變動,所有操作的函數歸類在header_operations.py文件內。
如果真的要定義新的向量,可以在module_文件修改。
process_文件,主要是MOD編譯成數據(數字),因為process_文件是屬於重要的文件,在未確認他的運作流程時千萬別去更動。
ID_文件,主要是運作遊戲內部的單元,是遊戲內部所有事項的索引區塊。
是生成MOD時所建立的臨時文件,在每次的編譯時會重新創建,所以不能去修改,也不能在編譯前將ID_文件刪除。
你也能夠利用ID_文件去檢查所有事項的索引,如果遊戲出現BUG錯誤,會出現錯誤BUG的條列索引,可以在ID_文件中快速查獲。
module_文件,包含的是MOD內容,是我們主要修改的文件。
包含修改兵種、物品、裝備、NPC、對話、場景等等。
*(除了process_文件和build_module的bat批次檔是python語言去編寫,其他的文件都是用MS語法去編寫的。)
最後就是build_module的bat批次檔,他是最主要的編譯執行檔案。
執行這類的檔案,它會自行將py檔案編譯成txt文檔,並覆蓋原先MOD的txt文檔。 |
現在,把原版MOD(Native)文件夾複製,然後貼到 Modules文件夾中,改檔名為test。
再來是進入到test\Module_system 1.171文件夾裡,執行build_module的bat批次檔。
在未修改裡面任何的文件下去執行,結果出現了錯誤。
先查看module_info.py文字內部代碼,有一行是export_dir = "../WOTS/Modules/Native/",
以我的MOD為例,放置MOD的位置在D:/Program Files (x86)/Steam/steamapps/common/MountBlade Warband/Modules/test/,
那就要修改export_dir 指向文件夾,修改成export_dir = "D:/Program Files (x86)/Steam/steamapps/common/MountBlade Warband/Modules/test/"。
*若是檔案路徑過長,或者是嫌太麻煩,可以修改成export_dir = "../",指向預設的目錄。
*在MOD系統裡,目錄名是用正斜槓(/)而不是用反斜槓(\),再來就是目錄尾端還要在加上一個正斜槓。
之後再執行一次build_module的bat批次檔,如果運行解果如下面的輸出文字所示,那就代表執行成功。
Initializing...
Compiling all global variables...
Exporting strings...
Exporting skills...
Exporting tracks...
Exporting animations...
Exporting meshes...
Exporting sounds...
Exporting skins...
Exporting map icons...
Creating new tag_uses.txt file...
Creating new quick_strings.txt file...
Exporting faction data...
Exporting item data...
Exporting scene data...
Exporting troops data
Exporting particle data...
Exporting scene props...
Exporting tableau materials data...
Exporting presentations...
Exporting party_template data...
Exporting parties
Exporting quest data...
Exporting info_page data...
Exporting scripts...
Exporting mission_template data...
Exporting game menus data...
exporting simple triggers...
exporting triggers...
exporting dialogs...
Checking global variable usages...
Exporting postfx_params...
______________________________
Script processing has ended.
Press any key to exit. . .
*一般按照上面的流程做下去,是不會出現錯誤的。但如果其他的錯誤訊息,在官方和中文站上有著各種BUG的解決方法,請善用搜索引擎。
[分享]收集:常見py報錯解決方案(4-17更新): by 惡豬
http://bbs.mountblade.com.cn/thread-487284-1-1.html
[分享] 關於製作MOD時常見的bug&以及其解決方法 by 心中飛翔
http://bbs.mountblade.com.cn/thread-360772-1-1.html
編譯完成了,可以到MOD的txt文檔看看,除了game_variables.txt和map.txt沒更新外,其他的txt文檔都已經更新。 |
在MOD的編譯文檔中,雖然有分著四大類,但這四大類之中,每一類又分著不同的項目。
在這四大類的各個項目,雖然有許多是相同的項目,但是也有的是單一種類,下面的條目是用來分類的細則。 |
項目 | 說明 | animations | 動作編輯(順序和總量不能更改) | constants | 變量,slots和其他變量都能在這設定 | dialogs | 對話(單機) | factions | 勢力 | game_menus | 遊戲介面菜單 | info | 指向輸出目錄(輸出txt檔路徑) | info_pages | 記錄裡遊戲概念的文字內容 | items | 物品和裝備的各項設施 | map_icons | 大地圖圖標 | meshes | 圖片定義。例如進入遊戲時的背景圖片,及盾牌上的紋章圖案 | mission_templates | 戰鬥場面的定時觸發器(聯機主要修改內容) | music | 音樂 | particle_systems | 粒子系統。如火焰、閃電、煙霧等等 | parties | 大地圖單位,包含建築、部隊、領主等單位的定義 | party_templates | 大地圖上的部隊模板定義 | postfx | 著色器參數設定 | presentations | 定義介面顯示效果 | quests | 任務,只定義名稱(單機) | scenes | 場景定義,如地形、出生點、水平高度等 | scene_props
| 場景物品,如攻城器具(要有模型)
| scripts
| 處理器腳本文件,讓各大區塊能夠調用
| simple_triggers
| 大地圖觸發器,主要是用於週期檢測觸發器
| skills
| 技能顯示(技能效果寫在string、trigger、script和引擎中)
| skins
| 皮膚、臉及身體定義
| sound
| 音效
| strings
| 字串語句,如進遊戲開新局時出現的介紹字串
| tableau_materials
| 模型材質參數,還有紋章盾牌、衣服等
| triggers
| 大地圖觸發器,用於條件塊和檢測CD、延遲觸發時間觸發器
| troops
| 兵種(升級樹)、領主、國王和NPC等定義
| variables
| 變量(系統)
|
|
項目 | 說明 | header_common | 公共常數 | header_ground_types | 場景類型常數 | header_item_modifiers | 物品修飾名常數 | header_operations | 操作常數 | header_terrain_types | 地勢類型常數 | process_global_variables | 全局變量處理 | process_global_variables_unused | 無用全局變量處裡 | process_init | 初始處理 | process_line_correction | 行列矯正處理 | process_particle_sys | 粒子系統處理 | process_party_tmps | 部隊模板處理 | process_tags_unused | 無用標籤處理 | ID_postfx_params | 著色器變量ID |
|
打開任一個module_的文檔,除了有少數檔案,大致有著三個規格。
引進模組
| 騎馬與砍殺的python腳本,彼此都有引入或者是被引入到各自區塊的程式碼,作為引用參數的模組。(可以了解代碼間的相互關係性) | 代碼講解
| 第二個區塊是用井字號包圍的綠色英文,是講解下面的源代碼大致情況,以及如何簡略的修改參數。(代碼講解很重要,要學習MS代碼的一定要閱讀)
| 源代碼
| 就是我們要修改的項目。
|
|
這個部分我是參考rubik的領軍者這部分,關於領軍者的MOD夾帶著原代碼,下載地址:
【領軍者:技能大修】for戰團1.171版及以上,2018-3-10更新1.439版 by rubik
http://bbs.mountblade.com.cn/thread-120447-1-1.html
將Modules_system 1.171檔案夾改成source,在source檔案內新建一個檔案,名字改為MS File,
然後將header_前綴文件、ID_前綴文件和process_前綴文件全部丟進MS Files檔案內。
接下來就是要修改文檔,而文檔主要修改的部分就是build_module.bat批次檔。
點選build_module.bat批次檔,然後以記事本或者是Notepad++文檔編輯器方式開啟,在@echo off的下一行中輸入:
@del Process_Log.txt
copy ".\MS Files\*.*" ".\" >>Process_Log.txt
再來是在python process_postfx.py下一行中輸入:
@del header_*.py
copy ".\ID_*.py" ".\MS Files\" >>Process_Log.txt
@del ID_*.py
@del process_*.py
存檔後執行就完成了,這個檔案歸檔主要是為了方便查看檔案資料。
*一開始的執行可能會出現 Process_Log.txt找不到的訊息,不過不影響輸出結果,再次執行就沒這問題了。
|
在MS腳本中,許多文件都是上千上萬行的程式碼,一般外行人要理解需要花上相當漫長的時間。
程式註解的主要原因是為了讓程式更容易了解,方便自己或者是其他人。
一般python的註解都是用#來註釋,但如果要大段落的註解,則是用三個單引號或者是雙引號包夾。
註釋區在編譯時會忽略不去編譯。
|
第三章:module_items物品(待編輯)
到了第三章,可以正式開始編寫騎砍MOD的python腳本,來做出我們世界觀的騎砍MOD。
在這個章節中,教導如何新增物品,修改參數設定值等。
下面例子是練習劍practice_sword 的元組列表,包含在items框格內。
["practice_sword","Practice Sword", [("practice_sword",0)], itp_type_one_handed_wpn|itp_primary|itp_secondary|itp_wooden_parry|itp_wooden_attack, itc_longsword, 3,weight(1.5)|spd_rtng(103)|weapon_length(90)|swing_damage(22,blunt)|thrust_damage(20,blunt),imodbits_none],
[(1)"物品ID",(2)"物品名稱",[(3)("模型名字","特定狀態")],(4)物品種類,(5)物品動作,(6)物品價額,(7)物品屬性,(8)物品類型修飾語,[(9)觸發器],[(10)販賣地點]],
每個物品記錄包含以下條列的意義:(註釋內容)
1. 物品ID:用於被其他MS引用的項目。
2. 物品名稱:物品的名字。
3. 物品模型:
3.1. 模型名字:物品模型的名字。
3.2. 特定狀態:非默認物品狀態。
4. 物品種類:物品使用的效果。詳細部分在header_items.py。
5. 物品動作:物品使用的動作。詳細部分在header_items.py。
6. 物品價額:物品基礎的金額。
7. 物品屬性:按照各種物品的統計數據。
8. 物品類型修飾語:遊戲中物品會在該類型的修飾語而出現在名字前的前綴。
9. 觸發器(可設定的):與物品相關的簡易觸發器列表。
10. 販賣地點(可設定的):物品作為商品可以在設定的販賣地點中找到。
|
*觸發器和販賣地點無設定通常是可以忽略或者是刪除的。
順位 | 特性 | 練習劍內容 | 1 | 物品ID | practice_sword | 2 | 物品名稱 | Practice Sword | 3.1 | 模型名字 | practice_sword | 3.2 | 特定狀態 | 0 | 4 | 物品種類 | itp_type_one_handed_wpn
itp_primary
itp_secondary
itp_wooden_parry
itp_wooden_attack | 5 | 物品動作 | itc_longsword | 6 | 物品價額 | 3 | 7 | 物品屬性 | weight(1.5)
spd_rtng(103)
weapon_length(90)
swing_damage(22,blunt)
thrust_damage(20,blunt) | 8 | 物品類型修飾語 | imodbits_none | 9 | 觸發器(可設定的) | 無設定 | 10
| 販賣地點(可設定的) | 無設定
|
|
如果其他MS文件引用物品ID項目時,要加itm_+物品ID的名字。
以練習劍的ID名是practice_sword,引用的話就成了itm_practice_sword。
*物品ID的特性是專一性,不能有重複的名字,否則編譯時會出錯。 |
顯示在物品欄中的名字,如果有修飾語的會是以前綴名+物品名顯示。 |
簡單的說法是,在同樣一個物品ID,在不同的情形下,模型也會不一樣。
弓弩的箭矢,有些在物品欄和裝備在身是以箭矢袋的模型顯示,用弓箭射出去後顯示的是箭矢模型。
另外是物品欄和裝備在身的模型,以及使用時的模型各是不一樣的。
加設修飾語也能夠改變模型。
目前有這幾種特定狀態模型的設定:
ixmesh_inventory 物品在物品欄時
ixmesh_flying_ammo 物品在飛行中
*射出的箭,子彈,和其他投射類武器,如果不加上這個狀態模型,就會使用默認的模型
ixmesh_carry 物品在身上的時候(裝備物品不使用的狀態下)
下面為模型設定的範例:
("example_item",0) 默認模型狀態設定,一律設為0。
("example_item_inventroy",ixmesh_carry) 裝備在身上時的模型。
("example_item_old",imodbit_old|ixmesh_carry) 物品有前綴名的模型。
|
物品種類,除將主要的物品進行分類外,還能將主要物品分類加上該物品特性的次要特性。
主要物品分類以武器為例,有單手、雙手、長竿、投擲、弓和弩的武器分類。
次要特性則是在主要物品分類的基礎上再加上它所擁有的特性,
例如在巨劍分類在雙手的武器分類外,還可以給它加上破盾、對盾攻擊加成的特效。
物品種類的分類前綴名為itp_type_(一定要有這個分類),特效前綴名為itp_(可有可無)。 |
物品種類(英) | 物品種類(中) | itp_type_horse | 馬匹類型 | itp_type_one_handed_wpn | 單手武器 | itp_type_two_handed_wpn | 雙手武器 | itp_type_polearm | 長桿武器 | itp_type_arrows | 弓箭箭矢類型 | itp_type_bolts | 弩箭箭矢類型 | itp_type_shield | 盾牌類型 | itp_type_bow | 弓箭武器 | itp_type_crossbow | 弩箭武器 | itp_type_thrown | 投擲武器 | itp_type_goods | 貿易貨物類型 | itp_type_head_armor | 頭部防具 | itp_type_body_armor | 身體防具 | itp_type_foot_armor | 腳部防具 | itp_type_hand_armor | 手部防具 | itp_type_pistol | 單手手槍武器 | itp_type_musket | 滑膛槍(雙手步槍)武器 | itp_type_bullets | 子彈類型 | itp_type_animal | 動物類型 | itp_type_book | 書本類型 |
|
物品特點(英)
| 物品特點(中)
| itp_force_attach_left_hand
| 強制綁定左手
| itp_force_attach_right_hand | 強制綁定右手 | itp_force_attach_left_forearm | 強制綁定右臂 | itp_attach_armature
| 綁定腳部
| itp_attachment_mask
| 綁定臉部
| itp_unique
| 唯一的(不會出現在戰利品+商店出售)
| itp_always_loot
| 一定會在戰利品中出現
| itp_no_parry
| 無法格檔
| itp_default_ammo
| 初始彈藥量
| itp_merchandise
| 商品+商店出售
| itp_wooden_attack
| 木頭攻擊聲音
| itp_wooden_parry
| 格檔發出木頭聲音
| itp_food
| 食物
| itp_cant_reload_on_horseback
| 不能在馬背上填裝
| itp_two_handed
| 雙手持握
| itp_primary
| 主要的(未知)
| itp_secondary
| 次要的(未知)
| itp_covers_legs
| 覆蓋腳部
| itp_doesnt_cover_hair
| 不覆蓋頭髮
| itp_can_penetrate_shield
| 穿透盾牌
| itp_consumable
| 可消耗的物品
| itp_bonus_against_shield
| 對盾加成
| itp_penalty_with_shield
| 不能配盾
| itp_cant_use_on_horseback
| 不能在馬背上使用
| itp_civilian
| 市民用品
| itp_next_item_as_melee
| 可設置為近戰武器
| itp_fit_to_head
| 適合頭部
| itp_offset_lance
| 馬背上無法進行長槍衝刺
| itp_covers_head
| 覆蓋頭部
| itp_couchable
| 馬背上可進行長槍衝刺
| itp_crush_through
| 可以擊破盾牌
| itp_remove_item_on_use
| 使用後消失
| itp_unbalanced
| 可以突破格檔
| itp_covers_beard
| 包住鬍子
| itp_no_pick_up_from_ground
| 掉到地面上後無法撿取
| itp_can_knock_down
| 可以將敵人擊倒在地
| itp_covers_hair
| 覆蓋頭髮
| itp_force_show_body
| 強制顯示身體
| itp_force_show_left_hand
| 強制顯示左手
| itp_force_show_right_hand
| 強制顯示右手
| itp_covers_hair_partially
| 包住部分的頭髮
| itp_extra_penetration
| 額外穿透力
| itp_has_bayonet
| 有刺刀
| itp_cant_reload_while_moving
| 無法在移動時填裝
| itp_ignore_gravity
| 忽視重力
| itp_ignore_friction
| 忽視風力
| itp_is_pike
| 是長矛
| itp_offset_musket
| 無法使用雙手手槍
| itp_no_blur
| 無模糊
| itp_cant_reload_while_moving_mounted
| 在移動時無法填裝
| itp_has_upper_stab
| 可以上刺攻擊
| itp_disable_agent_sounds
| 禁止使用代理聲音
| itp_kill_info_mask
| 殺死訊息偽裝
| itp_kill_info_bits
| 殺死訊息位元
|
|
在使用物品(武器或盾牌)做攻擊或者是防守,甚至是走路時,都會有各式各樣的動作。
例如拿著單手劍,有著它的攻擊和防守的動作,但是拿著盾牌時,動作又會改變。
而拿著長矛,獨步攻擊和馬上攻擊又會有不同的動作。
動作名有分兩大區塊,分別有itcf_和itc_的前綴。
區別為itcf_前綴名是指一個的物品動作名,
例如拿著武器往左揮砍即一個動作名稱,右揮砍即另一個動作名稱,上砍、下砍、中間刺擊和隔檔各個有itcf_前綴名稱。
而itc_前綴名是將一些itcf_前綴名和itc前綴名整合在一起,所組成一套的物品使用動作設定。
下面介紹物品動作(itc_)的名稱,至於itcf_和itc_所整合的動作, 在header_items.py的文件有整合。
以下面的itc_greatsword雙手巨劍物品動作為例子,它所擁有的動作如下:
itc_greatsword = itc_cut_two_handed | itcf_thrust_twohanded | itc_parry_two_handed |itcf_thrust_onehanded_lance
雙手巨劍除了有itc_parry_two_handed(雙手格擋)和itc_cut_two_handed(雙手刀)的物品動作外,
還包含 了itcf_thrust_twohanded和itcf_thrust_onehanded_lance單一的動作。
*itc_物品動作在物品中只能放置一個,itcf則不設限。
*若列表上字串有顏色框,則代表此功能並未完全確認。
也不代表著所有為框起來的就是完全確定的,所有的列表的功能僅做為參考使用。
|
物品動作(英) | 物品動作(中) | itc_cleaver | 小刀(不能格擋) | itc_dagger | 匕首(不能格擋) | itc_parry_onehanded | 單手格擋 | itc_longsword | 單手長劍 | itc_scimitar | 單手彎刀 | itc_parry_two_handed | 雙手格擋 | itc_cut_two_handed | 雙手刀(不可刺,無法格擋) | itc_greatsword | 雙手巨劍 | itc_nodachi | 雙手刀斧頭錘子(不可刺) | itc_bastardsword | 單雙手劍 | itc_morningstar | 單雙手刀錘(不可刺) | itc_parry_polearm | 長桿(無法格擋) | itc_poleaxe | 長桿戰斧(鉞,步戟) | itc_staff | 棍棒(揮動) | itc_spear | 矛(無法揮動) | itc_cutting_spear | 騎槍(無法揮動,只能馬下上劈) | itc_pike | 長槍(同巨型騎槍,不可格擋) | itc_guandao | 關刀(馬上不可刺) | itc_greatlance | 巨型騎槍(同長槍,不可格擋) | itc_musket_melee | 步槍 |
|
物品的基礎價格。
在交易技能未達到10級時,在商店購買的價格會比預設的價格高。
除此之外,物品會隨著前綴名的設定而價格有所變動。
貿易商品(也就是雜貨商店)和一般村莊商店,
除了會因為商品內的數量多寡而價格變動外,販賣地點、時間等等其它錯綜雜的關係也會影響到價格。
*最不受價格影響的是作弊商店,但仍然會被交易技能影響到價格。
|
主要的功能是給予不同種類的物件賦予各種不同的屬性及參數。
例如馬類物品給予應有的設定及參數,如給予護甲值、使用難度、速度、操控、衝刺的參數。
下面列表是各種不同屬性的物件所賦予的設定: |
類型(英)
| 類型(中)
| 解釋
| abundance | 充裕度-百分比
0~255 | 在商店和戰利品物品欄中所出現的頻率,以100為基準,最小為0(代表絕對不會出現),
最高數值為255(爆出機率為基準的2.55倍,但不代表一定會出現)。 | weight | 重量-kg | 物品的重量。裝備在身會降低行走的速度,放置物品欄會影響大地圖的行軍速度。 |
|
類型(英)
| 類型(中)
| 解釋
| body_horse | 護甲 | 決定馬匹的護甲值和生命值。
值越大生命和護甲值越高。 | difficulty | 難度 | 騎馬所需要的最低騎術技能點數值 | horse_speed | 速度 | 馬匹速度,值愈大速度越快 | horse_maneuver | 操控 | 馬匹靈活性 | horse_charge | 衝刺 | 馬匹衝撞力度,代表撞上步兵輸出傷害和衝撞後的損失。
值越大,傷害越大,也能撞開越多步兵。 |
|
類型(英)
| 類型(中)
| 解釋
| difficulty | 難度 | 在使用該類武器時所需要最低力量值,如果未達到標準則無法使用 | spd_rtng | 速度 | 武器揮砍和直刺的攻擊速度 | weapon_length | 武器長度 | 以厘米單位,這個設定能決定武器能接觸(攻擊)到的範圍,和實際模型長度無關。 | swing_damage | 砍傷值 | 武器揮砍攻擊所造成的基礎傷害值 | thrust_damage | 刺傷值 | 武器直刺攻擊所造成的基礎傷害值 |
|
類型(英)
| 類型(中)
| 解釋
| weapon_length
| 武器長度
| 以厘米單位,弓弩箭矢的長度,和實際模型長度無關。
| thrust_damage
| 刺傷值
| 箭矢射擊所造成箭矢+弓弩的基礎傷害值
| max_ammo
| 最大箭數值
| 每一袋箭矢的數量
|
|
類型(英)
| 類型(中)
| 解釋
| hit_points
| 生命值
| 盾牌所能承受的最大傷害值
| body_armor
| 護甲值
| 盾牌的防禦值,每次被攻擊到的傷害減少。
| spd_rtng
| 速度
| 切換到盾牌防禦的速度
| weapon_length
| 武器長度
| 盾的覆蓋值,值越大,覆蓋量越大,能保護身體不被箭矢攻擊的作用越大。
|
|
類型(英)
| 類型(中)
| 解釋
| difficulty
| 難度
| 使用弓所需要的最低強弓技能點數值
| spd_rtng
| 速度
| 弓填裝箭矢的速度。弓箭射出後,到填裝箭矢,再次裝弓的速度。
值越大速度越快。
| shoot_speed
| 射速
| 箭射出去的飛行速度,值越大速度越快。
注意,太快可能會穿越近距離的目標而無法對其造成傷害。
| thrust_damage
| 刺傷值
| 弓的基礎傷害值
| accuracy
| 準確度(百分比)
| 射出點和瞄準點的機率重和,100則代表著重和率為100%,較低會影響到射中的機率。
|
|
類型(英)
| 類型(中)
| 解釋
| difficulty
| 難度
| 在使用該類武器時所需要最低力量值
| spd_rtng
| 速度
| 弩填裝箭矢的速度。弩箭射出後,到填裝箭矢,再次裝弩的速度。
值越大速度越快。 | shoot_speed
| 射速
| 箭射出去的飛行速度,值越大速度越快。
注意,太快可能會穿越近距離的目標而無法對其造成傷害。 | thrust_damage
| 刺傷值
| 弩的基礎傷害值 | max_ammo
| 最大箭數值
| 再次填裝前能射出的箭量
| accuracy
| 準確度(百分比)
| 射出點和瞄準點的機率重和,100則代表著重和率為100%,較低會影響到射中的機率。 |
|
類型(英)
| 類型(中)
| 解釋
| difficulty
| 難度
| 使用投擲武器所需要的最低強擲技能點數值
| spd_rtng
| 速度
| 武器填裝速度,即準備投擲下一個投植物的速度。
| shoot_speed
| 射速
| 武器飛射在天空中的速度
| thrust_damage
| 刺傷值
| 武器射擊的基礎傷害值
| max_ammo
| 最大數量值
| 每個投擲武器的最大數量
| weapon_length
| 武器長度
| 厘米代表著武器長度,和實際模型長度無關。
|
|
類型(英)
| 類型(中)
| 解釋
| food_quality
| 食物品質
| 食物對於隊伍士氣的影響,高於或低於50分別會提高和降低士兵的士氣。
| max_ammo
| 最大數量
| 物品能消費的數量
|
|
類型(英)
| 類型(中)
| 解釋
| head_armor
| 謢頭
| 保護頭部降低傷害的數值
| body_armor
| 護身
| 保護身體降低傷害的數值
| leg_armor
| 謢腿
| 保護腳部降低傷害的數值
| difficulty
| 難度
| 在使用該類武器時所需要最低力量值,如果未達到標準則無法使用。
|
|
類型(英)
| 類型(中)
| 解釋
| difficulty
| 難度
| 在使用該類武器時所需要最低力量值,如果未達到標準則無法使用。
| spd_rtng
| 速度
| 子彈填裝的速度。即射出後重新填裝子彈並眇準的速度。
| shoot_speed
| 射速
| 子彈在射出後的飛行速度。
| thrust_damage
| 刺傷值
| 武器射擊的基礎傷害值
| max_ammo
| 最大子彈數值
| 再次填裝前能射出的子彈數量
| accuracy
| 準確度(百分比)
| 射出點和瞄準點的機率重和,100則代表著重和率為100%,較低會影響到射中的機率。
|
|
modules_items在開頭部分是常數,來管理物品的修飾語(modifier),
也就是物品的前綴名,是用來調整物品的參數,依照這些物品賦予的修飾語,來調高或降低物品原有的參數。
例如彎曲的長竿、回火的長劍和活潑的戰馬等,都是由修飾語+物品名而成的。
各種類型的物品,則有各自賦予的修飾語。
例如戰馬,則會有活潑、倔強、老等等修飾前贅詞;
而長竿,則會有精良、平衡、有缺口和斷裂等前贅詞。
戰馬和長竿它們的前綴詞是不能通用的。
在modules_items文件中,有#Some constants for ease of use.的註釋。
內容講述著下方列出常用的類型修飾語,
例如無前綴imodbits_none = 0和馬的前綴
imodbits_horse_basic = imodbit_swaybacked|imodbit_lame|imodbit_spirited|imodbit_heavy|imodbit_stubborn。
仔細觀察後,發現它的條列是,imodbits_修飾語種類 = imodbit_前綴名稱,也就是物品修飾語=遊戲物品名修飾語。
除了這些前綴外,還有其他不同類型所搭配的修飾語。
下面第一個列表列出各項物品種類前綴,而在前面要加上imodbits_,如imodbits_none之類的,
而在=之後的前綴名稱,要加上imodbit_,諸如imodbit_swaybacked,-而這個前綴名稱是「老」。
*除了給該物品種類前綴外,還有就是給物品單一前綴名稱。 |
英
| 中
| 英
| 中
| 英
| 中
| none | 無前綴 | horse_basic | 馬的前綴 | cloth | 布衣前綴 | armor | 盔甲前綴 | plate | 鐵甲前綴 | polearm | 長竿前綴 | shield | 盾牌前綴 | sword | 刀劍前綴 | sword_high | 長劍前綴 | axe | 斧頭前綴 | mace | 槌子前綴 | pick | 長槍/矛前綴 | bow | 弓前綴 | crossbow | 弩前綴 | missile | 箭/矢前綴 | thrown | 投擲武器前綴 | horse_good | 馬好的前綴 | good | 好前綴 | bad | 壞前綴 | thrown_minus_heavy | 重型投擲武器前綴 |
|
物品種類前綴 | 前綴名稱 | none | 0 | horse_basic | swaybacked | lame | spirited | heavy | stubborn | cloth | tattered | ragged | sturdy | thick | hardened | armor | rusty | battered | crude | thick | reinforced | lordly | plate | c*racked | rusty | battered | crude | thick | reinforced | lordly | polearm | c*racked | bent | balanced | shield | c*racked | battered | thick | reinforced | sword | rusty | chipped | balanced | tempered | sword_high | rusty | chipped | balanced | tempered | masterwork | axe | rusty | chipped | heavy | mace | rusty | chipped | heavy | pick | rusty | chipped | balanced | heavy | bow | c*racked | bent | strong | masterwork | crossbow | c*racked | bent | masterwork | missile | bent | large_bag | thrown | bent | heavy | balanced | large_bag | horse_good | spirited | heavy | good | sturdy | thick | hardened | reinforced | bad | rusty | chipped | tattered | ragged | c*racked | bent | thrown_minus_heavy | bent | balanced | large_bag | Unprefixed_name | champion | meek | timid | superb | powerful | exquisite | deadly | sharp | well_made | fine | cheap | old | poor | plain |
|
物品種類前綴
| 前綴名稱
| 無前綴
| 0
| 馬的前綴
| 老 | 瘸腿 | 活潑的 | 重 | 倔強的
| 布衣前綴
| 破爛的 | 破舊的 | 結實的 | 厚 | 加硬
| 盔甲前綴
| 生銹的 | 有凹陷的 | 粗糙的 | 厚 | 加強 | 豪華的
| 鐵甲前綴
| 裂開的 | 生銹的 | 有凹陷的 | 粗糙的 | 厚 | 加強 | 豪華的
| 長竿前綴
| 裂開的 | 彎曲的 | 平衡的
| 盾牌前綴
| 裂開的 | 有凹陷的 | 厚 | 加強
| 刀劍前綴
| 生銹的 | 有缺口的 | 平衡的 | 回火的
| 長劍前綴
| 生銹的 | 有缺口的 | 平衡的 | 回火的 | 極品
| 斧頭前綴
| 生銹的 | 有缺口的 | 重
| 槌子前綴
| 生銹的 | 有缺口的 | 重
| 長槍/矛前綴
| 生銹的 | 有缺口的 | 平衡的 | 重
| 弓前綴
| 裂開的| 彎曲的 | 堅硬的 | 極品
| 弩前綴
| 裂開的 | 彎曲的 | 極品
| 箭/矢前綴
| 彎曲的 | 一大袋
| 投擲武器前綴
| 彎曲的 | 重 | 平衡的 | 一大袋
| 馬好的前綴
| 活潑的 | 重
| 好前綴
| 結實的 | 厚 | 加硬 | 加強
| 壞前綴
| 生銹的 | 有缺口的 | 破爛的 | 破舊的 | 裂開的 | 彎曲的
| 重型投擲武器前綴
| 彎曲的 | 平衡的 | 一大袋
| 未編入物品種類前綴名
| 一流的 | 溫順的 | 膽小的 | 華麗的 | 強有力的 | 精致的 | 致命的 |
鋒利的 | 精良的 | 優質的 | 便宜的 | 舊 | 粗劣的 | 普通的
|
|
觸發器,這個設定是與物品產生相關的事件。
例如,一般的火槍物品,在發射子彈時,所產生的煙硝。
下面則是物品觸發條件設定,使用時加上ti_on_。
ti_on_init_item 裝備在身上時
ti_on_weapon_attack 武器攻擊時
ti_on_missile_hit 被遠程武器擊中時
EX:紋章甲帶外套裝備在身時所觸發的狀況
[(ti_on_init_item, [(store_trigger_param_1, ":agent_no"),(store_trigger_param_2, ":troop_no"),(call_script, "script_shield_item_set_banner", "tableau_heraldic_armor_a", ":agent_no", ":troop_no")])]
*這個範例觸發的所有效果和細節部分礙於本章關係無法一一講解,下面的帖子可以給予參考。
[原創] Module System 簡易觸發判斷教程 by 心中飛翔
http://bbs.mountblade.com.cn/forum.php?mod=viewthread&tid=235962 |
物品販賣的範圍,包含販賣的陣營,地點等設定。
設定如[陣營id]、[地點id]
單一陣營:[fac_kingdom_1] - 只能在斯瓦迪亞陣營商店購買。
地點:[p_zendar] - 只能在禪達商店購買。
複數陣營:[fac_kingdom_2,fac_kingdom_4] - 只能在維吉亞和諾德陣營商店購買。 |
在騎砍的世界中,武器的傷害類型有分三大中,有分砍傷、鈍傷及刺傷。
而防具則分類為無護甲、輕甲,和重甲這兩大區別。
砍傷的特點是以尖銳利刃的武器,作切割的動作,如劍跟斧。
砍傷對於無護甲或者是輕甲防具有著顯著的傷害,
但是對於重甲防具的傷害則是有固定比例的削減,甚至對於高防禦重甲防具,用低攻擊性的砍傷武器則毫無傷害。
如果砍傷對目標(敵人)的生命值降到0或者是以下,則能夠對目標造成死亡。
刺傷的特點是以前端尖銳的武器,作直刺,上刺或者是下刺的穿刺攻擊,以長矛和槍為近戰穿刺武器的代表。
遠程穿刺武器作為代表的則是以弓箭、弩箭和手槍步槍等等類型。
刺傷和砍傷的共通點是在於對目標(敵人)的生命值降到0或者是以下,能夠對目標造成死亡。
相異點就在於不論是對於無護甲和輕甲防具有著顯著的傷害外,對於重甲防具也有著50%的攻擊加成,
但是由於平衡其他武器攻擊類型的設定,刺傷的傷害值通常會設定的比較低。
鈍傷則是以無尖銳無利刃的鈍器,作出攻擊的動作,最具代表性的武器是棒類或者是錘類的武器。
鈍器傷害對於重甲防具有50%的攻擊加成, 但是對於無護甲或者是輕甲防具傷害不像砍傷和刺傷攻擊那麼顯著,
加上這類型的武器如錘類的總體長度偏短,總體傷害也是偏低。
但是他最大的特點是鈍傷對於目標(敵人)的生命值降到0或者是以下時,目標是被擊昏的狀態,
而不是被殺死的情形,通常被擊昏的敵人可以做為俘虜或者是作為奴隸販賣。
另外,衝刺的馬也能發揮鈍傷進行攻擊。
*拿著長矛或者是長槍騎上馬作衝刺狀態,默認或者是武器有衝刺前綴的設定下,正面衝向敵人,也能作出穿刺的傷害。 |
在module_items中,有著各種類型的練習物件,可以提供我們練習編寫參數的設定值。
而這些物件,可以藉由遊戲內的作弊營地的方式,去觀看是否有成功的創建物品。
如果要用的模型是在MountBlade Warband的CommonRes資料夾裡,那可以直接編輯module_items.py增減物品。
反之,如果模型是放置MOD文件的Resource文件夾的話,就必須動到MOD文件中的modules.ini檔案。
在下面的帖子中,有個柴刀模型,可以先進行下載,下載完後解壓,
將裡面的xxx.brf檔案名字改成chaidao.brf,而後分別將brf檔和dds檔各自歸屬在MOD檔案裡的Resource跟Texture資料夾內。
之後用文字編輯器開啟modules.ini檔案,加入一行load_mod_resource = chaidao後存檔。
如果沒做這個步驟,就算編譯時沒出現問題,但進到遊戲中只要出現這個物品就會出現相關BUG的訊息。
[裝備] SixSixCCFF開源模型帖—5-3 一把農具-柴刀 by SixSixCCFF
http://bbs.mountblade.com.cn/thread-535326-1-1.html
做完上面的步驟後,可以開始編譯module_items了。
可以藉由裡面練習劍的設定,來訂製一把自己專屬的物品。
將練習劍的設定複製後貼到items = [ 的下一行和id為items_end的上一行的範圍內,
然後修改ID名和模型名字再進行編譯,就算是完成簡單創件物品的基本條件。
之後可以在作弊商店中看到自訂的物品。若是要大幅度的修改參數,請參考上面的教學。
練習劍的設定:
["practice_sword","Practice Sword", [("practice_sword",0)], itp_type_one_handed_wpn|itp_primary|itp_secondary|itp_wooden_parry|itp_wooden_attack, itc_longsword, 3,weight(1.5)|spd_rtng(103)|weapon_length(90)|swing_damage(22,blunt)|thrust_damage(20,blunt),imodbits_none],
我自訂的物品:
["chaidao","chaidao", [("chaidao",0)], itp_type_one_handed_wpn|itp_primary|itp_secondary|itp_wooden_parry|itp_wooden_attack, itc_longsword, 3,weight(1.5)|spd_rtng(103)|weapon_length(90)|swing_damage(22,blunt)|thrust_damage(20,blunt),imodbits_none],
|
作弊營地除了讓我們使用作弊商店外,還有其他的作弊讓我們能快速的了遊戲方面的BUG,能快速地解決。
但是這個設定在遊戲是隱藏起來的,所以要開啟作弊營地的方法就是稍微修改module_game_menus.py的設定。
首先開啟module_game_menus.py後,尋找camp_cheat,然後有這段程式:
("camp_cheat",
[(ge, "$cheat_mode", 1)
], "CHEAT MENU!",
修改成下方的設定後儲存編譯,就可以開啟作弊營地了。
("camp_cheat",
[(ge, "$cheat_mode", 0)
], "CHEAT MENU!",
|
|
评分
-
查看全部评分
|