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

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

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

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

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


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

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


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

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

Ну это я знаю smile

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

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

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

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

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


Можно заспавнить хоть 100 НПС. Рестриктору без разницы. Спавнить неписей лучше, когда точка спавна далеко от игрока. Игра будет притормаживать, когда эти НПС окажутся в зоне видимости игрока. Как в любом месте с большим кол-вом НПС.
 
denis2000Дата: Пн, 01.08.2016, 11:17 | Сообщение # 2081
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата Бармен ()
Один из разработчиков скинул мне функцию, что я указал выше и сказал "И в bind_stalker ставь на апдейт".

Очень плохой совет, такого разработчика самого на апдейт поставить нужно. По спавну НПС смотрите КМБ Урок 3 и 4. Или внемлите советам sergej5500.


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

Цитата sergej5500 ()
Можно заспавнить хоть 100 НПС. Рестриктору без разницы. Спавнить неписей лучше, когда точка спавна далеко от игрока.

Намотаю на ус.

Цитата denis2000 ()
Очень плохой совет, такого разработчика самого на апдейт поставить нужно. По спавну НПС смотрите КМБ Урок 3 и 4. Или внемлите советам sergej5500.

Ну вот я и написал, можно назвать Профи-Разработчику, а можно использовать вот такую функцию. Вместо той, что в уроке 3 и 4?
Код
function spawn_red_greh_voron()
           if not has_alife_info("spawn_red_greh_voron") then
   xr_effects.spawn_object(actor, nil, {"red_greh_voron","red_greh_voron_spawn_point"})
            give_info("spawn_red_greh_voron")
           end           
end

Добавлено (06.08.2016, 14:52)
---------------------------------------------
Всем снова привет, заспавнил я эксклюзивного НПС, через скрипт вот так.

Код
function spawn_black_valley_stalker_base_lider()
           if not has_alife_info("spawn_black_valley_stalker_base_lider") then
   xr_effects.spawn_object(actor, nil, {"black_valley_stalker_base_lider","black_sim_nps_1_spawn_point"})
            give_info("spawn_black_valley_stalker_base_lider")
           end           
end

Вроде заспавнился все отлично, только он на место куда надо не идет. Начинает гулять по территории, будто в симуляции находиться. Что делать, работаю на ЗП если что.
 
sergej5500Дата: Сб, 06.08.2016, 15:42 | Сообщение # 2083
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата Бармен ()
только он на место куда надо не идет. Начинает гулять по территории, будто в симуляции находиться.


Вероятнее всего, указан неверный путь к файлу логики.
 
БарменДата: Сб, 06.08.2016, 19:21 | Сообщение # 2084
Ветеран
Свобода
Сообщений: 370
Награды: 11
Репутация: [ 105 ]

Цитата sergej5500 ()
Вероятнее всего, указан неверный путь к файлу логики.

Да нет указан правильно.
 
sergej5500Дата: Сб, 06.08.2016, 19:54 | Сообщение # 2085
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Бармен,

Тогда выложите спавн-секцию и файл логики
 
Поиск: