eluna-scripts-ornfelt/lua/WowEmulationScriptPack/Lua/Binding_cmd.lua
2024-09-23 07:59:23 +02:00

166 lines
No EOL
7.7 KiB
Lua

local enabled = true
local GMonly = false -- only opens for GM
local BINDSQL = [[ CREATE TABLE IF NOT EXISTS world.skuly_teleport ( `CharID` int(10) unsigned, `mappId` int(10) unsigned, `xCoord` varchar(12), `yCoord` varchar(12), `zCoord` varchar(12), `orientation` varchar(12), `CharName` varchar(12), `BindName` varchar(12) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL);]]
WorldDBExecute(BINDSQL)
local function SKULYBIND(eventid, delay, repeats, player)
local mingmrank = 3
local IsGM = (player:GetGMRank() >= mingmrank)
if not GMonly or IsGM then
player:SendBroadcastMessage("|cff3399FF You can type|cff00cc00 .bind name|cff3399FF in chat to save your current location and set a name for it.")
player:SendBroadcastMessage("|cff3399FF You can type|cff00cc00 .return name|cff3399FF in chat to sreturn to that location at anytime.")
player:SendBroadcastMessage("|cff3399FF You can type|cff00cc00 .clearbind name |cff3399FF or|cff00cc00 .clearbind all|cff3399FF in chat to clear locations.")
end
end
local firstlogin = false
local function OnFirstLogin(event, player)
if event == 30 then
firstlogin = true
end
player:RegisterEvent(SKULYBIND, 60000, 1, player)
end
local function OnLogin(event, player)
if not firstlogin then
player:RegisterEvent(SKULYBIND, 20000, 1, player)
else
firstlogin = false
end
end
local function getPlayerCharacterGUID(player)
local query = CharDBQuery(string.format("SELECT guid FROM characters WHERE name='%s'", player:GetName()))
if query then
local row = query:GetRow()
return tonumber(row["guid"])
end
return nil
end
local function PlrMenu(event, player, message, Type, lang)
local map = player:GetMap()
local commandbind = "^bind.*"
local commandgoto = "^return.*"
local commandclear = "^clearbind."
local text = message:lower()
local mingmrank = 3
local IsGM = (player:GetGMRank() >= mingmrank)
local NotGM = (player:GetGMRank() < mingmrank)
if text:find(commandbind) ~= nil then
if NotGM then
player:SendBroadcastMessage("|cff5af304Only a GM can use this command.|r")
return false
else
local xstring = string.sub(tostring(player:GetX()),1,10)
local ystring = string.sub(tostring(player:GetY()),1,10)
local zstring = string.sub(tostring(player:GetZ()),1,10)
local ostring = string.sub(tostring(player:GetO()),1,10)
local getbind = string.sub(text,6,65)
local extractedname = tostring(getbind:gsub("%s+%d+", ""))
local query = WorldDBQuery(string.format("SELECT * FROM world.skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedname, getPlayerCharacterGUID(player)))
if not query then
WorldDBExecute(string.format("INSERT INTO world.skuly_teleport (CharName, BindName, CharID, mappId, xCoord, yCoord, zCoord, orientation) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", player:GetName(), extractedname, getPlayerCharacterGUID(player), tostring(map:GetMapId()), xstring, ystring, zstring, ostring))
player:SendBroadcastMessage("|cff5af304Location saved as |cff3399FF"..extractedname.."|cff5af304 (type .return |cff3399FF"..extractedname.."|cff5af304 to return to this location at any time)|r")
else
local query2 = WorldDBQuery(string.format("SELECT BindName FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedname, getPlayerCharacterGUID(player)))
if query2 then
local mapID = WorldDBQuery(string.format("SELECT mappId FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedname, getPlayerCharacterGUID(player)))
local x = WorldDBQuery(string.format("SELECT xCoord FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedname, getPlayerCharacterGUID(player)))
local y = WorldDBQuery(string.format("SELECT yCoord FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedname, getPlayerCharacterGUID(player)))
local z = WorldDBQuery(string.format("SELECT zCoord FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedname, getPlayerCharacterGUID(player)))
local O = WorldDBQuery(string.format("SELECT orientation FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedname, getPlayerCharacterGUID(player)))
player:SendBroadcastMessage("|cff5af304 Bind location |cff3399FF"..extractedname.."|cff5af304 already exists (|cff3399FFMap|cff5af304:"..mapID:GetString(0).."|cff3399FF X|cff5af304:"..x:GetString(0).."|cff3399FF Y|cff5af304:"..y:GetString(0).."|cff3399FF Z|cff5af304:"..z:GetString(0).."|cff3399FF O|cff5af304:"..O:GetString(0)..")|r")
player:SendBroadcastMessage("|cff5af304 Type|cff3399FF .clearbind "..extractedname.." |cff5af304if you would like to remove the bind location.|r")
end
end
return false
end
end
if text:find(commandgoto) ~= nil then
local getgo = string.sub(text,8,65)
local extractedgo = tostring(getgo:gsub("%s+%d+", ""))
if NotGM then
player:SendBroadcastMessage("|cff5af304Only a GM can use this command.|r")
return false
else
local query3 = WorldDBQuery(string.format("SELECT BindName FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedgo, getPlayerCharacterGUID(player)))
if query3 then
local mapID = WorldDBQuery(string.format("SELECT mappId FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedgo, getPlayerCharacterGUID(player)))
local x = WorldDBQuery(string.format("SELECT xCoord FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedgo, getPlayerCharacterGUID(player)))
local y = WorldDBQuery(string.format("SELECT yCoord FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedgo, getPlayerCharacterGUID(player)))
local z = WorldDBQuery(string.format("SELECT zCoord FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedgo, getPlayerCharacterGUID(player)))
local o = WorldDBQuery(string.format("SELECT orientation FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedgo, getPlayerCharacterGUID(player)))
player:Teleport( mapID:GetInt32(0), x:GetInt32(0), y:GetInt32(0), z:GetInt32(0)+0.75, o:GetInt32(0) )
end
return false
end
end
if text:find(commandclear) ~= nil then
local getclear = string.sub(text,11,65)
local extractedclear = tostring(getclear:gsub("%s+%d+", ""))
local query4 = WorldDBQuery(string.format("SELECT BindName FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedclear, getPlayerCharacterGUID(player)))
if NotGM then
player:SendBroadcastMessage("|cff5af304Only a GM can use this command.|r")
return false
else
if extractedclear == "all" then
WorldDBQuery(string.format("DELETE FROM skuly_teleport WHERE CharName='%s' AND CharID='%i'", player:GetName(), getPlayerCharacterGUID(player)))
player:SendBroadcastMessage("|cff5af304ALL bind locations cleared.|r")
else
if query4 then
WorldDBQuery(string.format("DELETE FROM skuly_teleport WHERE CharName='%s' AND BindName='%s' AND CharID='%i'", player:GetName(), extractedclear, getPlayerCharacterGUID(player)))
player:SendBroadcastMessage("|cff5af304Bind location |cff3399FF"..extractedclear.."|cff5af304 was cleared.|r")
else
player:SendBroadcastMessage("|cff5af304Bind location |cff3399FF"..extractedclear.."|cff5af304 does NOT exist.|r")
end
end
return false
end
end
end
if enabled then
RegisterPlayerEvent(30, OnFirstLogin)
RegisterPlayerEvent(3, OnLogin)
RegisterPlayerEvent(42, PlrMenu)
end