PDA

View Full Version : [JX] Hướng dẫn để viết 1 kịch bản game đơn giản và cách sử dụng hàm



DNTmaster
05-04-11, 09:41 PM
Hiện tại box dạo này vắng vẻ. Tài liệu thì có nhiều nhưng nằm rải rác khắp nơi trong clb.
Nên DNT lập topic này nhằm hướng dẫn cho các Newbie tập trở thành 1 Dev Jx.
Hi vọng sẽ giúp ích được nhiều người.


Chú ý: Không được Spam vào Topic này.

Các Mod đừng khóa Topic này mọi người có thể vào tham khảo và post thêm phụ với DNT nhưng tuyệt đối đừng SPAM để topic được trơn tru và sạch đẹp

Bài 1
Hàm Say

Say là 1 hàm thực thi dùng để nói chuyện giữa 1 nhân vật và NPC.
Cấu trúc:


Say(<Câu thoại>,<Số lượng lựa chọn>,<lựa chọn 1>,<lựa chọn 2>,..<lựa chọn n>)
Say(<Số ID trong StringResource.txt>,<Số lượng lựa chọn>,<lựa chọn 1>,<lựa chọn 2>,..<lựa chọn n>)
Say(<Câu thoại>,<Số lượng lựa chọn>,<Table(Mảng 1 chiều)>)


Ví dụ cơ bản


Say("Xa phu: ban co muon roi khoi noi nay",2,"Toi dong y/yes","Thoi toi muon o lai/no");
Khi bạn chọn lựa chọn: Toi dong y thì nó sẽ thực thi hàm yes() trong file
Tương tự với lựa chọn còn lại.



luachon = {"Toi dong y/yes","Thoi toi muon o lai/no"};
Say("Xa phu: ban co muon roi khoi noi nay",2,luachon)

Bài 2
Hàm Talk

Talk cũng tương tự như hàm Say nhưng không có lựa chọn mà mặc định phải thực thi một lệnh nào đó nếu có.

Cấu trúc


Talk(<số lượng câu thoại>,<[Hàm thực thi]>,<câu thoại 1>,<câu thoại 2>,..,<câu thoại n>)

Ví dụ cơ bản


Talk(1,"","Xa phu: Nguoi khong co 500 luong de di duyen sang khu vuc khac");
Talk(2,"","Xa Phu: nguoi cap 10 nen tu luyen tai lang","Sau khi hon cap 10 hay quay lai tim ta");




Talk(1,"dichuyenblh","Xa Phu: Chuan bi ta di den ba lang huyen");
Ở đây khi đối thoại xong thì sẻ thực thi hàm dichchuyenblh


Bài 3
Msg2Player và Msg2SubWorld

Đây là 2 hàm hiện lên dòng thông báo của hệ thống (Tức dòng chữ màu đỏ góc trái phía dưới)

Cấu trúc

Msg2Player(<Câu thoại>)
Msg2SubWorld(<Câu thoại>)

Ví dụ cơ bản

Msg2Player("Ban chua khong co 500 luong")
Msg2SubWorld("10 phut nua se bat dau mo cua Sieu Thi Hoang Kim")

Bài 4
SetTask() và GetTask()

Hàm này nói ra rất trừu tượng nhưng nó dùng để viết ra các nhiệm vụ. Dùng nó thay thế cho các loại điểm như Phúc Duyên,Luyện Skills...
Tóm lại nói ngắn gọn nó là 1 hàm dùng lưu lại các bước đã thao tác.

Cấu trúc

SetTask(<ID Task>,<Giá trị>)
GetTask(<ID Task>)

ID Task là giá trị từ 1-255
Giá trị là do mình mặc định

Để hiểu thêm cùng xem ví dụ


SetTask(1,3)
Tức ta đặt giá trị cho ID Task 1 là 3
Vậy khi ta thực thi hàm GetTask(1) nó sẽ trả về là 3


Chú ý: Các ID Task mà ta chưa sữ dụng thì tất cả giá trị khi thực thi hàm GetTask() sẽ là 0


Tương tự như vậy với 2 hàm SetTaskTemp() và GetTaskTemp()
Nhưng TaskTemp là 1 loại Task sau khi nhân vật thoát khỏi game thì tất cả các TaskTemp để trở về giá trị 0 toàn bộ

Còn tiếp

DNTmaster
08-04-11, 12:43 PM
Include
Tác dụng:

Kết nối tới 1 file Lua khác để lấy dữ liệu như biến,hàm,v.v....

Cấu trúc:

Include("<đường dẫn>");

Ví dụ:

Include("\\script\\gm.lua");
Kết nối tới file GM.lua để lấy dữ liệu hoặc thông tin

Các hàm thông báo chạy chữ
Bao gồm 4 hàm cơ bản thường sữ dụng
Tác dụng

Hiển thị dòng thông báo chạy chữ trên màn hình
Cấu trúc

AddGlobalNews("<Thông điệp>");
AddGlobalCountNews("<Thông điệp>",<Số lần xuất hiện>);
AddLocalNews("<Thông điệp>");
AddLocalCountNews("<Thông điệp>",<Số lần xuất hiện>);
Ví dụ

AddGlobalNews("Chao mung den voi Vo Lam Offline"); Xuất hiện 1 lần rồi tắt
AddGlobalCountNews("Chao mung den voi Vo Lam Offline",3); Xuất hiện 3 lần rồi tắt

AddRepute và GetRepute

Tác dụng:

Cộng điểm danh vọng và lấy điểm danh vọng

Cấu trúc

AddRepute(<Điểm>);
Cộng thêm điểm danh vọng (Đồi với số dương);
Trừ đi điểm danh vọng (Đồi với số âm);
GetRepute();
Lấy điểm danh vọng hiện tai

Ví dụ

AddRepute(50); Cộng 50 danh vọng
AddRepute(-50); Trừ 50 danh vọng
GetRepute(); Trả về số điểm danh vọng
Để thấy được điểm danh vọng thì
Msg2Player("Diem danh vong hien la: "..GetRepute());

AddExp, AddOwnExp và GetExp
Tác dụng

Cộng điểm kinh nghiệm cho 1 nhóm Party
Cộng điểm kinh nghiệm cho 1 nhân vật
Lấy điểm kinh nghiệm hiện có

Cấu trúc

AddExp(<Số điểm>,<Level>,<Party>);
AddOwnExp(<Số điểm>);
GetExp();

Ví dụ

AddExp(5000,200,1); Các nhân vật trong nhóm(Bao gồm chính bạn) sẽ nhận một phần kinh nghiệm trong 5000 điểm chia sẽ ra
AddOwnExp(5000); Nhân vật được nhận 5000 điểm kinh nghiệm
GetExp(); Kiểm tra số điểm kinh nghiệm
Để thấy được số điểm kinh nghiệm trả về từ hàm GetExp() thì
Msg2Player("Diem kinh nghiem hien la: "..GetExp());

Tương tự đối với hàm AddLeadExp và GetLeadLevel
2 Hàm này có tác dụng cộng Kinh nghiệm cho Tài Lãnh Đạo của nhân vật
AddLeadExp(<Số điểm>); Cộng kinh nghiệm tài lãnh đạo
GetLeadLevel();Kiểm tra cấp độ của tài lãnh đạo

KingMax
08-04-11, 08:37 PM
góp zui thêm vài hàm nữa :
Hàm PlayerIndex
Sử dụng check bản thân của 1 nhân vật nào đó . Ví dụ nhân vật có tên "KingMax" thì sử dụng hàm nt này

for i = 1,300 do --Số Player sẽ kiểm tra
PlayerIndex = i -- Gán vào biến i
if (GetName() == "KingMax") then --Kiểm tra tên Player
return 1
else
return 0
end
end

Chicken : PlayerIndex là biến ko phải hàm ;))

KingMax
10-04-11, 07:05 AM
tiếp tục các hàm Get :)

GetItemCount


Cách sử dụng:
GetItemCount(xzy)
trong đó xzy : có thể là ID của item hoặc tên của item (questkey.txt) nhé

Ví dụ:
function main()
if GetItemCount("Tu Thuy Tinh") >= 1 then
Talk(1,"","Ban co Thuy tinh")
else
Talk(1,"","Ban khong co Thuy Tinh")
end
end



GetMagicLevel(id)

Cách sử dụng :
GetMagicLevel(id)
trong đó : id là thứ tự của Skill trong skills.txt

GetSex()


Cách sử dụng
GetSex() trả về giá trị :
0 : Nam
1 : Nu

Ví dụ:
if GetSex() == 0 then
return "Nam"
else
return "Nu"
end


GetPlayerCount()

Hàm này thì kiểm tra số người đang online thôi
ví dụ: Talk(1,"","Co "..GetPlayerCount().." nguoi dang online")

GameMaster72
10-04-11, 07:50 AM
Tự sướng hàm GetPlayerCount()


player = GetPlayerCount()
a = GetMissionV(80)
playerao = player + a
Xuất hàm tự sướng :

ví dụ: Talk(1,"","Co "..playerao.." nguoi dang online")
Hàm thêm a

SetMissionV(80,GetMissionV(80)+10)
trong đó 10 là số a
ví dụ có 10 ng` onl khi sử dụng hàm

SetMissionV(80,GetMissionV(80)+10) thì sẽ thành 20 ng` onl
Sau khi sử dụng
hàm xóa a

SetMissionV(80,0)
thì sẽ trở về 10

DNTmaster
12-04-11, 02:17 PM
Cảm ơn các bạn đã góp sức vào :D Nhưng chú ý ở đây mình sẽ chỉ các cấu trúc Hàm sau đó sẽ đi vào phần viết script nên mọi người hãy cùng nhau phát huy :D

Hum nay hơi bận nên không update thêm cho mọi người

thachlong78
13-04-11, 02:32 AM
Mấy ông chỉ cách dùng hàm kiểm tra và Del trang bị đi, hôm nọ có mấy đứa hỏi mà dạo nay không quan tâm lắm nên cũng không biết. Hướng dẫn đi cho mấy đứa nó tham khảo viết nâng cấp trang bị.

[B.M.W]Sports
13-04-11, 03:10 AM
Mấy ông chỉ cách dùng hàm kiểm tra và Del trang bị đi, hôm nọ có mấy đứa hỏi mà dạo nay không quan tâm lắm nên cũng không biết. Hướng dẫn đi cho mấy đứa nó tham khảo viết nâng cấp trang bị.
cái nì mấy ổng giấu kỉ lắm :D

jxvietnam
16-04-11, 02:36 PM
sau khi view datau.lua của TQ thì rút ra đc 2 hàm : Del trang bị và kiểm tra trang bị
Cấu trúc :
Hàm kiểm tra : HaveBaseItem(cột B,cột C,cột D,hệ của trang bị,cột L) :D
Del trang bị : DelBaseItem(cột B,cột C,cột D,hệ của trang bị,cột L) :)
<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>

[M]r[K]id
19-04-11, 01:41 PM
sau khi view datau.lua của TQ thì rút ra đc 2 hàm : Del trang bị và kiểm tra trang bị
Cấu trúc :
Hàm kiểm tra : HaveBaseItem(cột B,cột C,cột D,hệ của trang bị,cột L) :D
Del trang bị : DelBaseItem(cột B,cột C,cột D,hệ của trang bị,cột L) :)
<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>
phải dùng gameserver của nó ko vậy bạn ??

ThanhVipLn
20-04-11, 05:28 PM
Nó chính là GetItemCount2 Và DelItem2 Đó. Chỉ Khác Cấu Trúc

Čħīċķėň
03-06-11, 12:12 AM
Cách sử dụng của 5 hàm defend bao gồm:

GetColdR(Type)
SetColdR(Type,Value)

GetFireR(Type)
SetFireR(Type,Value)

GetLightR(Type)
SetLightR(Type,Value)

GetPoisonR(Type)
SetPoisonR(Type,Value)

GetPhyR(Type)
SetPhyR(Type,Value)

Trong đó:
Type : có thể là
0 : Hiện tại
1 : Bình thường(cái nì ko rõ)
2 : Max
Value : tuỳ đối với hàm để set

ohishu
03-06-11, 05:19 PM
sau khi view datau.lua của TQ thì rút ra đc 2 hàm : Del trang bị và kiểm tra trang bị
Cấu trúc :
Hàm kiểm tra : HaveBaseItem(cột B,cột C,cột D,hệ của trang bị,cột L) :D
Del trang bị : DelBaseItem(cột B,cột C,cột D,hệ của trang bị,cột L) :)
<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>

Đối Với GameServer Cũ ( TSBĐ 0.3 ) Thì:

Hàm Kiểm Tra Trang Bị: GetItemCount2("Tên Item",Cột B,Cột C,Cột D,Ngũ Hành)

Hàm Xóa Trang Bị: DelItem2("Tên Item",Cột B,Cột C,Cột D,Ngũ Hành)

Làm Sao Đễ Xác Định Cột ??? Mở Excel Lên Sẽ Rõ ( Excel: 1 Công Cụ Trong Bộ MS Office )

nguyenquocbo
25-06-11, 07:02 PM
góp zui thêm vài hàm nữa :
Hàm PlayerIndex
Sử dụng check bản thân của 1 nhân vật nào đó . Ví dụ nhân vật có tên "KingMax" thì sử dụng hàm nt này

for i = 1,300 do --Số Player sẽ kiểm tra
PlayerIndex = i -- Gán vào biến i cái này không đúng à nhe mà phải hiểu là gán giá trị của biến i vào biến PlayerIndex
if (GetName() == "KingMax") then --Kiểm tra tên Player
return 1
else
return 0
end
end

Chicken : PlayerIndex là biến ko phải hàm ;))

Ý tưởng lập ra box này thật tuyệt vời !
Sẽ là nơi mà mọi người học hỏi được nhiểu,nảy ra nhiều ý tượng để làm JX
Mong các Mod và các Pro phát huy,tiếp tục mạch bài viết
Sorry nếu có spam nhé anh em !

Tôilàai
07-08-11, 09:53 AM
Bác ohishu ơi cho em hỏi sao cái hàm GetItemCount2() kiểm tra đc trang bị nhưng hàm DelItem2() k xoá đc trang bị vậy em xài GS của mướp ver1.0 em đã dùng đúng như cấu trúc của bác và GS của em cũng không báo lỗi

tututu12
07-08-11, 08:04 PM
sao it ham quá vậy ai post nhìu hàm lên tham khảo đi

thaihoa91
07-08-11, 08:46 PM
Vào đây tham khảo hàm : <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>

KingMax
10-08-11, 11:23 AM
Update bộ hàm cho mọi người tham khảo :)


2 hàm :

KickOutSelf()
KickOutAccount()
Kick nhân vật ra khỏi Server

hàm

SetLevel(level cần Set)

chắc mọi người hiểu , tuy nhiên hàm SetLevel phải kick nhân vật ra mới có thể hiển thị được :)

hàm

GetPlayerCount()

kiểm tra số người OnLine

GetMSPlayerCount()

kiểm tra số người tham gia MiSSion

AddMSPlayer(id mission, phe )

hàm thêm nhân vật vào Mission rất hay khi làm Quest , Misssion

Msg2MSAll(id mission , " câu thoại ")


còn rất nhiều hàm trong JX hay mà đa số không ai chịu mò nữa :)
Ví dụ :

SetTimer(id trong TimerTask.txt , thời gian (giây) * 18)

tác dụng là tới 1 thời điểm mình định sẵn sẽ thực thi script cho nhân vật

còn 1 hàm khá quan trọng

DelNpc( npc index ), thông thường cú pháp là abc = AddNpc
DelNpc(abc) nhưng qua file .lua khác lại không dùng được vì abc là biến cục bộ , cách xài đơn giản là :
abc = AddNpc
SetMissionV(1,abc)
qua script khác chỉ việc DelNpc(abc) :)


hàm
Rollbackskill()
Updateskill()
2 hàm trong Tẩy tuỷ , dùng khá ổn , để set điểm

ppkhoa
05-09-11, 07:16 PM
có hàm nào xóa item hoặc drop item đang mang trên người (vũ khí, trang bị) không?

thaihoa91
05-09-11, 07:31 PM
có hàm nào xóa item hoặc drop item đang mang trên người (vũ khí, trang bị) không?

Vui lòng tháo trang bị và đặt vào Hành Trang F4 !

ditimtinhyeu
16-11-11, 02:08 PM
anh Hòa viết hộ em cái hàm addskill vào cục đá Ba Lăng Huyện với, em đang dùng bản TSBD 3.0, thanks anh nhé

babyoflove
08-02-12, 10:48 PM
cho em hỏi mấy pro viết hàm này ở đâu vậy . Trong 1 files nào đó , hay vào game gõ nhưng hàm đó.Hjhj em ko biết gì về CNTT nhưng cũng muốn học hỏi

lichnt
09-02-12, 10:35 AM
Cám ơn rất nhiều kiến thức rất bổ ích