You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WinkleWinkle-TriplePack/WinkleWinkle_Extender_GUI_2...

565 lines
15 KiB

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE muclient>
<muclient>
<plugin
name="WinkleWinkle_Extender_GUI_2_8"
author="Multiple"
id="3f498d929793c12cb70f5999"
language="Lua"
purpose="UI Gui for Extender"
date_written="2011-08-29 15:35:02"
requires="4.76"
version="2.8"
save_state="y"
>
</plugin>
<aliases>
<alias
name="ali_reset_gui"
match="^xset reset gui$"
regexp="y"
enabled="y"
sequence="100"
script="reset_gui"
>
</alias>
</aliases>
<triggers>
<trigger
name="trg_cp_complete"
match="CONGRATULATIONS! You have completed your campaign."
enabled="y"
sequence="100"
script="do_trg_cp_complete"
>
</trigger>
</triggers>
<!-- v2 -->
<!-- GQ triggers -->
<!-- set enabled="y" -->
<triggers>
<trigger match="^You still have to kill (?<qty>[0-9]) \* (?<mob>[^\(]+) \((?<where>.+?)(?<isdead> - Dead)?\)$"
name="trg_gq_line"
enabled="y"
regexp="y"
sequence="10"
script="do_trg_gq_line"
>
</trigger>
<trigger match="^(?!You still have to kill).*$"
name="trg_gq_line_end"
enabled="n"
regexp="y"
sequence="10"
script="do_trg_gq_line_end"
>
</trigger>
</triggers>
<script>
<![CDATA[
require "serialize"
require "tprint"
require "movewindow"
require "mw"
local cpList = {}
local win_height = 300
local min_height = 45
local max_height = 300
local win_width = 350
local win_state = GetVariable("WinState") or "max"
local win_init = false
local hotspots = {}
local itemHotspots = {}
local win = "extender_gui_" .. GetPluginID () -- get a unique name, ensure not empty if outside plugin
local z_order_plugin = "462b665ecb569efbf261422f"
local pos_x = GetVariable("WinPosX") or 0
local pos_y = GetVariable("WinPosY") or 0
local offset = 30
local line_spacing = 15
local USER_qq_report_channel = "gt" -- group tell
function create_win()
if (win_init == false) then
win_init = true
WindowCreate (win, 0, 0, win_width, win_height, miniwin.pos_center_all, 0, ColourNameToRGB("black")) -- create window
-- move the window to the new location
WindowPosition(win, pos_x, pos_y,
miniwin.pos_stretch_to_view,
miniwin.create_absolute_location)
WindowShow(win, true) -- show it
if (win_state == "min") then
mouseup(0, "hsMinimize")
end
WindowFont(win, "button", "Lucida Console", 8, true, false, false, false) -- define font
WindowFont(win, "font", "Lucida Console", 8, false, false, false, false) -- define font
if (IsPluginInstalled(z_order_plugin) and GetPluginInfo(z_order_plugin, 17)) then
CallPlugin(z_order_plugin, "registerMiniwindow", win)
end
draw_window()
end
end
function draw_window()
-- clear the window
WindowRectOp (win, miniwin.rect_fill, 0, 0, 0, 0, ColourNameToRGB("Black"))
-- border
WindowRectOp (win, 1, 0, 0, 0, 0, ColourNameToRGB("Silver"), 15)
WindowRectOp (win, 1, 1, 1, -1, -1, 0x777777, 15)
-- draw the resize widget bottom right corner.
local draw_resize = 1
if (draw_resize == 1) then
WindowLine(win, win_width-3, win_height-2, win_width-2, win_height-3, 0xffffff, 0, 2)
WindowLine(win, win_width-4, win_height-2, win_width-2, win_height-4, 0x696969, 0, 1)
WindowLine(win, win_width-6, win_height-2, win_width-2, win_height-6, 0xffffff, 0, 2)
WindowLine(win, win_width-7, win_height-2, win_width-2, win_height-7, 0x696969, 0, 1)
WindowLine(win, win_width-9, win_height-2, win_width-2, win_height-9, 0xffffff, 0, 2)
WindowLine(win, win_width-10, win_height-2, win_width-2, win_height-10, 0x696969, 0, 1)
WindowLine(win, win_width-12, win_height-2, win_width-2, win_height-12, 0xffffff, 0, 2)
WindowLine(win, win_width-13, win_height-2, win_width-2, win_height-13, 0x696969, 0, 1)
end
-- drag bar --------------------------
WindowRectOp (win, miniwin.rect_draw_edge, 0, 0, 0, 15 - win_height,
miniwin.rect_edge_raised,
miniwin.rect_edge_at_all +
miniwin.rect_option_fill_middle) -- raised, filled
WindowText (win, "button",
"Search & Destroy GUI", -- text
2, 2, 0, 15 - win_height,
ColourNameToRGB ("Black"), -- colour
false)
if (hotspots["hsDrag1"] == nil) then
hotspots["hsDrag1"] = WindowAddHotspot(win,
"hsDrag1", -- HS id
0, 0, -80, 15 - win_height, -- rectangle
"mouseover",
"cancelmouseover",
"mousedown",
"cancelmousedown",
"mouseup",
"Drag to move", -- tooltip text
miniwin.cursor_both_arrow, 0) -- 4-way arrows
WindowDragHandler(win, "hsDrag1", "dragmove", "dragrelease", 0)
end
-- system buttons --------------------------
draw_button(win_width - 15, 0, 15, 15, "^", "hsMaximize", "Maximize Window")
draw_button(win_width - 30, 0, 15, 15, "_", "hsMinimize", "Minimize Window")
draw_button(win_width - 45, 0, 15, 15, "B", "hsBack", "send window to the Back")
draw_button(win_width - 60, 0, 15, 15, "f", "hsFront", "bring window to the Front")
draw_button(win_width - 80, 0, 15, 15, "?", "hsHelp", "show ww help")
-- go button --------------------------
draw_button(5, 20, 35, 20, "go", "hsGo", "Go to Room 1", 10)
-- quickscan button --------------------------
draw_button(40, 20, 15, 20, "?", "hsQS", "Quick-Scan for your hunted mob", 2)
-- next button --------------------------
draw_button(55, 20, 35, 20, "nx", "hsNext", "Go to Next Room", 10)
-- kill button --------------------------
draw_button(95, 20, 30, 20, "ak", "hsKill", "Auto-Kill last searched mob")
-- refresh button --------------------------
draw_button(180, 20, 35, 20, "<*>", "hsRefresh", "'Smart' Refresh Listing")
-- hunt-trick abort button --------------------------
draw_button(240, 20, 30, 20, "hta", "hsHTA", "Abort hunt-trick", 2)
-- clear contents button --------------------------
draw_button(310, 20, 35, 20, "Clr", "hsClear", "Clear Window")
if (win_state == "min") then
return
end
end
function draw_button(left, top, width, height, text, hsName, hint, textOffset)
if (textOffset == nil) then
textOffset = 5
end
WindowRectOp (win, miniwin.rect_draw_edge,
left, top, (left + width) - win_width, (top + height) - win_height,
miniwin.rect_edge_raised,
miniwin.rect_edge_at_all +
miniwin.rect_option_fill_middle) -- raised, filled
WindowText(win, "button",
text, -- button text
left + textOffset, top + 3, (left + width) - win_width, (top + height) - win_height, -- rectangle
ColourNameToRGB ("darkgreen"), -- colour
false) -- not Unicode
if (hotspots[hsName] == nil) then
hotspots[hsName] = WindowAddHotspot(win,
hsName, -- HS id
left, top, (left + width) - win_width, (top + height) - win_height, -- rectangle
"mouseover",
"cancelmouseover",
"mousedown",
"cancelmousedown",
"mouseup",
"Click to " .. (hint or text), -- tooltip text
miniwin.cursor_hand, 0) -- 4-way arrows
end
end
function clear_hotspots()
--clear cp items
for key, value in ipairs(itemHotspots) do
--Note(key, value)
WindowDeleteHotspot (win, value);
end
itemHotspots = {}
end
function write_items(mode)
--Note(current_mode)
--clear cp items
clear_hotspots()
if (win_state == "min") then
return
end
if (current_mode() == "cp") then
write_list_items(cpList)
end
end
function write_list_items(list)
-- draw items
local index = 0
for key, value in ipairs(list) do
index = index + 1
local qty = ""
if (value.qty > 1) then
qty = string.format("%s * ", value.qty)
end
local mobText = value.mob
local deadFlag = false
if (value.isDead ~= nil and value.isDead ~= "") then
mobText = mobText .. " [Dead]"
deadFlag = true
end
local place
local color
if (value.type == "area") then
place = string.format("(%s)", value.areaId)
if (deadFlag == false) then
color = "white"
else
color = "DimGray"
end
elseif (value.type == "room") then
place = string.format("'%s' (%s) [%s-%s]", value.roomName, value.areaId, value.min, value.max)
if (deadFlag == false) then
color = "LightBlue"
else
color = "DimGray"
end
else -- unknown
place = string.format("'%s' is Unknown", value.roomName, value.areaId)
if (deadFlag == false) then
color = "Crimson"
else
color = "DarkRed"
end
end
local displayText = string.format("%s) %s%s - %s", index, qty, mobText, place)
--Note(displayText)
width = WindowTextWidth (win, "font", displayText) -- width of text
height = WindowFontInfo (win, "font", 1) -- height of the font
ascent = WindowFontInfo (win, "font", 2) -- ascent (amount above the baseline)
descent = WindowFontInfo (win, "font", 3) -- descent (amount below the baseline)
leading = WindowFontInfo (win, "font", 4) -- leading (space above the highest letter)
--Note(string.format("w:%s h:%s asc:%s desc:%s lead:%s", width, height, ascent, descent, leading))
WindowText (win, "font",
displayText, -- text
5, (tonumber(key) * line_spacing) + offset, 0, 0, -- rectangle
ColourNameToRGB (color),
false) -- not Unicode
local hsLength = (5 + width) - win_width
if (hsLength > 0) then hsLength = 0 end
local hsHeight = ((tonumber(key) * line_spacing) + 11 + offset) - win_height
if (hsHeight > 0) then hsHeight = 0 end
--Note(string.format("%s %s %s %s", 5, (tonumber(key) * line_spacing) + offset, hsLength, hsHeight))
local eventHandler
if (current_mode() == "cp") then
eventHandler = "mouseup_cp"
end
itemHotspots[#itemHotspots+1] = key
WindowAddHotspot(win,
key, -- HS id
5, (tonumber(key) * line_spacing) + offset, hsLength, hsHeight, -- rectangle
"mouseover",
"cancelmouseover",
"mousedown",
"cancelmousedown",
eventHandler,
"Click to perform CP Item", -- tooltip text
miniwin.cursor_hand, 0) -- hand cursor
end
end
function OnPluginBroadcast (msg, id, name, text)
--Note(msg, text)
-- Mapper Extender Plugin
if (id == "b6eae87ccedd84f510b74715") then -- Mapper Extender
if (msg == 669) then
-- load serialize.save_simple data
luastmt = "obj = " .. text
assert (loadstring (luastmt or "")) ()
cpList = obj
draw_window()
write_items("cp")
Redraw()
end
elseif (id == "e50b1d08a0cfc0ee9c442001") then -- S&D
end
end
function current_mode()
if (#cpList > 0) then
return "cp"
else
return "gq"
end
end
function mouseup(flags, hotspot_id)
--Note(hotspot_id)
if (hotspot_id == "hsGo") then
Execute("go")
Execute("qs")
elseif (hotspot_id == "hsNext") then
Execute("nx")
Execute("qs")
elseif (hotspot_id == "hsQS") then
Execute("qs")
elseif (hotspot_id == "hsKill") then
Execute("autokill")
elseif (hotspot_id == "hsHTA") then
Execute("ht a")
elseif (hotspot_id == "hsRefresh") then
if (current_mode() == "cp") then
Execute("cp c")
end
mouseup(0, "hsMaximize")
elseif (hotspot_id == "hsClear") then
cpList = {}
draw_window()
write_items()
Redraw()
elseif (hotspot_id == "hsMinimize") then
win_state = "min"
win_height = min_height
WindowResize(win, win_width, win_height, ColourNameToRGB("black"))
draw_window()
write_items()
Redraw()
elseif (hotspot_id == "hsMaximize") then
win_state = "max"
win_height = max_height
WindowResize(win, win_width, win_height, ColourNameToRGB("black"))
draw_window()
write_items()
Redraw()
elseif (hotspot_id == "hsFront") then
if (IsPluginInstalled(z_order_plugin) and GetPluginInfo(z_order_plugin, 17)) then
CallPlugin(z_order_plugin, "boostMe", win)
end
elseif (hotspot_id == "hsBack") then
if (IsPluginInstalled(z_order_plugin) and GetPluginInfo(z_order_plugin, 17)) then
CallPlugin(z_order_plugin, "dropMe", win)
end
elseif (hotspot_id == "hsHelp") then
Execute("ww help")
end
end
function mouseup_cp(flags, hotspot_id)
if (tonumber(hotspot_id) ~= nil) then
Execute("xcp " .. hotspot_id)
end
end
function do_trg_cp_complete(name, line, wildcards)
if (current_mode() == "cp") then
mouseup(0, "hsClear")
end
end
------------ v2 -- GQ Items --------------
local do_trg_gq_line_index = 0
function do_trg_gq_line(name, line, wildcards)
--Note("Detected gq")
cpList = {}
--clear cp items
clear_hotspots()
EnableTrigger("trg_gq_line_end", true)
if (do_trg_gq_line_index == 0) then
draw_window()
end
do_trg_gq_line_index = do_trg_gq_line_index + 1
local qty = ""
if (tonumber(wildcards.qty) > 1) then
qty = wildcards.qty .. " * "
end
local displayText = string.format("%s) %s%s %s - %s", do_trg_gq_line_index, qty, wildcards.mob, wildcards.isdead, wildcards.where)
--Note(displayText)
width = WindowTextWidth (win, "font", displayText) -- width of text
height = WindowFontInfo (win, "font", 1) -- height of the font
ascent = WindowFontInfo (win, "font", 2) -- ascent (amount above the baseline)
descent = WindowFontInfo (win, "font", 3) -- descent (amount below the baseline)
leading = WindowFontInfo (win, "font", 4) -- leading (space above the highest letter)
--Note(string.format("w:%s h:%s asc:%s desc:%s lead:%s", width, height, ascent, descent, leading))
WindowText (win, "font",
displayText, -- text
5, (tonumber(do_trg_gq_line_index) * line_spacing) + offset, 0, 0, -- rectangle
ColourNameToRGB ("snow"),
false) -- not Unicode
end
function do_trg_gq_line_end(name, line, wildcards)
--Note("gq end detected")
EnableTrigger("trg_gq_line_end", false)
do_trg_gq_line_index = 0
end
-- \\\ WindowPosition("extender_gui_3f498d929793c12cb70f5999", 50, 50, miniwin.pos_stretch_to_view, miniwin.create_absolute_location);CallPlugin("462b665ecb569efbf261422f", "boostMe", "extender_gui_3f498d929793c12cb70f5999")
function reset_gui(name, line, wildcards)
-- move the window to the new location
WindowPosition(win, 50, 50,
miniwin.pos_stretch_to_view,
miniwin.create_absolute_location)
if (IsPluginInstalled(z_order_plugin) and GetPluginInfo(z_order_plugin, 17)) then
CallPlugin(z_order_plugin, "boostMe", win)
end
end
function dragmove(flags, hotspot_id)
pos_x, pos_y = WindowInfo (win, 17) - (win_width / 2),
WindowInfo (win, 18) - (win_height / 2)
--print ("moved to position", pos_x, pos_y)
-- move the window to the new location
WindowPosition(win, pos_x, pos_y,
miniwin.pos_stretch_to_view,
miniwin.create_absolute_location)
end -- dragmove
function dragrelease(flags, hotspot_id)
-- print ("mouse drag release for " .. hotspot_id)
-- print ("released at position", WindowInfo (win, 17), WindowInfo (win, 18))
end -- dragrelease
function OnPluginClose ()
WindowShow(win, false) -- hide window, refresh screen
end
function OnPluginSaveState()
SetVariable("WinPosX", pos_x)
SetVariable("WinPosY", pos_y)
SetVariable("WinState", win_state)
end
-- run it all
create_win()
]]>
</script>
<![CDATA[
<!--
BUG : Show UNKNOWNS [WW]
-->
]]>
</muclient>