ElvUI WindTools

ElvUI WindTools

3M Downloads

建议右键增强添加战网好友功能

Fr33raNg3r opened this issue · 2 comments

commented

目前只有邀请入会等,但是长期用到的会是添加战网好友,希望作者添加。

commented

我先给出结论:这个功能在聊天面板中不可实现。
原因是:
首先去看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,那么插件只有在该单位可以被遍历到的情况下,才能将nameunitId匹配对应(例如这个单位是你的队友、竞技场或战场或副本首领战斗敌对目标、屏幕上显示的姓名版的目标),类似Brute-force attack。如果该单位退出了你的队伍,不在你的屏幕上显示的姓名版中等等,就不能获取到unitId了。因此像聊天框的名字这种就没办法(保证一定能)获取到它对应的unitId,也就无法调用函数去添加战网好友。

换言之,如果插件可以通过穷举的方式遍历到unitId,那么该单位也一定能通过鼠标右键点击它的头像,也就能直接通过UIDROPDOWNMENU_INIT_MENU.unit来获取unitId了。

commented

这是FrameXML中邀请公会的代码,相关函数为

GuildInvite(GetUnitName("target", true))

这个函数接受name的输入,所以可以在聊天框的右键菜单中添加邀请公会的功能。