Модостроение. Спавн и логика
|
|
denis2000 | Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Спавн и логика Создание объектов на локации и логика поведения этих объектов Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (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)", ее и надо расскомментировать, должно получиться вот так: Code function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый: Code 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) Второй: Code 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 по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
xardaslich | Дата: Вт, 11.10.2011, 12:53 | Сообщение # 2 |
Отмычка
Пользователи
Сообщений: 41
| S.T.A.L.K.E.R. Call of Pripyat 1.6.02(лиц) + Sigerous Mod 1.7+ fix 31.08 Всем доброго дня!
Вижу форум "Основного раздела" обновился(появились подразделы разделённые "по тематике" ). Теперь навигация и поиск по форуму облегчится! Авторам-модераторам - Уважение и Респект!!!
А теперь, собственно мой вопрос к форуму - Пока не знаю как, но хочу реализовать следующее:
На локацию "ЗАТОН" добавить спавн "мутофауны"(бюреры, контролёры, псевдогиганты). А сам спавн привязать к "Выбросам", точки спавна- к разрушеной автозаправке(там уже реализован спавн собак, псевдособак, кабанов и плотей); ВНЗ"Круг" (после выполнения "Уничтожение логова кровососов") уже спавнится отряд наёмников. Просто добавить ещё и мутантов. Например бюреров 2-3ед., либо контролёров 1-2ед., либо псевдогигант 1ед. Видовой спавн- раздельный(либо-либо).
|
|
|
Эти 0 пользователя(ей) поблагодарили xardaslich за это полезное сообщение: |
|
|
XOBAH | Дата: Вт, 11.10.2011, 13:42 | Сообщение # 3 |
Техник Вольных
Вольные сталкеры
Сообщений: 912
| xardaslich, На смарте делаешь условие по спавну: [cut noguest=Логика смарта][smart_terrain] squad_id = 999 max_population = 1 ;максимум 1 сквад respawn_params = respawn@surge
[respawn@surge] spawn_squads = surge_kontroler_squad, surge_giant_squad ;названия сквадов (они не существуют, добавлять лично) spawn_num = {-spawn_surge} 0, {+spawn_surge} 1 ;без инфы не спавнить, с инфой заспавнить 1 сквад[/cut] Лезем в surge_manager.script и ищем там строчку xr_effects.scenario_autosave(nil,nil,{"st_save_uni_surge_start"}) после нее вставляем строку give_info(spawn_surge) Далее ищем функцию CSurgeManager:end_surge(manual) и в нее вставляем: disable_info(spawn_surge)
Если будет ругаться на инфопоршень spawn_surge - зарегистрируй его А так, должно работать
|
|
|
Эти 0 пользователя(ей) поблагодарили XOBAH за это полезное сообщение: |
|
|
xardaslich | Дата: Вт, 11.10.2011, 14:55 | Сообщение # 4 |
Отмычка
Пользователи
Сообщений: 41
| XOBAH, спасибо! Пока всё понятно
Только я пока ещё не усвоил- как на локации (на ЗАТОНЕ в частности) определить какой смарт за какую точку спавна отвечает? Меня конкретно интересуют смарты "Разрушенная автозаправка" и ВНЗ"КРУГ" (спавниться отряд наёмников после "Уничтожение логова кровососов").
p.s. С SDK не работал , поэтому и спрашиваю про "определение" смартов.
|
|
|
Эти 0 пользователя(ей) поблагодарили xardaslich за это полезное сообщение: |
|
|
XOBAH | Дата: Вт, 11.10.2011, 15:28 | Сообщение # 5 |
Техник Вольных
Вольные сталкеры
Сообщений: 912
| xardaslich, Определять - если только добавлять отметки на смарты, а Автозаправка это zat_sim_25, а ВНЗ - zat_b38
|
|
|
Эти 0 пользователя(ей) поблагодарили XOBAH за это полезное сообщение: |
|
|
McPain | Дата: Вт, 11.10.2011, 23:01 | Сообщение # 6 |
Разведчик «Свободы»
Свобода
Сообщений: 4176
| А как в ЧН ВООБЩЕ убрать респавн на всех локациях?
ЗЫ поясните плиз какие файлы за какие аномалии отвечают в ЗП\configs\scripts\[zaton|jupiter|pripyat]\anomaly\?
Потеряли? Пинайте в личку "Фикс" погоды AtmosFear 3
|
|
|
Эти 0 пользователя(ей) поблагодарили McPain за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 12.10.2011, 14:52 | Сообщение # 7 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| McPain, В файле sim_faction.script закоментировать строки: [cut]Code if(db.actor) and self.board.simulation_started and current_expansion_level.respawn_hours[tostring(level.get_time_hours())] == true and (last_spawn_time == nil or current_game_time:diffSec(last_spawn_time) >= current_expansion_level.respawn_idle_time) then local squad_population = #self.squads local squad_population_max = self.squad_population_max local is_spawned = false --printf("TRY TO SPAWN %s, curr %s max %s", self.player_name, squad_population, squad_population_max) if squad_population < squad_population_max then for i=squad_population,squad_population_max do --' Ищем место для спауна. local spawn_smart = self.board:get_spawn_smart(self) if spawn_smart ~= nil then --printf("spawn_smart %s", spawn_smart:name()) --' Спауним local squad = self.board:create_squad(self.player_name, sim_squad_generic.sim_squad_generic, spawn_smart) self.board:enter_smart(squad, spawn_smart.id) squad:update()
--' Пересчитываем Team, Squad, Group for k,v in pairs(squad.squad_npc) do local obj = alife():object(k) self.board:setup_squad_and_group(obj) end squad:refresh() is_spawned = true else --printf("spawn_smart NIL") break end end end if is_spawned == false then self.brain:calculate_expansion_targets() end self.last_spawn_time = current_game_time end [/cut]
McPain, В имя файла аномальной зоны например zat_b100_anomal_zone.ltx вместо anomal_zone.ltx ставишь name, получается zat_b100_name. Полученную строку ищешь в файле st_land_names.xml и получаешь имя на русском.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
tema796 | Дата: Ср, 12.10.2011, 17:31 | Сообщение # 8 |
Гражданский
Пользователи
Сообщений: 20
| а как активировать скрипт через логику нпс Добавлено (12.10.2011, 17:31) --------------------------------------------- еще вопрос как сделать чтобы нпс шли за квестовым нпс
|
|
|
Эти 0 пользователя(ей) поблагодарили tema796 за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 12.10.2011, 18:10 | Сообщение # 9 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Quote (tema796) как активировать скрипт через логику нпс В логике НПС: Code on_info = {Условие выполнения} % =<Имя функции из скрипта xr_effects.script>(Параметры передаваемые функции)%
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
tema796 | Дата: Пт, 14.10.2011, 17:55 | Сообщение # 10 |
Гражданский
Пользователи
Сообщений: 20
| у меня вопрос heli_set_enemy(story_id) будет работать в зп
Раскоментируешь в xr_effects.script будет. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили tema796 за это полезное сообщение: |
|
|
McPain | Дата: Пт, 14.10.2011, 18:47 | Сообщение # 11 |
Разведчик «Свободы»
Свобода
Сообщений: 4176
| Quote (denis2000) В файле sim_faction.script закоментировать строки: а после данных действий у меня пропадет спавн только сталкеров и мутантов?
А кого еще надо? denis2000 не, никого...
Потеряли? Пинайте в личку "Фикс" погоды AtmosFear 3
Сообщение отредактировал McPain - Сб, 15.10.2011, 18:42 |
|
|
Эти 0 пользователя(ей) поблагодарили McPain за это полезное сообщение: |
|
|
xardaslich | Дата: Сб, 15.10.2011, 10:55 | Сообщение # 12 |
Отмычка
Пользователи
Сообщений: 41
| S.T.A.L.K.E.R. Call of Pripyat 1.6.02(лиц) + Sigerous Mod 1.7+ fix 31.08 Всем доброго дня!
Поясните пожайлуста какую логику использует в моде Николая Болотова НПС для подбора "трофейного" оружия?
Просто я привнёс из сторонних модов оружие и адаптировал для SGM1.7; Оружие без проблем прописывается в инв. НПС. Решил проверить как они подбирают оружие с земли(просто подкидывал его по пути их следования)- проходят мимо, не подбирают (подкинутое оружие лучше того, что у непися). Может просто НПС в моде осуществляют подбор оного оружия только с трупов?
Если так, то поясните как прописать в логику НПС подбор любого(прописаного в игре) оружия которое им повстречается по пути их следования?
p.s. Проверку осуществлял в начале игры с первыми 2-мя сталкерами(с "Размаздяем" и сталкером, что проводит до "СКАДОВСКа").
Читаем сборник из шапки! Скрипты>52: Надо в скрипте xr_corpse_detection.script добавить предметы в таблицу. XOBAH
|
|
|
Эти 0 пользователя(ей) поблагодарили xardaslich за это полезное сообщение: |
|
|
McPain | Дата: Сб, 15.10.2011, 18:41 | Сообщение # 13 |
Разведчик «Свободы»
Свобода
Сообщений: 4176
| Как сделать респавн артов(ЧН) не по Выбросу а по часам? Например хочу чтобы арты спавнились ежедневно в 2 часа ночи(оффлайн, т.к. ГГ в это время спит до 4-х утра)
Потеряли? Пинайте в личку "Фикс" погоды AtmosFear 3
|
|
|
Эти 0 пользователя(ей) поблагодарили McPain за это полезное сообщение: |
|
|
Pechenegin | Дата: Сб, 15.10.2011, 20:02 | Сообщение # 14 |
Отмычка
Пользователи
Сообщений: 25
| Уважаемый denis2000 подскажите имеется ли такая возможность, путем скрипта или каких-нибудь добавлений в файлы, заспаунить появление ГГ не в положеном месте при начале игры у закрытых ворот (ЗП+SGM 1.7), а на выбранной точке координат, требуемой локации по желанию? Ну например где-нибудь на затоне на острове, или на заводе Юпитер? Заранее благодарен.
Pechenegin
|
|
|
Эти 0 пользователя(ей) поблагодарили Pechenegin за это полезное сообщение: |
|
|
XOBAH | Дата: Сб, 15.10.2011, 22:06 | Сообщение # 15 |
Техник Вольных
Вольные сталкеры
Сообщений: 912
| Pechenegin, За положение ГГ при старте игры отвечает секция с именем actor (section_name) в all.spawn Но в SGM, ГГ переноситься на его положение посредством строчки db.actor:set_actor_position(vector():set(-323.560,19.464,626.825)) в файле sgm_info.script С помощью этой строки можно указать только расположение на текущей карте, переместить на другую локу нельзя.
|
|
|
Эти 0 пользователя(ей) поблагодарили XOBAH за это полезное сообщение: |
|
|
|