剑网3宏内置语法浅析(Lua)
摘 要
1.节约键位
(我是开发者,也玩了5年WOW,在WOW里技能很多,键位是完全不够用的。比方说我把“召唤水元素”和“水元素”自身技能“冰冻术”写成一个宏,当没有水元素的时候按这个键就召唤,当水元素存在的时候按这个键就使用水元素的冰冻术,这样可以大量节约键位,及减少大脑条件反射的复杂程度)
2.自动化判断
(这一点是各位关注宏命令的地方,你可以设置一个条件,达成条件则执行某个动作,否则的话可以执行另一个动作。比方说我是太虚纯阳,我的蓝小于70%了并且气超过4个了就自动抱元回蓝。条件可以是多种多样的,自动化判断在一定程度上降低了游戏的复杂程度,同时也造成了不平衡。比如说一个完成度很高的无脑宏可以控制自己不OT的情况下最大输出,而人本身做到这点很难,所以暴雪公司在2.0版本里的WOW里就对宏功能进行弱化,让判断语句无法触发技能,也无法使用物品。这样可以最大程度上保证宏不影响游戏平衡性。可惜的是金山没有限制宏的权限,同时让所有宏的函数可以互通,简单的说,宏配合一些按键软件是可以制作出外GUA的~)
3.获取具体数据
(你在打BOSS的时候需要通过zRecount这样的插件才能数据化自己的战斗记录,或者查看自己的当前仇恨。宏可以帮助你获得游戏内的具体数据,因为宏和插件一样基于LUA语法,基于JX3 API)
为什么JX3里的宏不支持/cast一类的语法 ?
因为目前的宏命令根本就是个半成品,/cast实际上就是对OnUseSkill这个命令的封装,至于什么时候JX3团队才能开能给一个完整的宏命令系统我也不知道,我对西山居的能力现在很怀疑了。
如果我现在想要写一个可以用的宏,需要如何曲线救国?
使用 /script 命令,你可以把一个宏当做插件内一个函数,绑定过快捷键后,每次按下去都执行一次这个函数~
可以描述一下宏命令那些复杂的命令都是什么意思么?
额~ 说不可以会被丢西瓜皮吧。。?
那我就简单介绍一个宏命令每行的作用吧~
太虚纯羊。凭虚、转乾坤(作用:如果凭虚没有CD则用凭虚,如果凭虚CD则用转乾坤,主要用于快速解定身和节约键盘位)
/script N = GetClientPlayer();
申请一个变量叫N,并且获得当前客户端玩家,并赋值于N, 简单的说,就是你当前的人物状态就是N
/script Fight=N.bFightState;
申请一个变量叫Fight,并且获得N(你)的战斗状态,如果战斗中,Fight将会是true,如果不在战斗中,将会是false
/script PX1,PX2,PX3=N.GetSkillCDProgress(355,N.GetSkillLevel(355));
申请3个变量PX1,PX2,PX3,然后获得N(你)当前技能编号为355(凭虚)技能的冷却时间,第一个参数PX1我不清楚含义,第二个公共冷却所剩时间(毫秒),第三个是凭虚技能冷却所剩时间(毫秒)
/script if PX3==0 and Fight==true then OnUseSkill(355,N.GetSkillLevel(355)) end;
如果凭虚御风CD时间到了,并且在战斗中,则释放凭虚御风,释放成功则会终止这个函数继续运行,因为公共冷却内无法运行别的技能
/script if Fight==true then OnUseSkill(372,N.GetSkillLevel(372)) end;
如果在战斗中,则释放技能ID为372的技能,为转乾坤(如果凭虚释放失败,才会尝试运行这一行,由于运行时有一些效率上的BUG,我没有采用if else判断)
我如何取得技能或者物品ID?
在游戏内把鼠标放在某个技能或物品上,按住ALT键,会出现该技能或物品的调试信息,包含了ID一类的信息~
我想获得更多的API或者内置LUA的属性介绍~
在系统菜单里显示信息
OutputMessage("MSG_SYS", "这是输出内容!!! \n");
获取角色:
GetClientPlayer() --获得玩家自己
GetClientPlayer().GetTarget() --return 目标dwType 目标dwID
GetPlayer(dwID) --获取指定dwID的人物对象,只针对玩家(包括自己)
GetNpc(dwID) --获取指定dwID的NPC对象,只针对NPC
GetTargetHandle(dwType, dwID) --获取指定dwID的对象,包括玩家和NPC
SelectTarget(dwType, dwID) --选择(dwType, dwID)对象为目标
GetClientPlayer().dwID --人物的ID号
GetClientPlayer().GetTarget() --获得当前人物的目标
GetClientPlayer().GetBoxSize(dwBagIndex); --人物的包包大小
GetClientPlayer().GetItem(dwBagIndex, dwX); --获得包包的指定物品
item.nQuality --物品品质
item.bCanStack --是否可以叠加
item.nStackNum --叠加数量
SellItemToShop(dwBagIndex, dwX, nCount); --卖物品到商店
ShopPanel.bCanRepair -- 商店是否能修理
GetClientPlayer().CastSkill(nSkillID, nSkillLevel) --角色发技能
GetRepairAllItemsPrice(ShopPanel.nNpcID, ShopPanel.nShopID) --修理费用
RepairAllItems(ShopPanel.nNpcID, ShopPanel.nShopID) --修理所有物品
角色属性:
dwID --人物ID
szName --人物名字
dwSchoolID --门派编号
nLevel --人物等级
dwMapID 所在地图ID
nCurrentLife --当前生命
nMaxLife --最大生命
nCurrentMana --当前内力
nMaxMana --最大内力
nCurrentStamina --当前精力
nMaxStamina --最大精力
bStall --是否在摆摊状态
bFightState --是否在战斗中,true为战斗状态,false为非战斗状态
bOnHorse --是否在马上
nAccumulateValue 纯阳气的个数,半个气为1,也就是0-10之间的数,比如7就是3个半气~
nRoleType 角色类型
nDivingCount
nMoveState --人物动作姿态 不光是移动
释放技能:
OnUseSkill(技能ID,N.GetSkillLevel(技能ID))
判断自身BUFF:
/script for _, pB in pairs(GetClientPlayer().GetBuffList()) do
if pB.dwID==BUFF的ID then 执行语句 end
end;
由于我不是插件开发组的人,所以无法直接获得JX3的API
这些API都是根据别人写的插件加以猜测得出的:)
论坛有JS特约插件开发小组的人,可以询问他们API相关信息.
电信2区 白帝城 朔月夜 & 电信4区 燕子坞 魅娃娃