剑网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", "这是输出内容!!! \");

获取角色

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区 燕子坞 魅娃娃