Голосование

Как вы оцениваете Смуту?












Оформление



Пользователей
  • Всего: 28869
  • Последний: Adr3naline
Сейчас на форуме
Пользователи: 2
Гостей: 586
Всего: 588

0 Пользователей и 1 Гость просматривают эту тему.

Тема: [MS] Шестая часть. Модульная система, файлы constant, factions, strings, quests.  (Прочитано 16707 раз)

  • Сообщений: 143
    • Просмотр профиля
  Шестая часть.
 В этой части документации мы разберем самые маленькие файлы модульной системы. Но не смотря на размер, эти файлы вы будете модифицировать очень часто, и для разных задач. В конце этой главы, вы будете знать как использовать эти файлы с наибольшей отдачей.


6.1 Файл module_constants.py.

module_constants.py очень простой файл. Он заполнен константами; если вы читали 3-ю главу, то наверное представляете как они работают. Константы в файле module_constant.py в точности подобны любым другим константам из любого другого файла модульной системы. Но те из них, что будут использованны в нескольких module-файлах рекомендуется писать здесь, для того, чтобы модульная система всегда знала, где их искать.

Файл module_constant.py также служит как упорядоченный, легкодоступный список констант, где вы легко можете присвоить каждой из них нужное значение. Любые изменения сразу же отразятся на всех операциях, использующих эти константы, т.е. вам не нужно искать вручную каждую из этих операций и производить там замену.

К примеру, замена marnid_inn_entry = 2 на marnid_inn_entry = 4 многвенно отразится на операциях использующих константу marnid_inn_entry, они будут трактовать значение константы как 4, а не 2.


6.2 Файл moodule_factions.py.

Файл moodule_factions.py содержит все фракции, которые используются модульной системой и ИИ-ом МиБа. Это маленький файл, но он задает несколько важных установок, мы разберем их здесь.

Файл начинается с python-овского списка factions = [. Как и в большинстве module-файлов первые несколько записей вмонтированы в игру и не рекомендуются к редактированию.


Пример записи фракции:

  ("innocents","Innocents", 0, 0.5,[("outlaws",-0.05)]),

Разбор полей записи:

1) Идентификатор фракции. Используется для ссылок  из других файлов.
2) Имя фракции. Название фракции в игре.
3) Метки фракции.
4) Фракционная согласованность. Отношения между членами фракции. Числовое значение.
5) Меж-фракционные отношения. Каждый элемент этого поля состоит из:
     5.1) Идентификатор фракции, отношение к которой мы хотим задать.
     5.2) Отношение. Значение, характеризует отношение к указанной фракции. Задается из отрезка между -1 и 1.


Разбор записи “innocents” (невиновные):

1) Идентификатор фракции = "innocents"
2) Имя фракции = "Innocents"
3) Метки фракции = 0
4) Фракционная согласованность = 0.5
5) Меж-фракционные отношения
     5.1) Идентификатор фракции  = "outlaws"
     5.2) Отношение = 0.05

Исходя из разбора записи можно сказать следущие: у фракции нет меток, значение согласованости фракции нейтральное, фракция не имеет врагов заданных в полях ее записи, кроме "outlaws" ("преступники"). Однако, если мы немного осмотримся, то найдем, что фракция "dark_knights" (к примеру) имеет с "innocents" отношения -0.9 (согласно данным ее записи). Все это потому, что фракционные отношения работают в обе стороны – стоит только задать уровень отношений между любыми двумя фракциями в полях записи одной из них, как оно тут же распространится и на вторую. Если же отношения между фракциями не указаны вообще нигде (в т.ч. и в module_constants.py), то отношения меж ними по умолчанию устанавливаются на 0, то есть они друг к другу будут нейтральны.

Давайте теперь создадим новую фракцию, скопировав и вставив запись "innocents" в конец списка. Заменим идентификатор и имя нашей новой фракции на “geoffrey”, заменим значение "outlaws" в списке межфракционных отношений на "player_faction".

Сохраняемся. Как вы уже делали это однажды, откройте файлы module_party_templates.py и module_troops.py и замените значение в поле фракция у шаблона отряда "new_template" и героя "Geoffrey" на "fac_geoffrey". Сохраните и закройте файлы. Кликните два раза на файле build_module.bat. Если все прошло хорошо, все группы шаблона "new_template" будут показывать принадлежность к фракции "Geoffrey", и будут враждебны игроку.


6.3 Файл module_strings.py.

Файл module_strings.py возможно самый простой из всех файлов модульной системы. Он состоит из строк – блоков текста, которые различным образом могут быть выведенны на экран. Строки используются во многих файлах модульной системы, начиная с файла module_dialogs.py и заканчивая module_quests.py; везде, где необходимо вывести блок текста на экран. Файл module_strings.py на деле является хранилищем независимых блоков информации, не принадлежащих отдельному одиночному файлу. Напротив, они (блоки текста) могут быть вызваны с помощью определенных операций из любого файла модульной системы.

Вы можете увидеть использование строк (блоков текста) в различных частях игры, - читая сообщения в левой части экрана или блок объяснений (туторитал бокс),  расматривая игровое меню или содержание диалогов.

Подобно moodule_factions.py, файл начинается с python-овского списка: strings = [. И опять-таки первые несколько записей вмонтированы в игру и не рекомендуются к редактированию.


Пример строки:

  ("door_locked","The door is locked."),


Описание полей записи:

1) Идентификатор строки. Используется для ссылок на строку из других файлов.
2) Текст строки.


Одно свойство строки, которое стоит отметить это способность хранить данные регистров (register value) и другие строки. Вы можете проверить это, добавив к примеру, {reg0} в строку. Тогда, при выводе строки, вы также увидите текущие значение reg(0). {reg10}, к примеру, при выводе строки добавит текущие значение reg(10), и т.д.

Для добавления строк, вы должны использовать строковые регистры вместо обычных; это потому, что строки записаны иначе чем данные обычного регистра. Для примера, {s2} выведет содержимое string register 2, а не содержимое reg(2). Вы можете свободно использовать string register 2 и reg(2) одновременно для разных вещей, они не будут перекрываться или смешиваться друг с другом.


(прим: для усвоения, и чтобы не путаться, уточним
reg(X) и его вывод {regX} - это обычный регистр
string register X и его вывод {sX} - это строковый регистр)



В диалогах, есть возможность высвечивать часть (или все) содержания строки в зависимости от пола персоны, к которой она (строка) адресована. Для примера вставка {sir/madam} в строку заставит вывести слово "sir" , когда она адресованна персоне мужского пола и "madam"  персоне женского пола.

Все эти возможности (исключая различие полов) будут работать без проблем при выводе строки в любое время и в любом месте. Различие полов работает только в диалоговом окне.


Кстати, с помощью операции "display_message"  возможно вывести строку в различном цвете, присоединив код цвета в 16-ой системе исчисления (hexadecimal colour code) к операции. Для примера:

 (display_message,<идентификатор строки>, <код цвета>),

А это список используемых кодов цвета в 16-ой системе исчисления для операции display_message:

синий = 0xFFAAAAFF
светло синий = 0xFFAAD8FF
красный = 0xFFFFAAAA
желтый = 0xFFFFFFAA
розовый = 0xFFFFAAFF
фиолетовый = 0xFF6AAA89
черный = 0xFFAAAAAA
белый = 0xFFFFFFFF
зеленый = 0xFFAAFFAA
коричневый = 0xFF7A4800

прим: В принципе, вы можете сами сделать нужный цвет, если зададите его код. Разберём запись кода цвета. После "0х" есть четыре группы, они отвечают за цвета примерно таким образом: 0xFFFFFFFF (за что отвечает первая (чёрная) группа я не нашёл, возможно за яркость или что-то вроде). Все эти значения варьируются от 0 до 256 (в шестнадцатиричной системе от 0 до FF). Подставляя туда свои цифры, можно получать интересные комбинации. Но помните что число не должно превышать 256 в десятичной! Например, чтобы сделать просто красный цвет, код будет 0xFFFF0000)

 (display_message,"door_locked",0xFFFFAAAA),

Эта операция выведет нам на экран следующее сообщение:

The door is locked.


6.4 Файл module_quests.py.

Файл module_quests.py это последний из наших маленьких и простых module-файлов. Он состоит из квестов, включая все блоки текста, относящиеся к этим квестам. Добавление сюда нового квеста позволит ему быть активированным модульной системой, чтобы операции смогли считать текущий статус квеста и использовать этот статус как операцияю условия.


Пример квеста:

("hunt_down_river_pirates", "hunt down river pirates", qf_show_progression,
  "Constable Hareck asked you to hunt down the river pirates that plague the country around Zendar.\
 He promised to pay you 5 denars for each river pirate party you eliminate."
  ),


(“hunt_down_river_pirates “, “охота за речными пиратами”, qf_show_progression,
     “Констэбль Харек просит вас поймать речных пиратов, наводнивших окрестности Зендара.\
      Он обещает заплатить Вам по 5 денаров за каждую банду речных пиратов,\
      которую вы уничтожите.” ),


Этот квест не нуждается в представлении. Мы должны отловить речных пиратов в одной или другой точке карты. Интересными деталями являются метка qf_show_progression, и факт использования обратной косой черты -- \ -- (бэкслэша) позволяющей сделать перенос строки в этом месте. Примечание: использование бэкслэша не принуждает перенос строки при выводе на экран. Используется только для аккуратности и удобства работы с текстом в файле module_quests.py.


Разбор полей записи.

1) Идентификаторр квеста. Служит для ссылок на квест из других файлов.
2) Название квеста, отображаемое в списке в левой части на квестовом экране.
3) Метки квеста.
4) Описание квеста. Длинное описание квеста, отбражаемое в большом текстовом окне в верхней правой части квестового экрана.


Разбор записи квеста речных пиратов:

1) Идентификаторр квеста = "hunt_down_river_pirates"
2) Название квеста = "hunt down river pirates"
3) Метки квеста = qf_show_progression
4) Описание квеста = "Constable Hareck asked you to hunt down the river pirates that plague the\ country around Zendar. He promised to pay you 5 denars for each river pirate party you eliminate."


Метка qf_show_progression это то, что придает квесту процентный статус завершённости, видимый справа в списке квестов. Список квестов может быть найден в левой части квестового экрана. Процентный статус не присваивается автоматически; вы должны задать его (апдейт процентного статуса завершенности квеста) с помощью специальных операций, если хотите его использовать.

Если вы хотите сделать квест без меток вообще, просто поставьте 0 в поле меток.


А сейчас, мы сделаем первый шаг в создание нашего собственного квеста. Скопируйте следущюю запись  квеста и вставьте его в конец python-овского списка:

("speak_with_troublemakers", "Parley with the troublemakers", 0,
  "Constable Hareck asked you to deal with a bunch of young nobles making trouble around town. How you want to tackle the problem is up to you; Hareck has promised a purse of silver if you succeed."
  ),


("speak_with_troublemakers", “Переговоры с нарушителями порядка”, 0 , “Констебль Харек просит вас разобраться с бандой молодого дворянина, нарушающей порядок в окрестностях  города. Каким образом вы разберетесь с проблеммой, полностью зависит от вас; Харек пообещал вам кошель серебра, если справитесь”)

(прим: описание квеста должно идти одной, неразрывной строкой, или используйте “\”)
Замечание по структуре этой записи. Ка вы видите, потребовалось внести всего несколько изменений, чтобы сделать новый квест, но присоединение его (квеста) к игре требует гораздо больше работы. По этой причине, нашей следующей целью будет module_dialogs.py – где мы вставим и подготовим к использованию наш новый квест, войска и шаблон отряда.

Сохраните ваш прогресс и дважды кликните на файле build_module.bat. Если все пройдет хорошо, то мы будем готовы двигаться к седьмой части этой документации.
« Последнее редактирование: 29 Июня, 2011, 13:23 от Leon473 »
  • Сообщений: 3
    • Просмотр профиля
Как удалить фракцию из мода,а то везде все  как добавить,а про удаление не слова  >:(
  • Фракция: Наемники
  • Сообщений: 2084
  • За создание крупных модов и других особо сложных проектов
    • Просмотр профиля
dilari, закомментировать просто все что относится к фракции. в модульке очень много хвостов, особенно на module_scripts.py обрати внимание. довольно нудная работа..
  • Фракция: Свады
  • Сообщений: 3
    • Просмотр профиля
А,попроще вариантов нет?)
  • Фракция: Наемники
  • Сообщений: 25787
  • За победу в конкурсе "Знамя кальрадийца" И создали они сайт... За регистрацию на форуме не позже сентября 2008 года
  • Сервер Discord
    • Просмотр профиля
    • Всадники Кальрадии
А,попроще вариантов нет?)
Попроще возможно в Bannerlord будет.
  • Ник в M&B: [RUSMNB]Vanok
  • Фракция: Вегиры
И помните: "Хватит набивать посты" (NightHawkreal)
  • Сообщений: 24
    • Просмотр профиля
    • Прохождение игр на ютуб-канале, стримы, летсплеи!
Вопрос как раз по квестам...
Подскажите кто знает, как можно увеличить награды за квесты которые выдают в городах-замках-деревнях?
Где эти значения зашиты? Хочу их повысить раз в 5-10.
  • Фракция: Наемники

СиЧЪ Total War СиЧЪ Total War
Сайт "Всадники Кальрадии" не является СМИ. Администрация не несет ответственность за высказывания и публикацию каких-либо материалов, сделанные любыми пользователями форума, в том числе посредством личных и публичных сообщений. Материалы, размещенные на ресурсе третьими лицами, могут содержать информацию, не предназначенную для лиц, не достигнувших совершеннолетия. При обнаружении на ресурсе материалов, нарушающих законодательство Российской Федерации, необходимо обращаться к администрации.
Сайт работает на быстром VPS/VDS хостинге от FASTVPS


Powered by SMF 2.0 | SMF © Simple Machines LLC