Перейти к контенту
Halford

[SoC] Ковыряемся в файлах

Рекомендуемые сообщения

@андрей дронав 

Так ведь написано черным по белому - переменная 'se_obj' имеет значение nil, т.е "ничего".

Ссылка на комментарий
1 минуту назад, AndreySol сказал:

Так ведь написано черным по белому

Спасибо! Я не программист, поэтому задаю глупые вопросы.

Вылет я поправил, должно было быть так:     if se_obj == nil or se_obj.death_droped == true then

Ссылка на комментарий
4 часа назад, nasar75 сказал:

В ЧН делал, а вот как... Вроде бы в одной гранате 10 частей - как в пачке патронов...

 

как такой же трюк провернуть? неужели только движок править? если править! то как?

Ссылка на комментарий

Доброго дня комрадыю Вопрос таков

У моего бота прописана вот такая логика

Скрытый текст

[logic]
active = walker@bar
combat_ignore = combat_ignore
meet = no_meet

[walker@bar]
path_walk = chern_gurvinek_walk
path_look = chern_gurvinek_look
meet = no_meet
danger = danger_condition
on_actor_dist_le_nvis = 5 | remark@hello
;on_info = {-chern_bar_hurvinek_meeting} kamp
combat_ignore_cond = {=fighting_dist_ge_20}
 
[remark@hello]
anim = hello_wpn
target = actor
;anim_end = remark@talk
on_timer = 3000 | remark@talk
combat_ignore_cond = {=fighting_dist_ge_20}
meet = no_meet

;[remark@wait] 
;target = actor
;on_actor_dist_le_nvis = 3 | remark@talk %=xr_effects.gurvinek_give_equipment%
;meet = no_meet
;combat_ignore_cond = {=fighting_dist_ge_20}
 
[remark@talk]
snd = hurvinek_start_monolog
;on_game_timer = 12 |nil %=xr_effects.gurvinek_give_equipment%
on_game_timer = 12 | {-chern_bar_hurvinek_meeting} %=xr_effects.gurvinek_give_equipment +chern_bar_hurvinek_meeting%
combat_ignore_cond = {=fighting_dist_ge_20}
on_signal = sound_end | kamp
meet = no_meet
  
[kamp]
center_point = chern_lager_town_vegetables_camp_center
meet = meet
combat_ignore_cond = {=fighting_dist_ge_20}
 
[meet@helow]
meet_dialog = escape_talk_about_escape
use        = true
use_wpn        = true
 
[danger_condition]
ignore_distance = 15
 
[combat_ignore]

При подходе к нему и после проигрывания анимации hello происходит вылет вот с с таким логом

Сама функция выдачи предметов прописана в xr_effects и выглядит так

Скрытый текст

function gurvinek_give_equipment(first_speaker, second_speaker)
    local reward_items = math.random(1,3)
    if reward_items == 1 then -- Первый вариант
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "ammo_9x18_fmj", 2)
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_pm")
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_knife")
;              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "detector_simple")
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "medkit", 1)
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "bandage", 3)
    end
    if reward_items == 2 then -- Второй вариант
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "ammo_12x70_buck", 5)
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_bm16")
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_knife")
;              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "detector_simple")
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "medkit", 1)
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "bandage", 3)
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "antirad", 1)
    end
    if reward_items == 3 then -- Третий вариант
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "ammo_12x70_buck", 5)
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "ammo_9x18_fmj", 2)
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_bm16")
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_pm")
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "wpn_knife")
;              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "detector_simple")
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "bandage", 5)
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "medkit", 2)
              dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, "antirad", 1)
    end
end

Может вы сможете подсказать, где я накосячил?

Лучше сделать мод с 0, чем пытаться залатать багованный.

Ссылка на комментарий
10 минут назад, DarkSnowder сказал:

где я накосячил?

Наверное тут:

%=xr_effects.gurvinek_give_equipment +chern_bar_hurvinek_meeting%

 

S.T.A.L.K.E.R. CoP Objects (upd 10.04.24)


Подарки

  • Ссылка на комментарий

    @WinCap В чём именно косяк? Дубликата у функции нету, проверял

    Лучше сделать мод с 0, чем пытаться залатать багованный.

    Ссылка на комментарий
    27 минут назад, DarkSnowder сказал:

    В чём именно косяк?

    Имя файла скрипта в логике указывать не надо.

    S.T.A.L.K.E.R. CoP Objects (upd 10.04.24)


    Подарки

  • Ссылка на комментарий

    @WinCap Спасибо, и в правду помогло

    Слушай, а как мне указать, чтобы после начала звуковой дорожки, снаряга выдалась ток через 10 секунд? (как эти секунды правильно прописать?)

    Лучше сделать мод с 0, чем пытаться залатать багованный.

    Ссылка на комментарий
    8 минут назад, DarkSnowder сказал:

    как мне указать, чтобы ... снаряга выдалась ток через 10 секунд?

    Нужно в строке on_game_timer время увеличить. Это же игровое время и 12 игровых секунд это... мгновение.

    Напомню, что можно использовать и on_timer, где нужно указывать реальное время в миллисекундах.

    S.T.A.L.K.E.R. CoP Objects (upd 10.04.24)


    Подарки

  • Ссылка на комментарий

    Всех приветствую!

    Сталкер ТЧ, добавил телепортатор и звуки приема пищи, но работает только что то одно, в зависимости от порядка строк, например: 

    Скрытый текст

        self.object:set_callback(callback.use_object, self.use_object, self)
        self.object:set_callback(callback.use_object, self.on_use_object, self)
        self.object:set_callback(callback.death, self.death_callback, self)
    end

    Сейчас телепорт работает, но звуков нет, меняю верхние строки местами работает наоборот...

    Что можно сделать чтобы все работало?

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

    Изменено пользователем андрей дронав
    Ссылка на комментарий

    Одно событие, два обработчика – учитывается только последний.

    Можно в самом обработчике указать оба действия, с делением по ситуации, если действия не происходят совместно.

    • Спасибо 1
    • Согласен 1
    • Полезно 1

    Мини-моды: ТЧ ЧН ЗП

    Шпаргалка

    Ссылка на комментарий
    10 часов назад, Norman Eisenherz сказал:

    Можно в самом обработчике указать оба действия, с делением по ситуации, если действия не происходят совместно.

    Любопытно посмотреть, как это сделать.

    Сталкер - наше всё!

    Ссылка на комментарий

    @AndrewMor , в данном случае это просто один и тот же callback, только по-разному именованный. В оригинале, как известно, отсутствовал, хоть и подразумевался, поэтому каждый восстанавливал его в меру своего разумения. Отсюда и различия в синтаксисе.

    Пример:

    Народная Солянка:

    self.object:set_callback(callback.use_object, self.on_use_object, self)

    Фотограф:
    self.object:set_callback(callback.use_object, self.use_object, self)

    • Согласен 2
    Ссылка на комментарий
    23 минуты назад, Купер сказал:

    только по-разному именованный.

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

    А колбек один и тот же используется, и одинаково называется.

    23 минуты назад, Купер сказал:

    callback.use_object

     

    Изменено пользователем Zander_driver
    • Согласен 3

    Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

    Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

    AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

    Ссылка на комментарий

    @Zander_driver , неудачно сформулировал, хотя ключевое и постарался выделить. :blush:

    В данном случае получается, что для одного и того же события (callback-а) последовательно вызываются два обработчика события: сначала self.use_object, затем self.on_use_object

    • Не согласен 1
    Ссылка на комментарий
    13 минут назад, Купер сказал:

    для одного и того же события (callback-а) последовательно вызываются два обработчика события

    И где же можно увидеть эти два вызова?

    Тут ошибка не формулировки, а фактическая. Обработчик вызывается один раз.

    55 минут назад, Купер сказал:

    self.object:set_callback(callback.use_object, self.on_use_object, self)
    self.object:set_callback(callback.use_object, self.use_object, self)

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

    Так что, по отдельности эти строки верны, а будучи написаны подряд в одном файле - нет.

    • Полезно 1

    Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

    Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

    AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

    Ссылка на комментарий

    Всё, сдаюсь. В схоластике не силён. Главное в ситациии всё уже, наверно, поняли:

    function actor_binder:on_use_object (obj)
        --* действия раз
    end
    
    function actor_binder:use_object (obj)
        --* действия два
    end

     

     

     

    Изменено пользователем Купер
    Ссылка на комментарий

    @Купер Л = логика, нужно просто встряхнуть холодец в голове,

    а по существу вопроса - оставь один коллбек и одну функцию,

    а все действия и условия перенеси в неё - профит.

    P.S.  почему всё так сложно то

     

    function actor_binder:on_use_object (obj)
        --* действия раз
        --* действия два
    end

     типа так

    Изменено пользователем ted.80
    • Согласен 3
    Ссылка на комментарий

    @ted.80 , нет желания ни вспоминать, ни пробовать, какой именно вызов коллбека в итоге сработает в итоге: первый или последующий, но 2 обработчика на одно событие совместно работать не будут.

    self.object:set_callback(callback.use_object, self.on_use_object, self)
    ...
    function actor_binder:on_use_object (obj)
        --* действия раз
        --* действия два
    end

    А дальше уже домысливать желаемую задумку.

    Ссылка на комментарий

    @андрей дронав коллбеки это хорошо, конечно, но я бы вообще телепорт туда не вешал

    Здесь могла быть ваша реклама.


    Подарки

  • 4
  • 4
  • 2
  • Ссылка на комментарий

    Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

    Комментарии могут оставлять только зарегистрированные пользователи

    Создать аккаунт

    Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

    Зарегистрировать новый аккаунт

    Войти

    Есть аккаунт? Войти.

    Войти
    • Недавно просматривали   0 пользователей

      Ни один зарегистрированный пользователь не просматривает эту страницу.

    AMK-Team.ru

    ×
    ×
    • Создать...