Так как это руководство по большей части для тех, кто запутался, то оформлю в виде расширенного ЧаВо. Это подразумевает что
документация по модульной системе прочитана и усвоена (первые 5 частей), а тем, кто этого не сделал, настоятельно советую всё-таки пересилить лень, ибо на откровенно глупые вопросы которые там подробно разжёваны отвечать вам вряд ли будут и просто отошлют читать
Задачи тутора научить вас:
1. Как добавить вещь для игроков.
2. Как добавить вещь для ботов.
3. Как выставить ей цену или сделать бесплатной для определённого класса.
4. Как сделать так, чтобы эта вещь была на персонаже уже при выборе персонажа ("стандартный закуп").
Всё это мы рассмотрим на примере правки вещей у свадского арбалетчика. У него в начальном закупе нет шлема - давайте добавим ему бесплатный шлем.
Стандартный закуп свадского арбалетчика. Бесплатная экипировка. Общее начальное описание инвентаря мультиплеерных классов и что у них есть при входе в игру.Как и любые другие, мультиплеерные классы описываются в
module_troops.py. Находим запись свадского арбалетчика и смотрим.
["swadian_crossbowman_multiplayer","Swadian Crossbowman","Swadian Crossbowmen",tf_guarantee_all,0,0,fac_kingdom_1,
[itm_bolts,itm_crossbow,itm_sword_medieval_b_small,itm_tab_shield_heater_a,itm_red_shirt,itm_ankle_boots],
def_attrib_multiplayer|level(19),wpe(90,60,180,90),knows_common|knows_ironflesh_2|knows_athletics_5|knows_shield_5|knows_power_strike_2|knows_riding_1,swadian_face_young_1, swadian_face_old_2],Синим выделено всё его имущество. Это и есть те вещи, которые будут для игрока бесплатны. Если в этом списке присутствует предмет - в игре он бесплатен.
За то, что это имущество будет на надето на арбалетчика, отвечает метка
tf_guarantee_all. Она отвечает за то, что по возможности будут забиты все слоты оружия, брони и коней.
Есть и другие метки, например tf_guarantee_ranged, она отвечает за то что выбранный класс точно возьмёт стрелковое/метательное оружие, а tf_guarantee_melee гарантирует что он возьмёт оружие ближнего боя. Такими метками, к слову, достигается и то, что в синглплеере разбойники одеты по-разному - у кого-то лук и стрелы, у кого-то кувалда, хотя класс один.Где прописывается вся доступная свадскому арбалетчику экипировка.Это описывается в
module_scripts.py. Если предмет там не описан для нужного класса - предмет не появится в меню, даже если он есть в стандартном закупе.
Ниже приведён список вещей, которые свадский арбалетчик вообще сможет увидеть в меню. Важно заметить, что бесплатные (начальные) вещи там тоже должны быть, иначе они не появятся, даже если прописаны в инвентаре в
module_troops.py:
#1a-Swadian Crossbowman
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_bolts", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_steel_bolts", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_crossbow", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_heavy_crossbow", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_sniper_crossbow", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_a", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_b", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_sword_medieval_b_small", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_a", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_b", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_tab_shield_heater_c", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_red_shirt", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_padded_cloth", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_armor", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_haubergeon", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_ankle_boots", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_boots", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_mail_chausses", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_leather_gloves", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_arming_cap", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_norman_helmet", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_helmet_with_neckguard", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_flat_topped_helmet", "trp_swadian_crossbowman_multiplayer"),
(call_script, "script_multiplayer_set_item_available_for_troop", "itm_guard_helmet", "trp_swadian_crossbowman_multiplayer"),Итак, мы видим что в доступной экипировке есть и шлемы, но они все покупаются. Далее мы сделаем бесплатным один шлем, например выделенный красным
"itm_flat_topped_helmet". Но сперва необходимо разобраться с ценами на предметы.
Цена на предмет в игре.Стоимость вещей прописывается в
module_items.py в описании каждой из них. Когда у игрока накапливается достаточно денег для покупки какой-то вещи - он сможет купить эту вещь. Так, например, наш itm_flat_topped_helmet в игре мы можем купить за 203 золотой уже в начале игры.
(Примечание: На основании этой стоимости рассчитывается цена и в сингле и в мультиплеере. В сингле на цену предмета действует система наценок, в мультиплеере же всё покупается по той стоимости что выставлена в этом описании предмета.)Но несложно заметить что у вещей, в мультиплеере бесплатных, в module_items.py цена не 0. Почему? А потому, что они прописаны в инвентарь
стандартного оружия классу в module_troops.py (мы рассмотрели это выше). То есть эти вещи уже есть в мешке у арбалетчика, когда вы выбираете его в игре. Впрочем, это я итак десять раз сказал
Как сделать вещь бесплатной для закупа? тем, кто ещё не догадался.Как видим, этот шлем (
"itm_flat_topped_helmet") у свадского арбалетчика есть в доступной экипировке, но он не бесплатен. Чтобы сделать его бесплатным, необходимо добавить его в стандартную экипировку в module_troops:
["swadian_crossbowman_multiplayer","Swadian Crossbowman","Swadian Crossbowmen",tf_guarantee_all,0,0,fac_kingdom_1,
[itm_bolts,itm_crossbow,itm_sword_medieval_b_small,itm_tab_shield_heater_a,itm_red_shirt,itm_ankle_boots,"itm_flat_topped_helmet"],
def_attrib_multiplayer|level(19),wpe(90,60,180,90),knows_common|knows_ironflesh_2|knows_athletics_5|knows_shield_5|knows_power_strike_2|knows_riding_1,swadian_face_young_1, swadian_face_old_2],Если надо сделать какой-то предмет не-бесплатным, нужно сделать обратное - удалить его из этой записи.
В каком слоте появится предмет и в каком порядке они выкладываются в слотах?В
module_scripts.py должна быть строка, описывающая в какой слот предмет должен быть вписан (т.е если её нет, то предмет не появится в меню закупа). Например наш шлем описывается как
лёгкий шлем :
(item_set_slot, "itm_flat_topped_helmet", slot_item_multiplayer_item_class, multi_item_class_type_light_helm),Если шлему будет прописано
multi_item_class_type_gloves, то надеваться он будет всё также на голову, но появится в слоте для перчаток
Порядок сортировки предметов в слотах зависит от их стоимости в module_items.py - чем дальше от края экрана тем дороже предмет. Это будет действовать и на бесплатные в мультиплеере предметы: сперва идут бесплатные с сортировкой по реальной стоимости, затем покупаемые.
Экипировка у ботов.У ботов оружие и броня прописываются отдельно, они не зависят от закупа игроков. Вооружение ботов (как и для сингла) описывается в
module_troops: свадский арбалетчик-бот выглядит как
swadian_crossbowman_multiplayer_ai.
Примечание: закуп ботов описывается только в module_troops, в module_scripts ничего исправлять не нужно.
Я запутался во всём вышенаписанном. Можно увидеть краткий алгоритм?Для добавления вещи в мультиплеер нам необходимо выполнить такие шаги:
1. Описать вещь в
module_items.py. Как - описано в документации.
2. В файле
module_scripts.py добавить нужному классу нужной фракции эту вещь в список
доступных.
3. В файле
module_scripts.py описать в каком(-их) слоте(-ах) этот предмет должен появиться.
Если нужно чтобы данная вещь была доступна сразу (то есть бесплатная в начальном закупе), то нужно ещё
4. В файле
module_troops.py прописать этот предмет в инвентарь соответствующему классу. Как - описано в документации (и в этом маленьком гайде).
Для удаления предмета из возможного закупа необходимо
1. Удалить или закомментировать символом "
#" запись предмета в module_scripts.py (те самые строки "(item_set_slot,").
Итак, всё сделали. Сохраняем, компилируем, входим в игру и проверяем. Если всё сделали правильно, то у вас автоматически появится шлем на голове при выборе класса.