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

Цитата =Stalker123= ()
Можно как-то в ЗП сделать чтобы аномалии реагировали на нпс?

Это реализовано во многих модах, в частности в "Припять. Точка отсчета". Если не дружите со скриптами, то даже не пытайтесь.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
=Stalker123=Дата: Пт, 13.05.2016, 10:08 | Сообщение # 1847
Гражданский
Пользователи
Сообщений: 6
Награды: 0
Репутация: [ 0 ]

Цитата denis2000 ()

Это реализовано во многих модах, в частности в "Припять. Точка отсчета". Если не дружите со скриптами, то даже не пытайтесь.


Жаль, надеялся, что дело затронет лишь конфигурации. Не подскажите ещё один момент?
Пытаюсь добавить в солянку "Мясник-мод".
Мод содержит части собак, псевдособак, снорков, кабанов, кровососов и плотей, вот только там нет руки бюрера, которую-бы очень хотелось видеть в игре. В некоторых файлах мода она прописана. Файловая структура такова:
Код
*configs\creatures\m_*имя мутанта*; Конфиг для каждого мутанта на снятие части
*configs\misc\monster_items; Прописанные части мутантов
*configs\text\rus\string_table_enc_mutants; Названия и описания частей
*configs\localization; Скрипт-ссылка на вышеуказанный файл
*configs\system; Инклуд (включение) в файл "misc\monster_items.ltx"
*meshes\dynamics\equipments\item_*имя части*; Игровая модель выброшенного предмета
*scripts\bind_monster; Скрипт коллбека убитого монстра на спавн и снятие части
*textures\ui\ui_icon_equipment; Иконки в рюкзаке


Я постарался добавить руку бюрера её во все необходимые файлы:
Код
*configs\creatures\m_burer; Прописал снятие на основе других мутантов, всё готово.
*configs\misc\monster_items; Итем руки бюрера был прописан создателем мода.
*configs\text\rus\string_table_enc_mutants; Добавил описание предмета и название.
*configs\localization; Изменения не нужны
*configs\system; Тоже не нужны
*meshes\dynamics\equipments\item_burer_hand; Добавил 3D модель.
*scripts\bind_monster; Изменения не требуются, коллбек универсален для всех мутантов.
*textures\ui\ui_icon_equipment; Иконка добавлена создателем мясника


После всех попыток добавления руки при нажатии на убитого бюрера ничего не происходит, хотя во всех недостающих файлах я её добавил. С других матантов части снимаются. Итем руки mutant_burer_hand прописан без ошибок. В чём может быть проблема?
 
denis2000Дата: Сб, 14.05.2016, 11:30 | Сообщение # 1848
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

=Stalker123=, Приведите файлы configs\creatures\m_burer и scripts\bind_monster.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
=Stalker123=Дата: Сб, 14.05.2016, 15:50 | Сообщение # 1849
Гражданский
Пользователи
Сообщений: 6
Награды: 0
Репутация: [ 0 ]

denis2000,

configs\creatures\m_burer


scripts\bind_monster
 
denis2000Дата: Сб, 14.05.2016, 16:40 | Сообщение # 1850
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

=Stalker123=, Надпись на монстре перед использованием есть?
Spawn_Inventory_Item_Probability отличное от 0 ставили?


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
=Stalker123=Дата: Вс, 15.05.2016, 03:10 | Сообщение # 1851
Гражданский
Пользователи
Сообщений: 6
Награды: 0
Репутация: [ 0 ]

denis2000, пробовал, игра вылетает с логом Can't open section 'mutant_burer_hand,2'. Please attach [*.ini_log] file to your bug report.

Кстати, у других работающих мутантах это значение стоит 0.0 и часть снимается. Попробовал поставить кабану (части работают у него) - тоже вылеты идут

UPD
Нет, надпись не появляется на бюрере


Сообщение отредактировал =Stalker123= - Вс, 15.05.2016, 10:26
 
denis2000Дата: Вс, 15.05.2016, 18:58 | Сообщение # 1852
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата =Stalker123= ()
Нет, надпись не появляется на бюрере

Сделайте в конфиге строку в таком виде:
Spawn_Inventory_Item_Section = mutant_burer_hand
Или пробуйте пробел перед цифрой:
Spawn_Inventory_Item_Section = mutant_burer_hand, 2


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
=Stalker123=Дата: Пн, 16.05.2016, 10:13 | Сообщение # 1853
Гражданский
Пользователи
Сообщений: 6
Награды: 0
Репутация: [ 0 ]

denis2000, увы, нет. Никакого результата. При нажатии на убитого бюрера ничего не происходит
 
denis2000Дата: Пн, 16.05.2016, 13:16 | Сообщение # 1854
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

=Stalker123=, Могу сказать одно, условие из скрипта:
Код
if self.item and system_ini():section_exist(self.item) then

не выполняется. Или в таблицу в принципе ничего не попадает или секции с именем которое содержит переменная self.item нет в конфиге. Поэтому нет текстовой подсказки на Бюрере нет колбека на объект при юзанье.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Пн, 16.05.2016, 19:55 | Сообщение # 1855
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день. Интересует такой вопрос.

В Зове Припяти бандиты не водят игрока по локации. Это проверяет функция uni_traveler_precond в travel_manager.

Код проверки.

if npc:character_community() == "bandit" then
return false
end

В СГМ много несквадовых НПС. Базы бандитов, наемников, Рассвета и т.д. Если подойти к такому НПС и спросить "Чем занимаешься" - инициируем травел-диалог, то получим вылет из-за того, что непись несквадовый.

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

sergej5500, Лог вылета какой?
По идее если НПС не в скваде то get_object_squad(npc) == nil и значит условие далее должно быть таким:
Код
if squad == nil or squad:commander_id() ~= npc:id() then
  return false
    end


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
ZmeеYДата: Пн, 16.05.2016, 23:20 | Сообщение # 1857
Новичок
Пользователи
Сообщений: 54
Награды: 5
Репутация: [ 500 ]

Здравствуйте.
Не подскажите, реально ли сделать цену продажи предмета торговцем более 1.000.000?
В конфиге предмета ставлю цену (costs) допустим 3.000.000, но торговец всё равно дороже 1.000.000 не продаёт.


Я один, но это не значит, что я одинок...
_________________________________ В.Цой
 
denis2000Дата: Вт, 17.05.2016, 11:32 | Сообщение # 1858
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

ZmeеY, Вероятнее всего - нет, уткнулись в ограничения переменных движка. Кстати даже если у НПС бесконечные деньги то более 1000000 он тоже не заплатит (не хватит "бесконечных" денег).

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
=Stalker123=Дата: Вт, 17.05.2016, 13:08 | Сообщение # 1859
Гражданский
Пользователи
Сообщений: 6
Награды: 0
Репутация: [ 0 ]

Цитата denis2000 ()
=Stalker123=, Могу сказать одно, условие из скрипта:
Код
if self.item and system_ini():section_exist(self.item) then

не выполняется. Или в таблицу в принципе ничего не попадает или секции с именем которое содержит переменная self.item нет в конфиге. Поэтому нет текстовой подсказки на Бюрере нет колбека на объект при юзанье.


Хорошо, спасибо за помощь в этом деле. Буду пытаться сделать что-то толковое.
 
sergej5500Дата: Вт, 17.05.2016, 19:49 | Сообщение # 1860
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата denis2000 ()
sergej5500, Лог вылета какой?


[cut=Лог вылета]FATAL ERROR

[error]Expression : !m_error_code
[error]Function : raii_guard::~raii_guard
[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
[error]Line : 748
[error]Description : ...g\Зов Припяти\gamedata\scripts\travel_manager.script:88: attempt to index local 'squad' (a nil value)


stack trace:[/cut]

Вылет получаю при любой попытке разговора с несквадовым сталкером с дефолтными диалогами.

[cut=Глючная функция]function uni_traveler_precond(actor, npc)
local squad = get_object_squad(npc)
local new_target = xr_logic.pick_section_from_condlist(db.actor, squad, squad.action_condlist) --88строка
if new_target ~= nil and new_target ~= "nil" then
return false
end
if squad ~= nil and squad:commander_id() ~= npc:id() then
return false
end
if npc:character_community() == "bandit" then
return false
end
if level.name() == "jupiter_underground" then
return false
end
if npc:character_community() == "army" then
return false
end
local smart = xr_gulag.get_npc_smart(npc)
if (smart) then
if smart:name() == "jup_b41" then
return false
end
end
return true
end[/cut]

Фрагмент кода

local new_target = xr_logic.pick_section_from_condlist(db.actor, squad, squad.action_condlist)
if new_target ~= nil and new_target ~= "nil" then
return false
end


был добавлен по совету Дмитрия (makdm). Подробности тут. Для сквадовых сталкеров он работает отлично.

Если этот код убрать (закоментировать), то диалоги становятся доступными. Но при инициации травел-диалога (Чем сейчас занимаешься?) получаю другой вылет.

[cut=Лог]FATAL ERROR

[error]Expression : !m_error_code
[error]Function : raii_guard::~raii_guard
[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
[error]Line : 748
[error]Description : ...g\Зов Припяти\gamedata\scripts\travel_manager.script:184: attempt to index local 'npc_squad' (a nil value)


stack trace:[/cut]

[cut=Функция]function squad_action_description(actor, npc, dialog_id, phrase_id)
local npc_squad = get_object_squad(npc)
if npc_squad.current_action == nil or npc_squad.current_action.name == "stay_point" then --184 строка
return "dm_" .. "stalker" .."_doing_nothing_"..tostring(math.random(1,3)) --npc:character_community()
end
local target_id = npc_squad.assigned_target_id
-- if target_id == nil then
-- return "dm_" .. npc:character_community() .."_doing_nothing"
-- end
local target_obj = alife():object(target_id)
if target_obj == nil then
abort("SIM TARGET NOT EXIST %s, action_name %s", tostring(target_id), tostring(npc_squad.current_action.name))
end
local target_clsid = target_obj:clsid()
if target_clsid == clsid.script_actor then
abort("Actor talking with squad, which chasing actor")
elseif target_clsid == clsid.online_offline_group_s then
return "dm_" .. "stalker" .."_chasing_squad_"..alife_character_community(target_obj) --npc:character_community()
elseif target_clsid == clsid.smart_terrain then
local smart_name = target_obj:name()
local travel_class = get_travel_class()
local desc = travel_class.smart_to_stringtables[smart_name]
if desc == nil then
abort("wrong smart name [%s] in travel_manager.ltx", tostring(smart_name))
end
return desc
end
abort("wrong target clsid [%s]", tostring(target_clsid))
end[/cut]
 
Поиск: