mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-05-09 23:39:21 +02:00
223 lines
5.8 KiB
Lua
223 lines
5.8 KiB
Lua
local panelName = "alarms"
|
|
local ui = setupUI([[
|
|
Panel
|
|
height: 19
|
|
|
|
BotSwitch
|
|
id: title
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
text-align: center
|
|
width: 130
|
|
!text: tr('Alarms')
|
|
|
|
Button
|
|
id: alerts
|
|
anchors.top: prev.top
|
|
anchors.left: prev.right
|
|
anchors.right: parent.right
|
|
margin-left: 3
|
|
height: 17
|
|
text: Edit
|
|
|
|
]])
|
|
ui:setId(panelName)
|
|
|
|
if not storage[panelName] then
|
|
storage[panelName] = {}
|
|
end
|
|
|
|
local config = storage[panelName]
|
|
|
|
ui.title:setOn(config.enabled)
|
|
ui.title.onClick = function(widget)
|
|
config.enabled = not config.enabled
|
|
widget:setOn(config.enabled)
|
|
end
|
|
|
|
local window = UI.createWindow("AlarmsWindow")
|
|
window:hide()
|
|
|
|
ui.alerts.onClick = function()
|
|
window:show()
|
|
window:raise()
|
|
window:focus()
|
|
end
|
|
|
|
local widgets =
|
|
{
|
|
"AlarmCheckBox",
|
|
"AlarmCheckBoxAndSpinBox",
|
|
"AlarmCheckBoxAndTextEdit"
|
|
}
|
|
|
|
local parents =
|
|
{
|
|
window.list,
|
|
window.settingsList
|
|
}
|
|
|
|
|
|
-- type
|
|
addAlarm = function(id, title, defaultValue, alarmType, parent, tooltip)
|
|
local widget = UI.createWidget(widgets[alarmType], parents[parent])
|
|
widget:setId(id)
|
|
|
|
if type(config[id]) ~= 'table' then
|
|
config[id] = {}
|
|
end
|
|
|
|
widget.tick:setText(title)
|
|
widget.tick:setChecked(config[id].enabled)
|
|
widget.tick:setTooltip(tooltip)
|
|
widget.tick.onClick = function()
|
|
config[id].enabled = not config[id].enabled
|
|
widget.tick:setChecked(config[id].enabled)
|
|
end
|
|
|
|
if alarmType > 1 and type(config[id].value) == 'nil' then
|
|
config[id].value = defaultValue
|
|
end
|
|
|
|
if alarmType == 2 then
|
|
widget.value:setValue(config[id].value)
|
|
widget.value.onValueChange = function(widget, value)
|
|
config[id].value = value
|
|
end
|
|
elseif alarmType == 3 then
|
|
widget.text:setText(config[id].value)
|
|
widget.text.onTextChange = function(widget, newText)
|
|
config[id].value = newText
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
-- settings
|
|
addAlarm("ignoreFriends", "Ignore Friends", true, 1, 2)
|
|
addAlarm("flashClient", "Flash Client", true, 1, 2)
|
|
|
|
-- alarm list
|
|
addAlarm("damageTaken", "Damage Taken", false, 1, 1)
|
|
addAlarm("lowHealth", "Low Health", 20, 2, 1)
|
|
addAlarm("lowMana", "Low Mana", 20, 2, 1)
|
|
addAlarm("playerAttack", "Player Attack", false, 1, 1)
|
|
|
|
UI.Separator(window.list)
|
|
|
|
addAlarm("privateMsg", "Private Message", false, 1, 1)
|
|
addAlarm("defaultMsg", "Default Message", false, 1, 1)
|
|
addAlarm("customMessage", "Custom Message:", "", 3, 1, "You can add text, that if found in any incoming message will trigger alert.\n You can add many, just separate them by comma.")
|
|
|
|
UI.Separator(window.list)
|
|
|
|
addAlarm("creatureDetected", "Creature Detected", false, 1, 1)
|
|
addAlarm("playerDetected", "Player Detected", false, 1, 1)
|
|
addAlarm("creatureName", "Creature Name:", "", 3, 1, "You can add a name or part of it, that if found in any visible creature name will trigger alert.\nYou can add many, just separate them by comma.")
|
|
|
|
|
|
local lastCall = now
|
|
local function alarm(file, windowText)
|
|
if now - lastCall < 2000 then return end -- 2s delay
|
|
lastCall = now
|
|
|
|
if not g_resources.fileExists(file) then
|
|
file = "/sounds/alarm.ogg"
|
|
lastCall = now + 4000 -- alarm.ogg length is 6s
|
|
end
|
|
|
|
|
|
if modules.game_bot.g_app.getOs() == "windows" and config.flashClient.enabled then
|
|
g_window.flash()
|
|
end
|
|
g_window.setTitle(player:getName() .. " - " .. windowText)
|
|
playSound(file)
|
|
end
|
|
|
|
-- damage taken & custom message
|
|
onTextMessage(function(mode, text)
|
|
if not config.enabled then return end
|
|
if mode == 22 and config.damageTaken.enabled then
|
|
return alarm('/sounds/magnum.ogg', "Damage Received!")
|
|
end
|
|
|
|
if config.customMessage.enabled then
|
|
local alertText = config.customMessage.value
|
|
if alertText:len() > 0 then
|
|
text = text:lower()
|
|
local parts = string.split(alertText, ",")
|
|
|
|
for i=1,#parts do
|
|
local part = parts[i]
|
|
part = part:trim()
|
|
part = part:lower()
|
|
|
|
if text:find(part) then
|
|
return alarm('/sounds/magnum.ogg', "Special Message!")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- default & private message
|
|
onTalk(function(name, level, mode, text, channelId, pos)
|
|
if not config.enabled then return end
|
|
if name == player:getName() then return end -- ignore self messages
|
|
if config.ignoreFriends.enabled and isFriend(name) then return end -- ignore friends if enabled
|
|
|
|
if mode == 1 and config.defaultMsg.enabled then
|
|
return alarm("/sounds/magnum.ogg", "Default Message!")
|
|
end
|
|
|
|
if mode == 4 and config.privateMsg.enabled then
|
|
return alarm("/sounds/Private_Message.ogg", "Private Message!")
|
|
end
|
|
end)
|
|
|
|
-- health & mana
|
|
macro(100, function()
|
|
if not config.enabled then return end
|
|
if config.lowHealth.enabled then
|
|
if hppercent() < config.lowHealth.value then
|
|
return alarm("/sounds/Low_Health.ogg", "Low Health!")
|
|
end
|
|
end
|
|
|
|
if config.lowMana.enabled then
|
|
if hppercent() < config.lowMana.value then
|
|
return alarm("/sounds/Low_Mana.ogg", "Low Mana!")
|
|
end
|
|
end
|
|
|
|
for i, spec in ipairs(getSpectators()) do
|
|
if not spec:isLocalPlayer() and not (config.ignoreFriends.enabled and isFriend(spec)) then
|
|
|
|
if config.creatureDetected.enabled then
|
|
return alarm("/sounds/magnum.ogg", "Creature Detected!")
|
|
end
|
|
|
|
if spec:isPlayer() then
|
|
if spec:isTimedSquareVisible() and config.playerAttack.enabled then
|
|
return alarm("/sounds/Player_Attack.ogg", "Player Attack!")
|
|
end
|
|
if config.playerDetected.enabled then
|
|
return alarm("/sounds/Player_Detected.ogg", "Player Detected!")
|
|
end
|
|
end
|
|
|
|
if config.creatureName.enabled then
|
|
local name = spec:getName():lower()
|
|
local fragments = string.split(config.creatureName.value, ",")
|
|
|
|
for i=1,#fragments do
|
|
local frag = fragments[i]:trim():lower()
|
|
|
|
if name:lower():find(frag) then
|
|
return alarm("/sounds/alarm.ogg", "Special Creature Detected!")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end) |