Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Спавн и логика
denis2000Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Спавн и логика

Создание объектов на локации и логика поведения этих объектов

Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (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 по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
ДизельДата: Вс, 09.02.2014, 00:22 | Сообщение # 811
Сталкер
Разработчики
Сообщений: 260
Награды: 1
Репутация: [ 136 ]

Хочу продемонстрировать спавн Камаза в ЗП через all.spawn с прописью в нём же логики.
Обратите внимание, что не все распаковщики нуждаются в следующих строках, и соответственно не станут запаковывать:

version = 128
script_version = 12



Скрипты созданы на базе мода "Время Альянса -2" использующихся БТРами.
Логику не могу продемонстрировать - тайна разработки.

Ставлю тебе "лайк". denis2000


andreyholkin

Сообщение отредактировал andreyholkin - Вс, 09.02.2014, 00:24
 
gamerДата: Вс, 09.02.2014, 13:24 | Сообщение # 812
Новичок
Пользователи
Сообщений: 82
Награды: 0
Репутация: [ 0 ]

Цитата strelok200 ()
Ты с ЗП работаешь? Не проще взять готовую модель торговца и заспавнить обычного сталкера, прописав этот визуал
Да .Опыта меня как таково нету так что незнаю что проще ,спс за инфу попробую( модель у меня готовая из чн) .Ну уже знаю что не из-за скриптов.Так же словил вылет на hello_dialog пропишу ему етот диалог но не верю что ето исправит мою липёшку
 
FantomICWДата: Вс, 09.02.2014, 13:47 | Сообщение # 813
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

Если заспавнить Сидора с его уникальной моделью и костями как обычного сталкера, получите вылет.


 
denis2000Дата: Вс, 09.02.2014, 14:19 | Сообщение # 814
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Нужно правильно настроить файл way_prefixes.ini, он нужен для того чтобы правильно идентифицировать вейпоинты (как правило это лукпоинты, точки спавна ГГ, камеры или ворон) геймвертекс которых не лежит в диапазоне геймвертексов аи-сетки.

FantomICWgamer, Для того чтобы заспавнить сидоровича из ТЧ или Лесника из ЧН, нужно спавнить во первых объект правильного класса, во вторых правильная модель (их модели имеют скелет отличный от обычных сталкеров) плюс специфические анимации (для специфических скелетов), в третьих в логике настраивать проигрывание этих самых специфических анимаций в нужный момент. Или поступить проще раздобыть модели этих НПС на обычном скелете сталкера и спавнить, как всех, без заморочек.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
FantomICWДата: Вс, 09.02.2014, 15:25 | Сообщение # 815
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

Цитата denis2000 ()
Или поступить проще раздобыть модели этих НПС на обычном скелете сталкера и спавнить, как всех, без заморочек.
Таки да



 
sergej5500Дата: Вт, 11.02.2014, 10:50 | Сообщение # 816
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Доброе утро. Сделал НПС, преследующих ГГ.


НПС сидят на СПО. При приближении ГГ к СПО они начинают за ним "наблюдать". Если игрок уходит от СПО, то неписи туда возвращаются. Если игрок отроет огонь по ним или скваду наемников на СПО, то НПС переходят в режим атаки.

Логика работает.  Вопрос, можно ли прописать режим спринта по условию.  У меня не получается. При указании
sprint     = {=dist_to_actor_ge(50)}  true  неписи не реагируют.  Они "понимают" только true или  false.


Сообщение отредактировал sergej5500 - Вт, 11.02.2014, 10:53
 
makdmДата: Вт, 11.02.2014, 18:26 | Сообщение # 817
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата sergej5500 ()
Вопрос, можно ли прописать режим спринта по условию

sergej5500, можно.

Для этого необходимо редактировать скрипт xr_companion.script, чтобы параметр sprint поддерживал кондлист.
Попробуйте так:



Терпение......
И все получится!
 
strelok200Дата: Вт, 11.02.2014, 19:35 | Сообщение # 818
Бывалый
Свобода
Сообщений: 126
Награды: 0
Репутация: [ 33 ]

Как проиграть новосозданную анимацию рук для ЗП?
 
sergej5500Дата: Вт, 11.02.2014, 20:24 | Сообщение # 819
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер. Есть такой вопрос. Имеется НПС - (zat_b103_lost_merc_leader) - Тесак.   Тесаку добавлен квестовый ключ, который он должен дать после выполнения квеста.  Игрок так же может убить Тесака и взять ключ с трупа.  

Но возможна ситуация, когда игрок убил Тесака и не забрал ключ. Останки Тесака с ключом прибрал уборщик.  В этой ситуации рестриктор должен заспавнить этот ключ в инвентарный ящик.  Как отследить момент уборки тушки?
 
FantomICWДата: Вт, 11.02.2014, 20:54 | Сообщение # 820
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

sergej5500, в xr_conditions.script есть две функции-проверки: story_object_exist и object_exist, которые проверяют, существует ли НПС (по story_id и id соответственно). Вызывать можно прямо из логики. Например, проверка на то, что объекта не существует:
Код
{!object_exist(zat_b103_lost_merc_leader)}



 
sergej5500Дата: Вт, 11.02.2014, 20:57 | Сообщение # 821
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

FantomICW
Эти функции работают по живым объектам или по трупам тоже?
 
makdmДата: Вт, 11.02.2014, 21:00 | Сообщение # 822
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата sergej5500 ()
Останки Тесака с ключом прибрал уборщик.  В этой ситуации рестриктор должен заспавнить этот ключ в инвентарный ящик.  Как отследить момент уборки тушки?

[sr_idle@control]
on_info = {!object_exist(стори_айди_Тесака) !actor_has_item(секция_ключа)} sr_idle@end %=spawn_object_in(секция_ключа:стори_айди_ящика)}%
on_info2 = {=actor_has_item(секция_ключа)} sr_idle@end

[sr_idle@end]


Терпение......
И все получится!


Сообщение отредактировал makdm - Вт, 11.02.2014, 21:01
 
FantomICWДата: Вт, 11.02.2014, 21:25 | Сообщение # 823
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

sergej5500, эта функция работает по наличию объекта в alife как такового. Наличие трупа = смерть НПС проверяется другой функцией. is_dead, к примеру.


 
sergej5500Дата: Чт, 13.02.2014, 00:26 | Сообщение # 824
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер. В логике Цехов Подстанции обнаружил код   =distance_to_obj_ge(zat_b103_lost_merc_squad1:100)

Полагаю, что тут проверяется расстояние до сквада.  Можно ли применить данную функцию для измерения расстояния до смарт-террайнов?
 
makdmДата: Чт, 13.02.2014, 07:33 | Сообщение # 825
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500,  нет нельзя.
У смарт_террейнов нет story_id, поэтому получить объект smart_terrain при помощи этой функции невозможно.

Можно сделать по-другому, добавив, например, следующую функцию в xr_conditions.script :

function distance_to_smart_ge(actor, npc, p)
local smart = sim_board.get_sim_board():get_smart_by_name(p[1])
local d = p[2]
return d and actor:position():distance_to_sqr(smart.position) >= d * d
end

Где p[1] - имя смарта, а p[2] - требуемое расстояние.


Терпение......
И все получится!
 
Поиск: