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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
ДеМЬянДата: Чт, 15.03.2012, 14:05 | Сообщение # 106
Удаленные



Уважаемые сталкеры!

Скажите пожалуйста, как заспавнить своего персонажа привязанного к одной точке? Например я хочу создать нового торговца на "Скадовске".

Я прочитал вот эту тему по созданию персонажа:
КМБ

Но там расписано как создать NPC в двух шагах от тебя (по нажатию клавиши), а я хочу создать своего персонажа (который спавниться при старте новой игры) и стоит на одном месте.

Как это сделать? Придется работать с all.spawn?
 
NiafaДата: Чт, 15.03.2012, 14:32 | Сообщение # 107
Отмычка
Вольные сталкеры
Сообщений: 42
Награды: 8
Репутация: [ 123 ]

ДеМЬян, не обязательно с олл.спавн. Хотя можно и с ним.
Если делать скриптово, то в фунцию спавна alife.create можно подставить любые координаты. А в кмб уроке номер три описывается именно спавн при новой игре. Кроме того, можно ознакомиться с материалами с ресурсов из шапки темы.


 
ДеМЬянДата: Чт, 15.03.2012, 16:06 | Сообщение # 108
Удаленные



HELP!
Делаю все по инструкции из "КМБ как создать своего NPC"

Дошел до урока 3. Во время запуска, игра выдает вот такой лог:
[cut noguest=LOG]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_demian_skadovsk
[/cut]

Как исправить?!


Сообщение отредактировал ДеМЬян - Чт, 15.03.2012, 16:23
 
denis2000Дата: Чт, 15.03.2012, 16:28 | Сообщение # 109
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

ДеМЬян, В конце файла нет закывающего тега </xml>

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
ДеМЬянДата: Сб, 17.03.2012, 21:56 | Сообщение # 110
Удаленные



И снова привет Сталкеры!

Вообщем, у меня возникла проблема с логикой торговца.
Я создал NPC, прописал ему файл торговли, написал [cut noguest=вот эту логику][logic]
active = move@trader
trade = misc\trade\order_traders\zat_sh_nikitka_skadovsk.ltx

[move@trader]
move_state_when_center = ward_noweap
move_state_when_move = walk
move_combat_disable = true
move_home_teleport = true
meet = meet
invulnerable = true

[meet]
abuse = false
use = true
allow_break = false
meet_on_talking = false[/cut], но он куда то убегает! Просто разворачивается и бежит в неизвестном направлении от точки спауна.

Где я не правильно составил логику? И какая она должна быть вообще у торговца?

P.S.: Мой NPC обладает диалогом и должен стоять на одном месте.

Если не указываете игру\мод где работаете, по-стандарту принимается ЗП 1.6.02; Поэтому отвечаю по нему:
NPC вообще не видит логики, если бы он ее увидел, вылетела бы игра, из-за неизвестной схемы поведения move. XOBAH
 
GeonezisДата: Вс, 18.03.2012, 13:59 | Сообщение # 111
Разработчик «Смерти вопреки»
Свобода
Сообщений: 2360
Награды: 30
Репутация: [ 71 ]

Quote (ДеМЬян)
Но где взять\прописать эти данные?

ДеМЬян, в sgm ведь делаешь. есть пункт в меню координировать он выведет координаты точек. оттуда и берешь. да они у тебя и так должны быть: ты ведь спавнил его как-то вот и смотри координаты level_vertex_id() и game_vertex_id()


Смерти Вопреки
Spectrum Project
AP_Prodaction
 
makdmДата: Вс, 18.03.2012, 18:26 | Сообщение # 112
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

denis2000, подскажите пожалуйста "Чайнику".
Скопировал файлы из "Распакованный all.spawn" у GеJorge из мода 2.2 (те, что касаются работы с acdc). Perl установлен.
Кинул all.spawn из фикса от 12.03.
Распаковал. Посмотрел файлы (ничего не менял - поверьте на слово).
Решил запаковать в all.spawn.
И на тебе:
FATAL ERROR!
Function: stkutils::ini_file::new
Line: 31
Expression: defined $self->{section_hash}->$section}
Description: duplicate section found while reading way_military.ltx
Вопрос: Как же это паковал GeJorge? Или я чего-то не понимаю?

Присоединяюсь к вопросу, ибо аналогичная ситуация и у меня... Но тут уже, наверное, только сам Николай и ответит. XOBAH

Добавлено (18.03.2012, 18:26)
---------------------------------------------
ДеМЬян, в логике можно прописать
[cut=Логика]

move_dest_number = ( Ваше значение)
move_look_vertex = (Ваше значение)
move_state_when_center = ( На Ваше усмотрение)
move_state_when_move = walk
move_combat_disable = true
meet = meet
invulnerable = true
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true[/cut]
И никуда он не побежит.


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

makdm, Дело в том что в этом файле секции типа [mil_anomal_zone_***] распаковались по два раза! Убирайте дубликаты секций и компилируйте.
К стати это проблема не только данной версии иногда последовательность all.spawn ->decompil file -> compile all.spawn иногда приводит к проблемам (личный опыт).

Проблема не в декомпиляторе. Проблема в том, что Николай, секции вида mil_anomal_zone_, записывал не только в way_military.ltx, но еще и в файл way_agroprom.ltx; И при сборке компилятор не ругался, из-за того, что секции были в разных файлах (у компилятора идет проверка на индивидуальность секций в пределах одного файла). А при распаковке, секции уже копируются в соответсвующие им файлы (по данным гейм-графов). И при запаковке, уже будет ошибка. XOBAH

Да действительно дубликаты секций находятся в исходных файлах way_agroprom.ltx и way_military.ltx при компиляции ошибки нет и при работе all.spawn тоже, но при повторной декомпиляции эти секции попадают в один файл way_military.ltx и компиляция такого файла уже вызывает ошибку.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
makdmДата: Вс, 18.03.2012, 18:56 | Сообщение # 114
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

denis2000, ХОВАН, друзья ,спасибо большое за разъяснение.
Я очень рад, что Мы друг друга поняли.
Я понимаю, что нужно делать, но если у кого-то возникнет аналогичная проблема - может это стоит где-то написать?


Терпение......
И все получится!
 
LazurДата: Ср, 21.03.2012, 11:04 | Сообщение # 115
Новичок
Пользователи
Сообщений: 82
Награды: 3
Репутация: [ 96 ]

Чтот опять не то...
[cut=Лог]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\db.script:42: attempt to index field '?' (a nil value)
[/cut]
Скрипт db не трогал, что сие значит и как с этим бороться?

Чем подробнее вопрос - тем точнее ответ.
Накосячил в скриптах. Исполняешь код, не проверяя значения на nil. XOBAH

Добавлено (21.03.2012, 11:04)
---------------------------------------------
Так и не понял, почему был вылет, поставил более раннюю сборку. Вопрос таков: Спавньть Ниву получилось, а УАЗ не могу. Почему?
Кусочек из bind_stalker.script
[cut=Кусьман] self.loaded = false
benchmark.main() --' Distemper 06.2008 --
if rx_ai then
rx_ai.actor_net_spawn()
end
avto_v_Zone.spawn_veh_niva() --спавню Ниву
function spawn_veh_niva()
if not has_alife_info("spawn_veh_niva_complite") then
if has_alife_info("zat_b14_recon_place") then
local p=vector(),lv,gv
p.x = -161
p.y = 7
p.z = 152
lv = 0
gv = 0
alife():create("veh_niva",p,lv,gv)
give_info("spawn_veh_niva_complite")
end
end
end
avto_v_Zone.spawn_veh_uaz()
function spawn_veh_uaz() --спавним УАЗ
if not has_alife_info("spawn_veh_uaz_complite") then
if has_alife_info("zat_b14_recon_place") then
local p=vector(),lv,gv
p.x = -294
p.y = 258
p.z = 41
lv = 0
gv = 0
alife():create("veh_uaz",p,lv,gv)
give_info("spawn_veh_uaz_complite")
end
end
end
return true
end[/cut]
Кусочек из файла, avto_v_Zone.script
[cut=кусок]function spawn_veh_niva() --функция Нивы
if not has_alife_info("spawn_veh_niva") then
local p=vector(),lv,gv
p.x = -161
p.y = 7
p.z = 152
lv = 0
gv = 0
alife():create("veh_niva",p,lv,gv)
give_info("spawn_veh_niva_complite")
end
end
function spawn_veh_uaz() --функция УАЗа
if not has_alife_info("spawn_veh_uaz") then
local p=vector(),lv,gv
p.x = -294
p.y = 258
p.z = 41
lv = 0
gv = 0
alife():create("veh_uaz",p,lv,gv)
give_info("spawn_veh_uaz_complite")
end
end[/cut]
Запускаю, получаю вылет:
[cut=Лог]FATAL ERROR
[error]Expression : fatal error
[error]Function : CInifile::r_section
[error]File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp
[error]Line : 475
[error]Description : <no expression>
[error]Arguments : Can't open section 'veh_uaz'. Please attach [*.ini_log] file to your bug report
stack trace:[/cut] Сие значит, что не может найти функцию спавна УАЗа, однако такая есть. Выходит, где то ошибка...
Кто подскажет где, буду благодарен.


На пыльных тропинках аномальных полей
Заспавнятся наши следы...
 
denis2000Дата: Ср, 21.03.2012, 11:38 | Сообщение # 116
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Lazur, Не функцию спавна, а секцию спавна под именем [veh_uaz].
Код в скрипте avto_v_Zone.script кривой (ставишь одну инфопорцию проверяешь другую)
Код из bind_stalker.script вообще зоопарк (в пределах одной функции начинаеш определение другой).


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
LazurДата: Ср, 21.03.2012, 18:37 | Сообщение # 117
Новичок
Пользователи
Сообщений: 82
Награды: 3
Репутация: [ 96 ]

denis2000, тоесть моя функция должна иметь [cut=вид:]function spawn_veh_uaz()
if not has_alife_info("spawn_veh_uaz") then
local p=vector(),lv,gv
p.x = -294
p.y = 258
p.z = 41
lv = 0
gv = 0
alife():create("veh_uaz",p,lv,gv)
give_info("spawn_veh_uaz_complite")
end
end
return true
end
return false
end[/cut]? (avto_v_Zone.script)

А в bind_stalker.script должен провести "черту" меж функциями?
[cut=Так?]
...
give_info("spawn_veh_niva_complite")
end
end
end
-------------------------------------
avto_v_Zone.spawn_veh_uaz()
function spawn_veh_uaz()
if not has_alife_info("spawn_veh_uaz_complite") then
... [/cut]
P.S. в скриптах я полный невежда.


На пыльных тропинках аномальных полей
Заспавнятся наши следы...


Сообщение отредактировал Lazur - Ср, 21.03.2012, 18:39
 
denis2000Дата: Ср, 21.03.2012, 22:31 | Сообщение # 118
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Lazur, Нет неправильно.
1. Раз уж хотите работать со скриптом то прочитайте урок 3а или 3б и досконально разберитесь что и как происходит в приведенном коде.
2. Не знакомы со скриптами есть урок 29, там разъяснены основные моменты языка LUA в применении к сталкеру.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
LazurДата: Чт, 22.03.2012, 14:26 | Сообщение # 119
Новичок
Пользователи
Сообщений: 82
Награды: 3
Репутация: [ 96 ]

ОЙ ,голова моя голова...
Забыл прописать уазик в cars_spawn.script, вот и вылеты ловил. Теперь вспомнил, исправил, наслаждаюсь...


На пыльных тропинках аномальных полей
Заспавнятся наши следы...
 
xardaslichДата: Чт, 22.03.2012, 15:36 | Сообщение # 120
Отмычка
Пользователи
Сообщений: 41
Награды: 1
Репутация: [ 49 ]

S.T.A.L.K.E.R. Call of Pripyat 1.6.02(лиц) + Sigerous Mod 1.7+ fix 31.08
Всем доброго дня!
Захотел заспавнить через all.spawn на локе "ЗАТОН" аномальную зону (скажем из 4-ёх аномалий) с возможностью спавна в ней АРТОВ, на примере того же "СОСНОДУБ' a". . Материала по этой теме "нарыл" предостаточно, да и понятно практически всё- за малым исключением (Собственно по этому и обращаюсь с вопросами!):

[cut noguest]1). Скажите пожайлуста присудствует ли в ресурсах игры аномалия гравитационной природы "КАРУСЕЛЬ"? ( Знаю точно, что в ЧН на локах "СВАЛКА" и "ТЁМНАЯ ДОЛИНА" она точно присудствует, а вот в ЗП если честно- не наблюдал.Просто я точно не знаю как она называется, но принцип действия могу пояснить- это когда "тело" вначале затягивает, поднимает в воздух, раскручивает и в конце-концов разрывает). Если такова аномалия присудствует, то как её вызвать(в смысле на какое англ. имя она откликается)? Что прописать в описании секции "section_name="
[...]
; cse_abstract properties
section_name = ...
из alife_zaton.ltx распакованного all.spawn?
А если "новоиспечённая" аномальная зона будет состоять скажем из 4-ёх однотипных\разнотипных аномалий, то как следствие требуется добавить 4-и уникальных пронумерованных секции(Например: если последняя-[2180], то соответственно добавляем- [2181], [2182], [2183], [2184] для каждой из них. Я прав?);

2). А если к примеру нам требуется, чтобы спавнящиеся АРТЫ блуждали в пределах аномальной зоны, то мы соответственно вносим дополнительную секцию описания в файл way_zaton.ltx из распакованного all.spawn вида:
[zaton_testing_af_way]
points = p0,p1,p2,p3
p0:name = wp00
p0:position = ...
p0:game_vertex_id = ...
p0:level_vertex_id = ...
p0:links = p1(1)

p1:name = wp01
p1:position = ...
p1:game_vertex_id = ...
p1:level_vertex_id = ...
p1:links = p2(1)

p2:name = wp02
p2:position = ...
p2:game_vertex_id = ...
p2:level_vertex_id = ...
p2:links = p3(1)

p2:name = wp02
p2:position = ...
p2:game_vertex_id = ...
p2:level_vertex_id = ...
p2:links = p0(1)

где позиции, гейм и левелвертексы- это координаты центров наших "новоиспечённых" аномалий в пределах которых происходит "блуждания" АРТА. А p0:name = wp00, p1:name = wp01, p2:name = wp02, ... - нетрудно догадаться имена поинтов. Вроде я правильно понимаю? Но тогда откуда дублирование имени поинта третьего и четвёртого столбца из описания? Может это "опечатка" урока на Wiki и правильно будет для 3 -его и 4 -того столбцов соответственно- p2:name = wp02 и p3:name = wp03? Поправте пожайлуста если не так![/cut]

Заранее благодарен за пояснения!
 
Поиск: