建议右键增强添加战网好友功能
Fr33raNg3r opened this issue · 2 comments
我先给出结论:这个功能在聊天面板中不可实现。
原因是:
首先去看FrameXML中添加战网好友的功能实现的代码,其中用到了BNCheckBattleTagInviteToUnit(unit)
这个函数。而这个函数是只接受unitId
的输入的。
而后我们再去游戏里面看相关的Dump信息,右击某个玩家的头像,输入下面的指令(保持右键菜单开启)
/dump UIDROPDOWNMENU_INIT_MENU.unit,UIDROPDOWNMENU_INIT_MENU.name
应该能看到
Dump: value=UIDROPDOWNMENU_INIT_MENU.unit,UIDROPDOWNMENU_INIT_MENU.name
[1]="target",
[2]="蓝猫超淘气"
而如果右击聊天菜单的姓名,再输入一遍指令,能看到
Dump: value=UIDROPDOWNMENU_INIT_MENU.unit,UIDROPDOWNMENU_INIT_MENU.name
[2]="蓝猫超淘气"
UIDROPDOWNMENU_INIT_MENU.unit
值为nil
如果我们只知道name
而不知道unitId
,那么插件只有在该单位可以被遍历到的情况下,才能将name
和unitId
匹配对应(例如这个单位是你的队友、竞技场或战场或副本首领战斗敌对目标、屏幕上显示的姓名版的目标),类似Brute-force attack。如果该单位退出了你的队伍,不在你的屏幕上显示的姓名版中等等,就不能获取到unitId
了。因此像聊天框的名字这种就没办法(保证一定能)获取到它对应的unitId
,也就无法调用函数去添加战网好友。
换言之,如果插件可以通过穷举的方式遍历到unitId
,那么该单位也一定能通过鼠标右键点击它的头像,也就能直接通过UIDROPDOWNMENU_INIT_MENU.unit
来获取unitId
了。
这是FrameXML中邀请公会的代码,相关函数为
GuildInvite(GetUnitName("target", true))
这个函数接受name
的输入,所以可以在聊天框的右键菜单中添加邀请公会的功能。