Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Общие вопросы и ответы
denis2000Дата: Сб, 15.06.2013, 11:51 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Помощь тем кто хочет знать больше о игре и модах

Если у вас появились вопросы по модостроению в игре S.T.A.L.K.E.R. Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл:
1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R])
2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx"
3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо)
Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#"
Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]
[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти?
Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win хр лог находится:

C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs

Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.

В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs

Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка:
...
$app_data_root$ = true | false| $fs_root$| users\
(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx)
...
$logs$ = true| false| $app_data_root$| logs\
(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи)
...
[/cut][cut=Получение более подробной информации о вылете (ХОВАН)]
Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...)
Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Код
function abort(fmt, ...)
                     local reason = string.format(fmt, ...)
                     error_log(reason)
end

Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией

Первый:
Код
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)

Второй:
Код
Expression    : 0
Function      : ErrorLog
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line          : 49
Description   : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'

[/cut]


Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


Посты, для которых есть свои категории, из этой темы будут удаляться или перемещаться в соответсвующую тему. Персональных извещений в ЛС о переносе\удалении поста не будет, ищите сами. Учитывайте, что в системах Ucoz тема не обновляется в статистике при переносе поста.
Посты, написанные здесь-же после переноса, будут расцениваться как кросспостинг, со всеми вытекающими


[cut noguest=Первый юбилей нашей темы]

Здравствуйте господа модостроители, и все так или иначе причастные к этому.
Нашей теме исполнился 1 год.
От души поздравляю Всех Вас дорогие друзья, творческих успехов.
Хочу так же выразить отдельную благодарность denis2000 и ХОВАН.

tracker 23.06.11



[/cut]
 
asd123Дата: Чт, 14.07.2016, 18:37 | Сообщение # 1981
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Кошелев, так.. У вас после выдачи награды и потери артефакта обновляется задание?

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




Сообщение отредактировал asd123 - Чт, 14.07.2016, 18:39
 
КошелевДата: Чт, 14.07.2016, 18:47 | Сообщение # 1982
Гражданский
Пользователи
Сообщений: 19
Награды: 0
Репутация: [ 0 ]

При такой постановке при взятии задания выдается сразу два "Найти артефакт" и "Получить награду"
Код
title = {=actor_has_item(af_medusa)} wolf_dolg_sidor_money_text, wolf_dolg_sidor_sam_text
descr = {=actor_has_item(af_medusa)} wolf_dolg_sidor_money_text_descr, wolf_dolg_sidor_sam_text_descr


Поменял постановку на более рабочую, поменял местами
Код
title = wolf_dolg_sidor_sam_text, {=actor_has_item(af_medusa)} wolf_dolg_sidor_money_text
descr = wolf_dolg_sidor_sam_text_descr, {=actor_has_item(af_medusa)} wolf_dolg_sidor_money_text_descr


Теперь все хорошо, но при взятии артефакта задание не обновляется на "Получение награды". С чем теперь это связано?

Добавлено (14.07.2016, 18:45)
---------------------------------------------
asd123, Да, было так, исправил, теперь другая проблема (сообщение выше)

Добавлено (14.07.2016, 18:46)
---------------------------------------------
Конструкция квеста теперь выглядит так

Код
[wolf_dolg_sidor_art]
icon = ui_inGame2_Artefakti_na_zakaz
prior = 106
storyline = false
title = wolf_dolg_sidor_sam_text, {=actor_has_item(af_medusa)} wolf_dolg_sidor_money_text
descr = wolf_dolg_sidor_sam_text_descr, {=actor_has_item(af_medusa)} wolf_dolg_sidor_money_text_descr
target = {=actor_has_item(af_medusa)} esc_trader, nil
condlist_0 = {+wolf_dolg_sidor_money_done} complete
on_complete = %=inc_faction_goodwill_to_actor(stalker:200)%

Добавлено (14.07.2016, 18:47)
---------------------------------------------
Дело в том, что не работает проверка на взятие артефакта. Возможно, нужно записать функцию в скрипт на проверку. Если так, то как эту функцию выдать вне диалога, через квест, например?

 
asd123Дата: Чт, 14.07.2016, 18:57 | Сообщение # 1983
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Кошелев, скиньте свои правки в сторону этого задания из файла dialogs_escape.xml. Желательно так же и из файла dialogs_escape.script, а то я сейчас голову сломаю.. biggrin

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




Сообщение отредактировал asd123 - Чт, 14.07.2016, 18:59
 
КошелевДата: Чт, 14.07.2016, 19:08 | Сообщение # 1984
Гражданский
Пользователи
Сообщений: 19
Награды: 0
Репутация: [ 0 ]

asd123, Скрипт скинуть могу, а вот в диалоге "очень много букв". Квест с разветвлениями и 4 вариантами выполнения, два из них - провал. Три работают, а вот четвертый вариант, на поиск артефакта, ну никак не хочет работать.

Добавлено (14.07.2016, 19:08)
---------------------------------------------
Ладно, попробуем как-нибудь коротко. Вот функция выдачи именно этого задания

Код
function wolf_dolg_sidor_art_sam()  
task_manager.get_task_manager():give_task("wolf_dolg_sidor_sam")
end

Вот фраза диалога, в котором оно выдается
Код
            <phrase id="34">
                <text>wolf_dolg_sidor_34</text>
                <action>dialogs_escape.wolf_dolg_sidor_art_sam</action>
                <give_info>wolf_dolg_sidor_sam_give</give_info>
                <give_info>wolf_dolg_sidor_done</give_info>
                <give_info>close_dialog_wolf_3</give_info>
                <next>35</next>
            </phrase>
 
asd123Дата: Чт, 14.07.2016, 19:22 | Сообщение # 1985
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Кошелев, ладно.. Давайте попробуете сделать так же, как я делал квест для своего персонажа. Вообщем, файл с квестом:
[cut=tm_agroprom.ltx(у меня)][agr_stalker_trader_job_1]
icon = ui_inGame2_CarryingAntidote
prior = 2
storyline = false
title = {=actor_has_item(drug_anabiotic)} agr_stalker_trader_job_1_have_item, {!actor_has_item(drug_anabiotic)} agr_stalker_trader_job_1_no_have_item
descr = {=actor_has_item(drug_anabiotic)} agr_stalker_trader_job_1_have_item_desc, {!actor_has_item(drug_anabiotic)} agr_stalker_trader_job_1_no_have_item_desc
target = {=actor_has_item(drug_anabiotic)} agr_stalker_trader, nil
condlist_0 = {+job_1_completed} complete
[/cut]
Тут идёт проверка на то, что актёр имеет предмет. Так же здесь прописана выдача награды.
[cut=dialogs_agroprom.script(у меня)]function agr_stalker_trader_find_1_have(first_speaker, second_speaker)
return ((db.actor:object("drug_anabiotic") ~= nil))
end

function agr_stalker_trader_find_1_start(first_speaker, second_speaker)
return ((db.actor:object("drug_anabiotic") == nil))
end

function agr_stalker_trader_give_item_of_find_1(first_speaker, second_speaker)
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "drug_anabiotic")
end

function agr_stalker_trader_give_reward_of_find_1(first_speaker, second_speaker)
dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_ak74")
dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "ammo_5.45x39_ap", 6)
dialogs.relocate_money_to_actor(first_speaker, second_speaker, 30000)
end[/cut]

Дальше кость диалога. 2 секции: первая до находки нужного предмета, вторая после того, как находите предмет(так сказать, после обновления задания.)
[cut=dialogs_agroprom.xml(у меня)]
<dialog id="agr_stalker_trader_job_1">
<precondition>dialogs_agroprom.agr_stalker_trader_find_1_start</precondition>
<dont_has_info>job_1_start</dont_has_info>
<phrase_list>
<phrase id="0">
<text>agr_stalker_trader_dialog_1</text>
<next>111</next>
</phrase>
<phrase id="111">
<text>agr_stalker_trader_dialog_2</text>
<next>221</next>
<next>2212</next>
</phrase>
<phrase id="2212">
<text>agr_stalker_trader_dialog_no</text>
<action>dialogs.break_dialog</action>
</phrase>
<phrase id="221">
<text>agr_stalker_trader_dialog_3</text>
<next>222</next>
</phrase>
<phrase id="222">
<text>agr_stalker_trader_dialog_4</text>
<next>232</next>
</phrase>
<phrase id="232">
<text>agr_stalker_trader_dialog_5</text>
<action>dialogs_agroprom.job_1_start</action>
<give_info>job_1_start</give_info>
</phrase>
</phrase_list>
</dialog>
<dialog id="agr_stalker_trader_job_1_completed">
<precondition>dialogs_agroprom.agr_stalker_trader_find_1_have</precondition>
<has_info>job_1_start</has_info>
<dont_has_info>job_1_completed</dont_has_info>
<phrase_list>
<phrase id="0">
<text>agr_stalker_trader_dialog_6</text>
<next>1116</next>
<action>dialogs_agroprom.agr_stalker_trader_give_item_of_find_1</action>
</phrase>
<phrase id="1116">
<text>agr_stalker_trader_dialog_7</text>
<action>dialogs_agroprom.agr_stalker_trader_give_reward_of_find_1</action>
<give_info>job_1_completed</give_info>
</phrase>
</phrase_list>
</dialog>[/cut]
agr,agroprom,job и прочие слова поменяйте под свой квест(типа esc, escape, af_medusa), дополните кости своими диалоговыми фразами и всё - рабочий вариант. smile Скорее всего, у Вас проблема в том, что вы не добавили в скрипты проверку на наличие артефактов(или где-то в костях диалога допустили ошибку. Вы ведь не показали свой диалог полностью). Так что, пробуйте, пишите happy


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




Сообщение отредактировал asd123 - Чт, 14.07.2016, 19:27
 
КошелевДата: Чт, 14.07.2016, 21:23 | Сообщение # 1986
Гражданский
Пользователи
Сообщений: 19
Награды: 0
Репутация: [ 0 ]

asd123, Не соглашусь
Код
-- Медуза в рюкзаке
function wolf_medusa_to_actor_done(first_speaker, second_speaker)
    return first_speaker:object("af_medusa") ~= nil
end

-- Медуза отсутствует
function wolf_medusa_to_actor_none(first_speaker, second_speaker)
    return first_speaker:object("af_medusa") == nil
end


Обе функции имеются и работают как часы.

Добавлено (14.07.2016, 21:23)
---------------------------------------------
Проблему исправил. Вернемся к началу. Квест после сдачи обновляется и снова выдается на поиск артефакта. Как решить все таки эту проблему?

 
asd123Дата: Пт, 15.07.2016, 07:49 | Сообщение # 1987
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Всем добрый день happy Скачал с этого сайта и добавил Припять из ТЧ в СГМ 2.2 в config и all_spawn. Теперь хочу узнать как туда попасть чтобы снять координаты. У меня в наличии были пустые way_ и alife_ файлы. Добавил её по анологии КМБ урока(7 или 8.. точно не помню). Теперь вот не знаю как её настроить под СГМ 2.2 sad

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




Сообщение отредактировал asd123 - Пт, 15.07.2016, 07:51
 
denis2000Дата: Пт, 15.07.2016, 08:00 | Сообщение # 1988
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата Кошелев ()
Квест после сдачи обновляется и снова выдается на поиск артефакта.

Не выдается инфопорция закрытия квеста.


Цитата asd123 ()
Теперь вот не знаю как её настроить под СГМ 2.2

А что вы хотите настроить?


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
asd123Дата: Пт, 15.07.2016, 13:33 | Сообщение # 1989
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

denis2000, заселение, но для этого я туда хочу попасть, а не знаю как.

Добавлено (15.07.2016, 13:33)
---------------------------------------------
denis2000, я ранее задавал вопросы. Знаете что-нибуть по ним? smile


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


 
КошелевДата: Пт, 15.07.2016, 14:16 | Сообщение # 1990
Гражданский
Пользователи
Сообщений: 19
Награды: 0
Репутация: [ 0 ]

Код
-- Волк отдает Медузу
function wolf_medusa_to_actor(first_speaker, second_speaker)
       dialogs.relocate_item_section(second_speaker, "af_medusa", "in")
       task_manager.get_task_manager():give_task("wolf_dolg_sidor")
end


Имеется такая функция, она, судя по всему, не правильная, прошу поправить. Суть такова: при проверке, что в рюкзаке ГГ имеется медуза, выдаем следующее задание.

Добавлено (15.07.2016, 13:51)
---------------------------------------------
Вопрос исчерпан.

Добавлено (15.07.2016, 14:16)
---------------------------------------------
denis2000, Я понял, что не выдается поршень, хотя он прописан. Почему такое происходит?

 
denis2000Дата: Пт, 15.07.2016, 14:57 | Сообщение # 1991
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

asd123, Попробуйте вместо ваших нерабочих костылей раскоментировать строку --self.heli_fire:update_enemy_state() в функции heli_move:update( delta ) скрипта heli_move.script
Цитата asd123 ()
но для этого я туда хочу попасть, а не знаю как.

Измените координаты спавна ГГ на новую локацию.

spawn_object(pri_a28_earth_helli_1:pri_a28_heli_landing_way_1:0:215)
pri_a28_earth_helli_1 - кого спавнить
pri_a28_heli_landing_way_1 - имя пути где спавнить
0 - индекс точки пути, где спавнить
215 - поворот по оси Y


Цитата denis2000 ()
Почему такое происходит?

Или инфопорции имеют разное написание, или фраза <phrase id="5"> вообще не срабатывает или из-за сбоя в функции dialogs_escape.wolf_dolg_sidor_money_to_actor не срабатывает выдача инфопорций.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
КошелевДата: Пт, 15.07.2016, 15:00 | Сообщение # 1992
Гражданский
Пользователи
Сообщений: 19
Награды: 0
Репутация: [ 0 ]

denis2000, Решил сделать по другому, но не могу найти функцию на проверку взятия предмета. Нашел эту, но она для ТЧ и в ЗП, видимо, не работает

Код
Код
<function_complete>файл.функция</function_complete>
Код
function search_weapon_complete1(actor, npc)
if db.actor ~= nil then
if db.actor:object("ПРЕДМЕТ") then
db.actor:give_info_portion("ПОРШЕНЬ")
return true
end
end
return false
end
 
denis2000Дата: Пт, 15.07.2016, 15:03 | Сообщение # 1993
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата Кошелев ()
Нашел эту, но она для ТЧ и в ЗП, видимо, не работает

Прекрасно работает.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
КошелевДата: Пт, 15.07.2016, 15:56 | Сообщение # 1994
Гражданский
Пользователи
Сообщений: 19
Награды: 0
Репутация: [ 0 ]

denis2000, В таком случае, она у меня в этом виде
Код
function af_medusa_to_actor_inv(actor, npc)
if db.actor ~= nil then
if db.actor:object("af_medusa") then
db.actor:give_info_portion("af_medusa_to_actor_inv")
return true
end
end
return false
end


Соответственно название "af_medusa_to_actor_inv". Но как мне эту функцию выдать именно в tm_моялокация?

Добавлено (15.07.2016, 15:13)
---------------------------------------------
То есть, нужно чтобы при поднятии медузы, задание выполнялось.

Добавлено (15.07.2016, 15:56)
---------------------------------------------
Вопрос решен. Выдал функцию через биндер.
Другой вопрос: Сидоровичу присвоен story_id, но метка в задании на него не ставится.

 
asd123Дата: Пт, 15.07.2016, 16:15 | Сообщение # 1995
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Цитата denis2000 ()
Измените координаты спавна ГГ на новую локацию.

Так ведь, я не могу туда попасть.. Я level и game вертексы не знаю от неё. Я поставил вообще рандомные числа(в том же количестве, что на других локациях) но меня то на Болота закинуло, то в Тёмную долину... Где можно посмотреть level и game вертексы новой локации?

Добавлено (15.07.2016, 16:10)
---------------------------------------------

Цитата denis2000 ()
asd123, Попробуйте вместо ваших нерабочих костылей раскоментировать строку --self.heli_fire:update_enemy_state() в функции heli_move:update( delta ) скрипта heli_move.script

АААААА, РАБОТАЕТ!!!!!!!!!!!!!!!!!! Он даже стал реагировать если я по нему стреляю(делает меня врагом)! НАКОНЕЦ-ТО. ОГРОМЕННОЕ СПАСИБО, ДЕНИС.
Простите за такой всплеск эмоций.. Признаюсь, вертолёты - мой любимый вид техники(машины не люблю, а вот вертолёты - это да), причём взялось это именно от сталкерского вертолёта. Всегда хотел на нём полетать в игре, и настроить его на атаку всего живого. И вот, наконец, эта бестолочь работает так как надо!!!

Добавлено (15.07.2016, 16:15)
---------------------------------------------
denis2000, подскажите(если знаете) - можно ли вертолёту настроить радиус выбора цели? А то, я стою за ним(под его хвостом) а он меня назначает целью, хотя по сути он меня не видит.


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


 
Поиск: