[过期]flexbar教程
ps: 原贴来自于MOP [url=http://bbs.game.mop.com/viewpro.php?uid=203212][color=#002f7c]gzkuru[/color][/url]写的 [b]用实例学习flexbar设置(1.53)[/b]用实例学习flexbar设计(最终版)
[color=red]有问题请在下面直接回帖,我不喜欢短信方式。要知道你的问题、各位老大和我的回答,本身就在为帖子增色![/color]
÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷
[color=red](原创)用实例学习flexbar设计[/color]
----------------转贴请注明:春秋战国网 顾如 原创
[color=red]前言[/color]
[color=blue]本文分为《前言》、《讲解》、《手册》三个模块。目录如下:[/color]
前言 ------- - 讲述flexbar是什么工具,我们为什么要选择flexbar
讲解 ------- - 又分为6个学习步骤
-- 基础语法 -----------2楼
-- 动作、事件和条件的概念 ----3楼
-- 常见应用实例 ---------4楼
-- 深入的例子---------- 5楼
-- flexbar设计的完整过程-----6楼
-- 完整的设计实例 --------7楼
手册 ---------又分为4个部分
-- 命令 -- -----------8楼
-- 事件 -- -----------9楼
-- 条件 -- -----------10楼
-- 变量 -- -----------11楼
××××××××××××××××××××××××××××××××××××××××××××××××××××××
[color=red]在采用flexbar之前,我们先要明确4个问题。[/color]
[color=blue]flexbar是个什么样的工具呢?[/color]
简单地说这是个能让你随心所欲定制技能栏的工具。但flexbar能做的远不止这些,实际上flexbar能让你围绕按钮这个设计的核心,实现几乎所有功能。比如很多界面采用的statusbars在屏幕上显示双方血量,完全可以用flexbar模拟出来。所以使用flexbar要考虑的不是“能不能”,而是“有没有必要”。真的很夸张。
wow总共有120个按钮,但我们在默认界面上只能看到72个。flexbar的功能就是把所有按钮都提供给玩家,让你随心所欲地安排和控制这些按钮。flexbar又把很多系统事件提供给玩家,比如“血量少于50%了”、“有人攻击你了”、“技能进入冷却期了”、“进入狂暴状态了”。在flexbar里你可以把事件和按钮绑定在一起,也可以单独处理这些事件。从而我们就可以做出这样的设计:“发生某某事,我们就怎么怎么应对”。当然,多数人使用flexbar主要的目的还是设计一个个性化的、趁手的、漂亮的操作界面,太复杂的功能需要lua的配合,不如直接写插件。呵呵。
[color=blue]flexbar能不能增强你的操作呢?[/color]
能,当然能。通过设置flexbar,你可以获得更佳、更智能化、更配合你操作习惯的界面设置。比如你是鼠标操作的,当你血量低于50%的时候在鼠标旁边自动出现一个喝血瓶的按钮,你就能更快地给自己补血。甚至你能设计“战斗中血量少于50%就自动喝血瓶”,当然能增强操作了!但是由于暴雪禁止延时自动使用技能,你想操作真的强,还是得练习。flexbar是个初、中级玩家的捷径而已,再往上爬,还得靠自己。
[color=blue]设置flexbar前,我们需要如何整理自己的思路呢 ?[/color]
1 、我们的操作习惯是怎么样的。(大概分为全键盘、全鼠标、键盘+鼠标三种)
2 、我们喜欢的操作界面是怎么样的。(个人推荐越干净的越好)
3 、由上述两点,我们怎么去安排那些按钮。
4 、我们要对什么事件做出反应,如何反应。
[color=blue]设置flexbar,我们需要什么样的基础呢?[/color]
需要一点程序概念,但是很少很少。现在咱们的学校初中就有信息技术课,高中就接触VB或者数据库了。这就够了,你只需要一个概念而已。这个概念就是“发生xxx事情,我要做@@@”。再复杂一点,“发生xxx事情,我先看看我是否处于$$$状态,如果状态合适我就做@@@”。比如我们前面的例子:“战斗中血量少于50%就自动喝血瓶”,翻译成设置思路就是:发生了“血量减少到50%以下”事件时,如果我“处于战斗状态”,我就“喝血瓶”。然后再把思路翻译成代码就行了。翻译代码的过程完全是机械化的,[color=red]最主要的还是你的思路。需要的程序基础很少。[/color]
我们只需要掌握flexbar语法,理解flexbar的动作、事件、条件的概念,再弄一个比较全面的手册就行了。英文好的朋友可以直接看flexbar包里面自带的手册,英文不好的我将提供一个整理补充版。
[color=red]选择flexbar就意味着你选择了个性![/color] [size=12px][color=red](原创)用实例学习flexbar设计[/color]
----------------转贴请注明:春秋战国网 顾如 原创
[color=red]第一部分:基础语法[/color]
我们先看下面的这条命令,此命令将显示一个或者一组按钮。
/flexbar show [button=#] [group=#] [toggle='true'] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
其中:
[color=blue]/flexbar [/color]--是在系统聊天框里输入flexbar语句必须的,它告诉WOW“/flexbar后面的内容交给flexbar处理”。
flexbar的代码有3种执行方式:
1 、直接在聊天框输入
2 、在flexbar自带的代码窗口输入。方法是先在wow键盘设置那为flexbar代码窗口设置快捷键,然后按快捷键并选择script edit。在这个窗口里有7个部分。script name……代码名称;test script as script……将代码看作lua语句执行;test script as macro……将代码看作WOW宏执行;config……将代码看作flexbar配置脚本执行;import……加载FlexBar_Config.lua;restore……恢复前一次配置。
3 、编辑到flexbar目录下的flexbar_config.lua中。
如果你是在flexbar代码窗口和flexbar_config.lua中输入代码,“/flexbar ”就不用输入了。三种代码设置方式中我推荐flexbar代码窗口,能批量输入又不象flexbar_config不方便修改。flexbar_config输入方式的优点是导入已经设计测试完成的代码比较简单。但有些语句是不能在flexbar_config里输入的,比如你的语句里包含双引号。
[color=blue]show [/color]--这就是命令词了,表示这条语句我们要执行什么动作。必须输入。
[button=#] --这表示你要显示的是一个按钮,或者一个按钮序列,或者一些按钮。在整个语句里这些按钮是动作的执行者。外面的那对方括号表示这部分可以没有。
只有一个按钮就直接把#替换为按钮编号,如 button=168 表示对第168号按钮进行操作。当操作对象是一个按钮序列时,如 button=1-12 表示对1到12号按钮进行操作。当操作对象是一些不成序列的按钮时:如 button=[1 2 5 7 ] 表示对1 2 5 7号共4个按钮进行操作。注意了,聪明的朋友可能会问 button=[1-12 37] 的写法对不对呢?很遗憾这样写是不支持的,而且flexbar设计者根本没有改进设计去支持它的意愿。
[color=blue][group=#] [/color]--这表示你要显示的是一个按钮组,#表示组编号。在flexbar里你可以把一些按钮定义为一个按钮组,统一移动、修改各种属性等,很方便。定义组的方法是: /flexbar group button=1-12 anchor=1 把1至12号按钮定义为1号组。具体定义组的方法请参考后面的手册。
[color=blue][on='event'] [target=<target>] [/color]--这两部分通常是一起写的,表示语句是在某事件发生时才起作用。其中on后面写事件,target后面写这事件发生在谁身上。如玩家血量低于50% 写作: on='healthbelow50' target='player' 。事件的含义和概念我们后面还要说的。
[color=blue][if='condition'] [/color]--这部分写语句的执行条件,在flexbar里就是一个状态。如处于战斗状态 写作:if='affectingcombat<"player">' 。注意其中的 <"player"> ,这里指出是玩家处于战斗状态。当你在尖括号内写一个字符串而不是数字的时候,这对双引号是必须的。如果是数字就不用了,如 8号按钮内的技能处于冷却期 incooldown<8> 。条件的含义和概念我们后面还要说的。
[color=blue][in=#] [tname=<timer name>] [/color]--这两部分应该属于WOW禁止的功能,我在使用的时候会提示出错。它们的含义分别是等(#×0.1)秒再执行,和某触发器在运行行时执行。这样就提供了完全自动化的使用技能的手段,有损游戏公平,我们在后面不会做介绍。
一个最常用的命令我们就介绍完了,内容好像挺多,实际对一个有丁点程序基础的人来说都是常识。呵呵。另一个要注意的问题是,[color=blue]在flexbar里所有涉及度量的数字都是单位的十分之一。[/color]例如:scale=5 其实是50%;color= [10 1 1]是暗红色;in= 50是5秒钟。[/size] [size=12px][color=red](原创)用实例学习flexbar设计[/color]
----------------转贴请注明:春秋战国网 顾如 原创
[color=red]第二部分 动作、事件和条件的概念[/color]
[color=blue]前面我们反复强调flexbar设置的设计思路是:设想 翻译为 程序思路,然后再翻译为代码。[/color]
其中设想表现的是你的创意,翻译为代码则是按照手册机械翻译的过程,我都不多说了,我会给大家送一份手册。设想翻译为程序思路是我们学习的重点,程序基础好的朋友可以直接跳过这部分。
设想翻译为程序思路有两点:按钮放哪儿?什么情况下我要做什么?
“按钮放哪儿”,我们需要显示按钮的命令show和移动命令moveabs和moverel,还有自动排列命令circlegroup、horizontalgroup和verticalegroup,请自行参考手册。“什么情况下我要做什么?”才是我们的设计重点。这就要依靠动作、事件和条件来实现了。
“动作”就是我们要干什么,如显示一个按钮、把某个技能放到某按钮里。
“事件”就是当什么事情发生的那一刻,如血量刚低于50%、刚进入或者退出战斗状态。
“条件”在flexbar里其实就是对你所处状态的一个判断。
很多朋友可能分不清事件和条件的区别。我试着讲一讲,不过这问题确实拗口。呵呵
[color=blue]事件和条件的主要不同就是:事件是一个时刻、一个时间点,而条件是一个状态、一个时间段。[/color]比如“你开始玩游戏”,这是一个时间点,是一个事件;而“你在玩游戏”就是一个时间段了,就是一个条件。在语句执行的时候顺序是:当某事件(on后面的内容)发生的时候,等一段时间(in后面的内容),判断某条件是否成立(if后面的内容)。我们设计把设想翻译成程序思路的时候要特别小心事件和条件的区别。[color=blue]一个语句用程序思路来表示就是:
/flexbar 动作 button=动作的执行者 on='事件' target='谁发生这个事件' if='状态<"谁的状态">'[/color]
例1: mm生日那天,我经过花店的时候,我要买一束花。
“我”是动作的执行者;“买一束花”是动作;“mm生日那天”是个时间段是个条件;“经过花店”是个时间点,是个事件,这个事件是发生在“我”身上的。翻译成程序思路:
/flexbar 买一束花 button=我 on='经过花店' target='我' if='生日那天<"mm">'
例2: 玩家处于熊形态,而且玩家进入战斗时显示按钮组1 。
这里的动作是“显示”;动作的执行者是“按钮组1”; “玩家处于熊形态”是时间段是条件;“进入战斗”是时间点是事件,这个事件发生在“玩家”身上。翻译成程序思路:
/flexbar 显示 group=1 on='进入战斗' target='玩家' if='处于形态<"熊形态">'
再按手册翻译成代码:
/flexbar show group=1 on='entercombat' target='player' if='hasaura<"熊形态">'
这样说不知道大家能不能理解。理解了事件处理,flexbar就变成一个简单却麻烦的工具了。有些大虾也把事件和条件的区别表述为:时间范围大的是条件,时间范围小的是事件。大家也可以作为参考。
[color=blue]小资料:对象有以下数种情况(具体某语句的对象请参考手册):[/color]
数字 --按钮 如左键点击按钮8时 on='leftbuttonclick' target=8
‘player’ --玩家 如玩家进入战斗 on='entercombat' target='player'
‘target’ --当前目标
‘pet’ --宠物
‘party1’ ~ ‘party2’ --队友1~4
‘hostile’ --目标是敌对的
‘neutral’ --目标是中立的
‘friendly’ --目标是友好的
[/size] [size=12px][color=red](原创)用实例学习flexbar设计[/color]
----------------转贴请注明:春秋战国网 顾如 原创
[color=red]第三部分 常见设计举例[/color]
本部分的学习主要涉及按钮的显示、隐藏、调整。所使用的事件和条件都是基础写法。
注:下面代码中前导字符是“--“的,表示这是一个注解。这种注解格式在flexbar中是一样的。
[color=blue]一 、显示并移动1-12号按钮到屏幕的底部,并排成横条[/color]
代码:
-- 先把1-12号按钮组合成按钮组1,方便操作。注意每个按钮组需要一个“锚”,这个“锚”就是按钮组的组号。“锚”必须是按钮组里的一个按钮。
group button=1-12 anchor=1
-- 显示这些按钮。我们前面把它们组成了1号组
show group=1
-- 移动到屏幕底部。对组的移动,我们只需要移动它的“锚”。
moveabs button=1 xx=480 yy=80
-- 排列这些按钮成横条。其中padding是按钮之间的间距。
horizontalgroup group=1 padding=0 height=1
[color=blue]二 、用1-17号按钮设计一个在人物下方显示的技能栏(缩短鼠标点击技能的移动距离),此栏呈飞鹰状。[/color]
代码:
-- 这里逐渐显示各按钮并移动,方便观察整个调整过程
-- 1-5号按钮
show button=1-5
-- 移动第一个按钮到位
moveabs button=1 xx=500 yy=200
-- 其他按钮采用相对第一个按钮移动的方式,方便设计。其中dx是横坐标移动量,dy是纵坐标移动量。
moverel button=2 trgbtn=1 dX=-36 dY=16
moverel button=3 trgbtn=1 dX=-36 dY=-18
moverel button=4 trgbtn=1 dX=42 dY=16
moverel button=5 trgbtn=1 dX=42 dY=-18
-- 放大第一个按钮为1.2倍
scale button=1 scale=12
-- 6-9号按钮
show button=6-9
moverel button=6 trgbtn=2 dX=-35 dY=16
moverel button=7 trgbtn=2 dX=-35 dY=-18
moverel button=8 trgbtn=4 dX=35 dY=16
moverel button=9 trgbtn=4 dX=35 dY=-18
-- 10-12号按钮
show button=10-12
-- 修改按钮大小为60%。采用“按钮列表”写法主要为了示例。
scale button=[10 11 12] scale=6
moverel button=11 trgbtn=6 dX=-20 dY=0
moverel button=10 trgbtn=11 dX=-20 dY=0
moverel button=12 trgbtn=10 dX=1 dY=-22
-- 13-15号按钮
show button=13-15
-- 修改按钮大小为60%。采用了“按钮序列”的写法。
scale button=13-15 scale=6
moverel button=13 trgbtn=8 dX=34 dY=0
moverel button=14 trgbtn=13 dX=20 dY=0
moverel button=15 trgbtn=13 dX=1 dY=-22
-- 16-17号按钮
show button=16-17
scale button=16-17 scale=10
moverel button=16 trgbtn=10 dX=-32 dY=-8
moverel button=17 trgbtn=14 dX=20 dY=-8
[color=blue]三 、按钮组中的按钮,根据各按钮内技能设置的不同,在冷却期隐藏,完成冷却后显示。[/color]
代码:
-- 这段将按钮组横向排列,并以50%大小显示
group button=49-53 anchor=49
show group=49
scale group=49 scale=5
horizontalgroup group=49 padding=0
moveabs button=49 xx=522 yy=340
-- 49号按钮在技能完成冷却时显示。
-- 注意“冷却”的对象只能是一个按钮,所以我们下面对每个按钮都要做事件设计。
show button=49 on='cooldownmet' target=49
-- 49号按钮在技能开始冷却时隐藏
hide button=49 on='cooldownstart' target=49
show button=50 on='cooldownmet' target=50
hide button=50 on='cooldownstart' target=50
show button=51 on='cooldownmet' target=51
hide button=51 on='cooldownstart' target=51
show button=52 on='cooldownmet' target=52
hide button=52 on='cooldownstart' target=52
show button=53 on='cooldownmet' target=53
hide button=53 on='cooldownstart' target=53
[color=blue]四 、当战斗中血量少于50%的时候,在鼠标旁边显示一个按钮组。[/color]
这个按钮组里我们可以放入血瓶、血石、绷带等,方便补血
代码:(此段代码因为按钮一直跟随鼠标移动,所以占用比较多的资源)
-- 组起来,排列好
group button=23-25 anchor=23
scale group=49 scale=6
horizontalgroup group=23 padding=0
-- 当血刚刚掉到50%以下那一刻,并且玩家处于战斗状态,显示按钮并让按钮跟随鼠标。
movetomouse button=23 dx=-25 dy=25 on='healthbelow50' target='player' if='affectingcombat<"player">'
show group=23 on='healthbelow50' target='player' if='affectingcombat<"player">'
-- 血量升高超过80%那一刻,隐藏按钮。(不用再喝了吧)
hide group=23 on='healthabove80' target='player'
[color=blue]五 、选择敌对或中立目标时,弹出按钮组[/color]
代码:(flexbar不能在你不经取消当前目标就选择另一个目标时,对后一个目标进行判断。所以此代码有BUG,但无法解决)
-- 获得敌对和中立目标时显示第1组按钮。这里主要演示多事件对象时的写法
show Group=1 on='gaintarget' target=['hostile' 'neutral']
-- 获得友好目标时隐藏第1组按钮
hide Group=1 on='gaintarget' target='friendly'
-- 后面的代码省略
[color=blue]六 、给每个队友和自己头像旁边都弄个按钮[/color]
当他们被下了debuff时显示出来,方便治疗。(圣骑)
代码:
-- 布置按钮的语句省略
--
-- 在自己被弄上了毒、疾病、魔术伤害时,显示按钮24
show button=24 on='gaindebufftype' target=['中毒' '疾病' '魔术']
-- 当debuff被清除时,隐藏按钮24。注意语句最后的条件的写法。
hide button=24 on='losedebufftype' target=['中毒' '疾病' '魔术'] if='not hasdebufftype<["中毒" "疾病" "魔术"]>'
-- 后面省略队友的按钮设置
[color=blue]小资料:[/color]
1 、flexbar的屏幕坐标是一个直角坐标系,与其他系统的世界坐标系不同。flexbar认为屏幕的左下角是坐标原点。但是移动flexbar的按钮时,你移动的是按钮的左上角。这意味着你用 moveabs xx=0 yy=0 来显示一个按钮,此按钮将显示在屏幕之外了。
2 、WOW的技能条里面的按钮都是有一个号码的,这个号码和flexbar按钮号码相同。
系统主技能条对应1-12号按钮;第二技能条对应13-24号;右侧技能条对应25-36号;右侧2技能条对应37-48号;右下技能条对应49-60号;左下技能条对应61-72号。
我们在设计自己的技能栏时,最好以6或者12为单位把要显示出来的按钮定义在1-72号之间。这样我们就可以直接在系统按键定义的相应位置为这些按钮定义快捷键。那么我们即使离开了flexbar也不影响出招设置,这对全键盘操作的朋友很有益处。
3 、无论条件还是事件的对象都是可以有多个的。多个对象时要用中括号把所有对象括起来,多个对象之间要有一个空格作为间隔。如:['中毒' '疾病' '魔术']
4 、条件中是可以使用 and(而且)、or(或者)、not(否定)来连接多个条件的。比如
if='not hasdebufftype<["中毒" "疾病" "魔术"]>'
里面就有 not 来表示“没有”中毒、疾病、魔术等debuff的。这个条件还可以写作:
if='(not hasdebufftype<"中毒">) and (not hasdebufftype<"疾病">) and (not hasdebufftype<"魔术">)'
if='not (hasdebufftype<"中毒"> or hasdebufftype<"疾病"> or hasdebufftype<"魔术">)'
这就需要比较多的程序基础了。
[/size] [color=#ff0000]第四部分:深入的例子
[/color]flexbar能做的远不止前面几部分所提到的,虽然掌握了前面的内容你已经能干得很漂亮。这部分我们将尝试接触flexbar的高级内涵!
[color=blue]一 、技能按钮映射[/color]
技能按钮映射为我们帮助战士、小德、撒满、盗贼等能转换自身状态的职业设计界面提供了方便。我们可以在界面上显示一组按钮,然后让这组按钮里的技能随我们的状态改变而改变。我们使用了映射技术时,多组按钮只需要定义一组快捷键。如果想使用前三部分的知识去实现是比较烦琐的。
我们前面也提到过,WOW的按钮都有一个编号,flexbar使用的就是WOW按钮,他们的编号是相同的。按钮映射就是把原来x编号按钮的功能映射到y按钮上。我们不能认为“映射”等同于“替换”,被映射的按钮本身的功能并没有任何改变。只是我们点击x按钮时,我们的点击动作被转到Y按钮上去了。这时我们点击X按钮,实际等于点击了Y按钮。
映射语句:
/flexbar remap [button= #] [group=#] base= # [toggle= 'true'][reset='true'=] [on='event'] [target=<target>] [if='condition']
例子:
1 、映射13号按钮的功能到1号按钮上
remap button=1 base=13
2 、映射13-24号按钮的功能到1号按钮上
remap button=1-12 base=13
注意这里我们不需要写 base=13-24 ,因为flexbar会自动按顺序映射下去,直到你要求被映射的按钮都被映射为止。
[color=green]看这个实用的例子:[/color]战士在战斗姿态、防御姿态、狂暴姿态,其身下的技能框将显示不能技能组合。
代码:
-- 这里只包含姿态转换时对按钮的处理。按钮布置请参考第三部分第2实例。
-- 将1-17号按钮定义为组
group button=1-17 anchor=1
-- 转换到防御姿态时,把25-41号按钮映射到按钮1-17号上。这样就保证了防御姿态时我们实际使用的是25-41号按钮。
remap button=1-17 base=25 on='GainAura' target='防御姿态'
-- 转换到狂暴姿态时把49-65号按钮映射到按钮1-17号上。
remap button=1-17 base=49 on='GainAura' target='狂暴姿态'
-- 当我们失去防御或者狂暴姿态时,都把1-17号按钮恢复到初试状态。也就是假设我们的初始状态是战斗姿态。
remap button=1-17 base=1 on='LoseAura' target='防御姿态'
remap button=1-17 base=1 on='LoseAura' target='狂暴姿态'
-- 获得仇恨或者进入战斗,显示1-17按钮。注意,因为有映射我们没有必要去显示18-65号按钮了。
show group=1 on='EnterCombat'
show group=1 on='gainaggro'
-- 失去仇恨或者离开战斗状态,隐藏1-17按钮。
hide group=1 on='loseaggro'
hide group=1 on='LeaveCombat'
在这里例子里,如果你能理解整个按钮变化的过程,你就完全明白所谓事件、所谓映射的含意了。我表述一下,你看咱们的理解相同吗?
1 、首先,我们先假设没有进入战斗时,我们正处于战斗姿态。我们没有进入战斗,所以我们的界面上将不显示按钮。
2 、开始进入战斗了,1-17号按钮显示出来,显示的是战斗姿态下使用的技能。
3 、因为是对方先出手,这位战士不能冲锋了。马上转为狂暴姿态,并用血换怒气。这时我们的代码将把1-17好按钮换成狂暴状态下的技能设置。
4 、战士一个拦截,马上转换为防御姿态充当肉盾。这时发生了两个事件:先是离开了狂暴姿态;后是进入防御姿态。那么我们的代码将先把1-17号按钮恢复成默认的战斗姿态下的技能设置;然后再把1-17按钮换成防御姿态下的技能设置!
5 、最后,PK完毕战士没有死。界面上的按钮也消失了,还视野一个干净。
[color=blue]二 、宠物技能的映射[/color]
宠物技能的映射对术士和猎人至关重要。可惜我所看到的中文资料都是从flexbar1.2版延续下来的,那时候可能没有这个功能。大家不得不求助于flexbar伴侣或者其他插件。现在宠物技能在flexbar里已经没有问题了!
看下面的代码:
把宠物技能映射到97-106上了。
-- 整理按钮97-106号
show button=97-106
group button=97-106 anchor=97
scale group=97 scale=7
Horizontalgroup group=97 height=1 padding=2
-- 映射宠物按钮1到技能按钮97上
-- 注意:宠物按钮的映射不能象技能按钮那样同时映射1-10号按钮的,只能一个一个来。
flexpet id=97 petid=1
flexpet id=98 petid=2
flexpet id=99 petid=3
flexpet id=100 petid=4
flexpet id=101 petid=5
flexpet id=102 petid=6
flexpet id=103 petid=7
flexpet id=104 petid=8
flexpet id=105 petid=9
flexpet id=106 petid=10
-- 在失去宠物时隐藏按钮,获得宠物时显示
hide group=97 on='losepet'
show group=97 on='gainpet'
-- 在进入游戏时,如果有宠物则显示按钮,如果没有则隐藏
hide group=97 on='profileloaded' if='not unitexists<"pet">'
show group=97 on='profileloaded' if='unitexists<"pet">'
-- 猎人的宝宝还存在复活的问题
show group=97 on='unitressed' target='pet'
hide group=97 on='unitdied' target='pet'
有人可能会有疑问:我招不同的宠物,宠物技能会跟随改变吗?
我试过,此技能栏会跟随宠物的不同而改变的。
[color=blue]三 、制作显/隐其他按钮的开关,并给开关弄上个性化贴图[/color]
代码:
-- 设置69号按钮的贴图
settexture id=69 texture='\\Interface\\AddOns\\FlexBar\\texture\\shenghuo.tga'
-- 建立一个技能组
group button=73-78 anchor=73
show group=73
scale group=73 scale=10
circlegroup group=73 padding=0
moverel button=73 trgbtn=57 dx=8 dy=-140
-- 此技能组在左键点击69号按钮时显示,右键点击69号按钮时隐藏。
show group=73 on='leftbuttonclick' target=69
hide group=73 on='rightbuttonclick' target=69
实际使用时你需要在flexbar目录下建立texture目录,并且把你的贴图拷贝进去。这些贴图要自己做(我的插件包里有),图片格式是tga,大小64*64pic ,色彩是24位色。或者使用WOW系统自带的贴图,如 texture='%macro120' 就调用了系统的第120号图标。
[color=blue]四 、在flexbar里调用系统函数[/color]
有段最常用的代码。在我们隐藏系统按钮栏后,要把系统的那些角色、技能书、天赋、任务、求助等按钮弄出来。我们可以找插件实现,不过flexbar能简单实现的事情实在没有那个必要。
代码:
-- 把系统主按钮实现在73-80号按钮上
flexscript id=73 texture='\\Interface\\AddOns\\FlexBar\\texture\\beibao.tga' script='OpenAllBags()' name='打开所有背包'
flexscript id=74 texture='\\Interface\\AddOns\\FlexBar\\texture\\quests.tga' script='ToggleQuestLog()' name='任务'
flexscript id=75 texture='\\Interface\\AddOns\\FlexBar\\texture\\character.tga' script='ToggleCharacter("PaperDollFrame")' name='人物属性'
flexscript id=76 texture='\\Interface\\AddOns\\FlexBar\\texture\\talents.tga' script='ToggleTalentFrame()' name='天赋'
flexscript id=77 texture='\\Interface\\AddOns\\FlexBar\\texture\\socials.tga' script='ToggleFriendsFrame()' name='好友'
flexscript id=78 texture='\\Interface\\AddOns\\FlexBar\\texture\\world.tga' script='ToggleWorldMap()' name='地图'
flexscript id=79 texture='\\Interface\\AddOns\\FlexBar\\texture\\help.tga' script='ToggleHelpFrame()' name='求助'
flexscript id=80 texture='\\Interface\\AddOns\\FlexBar\\texture\\spellbook.tga' script='ToggleSpellBook("spell")' name='技能书'
其中script后面的就是系统函数。贴图的做法与第二个例子相同。不过这些系统图标在WOW里没有相应编号,需要自己做或者拷贝别人的。
还有一个大家都喜欢的,在被恐惧和变羊之后回复正常视角。这些控制技真恶心啊!
runscript script='SetView(2)' on='losedebuff' target=['变形术' '心灵尖啸' '恐惧术' '破胆怒吼']
其中视角2是自己预先设置好的正常视角。
[color=blue]五 、在flexbar里调用一个自定义lua函数[/color]
如果代码比较短你可以用例三的语句自定义函数。
如 flexscript id=79 texture='\\Interface\\AddOns\\FlexBar\\texture\\help.tga' script='ToggleHelpFrame()' name='求助'
修改成flexscript id=79 texture='\\Interface\\AddOns\\FlexBar\\texture\\help.tga' script='ToggleHelpFrame()' name='myhelp'
就可以在runscript语句中用myhelp作为函数名调用。
如果代码比较长,你最好先用flexbar代码编辑器编辑好,或者写到flex_config.lua文件里作为一个自定义函数。
如发现部落,报告他的地点和坐标:
x,y=GetPlayerMapPosition("player");
SendChatMessage(GetMinimapZoneText().." <"..format("%.1f, %.1f", x * 100, y * 100)..">".." 有部落骚扰!!! ","yell");
写在flex_config.lua里是:
ShaoRaoBaoGao = {
x,y=GetPlayerMapPosition("player"),
SendChatMessage(GetMinimapZoneText().." <"..format("%.1f, %.1f", x * 100, y * 100)..">".." 有部落骚扰!!! ","yell")
}
然后在flexbar里用 runscript script='ShaoRaoBaoGao' 执行之。用代码编辑器定义,类似。
[color=blue]六 、在flexbar里调用一个自定义宏。[/color]
与定义和调用lua函数的方法类似。
我们用flexmacro语句定义宏,也可以用代码编辑器。执行宏是用runmacro命令。
例子:血量低于50%而且你有一个队伍时,执行宏。此宏在队伍聊天信息里显示“血+++++++++”和用表情喊救命。注意其中多行宏的写法。
runmacro macro=['/p 血+++++++++' '/求救'] on='healthbelow50' target='player' if='unitexists<"party1">'
flexbar既然能调用lua函数,那么其他插件能做到的,flexbar几乎都能做到了。呵呵。其限制只在于你知道多少WOW接口函数,你的设计能力去到什么地步而已。我自己不会去钻这些东西,需要的时候就用Winmpq解开暴雪所用的mpq文件看看,或者查查网上提供的函数表。
[color=blue]七 、为flexbar增加一个条件。[/color]
我们不但能使用flexbar提供的各种功能,还能自己为flexbar增加一些需要的东西。也就是为flexbar增加命令、事件、函数。flexbar的所有命令、事件、函数都用‘数组名[“<命令|事件|函数>名”]’ 的方式定义,结合lua的非常灵活的函数定义方式,flexbar扩展性很强。开篇我们就说:flexbar能干什么?什么都能干,只看你愿不愿意这么干。
下面引用skor的牧师配置里的一个例子来说明,怎么为flexbar增加一个事件。
-- 为flexbar增加一个名为currentzone的条件。此条件判断当前是否在一个地域列表中(skor用来判断是否在副本)。
FBConditions["currentzone"] =
function(target)
if not target then return false end
if type(target) ~= "table" then
target = { target }
end
local index, value
for index, value in pairs(target) do
if type(value) == "string" then
value = string.lower(value)
local text = GetRealZoneText();
if text and (string.lower(text) == value) then
return true
end
end
end
return false
end
从这个例子我们可以看到flexbar的条件是定义在FBConditions数组里面的,这个数组的下标就是条件的名称。我们要为flexbar增加条件,只要往数组FBConditions里面加就是了。
执行了这串代码后,在flexbar语句中我们就可以使用currentzone作为条件名称进行条件判断了。
skor是这么使用新定义的条件的:
remap button=85-96 base=1 on='losebuff' target='暗影形态' if='not currentzone<["祖尔法拉克" "剃刀沼泽" "剃刀高地" "阿塔哈卡神庙" "奥达曼" "黑暗深渊" "黑石深渊" "玛拉顿" "诺莫瑞根" "斯坦索姆" "死亡矿井"]>'
含义为:当自己身上的暗影形态消失的时候,如果自己不在“…………”等地域中(实际就是不在副本),就把从1号按钮开始的按钮映射到85-96号按钮上。
注意其中新定义的currentzone条件的使用方法。
[color=blue]八 、为flexbar增加一个事件。[/color]
相对于增加条件,增加事件写起来简单些。但没有理解增加条件的原理,还是别贸然增加事件的好。增加事件的道理是一样的,只是增加一个事件不但要向flexbar声明这一新增事件,还需要调用FlexBar:RegisterEvent(event)方法向wow注册系统事件。
还是skor的牧师配置里的例子:
-- 为flexbar增加一个名为ZoneChanged的事件。
function Shirtan_ZoneChanged()
FB_RaiseEvent("ZoneChanged")
end
FB_RegisterEvent("ZONE_CHANGED_NEW_AREA","Shirtan_Zonechanged",Shirtan_ZoneChanged,true)
先看FB_RegisterEvent("ZONE_CHANGED_NEW_AREA","Shirtan_Zonechanged",Shirtan_ZoneChanged,true)
其中 第一个参数是系统事件的名称,这里是进入新地域。第二、三个参数是函数名,表明发生由第一个参数规定的系统事件后,由什么函数进行处理。这两个参数的区别是第二参数是个串,第三参数不需要加双引号,其实总是写成相同的就行了。原理上的分别,建议大家自己看FlexBar_HelperFunctions.lua文件里对此函数的定义,一两句说不清。第四个参数是一个逻辑值,说明第一参数是否是wow系统事件。
再看回
function Shirtan_ZoneChanged()
FB_RaiseEvent("ZoneChanged")
end
注意 Shirtan_ZoneChanged 这个函数名曾作为参数出现在 FB_RegisterEvent 的参数里面。 FB_RaiseEvent("ZoneChanged")是说在flexbar内部激发一个叫 ZoneChanged 的事件。
结合起来说,这些代码的含义为:用 FB_RegisterEvent 函数让flexbar向wow系统注册 ZONE_CHANGED_NEW_AREA 事件(地域改变)。并且告诉flexbar负责处理此系统事件的是 Shirtan_ZoneChanged 函数。当地域改变这一系统事件被flexbar接收到以后,flexbar就会自动调用 Shirtan_ZoneChanged 函数。在 Shirtan_ZoneChanged 函数里,我们简单地制造了一个flexbar内部的名为 ZoneChanged 的事件。这样我们就可以在命令中使用 ZoneChanged 事件了。
例如:
remap button=85-96 base=13 on='zonechanged' if='currentzone<["祖尔法拉克" "剃刀沼泽" "剃刀高地" "阿塔哈卡神庙" "奥达曼" "黑暗深渊" "黑石深渊" "玛拉顿" "诺莫瑞根" "斯坦索姆" "死亡矿井"]>'
含义为:当地域改变(我们自己定义的)时,如果自己是在副本中,那么将13号开始的按钮映射到85-96号按钮上去。
为flexbar增加函数和事件,已经不是单纯地玩flexbar了。如果你问”你怎么不写增加命令的方法啊?“,那么让人脸红了,因为一直没想到需要增加命令的地方,我根本没办法举例。。。呵呵。。。强行弄个例子出来就违背了俺们”实用“的宗旨了。不过,我还能说一点:如果要自定义一个带target的事件,你在事件处理函数的定义那加上一个target参数就行了。。。呵呵
[size=3][color=blue]小资料[/color][/size]
如何把自己增加的事件和函数放到flexbar里啊?
其实只要代码有机会运行就行了,方法很多。
最方便的就是把代码集中到一起输入到script编辑窗口中,用个名字存起来。比如上面的例子,存到一个叫 'Shirtan_ZoneChangeEvent' 的script中。
然后在flexbar载入设置的时候自动运行一次:
runscript script='Shirtan_ZoneChangeEvent' on='profileloaded'
在flexbar中输入配置和代码都有完善的机制. 对于初 中级玩家来说, 需要了解如下两图的内容:
图一: 到wow系统按键设置里为常用配置工具设定快捷键. 也可以只设flexbar主菜单的快捷键.
图二: flexbar代码编辑器的界面. 宏\lua代码\flexbar配置 都可以在这里编辑和运行. 而且可以进行命名保存, 方便在配置里进行调用. 前面初学者导入别人的界面只需要简单地将配置放到这里, 按config按钮运行一次flexbar设置代码就行了.比老版本的配置导入方式简单得多. 本节的内容都是以代码编辑器运行的, 后面的<完整实例>也一样.
[img]http://bbs.game.mop.com/attachments/1_0vuXPybaiS3d.jpg[/img]
[img]http://bbs.game.mop.com/attachments/2_TG33R2L2dOH3.jpg[/img] [color=#ff0000]第五部分 实际做一个设计的过程
[/color][color=blue]一 、准备[/color]
回忆我们在前言里说的:设置flexbar前,我们需要如何整理自己的思路呢 ?
1 、我们的操作习惯是怎么样的。(大概分为全键盘、全鼠标、键盘+鼠标三种)
2 、我们喜欢的操作界面是怎么样的。(个人推荐越干净的越好)
3 、由上述两点,我们怎么去安排那些按钮。
4 、我们要对什么事件做出反应,如何反应。
这就是我认为必然的flexbar设计前的准备工作。我们设计一个界面,为的是配合我们的操作,而不是改变我们的操作。所以在设计代码前必须总结自己的操作方式,并设想需要通过界面优化改进的部分。界面越干净越好,这是我的一贯信念。界面越干净,我们观察到的环境细节就越多;而且从感觉上来说,我们就更能进入游戏而不是在操作一台电脑。操作习惯基本上分为:
全键盘操作 --实际第一次选择对手、对话、拣东西还是需要鼠标的。呵呵。全键盘操作下,右手负责出招,界面上就根本不需要保留按钮!界面设计工作量最低。不过我建议保留一些主要技能的冷却标志和射程标志。大家可以参考我的《全键盘操作法师界面》。
全鼠标操作 --出招都是用鼠标的,那么你的技能栏就要显示更多的按钮。并且要把这些按钮移到靠近身子的地方,通常是身下。尽量减少鼠标的移动距离。
鼠标和键盘混合操作 --需要显示按钮。可以象全鼠标那样显示一大堆按钮,也可以只显示鼠标操作那部分按钮。鼠标操作那部分也要尽量靠近身子,减少鼠标移动距离。
在准备工作阶段,脑子里要有一个比较清晰的界面和操作情形。要在纸上打个草稿做个规划,这个草稿丰俭由人了,呵呵。只要你自己能明白就行。另外还需要一个比较全面的flexbar手册放在手边。
[color=blue]二 、设计主要界面[/color]
我建议大家使用flexbar自带的编辑器进行编辑。聊天命令的方式不适合大量的代码输入和调整;flexbar_config文件修改不方便,而且最致命的是很多语句不能写到flexbar_config文件中,你还要用聊天命令的方式来补充。
[color=green]1 、先清除flexbar里的垃圾,让flexbar恢复到干净状态。[/color]
/flexbar resetall confirm='yes'
[color=green]2 、去掉系统技能栏。[/color]我们用上flexbar了,那系统栏就是累赘。
/flexbar runscript script='MainMenuBar:Hide()'
[color=green]3 、在每次进入游戏的时候也要去掉系统技能栏啊。[/color]
/flexbar RunScript Script='MainMenuBar:Hide()' on='ProfileLoaded'
4、逐个显示你的按钮组,移动到合适位置。并记录它们的坐标(方法参考后面的小资料)。
5 、检查这些按钮,特别是其中你要自己指定贴图的按钮(包括自己画的和引用系统的)。保证这些按钮是干净的,否则flexbar试图定义贴图的时候将遭遇失败。
[color=green]6 、隐藏不经常显示的按钮。并使用 lock button=1-120 命令把按钮位置固定下来。[/color]
[color=green]7 、存盘当前设置: saveprofile profile='xxxx' [/color]
其中XXXX是你的存盘名。我建议你每做几步就存盘一次。如果不小心做了破坏性的操作,你可以用 loadprofile profile='xxxx' 恢复之。以减少损失。
注:在设计的过程中,我们通常要[color=green]显示各个按钮的号码方便设计:[/color]
/flexbar text button=1-120 text='%d'
[color=blue]三 、为你的设计准备需要的宏[/color]
在代码编辑窗口输入代码后,在script name栏里写入一个名称。调试好后,按save按钮存盘。这样就建立了一个可以在flexbar里调用的宏或者lua函数。
[color=blue]四 、设计事件,并给自定义开关按钮贴图。[/color]
在这个阶段,我们要给一些按钮设计事件处理代码。比如什么时候隐藏、什么时候显示、什么时候映射、什么时候执行一个宏等。
设计的时候脑子里一定要清楚,你写的事件处理到底能干些什么。如果没把握,先写好调试语法没错误,就先放一放。后面我们还要进行总体调试的。
如果你在为一个按钮定义贴图、宏、lua代码时候出错。你就[color=green]用 /flexbar clearflex id=# 命令清除那个按钮[/color]里的东西。这时肯定是原来按钮里面已经有定义了。
最后,记得每做几步就要存盘啊!
[color=blue]五 、对整个设计进行调试[/color]
你必须设想出和你的事件设计相关的所有情形和要求。包括一些作为开关的按钮。然后把这些情形都试一遍,没达到要求的马上改。实在想不到的就到论坛来问。这论坛高手还是很多的,笔者自己也快进入中级行列了,到时候我也许能帮上忙。呵呵。
然后,你还需要在实战中发现自己设置的缺陷并且改进之。
比如我的战士设计,朋友反应说:小组PK,我为了显示技能栏必须右键点击对手。我的人物就摆出了备战姿势。对手就会首先集中打击我。
我为他改进了设计,增加左键选择敌对和中立目标也能弹出技能栏的触发。避免了这个问题:
show group=1 on='gaintarget' target=['hostile' 'neutral']
hide group=1 on='losttarget' if='not affectingcombat<"player">'
[color=blue]六 、固化整个界面[/color]
这包括:
[color=green]1 、去掉所有按钮里的文字。[/color]flexbar自己显示的东西 %d 显示按钮号码这时已经没有用了;%c 显示冷却时间,那字小得你要用放大镜;%b 按钮热键,也是没有用。反正咱们一律不要它!
/flexbar text button=1-120 text=
[color=green]2 、锁定按钮里的技能。[/color]这些按钮的技能一定要锁,如果在PK的时候你不小心拖动了就麻烦。
/flexbar lockicon button=1-120
[color=green]3 、让flexbar不要在执行命令后显示报告。[/color]你在flexbar里设计了宏尤其要锁,否则烦死。
/flexbar verbose state='off'
[color=green]4 、如果你不稀饭鼠标经过按钮时,系统都显示一个提示,那么就把这个功能关掉。[/color]
/flexbar tooltip state='off'
[color=green]5 、禁止在鼠标右键点击按钮的时候施放技能。[/color]特别是那些把按钮设计得比较靠近身子的人。我自己就试过在拣东西的时候无意把气定用掉了。心疼哦~~
/flexbar advanced button=1-120 state='on'
[color=green]6 、你设计了100-110号按钮纯属装饰,不想让人按它? [/color]
/flexbar disable button=100-110 state='on'
7 、最后咱们再存一次盘。要知道各种死机会破坏我们的设置的,到时候我们只要载入存盘就行。
8 、整理你的所有代码,把历次修改都包含进去,作为存档。
9 、备份你的interface和wtf目录。省得以后测试其他插件的时候造成混乱。
10 、如果你愿意公布代码可以新开一个帖子。如果你不公布代码也没关系,只是千万别开新帖,这个版不允许开新帖贴效果图的。把你的界面贴到 [url=http://bbs.wowar.com/viewthread.php?tid=96729][color=#002f7c]http://bbs.wowar.com/viewthread.php?tid=96729[/color][/url] 和大家分享你的快乐吧。
[color=blue]小资料:[/color]
第一次设置flexbar的时候,我们通常先用 unlock button=1-120 接锁所有按钮,然后手动拖动按钮到合适的位置的。最后再记录这些按钮的位置形成最终脚本。
那么如何找到我们的按钮坐标呢 ?
wow安装目录下 wtf\ 是保存系统参数的地方。
其中 <你的账号>\account\SavedVariables.lua 保存系统和各个插件的配置,flexbar的所有配置和存盘文件都保存在这里。各个按钮的坐标也是保存在这里的。
找到 "FBSavedProfile = {" 项目,在这句的下面有些类似 “[1]”之类的项目就是各个按钮的存盘了。其中“ ["ycoord"] = 108,["xcoord"] = 299, ”分别是y轴和x轴坐标。
升级到1.53。。。flexbar终于提供了更方便的获取坐标的方法:
在快捷键设置里,给 Button info tooltip toggle 设置一个键。按下去就能在鼠标移动到按钮上时现实组、映射、坐标等信息了。。。是不是方便多了 ? [color=#ff0000]第六部分 完整的例子
[/color]这里请大家移步查阅俺的另一个帖子,里面有全键盘法师和全鼠标战士的设置,还有俺的插件包:
[url=http://wowbbs.mop.com/viewthread.php?tid=138181][color=#002f7c]http://wowbbs.mop.com/viewthread.php?tid=138181[/color][/url]
其他朋友也有好些优秀设计,请看置顶贴版主做了索引。
[color=blue]小资料:[/color]
wow安装目录下的 interface\addons\ 是我们放插件的地方,想删除一个插件直接在这里删除就行了。
wow安装目录下的 wtf\ 是保存系统参数的地方。
config.wtf -------- 视频设置、登陆服务器等。
<你的账号>\account\ --------- 此目录保存插件、键盘、等设置。其中:
---- addons.txt --------保存你的插件名称,和各插件是否被你选用
---- SavedVariables.lua ---------保存系统和各个插件的配置,flexbar的所有配置和存盘文件都保存在这里。
---- bindings-cache.wtf ---------保存键盘设置.
---- macros-local.txt ---------保存WOW系统里的宏设置.
<你的id>\account\ 下还为你的各个人物建立了文件夹。这些文件夹下主要有两个文件:
chat-cache.txt --------- 聊天窗口设置
layout-cache.txt ---------各弹出窗口的位置等设置
所以,[color=blue]一般我们备份插件,直接备份整个 interface和wtf 文件夹.[/color] [color=#ff0000]第七部分 flexbar手册--flexbar命令
[/color]这些是俺收集整理,并啃e文手册补充成文的。设计的时候一般手边3本书:基础语法、实例、手册,俺算是一并提供了,质量如何大家评判。呵呵。
[color=blue]界面命令:[/color]
/flexbar show [button=#] [group=#] [toggle='true'] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
按要求显示按钮和组。
/flexbar hide [button=#] [group=#] [toggle='true'] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
按要求隐藏按钮和组。
/flexbar scale [button= #] [group=#] scale= # [toggle= #][reset='true'=] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
按要求调整按钮的大小。scale的取值范围是5-50,也就是默认大小的50%-500%。
/flexbar shade [button=#] [group= #] color= [## #] [toggle= [###]][reset='true'=] [on='event'] [target=<target>] [if='condition'] [iftarg=] [in=#] [tname=<timer name>] [ttoggle='true']
按要求调整按钮的色彩。color实际上是rgb值,取值范围是0-10 ,1就表示红色最大值255的1/10
/flexbar fade [button= #] [group=#] alpha= # [toggle=#] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
按要求调整按钮的透视效果。alpha的取值范围是1-10 ,取值为1时几乎看不见按钮。
/flexbar text [button=#] [group=#] [text='text'] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
按要求调整按钮的第一文字标识。flexbar的按钮有两个文字标识,第一个位于按钮的右上角,第二个位于右下角。text有三个特殊的取值,%c 显示冷却时间;%d 显示按钮编号;%b 显示按钮绑定的热键。
/flexbar text2 [button=#] [group=#] [text='text'] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
按要求调整按钮的第二文字标识。<其它同上>
/flexbar text3 [button=#] [group=#] [text='text'] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
按要求调整按钮的第三文字标识,此文字标示显示在按钮中心。<其它同上>
/flexbar justifytext [button=#] [group=#] [pos=<position>] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
移动按钮里第一文字标识的位置。pos参数有9个选择:'topleft', 'top', 'topright', 'right', 'bottomright', 'bottom', 'bottomleft', 'left' , 'center'
/flexbar justifytext2 [button=#] [group=#] [pos=] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
移动按钮里第二文字标识的位置。<其它同上>
/flexbar shadetext [button=#] [group= #] color= [## #] [toggle= [###]][reset='true'=] [on='event'] [target=<target>] [if='condition'] [iftarg=] [in=#] [tname=<timer name>] [ttoggle='true']
/flexbar shadetext2 [button= #] [group= #] color= [toggle= 'true'][reset='true'=] [on='event'] [target=<target>] [if='condition'] [iftarg=] [in=#] [tname=<timer name>] [ttoggle='true']
分别调整按钮第一、第二文字标识的颜色。<其中color参数含义同 /flexbar shade 命令>
/flexbar showgrid [button=#] [group=#] [toggle='true']
/flexbar hidegrid [button=#] [group=#] [toggle='true']
显示和隐藏按钮背景的栅格。
[color=blue]操作命令:[/color]
/flexbar lock [button=#] [group=#]
锁定按钮或者组,使之不能移动。
/flexbar unlock [button=#] [group=#]
解锁按钮或者组,使之能够移动。按钮的左上角会出现一个标志,拖动这个标志就能移动按钮。
/flexbar moveabs button= # xx=# yy= # [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
移动按钮到屏幕的某个位置。xx,yy是坐标,flex的坐标系0点位于屏幕左下角。
/flexbar moverel button= # trgbtn= #dx= dy= [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
相对于另一个按钮移动。trgbtn是作为参照的按钮,dx,dy是相对移动量。注:默认的按钮长宽各38点。
/flexbar movetomouse button=# dx= dy= [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
相对于鼠标移动按钮。<其它同上>
[color=blue]组命令:[/color]
/flexbar group button= # anchor= #
将一些按钮组合为组。组合后的按钮将有一个共同的锚“anchor”,此锚必须是组里的一个按钮。当按钮组合为组后,移动锚按钮就可以整体移动整个组。如果没有自定义组号,例如:group=2 ,那么锚的按钮号就成为组的编号。
/flexbar ungroup group=#
解散一个组。
/flexbar listgroups [group=#]
列出当前所有被定义的组。如果指定了组号,则列出该组内的按钮。
/flexbar circlegroup group=# [padding=#]
按环形排列一个组内的按钮。第一个按钮位于10点钟方向,第七个按钮位于环形的中央。padding是按钮的间距。这种排列方式最多只能有7个按钮。
/flexbar horizontalgroup group=# [padding=#] [height=#]
水平排列一个组内的按钮。padding是按钮间距,height是把按钮分成多少个行。
/flexbar verticalgroup group=# [padding=#] [width=#]
垂直排列一个组内的按钮。padding是按钮间距,width是把按钮分成多少个列。
[color=blue]其它命令:[/color]
/flexbar remap [button= #] [group=#] base= # [toggle= 'true'][reset='true'=] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
将一个ID的动作映射到一个按钮或组上。base参数指出了被映射的ID。flex和wow中的按钮都有一个ID,flex1.37版之后把两者的ID统一起来了。wow主技能栏对应flex 1-12号按钮;次技能栏对应13-24;右侧技能栏对应25-36 ;右2技能栏对应37-48 ;右下技能栏对应49-60 ;左下技能栏对应61-72 ;73以上分职业对应,如战士的攻击、防守、狂暴状态等。
此命令还能实现序列按钮的映射。例如:/flexbar remap button=1-12 base=13 将把ID 13 的动作映射到按钮1上,同时自动将14-24号ID的动作映射到按钮2-12上。
这个命令在和事件结合的时候特别有效,可以实现针对不同的情况设置技能栏的内容。
/flexbar advanced [button=#] [group= #] state= <'on'| 'off'>
将按钮设置为高级模式。高级模式下,只有左键才能使按钮动作,右键不能。这样就方便我们分别定义左右键的功能。
/flexbar disable [button=#] [group=#] state=<'on' | 'off'> [toggle='true'] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
使按钮保留设置但丧失功能。
/flexbar use button=# [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
模拟单击某按钮。(实际受WOW接口限制多多,呵呵)
/flexbar echo [button= #] [group=#] base= # [toggle= 'true'][reset='true'=] [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
引起按下某按钮的事件 ??
/flexbar lockicon [button=#] [group=#] [off='true']
锁定按钮里的技能,使之不能改变。
/flexbarraiseevent='event name' [source= <source>][on='event'] [target=<target>] [if='condition'] [in=#] name= [toggle='true'] [tname=<timer name>] [ttoggle='true']
创建一个定时器。即给flex创建一个事件类型?
/flexbar loadconfig config= 'config name'
/flexbar restore confirm= 'yes'
/flexbar safeload state=<'on' } 'off'>
载入一个flex设置文件。后一个命令用于恢复载入前的状态。第三个命令是载入保护的开关,如果关闭将不能使用第二个命令进行恢复。
/flexbar loadprofile profile= 'profile name'
/flexbar saveprofile profile= 'profile name'
载入或者保存文件
/flexbar resetall confirm= 'yes'
重新载入flex和设置。如果当前设置没手动保存,则会丢失。
/flexbar tooltip state=<'on' | 'off'>
鼠标经过某按钮是否显示提示的开关。
/flexbar verbose state=<'on' | 'off'>
flex执行某命令后是否显示报告的开关。
/Flexbar scripts
/Flexbar Events
/Flexbar Perf
/Flexbar AutoItems
/Flexbar Options
打开或者关闭 flexbar自带的相应编辑窗口。
/flexbar flexmacro id=# texture='texture name' name= 'macro name' macro= 'macro'[toggle='true'] [reset='true'= ]
创建flex宏。texture表示宏的图标;macro=后面写宏代码。
例1:/flexbar flexmacro id=120 texture='%macro120' name='DANCE' macro='/dance'
创建一个名为dance的宏,宏的内容是跳舞。
例2: /flexbar flexmacro id=120 texture='%macro120' name='Dance2' macro='dance macro'
/flexbar runmacro macro= 'macro' [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
运行一个宏。
/flexbar flexscript id=# texture= 'texture name' name= 'name' script= 'script'[toggle='true'] [reset='true'= ]
创建使用lua语言的flex宏。
/flexbar runscript script= 'script' [on='event'] [target=<target>] [if='condition'] [in=#] [tname=<timer name>] [ttoggle='true']
运行一个lau宏。
/flexbarflexpet id= # petid= # '[toggle= 'true'][reset='true'= ]
映射宠物按钮ID的动作到某ID的按钮上。
/flexbar clearflex id=#
清除某按钮ID的设置。
/flexbar Info
在text显示热键\组\映射信息 [color=#ff0000]《第八部分 flexbar手册--flexbar事件》
[/color]事件:
事件只是在刚刚获得某状态的时候触发。事件、延时、条件的执行次序是 事件 → 延时 → 条件。
mouseleavebutton
mouseenterbutton
mouseentergroup
mouseleavegroup
Target=鼠标进入的按钮或者组
鼠标进入或者离开一个按钮或者组的范围
entercombat
eavecombat
不需要目标
玩家进入或者退出近战状态
gainaggro
loseaggro
不需要目标
玩家获得或者失去仇恨
startcombat
endcombat
Target=('player','target','pet','party1'-'party4')
进入或者脱离战斗效果(仇恨,近战等)
cooldownstart
cooldownmet
Target=按扭
动作开始进入或者完成冷却
outofrange
nowinrange
Target=按扭
动作超出或者进入射程范围
notenoughmana
enoughmana
Target=按扭
动作无或者获得足够魔法来释放
notusable
isusable
Target=按扭
动作无法或者可以使用时。
gaintarget
losttarget
Target='hostile', 'neutral', 'friendly'
获得或者失去当前目标时(只能由无目标”获得“)
targetreactionchanged
Target='hostile','neutral','friendly'
目标类型变换的时候
gainaura
loseaura
Target=状态名称(例如:'潜行','战斗状态','熊形态')
状态获得或者失去的时候
gaindebuff
losedebuff
Target=损害法术的名称
玩家获得或者失去一个新的损害法术
gaindebufftype
losedebufftype
Target=损害法术的类型
玩家获得或者失去一个新的损害法术类型。
gainbuff
losebuff
Target = 增益法术的名称
玩家获得一个新的增益法术时
unitdebufftype
Target=('player','target','pet','party1'-'party4')
获取/失去某种类型的损害法术(例如:毒,疾病,混乱等)
用条件来检测是否是你感兴趣的类型。
例如:on='unitdebufftype' target='target' if='unitdebufftype<"target" "poison">
unitdebuff
Target ='pet','target','party1'-'party4'
获取/失去一个损害法术(例如:"破伤风")
用条件来检测是否是你感兴趣的损害法术。
例如:on='unitdebuff' target='target' if='unitdebuff<"target" "十字军审判">
unitbuff
Target ='pet','target','party1'-'party4'
获取/失去一个增益法术(例如:"力量祝福")。
用条件来检测是否是你感兴趣的增益法术。
例如:on='unitbuff' target='target' if='unitbuff<"target" "力量祝福">
gainitembuff
Target = 'MainHand' 或者 'OffHand'
(主手)或者(副手)的物品获取一个增益时。
offhandcharge
Target =副手武器剩余的作用数
副手物品剩余的作用数到达指定数目时
gainpartymate
losepartymate
Target = 'party1' - 'party4'
队伍成员加入或者退出时。
losepet
不需要目标
宠物未召唤状态(不是宠物死亡)
gainpet
不需要目标
唤醒于宠物已经召唤状态,
unitdied
unitressed
Target = 'player','pet','party1'-'party4'
指定单位死亡或者复活时
bindingkeydown
bindingkeyup
Target = 按扭号
绑定按键按下或者放开时
leftbuttonclick
rightbuttonclick
Target = 按扭号
鼠标左键或者右键点击指定按钮时
leftbuttondown
rightbuttondown
Target = 按扭号
鼠标左键或者右键按压指定按钮时
leftbuttonup
rightbuttonup
Target = 按扭号
鼠标左键或者右键放开于指定按钮时
altkeydown
altkeyup
controlkeydown
controlkeyup
shiftkeydown
shiftkeyup
不需要目标
分别是alt 、ctrl 、shift键按下或者弹起的时候。
combopoints
Target =设置值
当玩家组合点数(盗贼)到达设置值时
healthabove##
healthbelow##
manaabove##
manabelow##
Target ='player','target','party1'-'party4','pet'
指定单位的血量或者蓝高于或者低于指定百分数##的时候
注:##只能设置为10, 20,30,40,50,60,70,80,90 ,如果是满的话不是写成healthabove##而是写成healthFULL
playercombat
Target =某种特定的战斗状态
玩家发出某种特定的战斗状态。
例如:玩家受到伤害,玩家躲闪,玩家招架,玩家格挡,玩家重击。
targetcombat
Target =某种特定的战斗状态
目标发出某种特定的战斗状态。
例如:玩家受到伤害,玩家躲闪,玩家招架,玩家格挡,玩家重击。
autoitemout
Target=用完的物品的名字
指定物品用完的时候
autoitemrestored
Target=获得的某样物品的名字
一个物品再次填充于按钮。
actionbarpage
Target = 1-6 (指技能栏编号)
玩家切换到某技能栏时
trackingchanged
Target = 某种追踪状态
玩家追踪状态改变时
追踪状态:herbs, minerals, treasure, beasts, humanoids, hidden, elementals, undead, demons, giants, dragonkin, senseundead, sensedemons , none。 none指不追踪了。 [color=#ff0000]《第九部分 flexbar手册--flexbar条件》
[/color]条件
affectingcombat<target>
target ="player","target","party1"-"party4","pet"
引起仇恨或者任何战斗状态。
altdown<>
无目标
Alt建按下
comboptseq<target>
target=0-5
玩家获取与target相同的组合点数
comboptsgt<target>
target=0-5
玩家获取高于target的组合点数
comboptslt<target>
target=0-5
玩家获取低于target的组合点数
controldown<>
无目标
Ctrl键按下
enoughmana<target>
target=按钮(1-120)
该ID对应的动作有足够魔法释放
faded<target>
target=按钮(1-120)
指定按钮被染色
hasaggro<>
无目标
玩家获得仇恨
hasaura<target>
target=状态名称(例如:"潜行","战斗状态")
处于指定状态,用于:盗贼潜行,德鲁依变形形态,战士各种状态,圣骑士的脚环
hasbuff<target>
target=Buff名称(例如:"力量祝福")
玩家具有指定的Buff
hasdebuff<target>
target=Debuff名称(例如:"破伤风")
玩家具有指定的Debuff
hasdebufftype<target>
target=Debuff类型(例如:"毒")
玩家具有指定类型的Debuff
hasitem<target>
target=物品名称(例如:"小型防御药水"
玩家背包中具有指定的物品
healthabove10<target>
Target="player","target","party1"-"party4","pet"
当指定单位的血量高于/低于指定的数字或者全满。
healthabove20<target>
healthabove30<target>
healthabove40<target>
healthabove50<target>
healthabove60<target>
healthabove70<target>
healthabove80<target>
healthabove90<target>
healthbelow10<target>
healthbelow100<target>
healthbelow20<target>
healthbelow30<target>
healthbelow40<target>
healthbelow50<target>
healthbelow60<target>
healthbelow70<target>
healthbelow80<target>
healthbelow90<target>
healthfull<target>
hidden<target>
target=按钮(1-120)或者Frame名称(如"MainMenuBar")
指定的按钮或者Frame是隐藏的。
incombat<>
无目标
打开于玩家处于近战状态。
incooldown<target>
target=按钮(1-120)
按扭处于冷却状态时
ingroup<target>
Target=组号码(1-120)
鼠标指针处于指定组范围
inrange<target>
target=按钮(1-120)
按扭对应的技能处于射程中
isadvanced<target>
Target=Button(1-120)
按钮设置为高级模式
isdisabled<target>
target=按钮(1-120)
按钮设置为禁止
isrunning<target>
Target =计时器名称
名称对应的计时器运行中
mainhandchargeseq<target>
Target=数字
主手武器的附魔数(施毒数?)等于指定数目
mainhandchargesgt<target>
Target=数字
主手武器的附魔数(施毒数?)多于指定数目
mainhandchargeslt<target>
Target=数字
主手武器的附魔数(施毒数?)少于指定数目
mainhandenchant<>
无目标
玩家是否在主手武器上有附魔(物品buff,毒等)
manaabove10<target>
Target="player","target","party1"-"party4","pet")
当指定单位的魔法高于/低于指定的数字或者全满的时候打开。
manaabove20<target>
manaabove30<target>
manaabove40<target>
manaabove50<target>
manaabove60<target>
manaabove70<target>
manaabove80<target>
manaabove90<target>
manabelow10<target>
manabelow100<target>
manabelow20<target>
manabelow30<target>
manabelow40<target>
manabelow50<target>
manabelow60<target>
manabelow70<target>
manabelow80<target>
manabelow90<target>
manafull<target>
offhandchargeseq<target>
Target=数字
副手武器的附魔数(施毒数?)等于指定数目
offhandchargesgt<target>
Target=数字
副手武器的附魔数(施毒数?)多于指定数目
offhandchargeslt<target>
Target=数字
副手武器的附魔数(施毒数?)少于指定数目
offhandenchant<>
无目标
玩家是否在副手武器上有附魔(物品buff,毒等)
remapped<target>
target=按钮(1-120)
指定按钮被映射
scaled<target>
target=按钮(1-120)
指定按钮被缩放
shaded<target>
target=按钮(1-120)
指定按钮被染色
shiftdown<>
无目标
Shift键按下
unitbuff<[unitcode target]>
UnitCode="party1"-"party4","pet","target" Target= Buff名称
指定单位具有指定Buff,例如:unitbuff<["party1" "力量祝福"]>
unitdebuff<[unitcode target]>
UnitCode="party1"-"party4","pet","target" Target= Buff名称
指定单位具有指定DEBuff,例如:unitdebuff<["party1" "破伤风"]>
unitdebufftype<[unitcode target]>
UnitCode="party1"-"party4","pet","target" Target= DEBuff名称
指定单位具有指定类型的Buff,例如:unitdebufftype<["party1" "疾病"]>
unitcreaturetype<[unitcode target]>
UnitCode="party1"-"party4","pet","target", Target = 生物类型
指定单位为指定生物类型,例如:unitdecreaturetype<["target" "人形"]>
unitexists<target>
Target="player","target","party1"-"party4","pet"
指定单位存在
unitisalive<target>
Target="player","target","party1"-"party4","pet"
指定单位生存
unitiscorpse<target>
Target="player","target","party1"-"party4","pet"
指定单位死亡
unitisfriendly<target>
Target="player","target","party1"-"party4","pet"
指定单位友善
unitishostile<target>
Target="player","target","party1"-"party4","pet"
指定单位敌对
unitisneutral<target>
Target="player","target","party1"-"party4","pet"
指定单位中立
usable<target>
target=按钮(1-120)
按扭对应动作可用。
这个命令对一系列的状态进行检测:在正确的战斗状态,并且预备完毕。所以,如果你在战斗状态,并且你的对手正好被躲避,而你的压制技能设置于按扭1,那么条件:usalbe<1>将会返回真,如果你不在战斗状态,将会返回失败。
visible<target>
target=按钮(1-120) 或者 一个框体的名称,比如系统主动作条"MainMenuBar"
按钮或框体是可见的.(显示在屏幕上的) [color=#ff0000]《第七部分 flexbar手册--flexbar变量》
[/color]可以用在text中的变量:
%allbagsnumslots
%allbagsnumslotsleft
%allbagsnumslotsused
全部背包总的可用、总数、已用 空间
%backpacknumslots
%backpacknumslotsleft
%backpacknumslotsused
系统背包的可用、总数、已用 空间
%bag1numslots
%bag2numslots
%bag3numslots
%bag4numslots
各背包可用空间
%bag1numslotsleft
%bag2numslotsleft
%bag3numslotsleft
%bag4numslotsleft
各背包总空间
%bag1numslotsused
%bag2numslotsused
%bag3numslotsused
%bag4numslotsused
各背包被用掉的空间
%combopts 可用的战斗点
%playerhealth 自己的血量
%playermana 自己的法力值
%pethealth 宠物的血量
%petmana 宠物的法力值
%targethealth 目标的血量
%targetmana 目标的法力值
%party1health
%party1mana
%party2health
%party2mana
%party3health
%party3mana
%party4health
%party4mana
队友的血量和法力值
%fbs 最后一个事情激活的flexbar事件
%fbe 最后一个flexbar事件 [b]原作者 [/b][url=http://bbs.game.mop.com/viewpro.php?uid=22739][color=#002f7c]lionsnw[/color][/url]
[b][大量图]以实例来了解Flexbar(8月1日更新)
[/b][size=12px][u][color=#ff0000][b]Flexbar[/b][/color][/u],这个插件许多人想用,但最终还是放弃了,就是因为它没有提供直观化的设置界面,全是命令式来输入的。所以在这我想通过我的设置([u][b][color=#ff0000]Flexbar[/color][/b][/u] For 猎人)让大家(主要是[u][b][color=#ff0000]Flexbar[/color][/b][/u]的初学者)来了解它。
我学[u][b][color=#ff0000]Flexbar[/color][/b][/u]也是看了别人的文章,自己加以实践了解的,在这我只是想通过图片直观点的让刚接触或是要想用[u][b][color=#ff0000]Flexbar[/color][/b][/u]的玩家能比较初步的了解[u][b][color=#ff0000]Flexbar[/color][/b][/u]。想深入了解就看这个贴:[url=http://bbs.game.mop.com/viewthread.php?tid=156687&fpage=1&highlight=%2Bgzkuru][color=#002f7c]http://bbs.game.mop.com/viewthre ... highlight=%2Bgzkuru[/color][/url]
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
[u][b][color=#ff0000]Flexbar[/color][/b][/u]的命令输入有两种方式,1种是在聊天窗口输入的,输入完后直接回车就行了。在这以显示按钮1-120为例,如下图:
[img]http://img.poco.cn/mypoco/myphoto/20060801/5644520060801140821060.jpg[/img]
还有一种就是用[u][b][color=#ff0000]Flexbar[/color][/b][/u]内置的脚本编辑器,实现效果是一模一样的,将命令在编辑器写入后按“Config”执行就可以了,与在聊天窗口输入命令的方式曲别在于用脚本编辑器时命令之前就不用加“/flexbar ”(不含双引号)如下图
[img]http://img.poco.cn/mypoco/myphoto/20060801/5644520060801140826298.jpg[/img]
两种方法当然推荐用内置的脚本编辑器啦,不然一条一条的在聊天窗口输入费点卡啊!我们可以在游戏外编写好命令后复制再粘贴到脚本编辑器里点“Config”就会连续执行里面的所有命令了。那么内置脚本编辑要怎么调出来呢?方法如下:首先选择按键设置
[img]http://img.poco.cn/mypoco/myphoto/20060801/5644520060801140828448.jpg[/img]
里面找到“Open Script Editor”,在这我自己是设置成F12的;这张图里的[u][b][color=#ff0000]Flexbar[/color][/b][/u] Button1、[u][b][color=#ff0000]Flexbar[/color][/b][/u] Button2......就是一一对应着[u][b][color=#ff0000]Flexbar[/color][/b][/u]的120个按钮的快捷键,记得要设置
[img]http://img.poco.cn/mypoco/myphoto/20060801/5644520060801140826187.jpg[/img]
按下F12后就会调出脚本编辑器了
[img]http://img.poco.cn/mypoco/myphoto/20060801/564452006080114114106.jpg[/img]
按下“list”按钮就会出现左边的“Saved Scripts”,这里就是保存着你之前保存的脚本命令,方便使用。还是以显示按钮1-120为例,在编辑输入窗口命令“show button=1-120”(不含双引号。[b]下面除非有另外说明,不然都是不含双引号的[/b])后,再在“Script Name”里输入“显示按钮1-120”再点击“Save”,这样这条命令就保存好了,看看下面这张图的左边
[img]http://img.poco.cn/mypoco/myphoto/20060801/5644520060801141021347.jpg[/img]
要读取之前保存好的脚本就是先点左边的“显示按钮1-120”,再点“load”这样就会读取出来了,点“Config”就会执行这里面的命令
[img]http://img.poco.cn/mypoco/myphoto/20060801/5644520060801141021219.jpg[/img]
再看看这张图,点“layout”出现的就是Flexbar120个按钮的当前坐标,“moveabs button xx= yy= ”也就是移动按钮到屏幕的哪个坐标位置的命令。如果我们是用鼠标将[u][b][color=#ff0000]Flexbar[/color][/b][/u]的某个按钮(比如按钮1)拖到屏幕的某个位置后,我们就可以点这个“layout”将对应的按钮1的这条命令复制到脚本里,这样以后再执行这个脚本后按钮1就会自动移动到我们鼠标拖动到的位置,不需要我们在执行完脚本命令后再次用鼠标来拖动按钮1了
[img]http://img.poco.cn/mypoco/myphoto/20060801/5644520060801141145180.jpg[/img]
看下图
[img]http://img.poco.cn/mypoco/myphoto/20060801/5644520060801140827388.jpg[/img]
在按键设置里有“[u][b][color=#ff0000]Flexbar[/color][/b][/u] event1”到“[u][b][color=#ff0000]Flexbar[/color][/b][/u] event30”的30个快捷键可设置,后面会讲到它们是做什么用的。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
前面的了解完后,这部分开始结合我的猎人界面设置来深入解了。先贴上我的一两张截图,再逐个来解释其使用的[u][b][color=#ff0000]Flexbar[/color][/b][/u]命令
一般状态下的界面
[img]http://img.poco.cn/mypoco/myphoto/20060730/5644520060730230231044.jpg[/img]
按下功能钮后的界面,右键点击功能按钮后又恢复成上面那图的样子
[img]http://img.poco.cn/mypoco/myphoto/20060802/5644520060802111452.jpg[/img]
先简单说明一下最主要的组1的基本设置:
1、正常情况时,我的组1就是显示组1原本的技能
2、当目标超出我的射程或是进入我的8码盲区时,组1就会自动映射成组2的技能,像这样
[img]http://img.poco.cn/mypoco/myphoto/20060730/5644520060730231445055.jpg[/img]
3、按下Shift时组1会映射成组3,像这样
[img]http://img.poco.cn/mypoco/myphoto/20060730/5644520060730230803098.jpg[/img]
4、组4是鼠标移动到组4时才会显示出来,且如果按下Ctrl则会映射到组5
5、组6是按下(放开)Alt时显示(隐藏)
-------------------------------------------------------为革命保护视力,分隔线开始!------------------------------------------------------------------
图发完了,开始来讲讲[u][b][color=#ff0000]Flexbar[/color][/b][/u]的命令,我会尽量详细的说明每条命令的意思,重复出现的命令当然也就不重复解释了。
大家一定要先记住[u][b][color=#ff0000]Flexbar[/color][/b][/u]的基本格式(在编辑器输入就不用写“/flexbar ”)
[color=red][size=4][b]/flexbar 动作 on='事件' target='事件对象' if='条件<条件的对象>'[/b][/size][/color]
说说最早输入的命令
RunScript Script='MainMenuBar:Hide()' on='ProfileLoaded'
Runscript Script='MainMenuBar:Show()' on='BindingKeyDown' Target=30
Runscript Script='MainMenuBar:Hide()' on='BindingKeyUp' Target=30
Verbose State='off'
show button=1-120
text2 button=1-120 text='%d'
justifytext2 button=1-120 pos='topleft'
text button=1-120 text='%b'
解释:
[b]RunScript Script='MainMenuBar:Hide()' on='ProfileLoaded'[/b]
在读取[u][b][color=#ff0000]Flexbar[/color][/b][/u]的设置后隐藏原界面按钮
[b]Runscript Script='MainMenuBar:Hide()' on='BindingKeyUp' Target=30
Runscript Script='MainMenuBar:Show()' on='BindingKeyDown' Target= 30[/b]
按下(放开)绑定的按钮时显示(隐藏)原界面按钮,这里的bindingkeyup和bindingkeydown就是按下和放开,target=30,就是说这个bindingkey指的就是在按键设置里的“[u][b][color=#ff0000]Flexbar[/color][/b][/u] event30”的热键,如果将target=30改为15就是对应“[u][b][color=#ff0000]Flexbar[/color][/b][/u] event15”的热键
[b]Verbose State='off'[/b]
[u][b][color=#ff0000]flexbar[/color][/b][/u]执行完某命令后是否显示报告的开关。当然是关上喽,省得看着烦人,呵呵
前面这些设置好了之就可以开始来设置按钮组1了,当然我们得先把所有的按钮都让它显示出来,所以就要用
[b]show button=1-120[/b]
如果说要显示的按钮不是连续的,比如说是要显示按钮1、3、5、7、9,那么要这么写show button=[1 3 5 7 9]。在这要让按钮显示它的第二文字标签,并且这个文字标签是显示它的按钮号,因此用了这个命令
[b]text2 button=1-120 text='%d'[/b]
如果text=''(不是双引号,是两个单引号)就是清空,什么都不显示;text='%b'就是显示热键;text='%c'就是显示冷却时间。为了不让第二文字标签和按钮的第一文字标签重叠在一起,于是我又用了
[b]justifytext2 button=1-120 pos='topleft'[/b]
让第二文字标签移动到按钮的左上方,这里面的pos就是指方位,参数有9个选择:'topleft'(左上)、 'top'(上)、 'topright'(右上)、 'right'(右)、 'bottomright'(右下)、 'bottom'(下)、 'bottomleft'(左下)、 'left' (左)、 'center'(中间)。最后一条命令
[b]text button=1-120 text='%b'[/b]
这条命令就是显示按钮1-120的第一文字标签,显示内容是什么应该清楚了吧。
----------------------------------------------下面开始讲按钮组1的排列命令-----------------------------------------------------------------------
为什么要将组2、3的形状和组1是一模一样的呢?因为在不同的事件中按组1会映射到组2或是组3的,此时为了让自己十分清楚的知道映射时每个按钮是对应哪个按钮的,同时也是要方便映射时技能的放置,所以就让组2和组3的形状和组一样了。命令如下:
scale button=1 scale=6
moverel button=1 trgbtn=2 dx=25 dy=25
moverel button=4 trgbtn=2 dx=0 dy=-38
moverel button=3 trgbtn=2 dx=38 dy=0
moverel button=5 trgbtn=3 dx=0 dy=-38
moverel button=6 trgbtn=2 dx=-38 dy=19
moverel button=8 trgbtn=2 dx=-38 dy=-19
moverel button=7 trgbtn=3 dx=38 dy=19
moverel button=9 trgbtn=3 dx=39 dy=-19
moverel button=10 trgbtn=6 dx=-38 dy=-25
moverel button=11 trgbtn=7 dx=38 dy=-25
scale button=14-17 scale=5
moverel button=15 trgbtn=10 dx=18 dy=20
moverel button=14 trgbtn=10 dx=-2 dy=20
moverel button=17 trgbtn=11 dx=18 dy=20
moverel button=16 trgbtn=11 dx=-2 dy=20
scale button=12-13 scale=7
moverel button=12 trgbtn=10 dx=-27 dy=13
moverel button=13 trgbtn=11 dx=38 dy=13
group button=1-17 anchor=1
moveabs button=1 xx=500 yy=102
ungroup group=1
lock button=1-17
text button=14-17 text=''
解释:
[b]scale button=1 scale=6[/b]
将按钮1缩小为原来大小的60%,如果scale=12,就是放大为原来大小的120%,scale=??的取值范围为5-50,也是说我们可以将按钮最小缩至50%,最大能放至500%......50%太小了500%又是太大了,我想应该比较少有人会真的这么做吧。
[b]moverel button=1 trgbtn=2 dx=25 dy=25[/b]和[b]moveabs button=1 xx=500 yy=102[/b]
这两条命令一起说一下,同样是移动,但是完全不同的意思,moverel button=1 trgbtn=2 dx=25 dy=25是把按钮1移动到按钮2的dx=25,dy=25的位置,也就是说这命令是将A按钮移动到B按钮的dx=?? dy=??的位置,button就是指要移动的按钮,而trgbtn就是指参照的按钮了,dx,dy是相对移动量,[b]每个按钮默认的长宽都为38[/b],[b]dx为正数,以左边框为准,向右移动。为负数,以右边框为准,向左移动。dy为正数,以下边框为的准,向上移动。为负数,以上边框为准,向下移动。[/b]比如命令是moverel button=1 trgbtn=2 dx=0 dy=0,那么按钮1和2会重叠在一起,moverel button=1 trgbtn=2 dx=38 dy=0,当中的dy=0就是说按钮1的上边和下边是和按钮2齐平的,dx=38就是以按钮1的左边框为准,左边框向右移动38点,那么这个命令的结果就是按钮1排在按钮2的右边,反过来讲,如果dx=-38,就是以按钮1的右边框为准,右边框向左移动38点,那么按钮1就是出现在按钮2的左边了。如下面两图
[img]http://img.poco.cn/mypoco/myphoto/20060802/5644520060802112029070.jpg[/img]
[img]http://img.poco.cn/mypoco/myphoto/20060802/564452006080211202917.jpg[/img]
moveabs button=1 xx=500 yy=102这个命令则是将按钮1移动到屏幕的xx=500,yy=102这个位置,xx和yy相当于我们屏幕的分辨率,如果说分辨率为1024*768时,xx就是代表着屏幕从左到右分成了1024份,从下到上分为了768份。
[b]group button=1-17 anchor=1[/b]
将按钮1到17设置成一个组,且将“组老大”设为按钮1,这时这个组号就是1,如果anchor=2时这个组的组号就是2,anchor=??必须是这个组里的按钮,像前面的1-17,如果我们设置anchor=18是没有效的。
[b]ungroup group=1[/b]
很好理解吧,就是解散按钮组1
组2、3的设置就不重复,只要把对应该的按钮号改改就行了。既然讲到了按钮组的设置,就顺带也讲讲按钮组排列三个命令,以组4、还有6为例:看组4,共有7个按钮(60-66),用moverel button=# trgbtn=& dx=?? dy=??先将60-66排成这个环形状再把它设成组也是可以的,就是太麻烦了,这种情况我们可以先将60-66设成一个组并将组老大设为60,然后用这个命令[b]circlegroup group=60 padding=3[/b],就会让组60里的7个按钮自动成环形状排列了,padding=3是指说60-66这些按钮的间距为3,[b]但circlegroup有个限制就是这个组最多只能有7个按钮[/b];而组6(这个组的老大是52)则是用[b]horizontalgroup group=52 padding=4[/b],横向排列按钮组,padding不用再解释了吧,如果在后面再加上个[b]height=??[/b]就是把按钮分成多少个行;纵向排列用 verticalgroup group=# [padding=??] [width=??],width就是分成多少列了,circlegroup、horizontalgroup、verticalgroup命令如果都不输入padding就是等于padding=0
-------------------------------------------------------看花眼没?在这就休息一下再往下看---------------------------------------------------
当我所有的按钮组都设置好了,我是怎么实现点击我里面那个“功能”按钮来显示或隐藏它们的呢?这里就是要讲到了[u][b][color=#ff0000]Flexbar[/color][/b][/u]的事件部分了。我那个“功能”按钮就是先做个宏,选好图标,宏名字写上“功能”,宏内容为空,再把这个宏拖到按钮85,知道宏的人就清楚了,这只能装饰用的。以按钮组4(组老大为60)为例:
show group=60 on='leftbuttonclick' target=85
hide group=60 on='rightbuttonclick' target=85
解释:
[b]show group=60 on='leftbuttonclick' target=85[/b]
显示(show)组老大为60的组(group=60)当左键点击按钮时(on='leftbuttonclick'),那么左键点击的是哪个按钮呢?target=85就规定了,是按钮85。第二条命令就是右键点击按钮85时隐藏组60。就两条命令套用在我图中的组2、3、4、5、6、8、9就行了。
图中的组7平时就是一直显示的,只是透明度的值设低了,当鼠标移动过去时透明度的值变高,就看得很清楚,可以先看一下上面贴的一般状态下的图,再看这张如图
[img]http://img.poco.cn/mypoco/myphoto/20060730/5644520060730230629073.jpg[/img]
命令:
[b]fade group=82 alpha=10 on='mouseentergroup' target=82
fade group=82 alpha=3 on='mouseleavegroup' target=82[/b]解释:
将组82的透明度设为10,当鼠标进入组82时。下面一句就是将组82的透明度设为3,当鼠标离开组82时。alpha的取值范围1-10,1基本上看不清楚了~再看下图,这是在已经召唤出宠物且鼠标进入组7时的界面,这时的组7就会自动映射成了组8,关于映射命令我后面会说到。
[img]http://img.poco.cn/mypoco/myphoto/20060730/5644520060730231153054.jpg[/img]
我的组4是鼠标进入或离开时显示或隐藏的,只要在这两句的基本上稍改动就行了,就是改成[b]show group=60 on='mouseentergroup' target=60[/b]和[b]hide group=60 on='mouseleavegroup' target=60[/b]
其它的像Alt、Shift、ctrl按下(放开)时显示(隐藏)就是把事件on后面改成相应的altkeyup、altkeydown、shiftkeyup、shiftkeydown、controlkeyup、controlkeydown,group也改改就行了,他们是不需要指定target的。
----------------------------------------------最后再讲讲[u][b][color=#ff0000]Flexbar[/color][/b][/u]中非常关键的映射命令---------------------------------------------------
这里以组1为例(组7和组8之间的映射原理是一样的,只是事件不同而已)
当目标在射程内时,组1显示的技能就是一般状态下时放置的那些远程技能,而当目标超出了射程或是进入了我的8码盲区时,组1就会自动映射成组2的技能,如下图:
[img]http://img.poco.cn/mypoco/myphoto/20060730/5644520060730231445055.jpg[/img]
看看上面的按下“功能”钮后的载图,我里面的按钮110放置的技能是自动射击,判断是不是在射程内的关键就是以它为准了,再看按钮1,我一样是放置自动射击的,[b]为什么不以按钮1做为判断的标准呢?[/b]先看正确的命令:
Remap Button=1-13 Base=1 On='NowInRange' Target=110
Remap Button=1-13 Base=18 on='outofrange' target=110
解释:
[b]Remap Button=1-13 Base=1 On='NowInRange' Target=110[/b]
映射按钮1-13到按钮1-13,当进入110这个按钮放置的技能的射程内
[b]Remap Button=1-13 Base=18 on='outofrange' target=110[/b]
映射按钮1-13到按钮18-30,当离开110这个按钮放置的技能的射程外
这里的base只需要写要映射的按钮的第一个就行了,因为已经告诉了[u][b][color=#ff0000]flexbar[/color][/b][/u]是按钮1-13总共13个按钮要映射,那么[u][b][color=#ff0000]flexbar[/color][/b][/u]会自动映射到从base告诉的第一个按钮开始算起的总共13个按钮。这里的Target如果用1出现的情况:假设目标进入盲区了,这时的组1就会变成组2里的这些近战技能,如果这时猎人的切换了另一个也是在8码盲区内的目标时,这时候的做为判断标准的按钮1里放置的技能已经不是自动射击,而是已经映射成组2中的按钮18的自动功击,那么Remap Button=1-13 Base=1 On='NowInRange' Target=1这句错误的命令在此时变成说:当前目标进入按钮1放置的技能的射程内时,将按钮1-13映射成1-13,这时的猎人就麻烦了,因为图中的组1此时就会的是远程的技能,也就是显示一般状态下时的技能,全是远程技能,怎么打身边的目标啊?所以还是要将自动射击技能另外放置,反正按钮也多。
再一个,我的设置里这么一功能,下图:
[img]http://img.poco.cn/mypoco/myphoto/20060730/5644520060730230803098.jpg[/img]
应该看出来了吧,按下Shift时将组1的按钮映射成组3的按钮,注意,因为是设置成按下Shift键的,所以这个组只能用热键,因为如果在按下shift后用鼠标点是变成拿出技能图标,而不是使用,而且其热键就是shift加按钮1-17的热键。命令如下:
Remap button=1-17 base=35 on='shiftkeydown'
那么可能会有人想到相应的让组1恢复回来的命令吧:
Remap button=1-17 base=1 on='shiftkeyup'
但这样不完全正确,假设猎人的当前目标已经是进入8码盲区了,这时我们按下shift键+3就会使用按钮37里的物品,如果是用Remap button=1-17 base=1 on='shiftkeyup',放开后[u][b][color=#ff0000]flexbar[/color][/b][/u]就不管目标是不是在射程内,直接将组1里的按钮恢复成按钮1-18的远程技能了,这样子猎人又要命苦了...所以应该要再加上条件if,正确的命令如下:
[b]Remap button=1-17 base=1 on='shiftkeyup' if='inrange<110>'[/b]
放开SHIFT键时将组1恢复映射回本组(即组1),如果目标在射程内
[b]Remap button=1-17 base=18 on='shiftkeyup' if='not inrange<110>'[/b]
放开SHIFT键时将组1映射到组2,如果目标不在射程内
[img]http://img.poco.cn/mypoco/myphoto/20060730/564452006073023070702.jpg[/img]
这张图中的白色的*就假设当前鼠标的位置,这组大按钮是在血量少于50%或蓝少于30%时出现在鼠标的左边的位置,命令如下:
[b]movetomouse button=74 dx=26 dy=19 on='healthbelow50' target='player'
movetomouse button=74 dx=26 dy=55 on='manabelow30' target='player'[/b]
这里的dx和dy和前面说的基本一样,target='player'是指玩家,目标还有别的参数:'target'(目标),'party1'-'party4'(队友1-队友4),'pet'(宠物),
好了,其它的小设置我就不啰嗦了,大家如果有什么不明白的就直接回贴问。更多的命令、事件(on=)和条件(if=)大家可以到[url=http://bbs.game.mop.com/viewthread.php?tid=156687&fpage=1&highlight=%2Bgzkuru][color=#002f7c]http://bbs.game.mop.com/viewthre ... highlight=%2Bgzkuru[/color][/url]里去看,在里面的《第七部分 [u][b][color=#ff0000]flexbar[/color][/b][/u]手册--[u][b][color=#ff0000]flexbar[/color][/b][/u]命令》和《第八部分 [u][b][color=#ff0000]flexbar[/color][/b][/u]手册--[u][b][color=#ff0000]flexbar[/color][/b][/u]事件》和《第九部分 [u][b][color=#ff0000]flexbar[/color][/b][/u]手册--[u][b][color=#ff0000]flexbar[/color][/b][/u]条件》。其实大家只要牢记住[u][b][color=#ff0000]Flexbar[/color][/b][/u]的基本语句格式,再把命令、事件、条件套用进去就行了:[color=red][size=4][b]/flexbar 动作 on='事件' target='事件对象' if='条件<条件的对象>'[/b][/size][/color]
这个贴子只是想通过形象的图让初学者能更好的理解,希望对初学[u][b][color=#ff0000]Flexbar[/color][/b][/u]的玩家有所帮助。
如果有什么不对的地方也请各位[u][b][color=#ff0000]Flexbar[/color][/b][/u]高人指出,我也好即时更正。[/size] 弱弱的问~这个配置和flexbar2兼容吗? 兄弟,把新版的flexbar 给更新下吧。
页:
[1]