WOW战场报新场宏实现(以及该插件实现研究)

WOW战场报新场宏实现(以及该插件实现研究)不用插件的只用一个宏:/run空格JoinBattlefield(0)打开战场npc,然后等喊排时点这个宏排队,这样排队的战场列表不会消失,等出场时,如果列表里没有你出的场就是新场.有的话就是老场了/**************************************************************************************************

不用插件的只用一个宏:/run空格JoinBattlefield(0)打开战场npc ,然后等喊排时点这个宏排队,这样排队的战场列表不会消失,等出场时,如果列表里没有你出的场就是新场.有的话就是老场了

/**************************************************************************************************8888*/

【插件说明】

  战场国家队插件BattleInfo主要功能是报新场,最适合奥山团排,其他战场配合dbm能达到所有战场插件的效果。

/bi 或 /battleinfo 来设置比分栏的命令:

  /bi center 设置到屏幕中央

  /bi top 设置到默认位置

7月20日更新:

1、增加了按键邦定功能,设置可以在 ESC菜单 绑定按键中找到;

2、bug修正

  — 如果用户加载了QuestRepeat Bi的自动交牌子功能会自惭形秽的关闭

  — 取消了打开排队窗口时 ctrl 排队

  — 修成了一个不常见的Titan兼容问题

  — 修正了好久好久以前遗留的不常见

7月11日更新:

修正回车不能加入bug

7月11日更新:

v1.41 svn r48

根据 单翼天使 的反馈 修改了收回快捷窗的方式

快捷窗消失原因打字了

现在删除了打字关闭对 话框的功能

按”>”后变成 1.40 的工作方式

v1.41 svn r47

根据Juha的建议

修改的快速排队的出现方式

现在大家可以通过”>”来调用快速排队界面

快速排队界面默认关闭再也不会影响到打字了

另外ctrl+npc那句话也改为白色方便阅读

7月5日更新:

修正了按回车键不影响正常聊天;

6月29日更新:

1 与SSPVP兼容

现在同时使用BI和SSPVP也可以看到新旧场次了

sspvp和bi有些交集功能 关闭注意关闭两个

2 快速排队界面调整

快速排队界面作了调整 有了小队快速加入功能

3 奥山开战前有了比分栏

这个市Blz bug 我代为修正 现在奥山战斗不开始也能看到比分栏使人数一目了然

4 新旧场提示调整

增加一个可能的提示

由于网络延迟 有些人提示新 有喜人提示旧 最后导致坑的出现

现在对于刚刚变成旧场的场次 有了一个新的称号 可能

5月19日更新:

1、增加一个离场时候的计算功能。计算你进入战场到战斗结束的时间;你在在场中一共获得多少荣誉;这将帮助你更好选择队伍;

2、增加一个屏蔽战斗结束时候离队信息的功能。默认是关闭的,/bi 开启之后,战斗结束后就不会有烦人的XX离开团队了;

3、倒计时被移动到按钮上防止刷屏;

5月17日更新:

纠正一个打开关闭地图时候引起新旧重复的bug

5月13日更新:

1 添加 输出到当前聊天 解决 密语 和 各种怪异频道的要求

2 添加 输出到输入框 使灵活性更大 方便复制粘贴

4月19日更新:

1 增加了一个图形设置界面 移除了陈旧的命令行设置方式

2 自动离开战场增加了一个开关

3 显示帮助信息增加了一个开关

4 修改比分栏重置方式以修正与Titan冲突问题 (看不见就/bi重置下 一般就能看见了)

5 所有的语言信息被重新制作以防止未知冲突

6 修正非战场时报告的问题

7 修正一个可能引发新旧场报告错误的bug

8 全新的定向报告方式可以方便的定位到各频道

9 解决部落用户无法使用自动交牌自功能

10 修正自己交牌子时候提示交牌子完成的bug

建议删除/addons下原来的battleinfo目录 再安装

原来的用户配置没有跟随升级 请/bi重新设置

繁体中文配置文件需要彻底更新

4月7日更新:

1 增加了一个自动化模块 这个模块包括

* CTRL+NPC自动排队

* 自动释放灵魂

* 战斗结束3秒自动退场

目前只有 自动释放灵魂设有开关 /bi norel

2 修正灵魂医者计时器字体过大问题

3 调整灵魂医者计时器

* 我发现灵魂医者 复活不是统一时间的 而且间断的周期 在奥山要比其他战场稍微长些

4月6日更新:

1 加入了一个灵魂医者复活计时 可以让你方便了知道什么时候释放尸体

2 代码重构 现在BattleInfo被按模块封装起来 任何人都可以通过简单的代码调用BattleInfo的功能 轻松完成2次开发

3 灵敏性再一次被提高 不会出现提示人数与实际人数不符了

4 本地化模块被分离出来 自带了一个不太完整的 繁体中文模块 这个模块是参考 nnjack512 制作的BI v0.44繁体中文版制作的

5 参考了gzkuru修改版BI添加了搜索新场功能

6 现在默认的提示会告诉你是不是国家队而不是一个服务器的名字

7 奥特兰克山谷现在也像其他战场一样提示是否是国家队了

4月3日更新:

1 新增 自动提交牌子功能 大家可以输入/bi x=? 来交牌子 当然用鼠标点开NPC还是不能避免的 但是工作量也大大减少

2 更新TOC 适应2.4

3 修正了一个引起场次可能不被报告的bug

v0.44 更新说明 2008-2-14

增加ctrl+进入战场不向团队发送新场。自己没有排到需要重排的时候,就不会向团队发送错误信息了

取消将比分牌移动到屏幕中间和玩家头像下方命令,改以ctrl+拖动改变比分牌位置。新的位置能够被保存。

解决本插件一直以来每次进入游戏,比分牌位置与头像重叠bug

解决非战场区域,比分牌与头像重叠bug

去除非战场区域,比分牌前面的“?”

将按着ctrl不发送信息改为按着ctrl键才向团队发送

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

【作者专区】

  作为国内最大和最早的中文魔兽世界插件网站之一,本站欢迎各位魔兽世界插件爱好者发布原创和汉化的优秀插件,并作为稳定的发布页面。插件发布Email:iqq800@gmail.com。所有经测试认证的发布插件都将在本站首页作者专区推荐下载!

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

【本站说明】

1.插件下载后解压缩到World of Warcraft 目录里Interface文件夹下 AddOns目录里。

2.如下载的插件包内有任何不明.EXE文件,请不要执行。应立即用新版杀毒软件查杀。

3.下载插件请到正规专题网站下载,以防资料被盗。本站所有插件均已通过安全性测试。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

                                         『魔兽世界插件中文站团队』于江苏常州

/*******************************************************************************************/

## Interface: 20400

## Title: BattleInfo V 1.42

## Notes: 战场详情指示器 by T.G.(farmer1992@gmail.com)

## SavedVariablesPerCharacter: BattleInfoDB

localization/localization.lua

localization/enUS.lua

localization/zhCN.lua

localization/zhTW.lua

BattleInfo.xml

mod/common.lua

mod/server.lua

mod/newbattle.lua

mod/quest.lua

mod/auto.lua

mod/option.lua

mod/av.lua

mod/binding.lua

BattleInfo.lua

/********************************************************************************************/

local L=BATTLEINFO_LOACALE

local biS=BattleInfo_Server:New()

local biNF=BattleInfo_NewBattleFinder:New()

local biQ=BattleInfo_Quest:New()

local biA=BattleInfo_AutoExeC:New()

function BattleInfo_ReportTo(tostr)

    if BattleInfo_InBattle() then

        local tstr={strsplit(“*”, biS:Report())}

       

        for i in pairs(tstr) do 

            SendChatMessage(tstr[i],tostr)

        end

    end

end

–国家队分析Hook的callbak

function BattleInfo_Update()

    BattleInfo1Text:SetText(“”)

    BattleInfo0Text:SetText(“”)

    BattleInfoSHText:SetText(“”)

   

    if AlwaysUpFrame1Text then

        BattleInfo1:SetParent(“AlwaysUpFrame1”)

        BattleInfo1:SetPoint(“RIGHT”, “AlwaysUpFrame1Text”, “LEFT”, -8, 0)

        BattleInfo1:Show()

       

        BattleInfoSH:SetParent(“AlwaysUpFrame1”)

        BattleInfoSH:SetPoint(“RIGHT”, “AlwaysUpFrame1Text”, “LEFT”, -8, 20)

       

        BattleInfoSH:Hide()

       

        if BattleInfo_InBattle() then

            BattleInfo1Text:SetText(biS.data[1].num)

            BattleInfo1Text:SetTextColor(biS.data[1].color.r,biS.data[1].color.g,biS.data[1].color.b)

            AlwaysUpFrame1.tooltip=biS.data[1]:GetTooltip()

            x=biS:GetAreaSpiritHealerTime()

            if x then

                BattleInfoSHText:SetText(x)

                BattleInfoSH:Show()               

            end

        else

            biS.timesh=nil

        end

    end

    if AlwaysUpFrame2Text then

        BattleInfo0:SetParent(“AlwaysUpFrame2”)

        BattleInfo0:SetPoint(“RIGHT”, “AlwaysUpFrame2Text”, “LEFT”, -8, 0)

        BattleInfo0:Show()

       

        if BattleInfo_InBattle() then

            BattleInfo0Text:SetText(biS.data[0].num)

            BattleInfo0Text:SetTextColor(biS.data[0].color.r,biS.data[0].color.g,biS.data[0].color.b)

            AlwaysUpFrame2.tooltip=biS.data[0]:GetTooltip()

        end

    end

   

end

local Keyin=””

function BattleInfo_OnKey(k)

        if k==”ENTER” then

            BattleInfo_QS()

        –elseif k==”LCTRL” or k==”RCTRL” then

        —    BattlefieldFrameJoinButton_OnClick()

        elseif k==nil then

            Keyin=””

        elseif k==”BACKSPACE” or k==”NUMPADMINUS” then

            Keyin=string.sub(Keyin,1,-2) or “”               

        elseif k==”NUMPADPLUS” then

            Keyin=Keyin==”” and “0” or Keyin

            BattleInfo_QS(CanJoinBattlefieldAsGroup() and IsPartyLeader())   

        elseif k==”DELETE” or k==”NUMPADDECIMAL” then

            Keyin=””

        elseif k==”ESCAPE” then

            HideUIPanel(BattlefieldFrame)

        else

            local _,_,x,_ =strfind(k,”.*(%d+)”)

            if x and string.len(Keyin)<3 then

                Keyin=Keyin..x

            else

            end

        end

           

        BIQuickSortTip:SetOwner(BIQuickSort, “ANCHOR_RIGHT”,-50);

        BIQuickSortTip:AddLine(string.format(L.QUICKJOINTIP,Keyin))

        BIQuickSortTip:Show()

end

function BattleInfo_QS(t)

    if Keyin==”” then

        return

    elseif Keyin==”0″ then

        JoinBattlefield(0,t)

        BattleInfo_Print(string.format(L.QUICKJOIN,L.QUICKJOIN_FIRST))

        BattleInfo_OnKey()

        return

    else

        for i=1, GetNumBattlefields()  do

            if Keyin == GetBattlefieldInstanceInfo(i) ..”” then

                JoinBattlefield(i,t)

                BattleInfo_Print(string.format(L.QUICKJOIN,Keyin))

                BattleInfo_OnKey()

                return

            end

        end

    end

    BattleInfo_Print(string.format(L.QUICKJOIN_CANTFIND,Keyin))

    BattleInfo_OnKey()

end

local QsShow=nil;

local keyupf=function() BattleInfo_OnKey(arg1) end

local eventf=function() BattleInfo_OnKey() end

function BattleInfo_QsShowHide(force,fv)

    if force then

        QsShow= fv

    else

     QsShow=not QsShow

    end

   

    if QsShow then

        BIQuickSortShowHide:SetNormalTexture(“Interface//Buttons//UI-SpellbookIcon-PrevPage-Up”)

        BIQuickSortShowHide:SetPushedTexture(“Interface//Buttons//UI-SpellbookIcon-PrevPage-Down”)

        BIQuickSortShowHide:SetDisabledTexture(“Interface//Buttons//UI-SpellbookIcon-PrevPage-Disabled”)

        BIQuickSort:SetScript(“OnKeyUp”,keyupf)

        BIQuickSort:SetScript(“OnEvent”,eventf)

        BattleInfo_OnKey()       

    else

        BIQuickSortShowHide:SetNormalTexture(“Interface//Buttons//UI-SpellbookIcon-NextPage-Up”)

        BIQuickSortShowHide:SetPushedTexture(“Interface//Buttons//UI-SpellbookIcon-NextPage-Down”)

        BIQuickSortShowHide:SetDisabledTexture(“Interface//Buttons//UI-SpellbookIcon-NextPage-Disabled”)

        BIQuickSort:SetScript(“OnKeyUp”,nil)

        BIQuickSort:SetScript(“OnEvent”,nil)

        BIQuickSortTip:Hide()

    end

end

— 参考 Talented

local function getChatWrite(tostr)

    local edit = DEFAULT_CHAT_FRAME.editBox

    local SendChatMessage = SendChatMessage

    local type = edit:GetAttribute(“chatType”)

    local lang = edit.language

   

    if tostr~=nil then

        return function (text, …)

            SendChatMessage(text, tostr, lang, channel)

        end

    end

   

    if type == “WHISPER” then

        local target = edit:GetAttribute(“tellTarget”)

        return function (text, …)

            if text:find(“%”, 1, true) then text = text:format(…) end

            SendChatMessage(text, type, lang, target)

        end

    elseif type == “CHANNEL” then

        local channel = edit:GetAttribute(“channelTarget”)

        return function (text, …)

            if text:find(“%”, 1, true) then text = text:format(…) end

            SendChatMessage(text, type, lang, channel)

        end

    else

        return function (text, …)

            if text:find(“%”, 1, true) then text = text:format(…) end

            SendChatMessage(text, type, lang)

        end

    end

end

function BattleInfo_SCan()

    local mapName= GetBattlefieldInfo()

    local t={}

    for i=1, GetNumBattlefields()  do

        instanceID = GetBattlefieldInstanceInfo(i)

        table.insert(t,instanceID)

    end

   

    table.sort(t)   

   

    local write=getChatWrite(“SAY”)

   

    if biNF.sayto==L.SELF then

        BattleInfo_Print(string.format(L.HINT3,mapName))

        BattleInfo_Print(“|CFF00FF00″..biNF:FindNew(t)..”|r”)

        BattleInfo_Print(L.HINT1,1)

    elseif biNF.sayto==L.CHATBOX then

        DEFAULT_CHAT_FRAME.editBox:SetText(DEFAULT_CHAT_FRAME.editBox:GetText()..biNF:FindNew(t))

        DEFAULT_CHAT_FRAME.editBox:Show()

    else

        if biNF.sayto==L.YELL  then

            write=getChatWrite(“YELL”)

        elseif biNF.sayto==L.RAID or biNF.sayto==L.PARTY then

            if UnitInRaid(“player”) then

                write=getChatWrite(“RAID”)

            elseif UnitInParty(“player”) then

                write=getChatWrite(“PARTY”)

            else

                BattleInfo_Print(L.HINT2,1)

            end           

        elseif biNF.sayto==L.CURRENT then

            write = getChatWrite()

        end

       

        write(string.format(L.HINT3,mapName))

        write(biNF:FindNew(t))

    end

end

function BattleInfo_Reset()

        BattleInfoParent:ClearAllPoints()

        BattleInfoParent:SetPoint(“TOP”, “UIParent”, “TOP”,-5,-15)

        WorldStateAlwaysUpFrame:ClearAllPoints()

        WorldStateAlwaysUpFrame:SetPoint(“TOPLEFT”,”BattleInfoParent”,”TOPLEFT”,0,0)

end

function BattleInfo_Command(msg)

        local _,_,x,_ =strfind(msg,”x=(%d+)”)

        x=tonumber(x)

        if x then

            if x>=0 and x<=100 then

                BattleInfo_Print(string.format(L.MARKINIT,x))

                biQ.pMax=x

            else

                BattleInfo_Print(L.MARKERR)

            end

        elseif msg==”titan” then

            BattleInfoDB.titanpatch=not BattleInfoDB.titanpatch

            BattleInfo_Print(“Moving patch is now “..(BattleInfoDB.titanpatch and “on” or “off”)..” Reload UI (/console reloadui)”)

        else

            InterfaceOptionsFrame_OpenToFrame(“BattleInfo”)

        end

end

local function BattleInfo_Apply()

        biNF.selfsay=BattleInfoDB.selfsay

        biNF.sayto=BattleInfoDB.sayto

        biA.autorelease=BattleInfoDB.autorelease

        biA.autoleave=BattleInfoDB.autoleave

        biA.leavetime=BattleInfoDB.leavetime

        biA.stat=BattleInfoDB.showstat

        biA.igleft=BattleInfoDB.igleft

end

function BattleInfo_OnLoad()

    biS:Hook(BattleInfo_Update)

    biNF:Hook(BattleInfo_SCan)

    if not IsAddOnLoaded(“QuestRepeat”) then

      biQ:Hook()

    end

   

    biA:Hook()

   

    BattleInfoDBDefault=

    {

        sayto=L.SELF,

        leavetime=3,       

    }

   

    BattleInfoDB=BattleInfoDB or {

        showhelp=1,

        selfsay=1,

        autorelease=1,

        autoleave=1,

        showstat=1,

        igleft=nil,

    }

   

    for i,v in pairs(BattleInfoDBDefault) do

            BattleInfoDB[i]= BattleInfoDB[i] or v

    end

   

    BIOption:Hook(BattleInfo_Apply)

    BattleInfo_Apply()

    BattleInfo_QsShowHide(1)

    SlashCmdList[“BATTLEINFO”] = BattleInfo_Command;

    SLASH_BATTLEINFO1 = “/BATTLEINFO”;

    SLASH_BATTLEINFO2 = “/BI”;

   

    –titan and other WorldStateAlwaysUpFrame moving ui patch

    if BattleInfoDB.titanpatch then

        hooksecurefunc(WorldStateAlwaysUpFrame,”SetPoint”,function(…)

            local _,_,l=…;

            if l~=”BattleInfoParent” then

                WorldStateAlwaysUpFrame:SetPoint(“TOPLEFT”,”BattleInfoParent”,”TOPLEFT”,0,0)

            end

        end)

    end

end

/*******************************************************************************************/

#下面是报WOW战场新场关键代码

/*******************************************************************************************/

local L=BATTLEINFO_LOACALE

local BINewBattle={}

function BINewBattle:New()

    local x={}

    x.OldBT={}

    x.OldOldBT={}

    x.OldTime=GetTime()

    x.Clicking=0

    self.__index = self

    setmetatable(x, self)

    return x

end

function BINewBattle:lastNew(id)

    if #(self.OldOldBT)==0 or GetTime()-self.OldTime>60 then

        return nil

    end

   

    for i in pairs(self.OldOldBT) do

        if self.OldOldBT[i]..””==id then

            return nil

        end

    end

    return 1   

end

function BINewBattle:IsNew(id)

    if self.Clicking==0 then

        return nil

    end

   

    for i in pairs(self.OldBT) do

        if self.OldBT[i]..””==id then

            if self:lastNew(id) then

                return L.PERHAPS

            else

                return L.OLD

            end

        end

    end

    return L.NEW

end

function BINewBattle:BeforeJoin()

    self.Clicking=1

    self.OldOldBT=self.OldBT

    self.OldTime=GetTime()

    self.OldBT={}

    for i=1, GetNumBattlefields()  do

        instanceID = GetBattlefieldInstanceInfo(i)

        table.insert(self.OldBT,instanceID)

    end

   

    table.sort(self.OldBT)

end

BattleInfo_NewBattleFinder={}

function BattleInfo_NewBattleFinder:New()

    local x={}

    x.data={

        [L.WARSONG]=BINewBattle:New(),

        [L.ARATHI]=BINewBattle:New(),

        [L.EYE]=BINewBattle:New(),

        [L.ALTERAC]=BINewBattle:New(),

        [“DEFAULT”]={},

    }

    x.selfsay=true

    x.sayto=L.SELF

    x.f= CreateFrame(“Frame”, nil)

    self.__index = self

    setmetatable(x, self)

    return x

end

function BattleInfo_NewBattleFinder:FindNew(t)

    local outstr=””

    local lsj=1

    for i in pairs(t) do

        j=lsj

        while j<=t[i]-1 do       

            k=t[i]-1-j

            if k>2 then

                outstr=outstr..j..”->”..j+k..” ”

                break

            else

                outstr=outstr..j..” ”

                j=j+1

            end

        end

        lsj=t[i]+1

       

    end

    outstr=outstr..lsj..L.ANDAFTER

   

    return outstr

end

function BattleInfo_NewBattleFinder:Hook(callback)

    –CONFIRM_NEW_BFENTRY SSPVP

   

    if StaticPopupDialogs[“CONFIRM_BATTLEFIELD_ENTRY”] then

        StaticPopupDialogs[“CONFIRM_BATTLEFIELD_ENTRY”].button2=L.LEAVEBUTTON

        StaticPopupDialogs[“CONFIRM_BATTLEFIELD_ENTRY”].OnCancel=function(arg1,arg2)

            if IsControlKeyDown() and arg2==”clicked” then

                AcceptBattlefieldPort(arg1,nil)

            end

        end

       

        StaticPopupDialogs[“CONFIRM_BATTLEFIELD_ENTRY”].OnShow=function()

            local thisBT=getglobal(this:GetName()..”Text”)

            local tx=thisBT:GetText()

            if string.find(tx,L.OLD,1,1) or string.find(tx,L.NEW,1,1) then           

                return

            end

            for i in pairs(self.data) do

                local _,_,toJ,_ = string.find(tx, “.+”..i..” (%d+).+”);   

                if toJ then                       

                    thisBT:SetText(string.gsub(tx,toJ,toJ..(self.data[i]:IsNew(toJ) or “”)))

                    break

                end

            end       

        end

   

    elseif StaticPopupDialogs[“CONFIRM_NEW_BFENTRY”] then

        StaticPopupDialogs[“CONFIRM_NEW_BFENTRY”].button2=L.LEAVEBUTTON

        StaticPopupDialogs[“CONFIRM_NEW_BFENTRY”].OnCancel=function(arg1,arg2)

            if IsControlKeyDown() and arg2==”clicked” then

                AcceptBattlefieldPort(arg1,nil)

            end

        end

        hooksecurefunc(StaticPopupDialogs[“CONFIRM_NEW_BFENTRY”],”OnUpdate”,function()

            local thisBT=getglobal(this:GetName()..”Text”)

            local tx=thisBT:GetText()

            if string.find(tx,L.OLD,1,1) or string.find(tx,L.NEW,1,1) or string.find(tx,L.OLD,1,1) then           

                return

            end

            for i in pairs(self.data) do

                local _,_,toJ,_ = string.find(tx, “.+”..i..” #(%d+).+”);   

                if toJ then                       

                    thisBT:SetText(string.gsub(tx,”#”..toJ,”#”..toJ..(self.data[i]:IsNew(toJ) or “”)))

                    break

                end

            end       

        end)

    end

    –BattlefieldFrameJoinButton_OnClick

    hooksecurefunc(“JoinBattlefield”,function()

        local mapName= GetBattlefieldInfo()

        if self.data[mapName] then

            self.data[mapName]:BeforeJoin()

            if self.selfsay then

                callback()

            end

        end

    end)

    self.f:SetScript(“OnEvent”, function()

                self.data[BattleInfo_SafeZone()].Clicking=0

        end)

    self.f:RegisterEvent(“PLAYER_ENTERING_WORLD”)

   

end

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/12323.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注