Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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]
 
asd123Дата: Чт, 28.07.2016, 10:47 | Сообщение # 2056
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Цитата denis2000 ()
Вот отсюда и копайте.

Ох.. Я не программист, и не знаю что да где исправлять чтобы всё правильно настроить sad Попробую что-нибудь сделать..


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Чт, 28.07.2016, 10:48
 
denis2000Дата: Чт, 28.07.2016, 19:41 | Сообщение # 2057
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

asd123, Модостроением не занимаются исключительно профессиональные программисты, нужно учиться и тогда будет все получаться.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
asd123Дата: Чт, 28.07.2016, 20:10 | Сообщение # 2058
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

denis2000, именно поэтому я не стал "тупо копировать" из Времени Альянса то, что сделал makdm smile Я хочу научиться понимать всё это, а не просто копировать уже готовые работы.(в конце концов, это не уважение к таким опытным людям как makdm)
p.s. Уменьшение дальности выбора цели не помогло.. Перенос биндера и move из ЧН тоже не помогает. sad


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Чт, 28.07.2016, 20:11
 
denis2000Дата: Чт, 28.07.2016, 22:58 | Сообщение # 2059
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата asd123 ()
Уменьшение дальности выбора цели не помогло

Нужно смотреть в сторону функции выбора цели, а просто ограничение дальности никак не повлияет. Возможно передача движку цели вертолета, которая находиться офлайн и сносит башню вертолету.
Цитата asd123 ()
Перенос биндера и move из ЧН тоже не помогает.

Это и не должно было помочь, поскольку биндер не связан с выбором целей.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
БарменДата: Сб, 30.07.2016, 23:26 | Сообщение # 2060
Ветеран
Свобода
Сообщений: 370
Награды: 11
Репутация: [ 105 ]

Всем привет как настроить ГГ, чтобы на глобальной карте, он был в нужно месте. Вот например тут, по идее на дороге, а на карте в другом месте.
 
sergej5500Дата: Сб, 30.07.2016, 23:56 | Сообщение # 2061
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата Бармен ()
как настроить ГГ, чтобы на глобальной карте, он был в нужно месте.


Нужно настраивать файл gamedata\configs\game_maps_single.

Для каждой локации там есть секция типа

[zaton]
global_rect = 307.0, 90.0, 717.0, 500.0
music_tracks = zaton_musics
weathers = dynamic_default

Строка global_rect задает координаты левого верхнего и правого нижнего углов прямоугольника текущей локации на глобальной карте. Эти параметры и меняйте.
 
БарменДата: Пн, 01.08.2016, 05:30 | Сообщение # 2062
Ветеран
Свобода
Сообщений: 370
Награды: 11
Репутация: [ 105 ]

sergej5500, Благодарю буду пробовать.

Добавлено (01.08.2016, 05:30)
---------------------------------------------
Народ если не сложно, объясните как работает данная функция.

Код
function spawn_npc()
xr_effects.spawn_object(nil, nil, {"npc_1","npc_1_point"})
xr_effects.spawn_object(nil, nil, {"npc_2","npc_2_point"})
xr_effects.spawn_object(nil, nil, {"npc_3","npc_3_point"})
end
 
denis2000Дата: Пн, 01.08.2016, 08:02 | Сообщение # 2063
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Бармен, Спавнит указанных НПС (npc_1,npc_2,npc_3) в нулевых точках путей (npc_1_poin,npc_2_poin,npc_3_poin).

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
БарменДата: Пн, 01.08.2016, 08:48 | Сообщение # 2064
Ветеран
Свобода
Сообщений: 370
Награды: 11
Репутация: [ 105 ]

denis2000, Просто прописываешь в xr_effects.script, и НПС спавниться в указанной точки? И не куда больше нечего, не надо прописывать. А то мне сказали, что в bind_stalker.script апдейт делать.
 
sergej5500Дата: Пн, 01.08.2016, 09:04 | Сообщение # 2065
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата Бармен ()
Просто прописываешь в xr_effects.script, и НПС спавниться в указанной точки? И не куда больше нечего, не надо прописывать.


Еще надо добавить вызов функции спавна в логику рестриктора. Тогда она сработает.

Цитата Бармен ()
А то мне сказали, что в bind_stalker.script апдейт делать.


На апдейт целесообразно вешать функции, которые непрерывно вызываются в ходе игры.
 
БарменДата: Пн, 01.08.2016, 09:08 | Сообщение # 2066
Ветеран
Свобода
Сообщений: 370
Награды: 11
Репутация: [ 105 ]

Цитата sergej5500 ()
Еще надо добавить вызов функции спавна в логику рестриктора. Тогда она сработает.

Ну это я знаю smile

Цитата sergej5500 ()
На апдейт целесообразно вешать функции, которые непрерывно вызываются в ходе игры.

Можешь помочь с апдейтом, а то туплю в этом bind_stalker.script.
 
denis2000Дата: Пн, 01.08.2016, 09:28 | Сообщение # 2067
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Бармен, Так, а что вам от апдейта требуется?

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

Цитата Бармен ()
Можешь помочь с апдейтом, а то туплю в этом bind_stalker.script.


Можно рассмотреть SGM. Функция actor_binder:update(delta). Она вызывается постоянно и контролирует ГГ. В этой функции есть строка sgm_loader.sigerous_mod_main(). Эта строка и тащит на себе весь СГМ.

[cut=Код]
function sigerous_mod_loader()
save_manager:update()
battery_manager:update()
if check_seconds(2) then
blackday_manager:initialize()
blackday_manager:update()
end
sgm_container.container_main()
if check_seconds(2) then
sgm_cleaners.cleaners_main()
end
sgm_effects.effects_main()
if check_seconds(2) then
sgm_reward.reward_main()
end
hud_manager:update()
if check_seconds(4) then
sgm_info.info_main()
end
if check_seconds(1) then
sgm_inventory.inventory_main()
end
sgm_options.options_main()
if check_seconds(1) then
sgm_news.news_main()
end
sgm_queue.queue_main()
if check_seconds(1) then
sgm_tasks.task_main()
end
sgm_variables.variables_main()
if check_seconds(3) then
sgm_respawn.respawn_main()
end
sgm_world.world_main()
sgm_modules.module_actor(db.actor)
sgm_update.update_main()
sgm_timers.timers_main()
end[/cut]

Рассмотрим один из проверяемых файлов sgm_tasks. В нем масса функций типа

if has_alife_info("mil_bolted_influence_reward") and dont_has_alife_info("agr_find_underground_way_news") then
start_game_timer("agr_find_underground_way_news",10)
give_info("agr_find_underground_way_news")
end


Этот код значит следующее. Если выдана инфопорция 1 и не выдана инфопорция 2, то выдать инфопорцию 2 и произвести какое-нибудь действие (выдать квест, заспавнить неписей и т.д. и т.п.). Недостаток способа следующий. Функция проверяется постоянно. И до выдачи инфопорции 1 и после выдачи инфопорции 2. От этого игра тормозит.

В рестрикторе это условие можно написать так.

[cut=Пример][logic]
active = sr_idle

[sr_idle]
on_info = {+info_1 -info_2} sr_idle@1 %+info_2 =function%
on_info2 = {+info_2} sr_idle@1

[sr_idle@1][/cut]

Здесь рестриктор после выполнения действия переключился на пустую секцию. При этом он не вызывает тормозов в игре. Если рестриктор более не нужен, то его вообще можно удалить. Если у нас последовательная цепочка квестов, то в рестрикторе проверяется только одна из секций. Секция выполняемого квеста. В СГМ проверяются все квесты. Независимо от того, выполнены они или ещё не взяты.
 
БарменДата: Пн, 01.08.2016, 11:02 | Сообщение # 2069
Ветеран
Свобода
Сообщений: 370
Награды: 11
Репутация: [ 105 ]

Цитата denis2000 ()
Так, а что вам от апдейта требуется?

Ну у меня все эксклюзивные НПС, спавняться не прописаны в smart_terrain. Я решил их заспавнить, через скрипт. Один из разработчиков скинул мне функцию, что я указал выше и сказал "И в bind_stalker ставь на апдейт". Вот и спрашиваю, как поставить это апдейт.

Цитата sergej5500 ()
Можно рассмотреть SGM. Функция actor_binder:update(delta). Она вызывается постоянно и контролирует ГГ. В этой функции есть строка sgm_loader.sigerous_mod_main(). Эта строка и тащит на себе весь СГМ.

Эх был бы еще это SGM на ПК, нужно будет как-то скачать, и посмотреть. А так спасибо за информацию.

Цитата sergej5500 ()
Здесь рестриктор после выполнения действия переключился на пустую секцию. При этом он не вызывает тормозов в игре.

А можно в рестриктор, прописать около 20-30 НПС, игра тормозить точно не будет smile
 
sergej5500Дата: Пн, 01.08.2016, 11:14 | Сообщение # 2070
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата Бармен ()
А можно в рестриктор, прописать около 20-30 НПС, игра тормозить точно не будет


Можно заспавнить хоть 100 НПС. Рестриктору без разницы. Спавнить неписей лучше, когда точка спавна далеко от игрока. Игра будет притормаживать, когда эти НПС окажутся в зоне видимости игрока. Как в любом месте с большим кол-вом НПС.
 
Поиск: