Mercurial > wow > skeenmelee
changeset 0:6e44a9e52393 v1.0.6
initial update
| author | Emil Madsen <skeen@cs.au.dk> |
|---|---|
| date | Sun, 26 Jun 2011 17:20:50 +0200 |
| parents | |
| children | 11b96dec3baa |
| files | SkeenMelee.lua SkeenMelee.toc SkeenMelee.xml |
| diffstat | 3 files changed, 247 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SkeenMelee.lua Sun Jun 26 17:20:50 2011 +0200 @@ -0,0 +1,224 @@ +-- +-- SkeenMelee +-- + +-- Local table (used to store functions, ect) +local SkeenMelee = {} + +SkeenMelee.eventHandler = CreateFrame("Frame") +SkeenMelee.eventHandler:SetScript("OnEvent", function(this, event, ...) SkeenMelee.events[event](...) end) +--Events to listen to +SkeenMelee.eventHandler:RegisterEvent("PLAYER_TARGET_CHANGED") +SkeenMelee.eventHandler:RegisterEvent("ADDON_LOADED") +--EventHandler Functions +--by our eventHandler frame. +SkeenMelee.events = {} +--Player logged in +function SkeenMelee.events.ADDON_LOADED(addon) + if (addon ~= "SkeenMelee") then + return + end + + SkeenMelee:PrepareDatabase() + SkeenMelee:CreateGUI() + SkeenMelee:UpdateDragability() + SkeenMelee:CreateOptionFrame() +end + +-- Prepare the Normal database (settings database) +-- This is the maintained database, and isn't wiped on each login, like the active one is +function SkeenMelee:PrepareDatabase() + + -- If there doesn't exist a database currently + if not SkeenMeleeDatabase then + SkeenMeleeDatabase = {} -- fresh start + SkeenMeleeDatabase.update_interval = 0.1 -- Fill it with the default value of 0.1 seconds per interval + SkeenMeleeDatabase.scale = 1 --100% size + SkeenMeleeDatabase.locked = false --Not locked by default + SkeenMeleeDatabase.x = 100 --TODO: Make some better values I guess? + SkeenMeleeDatabase.y = 100 --TODO: Make some better values I guess? + end +end + +-- Functions Section +function SkeenMelee_OnUpdate(self, elapsed) + self.TimeSinceLastUpdate = self.TimeSinceLastUpdate + elapsed; + + if (self.TimeSinceLastUpdate > SkeenMeleeDatabase.update_interval) then + SkeenMelee:Update() + self.TimeSinceLastUpdate = 0; + end +end + +function SkeenMelee.events.PLAYER_TARGET_CHANGED(...) + SkeenMelee:Update() +end + +function SkeenMelee:Update() + local is_in_melee_range = nil + local unit = "target" + -- Test class and find a spell accordingly + local _, class = UnitClass("player"); + local meleespell + + -- Choose a melee spell for each class (if any) + if (class == "DEATH KNIGHT") then + meleespell = "Blood Strike" + elseif (class == "DRUID") then + meleespell = "Claw" + elseif (class == "HUNTER") then + meleespell = "Raptor Strike" + elseif (class == "PALADIN") then + meleespell = "Crusader Strike" + elseif (class == "ROGUE") then + meleespell = "Sinister Strike" + elseif (class == "SHAMAN") then + meleespell = "Primal Strike" + elseif (class == "WARRIOR") then + meleespell = "Strike" + else --mage, priest, warlock + SkeenMelee:HideFrame() + end + + if UnitExists(unit) and UnitIsVisible(unit) then + is_in_melee_range = IsSpellInRange(meleespell, unit) + end + if (is_in_melee_range==1) then --Is in melee range + SkeenMelee.infoString:SetText("Melee") + SkeenMelee:ShowFrame() + elseif (is_in_melee_range==0) then --Is not in melee range + SkeenMelee.infoString:SetText("|cffff0000NOT MELEE|r") + SkeenMelee:ShowFrame() + else --Not even a melee target + SkeenMelee:HideFrame() + end +end + +function SkeenMelee:CreateGUI() + + local displayFrame = CreateFrame("Frame", "SkeenMeleeDisplayFrame", UIParent) + displayFrame:SetFrameStrata("BACKGROUND") + displayFrame:SetWidth(100) + displayFrame:SetHeight(30) + displayFrame:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32,}) + displayFrame:SetBackdropColor(0, 0, 0, .4) + displayFrame:EnableMouse(true) + displayFrame:SetMovable(true) + displayFrame:SetClampedToScreen(true) + displayFrame:SetScript("OnMouseDown", function(self) self:StartMoving() end) + displayFrame:SetScript("OnMouseUp", function(self) self:StopMovingOrSizing() end) + displayFrame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end) + displayFrame:SetPoint("CENTER",-200,-200) + + local infoString = displayFrame:CreateFontString("SkeenMelee_infoString","OVERLAY","GameFontNormal") + infoString:SetText("Unknown") + infoString:SetPoint("CENTER", 0, 0) + + SkeenMelee.infoString = infoString + SkeenMelee.displayFrame = displayFrame + + displayFrame:SetScale(SkeenMeleeDatabase.scale) +end + +-- The optionsframe in interface +function SkeenMelee:CreateOptionFrame() + + local panel = CreateFrame("FRAME", "SkeenMeleeOptions", UIParent); + panel.name = "SkeenMelee"; + + local fstring1 = panel:CreateFontString("SkeenMeleeOptions_string1","OVERLAY","GameFontNormal") + fstring1:SetText("Lock") + fstring1:SetPoint("TOPLEFT", 10, -10) + + local checkbox1 = CreateFrame("CheckButton", "$parent_cb1", panel, "OptionsCheckButtonTemplate") + checkbox1:SetWidth(18) + checkbox1:SetHeight(18) + checkbox1:SetScript("OnClick", function() SkeenMelee:ToggleLocked() end) + checkbox1:SetPoint("TOPRIGHT", -10, -10) + checkbox1:SetChecked(SkeenMelee:GetLocked()) + + local fstring2 = panel:CreateFontString("SkeenMeleeOptions_string2","OVERLAY","GameFontNormal") + fstring2:SetText("GUI Scale") + fstring2:SetPoint("TOPLEFT", 10, -40) + + local slider2 = CreateFrame("Slider", "$parent_sl2", panel, "OptionsSliderTemplate") + slider2:SetMinMaxValues(.5, 1.5) + slider2:SetValue(SkeenMelee:GetScale()) + slider2:SetValueStep(.05) + slider2:SetScript("OnValueChanged", function(self) SkeenMelee:SetScale(self:GetValue()); getglobal(self:GetName() .. "Text"):SetText(string.format("%.0f%%", self:GetValue()*100)) end) + getglobal(slider2:GetName() .. "Low"):SetText("50%") + getglobal(slider2:GetName() .. "High"):SetText("150%") + getglobal(slider2:GetName() .. "Text"):SetText(string.format("%.0f%%", SkeenMelee:GetScale()*100)) + slider2:SetPoint("TOPRIGHT", -10, -40) + + local fstring3 = panel:CreateFontString("SkeenMeleeOptions_string3","OVERLAY","GameFontNormal") + fstring3:SetText("Update Interval (sec)") + fstring3:SetPoint("TOPLEFT", 10, -70) + + local slider3 = CreateFrame("Slider", "$parent_sl3", panel, "OptionsSliderTemplate") + slider3:SetMinMaxValues(0, 1) + slider3:SetValue(SkeenMelee:GetUpdateInterval()) + slider3:SetValueStep(.1) + slider3:SetScript("OnValueChanged", function(self) SkeenMelee:SetUpdateInterval(self:GetValue()); getglobal(self:GetName() .. "Text"):SetText(string.format("%.1f", self:GetValue())) end) + getglobal(slider3:GetName() .. "Low"):SetText("0") + getglobal(slider3:GetName() .. "High"):SetText("1") + getglobal(slider3:GetName() .. "Text"):SetText(string.format("%.1f", SkeenMelee:GetUpdateInterval())) + slider3:SetPoint("TOPRIGHT", -10, -70) + + SkeenMelee.options = panel + panel.parent = "Skeen" + + InterfaceOptions_AddCategory(panel); +end + +function SkeenMelee:GetLocked() + return SkeenMeleeDatabase.locked +end + +function SkeenMelee:ToggleLocked() + SkeenMeleeDatabase.locked = not SkeenMeleeDatabase.locked + SkeenMelee:UpdateDragability() +end + +function SkeenMelee:GetScale() + return SkeenMeleeDatabase.scale +end + +function SkeenMelee:SetScale(num) + SkeenMeleeDatabase.scale = num + SkeenMelee.displayFrame:SetScale(SkeenMeleeDatabase.scale) +end + +function SkeenMelee:GetUpdateInterval() + return SkeenMeleeDatabase.update_interval +end + +function SkeenMelee:SetUpdateInterval(num) + SkeenMeleeDatabase.update_interval = num +end + +function SkeenMelee:UpdateDragability() + if SkeenMeleeDatabase.locked then + SkeenMelee.displayFrame:SetScript("OnMouseDown", nil) + SkeenMelee.displayFrame:SetScript("OnMouseUp", nil) + SkeenMelee.displayFrame:SetScript("OnDragStop", nil) + SkeenMelee.displayFrame:SetBackdropColor(0, 0, 0, 0) + SkeenMelee.displayFrame:EnableMouse(false) + else + SkeenMelee.displayFrame:SetScript("OnMouseDown", function(self) self:StartMoving() end) + SkeenMelee.displayFrame:SetScript("OnMouseUp", function(self) self:StopMovingOrSizing() end) + SkeenMelee.displayFrame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end) + SkeenMelee.displayFrame:SetBackdropColor(0, 0, 0, .4) + SkeenMelee.displayFrame:EnableMouse(true) + end +end + +function SkeenMelee:HideFrame() + SkeenMelee.displayFrame:Hide() + SkeenMelee.infoString:Hide() +end + +function SkeenMelee:ShowFrame() + SkeenMelee.displayFrame:Show() + SkeenMelee.infoString:Show() +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SkeenMelee.toc Sun Jun 26 17:20:50 2011 +0200 @@ -0,0 +1,11 @@ +## Title: |cffffd200Skeen|r|cff69ccf0Melee|r |cFF00FF001.0.6|r +## Version: 1.0.6 +## Author: Skeen +## Interface: 40000 +## SavedVariables: SkeenMeleeDatabase +## LoadOnDemand: 0 +## Notes: Melee range checker +## X-Child-Of: Skeen +## X-Part-Of: Skeen + +SkeenMelee.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SkeenMelee.xml Sun Jun 26 17:20:50 2011 +0200 @@ -0,0 +1,12 @@ +<Ui xmlns="http://www.blizzard.com/wow/ui/" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> + <Script file="SkeenMelee.lua"/> + <Frame name="SkeenMelee_Frame"> + <Scripts> + <OnLoad>self.TimeSinceLastUpdate = 0 </OnLoad> + <OnUpdate function="SkeenMelee_OnUpdate" /> + </Scripts> + </Frame> +</Ui> +
