PDA

View Full Version : [JX] [CHIA SẺ KINH NGHIỆM] Học Script Cơ Bản Trong JX Server



ps1990
13-01-13, 02:27 AM
Chào các bạn, nay mình viết bài này để những bạn nào chưa rành về script cơ bản có thể học để có thể tự viết cho mình, ko cần chờ người khác share nữa.Vì thấy mấy SV BFF và Auto ingame các bạn hỏi nhiều Về Script nên mình sưu Tầm bài Viết Của JxVietNam Về Để CÁc Bạn có thể tự tích lũy thêm cho mềnh.

Phần I : Phân loại các hàm thường dùng trong script
Hàm thường dùng thì cũng có nhiều loại, mình xin nói lại 1 số loại hay dùng

- Hàm đối thoại, thông báo :

+ Say : Hàm đối thoại người chơi có lựa chọn
+ Talk : Hàm đối thoại người chơi có thể có hoặc không lựa chọn
+ Msg2Player : Thông báo đến người chơi
+ Msg2SubWorld : Thông báo đến toàn server

- Hàm liên quan đến item : Có 4 hàm rất hay sử dụng

+ AddItem(....) : Thêm 1 item bất kỳ vào nhân vật (trừ questkey)
+ AddEventItem(id questkey) : Thêm 1 questkey vào nhân vật
+ DelItem(id questkey) : Del questkey
+ GetItemCount() : Kiểm tra số item questkey có trong hành trang, sử dụng kết hợp với hàm if

- Hàm liên quan đến skill :

+ AddMagic(id skill, level skill) : Thêm 1 skill bất kỳ vào nhân vật
+ DelMagic(id skill) : Xóa 1 skill đang có trong nhân vật
+ HaveMagic(idskill) : Kiểm tra cấp độ của skill, sử dụng kết hợp với hàm if

- Hàm liên quan đến tiền :

+ Earn(số tiền) : Thêm tiền
+ Pay(số tiền) : Lấy tiền
+ GetCash() : Kiểm tra số tiền có trong nhân vật, sử dụng kết hợp với hàm if

- Hàm liên quan đến NPC

+ AddNpc : Thêm 1 npc vào game
+ SetNpcScript : Set script cho npc

- Hàm liên quan đến task :

+ SetTask(id task, giá trị)
+ GetTask(idtask) : Kiểm tra task có giá trị bao nhiêu, sử dụng kết hợp với hàm if
+ SetTaskTemp(id task temp, giá trị temp)
+ GetTaskTemp(idtask temp) : Kiểm tra task temp có giá trị bao nhiêu, sử dụng kết hợp với hàm if

SetTask và SetTaskTemp về cơ bản là giống nhau, chỉ khác 1 điểu là SetTask khi nhân vật thoát ra vẫn sẽ lưu giá trị, còn SetTaskTemp thì giá trị trở về 0

Nắm rõ cách sử dụng các hàm mình kể trên thì bạn có thể viết được 1 số script cơ bản rồi, ví dụ như event, nhiệm vụ, hỗ trợ nhân vật, học skill, .....

Phần II : Hướng dẫn học script cho người mới




Mình sẽ chia sẻ cách học script của mình, để các bạn mới có thể tự học được. Hi vọng là các bạn sẽ nhanh chóng làm quen được cách viết script.

Kinh nghiệm học script của mình là : Download các server được share, cài đặt và tìm hiểu các script trong server đó

Mình xin lấy ví dụ về học hàm Say, chẳng hạn khi bạn down server về ra gặp Xa Phu sẽ có các lựa chọn sau :


<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> g (<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>)
Khi nhìn vào bạn sẽ đặt lên những câu hỏi trong đầu rằng : Tại sao có thể làm hiện ra cái bảng đối thoại như trên, và khi kích vào các dòng đối thoại thì nó làm theo ý mình. Muốn biết rất đơn giản thôi : Tìm script của npc này trong server là sẽ rõ, do npc này là Xa Phu nên các bạn vào script tìm những file có tên tương tự như xaphu.lua hoặc startup_server.lua ... Các bạn có thể dùng chức năng Search của Win

Tiếp tục ...................

Sau khi tìm được file lua rồi, thì các bạn sẽ kiếm hàm Say, bằng cách dùng chức năng Search, Ctrl + F gõ vào Say, bạn chọn hàm Say nào mà có những lưa chọn giống như trong hình thì chọn Các bạn chú ý chữ đỏ, <color=xxx> là hàm màu chữ, ví dụ như <color=red> màu đỏ <color=blue> màu xanh ...



SayEx({"<color=cyan>Xa Phu:<color> Xin chào ngươi muốn đi đâu nào ?",
"Trở lại điểm cũ/backupdiadiem",
"Khu vực thành thị/thanhthi",
"Khu vực luyện công/luyencong",
"Thay đổi trạng thái/doimau",
"Đảo tẩy tủy/daott",
"Thoát/Exit"})



Để hiện thị tiếng việt thì các bạn nên dùng JxStuio để mở fie lua nha, nếu mở bằng notepad hoặc notepad ++ thì sẽ hiện thị chữ rất khó đọc, gây khó khăn cho những bạn mới làm quen
JxStudio bạn có thể download ở đây <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

Ở đây mình xin giới thiệu hàm SayEx, lát sẽ quay lại Say sau. Sau khi đối chiếu với hình ảnh ở trên mình chựp thì rõ ràng là hàm SayEx(là hàm mở rộng của Say, được thêm vào tự thư viện lua do người dev viết ra, thường thì nằm trong serverlib.lua hoặc sourcejx49.lua, muốn sử dụng được phải Include tới file đó có cấu trúc như sau


SayEx({"Câu đối thoại","Lựa chọn 1/hàm lựa chọn 1","Lựa chọn 2/hàm lựa chọn 2","Lựa chọn n/hàm lưa chọn n"})
Những hàm lựa chọn sẽ bắt đầu bằng function tênhàmlựachọn()(cái này là do người dev đặt, bạn có thể chỉnh lại cho dễ nhớ và thuận lợi với mình) và kết thúc bằng end. Cái này là bắt buộc, chúng ta ko có quyền thay đổi !. Ngoại ra khi dùng hàm if hoặc hàm lặp for thì khi kết thúc vẫn phải có end, ko thì gameserver lỗi ngay

- Khu vực thành thị/thanhthi, ta search từ khoá thanhthi() là sẽ ra được câu lệnh khi ta chọn vào Khu vực thành thị


function thanhthi()
w,x,y = GetWorldPos()
if w == 53 then
SayEx({"<color=cyan>Xa Phu<color>: Ngươi muốn đi đâu ?","Tương Dương/tuongduong","Phượng Tường/phuongtuong","Thành Đô/thanhdo","Thoát/no"})
elseif w == 37 then -- tuong duong
SayEx({"<color=cyan>Xa Phu<color>: Ngươi muốn đi đâu ?","Phượng Tường/phuongtuong","Thành Đô/thanhdo","Ba Lăng Huyện/balang","Thoát/no"})
elseif w == 36 then -- phuong tuong
SayEx({"<color=cyan>Xa Phu<color>: Ngươi muốn đi đâu ?","Tương Dương/tuongduong","Thành Đô/thanhdo","Ba Lăng Huyện/balang","Thoát/no"})
elseif w == 40 then -- thanh do
SayEx({"<color=cyan>Xa Phu<color>: Ngươi muốn đi đâu ?","Tương Dương/tuongduong","Phượng Tường/phuongtuong","Ba Lăng Huyện/balang","Thoát/no"})
else
SayEx({"<color=cyan>Xa Phu<color>: Ngươi muốn đi đâu ?","Tương Dương/tuongduong","Phượng Tường/phuongtuong","Thành Đô/thanhdo","Ba Lăng Huyện/balang","Thoát/no"})
end
end



Ta phân tích đoạn sau w,x,y = GetWorldPos(); GetWorldPos là hàm kiểm tra vị trí nhân vật đang đứng trong game, giá trị w sẽ là id map, giá trị x là tọa độ x, giá trị y là tọa độ y. Chú ý : Tọa độ X; tọa độ Y ở đây là vị trí bạn đang thấy trên minimap, nhưng đã được x nhân 8, y nhân 16, nên nó sẽ nằm trong khoảng xxxx (4 số) chứ ko phải là 3 số như trên minimap hiện thị. Nhưng ở đây ta quan tâm đến w (id maps đang đứng, có thể xem trong maplist.ini)

Hàm if, nếu bạn nào học pascal năm 11 hoặc tiếng anh câu điều kiện thì cũng sẽ rõ đấy là hàm điểu kiện, thường đc dùng chung với if GetTask(id task), GetItemCount, HaveMagic, GetCash

if w == 53 then, ở đây ta sẽ thấy được cấu trúc của hàm if là if điềukiện then
- Điều kiện ỏ đây là biểu thức toán học > < >=(lớn hơn hoặc bằng) <= == ~=(khác)

by : Jxvietnam

Nguồn: laptrinhgame.net