|
Модостроение. Общие вопросы и ответы
|
|
| 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 за это полезное сообщение: |
|
|
| Ay49Mihas | Дата: Вт, 16.12.2014, 08:45 | Сообщение # 856 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 218
| asd123, возможно, движок ругается на пустые тэги <text>. У меня было так.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Ay49Mihas за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вт, 16.12.2014, 09:41 | Сообщение # 857 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| asd123,
Чтобы не страдать из за вылетов, пользуйтесь утилитой DialogEditor. Входит в комплект СДК.
Она лежит в папке editors\bin\tools\dialog_editor. Утилита сама расставит все нужные символы.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| asd123 | Дата: Вт, 16.12.2014, 14:33 | Сообщение # 858 |
 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 | Сообщение # 859 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 860 |
 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 | Сообщение # 861 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 862 |
 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 | Сообщение # 863 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата asd123 (  ) А можно ли в диалогах менять через <action></action> товары у торговца? Теоретически - да, просто заспавнить НПС-торговцу в инвентарь требуемые предметы.
Другой вариант: просто выдать инфопорцию и по ней изменить секцию снабжения торговца: Код [trader] buy_supplies = {+<Инфопорция>} <Вторая секция снабжения>, <Первая секция снабжения>
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| asd123 | Дата: Чт, 18.12.2014, 19:03 | Сообщение # 864 |
 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 | Сообщение # 865 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| asd123, В теге <action> должно быть имя скрипта и через точку имя функции...
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| asd123 | Дата: Чт, 18.12.2014, 20:09 | Сообщение # 866 |
 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 | Сообщение # 867 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 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 за это полезное сообщение: |
|
|
| denis2000 | Дата: Чт, 18.12.2014, 21:22 | Сообщение # 868 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| asd123, 1. ЛОГ! 2. При каких условиях вылет происходит 3. Я надеюсь новую игру начинаете 4. Что в файле диалога 5. Файл скриптов с названием 6. Секции задания в принципе достаточно
db.actor:object("drug_anabiotic", 15) - это НЕ РАБОТАЕТ! Нужно писать функцию на подобии zat_b103_actor_has_needed_food actor_has_item(drug_anabiotic:15) - это НЕ РАБОТАЕТ! Использовать нужно actor_has_item_count
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| asd123 | Дата: Чт, 18.12.2014, 22:20 | Сообщение # 869 |
 Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Цитата denis2000 (  ) zat_b103_actor_has_needed_food Нашел функцию сдачи задания по такой же функции. Объясните: Зачем в выдаче указаны такие строки?
Вот сама функция: function zat_b103_transfer_merc_supplies(first_speaker, second_speaker)
а вот те строки:
local npc = dialogs.who_is_npc(first_speaker, second_speaker) ocal actor = dialogs.who_is_actor(first_speaker, second_speaker)
У мутантов тоже есть группировки. © Движок X-Ray
|
| |
|
| Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
| denis2000 | Дата: Чт, 18.12.2014, 23:15 | Сообщение # 870 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| dialogs.who_is_npc - возвращает объект, из двух передаваемых объектов, являющийся НПС dialogs.who_is_actor - возвращает объект, из двух передаваемых объектов, являющийся ГГ
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
|