|
Модостроение. Спавн и логика
|
|
| 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 за это полезное сообщение: |
|
|
| denis2000 | Дата: Чт, 21.08.2014, 21:51 | Сообщение # 976 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата sergej5500 (  ) У меня 11 вариантов сквадов. Потребуется проверять 11 стори-ид. Мы же не знаем, какой сквад отреспился в этот раз. Знаете! Одна волна - один стори_ид на все варианты сквадов, другая волна другой стори_ид. Цитата sergej5500 (  ) Может быть, стоит стори-ид убрать и выдавать при гибели сквада инфопорцию. При спавне следующего сквада её сбрасывать. А вот это правильная мысль, только на разные волны мутантов разные инфопорции. Цитата sergej5500 (  ) npc = sgm_monster_dog_normal Вообще то не npc, а npc_random: Код npc_random = sgm_monster_dog_normal npc_in_squad = 2, 6
Цитата sergej5500 (  ) Как это сделать на практике? Как то так: [cut]Код local jup_b220_gon_monster_squad_tabl = { [1] = "jup_b220_monster_bloodsucker_squad", ... [11] = "jup_b220_monster_dog_squad" }
local jup_b220_gon_monster_pos_tabl = { [1] = {[1]=69.019668579102,[2]=-1.3870533704758,[3]=146.45944213867,[4]=833767,[5]=648}, ... [6] = {[1]=123.03616333008,[2]=-5.6287517547607,[3]=120.73503875732,[4]=926221,[5]=650} }
function jup_b220_gon_monster_spawn() local pos_random=math.random(1,6) local squad_random=math.random(1,11) create_force(jup_b220_gon_monster_squad_tabl[squad_random],jup_b220_gon_monster_pos_tabl[pos_random][1],jup_b220_gon_monster_pos_tabl[pos_random][2],jup_b220_gon_monster_pos_tabl[pos_random][3],jup_b220_gon_monster_pos_tabl[pos_random][4],jup_b220_gon_monster_pos_tabl[pos_random][5]) end [/cut]
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Сб, 23.08.2014, 20:28 | Сообщение # 977 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Всем привет. Встретил забавный глюк.
Неписи грабят тайники из оригинала ЗП. Между Копачами и Яновом в болотце под мостками есть тайник. Там лежит СПАС-12, патроны, граната и еще что-то.
Получил наводку на этот тайник. СПАС не нашел. Неподалеку долговцы ссорились со свободовцами. СПАС обнаружился в инвентаре убитого долговца. После этого тайник засчитался.
В чем может быть причина данного глюка?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| denis2000 | Дата: Сб, 23.08.2014, 21:40 | Сообщение # 978 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Почему глюк? Тайники так и работают, в принципе любой НПС которому разрешено поднимать оружие может взять его из тайника. Поэтому тайники и расположены обычно в местах где НПС или не ходят или достать предмет не могут.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| gamer | Дата: Чт, 04.09.2014, 16:33 | Сообщение # 979 |
|
Новичок
Пользователи
Сообщений: 82
| При переносе в зп актору задаю исходные координат, также пробовал задать 0,0,0 .Мой актор при всех попытках спавнитса за локацией.В чём может быть проблема?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили gamer за это полезное сообщение: |
|
|
| sergej5500 | Дата: Чт, 04.09.2014, 17:04 | Сообщение # 980 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| gamer,
Проверь совпадение координат в строках
position = 253.482116699219, 8.78786945343018, 169.996673583984
и
upd:position = 253.482116699219, 8.78786945343018, 169.996673583984
в секции actor в all.spawn. У меня была похожая проблема.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| gamer | Дата: Чт, 04.09.2014, 19:35 | Сообщение # 981 |
|
Новичок
Пользователи
Сообщений: 82
| Не понимаю
В Alife_ltx записал ети координаты 45.6969795227051,0,-356.334716796875 ,а меня выкидует вопще на другие координати
|
| |
|
| Эти 0 пользователя(ей) поблагодарили gamer за это полезное сообщение: |
|
|
| FantomICW | Дата: Чт, 04.09.2014, 19:38 | Сообщение # 982 |
 Лидер «Свободы»
Свобода
Сообщений: 4438
| gamer, еще раз проверь upd:position.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
| gamer | Дата: Чт, 04.09.2014, 21:51 | Сообщение # 983 |
|
Новичок
Пользователи
Сообщений: 82
| кажись проблема с компилятором , появился дополнительный way файл
|
| |
|
| Эти 0 пользователя(ей) поблагодарили gamer за это полезное сообщение: |
|
|
| denis2000 | Дата: Пт, 05.09.2014, 08:19 | Сообщение # 984 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| gamer, Значит в нем пути с геймвертексами вне диапазона.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Ср, 10.09.2014, 18:21 | Сообщение # 985 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый день.
Имеется НПС с логикой.
[cut=Логика][logic@zat_stalker_trader] active = remark@zat_stalker_trader suitable = {=check_npc_name(zat_stalker_trader)} true prior = 300 post_combat_time = 0,0 trade = misc\trade\order_traders\zat_stalker_trader.ltx
[remark@zat_stalker_trader] gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false combat_ignore_cond = true combat_ignore_keep_when_attacked = true anim = ward_noweap meet = meet invulnerable = true target = story | actor on_info = %=control_npc_position(zat_stalker_trader_spawn_point:0.3)%
[meet] abuse = true use = {!actor_enemy} true, false trade_enable = true meet_on_talking = false [/cut]
Можно ли в качестве target указать не актора, а точку в way_zaton? Или объект обязательно должен иметь стори-ид? Подойдет ли для этой цели объект типа спот?
[cut=Спот][zat_noah_barge_firepos_spot]:default_spot story_id = zat_noah_barge_firepos_spot
[default_spot]:device_pda $spawn = "devices\default_spot" visual = dynamics\scene_objects\part\part_none.ogf can_take = false [/cut]
Или ему можно прописать строку path_look? Будет ли она работать в схеме remark?
Переделывать непися под валкера не хочется. С текущей логикой его можно поставить в место, где нет AI-сетки. Он не мешает передвижениям сталкеров. Непись должен смотреть на игрока. Он так и делает. Но если сохраниться рядом и с ним и загрузить сейв, то непись смотрит в любую сторону, куда ему угодно. Это немного портит впечатление от игры.
И еще вопрос. Можно ли неписю при данной логике прописать направление взгляда? Например, смотреть на север. Или на запад. Можно ли это сделать, не используя споты или точки в way_***? Если можно, то как это сделать?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| denis2000 | Дата: Ср, 10.09.2014, 19:56 | Сообщение # 986 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата sergej5500 (  ) Можно ли в качестве target указать не актора, а точку в way_zaton? Да конечно есть четыре варианта указания цели: 1. nil - нет цели 2. story - объект со стори_ид (пример: target = story | pri_a28_heli) 3. path - точка пути (пример: target = path | pri_a28_horror_look, 3) 4. job - имя работы на смарте (пример: target = job | zat_b29_stalker_rival, zat_stalker_base_smart)
Цитата sergej5500 (  ) Но если сохраниться рядом и с ним и загрузить сейв, то непись смотрит в любую сторону, куда ему угодно. Это немного портит впечатление от игры. Данная схема не предназначена для продолжительного использования НПС поэтому никак не сохраняет свое состояние! Направление взгляда задается только в момент инициализации схемы, а значит после загрузки сейва НПС в этой схеме смотрит куда угодно.
Цитата sergej5500 (  ) Можно ли неписю при данной логике прописать направление взгляда? Например, смотреть на север. Или на запад. Можно ли это сделать, не используя споты или точки в way_***? Если можно, то как это сделать? Да конечно нужно будет дополнить своими правками функцию init_target из скрипта xr_remark.script.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вт, 23.09.2014, 18:41 | Сообщение # 987 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Спасибо за информацию. Цитата denis2000 (  ) Направление взгляда задается только в момент инициализации схемы
Если попробовать сделать логику двухсекционной, remark_1 и remark_2, и переключаться между ними через 15-20 секунд по принципу маятника. Секции будут идентичными. В момент переключения на другую секцию непись развернется в нужную сторону, если до этого он смотрел не туда?
Да такой подход по идее сработает. Но все же я не рекомендую использовать эту схему на постоянной основе. denis2000Добавлено (23.09.2014, 18:41) --------------------------------------------- Всем добрый день.
Возник вопрос. Функция create_squad_member позволяет заспавнить непися в уже существующий сквад. Есть ли обратная функция? Можно ли удалить непися из сквада?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| makdm | Дата: Вт, 23.09.2014, 18:59 | Сообщение # 988 |
 Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, вопрос немного некорректен, так как не понятно, какой аргумент указывать при вызове функции то ли секцию НПС, то ли story_id, то ли его имя. А вообще - то , можно удалить любого НПС хоть он в скваде, хоть он не в скваде функцией destroy_object, что в файле xr_effects.script
Терпение...... И все получится!
|
| |
|
| Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
| denis2000 | Дата: Вт, 23.09.2014, 19:13 | Сообщение # 989 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Примерно так: Код function quite_squad(actor, obj, p) local squad_story_id = p[1] local squad = get_story_squad(squad_story_id) local npc_id = obj.id squad:remove_npc(npc_id) squad:update() end Соответственно вызов функции из логики НПС с скваде: Код on_info = {<Условие>} quite_squad(<стори_ид_сквада>) Или изменив функцию можно удалить НПС зная например его стори_ид, по которому можно вычислить ид объекта для удаления.
В результате НПС отрегистрируется из сквада и удалиться как объект.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| Kosha | Дата: Сб, 27.09.2014, 21:26 | Сообщение # 990 |
|
Отмычка
Пользователи
Сообщений: 32
| Скажите а возможен ли спавн вертолета в ЧН? И его последующий убор (если его не уничтожил ГГ а он прошел заданный маршрут) Мысль такова: после разноса ГГ военного блокпоста (на кордоне) спавниться вертолет, идет по заданному логикой маршруту, и если противник (ГГ) не обнаружен то он убирается (Деспавн или как это назвать)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Kosha за это полезное сообщение: |
|
|
|