Задержка таймера Lua

Я пытаюсь написать чрезвычайно простое дополнение для WoW. Мне нужно знать, возможно ли вообще задержать функцию на 30 секунд или минуту, а затем вызвать другую функцию.

Я попытался сделать хакерскую работу со следующим:

SLASH_PORTS1 = '/ports';
function pretalk()
  if currentTime==currentTime+1 then 
    talk();
  else
    talkagain();
  end
end
function talk()
  SendChatMessage("selling PORTS 9g ea. 1g cheaper than the rest! PST." ,"CHANNEL" ,"COMMON" ,"2");
  pretalk();
end 
function SlashCmdList.PORTS()
  currentTime = GetGameTime();
  talk();
end
function talkagain()
  pretalk();
end

Но это не работает. Он отправит первое сообщение в чат, а затем не сможет получить второе.

1 ответ

Это не может быть сделано так, как вы смотрите на это.

GetGameTime() только для информации. Вы вообще не перехватываете какие-либо события в вашем коде, кроме слэша. Для того, чтобы игра последовательно опрашивалась игрой, вам нужно было бы создать какое-то невидимое окно, перехватить событие Paint и записывать время каждый раз, пока вы не достигнете своего состояния. Или, лучше, найдите стороннюю библиотеку таймеров, которая сделает всю работу за вас. (Попробуйте этот, например.) Или, еще лучше, извлеките стандартный код интерфейса WoW с помощью Addon Kit и проверьте код встроенного будильника и функции секундомера.

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

Другие вопросы по тегам