Cách sử dụng script macro căn bản

Há há, bây h mình đã hiểu ý bạn :9cool_haha: thế bạn bỏ cái hàm checkCD đi chắc macro của bạn vẫn chạy bt đấy, chỗ vòng for của function use ấy, tiết kiệm đc khối ký tự. Ngoài ra bạn sử dụng function OnAddOnUseSkill khá nhiều, nên viết lại một cái function chỉ là
Local function U(x) OnAddOnUseSkill(x) end
Sau đó thay toàn bộ OnAddOnUseSkill bằn U là đc :4cool_beauty:
Đoạn đánh Kiếm phi kinh thiên nên cho lên đầu tiên hoặc bỏ đi chứ lúc target vận công mà lại bình tĩnh cast tọa vọng với cắm khí trường thì nó vận công xong rồi :6cool_beat_shot::6cool_beat_shot:
:5cool_big_smile: ohm chạy dc nhưng có cảm giác ko dc ổn định lắm trong bảng dps thấy đánh chay nhiều hơn xài marco kia 10-20% o.o
Skill Cắt vận công lúc nào cũng đưa lên đầu mà, cái marco kia viết để test thử xem có chạy ko nên nhét vào cho đủ quân số :5cool_big_smile: với cả có 1 dòng lệnh StopActions nữa nên chả sợ. Mà lệnh stopaction này cho vào marco của TK or TDnoi thì hơi mệt vì gặp mấy con boss vận công lâu hay vận công liên tục như Khang Tuyết Chúc trong HCNC thì coi như xác định là nó đứng múa luôn :5cool_sweat: Lúc đó đành phải bấm tay
 
:5cool_big_smile: ohm chạy dc nhưng có cảm giác ko dc ổn định lắm trong bảng dps thấy đánh chay nhiều hơn xài marco kia 10-20% o.o
Skill Cắt vận công lúc nào cũng đưa lên đầu mà, cái marco kia viết để test thử xem có chạy ko nên nhét vào cho đủ quân số :5cool_big_smile: với cả có 1 dòng lệnh StopActions nữa nên chả sợ. Mà lệnh stopaction này cho vào marco của TK or TDnoi thì hơi mệt vì gặp mấy con boss vận công lâu hay vận công liên tục như Khang Tuyết Chúc trong HCNC thì coi như xác định là nó đứng múa luôn :5cool_sweat: Lúc đó đành phải bấm tay
Theo mình thì chuẩn nhất cứ làm cái hàm use skill như thằng Tàu này này, trước khi gọi skill luôn check cooldown, không bao giờ sợ cái thông báo điều tức mà cũng gọn nhẹ chương trình.
Mã:
function use(id) A,B,C=N.GetSkillCDProgress(id,N.GetSkillLevel(id)) if C==0 then OnAddOnUseSkill(id,N.GetSkillLevel(id)) end end
Còn cắt skill thì nên dùng tay vì thực ra có cài target casting bar nên nhìn rõ lắm rồi :5cool_big_smile:
 
Ko bác nào làm Macro MG à :9cool_too_sad:
MG là phái đánh mỏi tay nhất thì ko ai nghiên cứu, cái của bác SuperKhung ở trang đầu ko chạy được bùn wa.
 
Ko bác nào làm Macro MG à :9cool_too_sad:
MG là phái đánh mỏi tay nhất thì ko ai nghiên cứu, cái của bác SuperKhung ở trang đầu ko chạy được bùn wa.

Vì đơn giản là các ông biết viết Macro thì không ai chơi MG :2cool_burn_joss_sti
 
ai sửa giùm đoạn macro cho ĐM kinh vũ với

Mã:
 /script local p=GetClientPlayer()
local x = {3098,3087}
local function CheckCDs(skillId)
bOnCD,currentCDTime,totalCDTime = p.GetSkillCDProgress(skillId,p.GetSkillLevel(skillId))
return currentCDTime/16 == 0
end 

local function CastSkillIDs(skillIDs)
for z,x in pairs(skillIDs) do
if(CheckCDs(x)) then
OnAddOnUseSkill(x)
return true
end
end
end 

OnAddOnUseSkill(3360)
if p.nCurrentEnergy > 30 then CastSkillIDs(x) end

Cast Xuyên Tâm Nỏ (3098) rồi check cooldown của Xuyên Tâm Nỏ (3098) nếu đang Cooldown thì cast Hóa Huyết Tiêu (3087)
 
Chỉnh sửa cuối:
ai sửa giùm đoạn macro cho ĐM kinh vũ với

Mã:
 /script local p=GetClientPlayer()
local x = {3098,3087}
local function CheckCDs(skillId)
bOnCD,currentCDTime,totalCDTime = p.GetSkillCDProgress(skillId,p.GetSkillLevel(skillId))
return currentCDTime/16 == 0
end 

local function CastSkillIDs(skillIDs)
for z,x in pairs(skillIDs) do
if(CheckCDs(x)) then
OnAddOnUseSkill(x)
return true
end
end
end 

OnAddOnUseSkill(3360)
if p.nCurrentEnergy > 30 then CastSkillIDs(x) end

Cast Xuyên Tâm Nỏ (3098) rồi check cooldown của Xuyên Tâm Nỏ (3098) nếu đang Cooldown thì cast Hóa Huyết Tiêu (3087)
if p.nCurrentEnergy>30 and CheckCDs(3098) then OnAddOnUseSkill(3098) else OnAddOnUseSkill(3087) end
 
có cách nào để plugin tự gửi phím hoặc tự cast 1 skill nào đó không các bạn :1cool_look_down:

kiểu như này này

function autosend.OnFrameBreathe()
if not autosend.Cast then return end
--OnAddOnUseSkill(359)
--UseSkill(359)
--OnUseSkill(359)

end
 
có cách nào để plugin tự gửi phím hoặc tự cast 1 skill nào đó không các bạn :1cool_look_down:

kiểu như này này

Mình dùng một chương trình khác send key vào game mà nó còn không nhận, tìm các API của game không thấy cái nào đề cập đến vụ này :9cool_too_sad:
 
Mình dùng một chương trình khác send key vào game mà nó còn không nhận, tìm các API của game không thấy cái nào đề cập đến vụ này :9cool_too_sad:

autoit gửi phím tốt, nhưng gửi inactive thì win7 không cho, thấy bọn nó bảo phải bypass được 1 số hàm API check phím của game
local function CheckBuff(target,buffID)
BuffList = target.GetBuffList()
buffed = false
for z,x in pairs(BuffList) do
if x.dwID == buffID then
buffed = true
end
end
return buffed
end

Đoan code dưới đây sẽ tự cast TVVN nếu ko có và skill ko đang bị cooldown
Mã:
/script local p = GetClientPlayer()
local TVVN = 312
local buffTVVN = 1376
local function CheckBuff(target,buffID)
BuffList = target.GetBuffList()
buffed = false
for z,x in pairs(BuffList) do
if x.dwID == buffID then 
buffed = true
end
end
return buffed
end
local function CheckCDs(skillId)
bOnCD,currentCDTime,totalCDTime = p.GetSkillCDProgress(skillId,p.GetSkillLevel(skillId)) 
return currentCDTime/16 == 0
end
if not(CheckBuff(p, buffTVVN)) and CheckCDs(TVVN) then OnAddOnUseSkill(TVVN) end

có cách nào để lấy số stack của 1 buff không bạn?

GetBuffList 获取Buff列表 无 如果函数执行成功,返回1个table,包含: dwID: BuffID nLevel: Buff等级 bCanCancel: 是否能取消 nEndFrame: Buff结束时间 nIndex: buff索引 nStackNum: buff叠加数 dwSkillSrcID: buff所属技能ID

uỵt copy vào đây mới hiện ra cái nStackNum :8cool_amazed:


如果函数执行成功,返回1个table,包含: dwID: BuffID nLevel: Buff等级 bCanCancel: 是否能取消 nEndFrame: Buff结束时间 nIndex: buff索引 nStackNum: buff叠加数 dwSkillSrcID: buff所属技能ID

/script local p = GetClientPlayer()
BuffList = p.GetBuffList()
for z,x in pairs(BuffList) do
if x.dwID == 4120 then
Output(p.nIndex)
Output(p.nStackNum)
end
end

phiên bản vn chưa có 2 tham số phía trên thì phải, chẳng ra cái gì cả
 
Chỉnh sửa cuối:
Đánh dấu phát. Tối về lên đọc. DPS con boss = tay lên đến 13K hết film. Đau cả tay.
 
Đánh dấu phát. Tối về lên đọc. DPS con boss = tay lên đến 13K hết film. Đau cả tay.

Hehe, người trong bang cần viết macro kiểu gì thì để tôi viết cho :4cool_beauty:

- - - Updated - - -

autoit gửi phím tốt, nhưng gửi inactive thì win7 không cho, thấy bọn nó bảo phải bypass được 1 số hàm API check phím của game


có cách nào để lấy số stack của 1 buff không bạn?

GetBuffList 获取Buff列表 无 如果函数执行成功,返回1个table,包含: dwID: BuffID nLevel: Buff等级 bCanCancel: 是否能取消 nEndFrame: Buff结束时间 nIndex: buff索引 nStackNum: buff叠加数 dwSkillSrcID: buff所属技能ID

uỵt copy vào đây mới hiện ra cái nStackNum :8cool_amazed:


如果函数执行成功,返回1个table,包含: dwID: BuffID nLevel: Buff等级 bCanCancel: 是否能取消 nEndFrame: Buff结束时间 nIndex: buff索引 nStackNum: buff叠加数 dwSkillSrcID: buff所属技能ID

/script local p = GetClientPlayer()
BuffList = p.GetBuffList()
for z,x in pairs(BuffList) do
if x.dwID == 4120 then
Output(p.nIndex)
Output(p.nStackNum)
end
end

phiên bản vn chưa có 2 tham số phía trên thì phải, chẳng ra cái gì cả

Lấy được, mình vẫn lấy hết các tham số đấy để đánh VH mà
 
Mã:
/script N=GetClientPlayer()
T=GetTargetHandle(N.GetTarget())
function buffstack(mb,id,lvl)
stack=0
for z,x in pairs(mb.GetBuffList() or {}) do
    if x.dwID==id and (lvl==nil or x.dwLevel==lvl) then
        stack=x.nStackNum
    end
end
return stack
end
Output(buffstack(N,1696))
Lấy stack buff Tĩnh Minh của Vạn Hoa đây :4cool_beauty:
 
/script local p = GetClientPlayer()
local TMT = 3096
local TMVT = 3276
local function CheckBuff(target,buffID)
BuffList = target.GetBuffList()
buffed = false
for z,x in pairs(BuffList) do
if x.dwID == buffID then
buffed = true
end
end
return buffed
end
local function CheckCDs(skillId)
bOnCD,currentCDTime,totalCDTime = p.GetSkillCDProgress(skillId,p.GetSkillLevel(skillId))
return currentCDTime/16 == 0
end
if (CheckBuff(p, TMVT)) and CheckCDs(TMT) then OnAddOnUseSkill(TMT) else OnAddOnUseSkill(3095) end

nhờ mấy bác mà máy mò ra cái combo của ĐM Kinh Vũ :4cool_beauty:
 
Mã:
/script N=GetClientPlayer()
T=GetTargetHandle(N.GetTarget())
function buffstack(mb,id,lvl)
stack=0
for z,x in pairs(mb.GetBuffList() or {}) do
    if x.dwID==id and (lvl==nil or x.dwLevel==lvl) then
        stack=x.nStackNum
    end
end
return stack
end
Output(buffstack(N,1696))
Lấy stack buff Tĩnh Minh của Vạn Hoa đây :4cool_beauty:

cao thủ :4cool_beauty: xin các hạ chỉ dạy vài chiêu được không :4cool_beauty:

- - - Updated - - -

/script local p = GetClientPlayer()
for z,x in pairs(p.GetBuffList()) do
if x.dwID == 4120 then
Output(x.nStackNum)
end
end

:4cool_beauty:
 
có trò vui nè

1- tạo 1 file functions.lua trong HM\src
2- cho đoạn code này vào và save lại
Mã:
function checkbuff(target, buffID)
buffed = false
for z,x in pairs(target.GetBuffList()) do
	if x.dwID == buffID then
		buffed = true
	end
end
return buffed
end

function buffstack(target, buffID)
stack=0
	for z,x in pairs(target.GetBuffList()) do
		if x.dwID == buffID then
			stack = x.nStackNum
		end
	end
	return stack
end

function checkcd(target, skillID)
bOnCD, currentCDTime, totalCDTime = target.GetSkillCDProgress(skillID, target.GetSkillLevel(skillID))
if currentCDTime/16 == 0 then
	return true
else
	return false
end
end

3- vào config.ini của HM thêm vào
lua_xx=interface\HM\src\functions.lua
trong đó xx là số tiếp theo trong dãy

4- vào game và gọi hàm bét nhè mà không cần khai báo function trong script, tiết kiệm vãi lúa =))


cái này chắc là giống cái YYL của bọn khựa :6cool_smile:
 
Chỉnh sửa cuối:
có trò vui nè

1- tạo 1 file functions.lua trong HM\src
2- cho đoạn code này vào và save lại


3- vào config.ini của HM thêm vào

trong đó xx là số tiếp theo trong dãy

4- vào game và gọi hàm bét nhè mà không cần khai báo function trong script, tiết kiệm vãi lúa =))


cái này chắc là giống cái YYL của bọn khựa :6cool_smile:

quá hay, đã rep cho cưng :4cool_beauty:
 
bác KatherineHaAnh cho hỏi sao đoạn này không chạy
/script p=GetClientPlayer()
if checkbuff(p, 375) then
OnAddOnUseSkill(359)
else
Output("notbuff")
end
local function checkbuff(target,buffID)
BuffList = target.GetBuffList()
buffed = false
for z,x in pairs(BuffList) do
if x.dwID == buffID then
buffed = true
end
end
return buffed
end
mà đoạn này lại chạy
Mã:
/script local p = GetClientPlayer()
local function CheckBuff(p,buffID)
buffed = false
for z,x in pairs(p.GetBuffList()) do
if x.dwID == buffID then
buffed = true
end
end
return buffed
end
if not(CheckBuff(p,375)) then OnAddOnUseSkill(359) end
:5cool_sweat:

- - - Updated - - -

hiểu rồi, đoạn này:


Mã:
local function CheckBuff(p,buffID)
buffed = false
for z,x in pairs(p.GetBuffList()) do

Mã:
local function checkbuff(target,buffID)
BuffList = target.GetBuffList()
buffed = false
for z,x in pairs(BuffList) do

bác cho hỏi cái đoạn khai báo đó có gì khác nhau, nó chỉ là tách rời ra thôi mà sao lại không chạy
 
Chỉnh sửa cuối:
bác KatherineHaAnh cho hỏi sao đoạn này không chạy

mà đoạn này lại chạy
Mã:
/script local p = GetClientPlayer()
local function CheckBuff(p,buffID)
buffed = false
for z,x in pairs(p.GetBuffList()) do
if x.dwID == buffID then
buffed = true
end
end
return buffed
end
if not(CheckBuff(p,375)) then OnAddOnUseSkill(359) end
:5cool_sweat:

- - - Updated - - -

hiểu rồi, đoạn này:


Mã:
local function CheckBuff(p,buffID)
buffed = false
for z,x in pairs(p.GetBuffList()) do

Mã:
local function checkbuff(target,buffID)
BuffList = target.GetBuffList()
buffed = false
for z,x in pairs(BuffList) do

bác cho hỏi cái đoạn khai báo đó có gì khác nhau, nó chỉ là tách rời ra thôi mà sao lại không chạy

Về cơ bản thì hai đoạn khai báo đó chả khác gì nhau cả.
Tặng các bác một số function hữu ích khi viết macro nhé
Function sử dụng skill có ID là id, function sẽ tự check xem có cooldown ko mới dùng skill đó
Mã:
function use(target,id)
A,B,C=N.GetSkillCDProgress(id,target.GetSkillLevel(id))
if C==0 then
OnAddOnUseSkill(id,target.GetSkillLevel(id))
end
end
Function buff kiêm tra xem trên đối tượng target có buff là id ko, nếu có sẽ trả kết quả là số giây buff đó còn lại, nếu ko sẽ trả kết quả là 0
Mã:
function buff(target,id,lvl)
l=0
for z,x in pairs(target.GetBuffList() or {}) do
    if x.dwID==id and (lvl==nil or x.dwLevel==lvl) then
        l=x.nEndFrame-GetLogicFrameCount()
    end
end
return l/16
end
Function Cooldowntime trả về số thời gian còn lại của skill có ID là id
Mã:
function Cooldowntime(target,id)
A,B,C=target.GetSkillCDProgress(id,target.GetSkillLevel(id))
return B/16
end
Với chừng này hàm là các bạn có thể viết được macro khá như ý để thực hiện một routine maximize damage rồi :4cool_beauty:
 
Chỉnh sửa cuối:
Back
Top