Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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]
 
denis2000Дата: Вт, 29.07.2014, 10:09 | Сообщение # 571
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата 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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
a4927860Дата: Вт, 29.07.2014, 11:34 | Сообщение # 572
Новичок
Пользователи
Сообщений: 81
Награды: 0
Репутация: [ 22 ]

denis2000,

Цитата a4927860 ()
скриптом естественно


так чтобы можно было использовать на любом нпс а не только на том у которого настроена логика
 
makdmДата: Вт, 29.07.2014, 14:40 | Сообщение # 573
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

a4927860, в ЗП у всех НПС настроена логика.
Логика НПС, не выполняющих эксклюзивную работу и входящих в симуляционные сквады, прописывается в файле gulag_general.script, а пути работ в all.spawn
В этом же файле прописывается приоритет работ и условия перехода с работы на работу.
Пропишите туда схему remark, а также условие ( _precondition_function ) перехода на эту схему.


Терпение......
И все получится!
 
a4927860Дата: Вт, 29.07.2014, 18:48 | Сообщение # 574
Новичок
Пользователи
Сообщений: 81
Награды: 0
Репутация: [ 22 ]

следующий вопрос, есть у меня вот такой кусок кода.

[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
 
makdmДата: Вт, 29.07.2014, 19:33 | Сообщение # 575
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

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
 
Ay49MihasДата: Ср, 30.07.2014, 12:44 | Сообщение # 576
Полевой исследователь
Ученые сталкеры
Сообщений: 218
Награды: 9
Репутация: [ 83 ]

Цитата 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
 
denis2000Дата: Ср, 30.07.2014, 13:15 | Сообщение # 577
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Ay49Mihas, Релизуйте таймеры (или используйте SGM-овские), по истечению определенного времени запускайте нужные эффекты и процессы.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Ay49MihasДата: Ср, 30.07.2014, 13:19 | Сообщение # 578
Полевой исследователь
Ученые сталкеры
Сообщений: 218
Награды: 9
Репутация: [ 83 ]

Так, на инсайде нашёл упоминание, что последний параметр у add_cam_effector() может содержать коллбэк, вызывающийся по окончании проигрывания эффекта. С этим боль-мень ясно.
А как добиться того же от add_pp_effector()? В скриптах игры только случаи, когда remove_pp_effector() вызывается по некоторому событию. А мне нужно, чтобы он вызывался по событию "окончание проигрывания постпроцессинга".

Получается, просто задаю таймер и через патр секунд вызываю remove_pp_effector().


Сообщение отредактировал Ay49Mihas - Ср, 30.07.2014, 13:24
 
denis2000Дата: Ср, 30.07.2014, 13:47 | Сообщение # 579
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата Ay49Mihas ()
Получается, просто задаю таймер и через патр секунд вызываю remove_pp_effector()

Да, так обычно и делают. Или запускают одновременно cam и pp эффекторы, а по колбеку cam эффектора выполняют действия и гасят pp эффект (если он зациклен), или не гасят рр эффект он просто сам завершается (если он не зациклен).


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
suhar_Дата: Ср, 30.07.2014, 19:56 | Сообщение # 580
Бывалый
Пользователи
Сообщений: 106
Награды: 0
Репутация: [ 0 ]

Возникла надобность перегнать пару моделек из формата .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
 
Dion51RusДата: Пт, 01.08.2014, 03:49 | Сообщение # 581
Гражданский
Пользователи
Сообщений: 2
Награды: 0
Репутация: [ 0 ]

Вопрос по ЧН

Какие файлы отвечают за то что бармен Холод продаёт?

misc\trade\trade_barmen_all.ltx denis2000


Спасибо!


Сообщение отредактировал Dion51Rus - Пт, 01.08.2014, 09:33
 
LiptonДата: Пт, 01.08.2014, 11:13 | Сообщение # 582
Гражданский
Пользователи
Сообщений: 5
Награды: 0
Репутация: [ 0 ]

Вопрос по ЗП. В одном моде техника Кардана со Скадовска перенесли на Янов, а медика Тремора удалили. Подскажите, как можно создать новых НПС, чтобы они заняли места Кардана и Тремора? З.Ы.: Имеются ввиду их смарт-каверы. З.З.Ы.: Может, урок какой есть, или пособие?

Сообщение отредактировал Lipton - Пт, 01.08.2014, 11:15
 
Dion51RusДата: Пт, 01.08.2014, 12:48 | Сообщение # 583
Гражданский
Пользователи
Сообщений: 2
Награды: 0
Репутация: [ 0 ]

Ещё один последний вопрос по ЧН.

Какой файл отвечает за выдачу Суловым оружия в самом начале игры? Если можно, то укажите и конкретную строку где это прописано.

Скрипт dialogs_marsh.script, самая первая функция. denis2000

Благодарю!!!


Сообщение отредактировал Dion51Rus - Пт, 01.08.2014, 22:21
 
Ay49MihasДата: Пт, 01.08.2014, 13:06 | Сообщение # 584
Полевой исследователь
Ученые сталкеры
Сообщений: 218
Награды: 9
Репутация: [ 83 ]

Цитата 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
 
suhar_Дата: Пт, 01.08.2014, 13:07 | Сообщение # 585
Бывалый
Пользователи
Сообщений: 106
Награды: 0
Репутация: [ 0 ]

При создании новых бустеров натолкнулся на следующий вопрос. В файле конфигов бустеров items.ltx нет секции, отвечающей за его тип. Например, я создал новую еду, аптечку и энергетик. При вызове контекстного меню для этих предметов в рюкзаке можно увидеть 2 действия: "использовать" и "выбросить", тогда как для уже существующих в игре продуктов (консервы, колбаса, хлеб) в первом случае выводится строка "съесть", для энергетика/водки - "выпить". Кроме того, новые продукты не хотят принимать заблудившиеся наёмники на цехах подстанции (ЗП), то же самое обстоит с ранеными сталкерами, которые не хотят брать новую уптечку. Из этого всего напрашивается вывод, где-то есть параметр, отвечающий за тип бустера (еда/выпивка/аптечка, возможно, есть ещё какие-то типы). Вопрос, как найти этот параметр?

Сообщение отредактировал suhar_ - Пт, 01.08.2014, 13:12
 
Поиск: