劍網3宏內置語法淺析(Lua)
宏這個東西,主要作用有哪些?
(我是開發者,也玩了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一類的信息~
在系統菜單裡顯示信息
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
釋放技能:
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都是根據別人寫的插件加以猜測得出的:)