Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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.12.2014, 22:36 | Сообщение # 856
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Как сделать сцену с убийством как у монолитовского проповедника в Припяти? Имею ввиду: При убийстве будет выполнена определённая анимация.

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




Сообщение отредактировал asd123 - Вс, 14.12.2014, 22:37
 
СахарДата: Пн, 15.12.2014, 06:28 | Сообщение # 857
Гражданский
Пользователи
Сообщений: 2
Награды: 4
Репутация: [ 69 ]

asd123, Всё просто в spawn_sections_название_локаций.ltx прописываешь в секцию НПС такие секций.
random_death_animations - какую анимацию проигрывать при смерти (если я верно понял то от любой)
kill_enertion - Честно говоря не знаю если поставить просто = то анимация отыгрываться не будет.
kill_burst - Смерть от взрыва
kill_shortgun - смерть от дробовика
kill_headshot - Хедшот
kill_sniper_headshot - Хедшот со снайперской винтовки
kill_sniper_body - Со снайперской винтовки в тело.
kill_grenade - Смерть от гранаты.

[cut=Пример]
Код
[pri_a17_monolith_preacher]:stalker_silent
$spawn                     = "respawn\pri_a17_monolith_preacher"
character_profile          = pri_a17_monolith_preacher
story_id = pri_a17_monolith_preacher

random_death_animations = ragdoll_sniper_body_front_2
kill_enertion           =
kill_burst    =
kill_shortgun         =
kill_headshot   =
kill_sniper_headshot    =
kill_sniper_body  =
kill_grenade            =
[/cut]




Сообщение отредактировал Сахар - Пн, 15.12.2014, 06:29
 
asd123Дата: Пн, 15.12.2014, 23:57 | Сообщение # 858
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

О чем говорит этот лог? Запускаю сталкер и сразу вылетает. [cut=Клик]
[error]Expression : false
[error]Function : CXml::Load
[error]File : D:\prog_repository\sources\trunk\xrXMLParser\xrXMLParser.cpp
[error]Line : 87
[error]Description : XML file:gameplay\dialogs_agroprom.xml value: errDescr:Error reading end tag.
[/cut]

Как понял из написанного: Проблема в диалогах агропрома. Вот сами диалоги:
Код
<?xml version="1.0" encoding="windows-1251" ?>
<game_dialogs>
<!-------------------------------------------==========--------------------------------------------------->
<!-------------------------------------------'Агропром'--------------------------------------------------->
<!-------------------------------------------==========--------------------------------------------------->
<dialog id="agr_authorities_agent_start_dialog">
<precondition>sgm_dialogs.mod_dialog_precond</precondition>
<dont_has_info>agr_deliver_secret_docks_talk</dont_has_info>
<phrase_list>
<phrase id="0">
<text />
<next>100</next>
</phrase>
<phrase id="100">
<text />
<next>101</next>
</phrase>
<phrase id="101">
<text>agr_authorities_agent_dialog_1</text>
<next>102</next>
</phrase>
<phrase id="102">
<text>agr_authorities_agent_dialog_2</text>
<action>sgm_dialogs.agr_deliver_secret_docks_bring</action>
<next>103</next>
</phrase>
<phrase id="103">
<text>agr_authorities_agent_dialog_3</text>
<give_info>agr_deliver_secret_docks_talk</give_info>
<action>sgm_dialogs.agr_deliver_secret_docks_reward</action>
<next>104</next>
</phrase>
<phrase id="104">
<text>agr_authorities_agent_dialog_4</text>
<action>dialogs.break_dialog</action>
</phrase>
</phrase_list>
</dialog>

<dialog id="agr_stalker_leader_start">
<precondition>sgm_dialogs.mod_dialog_precond</precondition>
<dont_has_info>gotovo</dont_has_info>
<phrase_list>
<phrase id="0">
<text>agr_stalker_leader_dialog_1</text>
<next>230</next>
</phrase>
<phrase id="230">
<text>agr_stalker_leader_dialog_2</text>
<next>231</next>
</phrase>
<phrase id="231">
<text>agr_stalker_leader_dialog_3</text>
<next>232</next>
</phrase>
<phrase id="232">
<text>agr_stalker_leader_dialog_4</text>
<next>233</next>
</phrase>
<phrase id="233">
<text>agr_stalker_leader_dialog_5</text>
<next>234</next>
</phrase>
<phrase id="234">
<text>agr_stalker_leader_dialog_6</text>
<give_info>gotovo</give_info>
<action>dialogs.break_dialog</action>
</phrase>
</phrase_list>
</dialog>

<dialog id="agr_stalker_leader_finish">
<precondition>sgm_dialogs.mod_dialog_precond</precondition>
<has_info>agr_b2_commander_death2</has_info>
<dont_has_info>gotovo_eshe_raz</dont_has_info>
<phrase_list>
<phrase id="0">
<text>agr_stalker_leader_dialog_7</text>
<next>235</next>
</phrase>
<phrase id="235">
<text>agr_stalker_leader_dialog_8</text>
<next>236</next>
</phrase>
<phrase id="236">
<text>agr_stalker_leader_dialog_9</text>
<next>237</next>
</phrase>
<phrase id="237">
<text>agr_stalker_leader_dialog_10</text>
<next>238</next>
</phrase>
<phrase id="238">
<text>agr_stalker_leader_dialog_11</text>
<next>239</next>
</phrase>
<phrase id="239">
<text>agr_stalker_leader_dialog_12</text>
<give_info>gotovo_eshe_raz</give_info>
<action>dialogs.break_dialog</action>
</phrase>
</phrase_list>
</dialog>

<dialog id="agr_stalker_leader_hello">
<phrase_list>
<phrase id="0">
<text />
<next>1</next>
</phrase>
<phrase id="1">
<text />
<next>11</next>
<next>12</next>
</phrase>
<phrase id="12">
<has_info>gotovo_eshe_raz</has_info>
<text>agr_stalker_leader_hello_2</text>
</phrase>
<phrase id="11">
<dont_has_info>gotovo_eshe_raz</has_info>
<text>agr_stalker_leader_hello_1</text>
</phrase>
</phrase_list>
</dialog>

<dialog id="agr_stalker_trader_hello">
<phrase_list>
<phrase id="0">
<text />
<next>1</next>
</phrase>
<phrase id="1">
<text />
<next>11</next>
</phrase>
<phrase id="11">
<text>agr_stalker_trader_hello</text>
</phrase>
</phrase_list>
</dialog>
</game_dialogs>


Добавлено (15.12.2014, 23:57)
---------------------------------------------
Если не заметил ошибку - извините. Я новичок в диалоговом деле happy


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




Сообщение отредактировал asd123 - Вт, 16.12.2014, 00:50
 
Ay49MihasДата: Вт, 16.12.2014, 08:45 | Сообщение # 859
Полевой исследователь
Ученые сталкеры
Сообщений: 218
Награды: 9
Репутация: [ 83 ]

asd123, возможно, движок ругается на пустые тэги <text>. У меня было так.
 
sergej5500Дата: Вт, 16.12.2014, 09:41 | Сообщение # 860
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

asd123,

Чтобы не страдать из за вылетов, пользуйтесь утилитой DialogEditor. Входит в комплект СДК.

Она лежит в папке editors\bin\tools\dialog_editor. Утилита сама расставит все нужные символы.
 
asd123Дата: Вт, 16.12.2014, 14:33 | Сообщение # 861
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Цитата Ay49Mihas ()
asd123, возможно, движок ругается на пустые тэги <text>. У меня было так.

Очень странно.. я скопировал текст с разговора наёмников, охраняющих бункер. Типо "Мужик, ты проблемы ищешь? Вали от сюда!" Сначало всё работало, вышел из игры. Запускаю и вылетает. Заменил dialogs и тексты на оригинал, скопировал свои диалоги, вставил, и вновь работает. Как-то не понятно работает движок.

Добавлено (16.12.2014, 14:33)
---------------------------------------------
Цитата sergej5500 ()
Чтобы не страдать из за вылетов, пользуйтесь утилитой DialogEditor. Входит в комплект СДК. Она лежит в папке editors\bin\tools\dialog_editor. Утилита сама расставит все нужные символы.

Как оно работает? Мне нужен диалог, в котором нпс будет начинать фразу не с dialog_manager, а с моего собственного. Нуу, типо такого: Вместо "Привет, брат" будет такое "Добрый день. Есть какие-то вопросы? Я буду рад на них ответить"


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




Сообщение отредактировал asd123 - Вт, 16.12.2014, 14:33
 
sergej5500Дата: Вт, 16.12.2014, 16:23 | Сообщение # 862
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата asd123 ()
Мне нужен диалог, в котором нпс будет начинать фразу не с dialog_manager, а с моего собственного.


Сделайте неписю стартовый диалог.

Цитата asd123 ()
Как оно работает?


Посмотрите видеоуроки.

http://www.youtube.com/watch?v=ZMxFJiB626g
http://www.youtube.com/watch?v=6B1t3xrlMlk
 
asd123Дата: Ср, 17.12.2014, 02:35 | Сообщение # 863
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Как активировать ранговый апгрейд всех компонентов у нового механика? А то мне вот такое уже надоело: [cut=Клик][/cut]

Добавлено (17.12.2014, 02:35)
---------------------------------------------
Подскажите. Можно ли в on_actor_dist_le вписывать анимацию? А то, сделал подобное своему персонажу:
Код

on_actor_dist_le       = 5 | move@chest

[move@chest]
move_dest_number       = 144811
move_look_vertex       = 144807
move_state_when_center = choose
move_state_when_move   = walk
target = story | actor
anim  = salut_free
invulnerable  = true
on_timer   = 5000 | move@sit1
meet = no_meet


Но игра вылетает. Как корректно записать такую функцию?: При приближении героя к персонажу на 5 метров, персонаж отдаст команду "Вольно" смотря на героя. Такая функция есть у Капитана Тарасова в Припяти, но она не подойдет, ибо у меня нет path walk и look


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




Сообщение отредактировал asd123 - Ср, 17.12.2014, 02:36
 
sergej5500Дата: Ср, 17.12.2014, 09:18 | Сообщение # 864
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

asd123,

Думаю, что причина вылета в том, что указаны противоречивые условия. Неписю указаны конкретные точки. Где стоять и куда смотреть. В тоже время ему сказано: смотреть на ГГ.

Попробуй написать логику так.

on_actor_dist_le = 5 | move@chest

[move@chest]
move_dest_number = 144811
move_look_vertex = 144807
move_state_when_center = choose
move_state_when_move = walk
invulnerable = true
meet = no_meet
on_timer = 5000 | remark@salut

[remark@salut]
target = story | actor
anim = salut_free
invulnerable = true
on_timer = 5000 | move@sit1
meet = no_meet

Добавлено (17.12.2014, 09:18)
---------------------------------------------
asd123,

Чтобы механик прокачивал вещи, ему нужно разрешение.

Строка типа:

up_sect_change_components_pm = {!need_rank_hint(42)} false, true

значит, что прокачка допустима при ранге 42 и выше.

Чтобы механик прокачивал все и всегда, нужно писать:

up_sect_change_components_pm = true

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

Цитата sergej5500 ()
Чтобы механик прокачивал вещи, ему нужно разрешение. Строка типа: up_sect_change_components_pm = {!need_rank_hint(42)} false, true значит, что прокачка допустима при ранге 42 и выше. Чтобы механик прокачивал все и всегда, нужно писать: up_sect_change_components_pm = true

Дело в том, что я своему механику скопировал апгрейд у Яра из припяти. То есть, весь апгрейд есть. Все компоненты, кроме СГМовского улучшаются.

Ну так вам и написали выше: нужны апгрейды - пропишите их в секции механика без дополнительных условий! denis2000

Добавлено (17.12.2014, 20:18)
---------------------------------------------
А можно ли в диалогах менять через <action></action> товары у торговца? То есть, список вещей, которые может продать торговец.


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




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

Цитата asd123 ()
А можно ли в диалогах менять через <action></action> товары у торговца?

Теоретически - да, просто заспавнить НПС-торговцу в инвентарь требуемые предметы.

Другой вариант: просто выдать инфопорцию и по ней изменить секцию снабжения торговца:
Код
[trader]
buy_supplies = {+<Инфопорция>} <Вторая секция снабжения>, <Первая секция снабжения>


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

Создал задание для персонажа, однако игра вылетает при попытке с ним поговорить и не даёт лога. Где здесь ошибка?
Код
<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>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>agr_stalker_trader_give_item_of_find_1</action>
             </phrase>
             <phrase id="1116">
                 <text>agr_stalker_trader_dialog_7</text>
                 <action>agr_stalker_trader_give_reward_of_find_1</action>
                 <give_info>job_1_completed</give_info>
             </phrase>
         </phrase_list>
</dialog>


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


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

asd123, В теге <action> должно быть имя скрипта и через точку имя функции...

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

Цитата denis2000 ()
asd123, В теге <action> должно быть имя скрипта и через точку имя функции...

Все равно вылетает.. вот misc и script
Код
(script)
function job_1_start()       
          task_manager.get_task_manager():give_task("agr_stalker_trader_job_1")          
end  

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

function agr_stalker_trader_find_1_start(first_speaker, second_speaker)  
       return ((db.actor:object("drug_anabiotic", 15) == 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", 15)  
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

      (misc)
[agr_stalker_trader_job_1]  
icon = ui_inGame2_CarryingAntidote
prior = 2  
storyline = false  
title = {=actor_has_item(drug_anabiotic:15)} agr_stalker_trader_job_1_have_item, {!actor_has_item(drug_anabiotic:15)} agr_stalker_trader_job_1_no_have_item
descr = {=actor_has_item(drug_anabiotic:15)} agr_stalker_trader_job_1_have_item_desc, {!actor_has_item(drug_anabiotic:15)} agr_stalker_trader_job_1_no_have_item_desc
target = {=actor_has_item(drug_anabiotic:15)} agr_stalker_trader, nil
condlist_0 = {+job_1_completed} complete


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


 
sergej5500Дата: Чт, 18.12.2014, 21:15 | Сообщение # 870
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

asd123,

Функции проверки кол-ва предметов у вас необычные. Проверку кол-ва предметов лучше делать так.

function actor_has_2_af_benglfire(first_speaker, second_speaker)
local cnt = 0
local function zat_arts_count(npc, item)
if item:section() == "af_electra_sparkler" then
cnt = cnt + 1
end
end
db.actor:iterate_inventory(zat_arts_count, nil)
if cnt > 1 then
return true
end
return false
end


Функция возвращает true, если кол-во артов 2 или больше.

Чтобы вызвать функцию из рестриктора или квеста, надо в xr_conditions прописать код типа:

function zat_b103_actor_has_needed_food(actor, npc, p)
return (dialogs_zaton.zat_b103_actor_has_needed_food(actor, npc)) or (has_alife_info("zat_b103_merc_task_done"))
end
 
Поиск: