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

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


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

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

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

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

    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 ядер, 32 потока, 5.75 ГГц); 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 ядер, 32 потока, 5.75 ГГц); 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

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

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

@mole venomous почему? Смотря что за телепорт. К стати, а что за телепорт?

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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

@UriZzz я не знаю, какая схема у пользователя. А я использую скриптовую систему переходов. С модулем от артоса она надёжно работает. Я не говорю, что она лучше или хуже, но главное, надежная, стабильная и простая. 

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

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

@mole venomous а что за телепорт?

UNIVERSAL TELEPORT V2.0 Автор: naxac

Ставлю на Ivg_brest скрипт приёма пищи из OGSM ТЧ

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

@андрей дронав скинь ссылочку, если не затруднит. Буду за компом, гляну. Хотя у этого автора всегда качественные работы

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

Ссылка на комментарий
7 минут назад, mole venomous сказал:

@андрей дронав У этого автора всегда качественные работы. 

Согласен! Телепорт работает отлично! Вот проблема неожиданно в одинаковых калбэках... 

https://synthira.ru/load/s_t_a_l_k_e_r/ten_chernobylja_mody/universal_teleport_v2_0/19-1-0-3239

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

@андрей дронав , а что мешает или не работает в таком варианте?

function actor_binder:net_destroy()
...
self.object:set_callback(callback.use_object, nil)
...
end

function actor_binder:reinit()
...
self.object:set_callback(callback.use_object, self.use_object, self)
...
end

function actor_binder:use_object(obj)
    sound_for_eat.use_snd(obj) --* озвучка еды
    teleportator.use_tele(obj) --* 'полетушка'
end

 

Вместо:

function actor_binder:reinit()
...
self.object:set_callback(callback.use_object, self.use_object, self) --* 2 одинаковых
self.object:set_callback(callback.use_object, self.on_use_object, self) --* вызова одного коллбека
...
end

function actor_binder:use_object(obj)
    sound_for_eat.use_snd(obj)    
end

function actor_binder:on_use_object(obj, who)
    teleportator.use_tele(obj)
end

 

А, вообще, прицепить использование телепорта к верхней функции.

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

@Купер Про разно поименованный колбек - понятно. Вопрос был в другом: 

 

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

  • Жуть! 1

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

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

@AndrewMor , прошу пардону, вышесказанное больше к @андрей дронав относится.

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

 

Как видишь, даже после всего, что накропали, у камрада определённые вопросы всё-таки остались.

А по поводу "...использовать один синтаксис колбека, а уже в обработчике обрабатывать ситуации по-разному"(c). Вот перевели бы вы всё это на хотя бы русский алгоритмический. Терминология - она такая :biggrin:. Тут вон за один только метод вызова коллбека целая дискуссия разгорелась.

 

 

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

Всем спасибо за помощь!  Без вас яб ни как!!!

Скрытый текст
function actor_binder:net_destroy()
...
self.object:set_callback(callback.use_object, nil)
...
end

function actor_binder:reinit()
...
self.object:set_callback(callback.use_object, self.use_object, self)
...
end

function actor_binder:use_object(obj)
    sound_for_eat.use_snd(obj) --* озвучка еды
    teleportator.use_tele(obj) --* 'полетушка'
end

 

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

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

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

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

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

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

Войти

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

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

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