mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
933 lines
36 KiB
Lua
933 lines
36 KiB
Lua
|
|
local AIO = AIO or require("AIO")
|
||
|
|
local WeaverHandlers = AIO.AddHandlers("Weaver", {})
|
||
|
|
local ToolBarHandlers4 = AIO.AddHandlers("ToolBar4", {})
|
||
|
|
|
||
|
|
-- notes:
|
||
|
|
-- (player:GetGMRank() == 0) refers to players with RBAC ID 0, or by default, normal players
|
||
|
|
|
||
|
|
-- amount of objects to cap for a weaver to spawn
|
||
|
|
WEAVER_CAP_OBJECT = 50
|
||
|
|
|
||
|
|
-- amount of NPCs to cap for a weaver to spawn
|
||
|
|
WEAVER_CAP_NPC = 50
|
||
|
|
|
||
|
|
-- amount of stacks of dmg/hp buffs a weaver can put on an npc
|
||
|
|
WEAVER_CAP_BUFF = 10
|
||
|
|
|
||
|
|
-- the RBAC ID for a weaver account
|
||
|
|
WEAVER_RBAC_ID = 1
|
||
|
|
|
||
|
|
-- AURA IDs for .wbuff
|
||
|
|
damage_aura = 2000036
|
||
|
|
health_aura = 2000035
|
||
|
|
|
||
|
|
-- REALM ID for weavers to function on
|
||
|
|
REALM_ID = 1
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
-- .weaver broadcast
|
||
|
|
local function WeaverChat(event, player, command)
|
||
|
|
if (command:find("weaver ") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
else
|
||
|
|
command = string.gsub(command,"weaver ","")
|
||
|
|
-- gets every character in world
|
||
|
|
local GM = GetPlayersInWorld(2)
|
||
|
|
for x=1,#GM,1 do
|
||
|
|
-- sends broadcast message to player, so long as they are not RBAC rank 0.
|
||
|
|
if (GM[x]:GetGMRank() ~= 0) then
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `WEAVER` with parameters: " ..command.. ".")
|
||
|
|
GM[x]:SendBroadcastMessage("[|cff00FFFFWeaver announce by|r |cff66ffcc" ..player:GetName().. "|r]: " ..command)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .wspawns
|
||
|
|
local function WeaverSpawns(event, player, command)
|
||
|
|
if (command:find("wspawns") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery7 = WorldDBQuery("SELECT `guid`, `entry`, `type` FROM `weaver_spawned` WHERE `owner_account` = '" ..player:GetAccountName().. "' GROUP BY `type` ASC;")
|
||
|
|
if WeaverQuery7 == nil then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You do not have any spawns used.")
|
||
|
|
return false
|
||
|
|
else
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: Your following spawns are:")
|
||
|
|
npc_count = 0
|
||
|
|
obj_count = 0
|
||
|
|
for m=1,WeaverQuery7:GetRowCount(),1 do
|
||
|
|
if WeaverQuery7:GetInt32(2) == 1 then
|
||
|
|
npc_count = npc_count + 1
|
||
|
|
string = "OBJ (" ..npc_count.. "/" ..WEAVER_CAP_NPC.. ")"
|
||
|
|
else
|
||
|
|
obj_count = obj_count + 1
|
||
|
|
string = "NPC (" ..obj_count.. "/" ..WEAVER_CAP_OBJECT.. ")"
|
||
|
|
end
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: " ..string.. " with GUID: " ..WeaverQuery7:GetInt32(0).. " and Entry: " ..WeaverQuery7:GetInt32(1).. ".")
|
||
|
|
WeaverQuery7:NextRow()
|
||
|
|
end
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .wobject add
|
||
|
|
local function WeaverObjectAdd(event, player, command)
|
||
|
|
if (command:find("wobj add") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local pattern = "%S+" -- Separate by spaces
|
||
|
|
local parameters = {}
|
||
|
|
local parameters = getCommandParameters(command)
|
||
|
|
if (parameters[3] == nil) or tonumber(parameters[3]) == nil then
|
||
|
|
player:SendBroadcastMessage("Syntax: .wobj add $entry\nSpawns an object based on entry. Weavers can have up to " ..WEAVER_CAP_OBJECT.. " objects spawned at a time.\nTo find objects, use .lookup object.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
-- here we stop error spam from a nil instanceid
|
||
|
|
local instanceid = player:GetInstanceId()
|
||
|
|
if (instanceid == nil) then
|
||
|
|
instanceid = 0
|
||
|
|
end
|
||
|
|
|
||
|
|
-- does our weaver already have 5 spawns?
|
||
|
|
local WeaverQuery1 = WorldDBQuery("SELECT `guid` FROM `weaver_spawned` WHERE `owner_guid` = " ..player:GetGUIDLow().. " AND `type` = 1;")
|
||
|
|
local x, y, z, o = player:GetLocation()
|
||
|
|
RowCount = 0
|
||
|
|
if (WeaverQuery1 ~= nil) then
|
||
|
|
RowCount = WeaverQuery1:GetRowCount()
|
||
|
|
if (RowCount >= WEAVER_CAP_OBJECT) then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You can only spawn " ..WEAVER_CAP_OBJECT.. " objects.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local x, y, z, o = player:GetLocation()
|
||
|
|
local map_id = player:GetMapId()
|
||
|
|
|
||
|
|
-- spawn the object
|
||
|
|
PerformIngameSpawn(2, parameters[3], map_id, instanceid, x, y, z, o, true, 0, 1)
|
||
|
|
|
||
|
|
local nearestobjects = player:GetGameObjectsInRange(10, parameters[3], 0)
|
||
|
|
-- did the object spawn? if it didnt, more than likely an incorrect entry.
|
||
|
|
if (nearestobjects[1] == nil) then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: The entry you provided does not exist.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery2 = WorldDBQuery("SELECT `guid` FROM `weaver_spawned` WHERE `type` = 1 AND `guid` = " ..nearestobjects[1]:GetDBTableGUIDLow().. ";")
|
||
|
|
|
||
|
|
-- this is made to catch any overlap of GUIDs and attempts to fix them.
|
||
|
|
for x=1,#nearestobjects,1 do
|
||
|
|
if WeaverQuery2 ~= nearestobjects[x] then
|
||
|
|
-- player:SendBroadcastMessage("Detecting break. Fixing?")
|
||
|
|
nearestobject_guid = nearestobjects[x]:GetDBTableGUIDLow()
|
||
|
|
nearestobject_raw = nearestobjects[x]:GetGUIDLow()
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- type = 1 for obj spawn
|
||
|
|
WorldDBExecute("INSERT INTO `elunaworld`.`weaver_spawned` (`type`, `guid`, `guid_raw`, `entry`, `map`, `x`, `y`, `z`, `o`, `timestamp`, `owner_character`, `owner_account`, `owner_guid`) VALUES ('1', '" ..nearestobject_guid.. "', '" ..nearestobject_raw.. "', '" ..parameters[3].. "', '" ..map_id.. "', '" ..x.. "', '" ..y.. "', '" ..z.. "', '" ..o.. "', '" ..tostring(GetGameTime()).. "', '" ..player:GetName().. "', '" ..player:GetAccountName().. "', '" ..player:GetGUIDLow().. "');")
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You have spawned an object with GUID " ..nearestobject_guid.. " (Spawned: " ..(RowCount + 1).. "/" ..WEAVER_CAP_OBJECT..").")
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `WOBJ ADD` with parameters: " ..command.. " and GUID: " ..nearestobject_guid.. ".")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .wobject del
|
||
|
|
local function WeaverObjectDel(event, player, command)
|
||
|
|
if (command:find("wobj del") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local pattern = "%S+" -- Separate by spaces
|
||
|
|
local parameters = {}
|
||
|
|
local parameters = getCommandParameters(command)
|
||
|
|
if (parameters[3] == nil) or (tonumber(parameters[3] == nil)) then
|
||
|
|
-- help message
|
||
|
|
player:SendBroadcastMessage("Syntax: .wobj del $guid\nDeletes an object based on entry. Weavers can have up to " ..WEAVER_CAP_OBJECT.. " objects spawned at a time.\nTo find objects, use .gob tar.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery3 = WorldDBQuery("SELECT `guid_raw`, `entry`, `map`, `owner_account`, `owner_character` FROM `weaver_spawned` WHERE `guid` = " ..parameters[3].. " AND `type` = 1;")
|
||
|
|
if WeaverQuery3 == nil then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: That entry does not exist as a weaver spawn.")
|
||
|
|
return false
|
||
|
|
elseif WeaverQuery3:GetString(3) ~= player:GetAccountName() then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: That spawn does not belong to you, but a weaver named " ..WeaverQuery3:GetString(4).. ".")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local map = GetMapById(WeaverQuery3:GetInt32(2))
|
||
|
|
local build = GetObjectGUID(WeaverQuery3:GetInt32(0), WeaverQuery3:GetInt32(1))
|
||
|
|
local object = map:GetWorldObject(build)
|
||
|
|
object:RemoveFromWorld(true)
|
||
|
|
WorldDBExecute("DELETE FROM `weaver_spawned` WHERE `guid` = " ..parameters[3].. ";")
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You have deleted object with GUID " ..parameters[3].. ".")
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `WOBJ DEL` with parameters: " ..command.. ".")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .wnpc add
|
||
|
|
local function WeaverNPCAdd(event, player, command)
|
||
|
|
if (command:find("wnpc add") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local pattern = "%S+" -- Separate by spaces
|
||
|
|
local parameters = {}
|
||
|
|
local parameters = getCommandParameters(command)
|
||
|
|
if (parameters[3] == nil) or (tonumber(parameters[3] == nil)) then
|
||
|
|
-- help message
|
||
|
|
player:SendBroadcastMessage("Syntax: .wnpc add $entry\nSpawns an NPC based on entry. Weavers can have up to " ..WEAVER_CAP_NPC.. " NPCs spawned at a time.\nTo find NPCs, use .lookup creature.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
-- here we stop error spam from a nil instanceid
|
||
|
|
local instanceid = player:GetInstanceId()
|
||
|
|
if (instanceid == nil) then
|
||
|
|
instanceid = 0
|
||
|
|
end
|
||
|
|
|
||
|
|
-- does our weaver already have 5 spawns?
|
||
|
|
local WeaverQuery4 = WorldDBQuery("SELECT `guid` FROM `weaver_spawned` WHERE `owner_guid` = " ..player:GetGUIDLow().. " AND `type` = 2;")
|
||
|
|
local x, y, z, o = player:GetLocation()
|
||
|
|
RowCount = 0
|
||
|
|
if (WeaverQuery4 ~= nil) then
|
||
|
|
RowCount = WeaverQuery4:GetRowCount()
|
||
|
|
if (RowCount >= WEAVER_CAP_OBJECT) then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You can only spawn " ..WEAVER_CAP_NPC.. " NPCs.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local x, y, z, o = player:GetLocation()
|
||
|
|
local map_id = player:GetMapId()
|
||
|
|
|
||
|
|
-- spawn the object
|
||
|
|
PerformIngameSpawn(1, parameters[3], map_id, instanceid, x, y, z, o, true, 0, 1)
|
||
|
|
|
||
|
|
local nearestobjects = player:GetCreaturesInRange(10, parameters[3], 0)
|
||
|
|
-- did the object spawn? if it didnt, more than likely an incorrect entry.
|
||
|
|
if (nearestobjects[1] == nil) then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: The entry you provided does not exist.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery5 = WorldDBQuery("SELECT `guid` FROM `weaver_spawned` WHERE `type` = 2 AND `guid` = " ..nearestobjects[1]:GetDBTableGUIDLow().. ";")
|
||
|
|
|
||
|
|
for x=1,#nearestobjects,1 do
|
||
|
|
if WeaverQuery2 ~= nearestobjects[x] then
|
||
|
|
-- player:SendBroadcastMessage("Detecting break. Fixing?")
|
||
|
|
nearestobject_guid = nearestobjects[x]:GetDBTableGUIDLow()
|
||
|
|
nearestobject_raw = nearestobjects[x]:GetGUIDLow()
|
||
|
|
nearestobject = nearestobjects[x]
|
||
|
|
break
|
||
|
|
end
|
||
|
|
nearestobject = nearestobjects[x]
|
||
|
|
end
|
||
|
|
|
||
|
|
if nearestobject:IsWorldBoss() == true then
|
||
|
|
local x, y, z, o = nearestobject:GetLocation()
|
||
|
|
nearestobject:NearTeleport(x, y, z - 100, o)
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You cannot spawn creatures of that rank.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
-- type = 1 for obj spawn
|
||
|
|
WorldDBExecute("INSERT INTO `elunaworld`.`weaver_spawned` (`type`, `guid`, `guid_raw`, `entry`, `map`, `x`, `y`, `z`, `o`, `timestamp`, `owner_character`, `owner_account`, `owner_guid`) VALUES ('2', '" ..nearestobject_guid.. "', '" ..nearestobject_raw.. "', '" ..parameters[3].. "', '" ..map_id.. "', '" ..x.. "', '" ..y.. "', '" ..z.. "', '" ..o.. "', '" ..tostring(GetGameTime()).. "', '" ..player:GetName().. "', '" ..player:GetAccountName().. "', '" ..player:GetGUIDLow().. "');")
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You have spawned an NPC with GUID " ..nearestobject_guid.. " (Spawned: " ..(RowCount + 1).. "/" ..WEAVER_CAP_NPC..").")
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `WNPC ADD` with parameters: " ..command.. ".")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .wnpc del
|
||
|
|
local function WeaverNPCDel(event, player, command)
|
||
|
|
if (command:find("wnpc del") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local pattern = "%S+" -- Separate by spaces
|
||
|
|
local parameters = {}
|
||
|
|
local parameters = getCommandParameters(command)
|
||
|
|
local target = player:GetSelection()
|
||
|
|
local entry_stuff = false
|
||
|
|
local target_stuff = false
|
||
|
|
if (target == nil) and (parameters[3] == nil) then
|
||
|
|
--help menu
|
||
|
|
player:SendBroadcastMessage("Syntax: .wnpc del\nDeletes an NPC based on target. Weavers can have up to " ..WEAVER_CAP_NPC.. " NPCs spawned at a time.\nTo delete an NPC, target before using this command.")
|
||
|
|
return false
|
||
|
|
-- elseif (parameters[3] ~= nil) then
|
||
|
|
-- -- i want to delete by entry if i have parameters
|
||
|
|
-- entry_stuff = true
|
||
|
|
elseif (parameters[3] == nil) and (target ~= nil) then
|
||
|
|
-- i want to delete by target if i have no parameters but i have a target
|
||
|
|
target_stuff = true
|
||
|
|
end
|
||
|
|
|
||
|
|
if target_stuff == true then
|
||
|
|
if target:ToCreature() == nil then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You must target a creature.")
|
||
|
|
return false
|
||
|
|
-- is creature a world boss? is the player's account rank weaver? stop from continuing.
|
||
|
|
elseif (target:IsWorldBoss() == true) and (player:GetGMRank() == WEAVER_RBAC_ID) then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You cannot command creatures of this rank.")
|
||
|
|
end
|
||
|
|
guidlow = target:GetDBTableGUIDLow()
|
||
|
|
-- elseif entry_stuff == true then
|
||
|
|
-- if (tonumber(parameters[3]) == nil) then
|
||
|
|
-- -- help menu
|
||
|
|
-- player:SendBroadcastMessage("[Weaver]: You must input a GUID.")
|
||
|
|
-- end
|
||
|
|
-- guidlow = parameters[3]
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery6 = WorldDBQuery("SELECT `guid_raw`, `entry`, `map`, `owner_account`, `owner_character` FROM `weaver_spawned` WHERE `guid` = " ..guidlow.. " AND `type` = 2;")
|
||
|
|
if WeaverQuery6 == nil then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: That entry does not exist as a weaver spawn.")
|
||
|
|
return false
|
||
|
|
elseif WeaverQuery6:GetString(3) ~= player:GetAccountName() then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: That spawn does not belong to you, but a weaver named " ..WeaverQuery6:GetString(4).. ".")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
-- local map = GetMapById(WeaverQuery6:GetInt32(2))
|
||
|
|
-- print(map)
|
||
|
|
-- local build = GetObjectGUID(WeaverQuery6:GetInt32(0), WeaverQuery6:GetInt32(1))
|
||
|
|
-- print(build)
|
||
|
|
-- local object = map:GetWorldObject(build)
|
||
|
|
target:SetPhaseMask(0, true)
|
||
|
|
local x, y, z, o = player:GetLocation()
|
||
|
|
target:NearTeleport( x, y, z - 300, o )
|
||
|
|
target:SaveToDB()
|
||
|
|
target:DespawnOrUnsummon( 1000 )
|
||
|
|
target:SetPhaseMask(0, true)
|
||
|
|
WorldDBExecute("DELETE FROM `weaver_spawned` WHERE `guid` = " ..guidlow.. ";")
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You have deleted NPC with GUID " ..guidlow.. ".")
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `WNPC DEL` on target: " ..target:GetDBTableGUIDLow().. ".")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .wemote
|
||
|
|
local function WeaverEmote(event, player, command)
|
||
|
|
if (command:find("wemote") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local target = player:GetSelection()
|
||
|
|
if (target == nil) then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You must have a target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:ToCreature() == nil then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You must target a creature.")
|
||
|
|
return false
|
||
|
|
-- is creature a world boss? is the player's account rank weaver? stop from continuing.
|
||
|
|
elseif (target:IsWorldBoss() == true) and (player:GetGMRank() == WEAVER_RBAC_ID) then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: You cannot command creatures of this rank.")
|
||
|
|
end
|
||
|
|
|
||
|
|
local pattern = "%S+" -- Separate by spaces
|
||
|
|
local parameters = {}
|
||
|
|
local parameters = getCommandParameters(command)
|
||
|
|
local param2 = tostring(parameters[2])
|
||
|
|
local param3 = tostring(parameters[3])
|
||
|
|
|
||
|
|
if (param2 == "loop") then
|
||
|
|
local emoteID = tonumber(param3)
|
||
|
|
if (emoteID == nil or emoteID >= 477 or emoteID < 0) then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: Missing or invalid emote ID.")
|
||
|
|
return false
|
||
|
|
else
|
||
|
|
target:EmoteState(emoteID)
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
elseif (param2 == "stop") then
|
||
|
|
target:Emote(0)
|
||
|
|
target:EmoteState(0)
|
||
|
|
return false
|
||
|
|
else
|
||
|
|
local emoteID = tonumber(param2)
|
||
|
|
if (emoteID == nil or emoteID >= 477 or emoteID < 0) then
|
||
|
|
player:SendBroadcastMessage("[|cff00FFFFWeaver|r]: Missing or invalid emote ID.")
|
||
|
|
return false
|
||
|
|
else
|
||
|
|
target:Emote(emoteID)
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
-- .wcometome
|
||
|
|
local function WeaverComeToMe(event, player, command)
|
||
|
|
if (command:find("wcometome") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local target = player:GetSelection()
|
||
|
|
if (target == nil) then
|
||
|
|
player:SendBroadcastMessage("You must have a target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:ToCreature() == nil then
|
||
|
|
player:SendBroadcastMessage("You must target a creature.")
|
||
|
|
return false
|
||
|
|
-- is creature a world boss? is the player's account rank weaver? stop from continuing.
|
||
|
|
elseif (target:IsWorldBoss() == true) and (player:GetGMRank() == WEAVER_RBAC_ID) then
|
||
|
|
player:SendBroadcastMessage("You cannot command creatures of this rank.")
|
||
|
|
end
|
||
|
|
|
||
|
|
local x, y, z, o = player:GetLocation()
|
||
|
|
if (command:find("wcometome walk") == 1) then
|
||
|
|
target:SetWalk(true)
|
||
|
|
target:MoveTo(0, x, y, z, true)
|
||
|
|
return false
|
||
|
|
elseif (command:find("wcometome run") == 1) then
|
||
|
|
target:SetWalk(false)
|
||
|
|
target:MoveTo(0, x, y, z, true)
|
||
|
|
return false
|
||
|
|
elseif (command:find("wcometome homerun") == 1) then
|
||
|
|
target:MoveHome()
|
||
|
|
target:SetWalk(false)
|
||
|
|
return false
|
||
|
|
elseif (command:find("wcometome homewalk") == 1) then
|
||
|
|
target:MoveHome()
|
||
|
|
target:SetWalk(true)
|
||
|
|
return false
|
||
|
|
else
|
||
|
|
-- help message. add .help command in future
|
||
|
|
player:SendBroadcastMessage("Syntax: .wcometome $subcommand \nMakes the target NPC walk or run to your location. Subcommand homerun or homewalk returns the NPC to its spawn point.\nwalk\nrun\nhomerun\nhomewalk")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .wfollow
|
||
|
|
-- makes an npc follow you until .wfollow is used again.
|
||
|
|
local function WeaverFollow(event, player, command)
|
||
|
|
if (command:find("wfollow") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local target = player:GetSelection()
|
||
|
|
if (target == nil) then
|
||
|
|
player:SendBroadcastMessage("You must have a target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:ToCreature() == nil then
|
||
|
|
player:SendBroadcastMessage("You must target a creature.")
|
||
|
|
return false
|
||
|
|
-- is creature a world boss? is the player's account rank weaver? stop from continuing.
|
||
|
|
elseif (target:IsWorldBoss() == true) and (player:GetGMRank() == WEAVER_RBAC_ID) then
|
||
|
|
player:SendBroadcastMessage("You cannot command creatures of this rank.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .wbuff, allowing weavers to give a 10% dam/hp buff up to a certain amount of stacks.
|
||
|
|
local function WeaverBuff(event, player, command)
|
||
|
|
if (command:find("wbuff") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local target = player:GetSelection()
|
||
|
|
if (target == nil) then
|
||
|
|
player:SendBroadcastMessage("You must have a target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:ToCreature() == nil then
|
||
|
|
player:SendBroadcastMessage("You must target a creature.")
|
||
|
|
return false
|
||
|
|
-- is creature a world boss? is the player's account rank weaver? stop from continuing.
|
||
|
|
elseif (target:IsWorldBoss() == true) and (player:GetGMRank() == WEAVER_RBAC_ID) then
|
||
|
|
player:SendBroadcastMessage("You cannot command creatures of this rank.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
if (command:find("wbuff damage") == 1) then
|
||
|
|
aura = target:GetAura(damage_aura)
|
||
|
|
if (aura == nil) then
|
||
|
|
target:AddAura(damage_aura, target)
|
||
|
|
return false
|
||
|
|
elseif (aura:GetStackAmount() >= WEAVER_CAP_BUFF) then
|
||
|
|
player:SendBroadcastMessage("You can only buff this unit up to " ..WEAVER_CAP_BUFF.. " times.")
|
||
|
|
return false
|
||
|
|
else
|
||
|
|
target:AddAura(damage_aura, target)
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
elseif (command:find("wbuff health") == 1) then
|
||
|
|
aura = target:GetAura(health_aura)
|
||
|
|
if (aura == nil) then
|
||
|
|
target:AddAura(health_aura, target)
|
||
|
|
return false
|
||
|
|
elseif (aura:GetStackAmount() >= WEAVER_CAP_BUFF) then
|
||
|
|
player:SendBroadcastMessage("You can only buff this unit up to " ..WEAVER_CAP_BUFF.. " times.")
|
||
|
|
return false
|
||
|
|
else
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `" ..command.. "` on target: " ..target:GetName().. ".")
|
||
|
|
target:AddAura(health_aura, target)
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
elseif (command:find("wbuff reset") == 1) then
|
||
|
|
target:RemoveAura(health_aura)
|
||
|
|
target:RemoveAura(damage_aura)
|
||
|
|
end
|
||
|
|
player:SendBroadcastMessage("Syntax: .wbuff $subcommand \nBuffs the targeted NPC with a 10% increase in damage or health. Subcommand reset sets these to 0.\ndamage\nhealth\nreset")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .waura add aura to target
|
||
|
|
local function WeaverAura(event, player, command)
|
||
|
|
if (command:find("waura") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local target = player:GetSelection()
|
||
|
|
if (target == nil) then
|
||
|
|
player:SendBroadcastMessage("You must have a target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:ToCreature() == nil then
|
||
|
|
player:SendBroadcastMessage("You must target a creature.")
|
||
|
|
return false
|
||
|
|
-- is creature a world boss? is the player's account rank weaver? stop from continuing.
|
||
|
|
elseif (target:IsWorldBoss() == true) and (player:GetGMRank() == WEAVER_RBAC_ID) then
|
||
|
|
player:SendBroadcastMessage("You cannot command creatures of this rank.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local parameters = {}
|
||
|
|
local parameters = getCommandParameters(command)
|
||
|
|
if parameters[2] ~= nil and tonumber(parameters[2]) ~= nil then
|
||
|
|
target:AddAura(parameters[2], target)
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `" ..command.. "` on target: " ..target:GetName().. ".")
|
||
|
|
return false
|
||
|
|
else
|
||
|
|
-- print help
|
||
|
|
player:SendBroadcastMessage("Syntax: .waura $entry \nAdds $entry as an aura to the target, where $entry is a spell.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .wunaura remove aura from target
|
||
|
|
local function WeaverUnAura(event, player, command)
|
||
|
|
if (command:find("wunaura") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local target = player:GetSelection()
|
||
|
|
if (target == nil) then
|
||
|
|
player:SendBroadcastMessage("You must have a target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:ToCreature() == nil then
|
||
|
|
player:SendBroadcastMessage("You must target a creature.")
|
||
|
|
return false
|
||
|
|
-- is creature a world boss? is the player's account rank weaver? stop from continuing.
|
||
|
|
elseif (target:IsWorldBoss() == true) and (player:GetGMRank() == WEAVER_RBAC_ID) then
|
||
|
|
player:SendBroadcastMessage("You cannot command creatures of this rank.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local parameters = {}
|
||
|
|
local parameters = getCommandParameters(command)
|
||
|
|
if parameters[2] ~= nil and tonumber(parameters[2]) ~= nil then
|
||
|
|
target:RemoveAura(parameters[2])
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `" ..command.. "` on target: " ..target:GetName().. ".")
|
||
|
|
return false
|
||
|
|
elseif parameters[2] == "all" then
|
||
|
|
target:RemoveAllAuras()
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `" ..command.. "` on target: " ..target:GetName().. ".")
|
||
|
|
return false
|
||
|
|
else
|
||
|
|
-- print help
|
||
|
|
player:SendBroadcastMessage("Syntax: .wunaura $entry \nRemoves $entry as an aura to the target, where $entry is a spell. Subcommand all removes all auras.\nall")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .wpossess, lets a weaver possess an npc.
|
||
|
|
local function WeaverPossessAggroCheck(eventid, delay, repeats, creature)
|
||
|
|
if creature:HasAura(530) == false then
|
||
|
|
creature:SetAggroEnabled(true)
|
||
|
|
RemoveEventById( eventid )
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- .wpossess, continued
|
||
|
|
local function WeaverPossess(event, player, command)
|
||
|
|
if (command:find("wpossess") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local target = player:GetSelection()
|
||
|
|
if (target == nil) then
|
||
|
|
player:SendBroadcastMessage("You must have a target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:ToCreature() == nil then
|
||
|
|
player:SendBroadcastMessage("You must target a creature.")
|
||
|
|
return false
|
||
|
|
-- is creature a world boss? is the player's account rank weaver? stop from continuing.
|
||
|
|
elseif (target:IsWorldBoss() == true) and (player:GetGMRank() == WEAVER_RBAC_ID) then
|
||
|
|
player:SendBroadcastMessage("You cannot command creatures of this rank.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:HasAura(530) == true then
|
||
|
|
player:SendBroadcastMessage("This unit is already possessed.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:GetVehicleKit() ~= nil then
|
||
|
|
player:SendBroadcastMessage("You cannot possess mounts/vehicles due to technical limitations.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if (command:find("wpossess") == 1) then
|
||
|
|
player:AddAura(530, target)
|
||
|
|
target:SetAggroEnabled(false)
|
||
|
|
-- gotta set an event to loop so we can know when to toggle aggro back
|
||
|
|
target:RegisterEvent(WeaverPossessAggroCheck, 2000, 0)
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `WPOSSESS` on target: " ..target:GetName().. ".")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
player:SendBroadcastMessage("Syntax: .wpossess \nTake control over the target NPC. Dismiss by right clicking the unit portrait under your own.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
-- emote, say, and yell
|
||
|
|
local function WeaverTextEmote(event, player, command)
|
||
|
|
if (command:find("wtextemote") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local target = player:GetSelection()
|
||
|
|
if (target == nil) then
|
||
|
|
player:SendBroadcastMessage("You must have a target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:ToCreature() == nil then
|
||
|
|
player:SendBroadcastMessage("You must target a creature.")
|
||
|
|
return false
|
||
|
|
-- is creature a world boss? is the player's account rank weaver? stop from continuing.
|
||
|
|
elseif (target:IsWorldBoss() == true) and (player:GetGMRank() == WEAVER_RBAC_ID) then
|
||
|
|
player:SendBroadcastMessage("You cannot command creatures of this rank.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if (command:find("wtextemote ") == 1) then
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `wtextemote` with parameters: " ..command.. " on target: " ..target:GetName().. ".")
|
||
|
|
command = string.gsub(command,"wtextemote ","")
|
||
|
|
target:SendUnitEmote(command)
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
player:SendBroadcastMessage("Syntax: .wtextemote $string \nNarrates any text as an emote from the selected target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local function WeaverSay(event, player, command)
|
||
|
|
if (command:find("wsay") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local target = player:GetSelection()
|
||
|
|
if (target == nil) then
|
||
|
|
player:SendBroadcastMessage("You must have a target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:ToCreature() == nil then
|
||
|
|
player:SendBroadcastMessage("You must target a creature.")
|
||
|
|
return false
|
||
|
|
-- is creature a world boss? is the player's account rank weaver? stop from continuing.
|
||
|
|
elseif (target:IsWorldBoss() == true) and (player:GetGMRank() == WEAVER_RBAC_ID) then
|
||
|
|
player:SendBroadcastMessage("You cannot command creatures of this rank.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if (command:find("wsay ") == 1) then
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `WSAY` with parameters: " ..command.. " on target: " ..target:GetName().. ".")
|
||
|
|
command = string.gsub(command,"wsay ","")
|
||
|
|
target:SendUnitSay(command, 0)
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
player:SendBroadcastMessage("Syntax: .wsay $string \nSpeaks any text from the selected target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local function WeaverYell(event, player, command)
|
||
|
|
if (command:find("wyell") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local target = player:GetSelection()
|
||
|
|
if (target == nil) then
|
||
|
|
player:SendBroadcastMessage("You must have a target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if target:ToCreature() == nil then
|
||
|
|
player:SendBroadcastMessage("You must target a creature.")
|
||
|
|
return false
|
||
|
|
-- is creature a world boss? is the player's account rank weaver? stop from continuing.
|
||
|
|
elseif (target:IsWorldBoss() == true) and (player:GetGMRank() == WEAVER_RBAC_ID) then
|
||
|
|
player:SendBroadcastMessage("You cannot command creatures of this rank.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if (command:find("wyell ") == 1) then
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `WYELL` with parameters: " ..command.. " on target: " ..target:GetName().. ".")
|
||
|
|
command = string.gsub(command,"wyell ","")
|
||
|
|
target:SendUnitYell(command, 0)
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
player:SendBroadcastMessage("Syntax: .wyell $string \nYells any text from the selected target.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
-- toggles invis for weavers
|
||
|
|
local function WeaverInvis(event, player, command)
|
||
|
|
if (command:find("winvis") ~= 1) then
|
||
|
|
return
|
||
|
|
elseif (player:GetGMRank() == 0) then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
if player:IsGMVisible() == true then
|
||
|
|
player:SetGMVisible(false)
|
||
|
|
player:AddAura(37800, player)
|
||
|
|
state = "INVISIBLE"
|
||
|
|
else
|
||
|
|
player:RemoveAura(37800)
|
||
|
|
player:SetGMVisible(true)
|
||
|
|
state = "VISIBLE"
|
||
|
|
end
|
||
|
|
player:SetGameMaster(false)
|
||
|
|
player:SendBroadcastMessage("[Weaver]: You are now " .. state ..".")
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has used command: `WINVIS` with parameters: " ..state.. ".")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
-- send Guild Masters the ToolBarClient button for Weavers
|
||
|
|
local function SendGMButton(event, player)
|
||
|
|
if (player:GetGuildRank() == 0) and (player:GetGuildId() ~= 0) then
|
||
|
|
AIO.Handle(player, "ToolBar4", "ShowGuildMasterButton")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- shows weaver panel and updates text as needed
|
||
|
|
function ToolBarHandlers4.ShowGuildMasterWeaverPanel(player)
|
||
|
|
guild = player:GetGuild()
|
||
|
|
local WeaverQuery8 = WorldDBQuery("SELECT `weaver_character` FROM `weaver_appointed` WHERE `guild` = " ..player:GetGuildId().. ";")
|
||
|
|
if WeaverQuery8 == nil then
|
||
|
|
current_weavers = 0
|
||
|
|
else
|
||
|
|
current_weavers = WeaverQuery8:GetRowCount()
|
||
|
|
end
|
||
|
|
|
||
|
|
guild_count = guild:GetMemberCount()
|
||
|
|
max_weavers = math.floor(guild_count / 5)
|
||
|
|
AIO.Handle(player, "Weaver", "ShowGuildMasterWeaverMenu", current_weavers, max_weavers)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- confirms weaver appointment
|
||
|
|
function WeaverHandlers.WeaverConfirm(player, editbox)
|
||
|
|
local parameters = {}
|
||
|
|
local parameters = getCommandParameters(editbox)
|
||
|
|
parameters[1] = sterilize.generic(parameters[1])
|
||
|
|
if editbox == nil or editbox == "" then
|
||
|
|
player:SendBroadcastMessage("You must input a name.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery12 = CharDBQuery("SELECT `guid` FROM `characters` WHERE `name` = '" ..editbox.. "';")
|
||
|
|
if WeaverQuery12 == nil then
|
||
|
|
player:SendBroadcastMessage("That character does not exist.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery9 = CharDBQuery("SELECT `guid` FROM `guild_member` WHERE `guildid` = " ..player:GetGuildId().. " AND `guid` = " ..WeaverQuery12:GetInt32(0).. ";")
|
||
|
|
if WeaverQuery9 == nil then
|
||
|
|
player:SendBroadcastMessage("You can only appoint players in your guild.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery8 = WorldDBQuery("SELECT `weaver_character` FROM `weaver_appointed` WHERE `guild` = " ..player:GetGuildId().. " AND `weaver_character` = '" ..editbox.. "';")
|
||
|
|
if (WeaverQuery8 ~= nil) then
|
||
|
|
-- player is appointed by guild and in guild. send AIO to confirm demote.
|
||
|
|
AIO.Handle(player, "Weaver", "ConfirmDemote")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery10 = CharDBQuery("SELECT `account` FROM `characters` WHERE `guid` = " ..WeaverQuery9:GetInt32(0).. ";")
|
||
|
|
local account_id = WeaverQuery10:GetInt32(0)
|
||
|
|
print("SELECT `gmlevel` FROM `account_access` WHERE `id` = " ..account_id.. ";")
|
||
|
|
local WeaverQuery11 = AuthDBQuery("SELECT `gmlevel` FROM `account_access` WHERE `id` = " ..account_id.. ";")
|
||
|
|
if WeaverQuery11 ~= nil then
|
||
|
|
print(WeaverQuery11:GetInt32(0))
|
||
|
|
player:SendBroadcastMessage("That player is already appointed to a powerful position, possibly from another guild.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
guild = player:GetGuild()
|
||
|
|
local WeaverQuery8 = WorldDBQuery("SELECT `weaver_character` FROM `weaver_appointed` WHERE `guild` = " ..player:GetGuildId().. ";")
|
||
|
|
if WeaverQuery8 == nil then
|
||
|
|
current_weavers = 0
|
||
|
|
else
|
||
|
|
current_weavers = WeaverQuery8:GetRowCount()
|
||
|
|
end
|
||
|
|
|
||
|
|
guild_count = guild:GetMemberCount()
|
||
|
|
max_weavers = math.floor(guild_count / 5)
|
||
|
|
if (current_weavers >= max_weavers) then
|
||
|
|
player:SendBroadcastMessage("You have reached the maximum amount of weavers you can have. To gain more, recruit more people!")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
AuthDBExecute("INSERT INTO `elunaauth`.`account_access` (`id`, `gmlevel`, `RealmID`) VALUES ('" ..account_id.. "', '" ..WEAVER_RBAC_ID.. "', '" ..REALM_ID.. "');")
|
||
|
|
WorldDBExecute("INSERT INTO `elunaworld`.`weaver_appointed` (`weaver_acc`, `weaver_character`, `weaver_guid`, `guild`, `appointed_by`, `timestamp`) VALUES ('" ..account_id.. "', '" ..editbox.. "', " ..WeaverQuery12:GetInt32(0).. ", '" ..player:GetGuildId().. "', '" ..player:GetName().. "', '" ..tostring(GetGameTime()).. "');")
|
||
|
|
player:SendBroadcastMessage("You have successfully appointed " ..editbox.. " as a weaver.")
|
||
|
|
current_weavers = current_weavers + 1
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has APPOINTED " ..editbox.. " with account ID " ..account_id.. ".")
|
||
|
|
AIO.Handle(player, "Weaver", "UpdateText", current_weavers, max_weavers)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- demote confirmation
|
||
|
|
function WeaverHandlers.WeaverDemote(player, editbox)
|
||
|
|
local parameters = {}
|
||
|
|
local parameters = getCommandParameters(editbox)
|
||
|
|
parameters[1] = sterilize.generic(parameters[1])
|
||
|
|
if editbox == nil or editbox == "" then
|
||
|
|
player:SendBroadcastMessage("You must input a name.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery12 = CharDBQuery("SELECT `guid` FROM `characters` WHERE `name` = '" ..editbox.. "';")
|
||
|
|
if WeaverQuery12 == nil then
|
||
|
|
player:SendBroadcastMessage("That character does not exist.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery9 = CharDBQuery("SELECT `guid` FROM `guild_member` WHERE `guildid` = " ..player:GetGuildId().. " AND `guid` = " ..WeaverQuery12:GetInt32(0).. ";")
|
||
|
|
if WeaverQuery9 == nil then
|
||
|
|
player:SendBroadcastMessage("You can only demote players in your guild.")
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
local WeaverQuery8 = WorldDBQuery("SELECT `weaver_character` FROM `weaver_appointed` WHERE `guild` = " ..player:GetGuildId().. ";")
|
||
|
|
if WeaverQuery8 == nil then
|
||
|
|
current_weavers = 0
|
||
|
|
else
|
||
|
|
current_weavers = WeaverQuery8:GetRowCount()
|
||
|
|
end
|
||
|
|
guild = player:GetGuild()
|
||
|
|
guild_count = guild:GetMemberCount()
|
||
|
|
max_weavers = math.floor(guild_count / 5)
|
||
|
|
|
||
|
|
guild_id = player:GetGuildId()
|
||
|
|
local WeaverQuery10 = CharDBQuery("SELECT `account` FROM `characters` WHERE `guid` = " ..WeaverQuery9:GetInt32(0).. ";")
|
||
|
|
weaver_account = WeaverQuery10:GetInt32(0)
|
||
|
|
WorldDBExecute("DELETE FROM `weaver_appointed` WHERE `guild` = " ..guild_id.. " AND `weaver_character` = '" ..editbox.. "';")
|
||
|
|
AuthDBExecute("DELETE FROM `account_access` WHERE `id` = " ..weaver_account.. " AND `gmlevel` = " ..WEAVER_RBAC_ID.. ";")
|
||
|
|
player:SendBroadcastMessage("You have successfully removed " ..editbox.. " as a weaver.")
|
||
|
|
current_weavers = current_weavers - 1
|
||
|
|
PrintInfo("[Weaver]: " ..player:GetName().. " (Account: " ..player:GetAccountId().. ") has DEMOTED " ..editbox.. " with account ID " ..weaver_account.. ".")
|
||
|
|
AIO.Handle(player, "Weaver", "UpdateText", current_weavers, max_weavers)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- if char deletes, and is weaver, delete that information too.
|
||
|
|
local function WeaverCleanUp(event, guid)
|
||
|
|
local WeaverQuery14 = WorldDBQuery("SELECT `weaver_acc` FROM `weaver_appointed` WHERE `weaver_guid` = " ..guid.. ";")
|
||
|
|
if WeaverQuery14 ~= nil then
|
||
|
|
WorldDBExecute("DELETE FROM `weaver_appointed` WHERE `weaver_guid` = " ..guid.. ";")
|
||
|
|
AuthDBExecute("DELETE FROM `account_access` WHERE `id` = " ..WeaverQuery14:GetInt32(0).. " AND `gmlevel` = 1;")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- demotes a weaver on guild leave
|
||
|
|
-- function ToolBarHandlers4.LeaverWeaver(player)
|
||
|
|
-- guild_id = player:GetGuildId()
|
||
|
|
-- print(guild_id)
|
||
|
|
-- local WeaverQuery13 = WorldDBQuery("SELECT `weaver_character` FROM `weaver_appointed` WHERE `guild` = " ..guild_id.. " AND `weaver_character` = '" ..player:GetName().. "';")
|
||
|
|
-- if WeaverQuery13 == nil then
|
||
|
|
-- return false
|
||
|
|
-- end
|
||
|
|
--
|
||
|
|
-- print("DELETE FROM `weaver_appointed` WHERE `guild` = " ..guild_id.. " AND `weaver_character` = '" ..player:GetName().. ";")
|
||
|
|
-- print("DELETE FROM `account_access` WHERE `id` = " ..player:GetAccountId().. " AND `gmlevel` = " ..WEAVER_RBAC_ID.. ";")
|
||
|
|
-- WorldDBExecute("DELETE FROM `weaver_appointed` WHERE `guild` = " ..guild_id.. " AND `weaver_character` = '" ..player:GetName().. "';")
|
||
|
|
-- AuthDBExecute("DELETE FROM `account_access` WHERE `id` = " ..player:GetAccountId().. " AND `gmlevel` = " ..WEAVER_RBAC_ID.. ";")
|
||
|
|
-- print("deleted")
|
||
|
|
-- end
|
||
|
|
|
||
|
|
|
||
|
|
RegisterPlayerEvent(42, WeaverComeToMe)
|
||
|
|
RegisterPlayerEvent(42, WeaverChat)
|
||
|
|
RegisterPlayerEvent(42, WeaverBuff)
|
||
|
|
RegisterPlayerEvent(42, WeaverPossess)
|
||
|
|
RegisterPlayerEvent(42, WeaverAura)
|
||
|
|
RegisterPlayerEvent(42, WeaverUnAura)
|
||
|
|
RegisterPlayerEvent(42, WeaverTextEmote)
|
||
|
|
RegisterPlayerEvent(42, WeaverEmote)
|
||
|
|
RegisterPlayerEvent(42, WeaverSay)
|
||
|
|
RegisterPlayerEvent(42, WeaverYell)
|
||
|
|
RegisterPlayerEvent(42, WeaverObjectAdd)
|
||
|
|
RegisterPlayerEvent(42, WeaverObjectDel)
|
||
|
|
RegisterPlayerEvent(42, WeaverNPCAdd)
|
||
|
|
RegisterPlayerEvent(42, WeaverNPCDel)
|
||
|
|
RegisterPlayerEvent(42, WeaverSpawns)
|
||
|
|
RegisterPlayerEvent(42, WeaverInvis)
|
||
|
|
RegisterPlayerEvent(3, SendGMButton)
|
||
|
|
RegisterPlayerEvent(2, WeaverCleanUp)
|