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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
yakutiДата: Ср, 26.06.2013, 11:25 | Сообщение # 466
Отмычка
Пользователи
Сообщений: 46
Награды: 0
Репутация: [ 7 ]

Работает ли схема heli_hunter в ЗП?

Добавлено (26.06.2013, 11:25)
---------------------------------------------

Цитата (FantomICW)
Здравствуйте!
Не подскажете, как проверить нахождение НПС в точке рестриктора?

В тч работало, насчет ЗП сказать не могу
[logic]
active = sr_idle

[sr_idle]
on_npc_in_zone = 19223123 |gerda_restr|nil %+trup_in_restr%

19223123 - сид нпс
 
sergej5500Дата: Ср, 26.06.2013, 11:27 | Сообщение # 467
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

FantomICW,
В оригинале ЗП это сделано так:
on_actor_in_zone = zat_b42_warning_space_restrictor | {-zat_b42_controller_warning_1_sound -zat_b42_controller_dead} %+zat_b42_controller_warning_1_sound =play_sound(zat_b42_controller_warning_1)%
При попадании ГГ в зону рестриктора выдаётся инфопорция и контролер говорит свою фразу.
Секция рестриктора включает в себя границы зоны действия.
[cut=zat_b42_warning_space_restrictor][208]

; cse_abstract properties
section_name = space_restrictor
name = zat_b42_warning_space_restrictor
position = 34.4459342956543, 4.17600011825562, 367.441070556641
direction = 0.00979799963533878, -0.584761023521423, -0.0352459996938705
version = 128
script_version = 12

; cse_alife_object properties
game_vertex_id = 0
distance = 0
level_vertex_id = 293223
object_flags = 0xffffff3e
custom_data = <<END
[logic]
cfg = scripts\zaton\zat_b42_logic.ltx
END

; cse_shape properties
shapes = shape0
shape0:type = box
shape0:axis_x = 44.6448020935059,0,0
shape0:axis_y = 0,9.31059646606445,0
shape0:axis_z = 0,0,32.1383895874023
shape0:offset = 0,0,0

; cse_alife_space_restrictor properties
restrictor_type = 0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[/cut]
 
denis2000Дата: Ср, 26.06.2013, 12:12 | Сообщение # 468
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата (yakuti)
В тч работало, насчет ЗП сказать не могу

И в ЗП эта схема так-же работает:
on_npc_in_zone = <Стори-ид НПС> |<Имя рестриктора>|<Имя секции для перехода> %действия%

Цитата (yakuti)
Работает ли схема heli_hunter в ЗП?

Да скрипт присутствует и зарегистрирован. Не факт что работает также как и в ТЧ, поэтому изучайте скрипт.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
yakutiДата: Пт, 28.06.2013, 11:12 | Сообщение # 469
Отмычка
Пользователи
Сообщений: 46
Награды: 0
Репутация: [ 7 ]

Не подскажите с чем могут быть связаны подобные стабильные вылеты? Происходят при убийстве зомби
FATAL ERROR

[error]Expression : !m_error_code
[error]Function : raii_guard::~raii_guard
[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
[error]Line : 748
[error]Description : e:\strelok200\gamedata\scripts\db.script:38: table index is nil
 
makdmДата: Пт, 28.06.2013, 12:12 | Сообщение # 470
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

yakuti, смотрите фвйл xr_motivator.script

В методе net_spawn идёт помещение объекта в таблицу.

А в методе net_destroy идёт удаление объекта из таблицы.

Условия помещения в таблицу и условия удаления из таблицы должны быть идентичны.

У вас получается, что помещаете в таблицу один объект, а удалить пытаетесь другой, которого нет в таблице. Отсюда вылет.


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


Сообщение отредактировал makdm - Пт, 28.06.2013, 12:15
 
yakutiДата: Ср, 03.07.2013, 17:28 | Сообщение # 471
Отмычка
Пользователи
Сообщений: 46
Награды: 0
Репутация: [ 7 ]

Приветствую, такой вопрос: создал личный ящик ГГ. Как прописать отметку на карте как в оригинале?
 
sergej5500Дата: Ср, 03.07.2013, 18:02 | Сообщение # 472
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

yakuti,
У оригинальных личных ящиков в секции в all.spawn прописан код:
[level_spot]
actor_box

Вероятно, он отвечает за метку.
 
yakutiДата: Ср, 10.07.2013, 16:17 | Сообщение # 473
Отмычка
Пользователи
Сообщений: 46
Награды: 0
Репутация: [ 7 ]

Что может означать этот вылет?
FATAL ERROR

[error]Expression : error handler is invoked!
[error]Function : handler_base
[error]File : D:\prog_repository\sources\trunk\xrCore\xrDebugNew.cpp
[error]Line : 764
[error]Description : pure virtual function call


stack trace:

Создавал level_changer, телепортировал на него ГГ и получил этот странный вылет

Добавлено (10.07.2013, 16:17)
---------------------------------------------
Вылет не стабильный

 
sniper777Дата: Чт, 11.07.2013, 15:32 | Сообщение # 474
Мастер
Пользователи
Сообщений: 598
Награды: 3
Репутация: [ 49 ]

Как сделать так, чтобы в прачечной(Припять) спавнились сталкеры с начала игры, а не после фриплея?


[cut=тл][/cut]
 
makdmДата: Чт, 11.07.2013, 18:30 | Сообщение # 475
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sniper777, отредактировать файл gamedata\configs\scripts\pripyat\smart\pri_a15.ltx
Сталкеры спавнятся по условию выдачи инфопоршион pri_a28_actor_in_zone_stay, т.е. если ГГ остался в Зоне.

Уберите условие и Сталкеры будут спавниться сразу.

Вместо

spawn_num = {+pri_a28_actor_in_zone_stay} 2, 0

пропишите

spawn_num = 2


Терпение......
И все получится!
 
sniper777Дата: Чт, 11.07.2013, 19:57 | Сообщение # 476
Мастер
Пользователи
Сообщений: 598
Награды: 3
Репутация: [ 49 ]

Все сделал, но военные остались на месте, а из сталкеров там появился только бродяга.
Дело вот в чем, я создал телепорт из янова в припять, все работает отлично, только гг переносится не на заданные координаты, а в прачечную и начинается диалог с Ковальским, я хотел таким образом устраннить данную проблему, что можно сделать?



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

sniper777,
Полагаю, что действует ограничение на кол-во сквадов. Прачечную занимают военные, и "вакансии" для сквадов заняты. Попробуй увеличить параметр max_population в файле gamedata\configs\scripts\pripyat\smart\pri_a16. По умолчанию он равен 3. Сделай его равным 6 или 7, например.
 
FantomICWДата: Чт, 11.07.2013, 21:12 | Сообщение # 478
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

Добрый вечер! Создал кодовый сейф на ЗП вот с такой логикой:
Код
[logic]
active = ph_code@close

[ph_code@close]
code = 123
on_code = ph_idle@enable

[ph_idle@enable]
nonscript_usable = true
tips = st_search_treasure

[off]*Делал по одному из уроков на АМК + отредактировал те места, из-за которых на ЗП был вылет (статья написана для ТЧ). Все правильно работает.[/off]
Так вот, секция ph_idle@enable работает при введении кода 123. Мне хотелось бы сделать так, чтоб эта фича работала еще и при определенном условии (инфопорции). Возможно ли сделать подобное?





Сообщение отредактировал FantomICW - Чт, 11.07.2013, 21:12
 
sniper777Дата: Чт, 11.07.2013, 21:18 | Сообщение # 479
Мастер
Пользователи
Сообщений: 598
Награды: 3
Репутация: [ 49 ]

sergej5500, спасибо, но как убрать военных?


[cut=тл][/cut]
 
denis2000Дата: Чт, 11.07.2013, 21:20 | Сообщение # 480
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

FantomICW, Конечно ведь on_code может содержать кондлист:
Код
on_code = {+info_portion} ph_idle@enable


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Поиск: