Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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]
 
sergej5500Дата: Ср, 16.08.2017, 20:27 | Сообщение # 2626
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата Donny_Kovalsky ()
Если в этом файле параметр class присутствует?


Возможно, класс, на который ругается движок, не прописан в скриптах. Попробуйте поменять класс на другой. Заведомо не дающий вылета.
 
НаблюдательДата: Ср, 16.08.2017, 20:54 | Сообщение # 2627
Ветеран
Пользователи
Сообщений: 400
Награды: 1
Репутация: [ 59 ]

Цитата sergej5500 ()
Есть ли в моде файл ui_save_dialog.scripts?

Приветствую Всех! Уважаемый sergej5500, к сожалению это файла в папке нет. sad Отписался Вам в личку.
 
ДизельДата: Ср, 16.08.2017, 20:56 | Сообщение # 2628
Сталкер
Разработчики
Сообщений: 260
Награды: 1
Репутация: [ 136 ]

Цитата denis2000 ()
Самое действенное конечно это: can_select_weapon = false в секции logic.


А оригинал просто убит.

[cut noguest]На Затоне нет такой логики вообще.
На Юпитере один боевой ковер:
gamedata\configs\scripts\jupiter\jup_b1_stalker_4.ltx(35):loophole_name = stand_front_left
В Припяти боевые коверы:
gamedata\configs\scripts\pripyat\pri_a18_vano.ltx(88):loophole_name = crouch_front_left
gamedata\configs\scripts\pripyat\pri_a18_vano.ltx(113):loophole_name = crouch_front_left
gamedata\configs\scripts\pripyat\pri_a18_vano.ltx(172):loophole_name = stand_front_left
gamedata\configs\scripts\pripyat\pri_a18_vano.ltx(196):loophole_name = crouch_front_right
gamedata\configs\scripts\pripyat\pri_a18_vano.ltx(223):loophole_name = stand_front_right
gamedata\configs\scripts\pripyat\pri_a18_sokolov.ltx(102):loophole_name = crouch_front_right
gamedata\configs\scripts\pripyat\pri_a18_sokolov.ltx(127):loophole_name = stand_front_left
gamedata\configs\scripts\pripyat\pri_a18_sokolov.ltx(199):loophole_name = crouch_front_left
gamedata\configs\scripts\pripyat\pri_a18_skelja.ltx(96):loophole_name = crouch_front_right
gamedata\configs\scripts\pripyat\pri_a18_skelja.ltx(120):loophole_name = stand_front_left
gamedata\configs\scripts\pripyat\pri_a18_skelja.ltx(188):loophole_name = crouch_front_left
gamedata\configs\scripts\pripyat\pri_a18_merkulov.ltx(83):loophole_name = crouch_front_left
gamedata\configs\scripts\pripyat\pri_a18_merkulov.ltx(106):loophole_name = crouch_front_left
gamedata\configs\scripts\pripyat\pri_a18_merkulov.ltx(162):loophole_name = stand_front_left
gamedata\configs\scripts\pripyat\pri_a18_merkulov.ltx(185):loophole_name = crouch_front_right
gamedata\configs\scripts\pripyat\pri_a18_merkulov.ltx(211):loophole_name = stand_front_right

И всё. Поэтому смартковеры ЧН в ЗП в скриптах и вырезали. Наверно так.[/cut]


andreyholkin

Сообщение отредактировал Дизель - Чт, 17.08.2017, 01:28
 
sergej5500Дата: Ср, 16.08.2017, 21:50 | Сообщение # 2629
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Наблюдатель,

Я посмотрел файлы мода. Обратил внимание на функции

[cut=Функции]function save_off()
get_console():execute("unbind console")
get_console():execute("unbind quick_save")
end

function save_on()
get_console():execute("bind quick_save kF5")
end
[/cut]

Эти функции включаются и выключаются рестрикторами баз.

[cut=Логика]
[logic]
active = sr_idle@wait

[sr_idle@wait]
on_actor_inside = {=check_smart_alarm_status(zat_stalker_base_smart:normal) !actor_has_weapon} sr_no_weapon@wait
on_info = {=actor_in_zone(zat_surge_hide_a2)} sr_no_weapon@wait

[sr_no_weapon@wait]
on_actor_outside = sr_idle@wait %=save_off -save_on_info%
on_info = {-save_on_info} %=save_on +save_on_info%[/cut]

Думаю, что нужно убрать вызовы этих функций из логики рестрикторов.
 
ДизельДата: Ср, 16.08.2017, 21:57 | Сообщение # 2630
Сталкер
Разработчики
Сообщений: 260
Награды: 1
Репутация: [ 136 ]

Не проще так сделать
function save_off()
--get_console():execute("unbind console")
--get_console():execute("unbind quick_save")
get_console():execute("bind console")
get_console():execute("bind quick_save kF5")
end


andreyholkin

Сообщение отредактировал Дизель - Ср, 16.08.2017, 22:04
 
НаблюдательДата: Ср, 16.08.2017, 23:33 | Сообщение # 2631
Ветеран
Пользователи
Сообщений: 400
Награды: 1
Репутация: [ 59 ]

Цитата sergej5500 ()
Я посмотрел файлы мода. Обратил внимание на функции

Цитата Дизель ()
Не проще так сделать

Благодарю Джентльмены! После правок озвученных уважаемым Дизелем сохранки заработали по всей территории Зоны.


Сообщение отредактировал Наблюдатель - Чт, 17.08.2017, 00:11
 
sergej5500Дата: Ср, 16.08.2017, 23:59 | Сообщение # 2632
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата Наблюдатель ()
в каком файле прописаны озвученные вами параметры?


Функции прописаны в xr_effects.scripts. Их вызовы в файлах

gamedata\configs\scripts\jupiter\jup_a6_sr_noweap.ltx
gamedata\configs\scripts\jupiter\jup_a6_sr_noweap_zulus.ltx
gamedata\configs\scripts\jupiter\jup_b41_sr_noweap.ltx
gamedata\configs\scripts\pripyat\pri_a16_sr_noweap.ltx
gamedata\configs\scripts\zaton\zat_a1_logic.ltx
gamedata\configs\scripts\zaton\zat_a2_sr_noweap.ltx
gamedata\configs\scripts\zaton\zat_b18_noah.ltx
 
НаблюдательДата: Чт, 17.08.2017, 00:12 | Сообщение # 2633
Ветеран
Пользователи
Сообщений: 400
Награды: 1
Репутация: [ 59 ]

Цитата sergej5500 ()
Функции прописаны в xr_effects.scripts.

Благодарю ещё раз уважаемый sergej5500! И ещё один вопрос, в этом моде опции сна работают только ночью. Подскажите, пжл, в каком файле можно вернуть возможность ГГ спать, когда ему вздумается, в любое время дня и ночи, как в оригинальном ЗП?
 
ДизельДата: Чт, 17.08.2017, 02:37 | Сообщение # 2634
Сталкер
Разработчики
Сообщений: 260
Награды: 1
Репутация: [ 136 ]

Цитата Наблюдатель ()
в каком файле можно вернуть возможность ГГ спать

ui_main_menu.script
Код

function main_menu:OnKeyboard(dik, keyboard_action)
CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
local bind = dik_to_bind(dik)
local console = get_console()
if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
if dik == DIK_keys.DIK_ESCAPE then
if level.present() and
(    ((db.actor ~= nil)and(db.actor:alive())) or
(false==IsGameTypeSingle())
) then
self.OnButton_return_game()                     
end
end
if dik == DIK_keys.DIK_Q then
self:OnMessageQuitWin()
end
if dik == DIK_keys.DIK_U then
ui_save_dialog.save_dialog:FillList()
end
if dik == DIK_keys.DIK_I then
self:sleep_info()
end                    
end
return true
end

function main_menu:sleep_info()
if level.present() and (db.actor ~= nil) and db.actor:alive() then
get_console():execute("main_menu off")
set_inactivate_input_time(1)
ui_sleep_dialog.sleep()
give_info("sleep_active")
end
end

Смотри внимательно function main_menu:OnKeyboard(dik, keyboard_action), что бы лишнего не удалить.
Тебе всего надо воткнуть в неё:
if dik == DIK_keys.DIK_I then
self:sleep_info()
end

И добавить полностью эту функцию: function main_menu:sleep_info()

Выходишь в меню - жмёшь кнопку I

Добавлено (17.08.2017, 02:37)
---------------------------------------------
Цитата denis2000 ()
Самое действенное конечно это: can_select_weapon = false в секции logic.

Я победил ЧНские коверы. Движок переписал на старые коверы и аллспавн под ЧН версию.
Проект


andreyholkin

Сообщение отредактировал Дизель - Пт, 18.08.2017, 03:34
 
НаблюдательДата: Пт, 18.08.2017, 09:14 | Сообщение # 2635
Ветеран
Пользователи
Сообщений: 400
Награды: 1
Репутация: [ 59 ]

Здравствуйте Всем! Прошу прощение за офтоп, вопрос к уважаемому Админу. Теперь кнопка "спасибо" не будет работать вообще? Как благодарить Мастеров за помощь? Можно писать благодарность, или это само собой разумеется? smile

Сообщение отредактировал Наблюдатель - Сб, 19.08.2017, 14:37
 
Donny_KovalskyДата: Сб, 19.08.2017, 22:15 | Сообщение # 2636
Отмычка
Пользователи
Сообщений: 30
Награды: 0
Репутация: [ 0 ]

Не в первый раз появляется такой вылет. Я добавляю новые стволы и изредка случается такое. Файл анимации и файл hand_orujie_hud_animation перенесен вместе с файлами модели. Почему это может происходить?
Expression : pm->m_animations.size()
Function : player_hud_motion_container::load
File : D:\prog_repository\sources\trunk\xrGame\player_hud.cpp
Line : 92
Description : motion not found [оружиенейм_idle]

Ну, обычно это не конкретная анимация, а все анимации, указанные в конфиге.


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

Donny_Kovalsky, Ссылка на файл hand_orujie_hud_animation добавлена во все модели рук?

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

denis2000, ой-ей. Я понял... Делать через СДК, как я понимаю? Более легкого способа не существует?

Блин, не доходит... А если у оружия нет своего файла hand_orujie_hud_animation? Есть только wpn_orujie_hud_animation, но вылет тоже случается. С одном случае все работает, в случае с другим оружием - вылет.


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

Donny_Kovalsky, В ЧН и ЗП каждая анимация оружия имеется в двух экземплярах: одна для самого оружия, другая собственно для рук держащих это оружие. Анимации для оружия могут быть в самом файле модели оружия (ogf) или вынесены в отдельный файл (omf), анимации рук как правило вынесены в отдельные файлы (omf). Теперь если файл модели не содержит анимации в самом себе, то он обязан содержать ссылку на внешний файл анимаций. Все!

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

Цитата denis2000 ()
Теперь если файл модели не содержит анимации в самом себе, то он обязан содержать ссылку на внешний файл анимаций.

Так он и содержит, в том то и дело. Потому и не понимаю, в чём дело.
 
Поиск: