Skip to content

Instantly share code, notes, and snippets.

@GrenderG
Last active October 31, 2018 00:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GrenderG/096cbf0b204e6cacf23141ed99406f21 to your computer and use it in GitHub Desktop.
Save GrenderG/096cbf0b204e6cacf23141ed99406f21 to your computer and use it in GitHub Desktop.
-- EzDismount : A quick and dirty dismounting mod, useful for PVP or herb/ore collecting
-- By Gaddur of the Eonar Server
-- Modified v2.01 by nathan
-- Added Turtle support by Grender (Rakkata) from Elysium
local EzDClass
local EzDPlayer
EzDismount_ver = "v2.04";
EzDismount_fullver = ("EzDismount " .. EzDismount_ver);
BINDING_HEADER_EZDISMOUNT = "EzDismount";
BINDING_NAME_EZDISMOUNT = "Dismount";
---------------------------------
-- Stuff to do when Mod is loaded
---------------------------------
function EzDismount_onload()
EzDClass = UnitClass("player");
EzDPlayer = (UnitName("player").." of "..GetCVar("realmName"))
EZDismount_DetPlayer:SetText(EzDPlayer.." Server");
--Create user table if it doesnt exist
if (EzDismount_Config == nil) then
EzDismount_Config = {};
end
if (EzDismount_Config[EzDPlayer] == nil) then
EzDismount_reset();
end
DEFAULT_CHAT_FRAME:AddMessage("## " .. EzDismount_fullver .. " Loaded ## Use /ezd or /ezd help", 0.0, 1.0, 0.0);
SlashCmdList["EZDISMOUNT"] = EzDismount_options;
SLASH_EZDISMOUNT1 = "/ezd";
SLASH_EZDISMOUNT2 = "/ezdismount";
-- Set Default Colors
EZDismount_ShamanTitle:SetTextColor(255,255,255,255);
EZDismount_DruidTitle:SetTextColor(255,255,255,255);
EZDismount_PriestTitle:SetTextColor(255,255,255,255);
EzDismount_Text_Status_VOFF:SetTextColor(255,0,0,255);
EzDismount_Text_Status_VON:SetTextColor(0,255,0,255);
EzDismount_Text_Shaman_VOFF:SetTextColor(255,0,0,255);
EzDismount_Text_Shaman_VON:SetTextColor(0,255,0,255);
EzDismount_Text_Druid_VOFF:SetTextColor(255,0,0,255);
EzDismount_Text_Druid_VON:SetTextColor(0,255,0,255);
EzDismount_Text_Moonkin_VOFF:SetTextColor(255,0,0,255);
EzDismount_Text_Moonkin_VON:SetTextColor(0,255,0,255);
EzDismount_Text_Shadowform_VOFF:SetTextColor(255,0,0,255);
EzDismount_Text_Shadowform_VON:SetTextColor(0,255,0,255);
EzDismount_Text_Stand_VOFF:SetTextColor(255,0,0,255);
EzDismount_Text_Stand_VON:SetTextColor(0,255,0,255);
EzDismount_Text_Auction_VOFF:SetTextColor(255,0,0,255);
EzDismount_Text_Auction_VON:SetTextColor(0,255,0,255);
EZDismount_DetPlayer:SetTextColor(255,255,255,255);
end
----------------------------------
-- Parse out option from / Command
----------------------------------
function EzDismount_options(msg)
-- Show Config Menu
if (msg == "") then
EzDismount_Toggle();
end
-- Dump Textures to chatwindow
if (string.lower(msg) == "debug") then
EzDismount_dumpbuff();
end
-- Reload UI
if (string.lower(msg) == "reload") then
ReloadUI();
end
-- Reset Settings
if (string.lower(msg) == "reset") then
EzDismount_reset();
end
-- Help
if (string.lower(msg) == "help") or (msg == "?") then
EzDismount_help();
end
end
------------------
-- Reset Variables
------------------
function EzDismount_reset()
EzDismount_Config[EzDPlayer] = {
["Dismount"] = "ON";
["Druid"] = "ON";
["Shadowform"] = "ON";
["Wolf"] = "ON";
["Moonkin"] = "ON";
["Stand"] = "ON";
["Auction"] = "ON";
}
end
----------------
-- Toggle Values
----------------
function EzDismount_ChgValue(msg)
local NewVal = ""
-- Auto-dismount toggle
if (string.lower(msg) == "on/off") then
if (EzDismount_Config[EzDPlayer]["Dismount"] == "ON") then
EzDismount_Config[EzDPlayer]["Dismount"] = "TAXI";
NewVal = "Y";
end
if ((EzDismount_Config[EzDPlayer]["Dismount"] == "TAXI") and (NewVal == "")) then
EzDismount_Config[EzDPlayer]["Dismount"] = "OFF";
NewVal = "Y";
end
if ((EzDismount_Config[EzDPlayer]["Dismount"] == "OFF") and (NewVal == "")) then
EzDismount_Config[EzDPlayer]["Dismount"] = "ON";
NewVal = "Y";
end
-- Auctioneer toggle
elseif (string.lower(msg) == "auction") then
if (EzDismount_Config[EzDPlayer]["Auction"] == "ON") then
EzDismount_Config[EzDPlayer]["Auction"] = "OFF";
else
EzDismount_Config[EzDPlayer]["Auction"] = "ON";
end
-- Stand toggle
elseif (string.lower(msg) == "stand") then
if (EzDismount_Config[EzDPlayer]["Stand"] == "ON") then
EzDismount_Config[EzDPlayer]["Stand"] = "OFF";
else
EzDismount_Config[EzDPlayer]["Stand"] = "ON";
end
-- Druid toggle
elseif (string.lower(msg) == "druid") then
if (EzDismount_Config[EzDPlayer]["Druid"] == "ON") then
EzDismount_Config[EzDPlayer]["Druid"] = "OFF";
else
EzDismount_Config[EzDPlayer]["Druid"] = "ON";
end
-- Shaman toggle
elseif (string.lower(msg) == "wolf") then
if (EzDismount_Config[EzDPlayer]["Wolf"] == "ON") then
EzDismount_Config[EzDPlayer]["Wolf"] = "OFF";
else
EzDismount_Config[EzDPlayer]["Wolf"] = "ON";
end
-- Moonkin toggle
elseif (string.lower(msg) == "moonkin") then
if (EzDismount_Config[EzDPlayer]["Moonkin"] == "ON") then
EzDismount_Config[EzDPlayer]["Moonkin"] = "OFF";
else
EzDismount_Config[EzDPlayer]["Moonkin"] = "ON";
end
-- Shadowform toggle
elseif (string.lower(msg) == "shadowform") then
if (EzDismount_Config[EzDPlayer]["Shadowform"] == "ON") then
EzDismount_Config[EzDPlayer]["Shadowform"] = "OFF";
else
EzDismount_Config[EzDPlayer]["Shadowform"] = "ON";
end
end
EzDismount_Refresh();
end
-------------------------------
-- Check UI_ERROR_MESSAGE Event
-------------------------------
function EzDismount_chkerror(arg1)
-- See if auto dismount is enabled
if (EzDismount_Config[EzDPlayer]["Dismount"] ~= "OFF") then
EzDismount_chkandgetdown("Dismount", EzDMountErr.Error, arg1, true);
if ( arg1 == "TAXI") then
EzDismount_getdown(true);
end;
end
-- Auctioneer Dismount enabled
if (EzDismount_Config[EzDPlayer]["Auction"] ~= "OFF") then
if ( arg1 == "AUCTION") then
EzDismount_getdown(true);
end
end
-- Stand up if you are trying to do something while sitting
if (EzDismount_Config[EzDPlayer]["Stand"] ~= "OFF") then
if ( arg1 == EzDSitErr) then
SitOrStand();
end
end
-- Check class specific things
if (EzDClass == "Druid") then
EzDismount_chkandgetdown("Druid", EzDShiftErr.Error, arg1);
EzDismount_chkandgetdown("Moonkin", EzDShiftErr.Error, arg1);
elseif (EzDClass == "Shaman") then
EzDismount_chkandgetdown("Wolf", EzDShiftErr.Error, arg1);
elseif (EzDClass == "Priest") then
EzDismount_chkandgetdown("Shadowform", EzDShiftErr.Error, arg1);
end
end
function EzDismount_chkandgetdown(chkType, errorTable, msg, mount)
-- See if chkType is enabled
if (EzDismount_Config[EzDPlayer][chkType] ~= "OFF") then
-- If not on Taxi
if ( not UnitOnTaxi("player") ) then
for _, value in pairs(errorTable) do
if ( msg == value) then
EzDismount_getdown(mount);
break;
end
end
end
end
end
-----------------------------------------
-- Look for Mount Buff Icon and cancel it
-----------------------------------------
function EzDismount_getdown(mount)
local currBuffTex;
local pallyhorse = "spell_nature_swiftness";
local regMount = "_mount_";
local bearform = "ability_racial_bearform";
local catform = "ability_druid_catform";
local travelform = "ability_druid_travelform";
local shadowform = "spell_shadow_shadowform";
local spiritwolf = "spell_nature_spiritwolf";
local moonkin = "spell_nature_forceofnature";
local aqmount = "_qirajicrystal_"
local aquaticform = "ability_druid_aquaticform";
local turtle = "ability_hunter_pet_turtle"
-- was this a dismount request or a shapeshift request?
if mount then
for i=0,15,1 do
currBuffTex = GetPlayerBuffTexture(i);
if (currBuffTex and (not EzD_exclude(i))) then
-- Mount (or level 40 pally horse) or Qiraji Mounts
if ((string.find(string.lower(currBuffTex), regMount) or string.find(string.lower(currBuffTex), pallyhorse)) or (string.find(string.lower(currBuffTex), aqmount)) or (string.find(string.lower(currBuffTex), turtle))) then
if ((EzDismount_Config[EzDPlayer]["Dismount"] == "ON") or (EzDismount_Config[EzDPlayer]["Dismount"] == "TAXI")) then
CancelPlayerBuff(i);
end
end
end
end
else
for i=0,15,1 do
currBuffTex = GetPlayerBuffTexture(i);
if (currBuffTex and (not EzD_exclude(i))) then
-- GhostWolf
if (string.find(string.lower(currBuffTex), spiritwolf)) then
if (EzDismount_Config[EzDPlayer]["Wolf"] == "ON") then
CancelPlayerBuff(i);
break;
end
-- Bear Form
elseif (string.find(string.lower(currBuffTex), bearform)) then
if (EzDismount_Config[EzDPlayer]["Druid"] == "ON") then
CancelPlayerBuff(i);
break;
end
-- Cat Form
elseif (string.find(string.lower(currBuffTex), catform)) then
if (EzDismount_Config[EzDPlayer]["Druid"] == "ON") then
CancelPlayerBuff(i);
break;
end
-- Travel Form
elseif (string.find(string.lower(currBuffTex), travelform)) then
if (EzDismount_Config[EzDPlayer]["Druid"] == "ON") then
CancelPlayerBuff(i);
break;
end
-- Aquatic Form
elseif (string.find(string.lower(currBuffTex), aquaticform)) then
if (EzDismount_Config[EzDPlayer]["Druid"] == "ON") then
CancelPlayerBuff(i);
break;
end
-- Moonkin Form
elseif (string.find(string.lower(currBuffTex), moonkin)) then
if (EzDismount_Config[EzDPlayer]["Moonkin"] == "ON") then
CancelPlayerBuff(i);
break;
end
-- Shadowform
elseif (string.find(string.lower(currBuffTex), shadowform)) then
if (EzDismount_Config[EzDPlayer]["Shadowform"] == "ON") then
CancelPlayerBuff(i);
break;
end
end
end
end
end
end
--------------------------------------
-- Exclude as mount based on buff name
--------------------------------------
function EzD_exclude(i)
local buffname;
local result = false;
EzDTooltip:SetOwner(UIParent, "ANCHOR_NONE");
EzDTooltip:ClearLines();
EzDTooltip:SetPlayerBuff(i);
buffname = EzDTooltipTextLeft1:GetText();
if ( buffname ~= nil ) then
for index=1, table.getn(EzDMountTable.Exclude), 1 do
if ( EzDMountTable.Exclude[index] == string.lower(buffname) ) then
result = true;
break;
end
end
end
return result
end
----------------------------------------------------
-- Dump current Buff icon texture names (Debug Code)
----------------------------------------------------
function EzDismount_dumpbuff()
local bufftext;
local buffname;
local debugmsg;
EzDTooltip:SetOwner(UIParent, "ANCHOR_NONE");
for i=0,15,1 do
EzDTooltip:ClearLines();
EzDTooltip:SetPlayerBuff(i);
buffname = EzDTooltipTextLeft1:GetText();
bufftext = GetPlayerBuffTexture(i);
if (bufftext ~= nil) then
debugmsg = ("(" .. i .. ") [" ..buffname.. "] "..bufftext);
DEFAULT_CHAT_FRAME:AddMessage(debugmsg, 0.0, 1.0, 0.0);
end
end
end
--------------------------------------------------------------
-- Look for Mount Buff Icon and cancel it (Alternate Function)
--------------------------------------------------------------
function EzD_getdown()
EzDismount_getdown(1);
end
------------------------
-- Cancel Buff by Name
------------------------
function EzD_drop(dropbuff)
local buffname;
if ( dropbuff ~= nil ) then
EzDTooltip:SetOwner(UIParent, "ANCHOR_NONE");
for i=0,15,1 do
EzDTooltip:ClearLines();
EzDTooltip:SetPlayerBuff(i);
buffname = EzDTooltipTextLeft1:GetText();
if (buffname ~= nil) then
if string.find(string.lower(buffname), string.lower(dropbuff)) then
CancelPlayerBuff(i);
break;
end
end
end
end
end
------------------------
-- Check if Buff exists
------------------------
function EzD_buffexist(findbuff)
local buffname;
local result = false;
if ( findbuff ~= nil ) then
EzDTooltip:SetOwner(UIParent, "ANCHOR_NONE");
for i=0,15,1 do
EzDTooltip:ClearLines();
EzDTooltip:SetPlayerBuff(i);
buffname = EzDTooltipTextLeft1:GetText();
if (buffname ~= nil) then
if string.find(string.lower(buffname), string.lower(findbuff)) then
result = true;
break;
end
end
end
end
return result;
end
-----------------------------------------
-- Toggles the showing/hiding of the Menu
-----------------------------------------
function EzDismount_Toggle()
if ( EzDismount_Menu:IsVisible() ) then
EzDismount_Menu:Hide();
else
EzDismount_Menu:Show();
end
end
--------------------
-- Refresh Screen
--------------------
function EzDismount_Refresh()
EzDismount_Text_Status_VOFF:SetText("");
EzDismount_Text_Status_VON:SetText("");
EzDismount_Text_Shaman_VOFF:SetText("");
EzDismount_Text_Shaman_VON:SetText("");
EzDismount_Text_Druid_VOFF:SetText("");
EzDismount_Text_Druid_VON:SetText("");
EzDismount_Text_Moonkin_VOFF:SetText("");
EzDismount_Text_Moonkin_VON:SetText("");
EzDismount_Text_Shadowform_VOFF:SetText("");
EzDismount_Text_Shadowform_VON:SetText("");
EzDismount_Text_Stand_VOFF:SetText("");
EzDismount_Text_Stand_VON:SetText("");
EzDismount_Text_Auction_VOFF:SetText("");
EzDismount_Text_Auction_VON:SetText("");
-- Mounts
EzDismount_Text_Status:SetText("Automatic dismounting is :");
if ( EzDismount_Config[EzDPlayer]["Dismount"] == "OFF" ) then
EzDismount_Text_Status_VOFF:SetText("[OFF]");
end
if (EzDismount_Config[EzDPlayer]["Dismount"] == "ON" ) then
EzDismount_Text_Status_VON:SetText("[ON]");
end
if ( EzDismount_Config[EzDPlayer]["Dismount"] == "TAXI" ) then
EzDismount_Text_Status_VON:SetText("[TAXI]");
end
-- Auctioneer Dismount
EzDismount_Text_Auction:SetText("Automatic auctioneer dismount is :");
if ( EzDismount_Config[EzDPlayer]["Auction"] == "OFF" ) then
EzDismount_Text_Auction_VOFF:SetText("[OFF]");
else
EzDismount_Text_Auction_VON:SetText("[ON]");
end
-- Auto-Stand
EzDismount_Text_Stand:SetText("Automatic stand from sit is :");
if ( EzDismount_Config[EzDPlayer]["Stand"] == "OFF" ) then
EzDismount_Text_Stand_VOFF:SetText("[OFF]");
else
EzDismount_Text_Stand_VON:SetText("[ON]");
end
-- Shaman
EzDismount_Text_Shaman:SetText("Auto-cancel of Ghostwolf is :");
if ( EzDismount_Config[EzDPlayer]["Wolf"] == "OFF" ) then
EzDismount_Text_Shaman_VOFF:SetText("[OFF]");
else
EzDismount_Text_Shaman_VON:SetText("[ON]");
end
-- Druid
EzDismount_Text_Druid:SetText("Auto-cancel of shapeshifts is :");
if ( EzDismount_Config[EzDPlayer]["Druid"] == "OFF" ) then
EzDismount_Text_Druid_VOFF:SetText("[OFF]");
else
EzDismount_Text_Druid_VON:SetText("[ON]");
end
-- Moonkin
EzDismount_Text_Moonkin:SetText("Auto-cancel of Moonkin form :");
if ( EzDismount_Config[EzDPlayer]["Moonkin"] == "OFF" ) then
EzDismount_Text_Moonkin_VOFF:SetText("[OFF]");
else
EzDismount_Text_Moonkin_VON:SetText("[ON]");
end
-- Shadowform
EzDismount_Text_Shadowform:SetText("Auto-cancel of Shadowform :");
if ( EzDismount_Config[EzDPlayer]["Shadowform"] == "OFF" ) then
EzDismount_Text_Shadowform_VOFF:SetText("[OFF]");
else
EzDismount_Text_Shadowform_VON:SetText("[ON]");
end
end
--------------------------
-- Show slash command help
--------------------------
function EzDismount_help()
DEFAULT_CHAT_FRAME:AddMessage("## " .. EzDismount_fullver .. " ##", 0.0, 1.0, 0.0);
for index=1, table.getn(EzDHelp.List), 1 do
DEFAULT_CHAT_FRAME:AddMessage(EzDHelp.List[index], 0.0, 1.0, 0.0);
end;
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment