Нужна помощь

Статус
В этой теме нельзя размещать новые ответы.

BLASTHACKUSERNOVER

Новичок
Автор темы
14
0
Я написал скрипт, который при помощи sampevent.onServerMessage(color, text) отлавливает определенное сообщение в чате. Если в чате появилось нужное нам сообщение, то скрипт открывает серверное диалоговое окно по команде и отсылает строку в чат через sampAddChatMessage. Мне нужно сделать так, чтобы на появившееся диалоговое окно шел ответ при помощи sampSendDialogResponse через 1000 мс, однако в sampevent.onserverMessage нельзя юзать задержки. Суть вопроса: Объясните мне как сделать задержку в sampevent.onServerMessage или приведите наглядный пример кода? заранее благодарен
 

Aniki

🐰
Администратор
1,226
1,508
Я написал скрипт, который при помощи sampevent.onServerMessage(color, text) отлавливает определенное сообщение в чате. Если в чате появилось нужное нам сообщение, то скрипт открывает серверное диалоговое окно по команде и отсылает строку в чат через sampAddChatMessage. Мне нужно сделать так, чтобы на появившееся диалоговое окно шел ответ при помощи sampSendDialogResponse через 1000 мс, однако в sampevent.onserverMessage нельзя юзать задержки. Суть вопроса: Объясните мне как сделать задержку в sampevent.onServerMessage или приведите наглядный пример кода? заранее благодарен
Просто создаешь поток в событии
Lua:
function sampev.onServerMessage(color, text)
  if text:find('huy') then
    lua_thread.create(function()
      sampSendChat('/zalupa')
      wait(1000)
      sampSendDialogResponse(228, 1, -1, '')
    end)
  end
end
Однако в твоём случае лучше отлавливать диалог через хук на диалог, мало ли сервер залагает и пройдет больше 1000 мс? Или напротив, диалог откроется раньше и можно будет быстрее дать ответ. Для того чтобы скрипт не срабатывал на диалог, когда это не нужно, можно задействовать переменную
Lua:
local triggered = false

function sampev.onServerMessage(color, text)
  if text:find('huy') then
      sampSendChat('/zalupa')
      triggered = true -- теперь на нужный диалог сработает следующий хук
  end
end

function sampev.onShowDialog(id, style, title, b1, b2, text)
  if triggered and title:find('pizda') then -- проверяем диалог по заголовку например и также проверям триггер
    sampSendDialogResponse(id, 1, -1, '') -- отправляем респонс в этот диалог
    triggered = false -- убираем триггер
  end
end
 
  • Нравится
Реакции: Hdjdhdhd

Hdjdhdhd

Новичок
18
0
Это поистине шикарная идея. Я думал сделать такое, но не знал как реализовать. Спасибо тебе). У меня еще один вопрос... А можно сделать как-то так?
local trigered = 0
local active = 0
function com()
if active == 0 then
active = 1
else
active = 0
trigered = 1
end
end
function se.onShowDialog(id, style, title, b1, b2, text)
if trigered == 1 then
if id == 18 then
sampCloseCurrentDialogWithButton(0) return false
end
if id == 19 then
sampCloseCurrentDialogWithButton(0) return false
end
trigered = 0
end
end


Сейчас объясню. Вообщем, я прописываю команду /com, для котрой естественно функция com. В данной функции идет включение и выключение цикла, который флудит команду (не стал писать цикл сюда) и когда я выключаю цикл, то появляется диалоговое окно с 18 или 19 ИДом, которое нужно закрыть. Вот вопрос : Могу ли я использовать один trigered для двух диалоговых окон, как показал в примере кода выше (в Se.onShowDialog)?
 

Hdjdhdhd

Новичок
18
0
Я наткнулся на еще одну проблему: При завершении может выдать рандомный диалог (как 18,так и 19 ид). Можно ли сделать как то, чтобы при завершении закрывало сразу два диалога, чтобы их не показывало при завершении??
 
Статус
В этой теме нельзя размещать новые ответы.