Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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]
 
a4927860Дата: Сб, 05.07.2014, 13:04 | Сообщение # 496
Новичок
Пользователи
Сообщений: 81
Награды: 0
Репутация: [ 22 ]

Добрый день!
Решил вот пока выходные заняться сталкером.

Есть идея как усложнить жизнь игоку придав реализма:
1) реалистичные магазины
ввести новые предметы магазины для всех видов оружия, при этом магазины при использовании не тратяться а пустеют
как оно должно выглядеть - имеем 2 предмета в инвентаре по использованию предмета магазин - проверяем наличие предмета патроны - если есть - заряжаем магазин (удаляем магазин пустой - создаем полный) - тут все приблезительно понятно
вот только дальше возникают трудности... как считать количество патронов в магазине например? как сделать чтобы они были не стакающиеся между собой?

2) реалистичный рюкзак
ограничить количество места (клеток) в рюкзаке и ввести предмет Рюкзак - бокс который можно таскать с собой и который весит как свой вес + вес всех предметов внутри себя.
при использовании предмета рюкзак мы на 5 сек делаем игрока непередвигаемым и не используем предметы - это как делать тоже понятно... Но вот как ограничить рюкзак теперешний? как сделать чтобы предметы складывались в бокс и менялся его вес?

Добавлено (05.07.2014, 13:04)
---------------------------------------------
Ну и раз уж написал - в SGM есть телохранители (по умолчанию они в сквады не добавлены)
3) как добавить нпс в сквад скриптом? или как сделать сквад активным если один из нпс этого сквада уже создан?
4) как сделать нпс бессмертным, но не просто бессмертным а так чтобы присмерти он падал прося аптечку и становился бессмертным (нельзя было его добить)?

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

реалистичные магазины Это давно сделано в моде "Магазинное питание оружия" для ТЧ. Я делал адаптацию этого мода для текущей версии мода "Время альянса".
реалистичный рюкзак
Но вот как ограничить рюкзак теперешний? - а что тут сложного, итерируешся по предметам рюкзака и считаешь объем, если больше заданного - варианты действий: выкинуть последний добавленный предмет под ноги или обездвижить ГГ (например добавлением в рюкзак невидимого предмета с огромным весом).
как сделать чтобы предметы складывались в бокс и менялся его вес Такой бокс есть в моде Смерти вопреки. Одним днем живу (там есть контейнер для артефактов с такими свойствами). А вес можно регулировать так, как это сделано в том же "Магазинном питании" - черная материя, предмет не отображающийся в рюкзаке но имеющий вес (в моде это оружие которое не имеет веса, но которое можно зарядить патронами которые весят 1кг или 0.1 кг, для регулировки веса)
как добавить нпс в сквад скриптом? Обсуждалось совсем недавно - не ленитесь читать темы.
как сделать сквад активным если один из нпс этого сквада уже создан? Если есть хоть один НПС в скваде, то он активен (или вы какую-то другую активность имеете ввиду).
как сделать нпс бессмертным, но не просто бессмертным а так чтобы присмерти он падал прося аптечку и становился бессмертным (нельзя было его добить)? Элементарно - есть логика вашего НПС в ней делайте его бессмертным, например так:
Код
invulnerable = {=is_wounded} true, false

Но вероятно в таком виде полного бессмертия добиться не получиться.


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

Спасибо за ответ!

1) Скачиваю - попробую разобраться.

2) На сколько я понял мне нужно:
2.1 перерисовать интерфейс так часть рюкзака была закрыта так как мне нужно
2.2 подсчитывать объем всех предметов в рюкзаке и складывать его (0_о а как его считать то?)

3) Телохранители: в SGM есть проводники и есть телохранители
скрипт проводников настроен так что работает только с сквадами, телохранители в сквады не входят.
если я делаю сквад (добавляю его в файлы) но не делаю его спавн (оставляю спавн телохранителей) то при запросе сквада телохранителя скрипт выдает nil (нпс есть а сквада нет)
(добавление нпс в сквад скриптом искал в скриптах и в учебнике (КМБ) - пусто, но я еще раз пересмотрю)

4) спасибо - понял, применю

[cut=сожаление, страдание, боль]Ох жеж... это есть там а это есть там а этого всего столько......
на самом деле это проблема сталкера которая не разрешаема (по крайней мере я не видел ниодной реализации) во всех офлайновых популярных рпг уже давно есть прелоадеры модов. Если бы такой прелоадер появился для сталкера, или хотябы сделали прелоадер с указанием как делать моды чтобы он мог их кушать - то ресурс и сам Сталкер стали бы в разы популярнее...
Сейчас же тонны матерьяла которые нельзя обьединять ни как кроме как руками.[/cut]
 
denis2000Дата: Сб, 05.07.2014, 18:46 | Сообщение # 499
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

1. Смотрите в личке.
2.
Цитата a4927860 ()
а как его считать то?

Например так:
[cut]
Прописать в секцию каждому объекту параметр amount - равный объему предмета в литрах или дм^3.
В скрипте bind_stalker.script в функции actor_binder:on_item_take (obj) вписать в самом начале
Код
amount.actor_inventory_control(obj)

В скрипте amount.script вписать функцию:
Код
function actor_inventory_control(object)
      local ini = system_ini()
      local V = 0
      local function V_object_item(item)
       if ini:line_exist(item:section(),"amount") then
        V = V + ini:r_float(item:section(),"amount")
       end
      end
      actor:inventory_for_each(V_object_item)
      if V > 100 then --Объем рюкзака например 100 л
       --Действие на превышение объема с учетом того что object - последний добавленный предмет
      end
           
end

[/cut]
3.
Цитата a4927860 ()
Телохранители: в SGM есть проводники и есть телохранители

а. Зачем вам телохранителия в сквадах?
б. Если вы описали секцию сквада и не спавнили сквад, то сквада нет (nil) - все закономерно!
в. Не так уж и трудно найти: Добавить НПС в сквад


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

denis2000, Спасибо большое!

Еще раз понял что делать то в чем не разбираешься очень грустно и печально. Придумывать - вот это моя стезя.

Телохранителя в сквад чтобы можно было отрабатывать travel_manager
смысл в том что телохранитель "всегда" с тобой (если не умер и не заглючил) соответственно заплатить ему за переход по локации (он то должен её как свои пять пальцев знать) гораздо логичнее чем вместе с ним бежать искать какого нибудь чудака который по локации идет.

Добавлено (05.07.2014, 20:35)
---------------------------------------------
сделал, потестил...
1) invulnerable = {=is_wounded} true, false
не работает (или работает не так как я ожидаю) - телохранитель все равно мрет от вытрела любым тяжелым оружием (например гранатометом) вместо того чтобы упасть и грустить пока я не предложу ему аптечку

2) добавил в тревел вот такой вот костыль
if get_object_squad(npc) == nil then
%=create_squad(bodyguard_1:zat_a1)%
%=create_squad_member(npc:bodyguard_1)%
end
Он при проверке игра вылетает без лога. Чувствую что должен был чтото добавить в то что написано - но без понятия что wacko

%= % убирать пробовал...

Добавлено (05.07.2014, 20:37)
---------------------------------------------
Смысл то был таков - добавить существующего стоящего передо мной телохранителя в сквад чтобы он мог пройти проверки тревела...

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

Цитата a4927860 ()
телохранитель все равно мрет от вытрела любым тяжелым оружием

200% работает! Что-то делали не так. Эта строка у меня добавлена во все секции bodyguard@*** и как только НПС переключился на секцию wonded то убить его невозможно. Да и еще если вы редактируете текущую рабочую секцию логики НПС, то изменения в ней вступят в силу только после перезагрузки секции (в общем случае увольте телохранителя и наймите его снова).

Цитата a4927860 ()
добавил в тревел вот такой вот костыль

Вы функции из логики применяете в скриптах! В скриптах нужно писать совершенно не так:
Код
xr_effects.create_squad(nil,nil,{"bodyguard_1","zat_a1"})


Цитата a4927860 ()
добавить существующего стоящего передо мной телохранителя в сквад чтобы он мог пройти проверки тревела...

Вообще телохранитель способен телепортироваться к ГГ при большом удалении от него, не помню точно работает ли это при телепортировании самого ГГ (посмотрел функции в принципе не должен он просто уйдет в офлайн и логика не сработает). Если не работает может не изобретать адский велосипед и просто доработать телепортацию телохранителя даже при таких скачках?


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

denis2000,
я вам верю на слово - потому как при проверке он у меня умирает.
нужно ли его переспаунивать для того чтобы применилась логика? может перейти на другую локацию и вернуться обратно?

Цитата denis2000 ()
Вы функции из логики применяете в скриптах! В скриптах нужно писать совершенно не так:
Код
xr_effects.create_squad(nil,nil,{"bodyguard_1","zat_a1"})


простите - я не прав. но проблемы это не решает.
я понял что очень плохо объясняю - так что попробую еще раз

в SGM 2.2 все вольно гуляющие сквады (их лидеры) могут быть проводниками и это замечательно, но мне нужно чтобы мой телохранитель тоже стал проводником, диалог я ему добавил, но он не проходит по тревел менеджеру потому что он не состоит в скваде. Мне нужно его (телохранителя) добавить в сквад для того чтобы он мог водить меня по локации. Добавить его я могу только в скрипте - и возникает вопрос как в скрипте добавить живого нпс конкретный пустой только что заспауненый для него сквад
 
denis2000Дата: Сб, 05.07.2014, 23:02 | Сообщение # 503
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата a4927860 ()
нужно ли его переспаунивать для того чтобы применилась логика?

Можно и переспавнить, а можно и то что я предложил выше.
Цитата a4927860 ()
может перейти на другую локацию и вернуться обратно?

Это не сменит текущую логику.

Цитата a4927860 ()
я понял что очень плохо объясняю - так что попробую еще раз

Я понял что вы имеете ввиду. Но геморой со сквадом я категорически не поддерживаю, о чем вам и сказал постом выше.
[cut]Попробуйте в файле travel_manager.script в функции traveling() после
Код
local position = patrol(traveler_squad_path):point(0)
traveler_squad:set_squad_position(position)
teleport_flag = true

добавить
Код

for k,v in pairs(xr_bodyguard.bodyguards_config) do
if get_story_object_id(k)~=nil and xr_bodyguard.bodyguards_config[k].avail_teleport==true then
if has_alife_info(k.."_pursue") and dont_has_alife_info(k.."_stop") and dont_has_alife_info(k.."_stand_and_fire") then
sgm_flags.table_mod_teleports[k]={}
sgm_flags.table_mod_teleports[k].x=point:point(0).x
sgm_flags.table_mod_teleports[k].y=point:point(0).y
sgm_flags.table_mod_teleports[k].z=point:point(0).z
end
end
end
[/cut]


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

denis2000, спасибо, а что вы можете мне посоветовать с точки зрения телохранитель=проводник?
или вы считаете что данная схема не логична?
 
denis2000Дата: Сб, 05.07.2014, 23:24 | Сообщение # 505
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

a4927860, Ну почему если вы серьезно допилите логику xr_bodyguard.script, то вполне возможно, только зачем если многие сквады могут провести да плюс guidebook есть.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
alex_xp_77Дата: Вс, 06.07.2014, 15:09 | Сообщение # 506
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
Награды: 6
Репутация: [ 41 ]

Доброго всем дня!! тестил готовые локи, произошел вылет на базе бандосов, такого тип:[error]Expression : ai().level_graph().valid_vertex_id(vertex->data().level_vertex_id())
[error]Function : CPatrolPathManager::select_point
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\patrol_path_manager.cpp
[error]Line : 164
[error]Description : patrol path[pri_stalker_46_walk], point on path [name00],object [terrain_baza_stalker_0015]
Непонятно, никогда не вылетало, а тут на тебе , может виновата синяя лента в колючку, я ферму обставил бордером, что бы попасть можно было только с главного входа, и еще маленький вопросик, в логе появился новый файл название: xray_Администратор, при переходе на другую локу, он высвечивается первый, хотя до этого его не было, был как обычно мой один лог:xray_алекс, не понятно от куда он взялся, и как повлияет на дельнейшее прохождение игры!! Подскажите пожалуйста , как это лечить!Заранее весьма благодарен!!


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

Цитата alex_xp_77 ()
может виновата синяя лента в колючку, я ферму обставил бордером

А АИ-сетка после такого была приведена в адекватное состояние? И вообще насколько корректна АИ-сетка, не стоят ли на ней статические объекты? Не обделили ли лагерь графпоинтом, а еще желательно чтобы там несколько их было.

Цитата alex_xp_77 ()
xray_Администратор, при переходе на другую локу, он высвечивается первый, хотя до этого его не было, был как обычно мой один лог:xray_алекс, не понятно от куда он взялся, и как повлияет на дельнейшее прохождение игры!

Без коментариев!


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

denis2000, Доброе утро
Я кажеться понял в чем у меня проблема с не бессмертными телохранителями
invulnerable = {=is_wounded} true, false не срабатывает просто потому что у них не работает параметр is_wounded - они ни при каких условиях не падают в отключку - пробовал на разных - сносил им все хп и оставлял истекать %стекать кровью - умирают стоя.
в m_stalker.ltx поставил бодигвардам
can_be_wounded = true
но ни чего не поменялось - может еще где этот параметр можно добавить/убрать?

Проверьте секции этих НПС, там can_be_wounded = false. denis2000

если вы имеете ввиду секцию бодигвардов в m_stalker то я её изменил

[cut=секция бодигвардов]
[stalker_bodyguard]:stalker
$spawn = "stalkers\stalker_bodyguard"
Health = 75
combat_exit_delay = false
corpse_detection = false
can_be_wounded = true
wounded_detection = true
gather_detection = false
avoid_mines = true
max_ignore_distance = 30.0
immunities_sect = stalker_bodyguard_immunities[/cut]

или вы имеете ввиду чтото другое?

Да, например [zat_stalker_bodyguard]. denis2000

И еще - может ли быть что условия которые я использую в логике вообще не принимаются?

[cut=Условия которые сейчас пытаюсь использовать]
invulnerable = {=health_le(0.1)} true, false
move_state_when_center = {=health_le(0.3)} wounded_heavy
hp_state = {=health_le(0.3)} 20|wounded_heavy@help_heavy
hp_state_see = {=health_le(0.3)} 20|wounded_heavy@help_heavy
[/cut]

Они почти все не принимаються, поскольку xr_move.scropt о них понятия не имеет. denis2000

у меня нет секции zat_stalker_bodyguard в m_stalker....

А я и не говорил, что она там. Поиск в помощь: spawn_sections_extended_stalkers.ltx denis2000
 
mistofatДата: Пн, 07.07.2014, 16:13 | Сообщение # 509
Новичок
Пользователи
Сообщений: 83
Награды: 0
Репутация: [ 10 ]

[off]Добрый день.Вновь решил заняться ковырянием в файлах и модостроительством. Только на этот раз решил сделать свой мод(не выкладывая публично,ибо будут заимствованы конфиги с SGM'a(с разрешением конечно же и указанием в любом случае настоящего автора) ну и возможно других модов[/off]
1.Можно ли перенести все аномалии с Припяти,Юпитера и Затона,если да,то дайте руководство по этому
2.Как сделать устойчивость к аномалиям у НПС такую же,как у меня(А то они бессмертны)
3.Как сделать такую же устойчивость к пулям у меня,как у нпс?(а то я какой то уж бессмертный выходит) Править конфиги брони или конфиги иммунитета?
4.Можно ли править конфиги брони в определённых местах? Ну хотелось бы сделать экзо,чтобы выдерживал пули(немного) но кроме секции глаз
5.Можно ли полностью убрать HUD на экране и отключить вывод сообщений на экран?
6.И можно ли сделать,чтобы свойства артефактов были лишь временные: К примеру медуза(радиация -2) действовал нуу минут 25(реальных) а потом как бы некоторое время была перезарядка

[cut=Извинения (немного флуда) ]Прошу прощение за столь много вопросов,но просто таких конфигов я ещё не касался,а работал лишь по мелочи,надеюсь на ваше понимание и на вашу помощь. Так же буду признателен о консультациях и помощи в лс[/cut]

Тег "spoiler" не поддерживает скобки. Заменил на "cut".
FantomICW
 
FantomICWДата: Пн, 07.07.2014, 16:33 | Сообщение # 510
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

mistofat, рекомендую скачать сборник модостроения от Хована (см. шапку темы). Там даны ответы на многие подобные вопросы.
1. О каких аномалиях идет речь?
5. Элементы худа можно отключить так:
Код
function hide_hud()
       level.disable_input()
       level.hide_indicators_safe()
       local hud = get_hud()
       hud:HideActorMenu()
       hud:HidePdaMenu()
end   

Есть и альтернативные варианты, безусловно. В частности, уже готовые функции из xr_effects.script:
Код
function disable_ui(actor, npc, p)
function disable_ui_only(actor, npc)



 
Поиск: