Модостроение. Общие вопросы и ответы
|
|
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 за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 29.07.2014, 10:09 | Сообщение # 571 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата a4927860 ( ) ввести нпс в состояние когда он не двигается и не атакует конечно: Код [remark] anim = ward_noweap meet = no_meet combat_ignore_cond = true combat_ignore_keep_when_attacked = true gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
a4927860 | Дата: Вт, 29.07.2014, 11:34 | Сообщение # 572 |
Новичок
Пользователи
Сообщений: 81
| denis2000,
Цитата a4927860 ( ) скриптом естественно
так чтобы можно было использовать на любом нпс а не только на том у которого настроена логика
|
|
|
Эти 0 пользователя(ей) поблагодарили a4927860 за это полезное сообщение: |
|
|
makdm | Дата: Вт, 29.07.2014, 14:40 | Сообщение # 573 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| a4927860, в ЗП у всех НПС настроена логика. Логика НПС, не выполняющих эксклюзивную работу и входящих в симуляционные сквады, прописывается в файле gulag_general.script, а пути работ в all.spawn В этом же файле прописывается приоритет работ и условия перехода с работы на работу. Пропишите туда схему remark, а также условие ( _precondition_function ) перехода на эту схему.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
a4927860 | Дата: Вт, 29.07.2014, 18:48 | Сообщение # 574 |
Новичок
Пользователи
Сообщений: 81
| следующий вопрос, есть у меня вот такой кусок кода.
[cut=кусок кода]Код if item_name=="hero_ability_6" then xr_motivator.timer6=1 local rank=read_mod_param("actor_rank") local Npc = nil if rank>=0.0 and rank<250 then Npc = "captured_tushkano" end if rank>=250.0 and rank<500 then Npc = "captured_flesh" end if rank>=500.0 and rank<750 then Npc = "captured_dog" end if rank>=750.0 and rank<1000 then Npc = "captured_pseudodog" end if rank>=1000.0 and rank<1250 then Npc = "captured_boar" end if rank>=1250.0 and rank<1500 then Npc = "captured_snork" end if rank>=1500.0 and rank<1750 then Npc = "captured_chimera" end if rank>=1750.0 then Npc = "captured_gigant" end alife():create(Npc,db.actor:position():add(db.actor:direction():mul(2)), 1, db.actor:game_vertex_id()) xr_motivator.sumnpc = Npc end [/cut]
Как мне созданного npc передать в другой скрипт? xr_motivator.sumnpc = Npc - получается nil...
Сообщение отредактировал a4927860 - Вт, 29.07.2014, 18:50 |
|
|
Эти 0 пользователя(ей) поблагодарили a4927860 за это полезное сообщение: |
|
|
makdm | Дата: Вт, 29.07.2014, 19:33 | Сообщение # 575 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| a4927860, в вашем конкретном случае зачем вам его туда передавать? В файле xr_motivator.script он сам "появится". Вы спавните нпс перед ГГ. Как только будет создан клиентский объект, он сразу начинает обрабатываться биндером. А вот отловить его в биндере можно через ID. Вместо
alife():create(Npc,db.actor:position():add(db.actor:direction():mul(2)), 1, db.actor:game_vertex_id()) xr_motivator.sumnpc = Npc
пишите
s_obj = alife():create(Npc,db.actor:position():add(db.actor:direction():mul(2)), 1, db.actor:game_vertex_id()) xr_motivator.sumnpc_id = s_obj.id
Ну а в биндере отлавливаете его
if sumnpc_id == self.object:id() then sumnpc = self.object end
З.Ы. Просмотрел что вы спавните монстров. Можно просто передать серверный объект в скрипт.
Терпение...... И все получится!
Сообщение отредактировал makdm - Вт, 29.07.2014, 19:54 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
Ay49Mihas | Дата: Ср, 30.07.2014, 12:44 | Сообщение # 576 |
Полевой исследователь
Ученые сталкеры
Сообщений: 218
| Цитата denis2000 ( ) if point_TUS:distance_to_sqr(db.actor:position()) <= radius_TUS * radius_TUS then --(Включить треш угар и т.п.) else --(Отключить треш угар и т.п.) end возвращаясь к этой теме, появился ещё один вопрос. Т.к. у меня актор при входе в зону получает по щщам и типа теряет сознание, то условие после else выполняться не будет (по сценарию он никуда не телепортируется). В скрипте пишу level.add_cam_effector("camera_effects\\fusker.anm", 25575, false, "") Что значит (как я понял) запустить эффект из указанного файла с неким ID 25575, проигрывающимся один раз. После этого должен померкнуть свет в глазах актора: level.add_pp_effector("fade_in.ppe", 25576, false) и начать спавниться неписи, которые, собственно, актора и обидели.
Отсюда вопрос: как мне начать гасить экран после проигрывания fusker.anm, а спавнить после отработки постпроцессинга fade_in.ppe? Я так понял, выполняются функции add_XX_effector() асинхронно, т.е. возвращают выполнение программе, при этом проигрывая свои эффекты в фоне.
Спасибо!
Сообщение отредактировал Ay49Mihas - Ср, 30.07.2014, 12:46 |
|
|
Эти 0 пользователя(ей) поблагодарили Ay49Mihas за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 30.07.2014, 13:15 | Сообщение # 577 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Ay49Mihas, Релизуйте таймеры (или используйте SGM-овские), по истечению определенного времени запускайте нужные эффекты и процессы.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Ay49Mihas | Дата: Ср, 30.07.2014, 13:19 | Сообщение # 578 |
Полевой исследователь
Ученые сталкеры
Сообщений: 218
| Так, на инсайде нашёл упоминание, что последний параметр у add_cam_effector() может содержать коллбэк, вызывающийся по окончании проигрывания эффекта. С этим боль-мень ясно. А как добиться того же от add_pp_effector()? В скриптах игры только случаи, когда remove_pp_effector() вызывается по некоторому событию. А мне нужно, чтобы он вызывался по событию "окончание проигрывания постпроцессинга".
Получается, просто задаю таймер и через патр секунд вызываю remove_pp_effector().
Сообщение отредактировал Ay49Mihas - Ср, 30.07.2014, 13:24 |
|
|
Эти 0 пользователя(ей) поблагодарили Ay49Mihas за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 30.07.2014, 13:47 | Сообщение # 579 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата Ay49Mihas ( ) Получается, просто задаю таймер и через патр секунд вызываю remove_pp_effector() Да, так обычно и делают. Или запускают одновременно cam и pp эффекторы, а по колбеку cam эффектора выполняют действия и гасят pp эффект (если он зациклен), или не гасят рр эффект он просто сам завершается (если он не зациклен).
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
suhar_ | Дата: Ср, 30.07.2014, 19:56 | Сообщение # 580 |
Бывалый
Пользователи
Сообщений: 106
| Возникла надобность перегнать пару моделек из формата .object в .ogf в обход экспорта SDK. Есть ли какие-нибудь конвертеры для этого? Из .ogf в .object их найти не сложно, но мне нужен как раз таки обратный случай. Дабы не задавали вопросы типа: "А почему бы не воспользоваться стандартным экспортом в SDK?" - поясню: при экспорте SDK выдает ошибку, суть которой я, к сожалению, понять и устранить не смог. Была использована и отредактирована модель оружия из Arsenal Mod "Берилл М" (gamedata\meshes\dynamics\weapons\wpn_berylm), возможно, кто-то с этим уже сталкивался.
MESHTOOL/OGFVIEWER denis2000
denis2000, как это можно проделать в MESHTOOL/OGFVIEWER?
Открыть в формате object и сохранить в ogf. denis2000
Сообщение отредактировал suhar_ - Ср, 30.07.2014, 22:31 |
|
|
Эти 0 пользователя(ей) поблагодарили suhar_ за это полезное сообщение: |
|
|
Dion51Rus | Дата: Пт, 01.08.2014, 03:49 | Сообщение # 581 |
Гражданский
Пользователи
Сообщений: 2
| Вопрос по ЧН
Какие файлы отвечают за то что бармен Холод продаёт?
misc\trade\trade_barmen_all.ltx denis2000
Спасибо!
Сообщение отредактировал Dion51Rus - Пт, 01.08.2014, 09:33 |
|
|
Эти 0 пользователя(ей) поблагодарили Dion51Rus за это полезное сообщение: |
|
|
Lipton | Дата: Пт, 01.08.2014, 11:13 | Сообщение # 582 |
Гражданский
Пользователи
Сообщений: 5
| Вопрос по ЗП. В одном моде техника Кардана со Скадовска перенесли на Янов, а медика Тремора удалили. Подскажите, как можно создать новых НПС, чтобы они заняли места Кардана и Тремора? З.Ы.: Имеются ввиду их смарт-каверы. З.З.Ы.: Может, урок какой есть, или пособие?
Сообщение отредактировал Lipton - Пт, 01.08.2014, 11:15 |
|
|
Эти 0 пользователя(ей) поблагодарили Lipton за это полезное сообщение: |
|
|
Dion51Rus | Дата: Пт, 01.08.2014, 12:48 | Сообщение # 583 |
Гражданский
Пользователи
Сообщений: 2
| Ещё один последний вопрос по ЧН.
Какой файл отвечает за выдачу Суловым оружия в самом начале игры? Если можно, то укажите и конкретную строку где это прописано.
Скрипт dialogs_marsh.script, самая первая функция. denis2000
Благодарю!!!
Сообщение отредактировал Dion51Rus - Пт, 01.08.2014, 22:21 |
|
|
Эти 0 пользователя(ей) поблагодарили Dion51Rus за это полезное сообщение: |
|
|
Ay49Mihas | Дата: Пт, 01.08.2014, 13:06 | Сообщение # 584 |
Полевой исследователь
Ученые сталкеры
Сообщений: 218
| Цитата Lipton ( ) Подскажите, как можно создать новых НПС, чтобы они заняли места Кардана и Тремора? З.Ы.: Имеются ввиду их смарт-каверы. В SGM есть новый медик, который сидит вместо Тремора после смерти оного. Вот часть его логики: Код [animpoint@base] cover_name = zat_a2_sc_medic out_restr = zat_a2_sr_noweap use_camp = false meet = meet invulnerable = true combat_ignore_cond = true combat_ignore_keep_when_attacked = true
Сообщение отредактировал Ay49Mihas - Пт, 01.08.2014, 13:15 |
|
|
Эти 0 пользователя(ей) поблагодарили Ay49Mihas за это полезное сообщение: |
|
|
suhar_ | Дата: Пт, 01.08.2014, 13:07 | Сообщение # 585 |
Бывалый
Пользователи
Сообщений: 106
| При создании новых бустеров натолкнулся на следующий вопрос. В файле конфигов бустеров items.ltx нет секции, отвечающей за его тип. Например, я создал новую еду, аптечку и энергетик. При вызове контекстного меню для этих предметов в рюкзаке можно увидеть 2 действия: "использовать" и "выбросить", тогда как для уже существующих в игре продуктов (консервы, колбаса, хлеб) в первом случае выводится строка "съесть", для энергетика/водки - "выпить". Кроме того, новые продукты не хотят принимать заблудившиеся наёмники на цехах подстанции (ЗП), то же самое обстоит с ранеными сталкерами, которые не хотят брать новую уптечку. Из этого всего напрашивается вывод, где-то есть параметр, отвечающий за тип бустера (еда/выпивка/аптечка, возможно, есть ещё какие-то типы). Вопрос, как найти этот параметр?
Сообщение отредактировал suhar_ - Пт, 01.08.2014, 13:12 |
|
|
Эти 0 пользователя(ей) поблагодарили suhar_ за это полезное сообщение: |
|
|
|