Этот гайд является переводом. Оригинал на Taleworlds.
"Многие новые моддеры задавали вопрос о том, как создавать новые города, и этот вопрос продолжает появляться снова и снова. Итак, я решил опубликовать туториал по созданию новых городов."Фильтры:
• Цвет - что нужно искать
• Цвет - что нужно вставить
• Цвет - примечание
• Цвет - исходник
Нам понадобится:
• SceneObj
• module_parties.py
• module_scenes.py
• module_scripts.pyШаг 1.
Скопируйте свой native модуль и переименуйте его во что-нибудь еще, например My Mod. Ни в коем случае не меняйте native модуль.
Настройте module_info.py так, чтобы он указывал на ваш новый модуль.
Запустите build_module.bat
Если нет ошибок, тогда шаг 1 завершен.
Если есть какие-либо ошибки, прочтите документацию по модульной системе постепенно.Шаг 2.
Прежде всего нам нужно определить наш город в module_parties.py.
module_parties состоит из описания всех городов, замков и деревень.
Предположим, наш новый город называется, скажем, Венеция. Итак, мы определим его в module_parties, как показано ниже.Скопируйте запись города и вставьте ее между замком Barriye и Culmarr. "Я скопировал town_1 т.е. Саргот"
```
("town_21","Ahmerrad", icon_town_desert|pf_town, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(130.5, -78.5),[], 330),
("town_22","Bariyye", icon_town_desert|pf_town, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(165, -106.7),[], 225),
("town_23","Venecia", icon_town|pf_town, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(-10, 1),[], 170),
# Aztaq_Castle
# Malabadi_Castle ("castle_1","Culmarr_Castle",icon_castle_a|pf_castle, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(-101.3, -21),[],50)
```
Теперь скомпилируйте свой код. Если нет ошибок, то шаг 2 завершен.
ПРИМЕЧАНИЕ: (-10, 1) — это координаты города на карте. Вы можете найти координаты на карте, используя режим редактирования. Гайд - тык. (Гайд делается)Шаг 3.
Теперь нашему новому городу нужны сцены для замка, таверны, тюрьмы и т.д. Вы можете создавать новые сцены, но в этом уроке мы будем использовать native сцены для нашего нового города. Перейдите в свой ..../Mount&Blade Warband/Modules/SceneObj/ Здесь находятся все файлы сцены. Теперь вам нужно скопировать файлы сцен любого города, который вам нравится. "Я буду копировать следующие сцены из town_16, то есть Dhirim."• scn_town_16_alley.sco
• scn_town_16_arena.sco
• scn_town_16_castle.sco
• scn_town_16_center.sco
• scn_town_16_prison.sco
• scn_town_16_store.sco
• scn_town_16_tavern.sco
• scn_town_16_walls.sco
Переименуйте их в соответствии с вашим city_id (в нашем случае это town_23) и вставьте их в папку SceneObj.• scn_town_23_alley.sco
• scn_town_23_arena.sco
• scn_town_23_castle.sco
• scn_town_23_center.sco
• scn_town_23_prison.sco
• scn_town_23_store.sco
• scn_town_23_tavern.sco
• scn_town_23_walls.scoШаг 4.
Теперь нам нужно определить эти сцены в module_scenes.py следующим образом. Просто скопируйте существующие записи и измените номер города. "Я скопировал коды town_16 и изменил town_16 на town_23."
```
("town_22_center",sf_generate,"none", "none",(0,0),(100,100),-100,"0x000000025a03253200042d08000079d6000004fd00006910",
[],[],"outer_terrain_desert"),
("town_23_center",sf_generate,"none", "none", (0,0),(100,100),-100,"0x0000000130001887000334d0000073ed00004f1a00007a35",
[],[],"outer_terrain_steppe"),
("town_22_castle",sf_indoors, "arabian_interior_keep_a", "bo_arabian_interior_keep_a", (-100,-100),(100,100),-100,"0x00000007300005000002308c00004a840000624700004fda",
["exit"],["town_22_seneschal"]),
("town_23_castle",sf_indoors, "interior_castle_n", "bo_interior_castle_n", (-100,-100),(100,100),-100,"0",
["exit"],["town_23_seneschal"]),
("town_22_tavern",sf_indoors, "interior_town_house_steppe_c", "bo_interior_town_house_steppe_c", (-100,-100),(100,100),-100,"0",
["exit"],[]),
("town_23_tavern",sf_indoors, "interior_tavern_b", "bo_interior_tavern_b", (-100,-100),(100,100),-100,"0",
["exit"],[]),
("town_22_store",sf_indoors, "interior_town_house_steppe_d", "bo_interior_town_house_steppe_d", (-100,-100),(100,100),-100,"0",
["exit"],[]),
("town_23_store",sf_indoors, "interior_town_house_i", "bo_interior_town_house_i", (-100,-100),(100,100),-100,"0",
["exit"],[]),
("town_22_arena",sf_generate,"none", "none", (0,0),(100,100),-100,"0x00000002200005000005f57b00005885000046bd00006d9c",
[],[],"outer_terrain_desert"),
("town_23_arena",sf_generate,"none", "none", (0,0),(100,100),-100,"0xa0001d9300031ccb0000156f000048ba0000361c",
[],[],"outer_terrain_plain"),
("town_22_prison",sf_indoors,"interior_prison_o", "bo_interior_prison_o", (-100,-100),(100,100),-100,"0",
["exit"],[]),
("town_23_prison",sf_indoors,"interior_prison_k", "bo_interior_prison_k", (-100,-100),(100,100),-100,"0",
["exit"],[]),
("town_22_walls",sf_generate,"none", "none", (0,0),(100,100),-100,"0x000000025a00723200046d1b00003e020000147600004387",
[],[],"outer_terrain_desert"),
("town_23_walls",sf_generate,"none", "none", (0,0),(100,100),-100,"0x000000013001c98d0005b56d000072a70000240a00001e09",
[],[],"outer_terrain_steppe"),
("town_22_alley",sf_generate,"none", "none", (0,0),(100,100),-100,"0x000000025a00723200046d1b00003e0200001476000052ae",
[],[],"outer_terrain_desert"),
("town_23_alley",sf_generate,"none", "none", (0,0),(100,100),-100,"0x300bc5430001e0780000448a0000049f00007932",
[],[],"outer_terrain_steppe"),
```
Сохраните файл, скомпилируйте код. Если нет ошибок, то шаг 4 завершен.
ПРИМЕЧАНИЕ: Как вы видите выше, есть значение «outer_terrain_steppe». Он определяет тип окружения в городе и вокруг него. Вы можете изменить это значение на следующие значения в зависимости от местоположения вашего города.
• external_terrain_plain - для равнинных участков
• external_terrain_desert - для пустынных районов
• external_terrain_steppe - для степных районов
• external_terrain_town_thir_1 - особенно для городов нордов
• external_terrain_snow - для заснеженных участковШаг 5.
Теперь мы будем создавать новые войска (NPC) для нашего города, такие как мастер гильдии, торговцы, мастер арены и т. д. Откройте module_troops.py, скопируйте существующие войска (NPC) и вставьте, как показано ниже, под войсками town_22. "Я скопировал все войска town_16."
```
["town_22_seneschal", "{!}Town 22 Seneschal", "{!}Town 14 Seneschal", tf_hero|tf_is_merchant, 0, reserved, fac_neutral,[ itm_blue_gambeson, itm_blue_hose], def_attrib|level(2), wp(20), knows_common, 0x000000000004728b01c293c694944b05],
["town_23_seneschal", "{!}Town 23 Seneschal", "{!}Town 14 Seneschal", tf_hero|tf_is_merchant, 0, reserved, fac_neutral,[ itm_blue_gambeson, itm_blue_hose], def_attrib|level(2), wp(20), knows_common, 0x000000000004728b01c293c694944b05],
["town_22_arena_master", "Tournament Master"," {!}Tournament Master",tf_hero|tf_randomize_face, scn_town_22_arena|entry(52), reserved, fac_commoners, [itm_padded_leather, itm_hide_boots], def_attrib|level(2),wp(20),knows_common,man_face_middle_1, man_face_older_2],
["town_23_arena_master", "Tournament Master"," {!}Tournament Master",tf_hero|tf_randomize_face, scn_town_23_arena|entry(52),reserved, fac_commoners,[itm_fur_coat, itm_hide_boots], def_attrib|level(2),wp(20),knows_common,man_face_middle_1, man_face_older_2],
["town_22_armorer", "Armorer", "{!}Armorer", tf_hero|tf_randomize_face|tf_female|tf_is_merchant, 0, 0, fac_commoners,[itm_sarranid_common_dress, itm_sarranid_head_cloth ],def_attrib|level(5),wp(20),knows_inventory_management_10, woman_face_1, woman_face_2],
["town_23_armorer", "Armorer", "{!}Armorer", tf_hero|tf_randomize_face| tf_is_merchant, 0, 0, fac_commoners,[itm_fur_coat, itm_nomad_boots ],def_attrib|level(5),wp(20),knows_inventory_management_10, mercenary_face_1, mercenary_face_2],
["town_22_weaponsmith", "Weaponsmith", "{!}Weaponsmith",tf_hero|tf_randomiz e_face| tf_is_merchant, 0, 0, fac_commoners,[itm_linen_tunic, itm_sarranid_boots_a],def_attrib|level(5),wp(20),knows_inventory_management_10, mercenary_face_1, mercenary_face_2],
["town_23_weaponsmith", "Weaponsmith", "{!}Weaponsmith", tf_hero|tf_randomize_face| tf_is_merchant, 0, 0, fac_commoners,[itm_shirt, itm_hide_boots],def_attrib|level(5),wp(20),knows_inventory_management_10, mercenary_face_1, mercenary_face_2],
["town_22_tavernkeeper", "Tavern_Keeper", "{!}Tavern_Keeper", tf_hero|tf_randomize_face, scn_town_22_tavern|entry(9),0, fac_commoners,[itm_sarranid_cloth_robe_b, itm_sarranid_boots_a],def_attrib|level(2),wp(20),knows_common, mercenary_face_1, mercenary_face_2],
["town_23_tavernkeeper", "Tavern_Keeper", "{!}Tavern_Keeper", tf_hero|tf_randomize_face, scn_town_23_tavern|entry(9),0, fac_commoners,[itm_leather_apron, itm_hide_boots],def_attrib|level(2),wp(20),knows_common, mercenary_face_1, mercenary_face_2],
["town_22_merchant", "Merchant", "{!}Merchant", tf_hero|tf_randomize_face|tf_is_merchant, scn_town_22_store|entry(9),0, fac_commoners, [itm_leather_apron, itm_leather_boots ],def_attrib|level(2),wp(20),knows_inventory_management_10, man_face_young_1, man_face_older_2],
["town_23_merchant", "Merchant", "{!}Merchant", tf_female|tf_hero|tf_randomize_face|tf_is_merchant, scn_town_23_store|entry(9),0, fac_commoners, [itm_woolen_dress, itm_leather_boots, itm_female_hood ],def_attrib|level(2),wp(20),knows_inventory_management_10, woman_face_1, woman_face_2],
["town_22_horse_merchant", "Horse Merchant", "{!}Town 18 Horse Merchant",tf_hero|tf_randomize_face|tf_is_merchant|tf_female, 0, 0, fac_commoners,[itm_sarranid_common_dress_b, itm_blue_hose, itm_sarranid_felt_head_cloth_b], def_attrib|level(5),wp(20),knows_inventory_management_10, woman_face_1, woman_face_2],
["town_23_horse_merchant", "Horse Merchant", "{!}Town 16 Horse Merchant", tf_hero|tf_randomize_face|tf_is_merchant, 0, 0, fac_commoners,[itm_leather_jacket, itm_hide_boots], def_attrib|level(5),wp(20),knows_inventory_management_10, man_face_young_1, man_face_older_2],
["town_22_mayor", "Guild_Master", "{!}Guild_Master", tf_hero|tf_randomize_face, 0,reserved, fac_neutral,[ itm_sarranid_cloth_robe, itm_sarranid_boots_a], def_attrib|level(2),wp(20),knows_common, man_face_middle_1, mercenary_face_2],
["town_23_mayor", "Guild_Master", "{!}Guild_Master", tf_hero|tf_randomize_face, 0,reserved, fac_neutral,[ itm_fur_coat, itm_leather_boots], def_attrib|level(2),wp(20),knows_common, man_face_middle_1, mercenary_face_2],
["town_22_master_craftsman", "{!}Town 22 Seneschal", "{!}Town 14 Seneschal", tf_hero|tf_is_merchant, 0,reserved, fac_neutral,[ itm_sarranid_cloth_robe_b, itm_blue_hose], def_attrib|level(2),wp(20),knows_common, 0x00000000200c658a5723b1a3148dc455000000000015ab920000000000000000],
["town_23_master_craftsman", "{!}Town 23 Seneschal", "{!}Town 14 Seneschal", tf_hero|tf_is_merchant, 0,reserved, fac_neutral,[ itm_leather_apron, itm_blue_hose], def_attrib|level(2),wp(20),knows_common, 0x00000007680c3586054b8e372e4db65c00000000001db7230000000000000000],
```
Сохраните файл, скомпилируйте код. Если нет ошибок, то шаг 5 завершен.
ПРИМЕЧАНИЕ: Вы заметите длинный буквенно-цифровой код в каждом отряде. Это код лица, определяющий внешний вид каждого отряда. Вы можете получить это, используя режим редактирования в окне персонажа, скопировать его, а затем вставить в свои новые войска (NPC).Шаг 6.
Теперь нам нужно отнести этот город к фракции. "Я добавлю его в свадию." Итак, откройте module_scripts.py и добавьте следующие строки в...
```
(call_script, "script_give_center_to_faction_aux", "p_town_22", "fac_kingdom_6"),
(call_script, "script_give_center_to_faction_aux", "p_town_23", "fac_kingdom_1"),
```
Теперь назначьте нового лорда города. Найдите следующие строки:
```
(call_script, "script_give_center_to_lord", "p_town_22", "trp_knight_6_3", 0),
(call_script, "script_give_center_to_lord", "p_town_23", "trp_knight_1_5", 0),
```
Сохраните файл, скомпилируйте код. Если нет ошибок, то шаг 6 завершен.
ПРИМЕЧАНИЕ: Итак, этот город закреплен за графом Дегланом - "trp_knight_1_5"Шаг 7.
Теперь нам нужно назначить новые торговые пути для нашего города, чтобы он принимал караваны. Итак, в module_scripts.py найдите эти строки в скрипте initialize_trade_routes.
```
("initialize_trade_routes",
[...
#AHMERRAD - 6 Routes
#Tulga, Halmar, Narra, Shariz, Durquba
(call_script, "script_set_trade_route_between_centers", "p_town_21", "p_town_22"), #Bariyye
#VENECIA - 8 Routes
(call_script, "script_set_trade_route_between_centers", "p_town_23", "p_town_1"), #sargoth
(call_script, "script_set_trade_route_between_centers", "p_town_23", "p_town_4"), #suno
(call_script, "script_set_trade_route_between_centers", "p_town_23", "p_town_6"), #praven
(call_script, "script_set_trade_route_between_centers", "p_town_23", "p_town_7"), #uxkhal
(call_script, "script_set_trade_route_between_centers", "p_town_23", "p_town_14"), #halmar
(call_script, "script_set_trade_route_between_centers", "p_town_23", "p_town_15"), #yalen
(call_script, "script_set_trade_route_between_centers", "p_town_23", "p_town_16"), #dhirim
(call_script, "script_set_trade_route_between_centers", "p_town_23", "p_town_19"), #shariz
#BARIYYE - 6 Routes
#Tulga, Halmar, Narra, Shariz, Durquba, Ahmerrad
```
Сохраните файл и скомпилируйте. Если нет ошибок, то шаг 7 завершен. Вот и все. У вас вполне рабочий городок. Точно так же вы можете создавать новые замки и деревни. Начните новую игру, чтобы изменения вступили в силу.
ПРИМЕЧАНИЕ: # - это комментарий, его игра не видит, используйте его везде, когда пишите код/скрипт, чтобы потом не забыть за что он отвечает.
Комментариев 8
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.