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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
КолхозникДата: Ср, 04.01.2012, 19:29 | Сообщение # 61
Командир Штурмового Подразделения
Пользователи
Сообщений: 571
Награды: 10
Репутация: [ 401 ]

подскажите как прописать инфо порцию : ч то при случае смерти нпс происходит спавн в его рюкзаке?
 
XOBAHДата: Ср, 04.01.2012, 19:48 | Сообщение # 62
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 991 ]

Ленин, в логику прописать обработчик on_death
[cut=Пример][logic]
active = bla_bla
on_death = death@bla
...
[death@bla]
on_info = %+info_1 =spawn_item_to_npc("ID_предмета")%
[/cut]


 
stalexДата: Чт, 12.01.2012, 17:30 | Сообщение # 63
Гражданский
Пользователи
Сообщений: 15
Награды: 0
Репутация: [ 0 ]

Скажите как сделать так что-бы после выполнения квеста нпс ушел? (нпс заспавнен скриптом)
 
XOBAHДата: Чт, 12.01.2012, 17:45 | Сообщение # 64
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 991 ]

stalex, в активную логику добавить строчку:
on_info = {+infoportion} next_shem_logic
Где +infoportion - проверка на наличие инфопоршня (например, на завершение квеста)
next_shem_logic - Следующая логика, где прописан путь (вейпоинт) для ухода NPC


 
razor_mdДата: Вс, 15.01.2012, 09:28 | Сообщение # 65
Разработчик «Путь в Припять»
Свобода
Сообщений: 21
Награды: 1
Репутация: [ 93 ]

Всем привет...Подключил новую локацию к зов припяти из чистого неба (янтарь). Проблема в следующем, при спавне нпс (скриптом и олом) нпс спавнится в нужном месте, но при загрузке автосохранения спавн происходит на 1 метр от точки спавна. В чем может быть проблема? Вейпоинт делал на точку спавна, не помогает .

Поможет задать НПС логику в которой он занимает определенную точку. denis2000

Спасибо....как я понял вы про Waypoint??? Еще одна проблемка. Как правильно сделать точку в которую нпс смотрит...Допустим заспавнил сталкера и прописал ему анимацию. После загрузки автосейфа сталкер может отвернуться или смотреть совсем в другое место... точку look сделал, смотрит в неё пока не загружу сохранение, это не всегда происходит но частенько. И как сделать так чтобы сталкер проигрывал анимацию вечно? Пример тому азот(сидячая анимация)....

Если все правильно прописано то НПС и после загрузки займет указанное положение. А рабочая секция Азота animpoint, в ней можно задавать анимацию, точнее это может быть целая группа анимаций, в которой он будет сидеть. В любом случае посмотрите КМБ уроки начинаая с 5. denis2000




Сообщение отредактировал razor_md - Пн, 16.01.2012, 21:08
 
vovchick-78Дата: Вт, 24.01.2012, 21:36 | Сообщение # 66
Инженер НОИГ «Омега»
Ученые сталкеры
Сообщений: 417
Награды: 6
Репутация: [ 237 ]

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

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

vovchick-78, В секции meet НПС нужны параметры:
close_snd_hello - звук приветствия
close_snd_bye - звук прощания
close_anim - анимация при приближении на расстояние менее close_distance
close_victim - на какой объект смотрит
close_distance - контрольное расстояние


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
nikitosparavozДата: Сб, 28.01.2012, 20:25 | Сообщение # 68
Снайпер Штурмового Подразделения
Пользователи
Сообщений: 193
Награды: 7
Репутация: [ 27 ]

Помогите как заспавнить Валета на локации Гардиния?
Stalker Cop,SGM v2.1,патч 1.6_02,фикс 22.01.2012.

С какой целью? Чтобы на Юпитере было два Валета? denis2000


Сообщение отредактировал nikitosparavoz - Вс, 29.01.2012, 12:08
 
dmitry778Дата: Вс, 29.01.2012, 21:11 | Сообщение # 69
Советник «Свободы»
Свобода
Сообщений: 727
Награды: 15
Репутация: [ 159 ]

Всем привет. Выполнил урок №1 и вот:
[cut noguest=лог]Expression : no_assert
Function : CXML_IdToIndex<class CCharacterInfo>::GetById
File : d:\prog_repository\sources\trunk\xrserverentities\xml_str_id_loader.h
Line : 112
Description : item not found, id
Arguments : zat_sh_nikitka_skadovsk[/cut]
В тут не так?

Игра не может найти character_id zat_sh_nikitka_skadovsk. Предполагаю, не подключены новые xml-файлы в system.ltx. XOBAH

Добавлено (29.01.2012, 21:11)
---------------------------------------------
XOBAH
Quote (dmitry778)
Игра не может найти character_id zat_sh_nikitka_skadovsk. Предполагаю, не подключены новые xml-файлы в system.ltx.

Да это я тупанул, после всех изменений не начал новую игру, а загрузил сэйв. Позже разберусь.
У меня на данный момент другая проблема. Я хотел изменить стартовую позицию ГГ. Распаковал алл.спавн нашел в alife_zaton секцию:
[cut noguest][0]

; cse_abstract properties
section_name = actor
name = zaton_actor
position = 180.400360107422, 1.35496139526367, -194.810348510742
direction = -0.000963689119089395, -0.000128021812997758, -0.25700780749321
s_flags = 0x29
version = 128
script_version = 12

; cse_alife_object properties
game_vertex_id = 292
distance = 38.5
level_vertex_id = 1405060
object_flags = 0xffffffbf

; cse_visual properties
visual_name = actors\stalker_neutral\stalker_neutral_1

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 0
g_group = 0
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =

; cse_alife_trader_abstract properties
money = 15000
trader_flags = 0
character_profile = actor
cse_alife_trader_abstract__unk2_u8 = 1

; cse_ph_skeleton properties

; cse_alife_creature_actor properties

; se_actor properties
upd:health = 1
upd:timestamp = 0xc2ba3333
upd:creature_flags = 0x99
upd:position = 256.240051269531, 19.8124237060547, 550.824279785156
upd:o_model = 0
upd:o_torso = 2.81339907646179, -0.0120869996026158, 0
upd:actor_radiation = 0
upd:actor_weapon = 255[/cut]
И перенес ее в файл alife_pripyat далее запаковал алл.спавн обрато. Но ГГ всеравно спавнится на том-же месте на затоне.
Что не так я сделал?


СОВСЕМ НЕ ВАЖНО ОТ ЧЕГО ПОМРЕШЬ - ГОРАЗДО ВАЖНЕЕ ДЛЯ ЧЕГО РОДИЛСЯ.


Сообщение отредактировал dmitry778 - Вс, 29.01.2012, 21:12
 
denis2000Дата: Вс, 29.01.2012, 22:17 | Сообщение # 70
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

dmitry778, Разницы в каком файле секция - нет, если координаты спавна не ты фактически изменил!
[cut]
Менять нужно:
position
direction
game_vertex_id
level_vertex_id
upd:position

К тому-же (такое было в SGM1.7) ГГ скриптом телепортировался на другую точку в начале игры, вероятно в 2.1 это не изменилось.
Code
function on_new_game_load()
    sgm_world.spawn_objects()
    sgm_world.spawn_monsters()
    sgm_world.spawn_deadbodys()
    sgm_world.spawn_items()
    if r_mod_params("bool","create_mines_permition",true) then
       sgm_world.spawn_mines()
    end
    give_info("agreement_check_friend")
    if level.name()=="zaton" then
       db.actor:set_actor_position(vector():set(-317.301,19.267,602.204)) --Вот здесь координаты ГГ меняються в начале новой игры
    end
    sgm_battery.get_battery_manager():initialize()
end
[/cut]


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
dmitry778Дата: Чт, 02.02.2012, 08:12 | Сообщение # 71
Советник «Свободы»
Свобода
Сообщений: 727
Награды: 15
Репутация: [ 159 ]

Quote (denis2000)
level_vertex_id

Подскажите где брать этот параметр? С остальными вроде разобрался.
[cut]
Добавлено (31.01.2012, 19:00)
---------------------------------------------
Я изменил старт-позицию ГГ кроме параметра level_vertex_id и вылет.
[cut noguest=лог]Expression : !m_error_code
Function : raii_guard::~raii_guard
File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line : 748
Description : ....t.a.l.k.e.r. trilogy\cop\gamedata\scripts\_g.script:1803: attempt to index field 'actor' (a nil value)[/cut]
Думаю это из-за этого параметра т.к. жалуется на г.скрипт.

Посмотрите в КМБ, первые посты, там есть информация о получении координат ГГ (вместе с level_vertex). XOBAH

Добавлено (31.01.2012, 20:46)
---------------------------------------------
XOBAH Ставлю скрипт для снятия координат из модостроя
6. Получаем координаты
Способ №1

В файле: ui_main_menu.script
Ищем следующую функцию:

function main_menu:OnButton_credits_clicked()

Заменяем ее содержимое на:

Code
local text
local vid
local gvid
local a = vector()
local text
a = db.actor:position()
vid = db.actor:level_vertex_id()
gvid = db.actor:game_vertex_id()
text = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid
news_manager.send_tip(db.actor, text, nil, nil, 30000)


Получаю вылеты. Может я не правильно делаю? Но я и под эту строку function main_menu:OnButton_credits_clicked() ставил скрипт вместо той которая под ней и вместо обоих этих
function main_menu:OnButton_credits_clicked()
game.start_tutorial("credits_seq")
строк ставил, тоже вылет.

Добавлено (01.02.2012, 07:52)
---------------------------------------------
XOBAH
Quote (dmitry778)
Посмотрите в КМБ, первые посты, там есть информация о получении координат ГГ (вместе с level_vertex)

Я видел, но я не знаю что делать со скаченным *.пдф файлом т.к. он, как *.пдф не открывается. И как запустить игру в тестовом режиме тоже не знаю.[/cut]

1. В SGM в главном меню есть пункт Координировать!
2. Приведенный вами способ не подходит для SGM, поскольку пункт Тиры убран из игрового меню.
3. PDF открывается Acrobat Rider-ом или другими бесплатными программами - поиск рулит!
denis2000


Добавлено (01.02.2012, 17:41)
---------------------------------------------
Quote (dmitry778)
В SGM в главном меню есть пункт Координировать!

У меня нет данной кнопки в меню. (СГМ-2.1)

Значит у тебя не SGM. denis2000

Добавлено (02.02.2012, 08:12)
---------------------------------------------
Quote (dmitry778)
Значит у тебя не SGM.

biggrin Да наверное "Супер Марио стоит" biggrin . А если серьезно то: СТАЛКЕР_ЗП_1.6.02 (ориг) + СГМ_2.1 + оба фикса. И кнопки координировать в главном меню у меня нет.

Когда найдешь кнопку тогда и посмеемся. denis2000


СОВСЕМ НЕ ВАЖНО ОТ ЧЕГО ПОМРЕШЬ - ГОРАЗДО ВАЖНЕЕ ДЛЯ ЧЕГО РОДИЛСЯ.


Сообщение отредактировал dmitry778 - Вт, 31.01.2012, 21:23
 
denis2000Дата: Чт, 02.02.2012, 13:46 | Сообщение # 72
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

dmitry778, У тебя однозначно стоит "Супер Марио" biggrin . Вот мое меню при таких-же входящих.
[cut][/cut]


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
dmitry778Дата: Пт, 03.02.2012, 08:16 | Сообщение # 73
Советник «Свободы»
Свобода
Сообщений: 727
Награды: 15
Репутация: [ 159 ]

[cut noguest=Архив поста. Плиз не удаляйте.]denis2000,
[cut noguest=А вот мое Марио если не веришь. :)][/cut]

Хочешь немного магии? Смени разрешение в игре например на 1024х768 и увидишь скрытые тайны brows denis2000

Добавлено (02.02.2012, 21:23)
---------------------------------------------
Хм... Попробую, но после. Сейчас проблема в другом. В тестовом режиме мне всетаки удалось снять координаты, прописываю новый старт ГГ в Припяти на Речном вокзале , а он в Пречечной стартует, и сколько я не менял координаты , где только их не снимал, а он полюбасу перед полковником спавнится. В чем может быть загвоздка может быть? Я менял :
[cut]position
game_vertex_id
level_vertex_id
upd:position

А вот: direction в координатах небыло и я думаю что он особо и не нужен это наверное параметр направления взгляда ГГ, или я ошибаюсь?[/cut]

В скрипте отключал телепорт на стартовую точку? denis2000

Добавлено (02.02.2012, 22:26)
---------------------------------------------
Нет, а где его искать?

Три поста тому назад. denis2000

Добавлено (02.02.2012, 23:03)
---------------------------------------------
Ага. А если путь до скрипта подскажешь, то будет вообще шикарно. smile

sgm_callbacks.script denis2000[/cut]

Добавлено (03.02.2012, 08:16)
---------------------------------------------
denis2000, Я поменял имя локи и координаты старта ГГ, но ГГ все равно стартует в прачечной перед Ковальским. Что еще нужно Что-бы мой ГГ стартанул на Речном вокзале? Я уже всю голову себе сломал.


СОВСЕМ НЕ ВАЖНО ОТ ЧЕГО ПОМРЕШЬ - ГОРАЗДО ВАЖНЕЕ ДЛЯ ЧЕГО РОДИЛСЯ.


Сообщение отредактировал dmitry778 - Пт, 03.02.2012, 08:18
 
denis2000Дата: Пт, 03.02.2012, 12:21 | Сообщение # 74
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Quote (dmitry778)
Я поменял имя локи и координаты старта ГГ, но ГГ все равно стартует в прачечной перед Ковальским.

Тут тебя настигает другая проблема - срабатывают рестрикторы и телепортируют тебя к Ковальскому по главному сюжету. Их логика: pri_a15_sr_cutscene.ltx и pri_a15_sr_exit.ltx. Если у тебя новый сюжет то стоит полностью убрать эти рестрикторы.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
dmitry778Дата: Сб, 04.02.2012, 09:57 | Сообщение # 75
Советник «Свободы»
Свобода
Сообщений: 727
Награды: 15
Репутация: [ 159 ]

denis2000, А где это воспроизвести?

Убери рестрикторы или почисти их логику. denis2000

Добавлено (04.02.2012, 09:04)
---------------------------------------------
denis2000, Вот такую строчку нашел в pri_a15_sr_exit.ltx :
[sr_idle@wait_for_end]
on_game_timer = 30 | sr_idle@nil %=enable_ui(true) =stop_postprocess(3009)
+pri_a16_kovalski_start =spawn_corpse(sim_default_monolith_2:pri_a15_monolith_dead_stand:0)% тут про Ковальского, может это и является причиной, и мне стоит ее просто закоментировать?

Добавлено (04.02.2012, 09:23)
---------------------------------------------
А в pri_a15_sr_cutscene.ltx я какой-то телепорт нашел.
[sr_idle@prestart]
;on_game_timer = 5 | sr_idle@give_info %=teleport_actor(pri_a15_actor_walk:pri_a15_actor_look)%
;затычка
on_game_timer = 5 | sr_idle@start %=teleport_actor(pri_a15_actor_walk:pri_a15_actor_look)%

Может просто все эти строки закоментировать?

Добавлено (04.02.2012, 09:57)
---------------------------------------------
Просто закоментировать телепорт не получилось, ведет к вылету:
[cut noguest=лог]Expression : !m_error_code
Function : raii_guard::~raii_guard
File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line : 748
Description : ....k.e.r. trilogy\cop\gamedata\scripts\xr_logic.script:609: bad argument #1 to 'pairs' (table expected, got nil)[/cut]
А вот просто закоментил оба файла : pri_a15_sr_cutscene.ltx и pri_a15_sr_exit.ltx то ГГ заспавнился там где мне нужно, но вопрос: как это может повлиять на основной сюжет? И как сделать так что-бы основной сюжет не испортить?


СОВСЕМ НЕ ВАЖНО ОТ ЧЕГО ПОМРЕШЬ - ГОРАЗДО ВАЖНЕЕ ДЛЯ ЧЕГО РОДИЛСЯ.
 
Поиск: