发新话题
打印

[发表插件] PackUp 0.8.6b Beta Simple UI

本主题由 simonw 于 2008-5-12 13:06 移动
引用:
原帖由 cosin0002 于 2007-9-3 20:23 发表

http://bbs.cwowaddon.com/viewthread.php?tid=1238&highlight=MinimapButtonsBag
注意:本插件与ATLAS有冲突,无法同时使用.

我的小地图按钮的代码是抄 ATLAS 的 =.=
就是说MBB与ATLAS的冲突问题,也能可以解决了?那。。。说下要怎么修改ATLAS的代码吧。。。HOHO

TOP

引用:
原帖由 leg883 于 2007-9-4 00:35 发表

就是说MBB与ATLAS的冲突问题,也能可以解决了?那。。。说下要怎么修改ATLAS的代码吧。。。HOHO
问这个问题前,你应该先直接试一下
Atlas 的代码不用改就可以

TOP

引用:
原帖由 cosin0002 于 2007-9-4 06:23 发表

问这个问题前,你应该先直接试一下
Atlas 的代码不用改就可以
直接试下哪个?
Atlas 的代码不用改是可以,那MBB也要改。

TOP

引用:
原帖由 leg883 于 2007-9-4 15:02 发表

直接试下哪个?
Atlas 的代码不用改是可以,那MBB也要改。
MinimapButtonsBag 修正版

TOP

引用:
原帖由 cosin0002 于 2007-9-4 15:19 发表

MinimapButtonsBag 修正版
看看去。。。

TOP

引用:
原帖由 erebus 于 2007-9-3 10:21 发表


我的意思是能不能给示范下第一个排序键值和第二个怎么设置,譬如第一个是品质史诗->普通,第二个是物品等级

PackUp_Order["SR_Rarity"] = {
order = PACKUP_ORDER_DESC,
map = {},
[PACKUP_ORDER_KEY_DEFAULT] = { ...
规则里有个BUG,目前在查。。。
等查完了写中文的规则说明

TOP

引用:
原帖由 cosin0002 于 2007-9-5 06:49 发表

规则里有个BUG,目前在查。。。
等查完了写中文的规则说明
中文英文都可以,说明能详细些更好,虽然我写程序也很讨厌写文档,呵呵
光看Value N,iOrder这些确实有点摸不着头脑
辛苦lz了~~~

TOP

PackUp 0.8.6a Beta Simple UI
Bug Fix : 缺省规则 Bug Fix

TOP

PackUp 规则中文说明 (0.8 +)

0.8.0 规则设计思路:
        将所有物品进行分类,然后将分类按定义的分类顺序进行排序,之后在同一分类内部,再进行分类,排序。分类的层次没有限制。
        打个比方,有一堆积木,先按颜色分成几堆,然后放好顺序(红色堆放第一,后面是黄色 等等),然后在红色里按形状再分成几堆,然后放好顺序。之后在 红色的圆形积木里按尺寸排好顺序,其他照此完成。当然黄色积木中可以先按重量分堆,再按形状分堆。所以整个的排序其实非常的随心所欲。

一.首先需要为自定义的规则定义一个名字,以便在需要使用此规则的地方以名字进行引用
        PackUp_Order[<规则名称>] = { ... }

二.进行规则的详细设置
        1.排序定义(此属性不能省略,必需有)
                PackUp_Order[<规则名称>] = {
                        ...
                        order = < PACKUP_ORDER_DESC | PACKUP_ORDER_ASC >,
                        ...
                }
                PACKUP_ORDER_DESC 逆序/倒序 排序 -- 在 Const.lua 中定义
                PACKUP_ORDER_ASC 顺序/正序 排序 -- 在 Const.lua 中定义
        2.物品分类映射(此属性不能省略,必须有,可为空)
                PackUp_Order[<规则名称>] = {
                        ...
                        map = {
                                { <分类规则> },
                        },
                        ...
                }
                map 可以为空表即 map = {},<分类规则>可以为零个,一个或者多个
               
                <分类规则>定义:
                        {
                                [0] = { value = <分类名>, exp = <表达式定义> }, -- <分类属性定义>
                                { key = <物品属性键>, op = <操作类型>, value = <值> }, -- <判断条件>
                                { ... }, -- 同上定义
                        }
                请注意顺序:<分类属性定义> 必须有且只有一个,并必须出现在最前面以 [0] = { ... } 来定义,<判断条件>跟在其后,可以为零个,一个或者多个
                此部分规则的意义:将物品按定义分成几类,你可以将 炉石,坐骑,鱼杆 分在同1个分类中,也可以将他们分在3个不同分类中,甚至可以将完全没有任何关联的两件东西分在同一个分类里。你可以脱离WOW中定义的类型进行分类自定义,没有任何限制。

                <判断条件>
                        {
                                key = <物品属性键>,
                                op = <操作>,
                                value = <值>,
                        }
                        每一条判断条件会根据 key, op, value 来得到一个布尔值,即:真(true)假(false)
                        key = <物品属性键>(不能省略)
                                <物品属性键>Const.lua 中定义,以 PACKUP_INFO_ 开头(请注意<规则名称>不要使用以下字符串)
                                PACKUP_INFO_ID = "$ID$" -- 物品 ID
                                PACKUP_INFO_IDNUM = "$IDNum$" -- 物品ID的数字
                                PACKUP_INFO_NAME = "$Name$" -- 物品名字
                                PACKUP_INFO_LINK = "$Link$" -- 物品连接
                                PACKUP_INFO_RARITY = "$Rarity$" -- 物品品质
                                PACKUP_INFO_TYPE = "$Type$" -- 物品类型
                                PACKUP_INFO_SUBTYPE = "$SubType$" -- 物品子类型
                                PACKUP_INFO_MINILEVEL = "$MiniLevel$" -- 物品需求等级
                                PACKUP_INFO_LEVEL = "$Level$" -- 物品等级
                                PACKUP_INFO_STACK = "$StackCount$" -- 物品堆叠数
                                PACKUP_INFO_EQUIPLOC = "$EquipLocation$" -- 物品装备位置
                                PACKUP_INFO_TEXTURE = "$Texture$" -- 物品 ICON 路径
                                PACKUP_INFO_QUANTITY = "$Quantity$" -- 物品数量(某一格中该物品的数量,不是总数)
                        op = <操作类型>
                                用于指明如何来比较判断 key 与 value
                                nil"==" : 相等(若没有写 op,则缺省为此项)
                                ">" : 大于
                                ">=" : 大于等于
                                "<=" : 小于等于
                                "<" : 小于
                                "~=" : 不等于
                                "~" : 非
                                "=#" : 匹配正则表达式,此时 value 为正则表达式(字符串)
                                "~#" : 不匹配正则表达式,此时 value 为正则表达式(字符串)
                        value = <值>(不能省略)
                                可以为数字,字符串 等等
                                
                <分类属性定义>
                        [0] = {
                                value = <分类名>,
                                exp = <表达式定义>,
                        }
                        <表达式定义>(这里需要有最基本的编程基础,一般的程序语言的手册上,此部分的名称为 逻辑表达式)
                                $<数字 n>:代表其后的第n个判断条件的计算值(true 或者 false)
                                        $1 代表其后的第1个判断条件的计算值,$2 代表其后的第2个判断条件的计算值,以此类推
                                        如果 <数字 n>,大于条件判断数,即没有第n个判断条件时,一律使用 false 作为计算值
                                "true" : 表达式结果为真(true)
                                "false" : 表达式结果为假(false)
                                nil"and" : 表达式的结果 = 将所有条件进行与操作
                                "or" : 表达式的结果 = 将所有条件进行或操作
                          "&m-n"
                                        将第m个条件到第n个条件进行与操作
                                        m = 0 : 表示第一个判断条件
                                        n = 0 : 表示最后一个判断条件
                          "|m-n"
                                        将第m个条件到第n个条件进行或操作
                                        m = 0 : 表示第一个判断条件
                                        n = 0 : 表示最后一个判断条件
                                混合表达式:
                                        "$1 and ($2 or $3)" : 条件2和3的结果相或后,与条件1相与
                                        "$1 or $2-0" : 将条件2之后的条件全部相与,再与条件1相或

                                除了<分类映射>外,混合表达式是 0.8.0 版本的最大改进之一。
                                比如可以实现将任务物品中非白色及灰色的物品作为一类物品进行再排序。
                        <分类名>
                                如果 exp = <表达式定义> 部分的计算结果对于某一物品为 真(true),那么该物品在此规则内的分类名为这个值,即该物品被分在这个类中。<分类名>将在下面的<分类排序定义>中用到

        3.分类排序定义
                PackUp_Order[<规则名称>] = {
                        ...
                        [<分类名>] = { value = <值>, key = <物品属性键>, suborder = <子规则名 | 物品属性键>, order = < PACKUP_ORDER_DESC | PACKUP_ORDER_ASC >},
                        ...
                }
                此部分规则的意义:将分成类的物品,按类排序。
                value = <值>:通常这是一个数字,用来表明该类的排序位置,此时 key = <物品属性键> 被忽略。当 value = nil 时,key = <物品属性键> 必须存在。
                key = <物品属性键>:当 value = nil 时,此定义必须存在。用来指示从 <物品属性键> 上获取 value 值。
                suborder = <子规则名 | 物品属性键>
                        suborder = <子规则名>:子规则名必须被定义,此时 order 属性被忽略(因为在子规则中有定义自己的order)。在此规则的分类排序完成后,将所有划归该 <分类名> 的物品按 suborder 的规则定义进行分类、排序。
                        suborder = <物品属性键>:此时  order 属性必须存在,用来指明得到的物品属性值如何来排序。
                注意:将 value = nil 时,请确认你完全清楚将会发生什么。否则排序结果可能匪夷所思。

        4.缺省分类
                假设<分类名>在 分类排序定义 中未被定义,那么将会使用缺省分类目中的规则定义。
                PackUp_Order[<规则名称>] = {
                        ...
                        [PACKUP_ORDER_KEY_DEFAULT] = { value = <值>, key = <物品属性键>, suborder = <子规则名 | 物品属性键>, order = < PACKUP_ORDER_DESC | PACKUP_ORDER_ASC >},
                        ...
                }

                PACKUP_ORDER_KEY_DEFAULT = "#" -- 在 Const.lua 中定义,请注意自定义分类不要使用这个字符串
                规则属性的定义参照 分类排序定义。

三.背包相关
引用:
BagConfig.lua
                PACKUP_BAGID_BODYID = 0 -- 身上自带背包
                PACKUP_BAGID_BANKID = -1 -- 银行自带的格子(TBC是24个)
                PACKUP_BAGID_KEYID = -2 -- 钥匙链
                以上为系统指定数据,不能更改

                PACKUP_BAGID_BODY = { -- 身上背包选项
                        {bagID = <背包ID>, enable = <是否参与整理/压缩>, order = <排序>},
                }
                bagID = <背包ID>
                        背包的ID,此为系统指定数据,不能更改
                enable = <是否参与整理/压缩/打乱>
                        true : 参与整理/压缩/打乱操作
                        false : 不参与整理/压缩/打乱操作
                order = <排序>
                        PACKUP_ORDER_ASC : 顺序/正序
                        PACKUP_ORDER_DESC : 逆序/倒序

                PACKUP_BAGID_BANK = {
                                {bagID = <背包ID>, enable = <是否参与整理/压缩>, order = <排序>},
                }
                说明同上
关于背包的排序规则的选择:
                插件首先根据 PACKUP_BAGID_BODY 和 PACKUP_BAGID_BANK 的设置,将所有参与整理的包放入列表,并对此列表进行排序,得到所有需要整理的包的类型。
引用:
Const.lua
                        -- Fix Order Name
                        PACKUP_FIXORDER_BAG = "$FixOrderBag$"
                        PACKUP_FIXORDER_COMMON = "$FixOrderCommon$"
                        -- Fix Order Rule
                        PackUp_FixOrder_Bag = { ... }
                        PackUp_FixOrder_Common = { ... }
                PackUp.lua
                        PackUp.onVarLoaded = function()
                                PackUp_Order[PACKUP_FIXORDER_BAG] = PackUp_FixOrder_Bag
                                PackUp_Order[PACKUP_FIXORDER_COMMON] = PackUp_FixOrder_Common
                                ...
                        end
根据得到的要参与整理的包类型进行逐步整理操作。
引用:
PackUp.lua
                        PackUp.puOrder = function(sBagType)
                                ...
                                if sBagType and PackUp_Order[sBagType] then
                                        PackUp.order.sort(PackUp.itemList, 1, iLen, sBagType, PackUp_Order[sBagType].order)
                                elseif PackUp_Order[PACKUP_FIXORDER_COMMON] then
                                        PackUp.order.sort(PackUp.itemList, 1, iLen, PACKUP_FIXORDER_COMMON, PackUp_Order[PACKUP_FIXORDER_COMMON].order)
                                else
                                        PackUp.trace(PACKUP_ERR_NORULE)
                                end
                                ...
                        end
首先,搜索符合 sBagType 名字的排序规则是否存在,如果不存在,则看是否存在 PACKUP_FIXORDER_COMMON 的排序规则(就是 Const.lua 里定义的缺省规则),如果还不存在,则报错:没有规则。
                sBagType 可能的值定义在 localization.lua 中,因为包类型和语言有关。
                        -- Bag Type
                        PACKUP_BAGTYPE_NORMAL = "容器"
                        PACKUP_BAGTYPE_KEYRING = "钥匙链"
                        PACKUP_BAGTYPE_QUIVER = "箭袋"
                        PACKUP_BAGTYPE_AMMO = "弹药袋"
                        PACKUP_BAGTYPE_SOUL = "灵魂袋"
                        PACKUP_BAGTYPE_HERB = "草药袋"
                        PACKUP_BAGTYPE_ENCHANT = "附魔材料袋"
                        -- TBC Bag Type
                        PACKUP_BAGTYPE_MINE = "矿石袋"
                        PACKUP_BAGTYPE_GEM = "宝石袋"
                        PACKUP_BAGTYPE_ENGINEER = "工程学材料袋"

                由此可以针对某一类型的包写特定的排序规则。
        关于某种类型的包可放置物品的定义:
        BagConfig.lua
                PackUp_BagSpec[<包类型>] = {
                        [0] = { enable = <无用字段,忘了去掉>, exp= <表达式定义> }, -- 参考上一大节中的<分类属性定义>部分
                        { key = <物品属性键>, op = <操作类型>, value = <值> }, -- 参考上一大节中的<判断条件>部分
                        { ... }, -- 同上定义
                }
        根据 exp 的最终计算值来判断某物品是否可以放入某种<包类型>的包中。

四.系统缺省设定
本帖最近评分记录
  • atian25 声望 +5 有价值的内容 2007-9-29 22:05

TOP

Const.lua 里是不是默认规则?感觉实际排序还是有出入
还有字段里的 ^   $ 什么意思 如果是开关结尾符好些都没有
如要排序 贼的毒药类 但基本名字都是速效 V    速效VI这样带等级的 是否能用=#   速效 匹配到?
PACKUP_INFO_RARITY = "$Rarity$" -- 物品品质 这个的返回值是 0 1 2 3?

TOP

引用:
原帖由 oin 于 2007-9-11 10:17 发表
Const.lua 里是不是默认规则?感觉实际排序还是有出入
还有字段里的 ^   $ 什么意思 如果是开关结尾符好些都没有
如要排序 贼的毒药类 但基本名字都是速效 V    速效VI这样带等级的 是否能用=#   速效 匹配到?
PACKUP ...
1 Const.lua 里是不是默认规则?
引用:
是默认规则
2 还有字段里的 ^   $ 什么意思
引用:
应该是正则相关的内容,如果你不是程序员,要看懂这个有点难度。
Lua 5.1 参考手册:http://www.codingnow.com/2000/download/lua_manual.html
章节 5.4.1 - Patterns (这部分是英文)
3 如要排序 贼的毒药类 但基本名字都是速效 V    速效VI这样带等级的 是否能用=#   速效 匹配到?
引用:
可以,但是要防止误判断,因此正则的写法要比较小心。
{key = PACKUP_INFO_NAME, op = "=#", value = "^速效药膏 .+"}, -- 这样比较不容易误判断
4 PACKUP_INFO_RARITY = "$Rarity$" -- 物品品质 这个的返回值是 0 1 2 3?
引用:
KEY = PACKUP_INFO_RARITY
Value : 来源 http://www.wowwiki.com/API_TYPE_Quality
0 = 灰色 Poor
1 = 普通 白色 Common
2 = 优秀 绿色 Uncommon
3 = 精良 兰色 Rare
4 = 史诗 紫色 Epic
5 = 传说 橘黄色 Legendary
6 = 神话 红色 Artifact

TOP

失望了,没整理还好,整理完更加乱了
期待完善整理的默认配置

TOP

一个问题:
当存在 宝石袋 的时候,所有专业背包都不能被整理...

TOP

引用:
原帖由 剜刀 于 2007-9-11 22:55 发表
一个问题:
当存在 宝石袋 的时候,所有专业背包都不能被整理...
尚没有新的种类的包。。。理论上应该不会
记录下,到时候去买个宝石袋来试试

TOP

引用:
原帖由 cd6009 于 2007-9-11 17:44 发表
失望了,没整理还好,整理完更加乱了
期待完善整理的默认配置
想要合自己心意,要自己写配置
别人写的不会和你要的一模一样的

TOP

还是之前描述的问题。现在的情况是我移除了宝石袋,身上保留了 大附魔袋 1个 以及新的18格包3个 ,开始整理的时候有时仅仅能够整理普通容器,而有时候仅仅能够整理 大附魔袋 ,虽然插件提示上说都在整理……
怀疑是因为之前宝石袋的存在引起了的问题,退出游戏删除了配置文件,重新回到游戏问题依旧

TOP

写不来规则...不过现在这个规则讲究用一下了...0-0

TOP

有了文档说明自己写写配置也不难 关键是写了要进WOW才能去调试 麻烦

TOP

用SLASHCMD的时候提示:
Interface\AddOns\PackUp\PackUp.lua:937: bad argument #1 to 'lower' (string expected, got nil)

TOP

能和大脚那个背包整合一样的就好了

TOP

发新话题