Professional Documents
Culture Documents
Kautoplay
Kautoplay
2
2. Cấu trúc chương trình ........................................................................................................................ 2
2.1 Các thành phần ............................................................................................................................... 2
2.2 Tổ chức chương trình..................................................................................................................... 2
3. Mô hình hoạt động ............................................................................................................................. 3
3.1 Hoạt động chương trình ................................................................................................................ 3
3.2 Ngôn ngữ lập trình LUA ................................................................................................................. 3
4. Nguyên lý hoạt động Game .............................................................................................................. 3
4.1 NPC ................................................................................................................................................... 3
4.2 PLAYER ............................................................................................................................................. 3
4.3 ITEM ................................................................................................................................................. 3
4.4 OBJECT ............................................................................................................................................. 4
4.5 SKILL ................................................................................................................................................ 4
5. Các hàm API ........................................................................................................................................ 4
5.1 Các hàm dùng để INCLUDE .......................................................................................................... 4
5.2 Các hàm liên quan đến TIMER ..................................................................................................... 5
5.3 Các hàm liên quan đến SYSTEM .................................................................................................. 6
5.4 Các hàm liên quan đến OBJ .......................................................................................................... 7
5.5 Các hàm liên quan đến ITEM........................................................................................................ 9
5.6 Các hàm liên quan đến PLAYER ................................................................................................. 22
5.7 Các hàm liên quan đến QUEST................................................................................................... 36
5.8 Các hàm liên quan đến TEAM ..................................................................................................... 36
5.9 Các hàm liên quan đến NPC........................................................................................................ 37
5.10 Các hàm liên quan đến SKILL ..................................................................................................... 39
5.11 Các hàm liên quan đến MENU .................................................................................................... 41
5.12 Các hàm liên quan đến SHOP ..................................................................................................... 42
5.13 Các hàm liên quan đến STALL .................................................................................................... 42
6. Cấu trúc các tập tin .......................................................................................................................... 43
6.1 Config.lua ....................................................................................................................................... 43
6.2 Script.lua ........................................................................................................................................ 47
Hướng dẫn lập trình KAutoPlay Trang 2
1. Giới thiệu
KAutoPlay là chương trình hỗ chơi game tự động cho game Võ Lâm Truyền Kỳ 1, được xây
dựng nhầm mục đích tạo ra một môi trường lập trình được để hỗ trợ một số tính năng chơi
game tự động. Chương trình được thiết kế theo hướng mở, tức là cho phép người dùng có thể
tự lập trình theo ý mình bằng ngôn ngữ LUA bằng cách sử dụng tập hàm APIs mà chương trình
đã cung cấp sẵn. Đây là điểm mạnh của chương trình tạo nên tính tiện dụng và mở rộng về sau
này.
Chương trình hỗ trợ chơi không giới hạn tài khoản trên cùng 1 chương trình. Khi nhân vật được
đăng nhập vào trong game. Tên nhân vật sẽ được hiện lên trong một danh sách bao gồm: Tên
nhân vật – % kinh nghiệm hiện tại – đẳng cấp hiện tại. Khi người dùng chọn vào nhân vật
trong danh sách (bằng cách click chuột vào tên nhân vật). Chương trình sẽ tự động nạp các
thiết lập (user config) trước đó lên GUI, tại bước này người dùng có thể thay đổi các thiết lập
trên GUI. Khi người dùng check vào ô checkbox tương ứng với tên nhân vật, chương trình sẽ
lưu lại các thiết lập trên GUI xuống tập tin config.lua và bắt đầu thực thi tập tin
script.lua. Khi người dùng muốn ngưng thực thi tập tin script.lua, chỉ cần bỏ chọn ô
checkbox tương ứng với tên nhân vật trong danh sách.
KAutoPlay được thiết kế sử dụng LUA làm ngôn ngữ chính trong việc lập trình, khai thác các
tập hàm API mà chương trình đã cung cấp. Để hiểu thêm về ngôn ngữ LUA, các bạn vui lòng
tham khảo tại địa chỉ http://lua.org và tài liệu hướng dẫn kèm theo chương trình.
4.1 NPC
NPC trong game được lưu trong một mảng gồm 256 đối tượng, mỗi đối tượng đều có một chỉ
số (index) quy định vị trí thứ tự của nó trong mảng. Đối tượng thứ 0 (tức index = 0) không sử
dụng. Đối tượng thứ 1 (index = 1) là người chơi, các đối tượng còn lại là quái, người chơi khác
và các npc khác (ví dụ npc tạp hóa, thợ rèn, dã tẩu, ...). Mỗi đối tượng npc đều có thuộc tính
riêng bao gồm các chỉ số sinh lực, nội lực, đẳng cấp, tên, loại, phái, hệ…
4.2 PLAYER
Đối tượng thuần túy xét về mặt người chơi – nhân vật mình đang điều khiển (cần phân biệt với
mảng đối tượng npc với index = 1 cũng là người chơi, nhưng là người chơi khác) chứa các
thuộc tính điểm kinh nghiệm, trạng thái di chuyển, các vật phẩm liên quan, …
4.3 ITEM
Vật phẩm trong game được lưu trong một mảng gồm 256 đối tượng và mỗi item đều có một
index quy định vị trí của nó trong mảng. Mỗi vật phẩm đều có các thuộc tính cơ bản như tên,
hệ, màu, thuộc tính ma pháp, … Lưu ý: vật phẩm trong game định nghĩa là những gì chứa trên
người nhân vật, trong rương, … còn vật phẩm rơi ngoài mặt đất là đối tượng OBJ. Vật phẩm có
thêm các thuộc tính cơ bản như sát thương lớn, nhỏ, độ bền, được lưu trong mảng có 7 phần
Hướng dẫn lập trình KAutoPlay Trang 4
tử, thuộc tính yêu cầu như thân pháp, sức mạnh, được lưu trong mảng có 6 phần tử. Thuộc
tính ma pháp như các chỉ số kháng, sinh lực, nội lực được lưu trong mảng 6 phần tử.
4.4 OBJECT
Vật phẩm ngoài mặt đất trong game được lưu trong mảng gồm 256 đối tượng, mỗi đối tượng
đều có một index qunh định vị trí của nó trong mảng. OBJECT mô tả vật phẩm đang nằm trên
mặt đất. Mỗi OBJECT đều có thuộc tính riêng như tên, hệ, level, màu, rộng, cao, …
4.5 SKILL
Là một mảng gồm có 80 phần tử chứa các thông tin như ID skill, đẳng cấp hiện tại, … Các
chiêu thức trong game chủ yếu thuộc 3 loại: chiêu đánh chính, chiêu hỗ trợ chủ động và chiêu
hỗ trợ bị động. Chiêu đánh chính thường được thiết lập bên trái, các chiêu hỗ trợ thường được
thiết lập bên phải.
IncludeFile(char* szFileName)
szFilename: tên tập tin cần chèn bao gồm cả đường dẫn.
Dùng để chèn tập tin lua vào một tập tin lua khác.
Ví dụ: IncludeFile(“config.lua”)
Khi dùng hàm IncludeFile chương trình sẽ nạp và thực thi tập tin được chèn vào. Cho nên
trong tập tin này thường chứa các biến toàn cục, các hàm, … dùng để sử dụng trong tập tin
chính script.lua.
IncludeLib(char *szLibName)
szLibName: tên thư viện cần dùng, gồm các tên sau:
ITEM: thư viện chứa các hàm thao tác trên vật phẩm.
OBJ: thư viện chứa các hàm thao tác trên object.
NPC: thư viện chứa các hàm thao tác trên npc.
PLAYER: thư viện chứa các hàm thao tác trên người chơi.
SKILL: thư viện chứa các hàm thao tác trên chiêu thức.
MENU: thư viện chứa các hàm thao tác trên menu của npc.
SHOP: thư viện chứa các hàm thao tác đến NPC tạp hóa, tiệm thuốc, thợ rèn.
TEAM: thư viện chứa các hàm thao tác đến tổ đội.
QUEST: thư viện chứa các hàm thao tác đến nhiệm vụ Dã Tẩu.
STALL: thư viện chứa các hàm thao tác đến shop của người bày bán.
Hướng dẫn lập trình KAutoPlay Trang 5
SYSTEM: thư viện chứa các hàm thao tác đến hệ thống.
TIMER: thư viện chứa các hàm thao tác đến thời gian.
Ví dụ: IncludeLib(“ITEM”)
Tất cả các hàm liên quan đến timer khi gọi phải theo dạng timer.Tên Hàm([đối số])
Khởi động bộ định thời với ID và thời gian timout tính bằng mili giây. Khi khởi động một timer
chương trình sẽ tự động gọi hàm OnTimer và truyền vào timer ID để chương trình xử lý. Do đó
trong script bắt buộc phải khai báo hàm OnTimer và StopTimer như sau:
function OnTimer(nTimerID)
end
function StopTimer()
end
function OnTimer(nTimerID)
if nTimerID == 1000 then
system.MessageBox(“This is a message”)
end
end
function main()
timer.Start(1000, 2000)
end
Stop(int nTimerID)
Hướng dẫn lập trình KAutoPlay Trang 6
Ví dụ: timer.Stop(1000)
Tắt timer có ID là 1000, dòng lệnh trên phải được gọi trong hàm StopTimer.
Sleep(int nTime)
nTime: thời gian tạm dừng tính bằng mili giây.
Tạm dừng sự thực thi chương trình trong khoảng thời gian tính bằng mili giây.
Ví du: timer.Sleep(1000)
Tạm dừng thực thi chương trình trong 1 giây, sau thời gian 1 giây chương trình sẽ thực thi lệnh
tiếp theo.
Tất cả các hàm liên quan đến system đều gọi theo dạng system.Tên Hàm([đối số])
ShutdownWindows(int nType)
nType = 0 – thực hiện việc logoff
nType = 1 – thực hiện việc tắt máy
nType = 2 – thực hiện việc khởi động lại máy
Ví dụ: system.ShutdownWindows(1)
ExitGame()
Thoát game hiện tại tương ứng với nhân vật được chọn trên GUI.
Ví dụ: system.ExitGame()
HideGame()
Ẩn cửa sổ game tương ứng với nhân vật được chọn trên GUI.
Ví dụ: system.HideGame()
MessageBox(char *szMsg)
szMsg: nội dung câu thông báo.
Hiển thị một hộp thoại thông báo. Hàm này tiện lợi trong việc debug, xuất các giá trị, chuỗi, …
trong lúc lập trình.
Hướng dẫn lập trình KAutoPlay Trang 7
Tất cả các hàm liên quan đến object đều gọi theo dạng obj.Tên Hàm([đối số])
Ví dụ:
for i = 1, 255 do
if obj.IsExists(i) then
system.MessageBox(obj.GetName(i))
end
end
Lấy tọa độ trong game của vật phẩm trên mặt đất.
Trả về: 3 giá trị tương ứng với tọa độ x, y và ID của bản đồ.
Ví dụ:
for i = 1, 255 do
if obj.IsExists(i) then
local nX, nY = obj.GetMapPos(i)
system.MessageBox(nX..” “..nY)
end
end
obj_kind_money
obj_kind_loopsound
obj_kind_randsound
obj_kind_light
obj_kind_door
obj_kind_trap
obj_kind_prop = 10
Ví dụ:
for i = 1, 255 do
if obj.IsExists(i) and obj.GetKind(i) == 3 then
player.PickUpObj(obj.GetIndex(i))
end
end
Lấy vị trí của vật phẩm trong mảng 256 đối tượng. Mỗi một đối tượng trong mảng đều có một
vị trí riêng. Đây là thứ tự thực sự của đối tượng.
Trả về: thứ tự của của đối tượng trong mảng.
Ví dụ:
for i = 1, 255 do
if obj.IsExists(i) and obj.GetName(i) == “Khæng T-íc Linh” then
return obj.GetIndex(i) end
end
Lấy tên của vật phẩm. Tên là một chuỗi các ký tự theo dạng TCVN3.
Ví dụ:
for i = 1, 255 do
if obj.IsExists(i) and obj.GetName(i) == “§¹i Phong §ao” then
return end
end
Lấy màu của vật phẩm. Màu của vật phẩm quy định loại vật phẩm như đồ trắng, đồ xanh,
hoàng kim, bạch kim, …
Trả về: 0: màu trắng, 3: xanh, …
Lấy kích thước của vật phẩm. Kích thước của vật phẩm tính bằng ô (trong hành trang)
Trả về: 2 giá trị tương ứng với chiều rộng và cao của vật phẩm.
Ví dụ:
for i = 1, 255 do
if obj.IsExists(i) then
local nWidth, nHeight = obj.GetSize(i)
end
end
Trả về lượng tiền trên mặt đất. Tiền trên mặt đất tính bằng lượng.
Tất cả các hàm liên quan đến vật phẩm đều được gọi với dạng item.Tên Hàm([đối số])
Lấy 3 giá trị key của một vật phẩm bao gồm Genre, Detail, Particular. 3 giá trị này dùng để
phân biệt chính xác vật phẩm và cũng dùng để xác định vật phẩm.
Ví dụ:
local nIndex, nPlace, nX, nY = player.GetFirstItem()
while nIndex ~= 0 do
local nGenre, nDetail, nParticular = item.GetKey(nIndex)
if nGenre == 5 and nDetail == 0 and nParticular == 0 then
system.MessageBox(item.GetName(nIndex))
end
nIndex, nPlace, nX, nY = player.GetNextItem()
end
Lấy kích thước của một vật phẩm. Kích thước của vật phẩm tính bằng ô.
Trả về: 2 giá trị tương ứng với chiều rộng vào cao.
Lấy giá bán shop tính bằng lượng của vật phẩm.
Trả về: giá bán tính bằng lượng vào trong các shop.
Ví dụ:
local nIndex, nPlace, nX, nY = player.GetFirstItem()
while nIndex ~= 0 do
if item.GetPrice(nIndex) < 2000 then
shop.SellItem(nIndex)
end
nIndex, nPlace, nX, nY = player.GetNextItem()
end
Ví dụ:
local nIndex, nPlace, nX, nY = player.GetFirstItem()
while nIndex ~= 0 do
Hướng dẫn lập trình KAutoPlay Trang 11
system.MessageBox(item.GetName(nIndex))
nIndex, nPlace, nX, nY = player.GetNextItem()
end
Ví dụ:
local nIndex, nPlace, nX, nY = player.GetFirstItem()
while nIndex ~= 0 do
system.MessageBox(item.GetIntro(nIndex))
nIndex, nPlace, nX, nY = player.GetNextItem()
end
Lấy thuộc tính giá trị cơ bản của vật phẩm. Với nCol có giá trị từ 0 6 quy định các dòng
thuộc tính cơ bản.
Trả về: 3 giá trị tương ứng với loại thuộc tính, giá trị 1, giá trị 2, giá trị 3.
Với loại thuộc tính có giá trị từ 0 172, theo thứ tự như sau:
invalid_attrib = -1,
magic_skill_begin,
magic_skill_cost_v,
magic_skill_costtype_v,
magic_skill_mintimepercast_v,
magic_skill_misslenum_v,
magic_skill_misslesform_v,
magic_skill_param1_v,
magic_skill_param2_v,
magic_skill_reserve1,
magic_skill_reserve2,
magic_skill_reserve3,
magic_skill_reserve4,
magic_skill_eventskilllevel,
magic_skill_end,
magic_missle_begin,
magic_missle_movekind_v,
magic_missle_speed_v,
magic_missle_lifetime_v,
Hướng dẫn lập trình KAutoPlay Trang 12
magic_missle_height_v,
magic_missle_damagerange_v,
magic_missle_radius_v,
magic_missle_reserve1,
magic_missle_reserve2,
magic_missle_reserve3,
magic_missle_reserve4,
magic_missle_reserve5,
magic_missle_end,
magic_item_begin,
magic_weapondamagemin_v,
magic_weapondamagemax_v,
magic_armordefense_v,
magic_durability_v,
magic_requirestr,
magic_requiredex,
magic_requirevit,
magic_requireeng,
magic_requirelevel,
magic_requireseries,
magic_requiresex,
magic_requiremenpai,
magic_weapondamageenhance_p,
magic_armordefenseenhance_p,
magic_requirementreduce_p,
magic_indestructible_b,
magic_item_reserve1,
magic_item_reserve2,
magic_item_reserve3,
magic_item_reserve4,
magic_item_reserve5,
magic_item_reserve6,
magic_item_reserve7,
magic_item_reserve8,
magic_item_reserve9,
magic_item_reserve10,
magic_item_end,
magic_damage_begin,
magic_attackrating_v,
magic_attackrating_p,
magic_ignoredefense_p,
magic_physicsdamage_v,
magic_colddamage_v,
magic_firedamage_v,
magic_lightingdamage_v,
Hướng dẫn lập trình KAutoPlay Trang 13
magic_poisondamage_v,
magic_magicdamage_v,
magic_physicsenhance_p,
magic_steallife_p,
magic_stealmana_p,
magic_stealstamina_p,
magic_knockback_p,
magic_deadlystrike_p,
magic_fatallystrike_p,
magic_stun_p,
magic_damage_reserve1,
magic_damage_reserve2,
magic_damage_reserve3,
magic_damage_reserve4,
magic_damage_reserve5,
magic_damage_reserve6,
magic_damage_reserve7,
magic_damage_reserve8,
magic_damage_reserve9,
magic_damage_reserve10,
magic_damage_end,
magic_normal_begin,
magic_lifemax_v,
magic_lifemax_p,
magic_life_v,
magic_lifereplenish_v,
magic_manamax_v,
magic_manamax_p,
magic_mana_v,
magic_manareplenish_v,
magic_staminamax_v,
magic_staminamax_p,
magic_stamina_v,
magic_staminareplenish_v,
magic_strength_v,
magic_dexterity_v,
magic_vitality_v,
magic_energy_v,
magic_poisonres_p,
magic_fireres_p,
magic_lightingres_p,
magic_physicsres_p,
magic_coldres_p,
magic_freezetimereduce_p,
magic_burntimereduce_p,
Hướng dẫn lập trình KAutoPlay Trang 14
magic_poisontimereduce_p,
magic_poisondamagereduce_v,
magic_stuntimereduce_p,
magic_fastwalkrun_p,
magic_visionradius_p,
magic_fasthitrecover_v,
magic_allres_p,
magic_attackspeed_v,
magic_castspeed_v,
magic_meleedamagereturn_v,
magic_meleedamagereturn_p,
magic_rangedamagereturn_v,
magic_rangedamagereturn_p,
magic_addphysicsdamage_v,
magic_addfiredamage_v,
magic_addcolddamage_v,
magic_addlightingdamage_v,
magic_addpoisondamage_v,
magic_addphysicsdamage_p,
magic_slowmissle_b,
magic_changecamp_b,
magic_physicsarmor_v,
magic_coldarmor_v,
magic_firearmor_v,
magic_poisonarmor_v,
magic_lightingarmor_v,
magic_damagetomana_p,
magic_lucky_v,
magic_steallifeenhance_p,
magic_stealmanaenhance_p,
magic_stealstaminaenhance_p,
magic_allskill_v,
magic_metalskill_v,
magic_woodskill_v,
magic_waterskill_v,
magic_fireskill_v,
magic_earthskill_v,
magic_knockbackenhance_p,
magic_deadlystrikeenhance_p,
magic_stunenhance_p,
magic_badstatustimereduce_v,
magic_manashield_p,
magic_adddefense_v,
magic_adddefense_p,
magic_fatallystrikeenhance_p,
Hướng dẫn lập trình KAutoPlay Trang 15
magic_lifepotion_v,
magic_manapotion_v,
magic_physicsresmax_p,
magic_coldresmax_p,
magic_fireresmax_p,
magic_lightingresmax_p,
magic_poisonresmax_p,
magic_allresmax_p,
magic_coldenhance_p,
magic_fireenhance_p,
magic_lightingenhance_p,
magic_poisonenhance_p,
magic_magicenhance_p,
magic_attackratingenhance_v,
magic_attackratingenhance_p,
magic_addphysicsmagic_v,
magic_addcoldmagic_v,
magic_addfiremagic_v,
magic_addlightingmagic_v,
magic_addpoisonmagic_v=172
skill_begin=
skill_cost_v=Tiêu hao: #d1- điểm
skill_costtype_v=Loại hình tiêu hao: #k1-
skill_mintimepercast_v=Thời gian giãn cách #d1- giây
skill_misslenum_v=Đồng thời xuất #d1-
skill_misslesform_v=
skill_param1_v=
skill_param2_v=
skill_reserve1=
skill_reserve2=
skill_reserve3=
skill_reserve4=
skill_reserve5=
skill_end=
missle_begin=
missle_movekind_v=
missle_speed_v=Tốc độ xuất chiêu khí công
missle_lifetime_v=Hiệu quả xuất chiêu khí công
missle_height_v =
missle_damagerange_v=Phạm vi sát thương khí công
missle_radius_v =
missle_reserve1=
Hướng dẫn lập trình KAutoPlay Trang 16
missle_reserve2=
missle_reserve3=
missle_reserve4=
missle_reserve5=
missle_end=
item_begin=
weapondamagemin_v=Sát thương nhỏ nhất: #d1- điểm
weapondamagemax_v=Sát thương lớn nhất: #d1- điểm
armordefense_v=Né tránh: #d1- điểm
durability_v=Độ bền: #d1- điểm
requirestr=Yêu cầu sức mạnh: #d1- điểm
requiredex=Yêu cầu thân pháp: #d1- điểm
requirevit=Yêu cầu sinh khí: #d1- điểm
requireeng=Yêu cầu nội công: #d1- điểm
requirelevel=Đẳng cấp yêu cầu: #d1-
requireseries=Thuộc tính ngũ hành: #s1-
requiresex=Giới tính: #x1-
requiremenpai=Môn phái: #m1-
require_translife=Yêu cầu võ công: học được Giá Nông thần công tâm
pháp
weapondamageenhance_p=Tăng sát thương: #d1-%
armordefenseenhance_p=Tăng né tránh: #d1-%
requirementreduce_p=Giảm thiểu yêu cầu: #d1-%
indestructible_b=Không thể phá hủy
expenhance_p=Sát thương địch nhận được kinh nghiệm #d1+%
item_reserve1=
item_reserve2=
item_reserve3=
item_reserve4=
item_reserve5=
item_reserve6=
item_reserve7=
item_reserve8=
item_reserve9=
item_reserve10=
item_end=
damage_begin=
attackrating_v=Độ chính xác: #d1- điểm
attackrating_p=Độ chính xác: #d1-%
ignoredefense_p=Bỏ qua né tránh: #d1-%
physicsdamage_v=Sát thương vật lý: #d1- đến #d3- điểm
colddamage_v=Băng sát: #d1- đến #d3- điểm
firedamage_v=Hỏa sát: #d1- đến #d3- điểm
lightingdamage_v=Lôi sát: #d1- đến #d3- điểm
poisondamage_v=Độc sát: #d1- điểm/lần
Hướng dẫn lập trình KAutoPlay Trang 17
Lưu ý: _p trong mỗi thuộc tính phân loại quy định +%/-%, và _v quy định +điểm/-điểm
Ví dụ: magic_fireres_p: kháng hỏa theo % với giá trị % được quy định bởi giá trị trả về giá
trị 1, giá trị 2 và giá trị 3.
Các thuộc tính cơ bản của item bao gồm, sát thương nhỏ nhất, lớn nhất, độ bền, …
Ví dụ:
Lấy các giá trị thuộc tính yêu cầu của vật phẩm. Với nCol có giá trị từ 0 5.
Trả về: Xem hàm GetBaseAttrib.
Các thuộc tính yêu cầu của một vật phẩm có thể là yêu cầu về sức mạnh, đẳng cấp, thân pháp,
…
Lấy giá trị thuộc tính ma pháp của vật phẩm. Với nCol có giá trị từ 0 5.
Trả về: Xem hàm GetBaseAttrib.
Các thuộc tính ma pháp của vật phẩm bao gồm các dòng ẩn và hiện như kháng hỏa, sát
thương vật lý, tăng sinh lực, nội lực, …
Ví dụ:
for i = 0, 11 do
local nItemIndex = player.GetEquipmentItem(i)
if nItemIndex > 0 then
local nMin, nMax = item.GetDuration(nItemIndex)
if nMin < 4 then
shop.RepairItem(nItemIndex)
end
end
Hướng dẫn lập trình KAutoPlay Trang 22
end
Lấy ID của lệnh bài làm nhiệm vụ bang hội. ID này cho biết nhiệm vụ tương ứng trong lệnh bài.
Trả về: ID của nhiệm vụ.
Tất cả các hàm liên quan đến player đều gọi theo dạng player.Tên Hàm([đối số])
Duyệt qua tất cả các vật phẩm của nhân vật, bao gồm các vật phẩm trên người và trong các
rương, trên tay, … Khi muốn xác định một loại vật phẩm nào của người chơi, bắt buộc phải
dùng hàm này.
Trả về: 4 giá trị tương ứng với thứ tự của vật phẩm, nơi đặt vật phẩm, tọa độ x và y. Nơi đặt
vật phẩm có giá trị từ 1 12 tương ứng như sau:
pos_hand = 1
pos_equip = 2
pos_equiproom = 3
pos_repositoryroom = 4
pos_traderoom = 5
pos_trade1 = 6
pos_immediacy = 7
pos_giveitem = 12
Ví dụ:
local nIndex, nPlace, nX, nY = player.GetFirstItem()
while nIndex ~= 0 do
if nPlace == 3 or nPlace == 7 then
local G, _, P = item.GetKey(nIndex)
if G == 0 and P == 0 then
player.UseItem(nIndex, nPlace, nX, nY)
end
end
nIndex, nPlace, nX, nY = player.GetNextItem()
end
LockBox()
Khóa rương chứa đồ của người chơi.
Ví dụ: player.LockBox()
UnlockBox(DWORD dwPassword)
dwPassword: mã rương bằng số.
Mở rương chứa đồ. Mật mã truyền vào hàm là mật mã thực sự của rương chứa đồ.
Ví dụ: player.UnlockBox(1234)
SecureUnlockBox(DWORD dwPassword)
dwPassword: mã rương đã được mã hóa.
Ví dụ: player.UnlockBox(4569876)
AcceptGiveItem(BOOL bAccepted)
bAccepted: có 2 giá trị, 0 là chấp nhận và 1 là hủy bỏ việc giao vật phẩm.
Xác nhận hoặc hủy bỏ khi người chơi giao vật phẩm (giao vật phẩm cho Dã Tẩu hoặc giao
khiêu chiến lệnh sẽ hiện lên GUI cho người chơi đặt vật phẩm vào rồi bấm xác nhận hoặc hủy
bỏ.
Ví dụ:
player.MoveItem(3,0,0,0,0,0)
timer.Sleep(200)
player.MoveItem(12,0,0,0,0,0)
player.AcceptGiveItem(1)
int GetOnlineTime()
Lấy thời gian online của nhân vật tính bằng giây.
Hướng dẫn lập trình KAutoPlay Trang 24
Trả về: thời gian mà nhân vật đã online tính bằng giây.
Ví dụ:
local nTime = player.GetOnlineTime()
if nTime > 5 * 60 * 60 then system.ShutdownWindows(2) end
Lấy thứ tự của vật phẩm đang mang trên người của nhân vật. Bao gồm nhẫn, dây chuyền,
ngọc bội, nón, bao tay, vũ khí, …
Trả về: thứ tự của vật phẩm. Với nPos có giá trị từ 0 10 tương ứng như sau:
itempart_head = 0,
itempart_body,
itempart_belt,
itempart_weapon,
itempart_foot,
itempart_cuff,
itempart_amulet,
itempart_ring1,
itempart_ring2,
itempart_pendant,
itempart_horse = 10
Ví dụ:
for i = 1, 10 do
local nIndex = player.GetEquipmentItem(i)
local nCurrDuaration = item.GetDuration(nIndex)
end
int GetLeftSkillID()
Lấy ID của chiêu đánh bên trái đang chọn.
int GetRightSkillID()
Lấy ID của chiêu đánh bên phải đang chọn.
BOOL GetRunStatus()
Lấy trạng thái đang chạy hay đi bộ của nhân vật.
Trả về: 0 – đang ở trạng thái đi bộ, 1 – đang ở trạng thái chạy bộ
int GetMoveFrame()
Hướng dẫn lập trình KAutoPlay Trang 25
Lấy số frame di chuyển hiện tại của nhân vật. Khi nhân vật di chuyển số frame này sẽ tự động
giảm dần, khi nhân vật dừng lại sẽ tự động tăng lên. Do đó khi điều khiển nhân vật di chuyển
cần xét tới yếu tố này. Mặc định số frame của nhân vật là 8.
Ví dụ:
function MoveTo(nX, nY)
local nDestX, nDestY, dX, dY
if player.GetMoveFrame() >= 8 then
local nPlayerX, nPlayerY = player.GetMapPos()
dX = nPlayerX & 0x1F
dY = nPlayerY & 0x1F
nDestX = nX + 0x10 – dX
nDestY = nY + 0x10 – dY
if player.GetRunStatus() == 0 then
player.SendCommand(2, nDestX, nDestY)
player.SyncCommandWalk(nX, nY);
else
player.SendCommand(3, nDestX, nDestY)
player.SyncCommandRun(nX, nY)
end
player.SetMoveFrame(0)
end
end
int GetRepute()
Lấy điểm danh vọng hiện tại của nhân vật.
Trả về: điểm danh vọng hiện tại.
int GetFuYuan()
Lấy điểm phúc duyên hiện tại của nhân vật.
Trả về: điểm phúc duyên hiện tại.
SetMoveFrame(int nFrame)
nFrame: số frame cần thiết lập cho nhân vật.
Thiết lập số frame hiện tại cho nhân vật trong quá trình di chuyển.
Hướng dẫn lập trình KAutoPlay Trang 26
SetLeftSkillID(int nSkillID)
nSkillID: ID của chiêu cần thiết lập.
SetRightSkillID(int nSkillID)
nSkillID: ID của chiêu cần thiết lập.
Sử dụng vật phẩm. Chỉ có những vật phẩm nào tương tác bằng cách bấm chuột phải mới sử
dụng hàm này.
Ví dụ:
local nIndex, nPlace, nX, nY = player.GetFirstItem()
while nIndex ~= 0 do
local szItemName = item.GetName(nIndex)
if szItemName == “Tiªn Th¶o Lé” then
player.UseItem(nIndex, nPlace, nX, nY)
break
end
nIndex, nPlace, nX, nY = player.GetNextItem()
end
MoveItem(int nPlace1, int nX1, int nY1, int nPlace2, int nX2, int nY2)
nPlace1, nX1, nY1: vị trí thứ 1 của vật phẩm.
nPlace2, nX2, nY2: vị trí thứ 2 của vật phẩm.
Di chuyển vật phẩm từ vị trí 1 sang vị trí 2. Khi di chuyển vật phẩm, cần thực hiện 2 thao tác.
Thứ 1 là nhất vật phẩm lên tay từ vị trí 1 và sau đó đặt vật phẩm xuống vị trí 2. Giữa 2 thao tác
cần có thời gian ngừng.
Ví dụ:
player.MoveItem(7,1,1,0,0,0) Nhặt vật phẩm lên tay
timer.Sleep(200) Ngừng để có hiệu ứng
player.MoveItem(3,1,1,0,0,0) Đặt vật phẩm xuống
Hướng dẫn lập trình KAutoPlay Trang 27
Tự động di chuyển các loại dược phẩm từ hành trang xuống ô phím tắt.
Trả về: 0 – thất bại, 1 – thành công.
Ví dụ: AutoMoveItem(3,0,0,7,0,0)
DialogNpc(int nNpcIndex)
nNpcIndex: thứ tự của NPC cần đối thoại.
Mở hộp thoại của NPC. Chỉ có các NPC nào mà đối thoại được mới sử dụng.
Ví dụ:
for i = 2, 255 do
if npc.GetKind(i) == 3 and npc.GetName(i) == “D· TÈu” then
local nIndex = npc.GetIndex(i)
player.DialogNpc(nIndex)
while menu.IsVisible(0) == 0 then timer.Sleep(50) end
break
end
end
ThrowAwayItem()
Quăng vật phẩm đang cầm trên tay ra mặt đất.
Ví dụ:
local i, p, x, y = player.GetFirstItem()
while i ~= 0 do
local name = item.GetName(i)
if name == “§¹i Phong §ao” then
player.MoveItem(p, x, y, 0,0,0)
timer.Sleep(200)
player.ThrowAwayItem()
break
end
end
Rút tiền hoặc gởi tiền vào rương chứa đồ của nhân vật.
OpenBox()
Mở rương chứa đồ.
CloseBox()
Đóng rương chứa đồ.
CloseStatus()
Đóng giao diện hành trang.
CloseItem()
Đóng giao diện trang bị.
PickUpObj(int nObjIndex)
nObjIndex: thứ tự của vật phẩm dưới mặt đất.
Ví dụ:
for i = 1, 255 do
if obj.IsExists(i) and obj.GetKind(i) == 3 then
player.PickUpObj(obj.GetIndex(i))
end
end
Ví du:
for i = 1, 255 do
if obj.IsExists(i) and obj.GetKind(i) == 3 then
local nX, nY = obj.GetMapPos()
player.MoveTo(nX, nY)
Hướng dẫn lập trình KAutoPlay Trang 29
player.PickUpObj(obj.GetIndex(i))
end
end
Tìm đường đi tới tọa độ của NPC hoặc tên NPC. Hàm này xét ưu tiên tọa độ hoặc tên NPC. Nếu
dùng tên thì tham số x, y là 0 và ngược lại. Hàm này dùng dữ liệu có trong tập tin bản đồ
tương ứng và tính toán tìm đường đi tới đích.
ExecuteScript(char *szScriptName)
szScriptName: tên script cần thực hiện.
UseBuffSkill(int nSkillID)
nSkillID: ID của chiêu hỗ trợ bị động.
Sử dụng các chiêu hỗ trợ bị động. Các chiêu buff sử dụng chuột phải. Ví dụ: tọa vọng vô ngã
(Võ Đan), túy điệp cuồng vũ (Cái Bang), … Hàm này sẽ không tự động buff lại nếu hết thời gian
của chiêu thức.
Ví dụ: player.UseBuffSkill(player.GetRightSkillID())
UseAuraSkill(int nSkillID)
nSkillID: ID của chiêu hỗ trợ.
Sử dụng chiêu hỗ trợ như Từ hàng phổ độ của Nga My. Hoặc các chiêu có tính chất tượng tự.
Chỉ hỗ trợ các chiêu sử dụng bằng chuột phải.
Ví dụ: player.UseAuraSkill(player.GetRightSkillID())
OpenStall(int nNpcIndex)
nNpcIndex: thứ tự của người chơi đang lập shop bán hàng.
Ví dụ:
for i = 2, 255 do
if npc.IsExists(i) and npc.GetKind() == 1 then
if npc.IsStall(i) then
player.OpenStall(i)
while stall.IsVisible() == 0 then timer.Sleep(50) end
end
end
end
FollowPeople(int nNpcIndex)
nNpcIndex: thứ tự của NPC, có thể là quái, người chơi, NPC trong thành.
Hàm xử lý các thao tác trên NPC khác. Nếu đối tượng là:
Người chơi: nhân vật sẽ chạy tới.
Người chơi đang lập shop bày bán: sẽ mở shop (nếu nhân vật đang đứng gần).
Các NPC trong thành: sẽ đối thoại với NPC đó.
Các NPC quái: tấn công NPC tương ứng.
FollowObject(int nObjIndex)
nObjIndex: thứ tự của vật phẩm ngoài mặt đất.
Hàm xử lý trên OBJECT khác. Nếu nhân vật đang đứng gần vật phẩm sẽ:
Nếu vật phẩm là tiền hoặc đặc phẩm: nhân vật sẽ nhặt.
Các vật phẩm còn lại: sẽ click chuột lên vật phẩm.
FollowAttack(int nIndex)
nIndex: thứ tự của đối tượng cần tấn công.
BOOL IsFightMode()
Kiểm tra nhân vật đang trong thành hay ngoài vùng chiến đấu.
Trả về: 1 – vùng chiến đấu, 0 – trong thành.
BOOL IsRideHorse()
Kiểm tra nhân vật có đang trên ngựa không.
Trả về: 0 – không trên ngựa, 1 – đang trên ngựa.
BOOL IsPoisonState()
Hướng dẫn lập trình KAutoPlay Trang 31
BOOL IsFreezeState()
Kiểm tra trạng thái bị đóng băng của nhân vật.
Trả về: 0 – không đóng băng, 1 – đang đóng băng.
BOOL IsStunState()
Kiểm tra trạng thái bị choáng của nhân vật.
Trả về: 0 – không choáng, 1 – đang choáng.
BOOL IsDoubleExp()
Kiểm tra trạng thái nhân đôi kinh nghiệm của nhân vật.
Trả về: 0 – không nhân đôi, 1 – đang nhân đôi, nhân ba.
int GetLevel()
Lấy đẳng cấp hiện tại của nhân vật.
Trả về: đẳng cấp hiện tại của nhân vật.
int GetSeries()
Lấy hệ ngũ hành của nhân vật.
Trả về: các giá trị 0 4 tương ứng: kim, mộc, thủy, hỏa, thổ.
int GetColor()
Lấy màu hiện tại của nhân vật.
Trả về: các giá trị từ 0 4 tương ứng với các màu trắng, xanh, đỏ, tím, …
int GetDoing()
Lấy hành động hiện tại của nhân vật.
Trả về: các giá trị từ 0 12 tương ứng như sau:
do_none = 0
do_stand,
do_walk,
do_run,
do_jump,
do_skill,
do_magic,
Hướng dẫn lập trình KAutoPlay Trang 32
do_attack,
do_sit,
do_hurt,
do_death,
do_defense,
do_idle = 12
char* GetName()
Lấy tên nhân vật.
Trả về: tên của nhân vật theo dạng TCVN3.
int GetPeopleIndex()
Lấy thứ tự của đối tượng cần đánh hoặc theo sau.
Trả về: thứ tự của đối tượng cần đánh hoặc theo sau.
int GetKillerStatus()
Lấy trạng thái luyện công, chiến đấu hay đồ sát của nhân vật.
Trả về: các giá trị tương ứng 0 – luyện công, 1 – chiến đấu , 2 – đồ sát.
Lấy thứ tự của đối tượng gần nhân vật nhất tiếp theo.
Trả về: thứ tự (index) của đối tượng.
Ví dụ:
local nItemIndex = player.GetItemIndexFromPlace(4, 0, 0)
if nItemIndex > 0 then system.MessageBox(item.GetName(nItemIndex)) end
DWORD GetMapID()
Lấy ID của bản đồ hiện tại nhân vật đang đứng.
Trả về: ID của bản đồ.
char* GetMapName()
Lấy tên của bản đồ hiện tại nhân vật đang đứng.
Trả về: tên của bản đồ dạng TCVN3.
char* GetLoginServer()
Lấy tên máy chủ mà nhân vật đã đăng nhập.
Trả về: tên máy chủ dạng TCVN3.
char* GetIntroMessage()
Lấy dòng thông báo rao bán hàng hóa trên đầu của nhân vật.
Trả về: chuỗi rao bán dạng TCVN3.
Lấy giá trị nhiệm vụ hoặc các thông số đặt biệt của nhân vật. Ứng với giá trị trả về sẽ mô tả cụ
thể chi tiết loại hình nhiệm vụ. Các loại nTaskID như sau:
1038: Nhiệm vụ mua vật phẩm.
Hướng dẫn lập trình KAutoPlay Trang 34
Ví dụ:
local nTaskValue = player.GetTaskValue(1038)
if nTaskValue == 3 then system.MessageBox(player.GetTaskName()) end
SetActiveSkillID(int nSkillID)
nSkillID: ID của chiêu thức cần kích hoạt.
SetActiveAuraID(int nSkillID)
nSkillID: ID của chiêu thức cần kích hoạt.
SetPeopleIndex(int nIndex)
nIndex: thứ tự của đối tượng cần đánh hoặc theo sau.
SetAttackRadius(int nRadius)
nRadius: phạm vi tấn công hiệu quả.
Thiết lập phạm vi tấn công cho nhân vật. Thường thiết lập bằng phạm vi hiệu quả của chiêu
đánh đang sử dụng.
Thiết lập lệnh cho nhân vật. Loại lệnh của nhân vật như sau:
do_none = 0
do_stand,
do_walk,
do_run,
do_jump,
Hướng dẫn lập trình KAutoPlay Trang 35
do_skill,
do_magic,
do_attack,
do_sit,
do_hurt,
do_death,
do_defense,
do_idle = 12
Ví dụ:
Di chuyển nhân vật tới tọa độ 1234, 5678
player.SendCommand(3, 1234, 5678, 0)
player.SyncCommandRun(1234,5678)
Ghi nhận chiêu đánh mới của nhân vật tương tác lên đối tượng.
OfflineLive()
Chọn tính năng ủy thác. Sau khi chọn sẽ hiện ra menu để chọn cách ủy thác tương ứng.
Ví dụ:
Hướng dẫn lập trình KAutoPlay Trang 36
player.OfflineLive()
while menu.IsVisible(0) == 0 then timer.Sleep(50) end
menu.ClickIndex(0, 0)
Tất cả các hàm liên quan đến nhiệm vụ đều gọi với dạng quest.Tên Hàm([đối số])
char* GetStatus()
Lấy thông tin trạng thái hiện tại của nhiệm vụ.
Trả về: thông tin trạng thái nhiệm vụ tương ứng trong giao diện F12.
char* GetInfo()
Lấy chuỗi mô tả thông tin nhiệm vụ.
Trả về: chuỗi thông tin nhiệm vụ theo dạng TCVN3. Hàm này phải được gọi ngay sau khi đối
thoại với NPC Dã Tẩu thì mới có tác dụng.
Ví dụ:
for i = 2, 255 do
if npc.IsExists(i) and npc.GetName(i) == “D· TÈu” then
player.DialogNpc(i)
while menu.IsVisible(0) == 0 do timer.Sleep(50) end
system.MessageBox(quest.GetInfo())
end
ChoosePrice(int nIndex)
nIndex: thứ tự của phần thưởng.
Nhận phần thưởng theo thứ tự từ trái qua phải. Thứ tự được tính từ vị trí 0.
Tất cả các hàm liên quan đến tổ đội đều gọi theo dạng team.Tên Hàm([đối số])
Create()
Thành lập tổ đội mới. Nhân vật gọi hàm này sẽ trở thành đội trưởng.
OpenClose(BOOL bFlag)
bFlag: 0 – đóng, 1 – mở tổ đội.
Hướng dẫn lập trình KAutoPlay Trang 37
Add(int nNpcIndex)
nNpcIndex: thứ tự của người chơi cần thêm vào tổ đội.
Cho phép thành viên mới vào tổ đội. 0 – không cho phép, 1 – cho phép.
Leave()
Rời khỏi tổ đội.
KickMember(int nNpcID)
nNpcID: ID của người chơi cần loại khởi tổ đội.
ChangeCaptain(int nNpcID)
nNpcID: ID của người chơi.
Các hàm liên quan đến NPC đều gọi theo dạng npc.Tên Hàm([đối số])
Hướng dẫn lập trình KAutoPlay Trang 38
Kiểm tra người chơi khác có đang lập shop bày bán không.
Trả về: 0 – không bày bán, 1 – đang bày bán.
Tất cả các hàm liên quan đến chiêu thức đều gọi theo dạng skill.Tên Hàm([đối số])
int[] GetRightList()
Lấy tất cả các ID của chiêu bên phải. Các chiêu thực sự hiện lên bên phải của GUI.
Trả về: danh sách các ID của chiêu phải.
int[] GetLeftList()
Lấy tất cả các ID của chiêu bên trái. Các chiêu thực sự hiện lên bên trái của GUI.
Trả về: danh sách các ID của chiêu trái.
Thiết lập tự động buff lại khi chiêu buff hết thời gian. 0 – hủy bỏ, 1 – thiết lập.
Trả về: 0 – thất bại, 1 – thành công.
Tất cả các hàm liên quan đến NPC đều gọi theo dạng menu.Tên Hàm([đối số])
Tất cả các hàm liên quan đến shop đều gọi theo dạng shop.Tên Hàm([đối số])
Open()
Mở giao diện shop (tiệm thuốc, tạp hóa, thợ rèn, …)
Close()
Đóng giao diện shop.
BOOL IsVisible()
Kiểm tra shop có được mở chưa.
Trả về: 0 – chưa mở, 1 – đã mở.
SellItem(int nIndex)
nIndex: vị trí của vật phẩm cần bán cho người chơi tính từ 0, trên xuống, trái phải.
Bán vật phẩm trong shop cho người chơi (người chơi mua vật phẩm của shop).
BuyItem(int nItemIndex)
nItemIndex: thứ tự của vật phẩm cần bán cho shop.
Mua vật phẩm của người chơi (người chơi bán vật phẩm vào shop).
RepairItem(int nItemIndex)
nItemIndex: thứ tự của vật phẩm cần bán cho shop.
int GetItemCount()
Lấy số lượng vật phẩm được bán trong shop.
Trả về: số lượng vật phẩm bán trong shop.
int GetPageCount()
Lấy số lượng trang trong shop.
Trả về: số trang trong shop.
Tất cả các hàm liên quan stall đều được gọi với dạng stall.Tên Hàm([đối số])
Close()
Đóng shop bày bán.
Hướng dẫn lập trình KAutoPlay Trang 43
BOOL IsVisible()
Kiểm tra shop bày bán có được mở lên chưa.
Trả về: 0 – chưa mở, 1 – đã mở.
SellItem(int nIndex)
nIndex: thứ tự của vật phẩm trong shop bày bán.
Bán vật phẩm cho người chơi (người chơi mua vật phẩm trong shop).
Lấy thứ tự của vật phẩm được bày bán trong shop.
Trả về: thứ tự của vật phẩm được bán trong shop.
int GetItemCount()
Lấy số lượng vật phẩm được bày bán trong shop.
Trả về: số lượng vật phẩm bán trong shop.
Ví dụ:
for i=0, stall.GetItemCount() – 1 do
local nItemIndex = stall.GetItemIndex(i)
if item.GetName(nItemIndex) == “§¹i Phong §ao” and
stall.GetItemPrice(i) < 10000 then
stall.SellItem(i)
end
end
6.1 Config.lua
Là tập tin chứa các biến lưu các thiết lập từ GUI của người dùng. Các biến này được sử dụng
trong tập tin script.lua. Người dùng có thể thay đổi giá trị trực tiếp hoặc gián tiếp hoặc thêm
vào các biến khác phục vụ cho quá trình lập trình của mình. Tất cả các biến mặc định trong tập
tin này người dùng không được thay đổi tên.
Hướng dẫn lập trình KAutoPlay Trang 44
6.2 Script.lua
Script.lua chứa mã thực thi của chương trình và các lời gọi hàm APIs được viết bằng ngôn
ngữ LUA. Trong tập tin bắt buộc phải có hàm main, là hàm chính thực thi tất cả các thao tác.
Chương trình sẽ gọi duy nhất hàm này lúc bắt đầu chạy chương trình, kết thúc hàm này cũng là
kết thúc chương trình. Mô tả hàm main như sau:
function main()
end
Khi kết thúc, chương trình sẽ gọi hàm StopTimer do đó trong tập tin script.lua bắt buộc
phải có hàm này với mô tả như sau:
function StopTimer()
end
Nếu có sử dụng đến hàm khởi tạo bộ định thời timer thì chương trình sẽ tự động gọi hàm
OnTimer với định dạng sau:
function OnTimer(nTimerID)
end
Hướng dẫn lập trình KAutoPlay Trang 48