Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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Дата: Пн, 16.05.2016, 22:32 | Сообщение # 1846
Полевой исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 1847
Новичок
Пользователи
Сообщений: 54
Награды: 5
Репутация: [ 500 ]

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


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

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

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

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

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


Хорошо, спасибо за помощь в этом деле. Буду пытаться сделать что-то толковое.
 
sergej5500Дата: Вт, 17.05.2016, 19:49 | Сообщение # 1850
Полевой Исследователь
Ученые сталкеры
Сообщений: 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]
 
denis2000Дата: Вт, 17.05.2016, 21:38 | Сообщение # 1851
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500,
Код
function uni_traveler_precond(actor, npc)
local squad = get_object_squad(npc)
if squad == nil then
return false
end
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
if squad:commander_id() ~= npc:id() then
return false
end


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
НаблюдательДата: Чт, 19.05.2016, 01:44 | Сообщение # 1852
Ветеран
Пользователи
Сообщений: 402
Награды: 1
Репутация: [ 59 ]

Приветствую почтеннейшую Публику! Джентльмены, помогите мудрым напутствием, пжл. В последнее время озаботился... нет, не Гондурасом, а печальным фактом отсутствия во многих модах на ЗП мини-карты. В самом лучшем моде всех времён и народов, Sigerose, умные Люди оставили файлы архивов мини-карты в папках мода. К моему величайшему сожалению, незрелые умы авторов модов попроще, не смогли осмыслить значимость мини-карты для человека тонкого и ранимого, типа меня. Я скорблю! sad Буду весьма признателен, если кто-то из уважаемых Мастеров, укажет мне точный перечень файлов мини-карты в оригинальном Зове Припяти. А то все манипуляции Вашего покорного слуги с папкой ui, приводят либо в вылетам, либо к тому, что вожделенная карта так и не появляется. Помогите, плиз, умные Люди!
 
denis2000Дата: Чт, 19.05.2016, 12:44 | Сообщение # 1853
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Наблюдатель, ui\zone_map.xml

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
НаблюдательДата: Сб, 21.05.2016, 08:03 | Сообщение # 1854
Ветеран
Пользователи
Сообщений: 402
Награды: 1
Репутация: [ 59 ]

Снова здравствуйте всем! Умные Люди, подскажите пожалуйста, можно ли прописать "неизвестному оружию", что бы механики его чинили сразу после его захвата, до квеста у Кардана, на поиск документации на гаусс-пушку? Если конечно для этого не надо вносить много правок?
 
denis2000Дата: Сб, 21.05.2016, 13:17 | Сообщение # 1855
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Наблюдатель, А смысл? Боеприпасов кот наплакал!

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
НаблюдательДата: Сб, 21.05.2016, 18:14 | Сообщение # 1856
Ветеран
Пользователи
Сообщений: 402
Награды: 1
Репутация: [ 59 ]

Цитата denis2000 ()
Наблюдатель, А смысл? Боеприпасов кот наплакал!

Уважаемый denis2000, я как всегда в своём репертуаре. smile Просто решил поиграть в Путь Бандита, там игра только на Затоне и по квестам надо отдать уничтожитель(гаусс) Султану. Я при помощи своих скромных знаний по ЗП, естественно пробрался и на Юпитер, и в Припять. Там спавнится всяких злых гоблинов(химер, псевдогигантов, бюреров) очень много. Так вот, в моде, Кардан посылает в подземную лабораторию за документами на гаусс, до Припяти в обычной игре. Гаусс, по квестам, я отдал Султану, потом подобрал неизвестное оружие в Припяти, приношу его Кардану, а тот на него ну никак не реагирует. Пишет "неизвестное оружие" и т.п. Так и остался я мальчиком для битья, со сломанным гауссом. В этом моде "неизвестное оружие" ещё убойнее обычного гаусса. Ну я и хотел его активировать, но конечно только в том случае, если это делается где-то просто одной строкой. smile Если для этого надо реально возиться в скриптах, то тогда, абсолютно согласен, смысла возиться с этим нет.


Сообщение отредактировал Наблюдатель - Сб, 21.05.2016, 18:19
 
STALKER_ICEBERGДата: Вс, 22.05.2016, 12:22 | Сообщение # 1857
Сталкер
Пользователи
Сообщений: 180
Награды: 1
Репутация: [ 24 ]

Итак, вопрос про звуки.
Скачал с американской википедии звуки выстрелов Мосина, Спрингфилда и Кар98к (вот такой я извращенец). Хочу заменить стандартные.
Ставил сборку от albor, но, думаю, это ничего не меняет. Где и какие файлы нужно менять? Нашел папку sounds, но вроде нужно еще где-то что-то менять. Боюсь навредить.
И да, Наблюдатель, в третий раз прошу Вас скинуть мне проклятый файл бессмертия. Теперь уже не телохранителей (они доказали свою бесполезность). Да и с ними не интересно играть.
Нужен файл бессмертия Давида. Ну или где его править. Мне до квеста с ним еще далеко (вся игра - только начал), поэтому надеюсь на Ваш ответ.
 
sergej5500Дата: Вс, 22.05.2016, 13:42 | Сообщение # 1858
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

STALKER_ICEBERG,

Файл Давида gamedata\configs\scripts\SGM\zaton\zat_barge_commander. В секции move@waiting и move@defence добавьте строку invulnerable = true
 
denis2000Дата: Вс, 22.05.2016, 13:59 | Сообщение # 1859
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

STALKER_ICEBERG, Пути и имена звуков оружия (относительно папки sounds) указаны в их конфигурационных файлах строками типа: snd_draw = weapons\ak74_draw

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
STALKER_ICEBERGДата: Вс, 22.05.2016, 16:18 | Сообщение # 1860
Сталкер
Пользователи
Сообщений: 180
Награды: 1
Репутация: [ 24 ]

Цитата sergej5500 ()

Файл Давида gamedata\configs\scripts\SGM\zaton\zat_barge_commander. В секции move@waiting и move@defence добавьте строку invulnerable = true

У меня эта строка в секции waiting выглядит так:
invulnerable = {-zat_monsters_wave_fail -zat_monsters_wave_reward} true, false
Следующая, в defence, так:
invulnerable = {-zat_monsters_wave_appeared_1_controller} true, false
Я просто стер лишнее, оставив true. Думаю, это то, что нужно.
Это можно провернуть с остальными сталкерами с баржи? И можно ли сделать так с Эльбрусом? Хочу сделать его невосприимчивым только на время квеста, дальше - пусть бродит смертным.
Цитата denis2000 ()
Пути и имена звуков оружия (относительно папки sounds) указаны в их конфигурационных файлах строками типа: snd_draw = weapons\ak74_draw

Там я трогать ничего не стал - просто сделал у своих файлов название как у тех, которые были там раньше и заменил.
Например, там был звук sks_shoot.ogg. Я заменил его на свой sks_shoot.ogg (из Call of Duty). Считаю это правильным - никаких конфликтов быть не должно.
 
Поиск: