劍網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區 燕子塢 魅娃娃