Или отслеживаем ввод стандартных чит-кодов в сингл-плеере. Сразу скажу, что это явно не самый производительный способ, ибо тут обновляются строки по каждому изменению поля для ввода, но это наработка для сингл-плеера, где чат в 99% случаев нужен только для ввода читов, так что думаю, что способ имеет место быть.
Принцип работы
Код
Таймер в функции InitEditBoxAnalyzer() присутствует по той причине, что нужна небольшая задержка перед обращением к стандартным фреймам в случае вызова этой функции в момент инициализации карты. Этот таймер можно убрать из данного кода и применить перед вызовом, например.
Два последних состояния хранится именно потому, что в момент ввода срабатывают оба события, причём TEXT_CHANGED срабатывает раньше.
Два последних состояния хранится именно потому, что в момент ввода срабатывают оба события, причём TEXT_CHANGED срабатывает раньше.
function InitEditBoxAnalyzer()
local states = {"", ""}
local cheatsTable = {
"warpten",
"whosyourdaddy",
"keysersoze",
"leafittome",
"greedisgood",
"pointbreak",
"thereisnospoon",
"somebodysetupusthebomb",
"allyourbasearebelongtous",
"whoisjohngalt",
"sharpandshiny",
"iseedeadpeople"
}
local textChangedTrigger = CreateTrigger()
local textEnterTrigger = CreateTrigger()
local function IfEditBoxContentEntered()
for i = 1, #cheatsTable do
if string.find(string.lower(states[2]), cheatsTable[i]) then
CustomDefeatBJ(GetLocalPlayer(), "Good luck next time!") --Сюда можно добавить любую реакцию на ввод чита
end
end
end
local function IfEditBoxContentChanged()
states[2] = states[1]
states[1] = BlzGetTriggerFrameText()
end
local t = CreateTimer()
TimerStart(t, 0.10, false, function()
local frameGameUI = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
local frameInputBox = BlzFrameGetChild(frameGameUI, 11)
local frameEditBox = BlzFrameGetChild(frameInputBox, 1)
BlzTriggerRegisterFrameEvent(textChangedTrigger, frameEditBox, FRAMEEVENT_EDITBOX_TEXT_CHANGED)
BlzTriggerRegisterFrameEvent(textEnterTrigger, frameEditBox, FRAMEEVENT_EDITBOX_ENTER)
TriggerAddCondition(textChangedTrigger, Condition(IfEditBoxContentChanged))
TriggerAddCondition(textEnterTrigger, Condition(IfEditBoxContentEntered))
DestroyTimer(t)
end)
end
Ред. Makeba