Перейти к содержанию

muzafir

Разработчики
  • Публикаций

    47
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные muzafir


  1. не работает, ты прав. Хотя функция time_period(5:5) с такой передачей параметров есть в  в оригинальном xr_conditions.script. Насчет and я не понял - как без, если надо все 3 поршня удалить?

    За мысль с рестриктором спасибо


  2. Привет всем. Мне нужно убрать у ГГ ранеее полученные инфопорции, но сделать это через время, чтобы дать ему возможность выйти с территории. Вызывал из диалога: 

    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

    Но это не работает.  Как можно это реализовать?


  3. 32 минуты назад, makdm сказал:

    важен только результат.

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


  4. Pepel , ты спрашивал про "систему флагов для работы в СДК". Я понял это, как то что ты не понимаешь, как ставить пути в СДК. Извини, нет желания смотреть твое видео на 40 мин. То что я написал, работает 100%.

    Зачем копаться в оллспавне, когда можно за 2 мин расставить точки в СДК прямо куда хочется, я тоже не очень понимаю. Но дело - твое.

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

    [walker@wait] - стоит на точке, по поршню переключается в след схему

    [walker@to_kipesh] - двигается на встречу с другим НПС/актером. Сюда же подключаешь meet, чтобы в последней точке он мог поговорить. И если ему после этого нужно в ту же точку, на которой он стоял до этого, можно переключить опять на первую схему [walker@wait]. Или сделать новую

    [walker@wait_1] , использующую те же пути, что и первая, чтобы не ставить пути для возврата.

    Как-то так это все работает.

    • Лайк 1

  5. 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 (подствол) и в этот момент заменить одно оружие другим. По след нажатию все нужно будет вернуть.


  6. При компиляции спавна (батник @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 и она, как я понял, как раз и проверяет, существует ли алайф.
    А как он может не существовать?

    Еще инфа на всякий случай, не знаю, что может оказаться полезным.
    Локация совершенно новая, не билдовская. Игра запускается, на локацию можно зайти-выйти, вроде все нормально. Но не убираются трупы. Лежат вечно. И рандомно тайники оказываются пустыми.


  7. Заработало! Может кому-нибудь пригодится:

    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

  8. Спасибо, это я видел.  Но в xr_effects.script - только проверка на присутствие оружия в руках и эффекты от удара, самой анимации удара нет. xr_abuse.script - как я понял, используется для вызова из логики НПС. Как там сама анимация удара задействуется не пойму - не на том уровне у меня скрипты.

    Поэтому и подумал, может кто-нибудь уже знает ответ


  9. Всем привет! Подскажите, как можно организовать удар от НПС в морду актера? Может у кого есть готовая функция, чтобы ее можно было вызвать экшеном из диалога в нужном месте? Буду рад любым предложениям.


  10. Всем привет, подскажите, как можно убить скриптом определенного НПС? Дело в том, что у меня один товарищ отказывается умирать. Из его логики по инфопоршню вызывается функция:

    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 псевдособаки (типа они его загрызли). Раньше он лежал себе спокойненько, а сейчас бегает от них с воплями по локации и они его догнать не могут ?


  11. Всем привет! Кто-нибудь знает, как победить эти строчки в логе при компиляции спавна? Игра при этом запускается, все, вроде, работает, но трупы не убираются и выброшенные из рюкзака предметы остаются лежать вечно.  (Если что, это ТЧ и лока абсолютно новая, не из билдов или других частей)

    * 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

    Естественно, схемы могут быть любыми.


  12. Да, с gulag_simeiz.ltx вышла опечатка. Спасибо за script Syntax Checker  - попробую. Ошибки уже как угодно искал, попробую еще и так


  13. Всем привет! При компиляции спавна на новой локации в логе такие строки:

    Цитата

    ! [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

    В результате, игра грузится, но гулаг не работает, НПС отпущены на волю а-лайфа. Что можно с этим сделать?


  14. 9 часов назад, imcrazyhoudini сказал:

     по сути твоё предложение верно.

    Ok, я так и думал. Буду рад любой мысли, что еще можно проверить, куда глянуть. В Тенях Чернобыля же нет файла, где нужно регистрировать все смарты на локации, как в Зове Припяти?


  15. Да, это кусочек логики для примера все параметры hit, death, meet прописаны, в gulag_tasks.ltx инклюд есть.

    У меня в смарте ровно 12 человек. Раньше было так:

    squad = 1
    group = 9,

    т.к. трое сидят в кампе возле костра и выполняют одну работу. Когда переделывал, увидел, что работа для каждого в gulag.script грузится отдельно, поэтому изменил на 

    squad = 1
    group = 12

    До сих пор сталкивался только с тем, что вылеты без лога случаются, когда есть косяки в названии путей (например пробел). Или грубая ошибка в конфиге (незакрытая скобка, отсутвующий  end в функции).

    Все уже многократно проверял. Дело вряд ли в путях: если удалить все население смарта, игра грузится, если оставить хоть одного, вылетает на этапе синхронизации. Не представляю, как сузить круг поисков.

    Вообще главный вопрос: правильно ли я понимаю, что такая организация - gulag.script, gulag.ltx - необходима для работы респавна? Т.к. повторюсь: что при моем старом (рабочем) варианте вся логика прописана НПС прямо в кастом дата и все работало отлично. У меня уже полностью готов сюжет на локации и только сейчас я понял, что нужен респавн?


  16. Спасибо огромное, уже недели 2 ковыряюсь с этим. Миллион раз исправлял, а это все же не заметил. Это была ошибка однозначно, но когда я ее исправил вернулись мои "прекрасные" вылеты без лога ?.

    Появились они, когда я логику из кастом дата отдельных сталкеров собирал в gulag. ltx и gulag.script.  До этого все работало прекрасно.


  17. Спойлер

    Custom data смарта:

    [smart_terrain]
    type = sim_keep_lager
    capacity = 12
    ;communities = keepers
    squad = 1
    group = 12

    Custom 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
    end

    gulag_simeiz добавил после оригинальных в xr_gulag.script

    Вот то, что сделал. Что не так? Чего им еще не хватает?


  18. Всем привет. Столкнулся с такой проблемой:

    Создал смарт-террейн на новой локации для новой группировки (не знаю,  насколько это важно) и сначала прописал логику каждому НПС в Кастом Дату. Все было прекрасно, все работало отлично. Затем осознал, что нужно будет доспавнивать бойцов группировки. С какой тогда они появятся логикой? Поэтому создал файлы gulag.ltx, gulag.script, зарегил, где надо, - словом, сделал, как в оригинале. Но НПС перестали слушаться логики. Просто разбредаются кто-куда. К тому же, хотя часть и гибнет в перестрелках, спавнер отказывается доспавнивать.

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