Sói Đẹp Trai
07-07-13, 04:56 PM
Mình sẽ tổng hợp kinh nghiệm của mình từ khi bắt đầu đến giờ để các bạn có thể dễ dàng làm quen với việc viết/đọc script NPC trong game TLBB này.
Lưu ý đây là của Newbie tổng hợp cho Newbie chứ không phải cho Pro thế nên ai Pro thì có thể đóng góp ý kiến nhưng xin đừng khinh thường Newbie bọn mình nha. Guild đầu tay, nếu nó chưa phải chỗ nào mọi người cho ý kiến để nó hoàn chỉnh nha :D
Yêu cầu của mục này là bạn phải biết sơ sơ về một số ngôn ngữ lập trình cơ bản như Pascal, C, C++,... Biết những cái này làm gì? Biết những cái này để ta nắm sơ qua ý tưởng cũng như là một số câu lệnh điều kiện mà ta sắp dùng đến.
Cấu trúc của một đoạn code đại diện cho NPC chuyên về sự kiện.
1. Phần khởi động: Phần này là phần mà ta phải khai báo ID của NPC cũng như viết một số chú thích cho người xem hiểu đoạn code nói gì.
2. Phần mở đầu: Giới thiệu sự kiện, các mục chọn lựa hoặc chỉ đơn giản là phần duy nhất trong đoạn code với NPC viết ra chỉ để nói một vài dòng.
3. Phần điều kiện: Không cần thiết phải có. Dùng để kiểm tra điều kiện cần thiết để có thể vào được thân sự kiện. ( Ví dụ cấp 10 trở lên mới được vào gọi là một điều kiện ).
4. Phần thân: Đây chính là thân sự kiện với các lệnh do chính bạn viết nên. Có thể nói cái này là cái quan trọng quyết định chức năng của NPC ( đa số là thế ).
5. Các phần khác: Các bạn có thể sáng tạo ra các hàm khác phục vụ cho đoạn code của mình.
Chi tiết:
A/ PHẦN KHỞI ĐỘNG:
Phần này đa số toàn là chú thích cho người đọc. Và cái quan trọng nhất của phần này chính là cái khai báo một biến hằng số đại diện cho ID của NPC.
Nếu như không khai báo kiểu này, mỗi khi dùng một cái lệnh liên quan đến ID của NPC ( lệnh viết ) thì bạn sẽ phải nhập đi nhập lại cái ID đó, có nhàm không? Và xét trường hợp nhiều file, và bạn là một người ngồi soát lỗi chẳng hạn, việc không chú thích cũng như không khai báo ID trên đầu liệu bạn có khó chịu không?
Một khuyến cáo là tất cả các khóa từ tên từng hàm một cũng nên kèm theo cái ID ở đầu để tiện quan sát, lý do mình đã trình bày bên trên.
Một ví dụ về phần này như sau:
--NPC: Đại Lý
--Tên: Sói Đẹp Zai
--Tittle: Hỗ trợ tân thủ
--Edit: By Sói Kool
x002097_g_ScriptId = 002097
Giải thích: Những ký tự sau cụm dấu "--" đều được coi là "chú thích" và không liên quan gì đến chương trình của ta cả.
Cái biến đại diện cho ID Script kia bạn có thể đặt tên nào cũng được nhưng thống nhất là đặt theo kiểu kia để tiện sau này lục lại NPC.
Biến x002097_g_ScriptId sẽ mang giá trị là 002097, giá trị này đại diện cho ID của NPC thực hiện chức năng được viết trong code này.
B/ PHẦN MỞ ĐẦU:
Mở đầu sẽ là lời gọi tới cái mà các ngôn ngữ lập trình kia gọi là "Chương trình chính" hay "Hàm chính".
Và như trong game các bạn sẽ thấy cái bảng này sẽ hiện lên khi bấm vào NPC ( Đương nhiên lỗi hoặc không có câu lệnh viết ra cái gì đó thì không tính nhé ).
Cấu trúc của phần này sẽ là
function xID_NPC_OnDefaultEvent(sceneId,selfId,targetId)
Các lệnh cơ bản, thường sẽ là lệnh để viết ra một cái gì đó
end
Trong đó cái ID_NPC là ID của NPC tương tự như trên. Còn các cái còn lại đừng thay đổi. Mình đã thử đổi tên và kết quả lỗi Script.
Một ví dụ:
function x002097_OnDefaultEvent(sceneId,selfId,targetId)
local nam = LuaFnGetName(sceneId,selfId)
BeginEvent(sceneId)
AddText(sceneId,"Hi "..nam..", have a good day!")
AddNumText(sceneId,x002097_g_ScriptId,"Chức năng tân thủ",1,1)
EndEvent(senceId)
DispatchEventList(sceneId,selfId,targetId)
end
Lưu ý sau dấu "=" là hàm đã được Lập trình viên viết sẵn chỉ việc dùng thôi nhé ( Hàm_Hằng ).
Như các bạn thấy bên trong là cụm lệnh bắt đầu bằng khóa BeginEvent(sceneId) và kết thúc bằng khóa EndEvent(SceneId)
Hàm AddText(sceneId,"Text") tác dụng chính của nó là thêm vào một chuỗi ký tự, như trên thì hàm này sẽ có tác dụng ghi ra cái bảng nói chuyện của NPC.
Ví dụ bạn tên Test, cái bảng sẽ hiện lên "Hi Test, have a good day!", tương tự như printf trong C.
AddNumText(sceneId,NPC_ID,"Text",x,y) nó có tác dụng ghi ra một chuỗi ký tự nào đó mà khi người dùng ấn vào chuỗi này thì sẽ thực hiện một số câu lệnh phía sau.
Trong đó "x" là biểu tượng đầu của chuỗi ký tự này, và "y" sẽ là "mã số" của cái lệnh mà nó sẽ thực hiện phía sau.
DispatchEventList(sceneId,selfId,targetId) đây là lệnh đóng cái bảng lại.
Như các bạn thấy trong ví dụ trên, cái bảng của chúng ta sẽ hiện ra.
Hi Test, have a good day!
(image) Chức năng tân thủ
Cái (image) chính là biểu tượng trong game đó mà cụ thể (image)=1 sẽ ra hình cuốn sách cuộn tròn như các bạn thường thấy khi nhận nhiệm vụ ở các NPC.
Và khi bạn bấm vào cái "Chức năng tân thủ", nó sẽ làm gì tiếp thì hãy chuyển sang phần sau.
C/PHẦN ĐIỀU KIỆN:
Tác dụng cơ bản của phần này chỉ là để kiểm tra điều kiện của người chơi sao cho thỏa mãn với mục đích của sự kiện được viết ra.
Cấu trúc của phần này là
function xID_NPC_OnConditionCheck(sceneId,selfId )
Một số lệnh
end
Ví dụ mình sẽ xây dựng một phần điều kiện để kiểm tra xem người chơi có đủ cấp độ 10 và không vượt quá cấp độ 50 mới có thể tham gia sự kiện.
function x002097_OnConditionCheck(sceneId,selfId )
local lev=GetLevel(sceneId,selfId)
if lev < 10 then
BeginEvent(sceneId)
AddText(sceneId,"Khi nào đạt cấp 11 trở lên hãy đến tìm ta")
DispatchEventList(sceneId,selfId,targetId)
return 0
EndEvent(sceneId)
elseif lev > 50 then
BeginEvent(sceneId)
AddText(sceneId,"Lớn hơn cấp 50 mà gọi là tân thủ à?")
DispatchEventList(sceneId,selfId,targetId)
return 0
EndEvent(sceneId)
end
end
Câu lệnh if điều kiện then thực hiện lệnh end các bạn tự hiểu nó giống trong các ngôn ngữ lập trình khác.
elseif điều kiện then thực hiện lệnh end tương tự như if chỉ khác cái này là kiểm tra lệnh if trên không thỏa mãn thì nó sẽ kiểm tra điều kiện sau. Hay theo C++ thì nó tương đương lệnh
else
if (Điều kiện)
{
thực hiện lệnh;
}
Ngoài ra còn lệnh else nữa nhé. Kết thúc else sẽ là khóa end vì thật ra else cũng là một câu lệnh nhỏ trong cụm if then end và kết thúc lệnh này phải có end => Logic phết :D
return 0, giống hệt C++, gần như stop chương trình luôn đó. Ngoài ra nó còn lệnh tên là return không thôi có tác dụng trở lại bảng sự kiện ban đầu.
D/ PHẦN THÂN
Cấu trúc
function xID_NPC_OnEventRequest(sceneId,selfId,targetId,eve ntId)
Lệnh
end
Đây chính là phần mà các bạn sáng tạo nhiều nhất ví dụ của mình có hàm Add Level cho nhân vật.
function x002097_OnEventRequest(sceneId,selfId,targetId,eve ntId)
local key = GetNumText()
if key == 1 then
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc mừng bạn thăng cấp 120 thành công")
EndEvent(scneneId)
DispatchEventList(sceneId,selfId,targetId)
end
end
"==" là phép so sánh bằng nhé giống bên C.
SetLevel(sceneId,selfId,x) là hàm Set cho nhân vật level x tùy ý ( không vượt quá 150 )
local Tên_Biến = Hàm_Hằng
GetNumText() tức là hàm lấy giá trị ẩn của cái chỗ mà người chơi vừa kick vào ( Hơi khó hiểu nhưng đại khái theo cái phần mở đầu, người dùng ấn vào cái cụm ký tự mà có chữ số đại diện cho các câu lệnh ngầm phía sau là 1 )
Ở đây có thể bao gồm nhiều lệnh nhé, và phần này là phần đòi hỏi người viết phải có kiến thức lập trình, rà soát các trường hợp cẩn thận.
E/PHẦN KHÁC
Ở phần này các bạn có thể sáng tạo các hàm khác cho riêng mình được, ví dụ đoạn code bên trên mình có thể biến nó về sử dụng một hàm khác và lấy hàm chính của chương trình gọi tới nó.
Vẫn thống nhất như trên thêm xID_NPC_Tên_chương_trình(tham biến) nhé
--NPC: Đại Lý
--Tên: Sói Đẹp Zai
--Tittle: Hỗ trợ tân thủ
--Edit: By Sói Kool
function x002097_OnDefaultEvent(sceneId,selfId,targetId)
local nam = LuaFnGetName(sceneId,selfId)
BeginEvent(sceneId)
AddText(sceneId,"Welcome "..nam..", have a good day!")
AddNumText(sceneId,x002097_g_ScriptId,"Chức năng tân thủ",1,1)
EndEvent(senceId)
DispatchEventList(sceneId,selfId,targetId)
end
function x002097_OnConditionCheck(sceneId,selfId )
local lev=GetLevel(sceneId,selfId)
if lev < 10 then
BeginEvent(sceneId)
AddText(sceneId,"Khi nào đạt cấp 11 trở lên hãy đến tìm ta")
DispatchEventList(sceneId,selfId,targetId)
return 0
EndEvent(sceneId)
elseif lev > 50 then
BeginEvent(sceneId)
AddText(sceneId,"Lớn hơn cấp 50 mà gọi là tân thủ à?")
DispatchEventList(sceneId,selfId,targetId)
return 0
EndEvent(sceneId)
end
end
function x002097_OnEventRequest(sceneId,selfId,targetId,eve ntId)
local key = GetNumText()
if key == 1 then
x002097_LenLevel(sceneId,selfId)
end
end
function x002097_LenLevel(sceneId,selfId)
BeginEvent(sceneId)
AddText(sceneId,"Chúc mừng bạn thăng cấp 120 thành công")
EndEvent(scneneId)
DispatchEventList(sceneId,selfId,targetId)
end
Đây gọi là một cái hay mà các ngôn ngữ lập trình khác đều có đó là thuật "Chia để trị", sau này bạn sẽ rất cần thiết đến cách phân chia này với các script có nhiều phần...
Lưu ý: Phân biệt chữ hoa chữ thường nên phải cẩn thận.
MỘT SỐ CÂU LỆNH SƯU TẬP:
Add KNB:
YuanBao(sceneId,selfId,targetId,x,y)
Trong đó y là số KNB cần add và x là số lượng, hiểu nôm na là số phiếu KNB
Add ĐT:
ZengDian(sceneId,selfId,targetId,x,y)
Trong đó y là số ĐT cần add và x là số lượng
Add EXP:
LuaFnAddExp(sceneId,selfId,x)
Trong đó x là số kinh nghiệm ( x<=99999999 )
Add điểm Môn Phái:
SetHumanMenpaiPoint(sceneId,selfId,x)
Trong đó x là số điểm cần Set
Add Item:
BeginAddItem(sceneId)
AddItem(sceneId,x,1)
EndAddItem(sceneId,selfId)
AddItemListToHuman(sceneId,selfId)
Với x là ID của item ( xem trong server hoặc client )
Add Skill
AddSkill(sceneId,selfId,x)
Trong đó x là ID skill cần add
Ghi ra kênh hệ thống:
BroadMsgByChatPipe(sceneId,selfId,"Text")
Lấy tên nhân vật:
local Tên_Biến = LuaFnGetName(sceneId,selfId)
Lấy level nhân vật:
local Tên_Biến = GetLevel(sceneId,selfId)
Lấy số thứ tự môn phái ( 0..9 )
local Tên_Biến = GetMenPai(sceneId,selfId)
Gia nhập môn phái:
LuaFnJoinMenpai(sceneId,selfId,targetId,x)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,targe tId,148,0)
Trong đó x là thứ số tự môn phái ( 0..9 )
Add tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,x,y)
Trong đó x là ID quyển tâm pháp cần thêm, y là số điểm tâm pháp
OK như vậy là đủ để viết được Script đơn giản. Còn các cái cao siêu mình không nói đến nhé.
Và đây là 1 script mẫu nhận tâm pháp và lev 120 cho anh em tham khảo
--ÐÕi Lý NPC
--ID: 002097
--Script test code by Sói Kool
--************************
x002097_g_ScriptId = 002097
--************************
--Kh·i ðµng
--************************
function x002097_OnDefaultEvent(sceneId,selfId,targetId)
BeginEvent(sceneId)
AddText(sceneId,"Chào m×ng bÕn ðªn v¾i Thiên Long Bát Bµ edit by Sói Kool...Các hÕ có mu¯n gia nh§p môn phái và nh§n tâm pháp c¤p 120 không ? Nªu ð°ng ý, các hÕ s¨ l§p tÑc thång lên c¤p ðµ 120 cùng tâm pháp môn phái tß½ng Ñng...")
AddNumText(sceneId,x002097_g_ScriptId,"Xác nh§n",1,1)
AddNumText(sceneId,x002097_g_ScriptId,"Nh§n yªu quyªt phái Mµ Dung",1,2)
EndEvent(senceId)
DispatchEventList(sceneId,selfId,targetId)
end
--************************
--Thân chß½ng trình
--************************
function x002097_OnEventRequest(sceneId,selfId,targetId,eve ntId)
local key = GetNumText()
local lev = GetLevel(sceneId,selfId)
--Gia nh§p môn phái
if key == 1 then
BeginEvent(sceneId)
AddText(sceneId,"Hãy lña ch÷n môn phái mu¯n gia nh§p...#r Lßu ý: C¤p 120 tr· lên không nên dùng chÑc nång này v¸ nó s¨ hÕ c¤p ðµ cüa bÕn xu¯ng 120....")
AddNumText(sceneId,x002097_g_ScriptId,"Thiªu Lâm",2,3)
AddNumText(sceneId,x002097_g_ScriptId,"Minh Giáo",2,4)
AddNumText(sceneId,x002097_g_ScriptId,"Cái Bang",2,5)
AddNumText(sceneId,x002097_g_ScriptId,"Thiên S½n",2,6)
AddNumText(sceneId,x002097_g_ScriptId,"#YMµ Dung",2,7)
AddNumText(sceneId,x002097_g_ScriptId,"Nga My",2,8)
AddNumText(sceneId,x002097_g_ScriptId,"Tiêu Dao",2,9)
AddNumText(sceneId,x002097_g_ScriptId,"Tinh Túc",2,10)
AddNumText(sceneId,x002097_g_ScriptId,"Võ Ðang",2,11)
AddNumText(sceneId,x002097_g_ScriptId,"Thiên Long",2,12)
EndEvent(sceneId)
DispatchEventList( sceneId,selfId, targetId )
end
--***
if key == 3 then --Thiªu Lâm
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId,0) --ID 0 là Thiªu Lâm
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,1,120)
LuaFnSetXinFaLevel(sceneId,selfId,2,120)
LuaFnSetXinFaLevel(sceneId,selfId,3,120)
LuaFnSetXinFaLevel(sceneId,selfId,4,120)
LuaFnSetXinFaLevel(sceneId,selfId,5,120)
LuaFnSetXinFaLevel(sceneId,selfId,6,120)
LuaFnSetXinFaLevel(sceneId,selfId,55,120)
LuaFnSetXinFaLevel(sceneId,selfId,72,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Thiªu Lâm, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--***
if key == 4 then --Minh Giáo
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 1) --ID 1 là Minh Giáo
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,7,120)
LuaFnSetXinFaLevel(sceneId,selfId,8,120)
LuaFnSetXinFaLevel(sceneId,selfId,9,120)
LuaFnSetXinFaLevel(sceneId,selfId,10,120)
LuaFnSetXinFaLevel(sceneId,selfId,11,120)
LuaFnSetXinFaLevel(sceneId,selfId,12,120)
LuaFnSetXinFaLevel(sceneId,selfId,56,120)
LuaFnSetXinFaLevel(sceneId,selfId,73,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Minh Giáo, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 5 then --Cái Bang
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 2) --ID 2 là Cái Bang
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,13,120)
LuaFnSetXinFaLevel(sceneId,selfId,14,120)
LuaFnSetXinFaLevel(sceneId,selfId,15,120)
LuaFnSetXinFaLevel(sceneId,selfId,16,120)
LuaFnSetXinFaLevel(sceneId,selfId,17,120)
LuaFnSetXinFaLevel(sceneId,selfId,18,120)
LuaFnSetXinFaLevel(sceneId,selfId,57,120)
LuaFnSetXinFaLevel(sceneId,selfId,74,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Cái Bang, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 6 then --Thiên S½n
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 7) --ID 7 là Thiên S½n
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,43,120)
LuaFnSetXinFaLevel(sceneId,selfId,44,120)
LuaFnSetXinFaLevel(sceneId,selfId,45,120)
LuaFnSetXinFaLevel(sceneId,selfId,46,120)
LuaFnSetXinFaLevel(sceneId,selfId,47,120)
LuaFnSetXinFaLevel(sceneId,selfId,48,120)
LuaFnSetXinFaLevel(sceneId,selfId,62,120)
LuaFnSetXinFaLevel(sceneId,selfId,79,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Thiên S½n, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 7 then --Mµ Dung
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 9) --ID 9 là Mµ Dung
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,64,120)
LuaFnSetXinFaLevel(sceneId,selfId,65,120)
LuaFnSetXinFaLevel(sceneId,selfId,66,120)
LuaFnSetXinFaLevel(sceneId,selfId,67,120)
LuaFnSetXinFaLevel(sceneId,selfId,68,120)
LuaFnSetXinFaLevel(sceneId,selfId,69,120)
LuaFnSetXinFaLevel(sceneId,selfId,70,120)
LuaFnSetXinFaLevel(sceneId,selfId,71,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Mµ Dung Gia, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 8 then --Nga My
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 4) --ID 4 là Nga My
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,25,120)
LuaFnSetXinFaLevel(sceneId,selfId,26,120)
LuaFnSetXinFaLevel(sceneId,selfId,27,120)
LuaFnSetXinFaLevel(sceneId,selfId,28,120)
LuaFnSetXinFaLevel(sceneId,selfId,29,120)
LuaFnSetXinFaLevel(sceneId,selfId,30,120)
LuaFnSetXinFaLevel(sceneId,selfId,59,120)
LuaFnSetXinFaLevel(sceneId,selfId,76,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Nga My, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 9 then --Tiêu Dao
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 8) --ID 8 là Tiêu Dao
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,49,120)
LuaFnSetXinFaLevel(sceneId,selfId,50,120)
LuaFnSetXinFaLevel(sceneId,selfId,51,120)
LuaFnSetXinFaLevel(sceneId,selfId,52,120)
LuaFnSetXinFaLevel(sceneId,selfId,53,120)
LuaFnSetXinFaLevel(sceneId,selfId,54,120)
LuaFnSetXinFaLevel(sceneId,selfId,63,120)
LuaFnSetXinFaLevel(sceneId,selfId,80,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Tiêu Dao, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 10 then --Tinh Túc
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 5) --ID 5 là Tinh Túc
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,31,120)
LuaFnSetXinFaLevel(sceneId,selfId,32,120)
LuaFnSetXinFaLevel(sceneId,selfId,33,120)
LuaFnSetXinFaLevel(sceneId,selfId,34,120)
LuaFnSetXinFaLevel(sceneId,selfId,35,120)
LuaFnSetXinFaLevel(sceneId,selfId,36,120)
LuaFnSetXinFaLevel(sceneId,selfId,60,120)
LuaFnSetXinFaLevel(sceneId,selfId,77,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Tinh Túc, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 11 then --Võ Ðang
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 3) --ID 3 là Võ Ðang
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,19,120)
LuaFnSetXinFaLevel(sceneId,selfId,20,120)
LuaFnSetXinFaLevel(sceneId,selfId,21,120)
LuaFnSetXinFaLevel(sceneId,selfId,22,120)
LuaFnSetXinFaLevel(sceneId,selfId,23,120)
LuaFnSetXinFaLevel(sceneId,selfId,24,120)
LuaFnSetXinFaLevel(sceneId,selfId,58,120)
LuaFnSetXinFaLevel(sceneId,selfId,75,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Võ Ðang, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 12 then --Thiên Long
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 6) --ID 6 là Thiên Long
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,37,120)
LuaFnSetXinFaLevel(sceneId,selfId,38,120)
LuaFnSetXinFaLevel(sceneId,selfId,39,120)
LuaFnSetXinFaLevel(sceneId,selfId,40,120)
LuaFnSetXinFaLevel(sceneId,selfId,41,120)
LuaFnSetXinFaLevel(sceneId,selfId,42,120)
LuaFnSetXinFaLevel(sceneId,selfId,61,120)
LuaFnSetXinFaLevel(sceneId,selfId,78,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Thiên Long, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 2 then --Nh§n Yªu quyªt Mµ Dung Gia
BeginAddItem(sceneId)
AddItem(sceneId,30308099,1)--YQ 35 - Lñc Chí Ti«n Thích
AddItem(sceneId,30308097,1)--YQ 45 - Phá Thiên ThÑc
AddItem(sceneId,30308096,1)--YQ 65 - Hóa Khí ThÑc
AddItem(sceneId,30308100,1)--YQ 80 - Lång Thiên ThÑc
EndAddItem(sceneId,selfId)
AddItemListToHuman(sceneId,selfId)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng các hÕ nh§n ðßþc 1 bµ yªu quyªt Mµ Dung Gia.")
x002099_NotifyFailTips(sceneId, selfId, "Nh§n ðßþc 1 bµ yªu quyªt Mµ Dung Gia.")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId)
end
end
--Ghi lên tip
function x002098_NotifyFailTips( sceneId, selfId, Tip )
BeginEvent( sceneId )
AddText( sceneId, Tip )
EndEvent( sceneId )
DispatchMissionTips( sceneId, selfId )
end
.
Lưu ý chuyển mã VISCII để viết nhé
Lưu ý đây là của Newbie tổng hợp cho Newbie chứ không phải cho Pro thế nên ai Pro thì có thể đóng góp ý kiến nhưng xin đừng khinh thường Newbie bọn mình nha. Guild đầu tay, nếu nó chưa phải chỗ nào mọi người cho ý kiến để nó hoàn chỉnh nha :D
Yêu cầu của mục này là bạn phải biết sơ sơ về một số ngôn ngữ lập trình cơ bản như Pascal, C, C++,... Biết những cái này làm gì? Biết những cái này để ta nắm sơ qua ý tưởng cũng như là một số câu lệnh điều kiện mà ta sắp dùng đến.
Cấu trúc của một đoạn code đại diện cho NPC chuyên về sự kiện.
1. Phần khởi động: Phần này là phần mà ta phải khai báo ID của NPC cũng như viết một số chú thích cho người xem hiểu đoạn code nói gì.
2. Phần mở đầu: Giới thiệu sự kiện, các mục chọn lựa hoặc chỉ đơn giản là phần duy nhất trong đoạn code với NPC viết ra chỉ để nói một vài dòng.
3. Phần điều kiện: Không cần thiết phải có. Dùng để kiểm tra điều kiện cần thiết để có thể vào được thân sự kiện. ( Ví dụ cấp 10 trở lên mới được vào gọi là một điều kiện ).
4. Phần thân: Đây chính là thân sự kiện với các lệnh do chính bạn viết nên. Có thể nói cái này là cái quan trọng quyết định chức năng của NPC ( đa số là thế ).
5. Các phần khác: Các bạn có thể sáng tạo ra các hàm khác phục vụ cho đoạn code của mình.
Chi tiết:
A/ PHẦN KHỞI ĐỘNG:
Phần này đa số toàn là chú thích cho người đọc. Và cái quan trọng nhất của phần này chính là cái khai báo một biến hằng số đại diện cho ID của NPC.
Nếu như không khai báo kiểu này, mỗi khi dùng một cái lệnh liên quan đến ID của NPC ( lệnh viết ) thì bạn sẽ phải nhập đi nhập lại cái ID đó, có nhàm không? Và xét trường hợp nhiều file, và bạn là một người ngồi soát lỗi chẳng hạn, việc không chú thích cũng như không khai báo ID trên đầu liệu bạn có khó chịu không?
Một khuyến cáo là tất cả các khóa từ tên từng hàm một cũng nên kèm theo cái ID ở đầu để tiện quan sát, lý do mình đã trình bày bên trên.
Một ví dụ về phần này như sau:
--NPC: Đại Lý
--Tên: Sói Đẹp Zai
--Tittle: Hỗ trợ tân thủ
--Edit: By Sói Kool
x002097_g_ScriptId = 002097
Giải thích: Những ký tự sau cụm dấu "--" đều được coi là "chú thích" và không liên quan gì đến chương trình của ta cả.
Cái biến đại diện cho ID Script kia bạn có thể đặt tên nào cũng được nhưng thống nhất là đặt theo kiểu kia để tiện sau này lục lại NPC.
Biến x002097_g_ScriptId sẽ mang giá trị là 002097, giá trị này đại diện cho ID của NPC thực hiện chức năng được viết trong code này.
B/ PHẦN MỞ ĐẦU:
Mở đầu sẽ là lời gọi tới cái mà các ngôn ngữ lập trình kia gọi là "Chương trình chính" hay "Hàm chính".
Và như trong game các bạn sẽ thấy cái bảng này sẽ hiện lên khi bấm vào NPC ( Đương nhiên lỗi hoặc không có câu lệnh viết ra cái gì đó thì không tính nhé ).
Cấu trúc của phần này sẽ là
function xID_NPC_OnDefaultEvent(sceneId,selfId,targetId)
Các lệnh cơ bản, thường sẽ là lệnh để viết ra một cái gì đó
end
Trong đó cái ID_NPC là ID của NPC tương tự như trên. Còn các cái còn lại đừng thay đổi. Mình đã thử đổi tên và kết quả lỗi Script.
Một ví dụ:
function x002097_OnDefaultEvent(sceneId,selfId,targetId)
local nam = LuaFnGetName(sceneId,selfId)
BeginEvent(sceneId)
AddText(sceneId,"Hi "..nam..", have a good day!")
AddNumText(sceneId,x002097_g_ScriptId,"Chức năng tân thủ",1,1)
EndEvent(senceId)
DispatchEventList(sceneId,selfId,targetId)
end
Lưu ý sau dấu "=" là hàm đã được Lập trình viên viết sẵn chỉ việc dùng thôi nhé ( Hàm_Hằng ).
Như các bạn thấy bên trong là cụm lệnh bắt đầu bằng khóa BeginEvent(sceneId) và kết thúc bằng khóa EndEvent(SceneId)
Hàm AddText(sceneId,"Text") tác dụng chính của nó là thêm vào một chuỗi ký tự, như trên thì hàm này sẽ có tác dụng ghi ra cái bảng nói chuyện của NPC.
Ví dụ bạn tên Test, cái bảng sẽ hiện lên "Hi Test, have a good day!", tương tự như printf trong C.
AddNumText(sceneId,NPC_ID,"Text",x,y) nó có tác dụng ghi ra một chuỗi ký tự nào đó mà khi người dùng ấn vào chuỗi này thì sẽ thực hiện một số câu lệnh phía sau.
Trong đó "x" là biểu tượng đầu của chuỗi ký tự này, và "y" sẽ là "mã số" của cái lệnh mà nó sẽ thực hiện phía sau.
DispatchEventList(sceneId,selfId,targetId) đây là lệnh đóng cái bảng lại.
Như các bạn thấy trong ví dụ trên, cái bảng của chúng ta sẽ hiện ra.
Hi Test, have a good day!
(image) Chức năng tân thủ
Cái (image) chính là biểu tượng trong game đó mà cụ thể (image)=1 sẽ ra hình cuốn sách cuộn tròn như các bạn thường thấy khi nhận nhiệm vụ ở các NPC.
Và khi bạn bấm vào cái "Chức năng tân thủ", nó sẽ làm gì tiếp thì hãy chuyển sang phần sau.
C/PHẦN ĐIỀU KIỆN:
Tác dụng cơ bản của phần này chỉ là để kiểm tra điều kiện của người chơi sao cho thỏa mãn với mục đích của sự kiện được viết ra.
Cấu trúc của phần này là
function xID_NPC_OnConditionCheck(sceneId,selfId )
Một số lệnh
end
Ví dụ mình sẽ xây dựng một phần điều kiện để kiểm tra xem người chơi có đủ cấp độ 10 và không vượt quá cấp độ 50 mới có thể tham gia sự kiện.
function x002097_OnConditionCheck(sceneId,selfId )
local lev=GetLevel(sceneId,selfId)
if lev < 10 then
BeginEvent(sceneId)
AddText(sceneId,"Khi nào đạt cấp 11 trở lên hãy đến tìm ta")
DispatchEventList(sceneId,selfId,targetId)
return 0
EndEvent(sceneId)
elseif lev > 50 then
BeginEvent(sceneId)
AddText(sceneId,"Lớn hơn cấp 50 mà gọi là tân thủ à?")
DispatchEventList(sceneId,selfId,targetId)
return 0
EndEvent(sceneId)
end
end
Câu lệnh if điều kiện then thực hiện lệnh end các bạn tự hiểu nó giống trong các ngôn ngữ lập trình khác.
elseif điều kiện then thực hiện lệnh end tương tự như if chỉ khác cái này là kiểm tra lệnh if trên không thỏa mãn thì nó sẽ kiểm tra điều kiện sau. Hay theo C++ thì nó tương đương lệnh
else
if (Điều kiện)
{
thực hiện lệnh;
}
Ngoài ra còn lệnh else nữa nhé. Kết thúc else sẽ là khóa end vì thật ra else cũng là một câu lệnh nhỏ trong cụm if then end và kết thúc lệnh này phải có end => Logic phết :D
return 0, giống hệt C++, gần như stop chương trình luôn đó. Ngoài ra nó còn lệnh tên là return không thôi có tác dụng trở lại bảng sự kiện ban đầu.
D/ PHẦN THÂN
Cấu trúc
function xID_NPC_OnEventRequest(sceneId,selfId,targetId,eve ntId)
Lệnh
end
Đây chính là phần mà các bạn sáng tạo nhiều nhất ví dụ của mình có hàm Add Level cho nhân vật.
function x002097_OnEventRequest(sceneId,selfId,targetId,eve ntId)
local key = GetNumText()
if key == 1 then
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc mừng bạn thăng cấp 120 thành công")
EndEvent(scneneId)
DispatchEventList(sceneId,selfId,targetId)
end
end
"==" là phép so sánh bằng nhé giống bên C.
SetLevel(sceneId,selfId,x) là hàm Set cho nhân vật level x tùy ý ( không vượt quá 150 )
local Tên_Biến = Hàm_Hằng
GetNumText() tức là hàm lấy giá trị ẩn của cái chỗ mà người chơi vừa kick vào ( Hơi khó hiểu nhưng đại khái theo cái phần mở đầu, người dùng ấn vào cái cụm ký tự mà có chữ số đại diện cho các câu lệnh ngầm phía sau là 1 )
Ở đây có thể bao gồm nhiều lệnh nhé, và phần này là phần đòi hỏi người viết phải có kiến thức lập trình, rà soát các trường hợp cẩn thận.
E/PHẦN KHÁC
Ở phần này các bạn có thể sáng tạo các hàm khác cho riêng mình được, ví dụ đoạn code bên trên mình có thể biến nó về sử dụng một hàm khác và lấy hàm chính của chương trình gọi tới nó.
Vẫn thống nhất như trên thêm xID_NPC_Tên_chương_trình(tham biến) nhé
--NPC: Đại Lý
--Tên: Sói Đẹp Zai
--Tittle: Hỗ trợ tân thủ
--Edit: By Sói Kool
function x002097_OnDefaultEvent(sceneId,selfId,targetId)
local nam = LuaFnGetName(sceneId,selfId)
BeginEvent(sceneId)
AddText(sceneId,"Welcome "..nam..", have a good day!")
AddNumText(sceneId,x002097_g_ScriptId,"Chức năng tân thủ",1,1)
EndEvent(senceId)
DispatchEventList(sceneId,selfId,targetId)
end
function x002097_OnConditionCheck(sceneId,selfId )
local lev=GetLevel(sceneId,selfId)
if lev < 10 then
BeginEvent(sceneId)
AddText(sceneId,"Khi nào đạt cấp 11 trở lên hãy đến tìm ta")
DispatchEventList(sceneId,selfId,targetId)
return 0
EndEvent(sceneId)
elseif lev > 50 then
BeginEvent(sceneId)
AddText(sceneId,"Lớn hơn cấp 50 mà gọi là tân thủ à?")
DispatchEventList(sceneId,selfId,targetId)
return 0
EndEvent(sceneId)
end
end
function x002097_OnEventRequest(sceneId,selfId,targetId,eve ntId)
local key = GetNumText()
if key == 1 then
x002097_LenLevel(sceneId,selfId)
end
end
function x002097_LenLevel(sceneId,selfId)
BeginEvent(sceneId)
AddText(sceneId,"Chúc mừng bạn thăng cấp 120 thành công")
EndEvent(scneneId)
DispatchEventList(sceneId,selfId,targetId)
end
Đây gọi là một cái hay mà các ngôn ngữ lập trình khác đều có đó là thuật "Chia để trị", sau này bạn sẽ rất cần thiết đến cách phân chia này với các script có nhiều phần...
Lưu ý: Phân biệt chữ hoa chữ thường nên phải cẩn thận.
MỘT SỐ CÂU LỆNH SƯU TẬP:
Add KNB:
YuanBao(sceneId,selfId,targetId,x,y)
Trong đó y là số KNB cần add và x là số lượng, hiểu nôm na là số phiếu KNB
Add ĐT:
ZengDian(sceneId,selfId,targetId,x,y)
Trong đó y là số ĐT cần add và x là số lượng
Add EXP:
LuaFnAddExp(sceneId,selfId,x)
Trong đó x là số kinh nghiệm ( x<=99999999 )
Add điểm Môn Phái:
SetHumanMenpaiPoint(sceneId,selfId,x)
Trong đó x là số điểm cần Set
Add Item:
BeginAddItem(sceneId)
AddItem(sceneId,x,1)
EndAddItem(sceneId,selfId)
AddItemListToHuman(sceneId,selfId)
Với x là ID của item ( xem trong server hoặc client )
Add Skill
AddSkill(sceneId,selfId,x)
Trong đó x là ID skill cần add
Ghi ra kênh hệ thống:
BroadMsgByChatPipe(sceneId,selfId,"Text")
Lấy tên nhân vật:
local Tên_Biến = LuaFnGetName(sceneId,selfId)
Lấy level nhân vật:
local Tên_Biến = GetLevel(sceneId,selfId)
Lấy số thứ tự môn phái ( 0..9 )
local Tên_Biến = GetMenPai(sceneId,selfId)
Gia nhập môn phái:
LuaFnJoinMenpai(sceneId,selfId,targetId,x)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,targe tId,148,0)
Trong đó x là thứ số tự môn phái ( 0..9 )
Add tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,x,y)
Trong đó x là ID quyển tâm pháp cần thêm, y là số điểm tâm pháp
OK như vậy là đủ để viết được Script đơn giản. Còn các cái cao siêu mình không nói đến nhé.
Và đây là 1 script mẫu nhận tâm pháp và lev 120 cho anh em tham khảo
--ÐÕi Lý NPC
--ID: 002097
--Script test code by Sói Kool
--************************
x002097_g_ScriptId = 002097
--************************
--Kh·i ðµng
--************************
function x002097_OnDefaultEvent(sceneId,selfId,targetId)
BeginEvent(sceneId)
AddText(sceneId,"Chào m×ng bÕn ðªn v¾i Thiên Long Bát Bµ edit by Sói Kool...Các hÕ có mu¯n gia nh§p môn phái và nh§n tâm pháp c¤p 120 không ? Nªu ð°ng ý, các hÕ s¨ l§p tÑc thång lên c¤p ðµ 120 cùng tâm pháp môn phái tß½ng Ñng...")
AddNumText(sceneId,x002097_g_ScriptId,"Xác nh§n",1,1)
AddNumText(sceneId,x002097_g_ScriptId,"Nh§n yªu quyªt phái Mµ Dung",1,2)
EndEvent(senceId)
DispatchEventList(sceneId,selfId,targetId)
end
--************************
--Thân chß½ng trình
--************************
function x002097_OnEventRequest(sceneId,selfId,targetId,eve ntId)
local key = GetNumText()
local lev = GetLevel(sceneId,selfId)
--Gia nh§p môn phái
if key == 1 then
BeginEvent(sceneId)
AddText(sceneId,"Hãy lña ch÷n môn phái mu¯n gia nh§p...#r Lßu ý: C¤p 120 tr· lên không nên dùng chÑc nång này v¸ nó s¨ hÕ c¤p ðµ cüa bÕn xu¯ng 120....")
AddNumText(sceneId,x002097_g_ScriptId,"Thiªu Lâm",2,3)
AddNumText(sceneId,x002097_g_ScriptId,"Minh Giáo",2,4)
AddNumText(sceneId,x002097_g_ScriptId,"Cái Bang",2,5)
AddNumText(sceneId,x002097_g_ScriptId,"Thiên S½n",2,6)
AddNumText(sceneId,x002097_g_ScriptId,"#YMµ Dung",2,7)
AddNumText(sceneId,x002097_g_ScriptId,"Nga My",2,8)
AddNumText(sceneId,x002097_g_ScriptId,"Tiêu Dao",2,9)
AddNumText(sceneId,x002097_g_ScriptId,"Tinh Túc",2,10)
AddNumText(sceneId,x002097_g_ScriptId,"Võ Ðang",2,11)
AddNumText(sceneId,x002097_g_ScriptId,"Thiên Long",2,12)
EndEvent(sceneId)
DispatchEventList( sceneId,selfId, targetId )
end
--***
if key == 3 then --Thiªu Lâm
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId,0) --ID 0 là Thiªu Lâm
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,1,120)
LuaFnSetXinFaLevel(sceneId,selfId,2,120)
LuaFnSetXinFaLevel(sceneId,selfId,3,120)
LuaFnSetXinFaLevel(sceneId,selfId,4,120)
LuaFnSetXinFaLevel(sceneId,selfId,5,120)
LuaFnSetXinFaLevel(sceneId,selfId,6,120)
LuaFnSetXinFaLevel(sceneId,selfId,55,120)
LuaFnSetXinFaLevel(sceneId,selfId,72,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Thiªu Lâm, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--***
if key == 4 then --Minh Giáo
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 1) --ID 1 là Minh Giáo
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,7,120)
LuaFnSetXinFaLevel(sceneId,selfId,8,120)
LuaFnSetXinFaLevel(sceneId,selfId,9,120)
LuaFnSetXinFaLevel(sceneId,selfId,10,120)
LuaFnSetXinFaLevel(sceneId,selfId,11,120)
LuaFnSetXinFaLevel(sceneId,selfId,12,120)
LuaFnSetXinFaLevel(sceneId,selfId,56,120)
LuaFnSetXinFaLevel(sceneId,selfId,73,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Minh Giáo, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 5 then --Cái Bang
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 2) --ID 2 là Cái Bang
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,13,120)
LuaFnSetXinFaLevel(sceneId,selfId,14,120)
LuaFnSetXinFaLevel(sceneId,selfId,15,120)
LuaFnSetXinFaLevel(sceneId,selfId,16,120)
LuaFnSetXinFaLevel(sceneId,selfId,17,120)
LuaFnSetXinFaLevel(sceneId,selfId,18,120)
LuaFnSetXinFaLevel(sceneId,selfId,57,120)
LuaFnSetXinFaLevel(sceneId,selfId,74,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Cái Bang, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 6 then --Thiên S½n
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 7) --ID 7 là Thiên S½n
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,43,120)
LuaFnSetXinFaLevel(sceneId,selfId,44,120)
LuaFnSetXinFaLevel(sceneId,selfId,45,120)
LuaFnSetXinFaLevel(sceneId,selfId,46,120)
LuaFnSetXinFaLevel(sceneId,selfId,47,120)
LuaFnSetXinFaLevel(sceneId,selfId,48,120)
LuaFnSetXinFaLevel(sceneId,selfId,62,120)
LuaFnSetXinFaLevel(sceneId,selfId,79,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Thiên S½n, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 7 then --Mµ Dung
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 9) --ID 9 là Mµ Dung
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,64,120)
LuaFnSetXinFaLevel(sceneId,selfId,65,120)
LuaFnSetXinFaLevel(sceneId,selfId,66,120)
LuaFnSetXinFaLevel(sceneId,selfId,67,120)
LuaFnSetXinFaLevel(sceneId,selfId,68,120)
LuaFnSetXinFaLevel(sceneId,selfId,69,120)
LuaFnSetXinFaLevel(sceneId,selfId,70,120)
LuaFnSetXinFaLevel(sceneId,selfId,71,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Mµ Dung Gia, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 8 then --Nga My
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 4) --ID 4 là Nga My
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,25,120)
LuaFnSetXinFaLevel(sceneId,selfId,26,120)
LuaFnSetXinFaLevel(sceneId,selfId,27,120)
LuaFnSetXinFaLevel(sceneId,selfId,28,120)
LuaFnSetXinFaLevel(sceneId,selfId,29,120)
LuaFnSetXinFaLevel(sceneId,selfId,30,120)
LuaFnSetXinFaLevel(sceneId,selfId,59,120)
LuaFnSetXinFaLevel(sceneId,selfId,76,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Nga My, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 9 then --Tiêu Dao
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 8) --ID 8 là Tiêu Dao
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,49,120)
LuaFnSetXinFaLevel(sceneId,selfId,50,120)
LuaFnSetXinFaLevel(sceneId,selfId,51,120)
LuaFnSetXinFaLevel(sceneId,selfId,52,120)
LuaFnSetXinFaLevel(sceneId,selfId,53,120)
LuaFnSetXinFaLevel(sceneId,selfId,54,120)
LuaFnSetXinFaLevel(sceneId,selfId,63,120)
LuaFnSetXinFaLevel(sceneId,selfId,80,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Tiêu Dao, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 10 then --Tinh Túc
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 5) --ID 5 là Tinh Túc
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,31,120)
LuaFnSetXinFaLevel(sceneId,selfId,32,120)
LuaFnSetXinFaLevel(sceneId,selfId,33,120)
LuaFnSetXinFaLevel(sceneId,selfId,34,120)
LuaFnSetXinFaLevel(sceneId,selfId,35,120)
LuaFnSetXinFaLevel(sceneId,selfId,36,120)
LuaFnSetXinFaLevel(sceneId,selfId,60,120)
LuaFnSetXinFaLevel(sceneId,selfId,77,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Tinh Túc, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 11 then --Võ Ðang
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 3) --ID 3 là Võ Ðang
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,19,120)
LuaFnSetXinFaLevel(sceneId,selfId,20,120)
LuaFnSetXinFaLevel(sceneId,selfId,21,120)
LuaFnSetXinFaLevel(sceneId,selfId,22,120)
LuaFnSetXinFaLevel(sceneId,selfId,23,120)
LuaFnSetXinFaLevel(sceneId,selfId,24,120)
LuaFnSetXinFaLevel(sceneId,selfId,58,120)
LuaFnSetXinFaLevel(sceneId,selfId,75,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Võ Ðang, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 12 then --Thiên Long
--Gia nh§p môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId, 6) --ID 6 là Thiên Long
--Tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,37,120)
LuaFnSetXinFaLevel(sceneId,selfId,38,120)
LuaFnSetXinFaLevel(sceneId,selfId,39,120)
LuaFnSetXinFaLevel(sceneId,selfId,40,120)
LuaFnSetXinFaLevel(sceneId,selfId,41,120)
LuaFnSetXinFaLevel(sceneId,selfId,42,120)
LuaFnSetXinFaLevel(sceneId,selfId,61,120)
LuaFnSetXinFaLevel(sceneId,selfId,78,120)
LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfI d,selfId,148,0)
--Thång c¤p
SetLevel(sceneId,selfId,120)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng ngß½i ðã là ð® tØ Thiên Long, nh§n thành công tâm pháp 120 môn phái ð°ng th¶i thång lên c¤p 120...")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId )
end
--**
if key == 2 then --Nh§n Yªu quyªt Mµ Dung Gia
BeginAddItem(sceneId)
AddItem(sceneId,30308099,1)--YQ 35 - Lñc Chí Ti«n Thích
AddItem(sceneId,30308097,1)--YQ 45 - Phá Thiên ThÑc
AddItem(sceneId,30308096,1)--YQ 65 - Hóa Khí ThÑc
AddItem(sceneId,30308100,1)--YQ 80 - Lång Thiên ThÑc
EndAddItem(sceneId,selfId)
AddItemListToHuman(sceneId,selfId)
BeginEvent(sceneId)
AddText(sceneId,"Chúc m×ng các hÕ nh§n ðßþc 1 bµ yªu quyªt Mµ Dung Gia.")
x002099_NotifyFailTips(sceneId, selfId, "Nh§n ðßþc 1 bµ yªu quyªt Mµ Dung Gia.")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId)
end
end
--Ghi lên tip
function x002098_NotifyFailTips( sceneId, selfId, Tip )
BeginEvent( sceneId )
AddText( sceneId, Tip )
EndEvent( sceneId )
DispatchMissionTips( sceneId, selfId )
end
.
Lưu ý chuyển mã VISCII để viết nhé