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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
denis2000Дата: Чт, 21.08.2014, 21:51 | Сообщение # 976
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата 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]


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Сб, 23.08.2014, 20:28 | Сообщение # 977
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Всем привет. Встретил забавный глюк.

Неписи грабят тайники из оригинала ЗП. Между Копачами и Яновом в болотце под мостками есть тайник. Там лежит СПАС-12, патроны, граната и еще что-то.

Получил наводку на этот тайник. СПАС не нашел. Неподалеку долговцы ссорились со свободовцами. СПАС обнаружился в инвентаре убитого долговца. После этого тайник засчитался.

В чем может быть причина данного глюка?
 
denis2000Дата: Сб, 23.08.2014, 21:40 | Сообщение # 978
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Почему глюк? Тайники так и работают, в принципе любой НПС которому разрешено поднимать оружие может взять его из тайника. Поэтому тайники и расположены обычно в местах где НПС или не ходят или достать предмет не могут.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
gamerДата: Чт, 04.09.2014, 16:33 | Сообщение # 979
Новичок
Пользователи
Сообщений: 82
Награды: 0
Репутация: [ 0 ]

При переносе в зп актору задаю исходные координат, также пробовал задать 0,0,0 .Мой актор при всех попытках спавнитса за локацией.В чём может быть проблема?
 
sergej5500Дата: Чт, 04.09.2014, 17:04 | Сообщение # 980
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

gamer,

Проверь совпадение координат в строках

position = 253.482116699219, 8.78786945343018, 169.996673583984

и

upd:position = 253.482116699219, 8.78786945343018, 169.996673583984

в секции actor в all.spawn. У меня была похожая проблема.
 
gamerДата: Чт, 04.09.2014, 19:35 | Сообщение # 981
Новичок
Пользователи
Сообщений: 82
Награды: 0
Репутация: [ 0 ]

Не понимаю

В Alife_ltx записал ети координаты 45.6969795227051,0,-356.334716796875 ,а меня выкидует вопще на другие координати
 
FantomICWДата: Чт, 04.09.2014, 19:38 | Сообщение # 982
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

gamer, еще раз проверь upd:position.


 
gamerДата: Чт, 04.09.2014, 21:51 | Сообщение # 983
Новичок
Пользователи
Сообщений: 82
Награды: 0
Репутация: [ 0 ]

кажись проблема с компилятором , появился дополнительный way файл
 
denis2000Дата: Пт, 05.09.2014, 08:19 | Сообщение # 984
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

gamer, Значит в нем пути с геймвертексами вне диапазона.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Ср, 10.09.2014, 18:21 | Сообщение # 985
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день.

Имеется НПС с логикой.

[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_***? Если можно, то как это сделать?
 
denis2000Дата: Ср, 10.09.2014, 19:56 | Сообщение # 986
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата 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.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вт, 23.09.2014, 18:41 | Сообщение # 987
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Спасибо за информацию.
Цитата denis2000 ()
Направление взгляда задается только в момент инициализации схемы


Если попробовать сделать логику двухсекционной, remark_1 и remark_2, и переключаться между ними через 15-20 секунд по принципу маятника. Секции будут идентичными. В момент переключения на другую секцию непись развернется в нужную сторону, если до этого он смотрел не туда?

Да такой подход по идее сработает. Но все же я не рекомендую использовать эту схему на постоянной основе. denis2000

Добавлено (23.09.2014, 18:41)
---------------------------------------------
Всем добрый день.

Возник вопрос. Функция create_squad_member позволяет заспавнить непися в уже существующий сквад. Есть ли обратная функция? Можно ли удалить непися из сквада?

 
makdmДата: Вт, 23.09.2014, 18:59 | Сообщение # 988
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, вопрос немного некорректен, так как не понятно, какой аргумент указывать при вызове функции то ли секцию НПС, то ли story_id, то ли его имя.
А вообще - то , можно удалить любого НПС хоть он в скваде, хоть он не в скваде функцией destroy_object, что в файле xr_effects.script


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

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(<стори_ид_сквада>)

Или изменив функцию можно удалить НПС зная например его стори_ид, по которому можно вычислить ид объекта для удаления.

В результате НПС отрегистрируется из сквада и удалиться как объект.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
KoshaДата: Сб, 27.09.2014, 21:26 | Сообщение # 990
Отмычка
Пользователи
Сообщений: 32
Награды: 0
Репутация: [ 0 ]

Скажите а возможен ли спавн вертолета в ЧН? И его последующий убор (если его не уничтожил ГГ а он прошел заданный маршрут)
Мысль такова: после разноса ГГ военного блокпоста (на кордоне) спавниться вертолет, идет по заданному логикой маршруту, и если противник (ГГ) не обнаружен то он убирается (Деспавн или как это назвать)
 
Поиск: