Форум HeroesWorld-а - Показать сообщение отдельно - Текущие вопросы и ответы по редактору карт
Показать сообщение отдельно
#5497
Старый 12.03.2022, 18:35
  #5497
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 140
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 140
Jewily#4267
По умолчанию
Re: Текущие вопросы и ответы по редактору карт

}{0TT@6bI4Jewill, с такой функцией не сталкивался, надо потестить. Идея перспективная, кроме одного пункта: зачем отслеживать выход из окна? Если мы не имеем возможности определить, из какого именно, то и смысла большого в действии нет...
Приведу некоторый пример, можно сказать псевдокодом. Моменты времени я решил не засекать,а  засекать их условно, нам абсолютное время тут и правда совсем ни к чему.
Поправьте, если я где-то упустил логику - не особо детали продумывал, просто как принцип. Это не сказать что первостепенной важности задача, но если функция проверки показа сообщений работает по принципу "Если видишь сообщение - увидеть ещё одно не можешь", то это открывает возможности безболезненно писать скрипты на вышеупомянутые шахты,
гарнизоны, фактории(К примеру проверять, была ли приобретена та или иная боевая машина) и так далее.
-- Где угодно определенные переменные, желательно для каждого из игроков отдельно. --

WINDOW_CLOSED = nil; 
WINDOW_NAME = "";
-------------------------------------------------------------------------
Trigger(OBJECT_TOUCH_TRIGGER,"mine_name","myCallback")
----------Предположим, мы где-то вызывали системное сообщение. -----------------
----------Например, подойдя к шахте. В принципе можно и не по конкретному имени вешать триггер -------
----------------- Я так написал просто для примера -------------
--В целом, так как у каждого строения вызывающего поп-апы(Или любые окна взаимодействия) есть TYPE,---------
----то  можно повешать такой скрипт на все строения на карте в отдельном файле ----
---- Про собственные окна я ничего не говорю, их и ежу понятно как обработать. ----
---- Что до города, то, конечно,это темный лес, в котором я не сведущ, да и не очень интересно. Но работать такой принцип там не будет.  ---.

function myCallback(heroname,obj) --- Функция колбека одна на любое из строений,т.к всё что она делает - пускает другой код в ход
    local player = detectInteractor(heroname) -- тут просто определение игрока по герою.(Выдумал функцию, реализуется очень просто) 
    WINDOW_NAME = "MINE_WINDOW"
    startThread(checkWindowState,player);
end;

function checkWindowState(player) 
 while(CanShowPlayer(player) == nil) do
  sleep(2);
 end;
 WINDOW_CLOSED = not nil;
end;
function windowClosed()
  while(1) do
    sleep(3);
    if(WINDOW_CLOSED ~= nil) then
      --------Перебор вызовов по WINDOW_NAME --------
      if(WINDOW_NAME == 'MINE_WINDOW') then
         --- Вызов соответствующей функции,в ней поток на закрытие окна запустим заново----
         --- В этой же функции обнуляем наши переменные, перед запуском потока -----
       break;
      end;
    end;
  end;
end;
startThread(windowClosed);
__________________




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       
Jewily вне форума
Ответить с цитированием