Перейти к контенту
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 11.03.24)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

S.T.A.L.K.E.R. CoP Objects (upd 11.03.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

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

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

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

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

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

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

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

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

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

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

Войти

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

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

AMK-Team.ru

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