Модостроение. Общие вопросы и ответы
|
|
denis2000 | Дата: Сб, 15.06.2013, 11:51 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Помощь тем кто хочет знать больше о игре и модах Если у вас появились вопросы по модостроению в игре 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]
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
asd123 | Дата: Вс, 14.12.2014, 22:36 | Сообщение # 856 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Как сделать сцену с убийством как у монолитовского проповедника в Припяти? Имею ввиду: При убийстве будет выполнена определённая анимация.
У мутантов тоже есть группировки. © Движок X-Ray
Сообщение отредактировал asd123 - Вс, 14.12.2014, 22:37 |
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
Сахар | Дата: Пн, 15.12.2014, 06:28 | Сообщение # 857 |
Гражданский
Пользователи
Сообщений: 2
| 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 |
|
|
Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
asd123 | Дата: Пн, 15.12.2014, 23:57 | Сообщение # 858 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| О чем говорит этот лог? Запускаю сталкер и сразу вылетает. [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) --------------------------------------------- Если не заметил ошибку - извините. Я новичок в диалоговом деле
У мутантов тоже есть группировки. © Движок X-Ray
Сообщение отредактировал asd123 - Вт, 16.12.2014, 00:50 |
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
Ay49Mihas | Дата: Вт, 16.12.2014, 08:45 | Сообщение # 859 |
Полевой исследователь
Ученые сталкеры
Сообщений: 218
| asd123, возможно, движок ругается на пустые тэги <text>. У меня было так.
|
|
|
Эти 0 пользователя(ей) поблагодарили Ay49Mihas за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 16.12.2014, 09:41 | Сообщение # 860 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| asd123,
Чтобы не страдать из за вылетов, пользуйтесь утилитой DialogEditor. Входит в комплект СДК.
Она лежит в папке editors\bin\tools\dialog_editor. Утилита сама расставит все нужные символы.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
asd123 | Дата: Вт, 16.12.2014, 14:33 | Сообщение # 861 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Цитата 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 |
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 16.12.2014, 16:23 | Сообщение # 862 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата asd123 ( ) Мне нужен диалог, в котором нпс будет начинать фразу не с dialog_manager, а с моего собственного.
Сделайте неписю стартовый диалог.
Цитата asd123 ( ) Как оно работает?
Посмотрите видеоуроки.
http://www.youtube.com/watch?v=ZMxFJiB626g http://www.youtube.com/watch?v=6B1t3xrlMlk
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
asd123 | Дата: Ср, 17.12.2014, 02:35 | Сообщение # 863 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Как активировать ранговый апгрейд всех компонентов у нового механика? А то мне вот такое уже надоело: [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 |
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
sergej5500 | Дата: Ср, 17.12.2014, 09:18 | Сообщение # 864 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| 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
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
asd123 | Дата: Ср, 17.12.2014, 20:18 | Сообщение # 865 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Цитата 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 |
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 17.12.2014, 22:51 | Сообщение # 866 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата asd123 ( ) А можно ли в диалогах менять через <action></action> товары у торговца? Теоретически - да, просто заспавнить НПС-торговцу в инвентарь требуемые предметы.
Другой вариант: просто выдать инфопорцию и по ней изменить секцию снабжения торговца: Код [trader] buy_supplies = {+<Инфопорция>} <Вторая секция снабжения>, <Первая секция снабжения>
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
asd123 | Дата: Чт, 18.12.2014, 19:03 | Сообщение # 867 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Создал задание для персонажа, однако игра вылетает при попытке с ним поговорить и не даёт лога. Где здесь ошибка? Код <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
|
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 18.12.2014, 19:45 | Сообщение # 868 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| asd123, В теге <action> должно быть имя скрипта и через точку имя функции...
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
asd123 | Дата: Чт, 18.12.2014, 20:09 | Сообщение # 869 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Цитата 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
|
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
sergej5500 | Дата: Чт, 18.12.2014, 21:15 | Сообщение # 870 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| 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
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
|