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

199 lines
5 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--[[作者信息:
Command Extra (游戏命令扩展)
作者QQ247321453
作者Email247321453@qq.com
修改日期2014-3-12
功能添加额外的命令、GM命令
机器人仅支持带机器人的端
CREATE TABLE IF NOT EXISTS `character_npcbot` (
`owner` int(10) NOT NULL,
`entry` int(10) NOT NULL DEFAULT '0',
`active` int(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`owner`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
]]--
print(">>Script: Command Extra.")
--[[
.wmsg 内容 GM发送世界消息
.be 查看机器人装备
.npcbot equips 查看机器人装备
.me 发送玩家装备
.my equips 发送玩家装备
.rh GM回复生命
.reset hp GM回复生命
.gh 传送回家
.go home 传送回家
.卡 传送回家
]]--
local CLASS={--职业号
WARRIOR = 1, --战士
PALADIN = 2, --圣骑士
HUNTER = 3, --猎人
ROGUE = 4, --盗贼
PRIEST = 5, --牧师
DEATH_KNIGHT = 6, --死亡骑士
SHAMAN = 7, --萨满
MAGE = 8, --法师
WARLOCK = 9, --术士
DRUID = 11, --德鲁伊
}
local ClassName={--职业表
[CLASS.WARRIOR] ="战士",
[CLASS.PALADIN] ="圣骑士",
[CLASS.HUNTER] ="猎人",
[CLASS.ROGUE] ="盗贼",
[CLASS.PRIEST] ="牧师",
[CLASS.DEATH_KNIGHT]="死亡骑士",
[CLASS.SHAMAN] ="萨满",
[CLASS.MAGE] ="法师",
[CLASS.WARLOCK] ="术士",
[CLASS.DRUID] ="德鲁伊",
}
local function GetPlayerInfo(player)--得到玩家信息
local Pclass = ClassName[player:GetClass()] or "???" --得到职业
local Pname = player:GetName()
local Pteam = ""
local team=player:GetTeam()
if(team==TEAM_ALLIANCE)then
Pteam="|cFF0070d0联盟|r"
elseif(team==TEAM_HORDE)then
Pteam="|cFFF000A0部落|r"
end
return string.format("%s%s玩家[|cFF00FF00|Hplayer:%s|h%s|h|r]",Pteam,Pclass,Pname,Pname)
end
local function ShowAllEquip(player, isworld)
local ts=os.date("*t",time)
local t=string.format("%2d:%2d:%2d",ts.hour,ts.min,ts.sec)
local Pinfo=GetPlayerInfo(player)
local head=string.format("[世界] |cFFF08000%s|r %s 说: ",t,Pinfo)
if(isworld)then
SendWorldMessage(head.."大家看我的装备。")
else
player:Say(head.."大家看我的装备。",0)
end
for i=0,18 do
local item=player:GetEquippedItemBySlot(i)
if(item)then
if(isworld)then
SendWorldMessage(head..item:GetItemLink())
else
player:Say(head..item:GetItemLink(),0)
end
end
end
end
local function ShowBotEquip(player)--查看机器人装备
local guid=player:GetGUIDLow()--得到玩家的guid
local target=player:GetSelection()--得到玩家选中对象
local text=""
if(target)then
if(target:GetTypeId()==3)then--目标是生物
local Q = CharDBQuery("SELECT * FROM character_npcbot Where owner="..guid.." and entry="..target:GetEntry().." and active=1")
--player:Say("me: "..guid.." target:"..target:GetEntry(),0)
if(Q)then--查到相应的信息
text=target:GetName().."的装备:\n"
for i=5,22 do
local item=Q:GetUInt32(i)--读取内容
if(item and item >0)then
text=text..GetItemLink(item).." "
target:SendUnitWhisper(GetItemLink(item),player)--向玩家悄悄话
end
end
--target:SendUnitSay(text,0)
else
player:Say("没有找到机器人,或者没有选中机器人",0)
end
else
player:Say("请选中一个机器人。",0)
end
else
player:Say("请选中一个机器人。",0)
end
return text
end
local function ResetHP(player)
if(player:GetGMRank()>=3)then--判断是不是GM
player:SetHealth(player:GetMaxHealth())
player:SendBroadcastMessage("已经回复生命。")
return false
else
return true
end
end
local function Start(player)
player:CastSpell(player,8690,true)
player:ResetSpellCooldown(8690, true)
player:SendBroadcastMessage("已经回到家")
end
local CMD={
["go home"]=function(player)
Start(player)
end,
["gh"]=function(player)
Start(player)
end,
[""]=function(player)
Start(player)
end,
["wmsg"]=function(player,msg)
if(player)then
if(player:GetGMRank()>=3)then
SendWorldMessage(string.format("|cFFFF0000[系统]|r|cFFFFFF00%s|r",msg))
end
else
SendWorldMessage(string.format("|cFFFF0000[系统]|r|cFFFFFF00%s|r",msg))
end
end,
["be"]=function(player)--机器人装备
ShowBotEquip(player)
return false
end,
["npcbot equips"]=function(player)--机器人装备
ShowBotEquip(player)
return false
end,
["reset hp"]=function(player)--GM回复生命
ResetHP(player)
end,
["rh"]=function(player)--GM回复生命
ResetHP(player)
end,
["me"]=function(player)--发送玩家装备
ShowAllEquip(player, true)
end,
["my equips"]=function(player)--发送玩家装备
ShowAllEquip(player, true)
end,
}
function CMD.Input(event, player, command)
local cmd,space,excmd=command,command:find(" ") or 0,""
if(space>1)then
cmd=command:sub(1,space-1)--主命令
excmd=command:sub(space+1)--额外命令参数
end
local func=CMD[cmd]--用输入的命令去查找函数
if(func)then
return func(player,excmd) or false
end
end
--PLAYER_EVENT_ON_COMMAND = 42 -- (event, player, command) - Can return false
RegisterPlayerEvent(42,CMD.Input)