Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
  • Страница 5 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
Модератор форума: denis2000, FantomICW  
Курс молодого бойца - КМБ. Уроки для начинающих
trackerДата: Вт, 02.11.2010, 09:28 | Сообщение # 1
Удаленные



Курс молодого бойца. Уроки для начинающих *


В этой теме на конкретных примерах (Уроках) разбирается весь процесс создания мода.

Правила работы в теме:
Любой пользователь обладающий опытом и знаниями в модостроение, создает урок по определенной теме (отражено в задаче урока), после этого описывает выполнение поставленной задачи в виде отдельного файла и (или) напрямую в своем посте спрятав его под спойлер. В дополнении к уроку желательно выложить содержимое папки gamedata с выполненным уроком, чтобы пользователь скачав его мог проверить правильность выполнения урока самостоятельно.
Обсуждение уроков ведется в теме: "Общие вопросы модостроения". Также в данной теме могут быть размещены дополнительные материалы помогающие пользователю освоить все аспекты модостроения.

Будем пытаться не использовать специфические файлы, поэтому можно работать в чистом ЗП, SGM и т.д. **

Не рекомендуется размещать информацию автором которой вы не являетесь, но если она полезна для пользователей сайта указывайте автора. Не рекомендуется размещать информацию доступную на других ресурсах повещенных модостроению - пользователи и так смогут ее найти. Запрещено размещать непроверенную информацию. В любом случае модераторы раздела оставляют за собой право удалить пост с Уроком или Справочной информацией в случае нарушения автором правил данного форума или правил данной темы.

*В любом уроке, вопросы рассмотренные полно в предыдущем уроке, могут быть описаны весьма сжато, поэтому при возникновении вопросов, прежде всего посмотрите предыдущие.
** Если нет специальных пояснений то урок делался на чистом ЗП 1.6002, в противном случае указан мод и версия для которой урок предназначен.

Скрипт показа координат в реальном времени

[cut=Рекомендации по оформлению]1. Заголовок сообщения из которого понятно назначение поста (Урок, Справочная информация или другое)
2. Если это урок то он должен иметь четко обозначенную задачу и желательно иметь ссылку на файл с выполненным уроком, для того чтобы выполняющие его могли скачать и посмотреть выполнение урока на примере.
3. Придерживайтесь устоявшейся цветовой схемы:
а) Путь к файлу и (или) имя файла - Зеленый
б) Имя параметра, функции и т.п. в файле - Желтый
в) Не рекомендуется использовать оранжевый - это цвет комментариев кураторов раздела и к тому же близок к цвету ссылок.
4. Куски кодов и конфигурационных файлов обязательно помещайте в контейнер
Код
Исходный текст файла
.
5. Выделение текста изменением размера шрифта, его типом на усмотрение автора, главное не перебарщивать.[/cut]

Тема предназначена только для публикации уроков и справочной информации, вопросы в другой теме! Флуд и оффтоп будет наказан без предупреждения, а пост удалён, что бы там не находилось.
 
asd123Дата: Вт, 26.07.2016, 16:08 | Сообщение # 61
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Дополнение к урокам № 6 и
Урок №80
Тема: Диалоги | Заставляем сквады новой группировки радовать Вас местными новостями, подсказывать имена работодателей и рассказывать о местных аномалиях(ну, всё это по Вашей фантазии smile )
[cut=Все готовы? Выходим. (Внимание! Много слов!)]
И так. У нас есть группировка "Падонки"(как-никак, этот урок - дополнение к урокам 6 и 6а biggrin ). Весело, добавили группировку, сквады.. Но постойте! Из диалогов с ними мы имеем только "Чем занимаешься?"(если не заблокировали их в travel_manager). Это не дело, верно? Хотим, чтобы они были полезными не только в бою, но и в диалогах! Как исправить? Да легко! Начнём пожалуй с.. о, dialog_manager.script. На самом деле всё очень просто. Для начала мы добавим нашу группировку по анологии с теми, что уже имеются в файле. Находим вот этот "набор слов":
Код
function init_new_dialog(dialog)
    local actor_table = {
       [1] = "job",
       [2] = "anomalies",
       --[3] = "place",
       [3] = "information",
      }
    local start_phrase_table = {
       [1] = "dm_universal_npc_start_0",
       [2] = "dm_universal_npc_start_1",
       [3] = "dm_universal_npc_start_2",
       [4] = "dm_universal_npc_start_3",
      }
    local precond_table = {
       [1] = "dialogs.npc_stalker",
       [2] = "dialogs.npc_bandit",
       [3] = "dialogs.npc_freedom",
       [4] = "dialogs.npc_dolg",
      }

    printf("init_new_actor_dialog")

Тут мы видим, какие группировки зарегистрированны для precondition(precond. Эта функция нужна для проверки в начале ветки диалога, чтобы тот мог начаться(однако, это нужно не для всех диалогов) ). Таблицу actor_table мы не трогаем, ибо в ней перечислено, что может спросить ГГ у персонажа(интересно то, что строка с диалогом о местности закомментирован, и даже нет ни одного текстового упоминания с этой строкой. Однако, в том же файле(dialog_manager.script) эта строка сравнивается со строкой anomalies). Чтож, изменим таблицы start_phrase_table и precond_table. Добавим строки по анологии, чтобы получилось вот так:
Код
    local start_phrase_table = {
       [1] = "dm_universal_npc_start_0",
       [2] = "dm_universal_npc_start_1",
       [3] = "dm_universal_npc_start_2",
       [4] = "dm_universal_npc_start_3",
       [5] = "dm_universal_npc_start_4",
      }
    local precond_table = {
       [1] = "dialogs.npc_stalker",
       [2] = "dialogs.npc_bandit",
       [3] = "dialogs.npc_freedom",
       [4] = "dialogs.npc_dolg",
       [5] = "dialogs.npc_padonki",

если помните - вместо padonki можете прописать свою группировку(я пользуюсь основой - уроками 6 и 6а)
Обязательно нужно при вписывании новой группировки добавлять "dm_universal_npc_start_...", потому как ниже есть одна проверочка.. Кстати о ней.. Находим(она ниже на 8 строк) for j = 1, 4 do и меняем 4 на 5, потому как мы добавили новые строки. Дальше находим(в том же файле) функцию function uni_dialog_precond(first_speaker, second_speaker) и там видим это:
Код
    return character_community(npc) == "stalker" or
   character_community(npc) == "bandit" or
   character_community(npc) == "freedom" or
   character_community(npc) == "dolg"

Добавим свою группировку ниже. Получится так:
Код
    return character_community(npc) == "stalker" or
   character_community(npc) == "bandit" or
   character_community(npc) == "freedom" or
   character_community(npc) == "dolg" or
                    character_community(npc) == "padonki"

Хорошо, идём дальше.. Чтобы все группировки из этих списков(а не только сталкеры) могли говорить об аномалиях(или же как эта строка называется в игре "Где можно найти артефакты?") нужно найти и удалить вот эти строки:
Код
   if str == "anomalies" then
    script:AddPrecondition("dialogs.npc_stalker")
   end

Чтож, отлично. Можем оставить dialog_manager.script в покое biggrin Перейдём к.. dialogs.script(чтобы не лазить туда-сюда по папкам, верно? happy ) Находим функцию(вроде как она есть в оригинальном файле):
Код
function npc_army(first_speaker, second_speaker)
    local npc = who_is_npc(first_speaker, second_speaker)
    return character_community(npc) == "army"
end
Копируем её, и вставляем ниже с небольшими изменениями в сторону нашей новой группировки:
Код
function npc_padonki(first_speaker, second_speaker)
    local npc = who_is_npc(first_speaker, second_speaker)
    return character_community(npc) == "padonki"
end
Это собственно то, что мы добавляли в таблицу. Наш прикондишн(функция проверяет, что НПС, с которым ведём диалог состоит в нужной группировке, чтобы диалог "Хочу кое о чём у тебя спросить." появился).
Отлично, сделали. На этом с "потрошением" папки script - покончено. biggrin
Переходим к папке misc. Открываем(ну конечно же lol ) dialog_manager.ltx Видим много всего.. И для начала сразу же добавим в этом списке в списке секции list по анологии с другими по 1 фразе для новой группировки: dm_job_16, dm_anomalies_25 и dm_information_64. Ах да.. если у Вас вылетает при попытке поговорить с одним из бойцов новой группировки, найдите любую секцию dm_hello(а ещё было бы не плохо и dm_help) и допишите к остальным группировкам свою(например npc_community = stalker, padonki). Ну, раз уж я про секции написал, то как вы поняли - нужно добавить новые секции job, anomalies и information. Вот так(в скобках описано что о чём говорит. Это добавлять в файл НЕ НУЖНО):
Код

[dm_job_16] (из ветви "Кто мог бы предложить работу?" Собственно, точно так же должна именоваться секция с текстом в текстовом файле.
category = job (соответствует секции в скобках.)
npc_community = padonki (ваша группировка)
level = zaton (локация, на которой они будут отсылать вас к работодателю. Можно поставить all)
info = -zat_b30_owl_stalker_trader_setup (в данном случае, пока не получен инфопоршень, эта ветка диалога будет появляться. Строку можно удалить, чтобы диалог появлялся всегда)

Код
[dm_anomalies_25] (ссылочка на текст)
category = anomalies (не трогайте, если соответствует секции)
npc_community = padonki (группировка)
level = pripyat (локация, на которой встречается диалог)
smart = pri_b302 (лично не проверял, но скорее всего говорит о том, что если НПС находится на данном смарте, то диалог может появиться. Иначе никак. Или же это аномалия-смарт, о котором говорится в тексте(dm_anomalies_24 - это информация от НПС об аномалии "Лоза"(ветка между двумя домами с кислотными аномалиями). ) Эту строку тоже можно удалить.

ии..
Код

[dm_information_64] (текст в текстовом файле)
category = information (понятное дело что не менять )
npc_community = padonki (ваша группировочка)
level = jupiter (локация диалога. Кстати говоря, можно для информационных секций задавать level = all, чтобы информация была на разных локациях с разных локаций. Так например, можно будет узнать на Затоне об обнаружении НЛО над станцией "Янов")
info = +jup_b25_flint_blame_done_to_duty (ну вы поняли. Это можно удалить(хотя тут стоит инфопоршнями манипулировать, чтобы задавать появление информации после определённых событий)

Чтож, и с этим файлом теперь тоже покончено. Дальше мы идём в файл st_dialog_manager.xml.
Вписываем наши строки рядом с предыдущими:
Код
    <string id="dm_information_63">
  <text>...</text> текстик долговцев о Флинте в Свободе. Удалил, чтоб место не занимало.
    </string>
    <string id="dm_information_64"> (собственно, наша секция из dialog_manager.ltx)
  <text>Слышал, новая группировка появилась? "Падонки" называется. Ужас.. Ну и названьеце придумали, едрит мадрит!</text> (ну и текст.. не обращайте внимания на мою фантазию)
    </string>

Так же делаем с остальными изменениями:
Код
    <string id="dm_job_15"> (это оригинал ЗП)
  <text>Ну, если конкретно бабос нужен - иди к Сычу. Он на «Скадовске» барыгует всем, че пацану нужно - информацией и стволами. То есть, если че интересное в карман лягло - документы какие, или, там, КПК сталкерский - к нему тащи, будет тебе прибуток. Ну и опять, всегда есть маза его за надобности спросить - по личным заказам он вдвойне башляет.</text>
    </string>
    <string id="dm_job_16"> (наша секция из менеджера..)
  <text>Есть один паренёк, Никиткой кличут. Сгоняй к нему, да и спроси у него про работу.</text> (моя текстовая фантазия.  Суть поняли? Этот диалог отсылает к работодателю(просто даёт подсказку, но не даёт метку).)
    </string>

Код
    <string id="dm_anomalies_24"> (из оригинала ЗП)
  <text>Про эти места известно немного, в основном, то, что Гарик рассказывал. Говорит, тут есть место, где из кислотной аномалии здоровенный виноград вырос, размером с десятиэтажный дом. Может и привирает, но если нет, то я бы этот виноград на наличие артефактов проверил.</text>
    </string>
    <string id="dm_anomalies_25"> (наша новая фраза)
  <text>Тут аномалия есть, между домами которая.. Похожа на ветки дерева.. Ещё какая-то фиговина мечет туда-сюда. Думаю, там артефакты точно есть.</text> (Прописали, что диалог появляется у персонажей в Припяти? Ну ладно.. Расскажем ГГ о той же аномалии, между домами.)
    </string>

и последнее..
Код
    <string id="dm_universal_npc_start_3">
  <text>Слушаю.</text>
    </string>
    <string id="dm_universal_npc_start_4"> (а вот это секция слов от персонажа, которые он ответит после слов ГГ "Хочу кое о чём у тебя спросить.")
  <text>Спрашивай. Постараюсь ответить.</text> (сами слова. Можете вписать что захотите). )
    </string>

На этом всё smile Будут вопросы - пишите в ЛС. Возможно, позже выложу пример создания ветви к диалогу "Подскажи мне насчет одного дела..." (его, кстати говоря, у ваших НПС не будет, ибо он не прописан)
[/cut]


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Вт, 26.07.2016, 16:31
 
nik19845Дата: Пт, 24.07.2020, 22:28 | Сообщение # 62
Отмычка
Пользователи
Сообщений: 40
Награды: 0
Репутация: [ 20 ]

В отличии от остальных частей Сталкера, Зов Припяти не имеет систему рангов ГГ. Многие вещи из-за этого недоступны. Очень важным является привязка рангов к диалогам разного функционала (Оптовые закупки, Бартер). Ковыряя статистику, пришел к интересной идее. Привязать открытие диалогов к ней. Учет ведется по убитым врагам (можно по аналогии любое привязать). При достижении статистики срабатывает поршень. Пример прописи поршня: <precondition>название скриптового файла.actor_novice</precondition>

Сам фунционал, есть и обратная статистика, которая закрывает диалог при определенном количестве:

[cut]Псевдоранги
--новичок
function actor_novice()
return
((xr_statistic.actor_statistic.killed_stalkers >= 15))
end
--опытный
function actor_experienced()
return
((xr_statistic.actor_statistic.killed_stalkers >= 55))
end
--ветеран
function actor_veteran()
return
((xr_statistic.actor_statistic.killed_stalkers >= 100))
end
--мастер
function actor_master()
return
((xr_statistic.actor_statistic.killed_stalkers >= 200))
end
--Обратная проверка, когда не нужно выше статистики
--новичок
function actor_no_more_novice()
return
((xr_statistic.actor_statistic.killed_stalkers < 15))
end
--опытный
function actor_no_more_experienced()
return
((xr_statistic.actor_statistic.killed_stalkers < 55))
end
--ветеран
function actor_no_more_veteran()
return
((xr_statistic.actor_statistic.killed_stalkers < 100))
end[/cut]


Сообщение отредактировал nik19845 - Сб, 25.07.2020, 03:55
 
  • Страница 5 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
Поиск: