muzafir
-
Публикаций
47 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные muzafir
-
-
не работает, ты прав. Хотя функция time_period(5:5) с такой передачей параметров есть в в оригинальном xr_conditions.script. Насчет and я не понял - как без, если надо все 3 поршня удалить?
За мысль с рестриктором спасибо
-
Привет всем. Мне нужно убрать у ГГ ранеее полученные инфопорции, но сделать это через время, чтобы дать ему возможность выйти с территории. Вызывал из диалога:
function dolg_taboo() if xr_conditions.time_period(5:5) then db.actor:disable_info_portion("bar_dolg_base_pass") and db.actor:disable_info_portion("bar_dolg_community_start") and db.actor:disable_info_portion("bar_dolg_community_leader") end end
Но это не работает. Как можно это реализовать?
-
32 минуты назад, makdm сказал:важен только результат.
Так я и не осуждаю его подход. Просто я по первому посту понял, что загвоздка в том, как это сделать в СДК. Об этом и написал. И кроме того обратил внимание на то, что мне показалось неправильным в логике. Вот и все.
-
Pepel , ты спрашивал про "систему флагов для работы в СДК". Я понял это, как то что ты не понимаешь, как ставить пути в СДК. Извини, нет желания смотреть твое видео на 40 мин. То что я написал, работает 100%.
Зачем копаться в оллспавне, когда можно за 2 мин расставить точки в СДК прямо куда хочется, я тоже не очень понимаю. Но дело - твое.
По логике, что ты привел: почему в каждой схеме walker у тебя одинаковые названия путей? Если ты хочешь, чтобы НПС двигался, они должны различаться. К примеру:
[walker@wait] - стоит на точке, по поршню переключается в след схему
[walker@to_kipesh] - двигается на встречу с другим НПС/актером. Сюда же подключаешь meet, чтобы в последней точке он мог поговорить. И если ему после этого нужно в ту же точку, на которой он стоял до этого, можно переключить опять на первую схему [walker@wait]. Или сделать новую
[walker@wait_1] , использующую те же пути, что и первая, чтобы не ставить пути для возврата.
Как-то так это все работает.
- 1
-
vader_33 , спасибо, тогда оставлю я эту затею. Движок не модифицированный и не охота туда лезть. Программирование не на том уровне.
-
4 часа назад, Pepel сказал:там про систему флагов для работы в сдк написно?
Все там написано. Для схемы walker количество точек в walk_path и look_path не обязательно должно совпадать. Расставляешь все точки в СДК. Затем тебе нужно связать точку walk c точкой look (если НПС должен стоять тут и смотреть туда). Для этого кликни на точку walk в режиме Point Mode и нажми ENTER. Откроются ее свойства, там ты раздел Flags от 0-..., поставь галочку напротив нуля. Затем проделай то же самое с точкой look. Следующей паре точек назначишь 1 и т.д.
Анимации и время прописываются в точках look_path - name02|a=guard|t=30000 - т.е. просто после имени точки добавляешь, что нужно. Считай, что НПС дошел до точки walk, смотрит в точку look и видит, что и как долго ему здесь делать.
В walk_path прописывается как именно НПС идет к этой точке бегом, шагом, в патруле, с оружием в руках, с оружием за спиной, в присядку и т.д. (к примеру name04|a=patrol)
И еще одно: связи между точками look_path можешь смело удалить - они не используются.
Дополнено 5 минуты спустя19 часов назад, vader_33 сказал:muzafir просто удалить и заспавнить новый предмет
Суть в том, что я хочу отловить нажатие V (подствол) и в этот момент заменить одно оружие другим. По след нажатию все нужно будет вернуть.
-
А есть у кого-нибудь пример скрипта подмены предмета в слоте?
-
При компиляции спавна (батник @start bins\compiler_ai\xrAI.exe -no_separator_check -s) в логе появляются такие строки:
* loading script utils.script
! [LUA] 0 : [C] [C](-1) :
! [LUA] 1 : [Lua] gamedata\scripts\se_zones.script(6) : is_single_player_game
! [LUA] 2 : [Lua] gamedata\scripts\se_zones.script(51) :
* trying to access variable alife, which doesn't exist, or to load script alife.script, which doesn't exist tooЧто можно с этим сделать? В se_zones.script действительно есть эта функция is_single_player_game и она, как я понял, как раз и проверяет, существует ли алайф.
А как он может не существовать?Еще инфа на всякий случай, не знаю, что может оказаться полезным.
Локация совершенно новая, не билдовская. Игра запускается, на локацию можно зайти-выйти, вроде все нормально. Но не убираются трупы. Лежат вечно. И рандомно тайники оказываются пустыми. -
Заработало! Может кому-нибудь пригодится:
function actor_punch(npc) if db.actor:position():distance_to_sqr(npc:position()) > 4 then return else npc:add_animation("udar_0") end set_inactivate_input_time(30) local snd_obj = xr_sound.get_safe_sound_object([[affects\hit_fist]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) level.add_cam_effector("camera_effects\\fusker.anm", 999, false, "") end
Можно вызывать из диалога экшеном, тогда ГГ получит по морде от собеседника. Только перед вызовом этой функции вставьте стандартный
<action>dialogs.break_dialog</action>
чтобы прервать диалог. Ну или засуньте это тоже в функцию.
Всем удачи!
- 1
-
Спасибо, это я видел. Но в xr_effects.script - только проверка на присутствие оружия в руках и эффекты от удара, самой анимации удара нет. xr_abuse.script - как я понял, используется для вызова из логики НПС. Как там сама анимация удара задействуется не пойму - не на том уровне у меня скрипты.
Поэтому и подумал, может кто-нибудь уже знает ответ
-
Всем привет! Подскажите, как можно организовать удар от НПС в морду актера? Может у кого есть готовая функция, чтобы ее можно было вызвать экшеном из диалога в нужном месте? Буду рад любым предложениям.
-
Всем привет, подскажите, как можно убить скриптом определенного НПС? Дело в том, что у меня один товарищ отказывается умирать. Из его логики по инфопоршню вызывается функция:
function dronea_hit(actor, npc) local h = hit() h.power = 1 h.direction = npc:direction() h.draftsman = db.actor h.impulse = 1 h.type = hit.wound npc:hit(h) end
Все работало. Закончил с ним и пошел дальше. А теперь выяснилось, что он перестал слушаться! Пробовал уже и экшеном из диалога - ему хоть бы хны.
Инфопорция точно выдается, т.к. по ней спавнится еще 3 псевдособаки (типа они его загрызли). Раньше он лежал себе спокойненько, а сейчас бегает от них с воплями по локации и они его догнать не могут ?
-
Всем привет! Кто-нибудь знает, как победить эти строчки в логе при компиляции спавна? Игра при этом запускается, все, вроде, работает, но трупы не убираются и выброшенные из рюкзака предметы остаются лежать вечно. (Если что, это ТЧ и лока абсолютно новая, не из билдов или других частей)
* loading script utils.script
! [LUA] 0 : [C] [C](-1) :
! [LUA] 1 : [Lua] gamedata\scripts\se_zones.script(6) : is_single_player_game
! [LUA] 2 : [Lua] gamedata\scripts\se_zones.script(51) :
* trying to access variable alife, which doesn't exist, or to load script alife.script, which doesn't exist too
Дополнено 8 минуты спустяimcrazyhoudini , сделай разные состояния для смарту для ночи и дня с разными наборами работ. Блок-пост на Кордоне, к примеру так работает. Еще разрабы использовали прямо в логике функцию is_day, примерно так:
[logic]
active = {=is_day} walker, kampесли день выполняется первая схема, в данном случае walker, ночью вторая - kamp
Естественно, схемы могут быть любыми.
-
Да, с gulag_simeiz.ltx вышла опечатка. Спасибо за script Syntax Checker - попробую. Ошибки уже как угодно искал, попробую еще и так
-
Всем привет! При компиляции спавна на новой локации в логе такие строки:
Цитата! [LUA] 0 : [C] [C](-1) :
! [LUA] 1 : [main] gamedata\scripts\xr_gulag.script(10) :
! [LUA] 2 : [C] [C](-1) :
! [LUA] 3 : [Lua] gamedata\scripts\smart_terrain.script(372) : read_params
! [LUA] 4 : [Lua] gamedata\scripts\smart_terrain.script(152) :
* trying to access variable gulag_simeiz, which doesn't exist, or to load script gulag_simeiz.script, which doesn't exist too
* loading script xr_logic.scriptВсе вроде бы понятно - не может загрузить gulag_simeiz.script, который не существует. Но прикол в том, что он существует!!! и зарегистрирован в xr_gulag.script!!!
И xr_gulag.ltx существует и зарегистрирован в gulag_tasks.ltx
В результате, игра грузится, но гулаг не работает, НПС отпущены на волю а-лайфа. Что можно с этим сделать?
-
9 часов назад, imcrazyhoudini сказал:по сути твоё предложение верно.
Ok, я так и думал. Буду рад любой мысли, что еще можно проверить, куда глянуть. В Тенях Чернобыля же нет файла, где нужно регистрировать все смарты на локации, как в Зове Припяти?
-
Да, это кусочек логики для примера все параметры hit, death, meet прописаны, в gulag_tasks.ltx инклюд есть.
У меня в смарте ровно 12 человек. Раньше было так:
squad = 1
group = 9,т.к. трое сидят в кампе возле костра и выполняют одну работу. Когда переделывал, увидел, что работа для каждого в gulag.script грузится отдельно, поэтому изменил на
squad = 1
group = 12До сих пор сталкивался только с тем, что вылеты без лога случаются, когда есть косяки в названии путей (например пробел). Или грубая ошибка в конфиге (незакрытая скобка, отсутвующий end в функции).
Все уже многократно проверял. Дело вряд ли в путях: если удалить все население смарта, игра грузится, если оставить хоть одного, вылетает на этапе синхронизации. Не представляю, как сузить круг поисков.
Вообще главный вопрос: правильно ли я понимаю, что такая организация - gulag.script, gulag.ltx - необходима для работы респавна? Т.к. повторюсь: что при моем старом (рабочем) варианте вся логика прописана НПС прямо в кастом дата и все работало отлично. У меня уже полностью готов сюжет на локации и только сейчас я понял, что нужен респавн?
-
Спасибо огромное, уже недели 2 ковыряюсь с этим. Миллион раз исправлял, а это все же не заметил. Это была ошибка однозначно, но когда я ее исправил вернулись мои "прекрасные" вылеты без лога ?.
Появились они, когда я логику из кастом дата отдельных сталкеров собирал в gulag. ltx и gulag.script. До этого все работало прекрасно.
-
СпойлерCustom data смарта:
[smart_terrain]
type = sim_keep_lager
capacity = 12
;communities = keepers
squad = 1
group = 12Custom data бойца:
[smart_terrains]
simz_keep_lager = trueПримеры логики из gulag_simeiz.ltx:
[logic@simz_keep_lager_zastava_guard2]
active = walker@simz_keep_lager_zastava_guard2
on_hit = hit@keepers_lager
on_death = death@keepers_lager[walker@simz_keep_lager_zastava_guard2]
path_walk = zastava_guard_walk2
path_look = zastava_guard_look2
meet = meet@keepers_lager
on_info = {+simeiz_keep_lager_alert} %=killactor%
[logic@simz_keep_lager_zastava_guard3]
active = walker@simz_keep_lager_zastava_guard3
on_hit = hit@keepers_lager
on_death = death@keepers_lager[walker@simz_keep_lager_zastava_guard3]
path_walk = zastava_guard_walk3
path_look = zastava_guard_look3
meet = meet@keepers_lager
on_info = {+simeiz_keep_lager_alert} %=killactor%Вот так гружу ее в gulag_simeiz.script:
if type == "simz_keep_lager" then
t = { section = "logic@simz_keep_lager_zastava_guard2",
idle = 0,
prior = 9, state = {0,1},
in_rest = "", out_rest = ""
}
table.insert(sj, t)
t = { section = "logic@simz_keep_lager_zastava_guard3",
idle = 0,
prior = 9, state = {0,1},
in_rest = "", out_rest = ""
}
table.insert(sj, t)
endУ смарта только два состояния:
function load_states(gname, type)
if type == "simz_keep_lager" then
return function(gulag)
if not db.actor then
return gulag.state
end
if level.get_time_hours() >= 5 and level.get_time_hours() <= 22 then
return 0 -- день
else
return 1 -- ночь
end
end
end
endПроверка коммьюнити присутствует(и спавню в смарте точно их):
function checkStalker(npc_community, gulag_type, npc_rank, se_obj)
if gulag_type == "simz_keep_lager" then
return npc_community == "keepers"
end
return false
endgulag_simeiz добавил после оригинальных в xr_gulag.script
Вот то, что сделал. Что не так? Чего им еще не хватает?
-
Что конкретно показать? Какую свободную, если она прописана в Custom data конкретного НПС, который убит? Я, похоже, чего-то не понимаю
-
Всем привет. Столкнулся с такой проблемой:
Создал смарт-террейн на новой локации для новой группировки (не знаю, насколько это важно) и сначала прописал логику каждому НПС в Кастом Дату. Все было прекрасно, все работало отлично. Затем осознал, что нужно будет доспавнивать бойцов группировки. С какой тогда они появятся логикой? Поэтому создал файлы gulag.ltx, gulag.script, зарегил, где надо, - словом, сделал, как в оригинале. Но НПС перестали слушаться логики. Просто разбредаются кто-куда. К тому же, хотя часть и гибнет в перестрелках, спавнер отказывается доспавнивать.
В чем может быть проблема? Уже сто раз все перепроверил. Ума не приложу, где искать. Они точно не уходят под другой смарт - его просто нет.
[SoC] Модострой: вопросница
в Уроки, вопросы и советы по созданию модов
Опубликовано
Ты абсолютно прав. Что-то я затупил