Foereaper

ElunaGate GM Addon Concept

May 4th, 2014
527
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.36 KB | None | 0 0
  1. print("ElunaGate GM Addon loaded!")
  2.  
  3. local GMAddon = {
  4.     Prefix = "GMAddon",
  5.     Cache = {};
  6. };
  7.  
  8. -- [[OnChat Trigger]]
  9. function OnChat(Event, Player, Message, Type, Language, Misc)
  10.     if (string.lower(Message) == "gmaddon") then
  11.         if (Player:IsGM()) then
  12.             RenderMainMenu(Player)
  13.         else
  14.             Player:SendBroadcastMessage("You do not have the correct permissions to access this addon!")
  15.         end
  16.     end
  17. end
  18.  
  19. RegisterPlayerEvent(18, OnChat)
  20.  
  21. -- [[ MAIN MENU ]]
  22. function RenderMainMenu(Player)
  23.     GMAddon.MainButtons = {
  24.         "Ports",
  25.         "Tickets",
  26.         "Items",
  27.         "Skills",
  28.         "Spells",
  29.         "Game Objects",
  30.         "NPCs",
  31.         "Players",
  32.         "Pets",
  33.         "Comms",
  34.         "Ban Stick",
  35.         "Server",
  36.         "Overrides",
  37.         "Modify",
  38.     };
  39.  
  40.     local YOffset = 320
  41.     local Frame = CreateFrame(GMAddon.Prefix.."MainFrame")
  42.    
  43.     Frame:SetText("ElunaGate GM")
  44.     Frame:SetCantMove(false)
  45.     Frame:SetHeight(YOffset)
  46.     Frame:SetWidth(150)
  47.    
  48.     for k, v in pairs(GMAddon.MainButtons) do
  49.         local Button = Frame:CreateButton(GMAddon.Prefix..v)
  50.         Button:SetText(v)
  51.         Button:SetHeight(15)           
  52.         Button:SetWidth(130)
  53.         Button:SetYOffset(YOffset-200)
  54.         Button:SetXOffset(2)
  55.        
  56.         Button:SetEvent("OnClick", function(self, event, player,_)
  57.                 RenderSubMenu(Player, v)
  58.                 Frame:Hide(Player)
  59.             end
  60.         )
  61.        
  62.         YOffset = YOffset - 20
  63.     end
  64.    
  65.     Frame:Send(Player)
  66. end
  67.  
  68. function RenderSubMenu(Player, Type)
  69.     local Frame = CreateFrame(GMAddon.Prefix.."SelectFrame")
  70.    
  71.     Frame:SetText(Type)
  72.     Frame:SetCantMove(false)
  73.    
  74.     -- [[ Insert a case for each MAIN button below! ]]
  75.    
  76.     if(Type == "Ports") then
  77.         Frame:SetHeight(320)
  78.         Frame:SetWidth(150)
  79.        
  80.         -- [[ PORT NAME EDIT BOX ]]
  81.         local PortNameBox = Frame:CreateEditBox(GMAddon.Prefix..Type.."PortName")
  82.        
  83.         PortNameBox:SetStatusLink(GMAddon.Prefix..Type.."PortButton")
  84.         PortNameBox:SetHeight(15)
  85.         PortNameBox:SetWidth(100)
  86.         PortNameBox:SetYOffset(120)
  87.         PortNameBox:SetXOffset(3)
  88.         PortNameBox:SetTooltip("Input port name here.")
  89.        
  90.         -- [[ PORT BUTTON ]]
  91.         local PortButton = Frame:CreateButton(GMAddon.Prefix..Type.."PortButton")
  92.    
  93.         PortButton:SetText("Port To")
  94.         PortButton:SetHeight(15)
  95.         PortButton:SetWidth(100)
  96.         PortButton:SetYOffset(100)
  97.         PortButton:SetXOffset(0)
  98.        
  99.         PortButton:SetEvent("OnClick", function(self, event, player, Cache)
  100.                
  101.             end
  102.         )
  103.        
  104.         -- [[ PLAYER NAME EDIT BOX ]]
  105.         local PlayerNameBox = Frame:CreateEditBox(GMAddon.Prefix..Type.."PlayerName")
  106.        
  107.         PlayerNameBox:SetStatusLink(GMAddon.Prefix..Type.."SummonButton")
  108.         PlayerNameBox:SetStatusLink(GMAddon.Prefix..Type.."AppearButton")
  109.         PlayerNameBox:SetStatusLink(GMAddon.Prefix..Type.."WPPlayerButton")
  110.         PlayerNameBox:SetHeight(15)
  111.         PlayerNameBox:SetWidth(100)
  112.         PlayerNameBox:SetYOffset(80)
  113.         PlayerNameBox:SetXOffset(3)
  114.         PlayerNameBox:SetTooltip("Input player name here.")
  115.        
  116.         -- [[ SUMMON BUTTON ]]
  117.         local SummonButton = Frame:CreateButton(GMAddon.Prefix..Type.."SummonButton")
  118.        
  119.         SummonButton:SetText("Summon")
  120.         SummonButton:SetHeight(15)
  121.         SummonButton:SetWidth(100)
  122.         SummonButton:SetYOffset(60)
  123.         SummonButton:SetXOffset(0)
  124.        
  125.         SummonButton:SetEvent("OnClick", function(self, event, player, Cache)
  126.                 local PlayerNameBox = Cache[3]
  127.                
  128.                 if(PlayerNameBox == nil) then
  129.                     player:SendBroadcastMessage("Please enter a player name to use this feature.")
  130.                     return;
  131.                 end
  132.                
  133.                 local SelectedPlayer = GetPlayerByName(PlayerNameBox)
  134.                
  135.                 if not SelectedPlayer then
  136.                     player:SendBroadcastMessage(PlayerNameBox.." is currently not in game.")
  137.                     return;
  138.                 end
  139.                
  140.                 SelectedPlayer:Teleport(player:GetMapId(), player:GetX(), player:GetY(), player:GetZ(), player:GetO())
  141.                 player:SendBroadcastMessage("Summoning "..PlayerNameBox..".")
  142.             end
  143.         )
  144.        
  145.         -- [[ APPEAR BUTTON ]]
  146.         local AppearButton = Frame:CreateButton(GMAddon.Prefix..Type.."AppearButton")
  147.        
  148.         AppearButton:SetText("Appear")
  149.         AppearButton:SetHeight(15)
  150.         AppearButton:SetWidth(100)
  151.         AppearButton:SetYOffset(40)
  152.         AppearButton:SetXOffset(0)
  153.        
  154.         AppearButton:SetEvent("OnClick", function(self, event, player, Cache)
  155.                 local PlayerNameBox = Cache[3]
  156.                
  157.                 if(PlayerNameBox == nil) then
  158.                     player:SendBroadcastMessage("Please enter a player name to use this feature.")
  159.                     return;
  160.                 end
  161.                
  162.                 local SelectedPlayer = GetPlayerByName(PlayerNameBox)
  163.                
  164.                 if not SelectedPlayer then
  165.                     player:SendBroadcastMessage(PlayerNameBox.." is currently not in game.")
  166.                     return;
  167.                 end
  168.                
  169.                 player:Teleport(SelectedPlayer:GetMapId(), SelectedPlayer:GetX(), SelectedPlayer:GetY(), SelectedPlayer:GetZ(), SelectedPlayer:GetO())
  170.                 player:SendBroadcastMessage("Appearing to "..PlayerNameBox..".")
  171.             end
  172.         )
  173.        
  174.         -- [[ MAP EDIT BOX ]]
  175.         local MapEditBox = Frame:CreateEditBox(GMAddon.Prefix..Type.."MapId")
  176.        
  177.         MapEditBox:SetStatusLink(GMAddon.Prefix..Type.."WPPlayerButton")
  178.         MapEditBox:SetHeight(15)
  179.         MapEditBox:SetWidth(100)
  180.         MapEditBox:SetYOffset(20)
  181.         MapEditBox:SetXOffset(3)
  182.         MapEditBox:SetTooltip("Input Map ID name here.")
  183.        
  184.         -- [[ X EDIT BOX ]]
  185.         local XEditBox = Frame:CreateEditBox(GMAddon.Prefix..Type.."XEditBox")
  186.        
  187.         XEditBox:SetStatusLink(GMAddon.Prefix..Type.."WPPlayerButton")
  188.         XEditBox:SetHeight(15)
  189.         XEditBox:SetWidth(100)
  190.         XEditBox:SetYOffset(0)
  191.         XEditBox:SetXOffset(3)
  192.         XEditBox:SetTooltip("Input X value here.")
  193.        
  194.         -- [[ Y EDIT BOX ]]
  195.         local YEditBox = Frame:CreateEditBox(GMAddon.Prefix..Type.."YEditBox")
  196.        
  197.         YEditBox:SetStatusLink(GMAddon.Prefix..Type.."WPPlayerButton")
  198.         YEditBox:SetHeight(15)
  199.         YEditBox:SetWidth(100)
  200.         YEditBox:SetYOffset(-20)
  201.         YEditBox:SetXOffset(3)
  202.         YEditBox:SetTooltip("Input Y value here.")
  203.        
  204.         -- [[ Z EDIT BOX ]]
  205.         local ZEditBox = Frame:CreateEditBox(GMAddon.Prefix..Type.."ZEditBox")
  206.        
  207.         ZEditBox:SetStatusLink(GMAddon.Prefix..Type.."WPPlayerButton")
  208.         ZEditBox:SetHeight(15)
  209.         ZEditBox:SetWidth(100)
  210.         ZEditBox:SetYOffset(-40)
  211.         ZEditBox:SetXOffset(3)
  212.         ZEditBox:SetTooltip("Input Z value here.")
  213.        
  214.         -- [[ WORLDPORT PLAYER ]]
  215.         local WPPlayerButton = Frame:CreateButton(GMAddon.Prefix..Type.."WPPlayerButton")
  216.        
  217.         WPPlayerButton:SetText("Port Player")
  218.         WPPlayerButton:SetHeight(15)
  219.         WPPlayerButton:SetWidth(120)
  220.         WPPlayerButton:SetYOffset(-60)
  221.         WPPlayerButton:SetXOffset(0)
  222.        
  223.         WPPlayerButton:SetEvent("OnClick", function(self, event, player, Cache)
  224.                 for k, v in pairs(Cache) do
  225.                 print(k, v)
  226.             end
  227.                 local PlayerNameBox, Map, X, Y, Z = Cache[7], Cache[3], Cache[11], Cache[5], Cache[9]
  228.                 local SelectedPlayer = GetPlayerByName(PlayerNameBox)
  229.                
  230.                 if #Cache < 11 then
  231.                     player:SendBroadcastMessage("All fields (Player name and coordinates) must be filled out to teleport a player!")
  232.                 else
  233.                     if not SelectedPlayer or SelectedPlayer == nil then
  234.                         player:SendBroadcastMessage(PlayerNameBox.." is currently not in game.")
  235.                     else
  236.                         SelectedPlayer:Teleport(SelectedPlayer:GetMapId(), SelectedPlayer:GetX(), SelectedPlayer:GetY(), SelectedPlayer:GetZ(), SelectedPlayer:GetO())
  237.                         player:SendBroadcastMessage("Teleporting "..PlayerNameBox.." to coordinates: "..Map.." "..X.." "..Y.." "..Z..".")
  238.                     end
  239.                 end
  240.             end
  241.         )
  242.        
  243.         -- [[ WORLDPORT SELF ]]
  244.         local WPSelfButton = Frame:CreateButton(GMAddon.Prefix..Type.."WPSelfButton")
  245.        
  246.         WPSelfButton:SetText("Port Self")
  247.         WPSelfButton:SetHeight(15)
  248.         WPSelfButton:SetWidth(120)
  249.         WPSelfButton:SetYOffset(-80)
  250.         WPSelfButton:SetXOffset(0)
  251.        
  252.         WPSelfButton:SetEvent("OnClick", function(self, event, player, Cache)
  253.             for k, v in pairs(Cache) do
  254.                 print(k, v)
  255.             end
  256.                 local PlayerNameBox = Cache[3]
  257.                 local SelectedPlayer = GetPlayerByName(PlayerNameBox)
  258.                
  259.                 if not SelectedPlayer or SelectedPlayer == nil then
  260.                     player:SendBroadcastMessage(PlayerNameBox.." is currently not in game.")
  261.                 else
  262.                     player:Teleport(SelectedPlayer:GetMapId(), SelectedPlayer:GetX(), SelectedPlayer:GetY(), SelectedPlayer:GetZ(), SelectedPlayer:GetO())
  263.                     player:SendBroadcastMessage("Appearing to "..PlayerNameBox..".")
  264.                 end
  265.             end
  266.         )
  267.        
  268.         -- [[ BACK BUTTON ]]
  269.         local BackButton = Frame:CreateButton(GMAddon.Prefix..Type.."BackButton")
  270.        
  271.         BackButton:SetText("Back")
  272.         BackButton:SetHeight(15)
  273.         BackButton:SetWidth(100)
  274.         BackButton:SetYOffset(-120)
  275.         BackButton:SetXOffset(0)
  276.        
  277.         BackButton:SetEvent("OnClick", function(self, event, player, Cache)
  278.                 RenderMainMenu(Player)
  279.                 Frame:Hide(Player)
  280.             end
  281.         )
  282.     end
  283.    
  284.    
  285.    
  286.     Frame:Send(Player)
  287. end
Advertisement
Add Comment
Please, Sign In to add comment