魔兽世界LUA插件开发

魔兽世界LUA插件开发

1.创建插件

1.1 创建插件文件夹

打开World of Warcraft\Interface\AddOns文件下,在该文件夹下创建一个插件名文件夹用来存放插件,如Makubex

1.2 创建插件文件

在该文件夹下创建俩个文件,一个是用来给魔兽世界引入的toc头文件,一个是你自己的lua脚本文件

1.3 toc头文件makubex.toc

## Interface: 11200
## Title: Makubex
## Version: 1.19
## Notes: 脚本叫什么就引入什么
Makubex.lua 

1.4 lua脚本文件makubex.lua

print("helloworld")

2.创建斜杠命令

2.1 声明方法

在lua脚本中写一个方法

function test()
	print("helloworld")
end

注册斜杆命令,其中的XXXX可以替换成任何变量名,用来后续绑定方法

SLASH_XXXX1 = "/aaa"

绑定方法,上面的XXXX填进来

SlashCmdList["XXXX"] = test

这时在游戏打/aaa就会触发test方法了,成品lua

function test()
	print("helloworld")
end

SLASH_XXXX1 = "/aaa"
SlashCmdList["XXXX"] = test

3.调用API示例

3.1 发消息API

SendChatMessage(msg[,chatType,languageID,target])
chatType:消息类型
"SAY" - 附近玩家(1)
"YELL" - 大喊(1)
"PARTY" - 小队
"RAID" - 团队
"RAID_WARNING" - 团队警告
"WHISPER" - 密语
"CHANNEL" - 频道(1)
.....
languageID:语言ID可填nil空
target:目标可填nil空

调用发消息API

输入/aaa,触发test方法,调用SendChatMessage在附近玩家频道说helloword

function test()
	SendChatMessage("helloword", "SAY", nil, nil)
end

SLASH_XXXX1 = "/aaa"
SlashCmdList["XXXX"] = test

输入/aaa,触发test1方法,调用SendChatMessage在附近玩家频道说helloword

输入/bbb,触发test2方法,调用SendChatMessage在大喊频道说helloword

function test1()
	SendChatMessage("helloword", "SAY", nil, nil)
end

function test2()
	SendChatMessage("helloword", "YELL", nil, nil)
end

SLASH_XXXX1 = "/aaa"
SlashCmdList["XXXX"] = test1
SLASH_TTTT1 = "/bbb"
SlashCmdList["TTTT"] = test2

3.2 框体API

frame = CreateFrame(frameType[,name,parent,template,id])
frame:SetSize(x,y)
frame:SetPoint("",[...])
/fstack
frame:SetBackdrop({
	bgFile = "bgFile",//"Interface\\Tooltips\\UI-Tooltip-Background"
	edgeFile = "edgeFile",//"Interface\\Tooltips\\UI-Tooltip-Border"
	edgeSize = 0
	insets = { left = 0, right = 0, top = 0, bottom = 0 }
})
frame:SetBackdropColor(r,g,b,a)
frame:SetBackdropBorderColor(r,g,b,a)
frame:Show()
frame:Hide()
UIParent

调用框体API

创建一个框体对象给aaa变量保存

aaa = CreateFrame("Frame","第一个框体",nil)

设置框体大小

aaa:SetSize(300,300)

设置位置居中

aaa:SetPoint("CENTER")

在游戏中查看框体信息

/fstack

设置边框样式

aaa:SetBackdrop({
	bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
	edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
	edgeSize = 10
})

设置背景颜色

aaa:SetBackdropColor(1,0,0,0.5)

设置边框颜色

aaa:SetBackdropBorderColor(0,0,1,1)

显示窗口

SLASH_SHOW1 = "/sss"
SlashCmdList["SHOW"] = function()
	aaa:Show()
end

隐藏窗口

SLASH_HIDE1 = "/ddd"
SlashCmdList["HIDE"] = function()
	aaa:Hide()
end

成品lua

aaa = CreateFrame("Frame", "第一个框体", nil)
aaa:SetSize(300, 300)
aaa:SetPoint("CENTER")
aaa:SetBackdrop({
	bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
	edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
	edgeSize = 10
})
aaa:SetBackdropColor(1, 0, 0, 0.5)
aaa:SetBackdropBorderColor(0, 0, 1, 1)

SLASH_SHOW1 = "/sss"
SlashCmdList["SHOW"] = function()
	aaa:Show()
end
SLASH_HIDE1 = "/ddd"
SlashCmdList["HIDE"] = function()
	aaa:Hide()
end

3.3 返回生命值API

UnitHealth(unitID)

调用返回生值API

aaa = UnitHealth("player")
print(aaa)

循环读取生命值,如果生命值小于400,则打印生命并退出循环

(不建议使用这种方法,因为会造成卡死,建议用事件API)

while 1 do
	if UnitHealth("player") <= 400 then
		print(UnitHealth("player"))
		return
	end
end

3.4 事件API

生命值发生变化事件API

UNIT_HEALTH:unitTarget

进入战斗状态事件API

PLAYER_REGEN_DISABLED

退出战斗状态事件API

PLAYER_REGEN_ENABLED

注册事件API


frame:RegisterEvent(event)

事件触发函数API

frame:SetScript(event,handler)

调用事件API

事件触发函数调用的时候会把框体对象当做参数传进来交给y,发生的子事件会交给总事件OnEvent,OnEvent传给event参数,…事件的对象,如UNIT_HEALTH(“player”),那么…就等于player

如果事件等于生命值改变,则把对象赋值给ccc,如果ccc生命值小于400,则打印输出400

function xxx(y, event, ...)
	if event == "UNIT_HEALTH" then
		local ccc = ...
		if UnitHealth("player") <= 400 then
			print("生命小于400")
		end
	end
end

aaa = CreateFrame("Frame")
aaa:RegisterEvent("UNIT_HEALTH")
aaa:SetScript("OnEvent", xxx)

调用进入战斗退出战斗事件

function xxx(y, event)
	if event == "PLAYER_REGEN_DISABLED" then
		print("进入战斗")
	elseif event == "PLAYER_REGEN_ENABLED" then
		print("退出战斗")
	end
end

aaa = CreateFrame("Frame")
aaa:RegisterEvent("PLAYER_REGEN_DISABLED")
aaa:RegisterEvent("PLAYER_REGEN_ENABLED")
aaa:SetScript("OnEvent", xxx)

调用被怪物打日志事件

可以只接收要的返回值,不需要的直接_代替

function xxx(y, event, ...)
	if event == "COMBAT_LOG_EVENT_UNFILTERED" then
		local _, bbb, _, _, sender, _, _, _, name, _, _, _, SpellName = CombatLogGetCurrentEventInfo()
		if (bbb == "SPELL_AURA_APPLIED") and (name == "厄运小王子") then
			print(1)
			print(sender .. "->" .. name .. "(" .. SpellName .. ")")
			print(2)
		end
		print(CombatLogGetCurrentEventInfo())
	end
end

aaa = CreateFrame("Frame")
aaa:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
aaa:SetScript("OnEvent", xxx)
print("end")
  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xMakubex

各位赏口饭吃吧!1分也是爱!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值