|
Модостроение. Спавн и логика
|
|
| 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 за это полезное сообщение: |
|
|
| FantomICW | Дата: Пн, 17.11.2014, 20:01 | Сообщение # 1036 |
 Лидер «Свободы»
Свобода
Сообщений: 4438
| Цитата Дизель (  ) можно в логике хоть sr_kupe написать Разумеется, будет вылет.
Цитата Дизель (  ) sr_universal Это разработанная Николаем универсальная убер-схема для рестрикторов, переходов и другого.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
| makdm | Дата: Пн, 17.11.2014, 20:09 | Сообщение # 1037 |
 Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата sergej5500 (  ) Можно ли схемы sr_idle и sr_universal применять в одном рестрикторе? Можно. Только параметры у схем разные. Например параметр scheme_type в схеме sr_idle обрабатываться не будет.
Схема sr_universal крайне не рациональна. С одной стороны кажется, что всё очень удобно и можно с помощью одной схемы отследить все события. НО если у вас рестриктор, который только отслеживает условия и производит переключения, в соответствие с работой скрипта xr_logic, то это просто "распыление" ресурсов компа и как следствие Большие тормоза в игре.
Достаточно посмотреть в метод UPDATE этой схемы и в в этот же метод в схеме sr_idle и сравнить их. Теперь сразу станет понятно почему в SGM моде такие "тормоза" в игре.
Терпение...... И все получится!
Сообщение отредактировал makdm - Пн, 17.11.2014, 20:16 |
| |
|
| Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
| Сахар | Дата: Вт, 18.11.2014, 12:07 | Сообщение # 1038 |
 Гражданский
Пользователи
Сообщений: 2
| Всем доброго времени суток. Столкнулся с такой проблемой я прописал сталкеру в эксклюзиве что бы он во время выброса шёл в укрытие. Вот собственно переход на нужную секцию. Код on_info2 = {=surge_started} walker@surge Но проблема заключается в том, что этот сталкер во время выброса идёт в случайное укрытие.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вт, 18.11.2014, 12:11 | Сообщение # 1039 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Сахар, Покажите всю логику сталкера.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| Сахар | Дата: Вт, 18.11.2014, 12:41 | Сообщение # 1040 |
 Гражданский
Пользователи
Сообщений: 2
| sergej5500, Пожалуйста.
[cut=Логика]Код [logic@d3_czech] active = walker ; suitable = {=check_npc_name(czech_name)} true suitable = {=check_npc_name(d3_stalker_czech)} true level_spot = quest_npc on_death = death
[walker] path_walk = walker_czech_walk path_look = walker_czech_look use_camp = false on_info1 = {!is_day} sleeper on_info2 = {=surge_started} walker@surge show_spot = {+info_d3_czech_hello_talk} true, false
[sleeper] path_main = d3_sleeper_czech_walk wakeable = false use_camp = false meet = no_meet on_info = {=is_day} walker show_spot = {+info_d3_czech_hello_talk} true, false
[walker@surge] path_walk = surge_czech_walk path_look = surge_czech_look use_camp = false on_info1 = {=surge_complete} walker on_info2 = {=is_dark_night} sleeper show_spot = {+info_d3_czech_hello_talk} true, false
[death] on_info = %+info_d3_stalker_czech_death% [/cut]
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
| makdm | Дата: Вт, 18.11.2014, 13:02 | Сообщение # 1041 |
 Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата Сахар (  ) Но проблема заключается в том, что этот сталкер во время выброса идёт в случайное укрытие. А вы точно уверены, что он идёт в укрытие? Скорее всего туда, куда вы его в логике хотите отправить, нет AI - сетки. И соответственно схема walker не работает. Если с SDK не работаете и не можете посмотреть сетку, то попробуйте его отправить в другое укрытие. Возможно там есть сетка.
Терпение...... И все получится!
|
| |
|
| Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
| Сахар | Дата: Вт, 18.11.2014, 13:12 | Сообщение # 1042 |
 Гражданский
Пользователи
Сообщений: 2
| Цитата makdm (  ) нет AI - сетки Сетка есть, на это указывает две вещи 1)Эту работу занимает случайный сталкер, который находится в лагере. 2)Я работаю в СДК.
Сообщение отредактировал Сахар - Вт, 18.11.2014, 14:49 |
| |
|
| Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вт, 18.11.2014, 14:42 | Сообщение # 1043 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Сахар,
Попробуй работы
path_walk = surge_czech_walk path_look = surge_czech_look
и секцию walker@surge
переименовать. Убери surge из названий. Тогда дефолтные неписи перестанут её занимать.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| Дизель | Дата: Вт, 18.11.2014, 15:27 | Сообщение # 1044 |
 Сталкер
Разработчики
Сообщений: 260
| Цитата sergej5500 (  ) path_walk = surge_czech_walk path_look = surge_czech_look
Это всего лишь вей поинты, они могут быть различны в названиях, зависит от сборки локации, либо от внесения в аллспавн их. В логике они являются вектором.
Хотя я молчу, что там вы нагородили я не знаю, может вы и правы.
Если работаете в Зов Припяти, то на выброс, это легко сделать при помощи создания анипоинта в смарт кавере. Так будет работать точно - проверено, хотя если нет там аи сетки, то тоже не фига не получится.
andreyholkin
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Дизель за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вт, 18.11.2014, 19:26 | Сообщение # 1045 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый день.
Сделал рестриктор радиоточки.
[cut=Логика][logic] active = sr_idle@start
[sr_idle@start] on_info = {=dist_to_actor_le(10)} sr_idle@stop %=play_sound(radio_music)%
[sr_idle@stop] on_info = {=dist_to_actor_ge(25)} sr_idle@start %=stop_sound%[/cut]
[cut=script_sound][radio_music] type = 3d path = radio_music\radio_music_ shuffle = rnd idle = 0,0,100[/cut]
В папке sounds\radio_music имеется 30 файлов radio_music_1, radio_music_2, radio_music_3 и т.д.
При подходе к приемнику (рестриктору) рандомно запускается одна из композиций. Если просто стоять и слушать, то после окончания трека музыка прекращается. Чтобы запустить музыку по новой, надо отойти на 25 метров. Потом вернуться к рестриктору.
Вопрос такой. Можно ли сделать так, чтобы после окончания ролика немедленно запускался следующий? Музыка должна звучать непрерывно. Что надо поправить?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| makdm | Дата: Вт, 18.11.2014, 19:48 | Сообщение # 1046 |
 Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата sergej5500 (  ) чтобы после окончания ролика немедленно запускался следующий?
[sr_idle@stop] on_info = {=dist_to_actor_ge(25)} sr_idle@start %=stop_sound% on_info2 = {!is_playing_sound()} sr_idle@start
Терпение...... И все получится!
|
| |
|
| Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
| Дизель | Дата: Ср, 19.11.2014, 03:11 | Сообщение # 1047 |
 Сталкер
Разработчики
Сообщений: 260
| Цитата makdm (  ) Вопрос такой. Можно ли сделать так, чтобы после окончания ролика немедленно запускался следующий? Музыка должна звучать непрерывно. Что надо поправить?
Музыка должна играть, сменяясь сама. Значит неправильно создали логику.
Я свой пример приведу, а там разгребите попробуйте. Может работает, не ругайтесь если не пашет при выбросе, я давно её не включал.
[cut noguest]#include "dizel_sound_autostation.ltx" добавить в Z:\S.T.A.L.K.E.R. - Зов Припяти\gamedata\configs\misc\script_sound.ltx
Дописать в лист: : list_music_and_stories, list_script_sound_zaton, list_script_sound_jupiter, list_script_sound_pripyat, list_script_sound_underpass, list_dizel_sound_autostation
Далее:
Создать Z:\S.T.A.L.K.E.R. - Зов Припяти\gamedata\configs\misc\dizel_sound_autostation.ltx
Написать в нём:
[list_dizel_sound_autostation] avto_bar_ph_music avto_bar_ph_music_surge
[avto_bar_ph_music] type = 3d path = avto_bar_ph_music\avto_bar_ph_music_ shuffle = rnd idle = 1,2,10 play_always = true npc_prefix = false
[avto_bar_ph_music_surge] type = 3d path = avto_bar_ph_music\avto_bar_ph_music_surge_ shuffle = rnd idle = 1,2,10 play_always = true npc_prefix = false
Создать файл avto_bar_ph_music.ltx в Z:\S.T.A.L.K.E.R. - Зов Припяти\gamedata\configs\scripts\avto_bar_ph_music\
Написать в нём:
[logic] active = ph_idle@wait
[ph_idle@wait] on_info = {-avto_sr_light_off} ph_idle@ph_sound3000 on_info2 = {+avto_sr_light_off} ph_idle@ph_sound on_info3 = { =surge_complete =actor_in_zone(avto_surge_hide_centr_krysha)} ph_idle@ph_sound3000_rupor
[ph_idle@ph_sound3000] on_info = %=play_sound(avto_bar_ph_music)% on_game_timer = 10 | {=surge_complete =actor_in_zone(avto_surge_hide_centr_krysha)}ph_idle@ph_sound
[ph_idle@ph_sound] on_game_timer = 10 | ph_idle@ph_sound3000_surge %=stop_sound(avto_bar_ph_music)%
[ph_idle@ph_sound3000_surge] on_info = %=play_sound(avto_bar_ph_music_surge) % on_game_timer = 30 | ph_idle@ph_sound3000_wait
[ph_idle@ph_sound3000_wait] on_info = {-avto_sr_light_off} ph_idle@ph_sound3000 %=stop_sound(avto_bar_ph_music_surge) %
[ph_idle@ph_sound3000_rupor] on_info = {=actor_in_zone(avto_surge_hide_centr_krysha)} ph_idle@wait %=play_sound(avto_bar_ph_music)%
Далее надо создать в аллспавне простой рестриктор у радиоточки и прописать в нём путь к файлу в конфигах avto_bar_ph_music.ltx
Закинуть в звуки sounds\avto_bar_ph_music\avto_bar_ph_music_surge_1,2,3....ogg и avto_bar_ph_music_1,2,3...ogg
Это возможно рабочая схема, к сожалению я давно её не проверял. Это всего лишь направление к вашему действию![/cut]
andreyholkin
Сообщение отредактировал Дизель - Вс, 23.11.2014, 14:28 |
| |
|
| Эти 0 пользователя(ей) поблагодарили Дизель за это полезное сообщение: |
|
|
| Сахар | Дата: Вс, 23.11.2014, 05:56 | Сообщение # 1048 |
 Гражданский
Пользователи
Сообщений: 2
| Доброго здравия сегодня ковырялся в xr_effects.script и наткнулся на функцию send_tip она служит для отправки сообщений и имеет такую структуру =send_tip(news_id:sender:sender_id) с news_id всё понятно это индфикатор текстовой строки, но вот как использовать sender и sender_id я так и не понял, пробовал так может, кто знает как этими двумя параметрами пользоваться с меня +
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
| denis2000 | Дата: Вс, 23.11.2014, 12:12 | Сообщение # 1049 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Сахар, Итак функция xr_effects.send_tip(actor, npc, p), это лишь обертка для функции news_manager.(actor, news_id, timeout, sender, showtime, sender_id), которой передаются еще и не все параметры, а только p[1]=news_id, p[2]=sender, p[3]=sender_id. Достаточно взгянуть на функцию news_manager.(actor, news_id, timeout, sender, showtime, sender_id), чтобы понять для чего нужны эти параметры: news_id - идентификатор строки текста новости sender - иконка новости из таблицы tips_icons (строго говоря может быть или строкой - имя иконки или объектом - указателем на НПС отправившего сообщение тогда иконка сообщения есть иконка этого НПС через xr_effects.send_tip естественно не применимо) sender_id - story_id НПС отправителя используется только для того, чтобы определить не умер ли НПС или не тяжело ранен, если он мертв или ранен то сообщение не отправиться.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Пн, 24.11.2014, 22:28 | Сообщение # 1050 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер.
[cut=Логика непися][logic] prior = 100 known_info = known_info
[known_info] zat_b100_military_1_serchd[/cut]
Это логика одного из мертвых солдат у вертолета в Железном Лесу.
Согласно справочнику по логике:
Секция known_info
По обыску тела NPC выдает прописанные в секции инфопорции.
[known_info] info1 info2
Есть два вопроса.
1. Трупы солдат в Железном Лесу "вечные". Они валяются и после осмотра вертолета. После визита в Припять. Уборщик их не берет. По крайней мере у меня. Данная особенность есть только у неписей с known_info. Связано ли это с known_info, или есть другая причина устойчивости трупов?
2. Можно ли из секции known_info запускать функции в xr_effects? Или можно выдать только инфопорцию?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
|