scottish-fold
一個關于騎馬與砍殺的劇本簡單快速的制作工具
前言
?在很久以前的時候,也就是剛開始玩騎砍的時候就想著能夠制作一個自己的劇本,用于書寫自己想要的故事。當我懷著遠大的夢想去這么做的時候才發現,原來制作劇本沒有自己想象的那么簡單。擺面前的最大的問題就是我要學習python這樣的語言,其次還有騎砍自己的語言(ModuleSystem)。那對于沒有編程經驗的小白來說,簡直太復雜了,想要制作一個功能是那么的困難。就算想要為這個游戲中增加一個自己的城堡,都要學習大量的代碼,也要修改大量的代碼,經過無數次測試,才能在龐大的地圖上顯示一個小小的城堡(我以前成功添加自己城堡的時候,簡直高興得不行)。制作一個城堡都這么復制,那么如果我想要增加一個國家呢?那又是一個非常復雜的代碼。在我們理想的地圖上添加一個人,一個城堡,一個國家,甚至是一個復雜的功能(種地,開店,經營村莊,管理城堡,巡邏隊,陣型系統,銀行系統,招降劫匪,稱號系統,官職系統,想要成為國王,國家與國家之間的外交等等),都需要學習騎砍大量的代碼和看無數的教程才能夠做出一點點成果。當我們攢足了勇氣和時間輕輕打開入門教程和各個大神的功能代碼時,你才發現,原來代碼是那么地長和難于理解,不是有了勇氣和時間就能夠解決的。那么,制作劇本能不能不要這么復雜,能不能只要稍微修改一點點的東西,就能夠生成我想要系統呢?
?然后我就找啊找,發現,中間使用了各種工具( txt修改器、魔球等),他們是非常優秀的制作工具,讓我節省了不少的時間(我以前修改了一個劇本,看我帖子就知道了),可是,當我想要制作另一個劇本時,你就會發現這些功能可能需要再重新復制粘貼一次,甚至有一些功能還不能使用,而復制粘貼也沒有那么簡單,需要注意的地方還是有很多。一不小心,就會導致功能不能使用。本以為除了這些功能就沒有其它問題了,其實不是這樣子的,還有很多的問題,模型導入,特效的制作等等,都比較復雜。那么,我又在想,能不能簡單一點地去制作劇本呢?我只是一個想要制作劇本的人,為什么不能把精力只放到劇本制作上面?為什么只有成為編程的大神才能制作我想要的劇本呢?
?我從2009年開始玩騎砍到2019年,時間好長,一直都想要制作劇本,每一次鼓起勇氣,都被代碼的復雜和繁瑣所打敗,當然我也不能為自己的懶惰而辯護(哈哈,其實就是懶)。
?就在上一個月,學校的效益不好(有一些認識我的人,知道我在學校工作),我就選擇了辭職。在這將近半個月的時間,我就把騎砍劇本制作又拿出來了。這次,我就想著,一定要制作一個工具,讓制作劇本更簡單,然后制作一個自己理想的劇本【戰國群雄】(我一直都想要制作的劇本,也有一些騎友只知道)。為了讓劇本制作的人員更簡單快速制作劇本,我就制作了這一個工具。到底有多簡單,就那看這個工具的制作手冊吧。當然,我會簡單介紹一個這個工具,讓大家了解它是多么地簡單。
?當然,我現在沒有了工作,那就沒有了收入來源,所以我要盡快努力找到工作。本來我想將這個工具制作完成,然后將戰國群雄劇本制作完成,然后再讓大家使用這個工具(不是我自私,而是工具沒有制作好,會有很多的BUG,大家在用的時間遇到很多問題,肯定會給大家帶來不便,有一些不友好的可能還會罵我)。但現在不得不拿出來,是因為我要在過年時間為找下一份工作作準備。
?最后希望大家能夠喜歡這個工具,也希望大家能夠使用該工具完成自己的劇本(工具還沒有完善,所以肯定會遇到很多問題,而過年我又沒有時間為大家解答,所以很抱歉,希望大家能夠理解)。
?我將使用這個工具的人分成了兩種
劇本制作者:只制作劇本,不需要寫任何功能
工具制作者:完善這個工具,需要寫很多的代碼
工具介紹
?這個工具是一個沒有界面的工具,制作者只需要修改配置文件(config.py),系統就會自動幫助制作者快速生成大量的代碼。所以對于劇本制作者來說,只要了解這一個文件就行了,其它文件是工具制作者的任務。
?工具中有三個文件夾
?1.make:工具代碼全部都在這個文件夾中
?2.script:劇本代碼全部都在這個文件夾中(暫時只支持1.011版本,也就是原版,戰團還不支持,如果你是工具制作者,那這個工具對你來說就沒有任何限制了)
?3.start:劇本的配置文件和運行都在這個文件夾中,配置文件(config.py),運行文件(run.py),你每一次修改文件都要運行才能讓你的修改生效(有時間運行可能需要運行兩次,制作過劇本的人應該都了解)。
需要環境
須要安裝python2.7的環境,(3.x以上的沒有測試過)
1.劇本制作者
?在這里,我們討論的內容是配置文件(config.py),對于劇本制作者,你只需要了解這一個文件就行
?我給劇本制作者暫時提供的功能有(還有很多的功能在我腦子里,沒有實現)
1.添加國家:快速生成一個國家
2添加領主:快速生成一個領主
3.添加士兵:快速生成一個兵種
劇本路徑
在config.py文件中開頭就有這個配置,用于指定劇本在哪個文件夾中,使用以下功能時一定要記得修改這個配置。
### modPath = "劇本的路徑"
modPath = "D:/game/Mount&Blade/Modules/Native/"
1.添加國家
如果你想要在地圖上添加一個新的國家,那么你只需要寫的內容如下:
factions=[
{}
]
#這對花括號【{}】就是你的國家,運行一下工具你就會發現,一個新的國家已經生成,并為這個國家,生成一個國王和20個領主14個兵種,國家id是fac_kingdom_1,國家的名字也是這個,生成的內容包含,國王,文化,領主,兵種,和隊伍模板,只是里面的數據會按照一些簡單的規則生成(如:國名和人名等),有一些信息會隨機生成(裝備,武器熟練度,顏色,容貌等)
##運行一個你的游戲看下,是否已經生成了 ^_^,開心不!
如果你想要生成5個國家,非常簡單
factions=[{},{},{},{},{},]
如果你對自動生成的信息不滿意,那你還可以這樣寫(屬性如何不提供,就會自動生成)
#以斯瓦迪亞國家為例
factions=[
{
"fac_id":"kingdom_1",#國家id
"fac_name":"Kingdom of Swadia",#國家名稱
"color":"0xDD8844",#國家的顏色
"king":swadian_kings[0],#國家的國王
"lords":swadian_lords,#國家的領主
"lord_items":swadian_lords[random.randint(0,len(swadian_lords)-1)]["items"],#其它領主的裝備
"lord_max_num":20,#國家共有領主數量(不包括女人和士兵)
"troops":swadian_troops,#指定國家的士兵信息
},
]
2.添加領主
1.添加國王
添加國王需要使用到國家配置中的king屬性
"king":{}
# 這樣就可以了,會為新的國家生成一個國王信息,只是所有的屬性都是自動生成的。
那我們也可以指定如下信息:
"king":{
"id":"kingdom_1_lord", #國王的id
"troop_name":"King Harlaus",#國王的名字
"flag":"tf_hero",#國王的兵種標識
#國家的裝備信息
"items":"[itm_charger,itm_rich_outfit,itm_blue_hose,itm_iron_greaves,itm_plate_armor,itm_gauntlets,itm_bastard_sword_b,itm_tab_shield_heater_cav_b,itm_great_helmet,]",
#國王的屬性
"attr":"knight_attrib_5",
#國王的武器熟練度
"wp":"wp(220)",
#國家的技能(騎術,強弓等)
"skill":"knight_skills_5|knows_trainer_5",
#國王的容貌
"face1":"0x0000000f45041105241acd2b5a66a86900000000001e98310000000000000000",
#對于英雄來說,沒有用,當然可以不用配置的
"face2":"swadian_face_older_2",
},
如果你想運行成功,一定要把king這個配置放到指定的國家中才可以,記得我們之前的國家配置嗎?
完整代碼如下:
#以斯瓦迪亞國家為例
factions=[
{
"fac_id":"kingdom_1",#國家id
"fac_name":"Kingdom of Swadia",#國家名稱
"color":"0xDD8844",#國家的顏色
#以哈勞斯國王為例
"king":{
"id":"kingdom_1_lord", #國王的id
"troop_name":"King Harlaus",#國王的名字
"flag":"tf_hero",#國王的兵種標識
#國家的裝備信息
"items":"[itm_charger,itm_rich_outfit,itm_blue_hose,itm_iron_greaves,itm_plate_armor,itm_gauntlets,itm_bastard_sword_b,itm_tab_shield_heater_cav_b,itm_great_helmet,]",
#國王的屬性
"attr":"knight_attrib_5",
#國王的武器熟練度
"wp":"wp(220)",
#國家的技能(騎術,強弓等)
"skill":"knight_skills_5|knows_trainer_5",
#國王的容貌
"face1":"0x0000000f45041105241acd2b5a66a86900000000001e98310000000000000000",
#對于英雄來說,沒有用,當然可以不用配置的
"face2":"swadian_face_older_2",
},
"lords":swadian_lords,#國家的領主
"lord_items":swadian_lords[random.randint(0,len(swadian_lords)-1)]["items"],#其它領主的裝備
"lord_max_num":20,#國家共有領主數量(不包括女人和士兵)
"troops":swadian_troops,#指定國家的士兵信息
},
]
2.添加領主
添加領主需要使用到國家配置中的lords屬性,這個屬性是可以配置多個領主,和配置王國有一點不同,不過他們的屬性都是完全一樣的。
添加兩個領主信息
"lords":[{},{}]
為領主增加詳細的信息
"lords":[
#克拉格斯
{
"id":"knight_1_1",#領主id
"troop_name":"Lord Klargus",#領主名字
"flag":"tf_hero",#領主標識
#領主裝備
"items":"[itm_saddle_horse,itm_courtly_outfit,itm_heraldic_mail_with_surcoat,itm_nomad_boots,itm_splinted_greaves,itm_great_helmet,itm_sword_medieval_c,itm_scale_gauntlets,itm_tab_shield_heater_cav_a,]",
#領主屬性
"attr":"knight_attrib_1",
#領主的熟練度
"wp":"wp(130)",
#技能
"skill":"knight_skills_1|knows_trainer_1|knows_trainer_3",
#容貌
"face1":"0x0000000c3e08601414ab4dc6e39296b200000000001e231b0000000000000000",
#對于英雄沒有用
"face2":"swadian_face_middle_2",
},
#普拉伊斯
{
"id":"knight_1_2",
"troop_name":"Lord Plais",
"flag":"tf_hero",
"items":"[itm_steppe_horse,itm_gambeson,itm_heraldic_mail_with_surcoat,itm_blue_hose,itm_mail_boots,itm_nasal_helmet,itm_scale_gauntlets,itm_fighting_pick,itm_tab_shield_heater_c,]",
"attr":"knight_attrib_2",
"wp":"wp(160)",
"skill":"knight_skills_2",
"face1":"0x0000000c0f08000458739a9a1476199800000000001fb6f10000000000000000",
"face2":"swadian_face_old_2",
},
]
完整代碼:
#以斯瓦迪亞國家為例
factions=[
{
"fac_id":"kingdom_1",#國家id
"fac_name":"Kingdom of Swadia",#國家名稱
"color":"0xDD8844",#國家的顏色
"king":swadian_kings[0],#國家的國王
"lords":[
#克拉格斯
{
"id":"knight_1_1",#領主id
"troop_name":"Lord Klargus",#領主名字
"flag":"tf_hero",#領主標識
#領主裝備
"items":"[itm_saddle_horse,itm_courtly_outfit,itm_heraldic_mail_with_surcoat,itm_nomad_boots,itm_splinted_greaves,itm_great_helmet,itm_sword_medieval_c,itm_scale_gauntlets,itm_tab_shield_heater_cav_a,]",
#領主屬性
"attr":"knight_attrib_1",
#領主的熟練度
"wp":"wp(130)",
#技能
"skill":"knight_skills_1|knows_trainer_1|knows_trainer_3",
#容貌
"face1":"0x0000000c3e08601414ab4dc6e39296b200000000001e231b0000000000000000",
#對于英雄沒有用
"face2":"swadian_face_middle_2",
},
#普拉伊斯
{
"id":"knight_1_2",
"troop_name":"Lord Plais",
"flag":"tf_hero",
"items":"[itm_steppe_horse,itm_gambeson,itm_heraldic_mail_with_surcoat,itm_blue_hose,itm_mail_boots,itm_nasal_helmet,itm_scale_gauntlets,itm_fighting_pick,itm_tab_shield_heater_c,]",
"attr":"knight_attrib_2",
"wp":"wp(160)",
"skill":"knight_skills_2",
"face1":"0x0000000c0f08000458739a9a1476199800000000001fb6f10000000000000000",
"face2":"swadian_face_old_2",
},
]
"lord_items":swadian_lords[random.randint(0,len(swadian_lords)-1)]["items"],#其它領主的裝備
"lord_max_num":20,#國家共有領主數量(不包括女人和士兵)
"troops":swadian_troops,#指定國家的士兵信息
},
]
我給出的都完全的配置信息,只要你希望任何一個屬性自動生成,都可以省略不寫,連屬性名稱都不用寫了。就像我們開始時,只要給一個花括號就可以了。
如果你想隨機生成3個領主代碼如下:
"lords":[{},{},{}]
那如何我想生成300個領主呢?代碼如下(使用lord_max_num屬性可以快速生成300個領主):
"lord_max_num":300,#國家共有領主數量(不包括女人和士兵)
3.完整案例
創建一個新的國家,國家名字叫china,顏色為大紅色
factions=[
{
"fac_id":"kingdom_6",#國家id(1-5,已經被系統國家所使用,要么不要指定,要么指定一個5以上id)
"fac_name":"Kingdom of china",#國家名稱
"color":"0xFF0000",#國家的顏色
"king":{
"id":"kingdom_6_lord", #國王的id(要么不指定,要么指定5以上的編號)
"troop_name":"King mao",#國王的名字
"flag":"tf_hero",
#國家的裝備信息
"items":"[itm_charger,itm_rich_outfit,itm_blue_hose,itm_iron_greaves,itm_plate_armor,itm_gauntlets,itm_bastard_sword_b,itm_tab_shield_heater_cav_b,itm_great_helmet,]",
#國王的屬性
"attr":"knight_attrib_5",
#國王的武器熟練度
"wp":"wp(220)",
#國家的技能(騎術,強弓等)
"skill":"knight_skills_5|knows_trainer_5",
#國王的容貌(這個是哈勞斯國王容貌,你也可以改成其它的)
"face1":"0x0000000f45041105241acd2b5a66a86900000000001e98310000000000000000",
#將【艾車莫爾】這個城堡給國王,這個屬性也可以應用到國家,國王,領主
"cities":["p_town_17"]
},
"lords":swadian_lords,#國家的領主(使用哈勞斯國王全部手下信息)
"troops":swadian_troops,#指定國家的士兵信息(使用哈勞斯國王的兵種,當然,你也可以學習下一章的內容,然后添加屬于自己的兵種)
#將【烏魯茲達克堡】這個城堡給新增的國家,最后分給哪個領主,是隨機的
"cities":["p_castle_22"]
},
]
3.添加兵種
添加兵種和領主都大致差不多
生成兩個兵種
#指定國家的士兵信息
"troops":[
{},{}
],
詳細信息配置
"troops":[
#芮爾典新兵
{
"id":"swadian_recruit",
"troop_name":"Swadian Recruit",
"flag":"tf_guarantee_armor",
"items":"[itm_scythe,itm_hatchet,itm_pickaxe,itm_club,itm_stones,itm_tab_shield_heater_a,itm_leather_cap,itm_felt_hat,itm_felt_hat,itm_shirt,itm_coarse_tunic,itm_leather_apron,itm_nomad_boots,itm_wrapping_boots,]",
"attr":"def_attrib|level(4)",
"wp":"wp(60)",
"skill":"knows_common",
"face1":"swadian_face_younger_1",
"face2":"swadian_face_middle_2",
},
#芮爾典民兵
{
"id":"swadian_militia",
"troop_name":"Swadian Militia",
"flag":"tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_shield",
"items":"[itm_bolts,itm_spiked_club,itm_fighting_pick,itm_boar_spear,itm_hunting_crossbow,itm_tab_shield_heater_a,itm_padded_cloth,itm_leather_armor,itm_leather_cap,itm_arming_cap,itm_padded_coif,itm_ankle_boots,itm_wrapping_boots,]",
"attr":"def_attrib|level(9)",
"wp":"wp(75)",
"skill":"knows_common",
"face1":"swadian_face_young_1",
"face2":"swadian_face_old_2",
},
]
如果你希望自動生成兵種,并且要控制兵種的特點:
## 兵種類型有infantry(步兵)、crossbowman(弩兵)、knight(騎士)、spearman(槍兵)、archer(弓兵)、horse_archer(騎射兵)
## infantry1:生成一個1級的步兵
## crossbowman2:生成一個2級的弩兵
## spearman4:生成一個4級的槍兵
## 等級越高裝備越好,技能越高,傷害越高(最高大概7級,每一個兵種等級不同,超過最高級全按最高級生成)
"autoTroops":["infantry1","crossbowman2","spearman4"],
4.添加城堡(未完成)
設想:我的想法就是指定城堡的名稱、角度、位置,等就自動生成一個城堡,包含城堡地形,管理者,武器商人,鎮長(村長)等等一系列信息。
【偽配置】
cities=[
{
"id":"town_1",#城堡id
"city_name":"Sargoth",#城堡名稱
"icon":"icon_town|pf_town",#城堡圖標
"fac":"fac_neutral",#城堡陣營
"behavior":"ai_bhvr_hold",#城堡ai行為
"location":"(-1.55, 66.45)",#城堡的地點
"coordinate":"170"#城堡的角度
}
]
5.添加功能(未完成)
設想:我的想法就是直接在配置文件中開啟該功能就可以了,不用寫任何的代碼。
【偽代碼】
functions={
#巡邏隊功能
"patrols":{
"enable":True,#開啟巡邏隊功能
"village_num":2,#村子巡邏隊數量
"castle":4,#城堡巡邏隊數量
"town":8#城堡巡邏隊數量
},
#勸降劫匪功能
"persuade":{
"enable":True
}
}
6.添加裝備(未完成)
設想:所有裝備模型都按照一定的格式存放到網絡上的倉庫,添加配置信息時提供模型編號,運行劇本后,自動下載和更新裝備信息。不用再手動添加裝備模型和編寫任何代碼。
運行劇本
運行run.py文件就可以了.
自動生成中文文件(未完成)
根據國家,英雄,士兵,城堡,自動更新劇本中語言文件,如:troops.csv、item_kinds.csv等文件,實現一勞永逸的效果。
2.工具制作者
?我知道,這個工具還有很多的功能要做,還有很多的代碼要寫,靠我一個人,肯定是速度很慢,特別是添加功能這個想法,功能有很多,也需要寫很多的代碼,需要python的大神和ms的大神共同來完成這樣的功能,如果你喜歡這個工具,并想為這個工具添加自己的功能和設想,或者你想查看這個工具的實現代碼。以下提供了代碼的下載路徑