Kết quả 1 đến 10 của 27
Chủ đề: Lua in TLBB
-
17-12-14, 05:00 PM #1
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,063 Times in 1,403 Posts
Lua in TLBB
Về Lua in TLBB thì mình không khẳng định mình biết hết tất cả nhưng mình sẽ tổng hợp lại từng cái một bên dưới đây theo từng mục lớn, ai có ý kiến gì cứ đóng góp bên dưới. Và mình tổng hợp ở đây chỉ là cấu trúc cơ bản chưa đụng chạm gì đến các câu lệnh can thiệp đến cơ sở dữ liệu của game như add tiền, set phái,... Và các bạn nên chú ý là không biết code thì các bạn test game gần như không được hoặc rất ít thành công.
Trước tiên các bạn cần phải tham khảo topic về Lua Basic vì ở đây mình sẽ không giải thích lại các cấu trúc lệnh trong Lua basic nữa mà sẽ dùng thẳng nó luôn.
Ngoài ra trước tiên các bạn nên tham khảo topic sau http://www.clbgamesvn.com/diendan/sh...d.php?t=120922 từ cái phần Script và đường dẫn trở về sau, tuy thô sơ nhưng ít nhiều nó cũng khái quát được các khái niệm cơ bản về Script.
1. Script cho NPC đơn giản (Ví dụ nhận đồ, tiền,...)
Nôm na là chức năng của NPC nào đó, như cái hình sau:
Và đây là code của nó
Code:--Huyªt chiªn Âm Quý Phái --ThÕch Thanh Tuy«n --Author: Hoàng Steven --************************-- x910211_g_ScriptId=910211 --************************-- --*****************************-- --* On Default Event *-- --*****************************-- function x910211_OnDefaultEvent(sceneId,selfId,targetId) --************************-- BeginEvent(sceneId) AddText(sceneId,"Kiªp nÕn này là do Âm Quý Phái gây ra, h÷ phäi trä giá cho t¤t cä...") AddNumText(sceneId,x910211_g_ScriptId,"Ðßa ta ra khöi ðây",9,0) --R¶i phø bän AddNumText(sceneId,x910211_g_ScriptId,"Làm phi«n cô nß½ng...",-1,1) --Bö qua EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId) --************************-- end --*****************************-- --* On Event Request *-- --*****************************-- function x910211_OnEventRequest(sceneId,selfId,targetId,eventId) local key=GetNumText() --************************-- if key==1 then BeginUICommand(sceneId) EndUICommand(sceneId) DispatchUICommand(sceneId,selfId,1000) end --************************-- if key==0 then local Scene=LuaFnGetCopySceneData_Param(sceneId,3) local x=LuaFnGetCopySceneData_Param(sceneId,4) local y=LuaFnGetCopySceneData_Param(sceneId,5) CallScriptFunction((400900),"TransferFunc",sceneId,selfId,Scene,x,y) end --************************-- end
Về cấu trúc của Lua basic thì các bạn đọc lại bài viết về Lua basic còn trong này thì có một vài cái hàm con mới xuất hiện như bạn thấy, và trong hầu hết các script NPC đơn giản đều mặc định cái hàm này gọi đến đầu tiên, đó là hàm.
Code:function xIDScr_OnDefaultEvent(sceneId,selfId,targetId) end
xIDScr là ID của Script còn vì sao lại phải thế thì mình đã thí nghiệm và thấy nó là do người ta định nghĩa sẵn từ lúc thiết kế các cái hàm đặc trưng của game, nếu bỏ cái đó đi hoặc ID Script không khớp với ID chủ thì Script sẽ báo lỗi hoặc không báo lỗi nhưng không chạy.
sceneId: ID cảnh tượng đang thao tác
selfId: ID người chơi
targetId: ID của NPC
3 cái tham biến này thay đổi tùy theo thể loại nhưng NPC nó là như thế này, cần phải phân biệt rõ về sau ta còn script Boss thì nó sẽ có ý nghĩa khác.
Tiếp theo là hàm mặc định chạy thứ hai đó là
Code:xScrID_OnEventRequest(sceneId,selfId,targetId,eventId) end
Các tham biến trong hàm này:
sceneId, targetId,selfId giống bên trên.
eventId: ID của cái event (sự kiện) mà hàm này bắt, cái này khá quan trọng vì theo như mình nói lúc đầu là cấu trúc hệ thống lua hoàn toàn tuân theo cấu trúc của LT HĐT, lý do đơn giản giải thích cho việc các file Lua hoàn toàn gọi tới lẫn nhau được, về phần script event mình sẽ nói rõ.
Giải thích chi tiết các câu lệnh sử dụng trong script. Xét đoạn lệnh sau:
Code:BeginEvent(sceneId) AddText(sceneId,"Kiªp nÕn này là do Âm Quý Phái gây ra, h÷ phäi trä giá cho t¤t cä...") AddNumText(sceneId,x910211_g_ScriptId,"Ðßa ta ra khöi ðây",9,0) --R¶i phø bän AddNumText(sceneId,x910211_g_ScriptId,"Làm phi«n cô nß½ng...",-1,1) --Bö qua EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId)
Code:BeginEvent(sceneId) EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId)
Và bên trong nó có vài cái lệnh như AddText(sceneId,Text) thì nó chỉ là gắn đối tượng là chuỗi Text lên cái khung đó thôi. Nên nhớ là không có cái sceneId là không ra cái gì đâu nhé. Đối tượng này phải được gắn vào đối tượng đang xét trong cảnh xác định.
Lệnh AddNumText(sceneId,ScrID,Text,Icon_Numbering,Event _Number) để truyền một sự kiện khi người dùng click vào đó sau chuỗi event này trong đó quan trọng nhất là cái Icon_Numbering gọi là ID hình ảnh thao tác như các bạn thấy ở đầu mỗi dòng và Event_Number chính là cái tham số truyền xuống để nó phân biệt được người dùng chọn sự kiện nào trong chuỗi sự kiện ban đầu. Mà như ở đâu đó mình nói nó gọi là số đại diện.
Xét lệnh GetNumText(), lệnh này chính là để check cái Event_Number đã được chọn để thao tác.
Lưu ý là hàm EventRequest sẽ chạy liên tục khi nào cái Event_Number còn được truyền xuống, nghĩa là giả sử trong hàm này còn chuỗi BeginEvent..EndEvent và khiến nó bắt Event_Number mới thì nó vẫn sẽ thao tác khi có cái Event_Number nào mới truyền xuống. Một đoạn script ví dụ cho cái này:
Code:function x900093_OnEventRequest(sceneId,selfId,targetId,eventId) local key = GetNumText() --*****************-- if key == 0 then BeginEvent(sceneId) AddText(sceneId," L®nh bài Uy danh giang h° g°m #G4#W loÕi #GS½#W, #Gаng kim#W, #GBÕch kim#W, #GHoàng kim#W tß½ng Ñng #G20#W, #G60#W, #G120#W, #G200#W ði¬m #GUy danh giang h°#W. Các hÕ có t¤m l®nh bài nào?") EndEvent(sceneId) AddRadioItemBonus(sceneId,x900093_g_UD_1,1) AddRadioItemBonus(sceneId,x900093_g_UD_2,1) AddRadioItemBonus(sceneId,x900093_g_UD_3,1) AddRadioItemBonus(sceneId,x900093_g_UD_4,1) DispatchMissionContinueInfo(sceneId,selfId,targetId,x900093_g_ScriptId,0) end --*****************-- if key == 1 then local UD=GetMissionData(sceneId,selfId,UY_DANH_GIANG_HO) if UD==-1 then SetMissionData(sceneId,selfId,UY_DANH_GIANG_HO,0) end UD=GetMissionData(sceneId,selfId,UY_DANH_GIANG_HO) BeginEvent(sceneId) AddText(sceneId,"Uy danh giang h° hi®n tÕi cüa các hÕ là:#G"..UD.."#W ði¬m!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) BeginUICommand(sceneId) UICommand_AddInt(sceneId,GetMissionData(sceneId,selfId,XIULIAN_GONGLI)) UICommand_AddInt(sceneId,GetMissionData(sceneId,selfId,XIULIAN_LILIANG)) UICommand_AddInt(sceneId,GetMissionData(sceneId,selfId,XIULIAN_LINGQI)) UICommand_AddInt(sceneId,GetMissionData(sceneId,selfId,XIULIAN_TILI)) UICommand_AddInt(sceneId,GetMissionData(sceneId,selfId,XIULIAN_DINGLI)) UICommand_AddInt(sceneId,GetMissionData(sceneId,selfId,XIULIAN_SHENFA)) UICommand_AddInt(sceneId,GetMissionData(sceneId,selfId,UY_DANH_GIANG_HO)) EndUICommand(sceneId) DispatchUICommand(sceneId,selfId,20000001) end --*****************-- if key == 2 then BeginEvent(sceneId) local UD=GetMissionData(sceneId,selfId,UY_DANH_GIANG_HO) AddText(sceneId,"G°m t¤t cä #G10#W danh hi®u tß½ng Ñng #G10#W mÑc ði¬m #GUy danh giang h°#W.") AddText(sceneId,"Uy danh giang h° hi®n tÕi cüa các hÕ là:#G"..UD.."#W ði¬m.") if UD<500 then AddText(sceneId,"Uy danh giang h° cüa các hÕ vçn chßa ðü ð¬ ðÕt ðßþc các danh hi®u cao quý!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) return end if UD>=97500 then LuaFnAwardSpouseTitle(sceneId,selfId,"#YVô Song Vß½ng Giä") DispatchAllTitle(sceneId,selfId) AddText(sceneId,"Danh hi®u hi®n tÕi cüa các hÕ là #YVô Song Vß½ng Giä#W!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9387,0) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9397,0) return elseif UD>=65500 then LuaFnAwardSpouseTitle(sceneId,selfId,"#cFF0000Chí Tôn Truy«n Thuyªt") DispatchAllTitle(sceneId,selfId) AddText(sceneId,"Danh hi®u hi®n tÕi cüa các hÕ là #c00FF00Chí Tôn Truy«n Thuyªt#W!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9388,0) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9398,0) return elseif UD>=32500 then LuaFnAwardSpouseTitle(sceneId,selfId,"#cFF0000Ti«m Long Ngâm Uyên") DispatchAllTitle(sceneId,selfId) AddText(sceneId,"Danh hi®u hi®n tÕi cüa các hÕ là #c00FF00Ti«m Long Ngâm Uyên#W!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9389,0) return elseif UD>=15500 then LuaFnAwardSpouseTitle(sceneId,selfId,"#cff8080S° Phßþng Linh Vû") DispatchAllTitle(sceneId,selfId) AddText(sceneId,"Danh hi®u hi®n tÕi cüa các hÕ là #ccff8080S° Phßþng Linh Vû#W!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9390,0) return elseif UD>=9500 then LuaFnAwardSpouseTitle(sceneId,selfId,"#cff8080H²n Thiên Ch¤n Nguyên") DispatchAllTitle(sceneId,selfId) AddText(sceneId,"Danh hi®u hi®n tÕi cüa các hÕ là #cff8080H²n Thiên Ch¤n Nguyên#W!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9391,0) return elseif UD>=3500 then LuaFnAwardSpouseTitle(sceneId,selfId,"#BNgñ Không Phùng Hß") DispatchAllTitle(sceneId,selfId) AddText(sceneId,"Danh hi®u hi®n tÕi cüa các hÕ là #BNgñ Không Phùng Hß#W!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9392,0) return elseif UD>=1500 then LuaFnAwardSpouseTitle(sceneId,selfId,"#BKinh Thª еc Vû") DispatchAllTitle(sceneId,selfId) AddText(sceneId,"Danh hi®u hi®n tÕi cüa các hÕ là #BKinh Thª еc Vû#W!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9393,0) return elseif UD>=1000 then LuaFnAwardSpouseTitle(sceneId,selfId,"#GLång Tuy®t Vø Änh") DispatchAllTitle(sceneId,selfId) AddText(sceneId,"Danh hi®u hi®n tÕi cüa các hÕ là #GLång Tuy®t Vø Änh#W!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9394,0) return elseif UD>=700 then LuaFnAwardSpouseTitle(sceneId,selfId,"#GXu¤t Tr¥n Kinh H°ng") DispatchAllTitle(sceneId,selfId) AddText(sceneId,"Danh hi®u hi®n tÕi cüa các hÕ là #GXu¤t Tr¥n Kinh H°ng#W!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9395,0) return else LuaFnAwardSpouseTitle(sceneId,selfId,"#WSiêu Phàm Hy Ký") DispatchAllTitle(sceneId,selfId) AddText(sceneId,"Danh hi®u hi®n tÕi cüa các hÕ là Siêu Phàm Hy Ký!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,9396,0) return end end --*****************-- if key == 3 then BeginEvent(sceneId) AddText(sceneId,"Chï c¥n các hÕ kiªm ðßþc mµt trong các l®nh bài uy danh giang h°, ðem ðªn ch² ta là có ði¬m uy danh giang h°.") AddText(sceneId,"L®nh bài #GUy danh giang h°#W có th¬ ðÕt ðßþc khi tham gia nhi®m vø anh hùng tÕi #GPhùng Ng÷c Lâm (275,266)#W. Các hÕ hãy ðªn ch² cô ¤y höi xem sao.") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) end end
Ngoài ra ta còn có thể tự xây hàm con để gọi đến khi cần thiết nhưng phải đảm bảo cấu trúc của nó định nghĩa ban đầu nghĩa.
Code:function xScrID_ScriptName(Danh sách tham biến) end
Đây là cấu trúc chung của hầu hết các NPC. Ngoài hệ thống này ra nó còn cái phần sự kiện Click vào item và bắt sự kiện thao tác, cái này các bạn tham khảo script sau và tìm ra xem nó bắt kiểu gì và cái hàm con nào là check cái sự kiện này. Bạn làm được những điều trên thì bạn đã make được một NPC đơn giản rồi đó.
Code:--NPC Phùng Ng÷c Lâm --Script by Hoàng Steven --************************ x900095_g_ScriptId = 900095 x900095_g_VIP_1 = 30008202 x900095_g_VIP_2 = 30008203 x900095_g_Impact = 9385 --*****************************-- --* On Default Event *-- --*****************************-- function x900095_OnDefaultEvent(sceneId,selfId,targetId) BeginEvent(sceneId) AddText(sceneId,"Xin chào "..LuaFnGetName(sceneId,selfId)..". Ta là #GPhùng Ng÷c Lâm#W, ð£c sÑ #GThiên Long Kiªm Hi®p#W.") AddText(sceneId,"Các hÕ tìm ta có vi®c gì?") AddNumText(sceneId,x900095_g_ScriptId,"Min phí tr¸ li®u",6,5) AddNumText(sceneId,x900095_g_ScriptId,"VIP-Member",3,3) AddNumText(sceneId,x900095_g_ScriptId,"Nh§n BUFF #GKiªm Hi®p Tình Duyên#W",3,4) AddNumText(sceneId,x900095_g_ScriptId,"V« Thiên Long Kiªm Hi®p",11,0) AddNumText(sceneId,x900095_g_ScriptId,"V« VIP-Member",11,1) AddNumText(sceneId,x900095_g_ScriptId,"V« BUFF #GKiªm Hi®p Tình Duyên#W",11,2) EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId) end --*****************************-- --* On Event Request *-- --*****************************-- function x900095_OnEventRequest(sceneId,selfId,targetId,eventId) local key = GetNumText() --*****************-- if key == 0 then BeginEvent(sceneId) AddText(sceneId,"Thª gi¾i #GThiên Long Kiªm Hi®p#W v¾i nhi«u hoÕt ðµng thú v¸ nhân d¸p l giáng sinh. Các hÕ mu¯n tìm hi¬u chi tiªt hãy dÕo ch½i mµt vòng quanh các thành th¸ l¾n.") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) end --*****************-- if key == 1 then BeginEvent(sceneId) AddText(sceneId,"#GThiên Long Kiªm Hi®p#W dành t£ng các v¸ b¢ng hæu ph¥n quà #GÐi¬m t£ng#W tß½ng Ñng v¾i thë #GVIP-Member#W.") AddText(sceneId,"#GThë bÕch kim#W nh§n ðßþc #G1000 ði¬m t£ng#W.") AddText(sceneId,"#GThë hoàng kim#W nh§n ðßþc #G2000 ði¬m t£ng#W.") AddText(sceneId,"#GThë bÕch kim#W nh§n m²i tu¥n tÕi #GHoàng Steven (282,228)#W v¾i ði¬m #GUy danh giang h°#W t× #G500 - 700#W và #GThë bÕch kim#W v¾i ði¬m #GUy danh giang h°#W t× #G700 - 1000#W.") AddText(sceneId,"Ngoài ta còn nhi«u chÑc nång liên quan ðªn ði¬m #GUy danh giang h°#W. Chi tiªt các hÕ hãy ði höi anh ta xem sao.") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) end --*****************-- if key == 2 then BeginEvent(sceneId) AddText(sceneId,"Nh§n BUFF hi®u Ñng #GKiªm Hi®p Tình Duyên#W m²i ngày. Hi®u Ñng này giúp các hÕ gia tång t¤t cä thuµc tính lên #G100 ði¬m#W trong vòng #G4 gi¶#W.") AddText(sceneId,"Hi®u Ñng này ð°ng th¶i tác døng cùng các loÕi ðan dßþc khác.") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) end --*****************-- if key == 3 then BeginEvent(sceneId) AddText(sceneId,"Các hÕ có thë gì?") AddRadioItemBonus(sceneId,x900095_g_VIP_1,1) AddRadioItemBonus(sceneId,x900095_g_VIP_2,1) EndEvent(sceneId) DispatchMissionContinueInfo(sceneId,selfId,targetId,x900095_g_ScriptId,0) end --*****************-- if key == 4 then if GetMissionData(sceneId,selfId,RECIEVE_LAST_DAY_TIME)==GetDayTime() then BeginEvent(sceneId) AddText(sceneId,"Hôm nay các hÕ ðã nh§n hi®u Ñng này r°i, xin ngày mai hãy quay lÕi!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) return end if LuaFnHaveImpactOfSpecificDataIndex(sceneId,selfId,x900095_g_Impact)>0 then BeginEvent(sceneId) AddText(sceneId,"Trên ng߶i các hÕ ðã có hi®u quä này!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) return end SetMissionData(sceneId,selfId,RECIEVE_LAST_DAY_TIME,GetDayTime()) BeginEvent(sceneId) AddText(sceneId,"Các hÕ nh§n ðßþc hi®u Ñng gia tång kinh nghi®m cüa #GKiªm Hi®p Tình Duyên#W. Chúc các hÕ luy®n c¤p hi®u quä!") AddText(sceneId,"Chú ý hi®u Ñng này chï kéo dài trong vòng #G1 gi¶#W. Vì v§y sau #G1 gi¶#W các hÕ hãy quay v« ch² ta nh§n tiªp!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,x900095_g_Impact,0) end --*****************-- if key==5 then CallScriptFunction(000064,"Restore_hpmp",sceneId,selfId,targetId) RestoreStrikePoint(sceneId,selfId) RestoreRage(sceneId,selfId) BeginEvent(sceneId) AddText(sceneId,"Tr¸ li®u thành công!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) end end --*****************************-- --* On Mission Submit *-- --*****************************-- function x900095_OnMissionSubmit(sceneId,selfId,targetId,missionScriptId,selectRadioId) --*****************-- if LuaFnGetAvailableItemCount(sceneId,selfId,selectRadioId)<1 then BeginEvent(sceneId) AddText(sceneId,"Ðâu, ðâu, các hÕ làm gì có "..GetItemName(sceneId,selectRadioId).."?") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) return end --*****************-- LuaFnDelAvailableItem(sceneId,selfId,selectRadioId,1) --*****************-- if selectRadioId==x900095_g_VIP_1 then ZengDian(sceneId,selfId,targetId,1,1000) BeginEvent(sceneId) AddText(sceneId,"Các hÕ nh§n ðßþc #G1000 ði¬m t£ng#W!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) else ZengDian(sceneId,selfId,targetId,1,2000) BeginEvent(sceneId) AddText(sceneId,"Các hÕ nh§n ðßþc #G2000 ði¬m t£ng#W!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) end --*****************-- end
Như các bạn đã biết hoặc chưa biết, mấy cái item trong CommonItem.txt ví dụ như Giang hồ chỉ nam, phiếu KNB,... đều có script riêng điều khiển nó. Ngoài ra còn có phần thú cưỡi nữa. Ở đây mình sẽ tách thành 2 phần cho dễ.
Về thú cưỡi:
Ví dụ đoạn code sau
Code:--Thú cßÞi --Author: Hoàng Steven --*********************-- x910015_g_scriptId=910015 --*********************-- --*********************-- x910015_g_Rider={} --Impact cüa thú cßÞi (StandardImpact.txt) --*********************-- --*****Thú cßÞi bình th߶ng*****-- x910015_g_Rider[10141000]={Impact=4912,RecipeId=446} --Løc Hành Ðiêu (VC) x910015_g_Mount_Pos=108 --V¸ trí ô thú cßÞi trên ng߶i nhân v§t --*********************-- --**********************************-- --* On Default Event *-- --**********************************-- function x910015_OnDefaultEvent(sceneId,selfId,bagIndex) end --**********************************-- --* Is Skill Like Script *-- --**********************************-- function x910015_IsSkillLikeScript(sceneId,selfId) --*********************-- return 1 --*********************-- end --**********************************-- --* Cancel Impacts *-- --**********************************-- function x910015_CancelImpacts(sceneId,selfId) --*********************-- local nIndex=LuaFnGetItemTableIndexByIndex(sceneId,selfId,x910015_g_Mount_Pos) --Index thú cßÞi ðang trang b¸ trên ng߶i --*********************-- if not x910015_g_Rider[nIndex] then return 0 end --*********************-- if LuaFnCancelSpecificImpact(sceneId,selfId,x910015_g_Rider[nIndex].Impact)>0 then --Hüy bö trÕng thái cßÞi hi®n tÕi return 1 else return 0 end --*********************-- end --**********************************-- --* On Condition Check *-- --**********************************-- function x910015_OnConditionCheck(sceneId,selfId) --*********************-- local nIndex=LuaFnGetItemTableIndexByIndex(sceneId,selfId,x910015_g_Mount_Pos) --Index thú cßÞi ðang trang b¸ trên ng߶i --*********************-- if LuaFnIsPrescrLearned(sceneId,selfId,x910015_g_Rider[nIndex].RecipeId)<1 then --Chßa có kÜ thu§t x910015_ShowTips(sceneId,selfId,"Các hÕ chßa h÷c kÛ nång ði«u khi¬n thú cßÞi này!") --Thông báo chßa trang b¸ thú cßÞi return 0 end --*********************-- if LuaFnGetItemTableIndexByIndex(sceneId,selfId,x910015_g_Mount_Pos)~=0 then --Có trang b¸ thú cßÞi return 1 end --*********************-- x910015_ShowTips(sceneId,selfId,"Các hÕ c¥n trang b¸ thú cßÞi!") --Thông báo chßa trang b¸ thú cßÞi --*********************-- return 0 --*********************-- end --**********************************-- --* On Deplete *-- --**********************************-- function x910015_OnDeplete(sceneId,selfId) --*********************-- return 1 --*********************-- end --**********************************-- --* On Activate Once *-- --**********************************-- function x910015_OnActivateOnce(sceneId,selfId) --*********************-- local nIndex=LuaFnGetItemTableIndexByIndex(sceneId,selfId,x910015_g_Mount_Pos) --Index thú cßÞi ðang trang b¸ trên ng߶i --*********************-- if not x910015_g_Rider[nIndex] then --Chßa c§p nh§t thú cßÞi x910015_ShowTips(sceneId,selfId,"Thú cßÞi này hi®n chßa ðßþc c§p nh¤t!") return 0 end --*********************-- LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,x910015_g_Rider[nIndex].Impact,0) --*********************-- x910015_ShowTips(sceneId,selfId,"Tri®u h°i thú cßÞi thành công!") --*********************-- return 1 --*********************-- end --**********************************-- --* On Activate Each Tick *-- --**********************************-- function x910015_OnActivateEachTick(sceneId,selfId) --*********************-- return 1 --*********************-- end --**********************************-- --* Show Tips *-- --**********************************-- function x910015_ShowTips(sceneId,selfId,Tip) --*********************-- BeginEvent(sceneId) AddText(sceneId,Tip) EndEvent(sceneId) DispatchMissionTips(sceneId,selfId) --*********************-- end
Hàm DefaultEvent mình không dùng đến ở đây. Hàm IsSkillLikeScript nghĩa là nếu cái script này sử dụng một skill nào đó khai báo trong skilltemplate thì hàm trả giá trị 1. Hàm CancelImpact là hủy bỏ hiệu ứng thú cưỡi trên người. Cụ thể thì bạn phải xem cấu trúc file stdimpact mới hiểu rõ được. Mỗi khi cưỡi thú thực chất là send cho 1 cái impact quy định trong file này. Hàm ConditionalCheck là hàm kiểm tra điều kiện, đọc code bạn sẽ hiểu. Hàm Deplete mình chưa tìm hiểu. Hàm ActivateOnce nghĩa là khi thao tác click chuột phải, thực hiện xong động tác gọi thú cưỡi thì nó sẽ làm gì. Hàm ActivateEachTick chưa tìm hiểu. Còn cái hàm ShowTips là do mình tự thêm vào.
Trong các hàm trên có vài câu lệnh mới
Code:LuaFnGetItemTableIndexByIndex(sceneId,selfId,x910015_g_Mount_Pos)
Code:LuaFnCancelSpecificImpact(sceneId,selfId,x910015_g_Rider[nIndex].Impact)>0
Code:LuaFnIsPrescrLearned(sceneId,selfId,x910015_g_Rider[nIndex].RecipeId)
Code:LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,x910015_g_Rider[nIndex].Impact,0)
Ngoài ra cấu trúc ghi lên thanh nhắc nhở trên đầu như khi bạn ép ngọc có dòng thông báo góc 12 giờ là Khảm nạm thành công đó là
Code:BeginEvent(sceneId) AddText(sceneId,Tip) EndEvent(sceneId) DispatchMissionTips(sceneId,selfId)
Cái này giống thú cưỡi. Ví dụ code item Tiềm Năng Chân Đan
Code:--Ti«m nång chân ðan --Author: Hoàng Steven --********************-- x900071_g_scriptId = 900071 --********************-- x900071_g_QingQinCao=30060001 --********************-- --**********************************-- --* On Default Event *-- --**********************************-- function x900071_OnDefaultEvent(sceneId,selfId,bagIndex) --********************-- --********************-- end --**********************************-- --* Is Skill Like Script *-- --**********************************-- function x900071_IsSkillLikeScript(sceneId,selfId) --********************-- return 1 --********************-- end --**********************************-- --* Cancel Impacts *-- --**********************************-- function x900071_CancelImpacts(sceneId,selfId) --********************-- return 0 --********************-- end --**********************************-- --* On Condition Check *-- --**********************************-- function x900071_OnConditionCheck(sceneId,selfId) --********************-- if LuaFnVerifyUsedItem(sceneId,selfId)~=1 then return 0 end --********************-- if LuaFnDelAvailableItem(sceneId,selfId,x900071_g_QingQinCao,1)<1 then BeginEvent(sceneId) AddText(sceneId,"Các hÕ không có Tînh Tâm Thäo ð¬ trung hòa Ti«m Nång Chân Ðan!") EndEvent(sceneId) DispatchMissionTips(sceneId,selfId) return 0 end --********************-- return 1 --********************-- end --**********************************-- --* On Deplete *-- --**********************************-- function x900071_OnDeplete(sceneId,selfId) --********************-- if LuaFnDepletingUsedItem(sceneId,selfId)>0 then return 1 end --********************-- return 0 --********************-- end --**********************************-- --* On Activate Once *-- --**********************************-- function x900071_OnActivateOnce(sceneId,selfId) --********************-- local RemainPoint=GetPlayerRemainPoints(sceneId,selfId) RemainPoint=RemainPoint+35 SetPlayerRemainPoints(sceneId,selfId,RemainPoint) --********************-- BeginEvent(sceneId) AddText(sceneId,"Các hÕ ðã gia tång 35 ði¬m Ti«m Nång!") EndEvent(sceneId) DispatchMissionTips(sceneId,selfId) --********************-- return 1 --********************-- end --**********************************-- --* On Default Event *-- --**********************************-- function x900071_OnActivateEachTick(sceneId,selfId) --********************-- return 1 --********************-- end
Code:LuaFnVerifyUsedItem(sceneId,selfId)
Code:LuaFnDepletingUsedItem(sceneId,selfId)
Code:LuaFnDelAvailableItem(sceneId,selfId,x900071_g_QingQinCao,1)
Code:GetPlayerRemainPoints(sceneId,selfId) SetPlayerRemainPoints(sceneId,selfId,RemainPoint)
Hàm bên dưới là set giá trị điểm tiềm năng mới. RemainPoint là một biến mang giá trị số nhé.
Như đã nói có một cái code khác mình chỉ cần hàm DefaultEvent cũng làm đc script một item. Ví dụ code phiếu điểm tặng.
Code:--Phiªu Ði¬m t£ng 100 --******************-- x900083_g_scriptId = 900083 x900083_g_DT100 = 30008204 --**************************-- --**********************************-- --* On Default Event *-- --**********************************-- function x900083_OnDefaultEvent(sceneId,selfId,targetId) --******************-- LuaFnDelAvailableItem(sceneId,selfId,x900083_g_DT100,1) --******************-- x900083_NotifyFailTips(sceneId,selfId,"Các hÕ nh§n ðßþc 100 ði¬m t£ng") --******************-- ZengDian(sceneId,selfId,targetId,1,100) --******************-- end --**********************************-- --* Notify Fail Tips *-- --**********************************-- function x900083_NotifyFailTips(sceneId,selfId,Tip) BeginEvent(sceneId) AddText(sceneId,Tip) EndEvent(sceneId) DispatchMissionTips(sceneId,selfId) end
Code:LuaFnDelAvailableItem(sceneId,selfId,x900083_g_DT100,1)
Code:ZengDian(sceneId,selfId,targetId,1,100)
Lần sửa cuối bởi Sói Đẹp Trai, ngày 11-01-15 lúc 03:20 AM. Lý do: Updating...
Khách viếng thăm hãy cùng Sói Đẹp Trai xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
The Following 4 Users Say Thank You to Sói Đẹp Trai For This Useful Post:
dinhdtd (08-05-22), shinno (19-12-14), skythienlong (17-12-14), vuhuy99v (27-12-15)
-
11-01-15, 03:45 AM #2
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,063 Times in 1,403 Posts
Ðề: Lua in TLBB
Do bài trên quá dài mình sẽ viết tiếp xuống dưới này
3. Script Quái/Boss/NPC trong chiến đấu (gọi chung là Monster)
Các bạn thấy mấy con Boss khi chiến đấu nó phát ra mấy cái skill hay talk một câu nào đó hay bla bla, đó chính là do script điều khiển nó. Ví dụ bằng đoạn code con NPC mình code, nó vừa là NPC vừa có khả năng đánh lộn với Quái khác.
Code:--T× Hàng T¸nh Trai --Sß Phi Huy«n --Author: Hoàng Steven --******************-- x910200_g_ScriptId=910200 --******************-- x910200_g_NPC_Name="Sß Phi Huy«n" --Tên cüa NPC --******************-- x910200_g_Skill_Index_1=1348 --KÛ nång Kiªm Änh Ph§t Quang x910200_g_Skill_1_CD=10000 --Th¶i gian lãnh khß¾c Kiªm Änh Ph§t Quang x910200_g_Skill_Index_2=1349 --KÛ nång T× Hàng Ph± е x910200_g_Skill_2_CD=5000 --Th¶i gian lãnh khß¾c kÛ nång T× Hàng Ph± е x910200_g_Skill_Index_3=1350 --KÛ nång VÕn Ph§t Quy Nguyên x910200_g_Skill_3_CD=10000 --Th¶i gian lãnh khß¾c kÛ nång VÕn Ph§t Quy Nguyên x910200_g_Skill_Index_4=1351 --KÛ nång Sß½ng Bång Kiªm Pháp x910200_g_Skill_4_CD=15000 --Th¶i gian lãnh khß¾c kÛ nång Sß½ng Bång Kiªm Pháp --******************-- x910200_g_Skill_1_Timer=1 --Th¶i gian kÛ nång Kiªm Änh Ph§t Quang x910200_g_Skill_2_Timer=2 --Th¶i gian kÛ nång T× Hàng Ph± е x910200_g_Skill_3_Timer=3 --Th¶i gian kÛ nång VÕn Ph§t Quy Nguyên x910200_g_Skill_4_Timer=4 --Th¶i gian kÛ nång Sß½ng Bång Kiªm Pháp --******************-- x910200_g_Armor_Buff=12736 --Buff Mµng Ði®p --******************-- x910200_g_Combat_Flag=5 --TrÕng thái chiªn ð¤u --******************-- --**********************************-- --* On Default Event *-- --**********************************-- function x910200_OnDefaultEvent(sceneId,selfId,targetId) BeginEvent(sceneId) AddText(sceneId,"Ta thay m£t #GT× Hàng T¸nh Trai#W ðÑng lên cùng các nhân sÛ võ lâm #GTrung Nguyên#W ðánh ðu±i #GÂm Quý Phái#W, thanh tr× kiªp nÕn này cho bá tính!") EndEvent(sceneId) DispatchEventList(sceneId,selfId,targetId) end --**********************************-- --* On Init *-- --**********************************-- function x910200_OnInit(sceneId,selfId) --******************-- x910200_ResetMyAI(sceneId,selfId) --Set lÕi các thuµc tính cho NPC --******************-- end --**********************************-- --* On Heart Beat *-- --**********************************-- function x910200_OnHeartBeat(sceneId,selfId,nTick) --Hàm này s¨ check liên tøc m²i mili giây khi nào NPC còn s¯ng --******************-- if LuaFnIsCharacterLiving(sceneId,selfId)~=1 then --Nªu NPC ðã chªt thì ng×ng hoÕt ðµng cüa Script return end --******************-- if MonsterAI_GetIntParamByIndex(sceneId,selfId,x910200_g_Combat_Flag)==0 then --Hªt trÕng thái chiªn ð¤u return end --******************-- x910200_UseMySkill(sceneId,selfId,nTick) --SØ døng kÛ nång --******************-- end --**********************************-- --* On Enter Combat *-- --**********************************-- function x910200_OnEnterCombat(sceneId,selfId,enmeyId) --******************-- x910200_ResetMyAI(sceneId,selfId) --Set lÕi các thuµc tính cho NPC MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Combat_Flag,1) --C§p nh§t trÕng thái chiªn ð¤u --******************-- end --**********************************-- --* On Leave Combat *-- --**********************************-- function x910200_OnLeaveCombat(sceneId,selfId) --******************-- x910200_ResetMyAI(sceneId,selfId) --Set lÕi các thuµc tính cho NPC --******************-- end --**********************************-- --* On Kill Character *-- --**********************************-- function x910200_OnKillCharacter(sceneId,selfId,targetId) --******************-- --******************-- end --**********************************-- --* On Die *-- --**********************************-- function x910200_OnDie(sceneId,selfId,killerId) --******************-- LuaFnSetCopySceneData_Param(sceneId,8,7) --C§p nh§t thao tác trên phø bän --******************-- end --**********************************-- --* Reset My AI *-- --**********************************-- function x910200_ResetMyAI(sceneId,selfId) --******************-- MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_1_Timer,x910200_g_Skill_1_CD) --Th¶i gian kÛ nång 1 MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_2_Timer,x910200_g_Skill_2_CD) --Th¶i gian kÛ nång 2 MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_3_Timer,x910200_g_Skill_3_CD) --Th¶i gian kÛ nång 3 MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_4_Timer,x910200_g_Skill_4_CD) --Th¶i gian kÛ nång 4 MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Combat_Flag,0) --Set lÕi trÕng thái chiªn ð¤u --******************-- LuaFnSendSpecificImpactToUnit(sceneId,selfId,selfId,selfId,x910200_g_Armor_Buff,0) --Buff Mµng Ði®p --******************-- end --**********************************-- --* Use My Skill *-- --**********************************-- function x910200_UseMySkill(sceneId,selfId,nTick) --******************-- local Time_Skill_1=MonsterAI_GetIntParamByIndex(sceneId,selfId,x910200_g_Skill_1_Timer) --L¤y th¶i gian lãnh khß¾c kÛ nång 1 cüa NPC local Time_Skill_2=MonsterAI_GetIntParamByIndex(sceneId,selfId,x910200_g_Skill_2_Timer) --L¤y th¶i gian lãnh khß¾c kÛ nång 2 cüa NPC local Time_Skill_3=MonsterAI_GetIntParamByIndex(sceneId,selfId,x910200_g_Skill_3_Timer) --L¤y th¶i gian lãnh khß¾c kÛ nång 3 cüa NPC local Time_Skill_4=MonsterAI_GetIntParamByIndex(sceneId,selfId,x910200_g_Skill_4_Timer) --L¤y th¶i gian lãnh khß¾c kÛ nång 4 cüa NPC MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_1_Timer,Time_Skill_1-nTick) --C§p nh§t th¶i gian lãnh khß¾c cüa kÛ nång 1 MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_2_Timer,Time_Skill_2-nTick) --C§p nh§t th¶i gian lãnh khß¾c cüa kÛ nång 2 MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_3_Timer,Time_Skill_3-nTick) --C§p nh§t th¶i gian lãnh khß¾c cüa kÛ nång 3 MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_4_Timer,Time_Skill_4-nTick) --C§p nh§t th¶i gian lãnh khß¾c cüa kÛ nång 4 --******************-- if Time_Skill_1<=0 then --Ðã ðªn gi¶ dùng kÛ nång local x,y=GetWorldPos(sceneId,selfId) --L¤y t÷a ðµ cüa NPC LuaFnUnitUseSkill(sceneId,selfId,x910200_g_Skill_Index_1,x,y,0,1) --NPC sØ døng kÛ nång MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_1_Timer,x910200_g_Skill_1_CD)--C§p nh§t lÕi th¶i gian lãnh khß¾c cüa kÛ nång end --******************-- if Time_Skill_2<=0 then --Ðã ðªn gi¶ dùng kÛ nång local x,y=GetWorldPos(sceneId,selfId) --L¤y t÷a ðµ cüa NPC LuaFnUnitUseSkill(sceneId,selfId,x910200_g_Skill_Index_2,x,y,0,1) --NPC sØ døng kÛ nång MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_2_Timer,x910200_g_Skill_2_CD)--C§p nh§t lÕi th¶i gian lãnh khß¾c cüa kÛ nång end --******************-- if Time_Skill_3<=0 then --Ðã ðªn gi¶ dùng kÛ nång local x,y=GetWorldPos(sceneId,selfId) --L¤y t÷a ðµ cüa NPC LuaFnUnitUseSkill(sceneId,selfId,x910200_g_Skill_Index_3,x,y,0,1) --NPC sØ døng kÛ nång MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_3_Timer,x910200_g_Skill_3_CD)--C§p nh§t lÕi th¶i gian lãnh khß¾c cüa kÛ nång end --******************-- if Time_Skill_4<=0 then --Ðã ðªn gi¶ dùng kÛ nång local Victim=x910200_GetMyVictim(sceneId) local x,y=GetWorldPos(sceneId,selfId) --L¤y t÷a ðµ cüa NPC LuaFnUnitUseSkill(sceneId,selfId,x910200_g_Skill_Index_4,Victim,x,y,0,1) --NPC sØ døng kÛ nång MonsterAI_SetIntParamByIndex(sceneId,selfId,x910200_g_Skill_4_Timer,x910200_g_Skill_4_CD)--C§p nh§t lÕi th¶i gian lãnh khß¾c cüa kÛ nång end --******************-- end --**********************************-- --* Get My Victim *-- --**********************************-- function x910200_GetMyVictim(sceneId) --******************-- local nEnemyList={} --******************-- local nEnemy=0 local nMonsterNum=GetMonsterCount(sceneId) for i=0,nMonsterNum-1 do local MonsterId=GetMonsterObjID(sceneId,i) local x,y=GetWorldPos(sceneId,MonsterId) if LuaFnIsCharacterLiving(sceneId,MonsterId)==1 then nEnemy=nEnemy+1 nEnemyList[nEnemy]=MonsterId break end end --******************-- return nEnemyList[random(nEnemy)] --******************-- end --**********************************-- --* Global News *-- --**********************************-- function x910200_GlobalNews(sceneId,Tips) --******************-- local nHumanCount = LuaFnGetCopyScene_HumanCount(sceneId) for i=0,nHumanCount-1 do local nHumanId = LuaFnGetCopyScene_HumanObjId(sceneId,i) if LuaFnIsObjValid(sceneId,nHumanId)==1 and LuaFnIsCanDoScriptLogic(sceneId,nHumanId)==1 and LuaFnIsCharacterLiving(sceneId,nHumanId)==1 then BeginEvent(sceneId) AddText(sceneId,Tips) EndEvent(sceneId) DispatchMissionTips(sceneId,nHumanId) end end --******************-- end
Ta để ý hàm OnInit, hàm này chính là hàm thao tác khi Monster vừa đc gọi ra, ví dụ nói câu gì đó khai chiến chẳng hạn.
Hàm OnHeartBeat là một hàm quan trọng nhất, nó tồn tại cùng Monster và nó được tính thời gian, cứ mỗi 1 mili giây thì hàm này sẽ đc gọi đến. Dễ hiểu vì sao con boss nó có thời gian để thao tác hay đến một ngưỡng nào đó nó sẽ làm gì chính là cái hàm này nó theo dõi. 1 ms là rất ngắn nên bạn khó có thể biết được và tưởng nó chạy liên tục...
Hàm OnEnterCombat chính là hàm bắt sự kiện khi Monster bắt đầu vào chiến đấu. Hàm này chỉ gọi 1 lần khi Monster chuyển từ trạng thái đứng im ko làm gì sang trạng thái đánh nhau khi gặp mục tiêu.
Hàm OnLeaveCombat là một hàm thực hiện thao tác khi Monster rời combat ví dụ đánh chết hết các mục tiêu hoặc ko có mục tiêu xung quanh nó sẽ hồi đủ máu và cancel tất cả impact...
Hàm OnKillCharacter là hàm thao tác mỗi khi một nạn nhân (có thể là người chơi, pet hoặc bất kỳ monster nào khác) bị nó giết.
Hàm OnDie là hàm thao tác khi Monster này bị tiêu diệt ví dụ như add drop hay talk 1 câu lên kênh thế giới.
Ngoài ra những hàm khác là do mình thêm vào phục vụ quá trình code.
Trong script Monster cái quan trọng nhất chính là hệ thống biến cục bộ dùng cho Monster. Biến này chỉ có tác dụng cho Monster mà nó gắn liền ngoài ra ko tác dụng với Monster hay sự kiện khác.
Biến này đánh số từ 1..x trong đó x là số mình chưa tìm hiểu nhưng mình dùng max cũng chỉ x=21 chứ thật ra nó còn hơn nữa.
Để lấy giá trị biến cục bộ bất kỳ của Monster kiểu nguyên, ta dùng cấu trúc
Code:local y=MonsterAI_GetIntParamByIndex(sceneId,selfId,x)
Và muốn set giá trị kiểu nguyên ta dùng cấu trúc
Code:MonsterAI_SetIntParamByIndex(sceneId,selfId,x,gt)
Ngoài ra còn có set giá trị kiểu chuối (string) hay logic (bool), số thực (float) bạn thay thế nó vào chữ Int, dùng tùy hoàn cảnh. Nhưng đa số dùng Int
Ngoài ra còn vài câu lệnh phục như sau
Code:local x,y=GetWorldPos(sceneId,selfId) --Lấy tọa độ của người chơi theo không gian 2 chiều trả giá trị cho biến x,y GetMonsterCount(sceneId) --Trả về tổng số Monster trong map GetMonsterObjID(sceneId) --Trả về ID của monster trong MonsterAttrTable.txt, giải thích đơn giản là mỗi khi Monster đc gọi ra nó sẽ đc đánh 1 số thứ tự nào đó nhưng ko phải ID thật của nó. LuaFnIsCharacterLiving(sceneId,MonsterId) --Kiểm tra monster với ID MonsterId có còn sống không (1~có,0~không) LuaFnGetCopyScene_HumanCount(sceneId) --Đếm số người chơi trong map LuaFnIsObjValid(sceneId,nHumanId),LuaFnIsCanDoScriptLogic(sceneId,nHumanId) --Mục đích kiểm tra người chơi có thể thao tác (ko bị khóa bởi hệ thống hay lỗi nội bộ,...)
Code:--Âm Quý Phái --Liên Nhu --Author: Hoàng Steven --******************-- x910206_g_ScriptId=910206 --******************-- x910206_g_Boss_Name="Liên Nhu" --Tên cüa BOSS --******************-- x910206_g_Skill_Index_1=1347 --KÛ nång Huy«n Âm Träm x910206_g_Skill_1_CD=40000 --Th¶i gian lãnh khß¾c kÛ nång Huy«n Âm Träm --******************-- x910206_g_Skill_1_Timer=1 --Th¶i gian kÛ nång Huy«n Âm Träm --******************-- x910206_g_Monster_Dialogue= { --L¶i nói cüa Boss [1]=x910206_g_Boss_Name.." ðã xu¤t hi®n!", [2]="Các v¸ tÖ tÖ, có ng߶i cä gan dám khiêu chiªn Âm Quý Phái ta kìa!", [3]="Ðã giªt chªt "..x910206_g_Boss_Name..": 1/1", } --******************-- x910206_g_Combat_Flag=2 --TrÕng thái chiªn ð¤u --******************-- --**********************************-- --* On Init *-- --**********************************-- function x910206_OnInit(sceneId,selfId) --******************-- MonsterTalk(sceneId,selfId,"",x910206_g_Monster_Dialogue[2]) --Câu nói khai chiªn cüa Boss x910206_GlobalNews(sceneId,x910206_g_Monster_Dialogue[1]) --Thông báo Boss ðã vào chiªn ð¤u cho toàn th¬ ng߶i ch½i x910206_ResetMyAI(sceneId,selfId) --Set lÕi các thuµc tính cho Boss --******************-- end --**********************************-- --* On Heart Beat *-- --**********************************-- function x910206_OnHeartBeat(sceneId,selfId,nTick) --Hàm này s¨ check liên tøc m²i mili giây khi nào Boss còn s¯ng --******************-- if LuaFnIsCharacterLiving(sceneId,selfId)~=1 then --Nªu Boss ðã chªt thì ng×ng hoÕt ðµng cüa Script return end --******************-- if MonsterAI_GetIntParamByIndex(sceneId,selfId,x910206_g_Combat_Flag)==0 then --Hªt trÕng thái chiªn ð¤u return end --******************-- x910206_UseMySkill(sceneId,selfId,nTick) --SØ døng kÛ nång --******************-- end --**********************************-- --* On Enter Combat *-- --**********************************-- function x910206_OnEnterCombat(sceneId,selfId,enmeyId) --******************-- x910206_ResetMyAI(sceneId,selfId) --Set lÕi các thuµc tính cho Boss --******************-- MonsterAI_SetIntParamByIndex(sceneId,selfId,x910206_g_Combat_Flag,1) --Set lÕi trÕng thái chiªn ð¤u --******************-- end --**********************************-- --* On Leave Combat *-- --**********************************-- function x910206_OnLeaveCombat(sceneId,selfId) --******************-- x910206_ResetMyAI(sceneId,selfId) --Set lÕi các thuµc tính cho Boss --******************-- end --**********************************-- --* On Kill Character *-- --**********************************-- function x910206_OnKillCharacter(sceneId,selfId,targetId) --******************-- local nHumanCount = LuaFnGetCopyScene_HumanCount(sceneId) for i=0,nHumanCount-1 do local nHumanId = LuaFnGetCopyScene_HumanObjId(sceneId,i) if nHumanId==targetId then local PlayerName=GetName(sceneId,targetId) MonsterTalk(sceneId,selfId,"","Сc tµi v¾i Âm Quý Phái thì kªt cøc s¨ b¸ phanh thây thôi, "..GetName(sceneId,targetId).."!") --Boss chª diu ng߶i ch½i b¸ giªt end end --******************-- end --**********************************-- --* On Die *-- --**********************************-- function x910206_OnDie(sceneId,selfId,killerId) --******************-- x910206_GlobalNews(sceneId,x910206_g_Monster_Dialogue[3]) --Ðã ðánh bÕi Boss --******************-- local nDied=LuaFnGetCopySceneData_Param(sceneId,15) --L¤y s¯ cao thü ðã b¸ ðánh bÕi trong tÑ ðÕi Nguyên lão cao thü LuaFnSetCopySceneData_Param(sceneId,15,nDied+1) if nDied+1==4 then LuaFnSetCopySceneData_Param(sceneId,8,2) --C§p nh§t thao tác trên phø bän end --******************-- end --**********************************-- --* Reset My AI *-- --**********************************-- function x910206_ResetMyAI(sceneId,selfId) --******************-- MonsterAI_SetIntParamByIndex(sceneId,selfId,x910206_g_Skill_1_Timer,x910206_g_Skill_1_CD) --Th¶i gian kÛ nång 1 MonsterAI_SetIntParamByIndex(sceneId,selfId,x910206_g_Combat_Flag,0) --Set lÕi trÕng thái chiªn ð¤u --******************-- end --**********************************-- --* Use My Skill *-- --**********************************-- function x910206_UseMySkill(sceneId,selfId,nTick) --******************-- local Time_Skill_1=MonsterAI_GetIntParamByIndex(sceneId,selfId,x910206_g_Skill_1_Timer) --L¤y th¶i gian lãnh khß¾c kÛ nång 1 cüa Boss MonsterAI_SetIntParamByIndex(sceneId,selfId,x910206_g_Skill_1_Timer,Time_Skill_1-nTick) --C§p nh§t th¶i gian lãnh khß¾c cüa kÛ nång 1 --******************-- if Time_Skill_1<=0 then --Ðã ðªn gi¶ dùng kÛ nång local x,y=GetWorldPos(sceneId,selfId) --L¤y t÷a ðµ cüa Boss LuaFnUnitUseSkill(sceneId,selfId,x910206_g_Skill_Index_1,x,y,0,1) --Boss sØ døng kÛ nång MonsterAI_SetIntParamByIndex(sceneId,selfId,x910206_g_Skill_1_Timer,x910206_g_Skill_1_CD)--C§p nh§t lÕi th¶i gian lãnh khß¾c cüa kÛ nång end --******************-- end --**********************************-- --* Global News *-- --**********************************-- function x910206_GlobalNews(sceneId,Tips) --******************-- local nHumanCount = LuaFnGetCopyScene_HumanCount(sceneId) for i=0,nHumanCount-1 do local nHumanId = LuaFnGetCopyScene_HumanObjId(sceneId,i) if LuaFnIsObjValid(sceneId,nHumanId)==1 and LuaFnIsCanDoScriptLogic(sceneId,nHumanId)==1 and LuaFnIsCharacterLiving(sceneId,nHumanId)==1 then BeginEvent(sceneId) AddText(sceneId,Tips) EndEvent(sceneId) DispatchMissionTips(sceneId,nHumanId) end end --******************-- end
Phần này chính là cái quan trọng nhất đây. Nói là script điều khiển thôi vì 1 event nó có thể gồm tất cả những thứ mà mình đã hướng dấn các bạn làm trong suốt topic này. Cái phần này sẽ dễ hiểu khi bạn hiểu cái script Monster
Ví dụ script event Sát tinh:
Code:--Phø bän Th§p Nh¸ Sát Tinh --Author: Hoàng Steven --******************-- x910112_g_ScriptId=910112 --******************-- x910112_g_CopySceneType=FUBEN_SHENGSILEITAI --Các tham s¯ cüa phø bän. Tham khäo "ScriptGlobal.lua" --******************-- x910112_g_TickTime=1 --Th¶i gian hi®n tÕi cüa phø bän x910112_g_NoUserTime=5000 --Th¶i gian lßu lÕi phø bän khi không còn ai trong phø bän (нn v¸ Mili Giây) x910112_g_Fuben_X=14 --Pos X ði¬m h°i sinh phø bän x910112_g_Fuben_Y=34 --Pos Y ði¬m h°i sinh phø bän x910112_g_Time_Leave=15000 --Th¶i gian r¶i phø bän khi hoàn thành nhi®m vø x910112_g_FuBenTime=3600000 --Th¶i gian phø bän (нn v¸ Mili Giây) x910112_g_Limit_Member=1 --S¯ lßþng thành viên t¯i thi¬u trong ðµi ngû x910112_g_Day_Time=2 --S¯ lßþt tham gia trong ngày x910112_g_Fuben_Map="shengsileitai_monster.ini" --Load file Monster x910112_g_Fuben_Scene="shengsileitai.nav" --Load file Scene x910112_g_Fuben_Area="shengsileitai_area.ini" --Load file Area --******************-- x910112_g_Need_Level=80 --Level t¯i thi¬u tham gia phø bän --******************-- x910112_g_NPC_Boss_List= --Danh sách các NPC Boss { [1] = { Index=13554, Name="Công Tôn Thánh", Title="#gf00ff0Thiên Nhàn Tinh" }, [2] = { Index=13557, Name="Hô Diên Trác", Title="#gf00ff0Thiên Uy Tinh" }, [3] = { Index=13560, Name="Hoa Dung", Title="#gf00ff0Thiên Anh Tinh" }, [4] = { Index=13558, Name="Lâm Sung", Title="#gf00ff0Thiên Hùng Tinh" }, [5] = { Index=13556, Name="L² Chí Sinh", Title="#gf00ff0Thiên Cô Tinh" }, [6] = { Index=13553, Name="Lß Quân D§t", Title="#gf00ff0Thiên Cß½ng Tinh" }, [7] = { Index=13551, Name="Lý Khôi", Title="#gf00ff0Thiên Sát Tinh" }, [8] = { Index=13552, Name="Ngô Vînh", Title="#gf00ff0Thiên C½ Tinh" }, [9] = { Index=13555, Name="Quan Th¸nh", Title="#gf00ff0Thiên Dûng Tinh" }, [10] = { Index=13559, Name="T¥n Minh", Title="#gf00ff0Thiên Mãnh Tinh" }, [11] = { Index=13550, Name="T¯ng Khß½ng", Title="#gf00ff0Thiên Khôi Tinh" }, [12] = { Index=13561, Name="Võ Tøng", Title="#gf00ff0Thiên Thß½ng Tinh" }, } --******************-- x910112_g_Boss_List= --Danh sách các Boss { [1] = { Index=13713, Name="Công Tôn Thánh", Title="#gf00ff0Thiên Nhàn Tinh", AIScript=0, ScriptID=910102 }, [2] = { Index=13497, Name="Hô Diên Trác", Title="#gf00ff0Thiên Uy Tinh", AIScript=0, ScriptID=910108 }, [3] = { Index=13524, Name="Hoa Dung", Title="#gf00ff0Thiên Anh Tinh", AIScript=0, ScriptID=910101 }, [4] = { Index=13506, Name="Lâm Sung", Title="#gf00ff0Thiên Hùng Tinh", AIScript=0, ScriptID=910109 }, [5] = { Index=13488, Name="L² Chí Sinh", Title="#gf00ff0Thiên Cô Tinh", AIScript=0, ScriptID=910104 }, [6] = { Index=13461, Name="Lß Quân D§t", Title="#gf00ff0Thiên Cß½ng Tinh", AIScript=0, ScriptID=910105 }, [7] = { Index=13443, Name="Lý Khôi", Title="#gf00ff0Thiên Sát Tinh", AIScript=0, ScriptID=910103 }, [8] = { Index=13452, Name="Ngô Vînh", Title="#gf00ff0Thiên C½ Tinh", AIScript=0, ScriptID=910100 }, [9] = { Index=13479, Name="Quan Th¸nh", Title="#gf00ff0Thiên Dûng Tinh", AIScript=0, ScriptID=910106 }, [10] = { Index=13515, Name="T¥n Minh", Title="#gf00ff0Thiên Mãnh Tinh", AIScript=0, ScriptID=910110 }, [11] = { Index=13434, Name="T¯ng Khß½ng", Title="#gf00ff0Thiên Khôi Tinh", AIScript=0, ScriptID=910107 }, [12] = { Index=13533, Name="Võ Tøng", Title="#gf00ff0Thiên Thß½ng Tinh", AIScript=0, ScriptID=910111 }, } --******************-- x910112_g_NPC_Boss_Pos= --T÷a ðµ trong phø bän cüa 5 NPC Boss { [1] = { Pos_X=45.0, Pos_Y=26.0 }, [2] = { Pos_X=45.0, Pos_Y=29.5 }, [3] = { Pos_X=45.0, Pos_Y=33.0 }, [4] = { Pos_X=45.0, Pos_Y=36.5 }, [5] = { Pos_X=45.0, Pos_Y=40.0 }, } --******************-- x910112_g_Number_Per_Choose=5 --S¯ lßþng Boss ðßþc ch÷n vào chiªn ð¤u --******************-- x910112_g_Script_NPC_Talk=910114 --Script cüa NPC Boss --******************-- x910112_g_Card_Index=30010098 --ID Sát Tinh D¸ Dung Ðan --******************-- x910112_g_Boss_1=8 --Boss s¯ 1 x910112_g_Boss_2=9 --Boss s¯ 2 x910112_g_Boss_3=10 --Boss s¯ 3 x910112_g_Boss_4=11 --Boss s¯ 4 x910112_g_Boss_5=12 --Boss s¯ 5 x910112_g_Next_Step=13 --Thao tác chuy¬n ð±i khi Boss chªt x910112_g_Fuben_Level=14 --C¤p ðµ Boss trong phø bän x910112_g_Fuben_Timer=15 --Biªn c§p nh§t giá tr¸ th¶i gian cüa phø bän x910112_g_Next_Time_Call=16 --Th¶i gian ra Boss còn lÕi x910112_g_Fuben_On_Time=17 --Th¶i gian phø bän (Tính t× lúc b¡t ð¥u vào+th¶i gian lúc vào cänh) x910112_g_Info_Step=18 --L¥n thông báo x910112_g_Boss_Step=19 --L¥n thông báo boss tiªn vào chiªn ð¤u x910112_g_Mission_Completed=20 --Nhi®m vø ðã hoàn thành x910112_g_Exit_Time_Fuben=21 --Th¶i gian kªt thúc phø bän khi th¡ng x910112_g_Is_On_Combat=22 --Boss ðang trong trÕng thái chiªn ð¤u --******************-- x910112_g_Monk={ Index=13547, Name="Khô Vinh ÐÕi Sß", Title="#GTh§p nh¸ Sát Tinh", Pos_X=11, Pos_Y=34, ScriptID=910114 }--Khô Vinh ÐÕi Sß --******************-- x910112_g_First_Battle_Time=60000 --Th¶i gian chu¦n b¸ chiªn ð¤u l¥n ð¥u tiên (нn v¸ Mili Giây) x910112_g_Creat_Boss_Timer=300000 --Th¶i gian cách nhau m²i l¥n ra Boss (нn v¸ Mili Giây) --******************-- x910112_g_Fight_Pos_X=31 --T÷a ðµ X cüa Boss khi chiªn ð¤u x910112_g_Fight_Pos_Y=33 --T÷a ðµ Y cüa Boss khi chiªn ð¤u --******************-- x910112_g_Impact=18 --Impact NPC Boss b¸ thay thª b·i Boss --******************-- x910112_g_Notice= { [1]="Phø bän hi®n tÕi s¨ ðóng sau 1 gi¶ næa!", --Thông báo khi m¾i vào phø bän [2]="Phø bän hi®n tÕi s¨ ðóng sau 30 phút næa!", --Thông báo khi còn 30 phút [3]="Phø bän hi®n tÕi s¨ ðóng sau 15 phút næa!", --Thông báo khi còn 15 phút [4]="Phø bän hi®n tÕi s¨ ðóng sau 5 phút næa!", --Thông báo khi còn 5 phút [5]="Phø bän hi®n tÕi s¨ ðóng sau 1 phút næa!", --Thông báo khi còn 1 phút [6]="Phø bän hi®n tÕi s¨ ðóng sau 30 giây næa!", --Thông báo khi còn 30 giây [7]="Phø bän hi®n tÕi s¨ ðóng sau 15 giây næa!", --Thông báo khi còn 15 giây [8]="Phø bän hi®n tÕi s¨ ðóng sau 5 giây næa!", --Thông báo khi còn 5 giây [9]="Nhi®m vø th¤t bÕi. Các hÕ s¨ tñ r¶i khöi ðây!", --Thông báo khi hªt phø bän [10]="Sát Tinh tiªp theo s¨ tiªn vào sau 1 phút!", --Thông báo sát tinh tiªp theo tiªn vào sau 1 phút [11]="Sát Tinh tiªp theo s¨ tiªn vào sau 30 giây!", --Thông báo sát tinh tiªp theo tiªn vào sau 30 giây [12]="Sát Tinh tiªp theo s¨ tiªn vào sau 15 giây!", --Thông báo sát tinh tiªp theo tiªn vào sau 15 giây [13]="Sát Tinh tiªp theo s¨ tiªn vào sau 5 giây!", --Thông báo sát tinh tiªp theo tiªn vào sau 5 giây [14]="Nhi®m vø hoàn thành. Các hÕ s¨ r¶i khöi ðây sau 15 giây!", --Thông báo hoàn thành nhi®m vø } --******************-- x910112_g_Back_Scene_Index=2 --ID cänh quay tr· lÕi x910112_g_Back_Pos_X=254 --Pos X cänh quay tr· lÕi x910112_g_Back_Pos_Y=175 --Pos Y cänh quay tr· lÕi --******************-- x910112_g_Information= --Thông tin các ðoÕn hµi thoÕi { [1]="Mu¯n khiêu chiªn #GTh§p nh¸ Sát Tinh#W, các hÕ phäi ðÕt c¤p #G"..x910112_g_Need_Level.." tr· lên#W, m²i ngày có t¯i ða #G"..x910112_g_Day_Time.." lßþt#W. Nªu ðã tham gia quá #G"..x910112_g_Day_Time.." lßþt#W r°i, có th¬ dùng #GSát Tinh D¸ Dung Ðan#W có bán trong ti®m #GNguyên bäo#W ð±i l¤y mµt c½ hµi næa.", [2]="Công Tôn Thánh", [3]="Hô Diên Trác", [4]="Hoa Dung", [5]="Lâm Sung", [6]="L² Chí Sinh", [7]="Lß Quân D§t", [8]="Lý Khôi", [9]="Ngô Vînh", [10]="Quan Th¸nh", [11]="T¥n Minh", [12]="T¯ng Khß½ng", [13]="Võ Tøng", [14]="#GCông Tôn Thánh#W ngoÕi hi®u #GThiên Nhàn Tinh#W.#r#GУc ði¬m:#W SØ døng bùa chú gây hÕi cho ð¯i thü.#r#GKÛ nång:#W #YPhân Thân Phù#W, #YPhong Huy®t Phù#W, #Yиnh Thân Phù#W, #YHôn Thøy Phù#W.", [15]="#GHô Diên Trác#W ngoÕi hi®u #GThiên Uy Tinh#W.#r#GУc ði¬m:#W KÛ nång qu¥n th¬ #GHuy«n Công#W lên các ð¯i thü, sþ #Gеc Công#W.#r#GKÛ nång:#W #YPhá Huy«n#W, #YLôi Ðình VÕn Quân#W.", [16]="#GHoa Dung#W ngoÕi hi®u #GThiên Anh Tinh#W.#r#GУc ði¬m:#W SØ døng cÕm bçy t¤n công ð¯i thü.#r#GKÛ nång:#W #Yиa Sát Tr§n#W, #YNhân Vong Tr§n#W, #YThiên Cang Tr§n#W, #YC߶ng Hóa Tr§n#W.", [17]="#GLâm Sung#W ngoÕi hi®u #GThiên Hùng Tinh#W.#r#GУc ði¬m:#W KÛ nång qu¥n th¬ #GBång Công#W lên các ð¯i thü, sþ #GHöa Công#W.#r#GKÛ nång:#W #YPhá Bång#W, #YHàn Bång Chân Khí#W.", [18]="#GL² Chí Sinh#W ngoÕi hi®u #GThiên Cô Tinh#W.#r#GУc ði¬m:#W Có th¬ min d¸ch m÷i sát thß½ng trong th¶i gian ng¡n, qu¥n th¬ công kích #GNgoÕi Công#W.#r#GKÛ nång:#W #YCô Phß½ng Tñ Thß·ng#W, #YCu°ng Phong San#W.", [19]="#GLß Quân D§t#W ngoÕi hi®u #GThiên Cß½ng Tinh#W.#r#GУc ði¬m:#W Có th¬ giäm sát thß½ng lên bän thân, phän ðòn sát thß½ng nhßng s¨ suy yªu sau ðó.#r#GKÛ nång:#W #YThiên Cang Hoàng Khí#W, #YThiên Cang Bá Khí#W, #YThiên Nhân Ngû Suy#W.", [20]="#GLý Khôi#W ngoÕi hi®u #GThiên Sát Tinh#W.#r#GУc ði¬m:#W Phóng thích sát khí #GÔn D¸ch#W, qu¥n th¬ công kích #GNgoÕi Công#W.#r#GKÛ nång:#W #YSát Khí Ôn D¸ch#W, #YSinh Môn#W.", [21]="#GNgô Vînh#W ngoÕi hi®u #GThiên C½ Tinh#W.#r#GУc ði¬m:#W G÷i #Gphøc binh#W h² trþ, min d¸ch vô ð¸ch v¾i phøc binh màu tß½ng Ñng, m¤t máu và hªt min d¸ch sau khi phøc binh ðúng loÕi chªt.#r#GKÛ nång:#W #YTri®u t§p Phøc Binh#W.", [22]="#GQuan Th¸nh#W ngoÕi hi®u #GThiên Dûng Tinh#W.#r#GУc ði¬m:#W KÛ nång qu¥n th¬ #GHuy«n Công#W gây thß½ng t±n l¾n.#r#GKÛ nång:#W #YDi®t Thª Ðao Tr§n#W.", [23]="#GT¥n Minh#W ngoÕi hi®u #GThiên Mãnh Tinh#W.#r#GУc ði¬m:#W KÛ nång qu¥n th¬ #Gеc Công#W lên các ð¯i thü, sþ #GHuy«n Công#W.#r#GKÛ nång:#W #YPhá еc#W, #YHü C¯t Xuyên Tâm#W.", [24]="#GT¯ng Khß½ng#W ngoÕi hi®u #GThiên Khôi Tinh#W.#r#GУc ði¬m:#W KÛ nång qu¥n th¬ bá ðÕo nh¤t trong #G12 sát tinh#W, có th¬ khiªn ð¯i phß½ng tØ nÕn ngay trong mµt chiªu.#r#GKÛ nång:#W #YYêu Tinh Tø Nghîa#W, #YThiên Hàng Ngh¸ch Chuy¬n#W, #YSát Khí Bµc Phát#W.", [25]="#Võ Tøng#W ngoÕi hi®u #GThiên Thß½ng Tinh#W.#r#GУc ði¬m:#W KÛ nång qu¥n th¬ #GHöa Công#W lên các ð¯i thü, sþ #GBång Công#W.#r#GKÛ nång:#W #YPhá Höa#W, #YHöa Thiêu ÐÕi Danh Phü#W.", [26]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [27]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [28]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [29]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [30]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [31]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [32]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [33]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [34]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [35]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [36]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [37]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [38]="#GV§t ph¦m r½i ra:#W #YCông Lñc Ðan#W, #YLinh H°n Toái Phiªn#W, #YNgñ Dao Bàn#W, #YLßu Ly Dim#W, #YThiên Niên Tiên Thäo#W.", [39]="#GSát Tinh D¸ Dung Ðan#W, mµt viên ng÷c quý hiªm, tß½ng truy«n có th¬ dùng ð¬ #GTái chiªn Th§p nh¸ Sát Tinh#W. Không biªt vì sao ðÕi nhân #GTôn Tiªn Bäo#W lÕi có nó, các hÕ có th¬ tìm mua nó · #GTi®m Nguyên Bäo#W.", } --******************-- x910112_g_Introduce="Không biªt t× ðâu ra có #G12 tên#W tñ xßng #GTh§p nh¸ Sát Tinh#W hoành hành ngang ngßþc, uy hiªp bá tính. Thiên hÕ anh hùng, phàm là ng߶i hành hi®p trßþng nghîa, các hÕ không th¬ bö qua cho chúng!" --******************-- --**********************************-- --* On Enumerate *-- --**********************************-- function x910112_OnEnumerate(sceneId,selfId,targetId) --******************-- AddNumText(sceneId,x910112_g_ScriptId,"Khiêu chiªn Th§p Nh¸ Sát Tinh",6,1) --Khiêu chiªn AddNumText(sceneId,x910112_g_ScriptId,"Tái chiªn Th§p Nh¸ Sát Tinh",6,2) --Tái chiªn AddNumText(sceneId,x910112_g_ScriptId,"V« Th§p nh¸ Sát Tinh",11,0) --Tìm hi¬u AddNumText(sceneId,x910112_g_ScriptId,"V« Sát Tinh D¸ Dung Ðan",11,22) --Tìm hi¬u Sát tinh d¸ dung ðan --******************-- end --**********************************-- --* On Default Event *-- --**********************************-- function x910112_OnDefaultEvent(sceneId,selfId,targetId) local key=GetNumText() --******************-- if key==0 then BeginEvent(sceneId) AddText(sceneId,x910112_g_Introduce) for i=2,13 do AddNumText(sceneId,x910112_g_ScriptId,x910112_g_Information[i],11,i+8) end EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId) end --******************-- if key==22 then BeginEvent(sceneId) AddText(sceneId,x910112_g_Information[39]) EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId) end --******************-- if key>=10 and key<=21 then BeginEvent(sceneId) AddText(sceneId,x910112_g_Information[key+4]) AddText(sceneId,x910112_g_Information[key+16]) EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId) end --******************-- if key==1 then local nTime=GetMissionData(sceneId,selfId,SHENGSI_DAYTIME) --S¯ lßþt tham gia phø bän trong ngày if nTime>=x910112_g_Day_Time then BeginEvent(sceneId) AddText(sceneId,x910112_g_Information[1]) AddText(sceneId,"Ngày hôm nay các hÕ ðã tham gia #G"..nTime.." l¥n#W r°i, xin ngày mai hãy quay lÕi. Ho£c có th¬ sØ døng #GSát Tinh D¸ Dung Ðan#W có bán trong ti®m #GNguyên bäo#W ð±i l¤y mµt c½ hµi næa.") EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId) return end BeginEvent(sceneId) AddText(sceneId,x910112_g_Information[1]) AddText(sceneId,"Ngày hôm nay các hÕ ðã tham gia #G"..nTime.." l¥n#W, còn lÕi #G"..(x910112_g_Day_Time-nTime).." lßþt næa. Các hÕ có xác nh§n tham gia không?") AddNumText(sceneId,x910112_g_ScriptId,"Khiêu chiªn Th§p nh¸ Sát Tinh",10,3) AddNumText(sceneId,x910112_g_ScriptId,"R¶i bö",-1,4) EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId) end --******************-- if key==2 then local nTime=GetMissionData(sceneId,selfId,SHENGSI_DAYTIME) --S¯ lßþt tham gia phø bän trong ngày if nTime<x910112_g_Day_Time then BeginEvent(sceneId) AddText(sceneId,x910112_g_Information[1]) AddText(sceneId,"Ngày hôm nay các hÕ ðã tham gia #G"..nTime.." l¥n#W r°i, vçn còn #G"..(x910112_g_Day_Time-nTime).." lßþt#W næa. Các hÕ xin ð×ng lãng phí c½ hµi này.") EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId) return end BeginEvent(sceneId) AddText(sceneId,x910112_g_Information[1]) AddText(sceneId,"Ngày hôm nay các hÕ ðã tham gia #G"..nTime.." l¥n#W. Ь có thêm mµt c½ hµi næa, các hÕ phäi ðßa cho ta mµt t¤m #GSát Tinh D¸ Dung Ðan#W?") AddNumText(sceneId,x910112_g_ScriptId,"Tái chiªn Th§p nh¸ Sát Tinh",10,5) AddNumText(sceneId,x910112_g_ScriptId,"R¶i bö",-1,4) EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId) end --******************-- if key==4 then BeginUICommand(sceneId) EndUICommand(sceneId) DispatchUICommand(sceneId,selfId,1000) end --******************-- if key==5 or key==3 then if key==5 and LuaFnGetAvailableItemCount(sceneId,selfId,x910112_g_Card_Index)<1 then BeginEvent(sceneId) AddText(sceneId,"Xin l²i, trên ng߶i các hÕ không có #GSát Tinh D¸ Dung Ðan#W. Viên ng÷c này có bán · thß½ng ti®m #GNguyên bäo#W. Các hÕ thØ ghé qua ðó xem sao!") EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId) return end local Check,nTip=x910112_CheckCanEnter(sceneId,selfId) if Check==0 then BeginEvent(sceneId) AddText(sceneId,nTip) EndEvent(senceId) DispatchEventList(sceneId,selfId,targetId) return end x910112_MakeCopyScene(sceneId,selfId) --Kh·i tÕo phø bän end --******************-- end --**********************************-- --* Check Can Enter *-- --**********************************-- function x910112_CheckCanEnter(sceneId,selfId,targetId) --******************-- if LuaFnHasTeam(sceneId,selfId)~=1 then --Ng߶i ch½i này không có ðµi ngû return 0,"Các hÕ c¥n gia nh§p vào mµt ðµi ngû t¯i thi¬u #G"..x910112_g_Limit_Member.."#W thành viên m¾i có th¬ tham gia!" end --******************-- if GetTeamLeader(sceneId,selfId)~=selfId then --Ng߶i ch½i không phäi ðµi trß·ng return 0,"Chï có ðµi trß·ng m¾i có th¬ quyªt ð¸nh có tham gia hay không. Các hÕ hãy g÷i ðµi trß·ng cüa các hÕ ðªn nói chuy®n v¾i ta!" end --******************-- if GetTeamSize(sceneId,selfId)<x910112_g_Limit_Member then --S¯ lßþng thành viên không ðü return 0,"T± ðµi c¥n có t¯i thi¬u #G"..x910112_g_Limit_Member.."#W thành viên m¾i có th¬ tham gia!" end --******************-- local NearTeamSize = GetNearTeamCount(sceneId,selfId) --еi ngû có thành viên không · g¥n if GetTeamSize(sceneId,selfId)~=NearTeamSize then return 0,"Các hÕ c¥n tri®u t§p ðü ðµi ngû cüa mình ðªn ch² ta m¾i có th¬ tiªn vào phø bän!" end --******************-- local Humanlist={} local nHumanNum=0 for i=0,NearTeamSize-1 do local PlayerId=GetNearTeamMember(sceneId,selfId,i) if GetLevel(sceneId,PlayerId)<x910112_g_Need_Level then --Có thành viên không ðü c¤p ðµ yêu c¥u Humanlist[nHumanNum]=GetName(sceneId,PlayerId) nHumanNum = nHumanNum+1 end end if nHumanNum > 0 then local msg="Trong t± ðµi cüa các hÕ có " for i=0,nHumanNum-2 do msg=msg..Humanlist[i]..", " end msg=msg..Humanlist[nHumanNum-1].." c¤p ðµ không ðü c¤p #G"..x910112_g_Need_Level..", không ðü ði«u ki®n tham gia phø bän!" return 0,msg end --******************-- nHumanNum = 0 local CurDayTime = GetDayTime() for i=0,NearTeamSize-1 do local PlayerId=GetNearTeamMember(sceneId,selfId,i) local nTime=GetMissionData(sceneId,PlayerId,SHENGSI_DAYTIME) --S¯ l¥n tham gia phø bän hôm nay if nTime>=x910112_g_Day_Time then Humanlist[nHumanNum]=GetName(sceneId,PlayerId) nHumanNum=nHumanNum+1 end end if nHumanNum > 0 then local msg="Trong t± ðµi cüa các hÕ có " for i=0,nHumanNum-2 do msg=msg..Humanlist[i]..", " end msg=msg..Humanlist[nHumanNum-1].." ðã tham gia phø bän #G"..x910112_g_Day_Time.." l¥n#W trong ngày hôm nay!" return 0,msg end --******************-- return 1 --******************-- end --**********************************-- --* Make Copy Scene *-- --**********************************-- function x910112_MakeCopyScene(sceneId,selfId) --******************-- local x,y=GetWorldPos(sceneId,selfId) --******************-- leaderguid=LuaFnObjId2Guid(sceneId,selfId) --******************-- LuaFnSetSceneLoad_Map(sceneId,x910112_g_Fuben_Scene) --Load file scene LuaFnSetCopySceneData_TeamLeader(sceneId,leaderguid) --ID ðµi trß·ng LuaFnSetCopySceneData_NoUserCloseTime(sceneId,x910112_g_NoUserTime) --Th¶i gian lßu phø bän khi không còn ai LuaFnSetCopySceneData_Timer(sceneId,x910112_g_TickTime) --Th¶i gian phø bän LuaFnSetCopySceneData_Param(sceneId,0,x910112_g_CopySceneType) --Set thông s¯ phø bän (ScriptGlobal.lua) LuaFnSetCopySceneData_Param(sceneId,1,x910112_g_ScriptId) --ID script phø bän LuaFnSetCopySceneData_Param(sceneId,2,0) LuaFnSetCopySceneData_Param(sceneId,3,sceneId) --Cänh tßþng hi®n tÕi LuaFnSetCopySceneData_Param(sceneId,4,x) --T÷a ðµ X cüa ng߶i ch½i LuaFnSetCopySceneData_Param(sceneId,5,y) --T÷a ðµ Y cüa ng߶i ch½i LuaFnSetCopySceneData_Param(sceneId,6,GetTeamId(sceneId,selfId)) --ID nhóm ng߶i ch½i LuaFnSetCopySceneData_Param(sceneId,7,0) --******************-- for i=8,31 do LuaFnSetCopySceneData_Param(sceneId,i,0) --Reset lÕi các thông s¯ cho phø bän end --******************-- LuaFnSetSceneLoad_Area(sceneId,x910112_g_Fuben_Area) --Load area LuaFnSetSceneLoad_Monster(sceneId,x910112_g_Fuben_Map) --Load file monster --******************-- local bRetSceneID=LuaFnCreateCopyScene(sceneId) BeginEvent(sceneId) if bRetSceneID>0 then AddText(sceneId,"D¸ch chuy¬n thành công!") --S¯ bän sao quá täi else AddText(sceneId,"S¯ lßþng bän sao ðã quá täi, ð« ngh¸ lát næa thØ lÕi!") --Có th¬ tÕo bän sao m¾i end EndEvent(sceneId) DispatchMissionTips(sceneId,selfId) --******************-- end --**********************************-- --* Make Copy Scene Ready *-- --**********************************-- function x910112_OnCopySceneReady(sceneId,destsceneId) --******************-- LuaFnSetCopySceneData_Param(destsceneId,3,sceneId) --Thông báo kh·i tÕo phø bän leaderguid=LuaFnGetCopySceneData_TeamLeader(destsceneId) leaderObjId=LuaFnGuid2ObjId(sceneId,leaderguid); --******************-- local nearteammembercount=GetNearTeamCount(sceneId,leaderObjId) local mems={} for i=0,nearteammembercount-1 do mems[i]=GetNearTeamMember(sceneId,leaderObjId,i) NewWorld(sceneId,mems[i],destsceneId,x910112_g_Fuben_X,x910112_g_Fuben_Y) --Ðßa t¤t cä thành viên nhóm ðªn phø bän end --******************-- end --**********************************-- --* On Copy Scene Timer *-- --**********************************-- function x910112_OnCopySceneTimer(sceneId,nowTime) --Hàm này check liên tøc m²i Mili giây khi phø bän còn t°n tÕi --******************-- local nStep=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Next_Step) --L¤y thao tác trên phø bän if nStep==0 then --L¥n ð¥u trong phø bän LuaFnSetCopySceneData_Param(sceneId,x910112_g_Fuben_Timer,x910112_g_FuBenTime) --C§p nh§t th¶i gian b¡t ð¥u phø bän LuaFnSetCopySceneData_Param(sceneId,x910112_g_Fuben_On_Time,nowTime) --C§p nh§t th¶i gian phø bän (нn v¸ Mili giây) x910112_CreatMyNPC(sceneId) --Kh·i tÕo các NPC elseif nStep==1 then --Giai ðoÕn chiªn ð¤u local Is_Winner=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Mission_Completed) --Nhi®m vø ðã hoàn thành chßa if Is_Winner==1 then --Hoàn thành nhi®m vø r°i local Time_Left=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Exit_Time_Fuben) --L¤y th¶i gian lúc th¡ng cuµc if nowTime-Time_Left>=x910112_g_Time_Leave then x910112_KickOutAllPlayer(sceneId) --Ðßa t¤t cä ng߶i ch½i r¶i khöi phø bän end return end local Total_Boss_Left=x910112_CheckHaveBossLeft(sceneId) --Ki¬m tra còn lÕi bao nhiêu Boss ho£c NPC Boss. Nªu không còn thì th¡ng if Total_Boss_Left==0 then x910112_OnCompleteMission(sceneId) --Hoàn thành nhi®m vø LuaFnSetCopySceneData_Param(sceneId,x910112_g_Exit_Time_Fuben,nowTime) --C§p nh§t th¶i gian b¡t ð¥u tính chu¦n b¸ r¶i phø bän return end local nTick=nowTime-LuaFnGetCopySceneData_Param(sceneId,x910112_g_Fuben_On_Time) --L¤y tích t¡c mµt cüa phø bän LuaFnSetCopySceneData_Param(sceneId,x910112_g_Fuben_On_Time,nowTime) --C§p nh§t th¶i gian phø bän (нn v¸ Mili giây) local nTime=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Fuben_Timer) --L¤y th¶i gian hi®n tÕi cüa phø bän (нn v¸ Mili giây) LuaFnSetCopySceneData_Param(sceneId,x910112_g_Fuben_Timer,nTime-nTick) --C§p nh§t th¶i gian phø bän (нn v¸ Mili giây) local Next_Time=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Next_Time_Call) --L¤y th¶i gian ra Boss tiªp theo (нn v¸ Mili giây) LuaFnSetCopySceneData_Param(sceneId,x910112_g_Next_Time_Call,Next_Time-nTick) --C§p nh§t th¶i gian ra Boss tiªp theo (нn v¸ Mili giây) if Next_Time-nTick<=0 then --Ðã ðªn gi¶ kh·i tÕo Boss tiªp theo x910112_CreatMyBoss(sceneId) --Kh·i tÕo Boss end x910112_ShowNotices(sceneId,nTime-nTick) --Ki¬m tra và thông báo nªu ðªn gi¶ x910112_BossNotices(sceneId,Next_Time-nTick) --Thông báo ra Boss elseif nStep==2 then --Ðã hªt th¶i gian phø bän x910112_KickOutAllPlayer(sceneId) --Ðßa t¤t cä ng߶i ch½i r¶i khöi phø bän end --******************-- end --**********************************-- --* On Player Enter *-- --**********************************-- function x910112_OnPlayerEnter(sceneId,selfId) --******************-- SetPlayerDefaultReliveInfo(sceneId,selfId,"%10",-1,"0",sceneId,x910112_g_Fuben_X,x910112_g_Fuben_Y) --Уt ði¬m h°i sinh tÕi phø bän --******************-- local nTime=GetMissionData(sceneId,selfId,SHENGSI_DAYTIME) --L¤y s¯ lßþt tham gia phø bän trong ngày SetMissionData(sceneId,selfId,SHENGSI_DAYTIME,nTime+1) --C§p nh§t lÕi s¯ lßþt tham gia phø bän trong ngày --******************-- end --**********************************-- --* On Human Die *-- --**********************************-- function x910112_OnHumanDie(sceneId,selfId,killerId) --******************-- --******************-- end --**********************************-- --* On Complete Mission *-- --**********************************-- function x910112_OnCompleteMission(sceneId) --******************-- LuaFnSetCopySceneData_Param(sceneId,x910112_g_Mission_Completed,1) --C§p nh§t chßa hoàn thành nhi®m vø --******************-- x910112_TipAllHuman(sceneId,x910112_g_Notice[14]) --******************-- end --**********************************-- --* Check Have Boss Left *-- --**********************************-- function x910112_CheckHaveBossLeft(sceneId) --******************-- local nMonsterNum=GetMonsterCount(sceneId) for i=0,nMonsterNum-1 do local MonsterId=GetMonsterObjID(sceneId,i) if LuaFnIsCharacterLiving(sceneId,MonsterId)==1 then for j=1,12 do if GetName(sceneId,MonsterId)==x910112_g_Boss_List[j].Name or GetName(sceneId,MonsterId)==x910112_g_NPC_Boss_List[j].Name then return 1 end end end end --******************-- return 0 --******************-- end --**********************************-- --* Show Notices *-- --**********************************-- function x910112_ShowNotices(sceneId,nTime) --******************-- local nNotice="" --Thông báo if nTime<=0 then --Hªt th¶i gian phø bän local nStep=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Info_Step) --Bß¾c thông báo l¥n trß¾c if nStep==9 then return end nNotice=x910112_g_Notice[9] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Next_Step,2) --Ðã hªt th¶i gian phø bän LuaFnSetCopySceneData_Param(sceneId,x910112_g_Info_Step,9) --C§p nh§t ðã thông báo loÕi này elseif nTime<=5000 then --Còn 5 giây local nStep=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Info_Step) --Bß¾c thông báo l¥n trß¾c if nStep==8 then return end nNotice=x910112_g_Notice[8] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Info_Step,8) --C§p nh§t ðã thông báo loÕi này elseif nTime<=15000 then --Còn 15 giây local nStep=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Info_Step) --Bß¾c thông báo l¥n trß¾c if nStep==7 then return end nNotice=x910112_g_Notice[7] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Info_Step,7) --C§p nh§t ðã thông báo loÕi này elseif nTime<=30000 then --Còn 30 giây local nStep=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Info_Step) --Bß¾c thông báo l¥n trß¾c if nStep==6 then return end nNotice=x910112_g_Notice[6] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Info_Step,6) --C§p nh§t ðã thông báo loÕi này elseif nTime<=60000 then --Còn 1 phút local nStep=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Info_Step) --Bß¾c thông báo l¥n trß¾c if nStep==5 then return end nNotice=x910112_g_Notice[5] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Info_Step,5) --C§p nh§t ðã thông báo loÕi này elseif nTime<=300000 then --Còn 5 phút local nStep=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Info_Step) --Bß¾c thông báo l¥n trß¾c if nStep==4 then return end nNotice=x910112_g_Notice[4] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Info_Step,4) --C§p nh§t ðã thông báo loÕi này elseif nTime<=900000 then --Còn 15 phút local nStep=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Info_Step) --Bß¾c thông báo l¥n trß¾c if nStep==3 then return end nNotice=x910112_g_Notice[3] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Info_Step,3) --C§p nh§t ðã thông báo loÕi này elseif nTime<=1800000 then --Còn 30 phút local nStep=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Info_Step) --Bß¾c thông báo l¥n trß¾c if nStep==2 then return end nNotice=x910112_g_Notice[2] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Info_Step,2) --C§p nh§t ðã thông báo loÕi này elseif nTime<=3595000 then --Còn 1 gi¶ local nStep=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Info_Step) --Bß¾c thông báo l¥n trß¾c if nStep==1 then return end nNotice=x910112_g_Notice[1] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Info_Step,1) --C§p nh§t ðã thông báo loÕi này end --******************-- if nNotice~="" then x910112_TipAllHuman(sceneId,nNotice) --Thông báo cho toàn th¬ ng߶i ch½i end --******************-- end --**********************************-- --* Boss Notices *-- --**********************************-- function x910112_BossNotices(sceneId,nTime) local Boss_Notice="" local nBossStep=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Boss_Step) --Bß¾c thông báo l¥n trß¾c ra Boss if nTime<=5000 then --Còn 5 giây s¨ ra Boss m¾i if nBossStep==13 then return end Boss_Notice=x910112_g_Notice[13] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_Step,13) elseif nTime<=15000 then --Còn 15 giây s¨ ra Boss m¾i if nBossStep==12 then return end Boss_Notice=x910112_g_Notice[12] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_Step,12) elseif nTime<=30000 then --Còn 30 giây s¨ ra Boss m¾i if nBossStep==11 then return end Boss_Notice=x910112_g_Notice[11] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_Step,11) elseif nTime<=55000 then --Còn 1 phút s¨ ra Boss m¾i if nBossStep==10 then return end Boss_Notice=x910112_g_Notice[10] LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_Step,10) end --******************-- if Boss_Notice~="" then x910112_TipAllHuman(sceneId,Boss_Notice) --Thông báo cho toàn th¬ ng߶i ch½i end --******************-- end --**********************************-- --* Kick Out All Player *-- --**********************************-- function x910112_KickOutAllPlayer(sceneId) --******************-- local nHumanCount = LuaFnGetCopyScene_HumanCount(sceneId) for i=0,nHumanCount-1 do local nHumanId = LuaFnGetCopyScene_HumanObjId(sceneId,i) if LuaFnIsObjValid(sceneId,nHumanId)==1 and LuaFnIsCanDoScriptLogic(sceneId,nHumanId)==1 and LuaFnIsCharacterLiving(sceneId,nHumanId)==1 then CallScriptFunction((400900),"TransferFunc",sceneId,nHumanId,x910112_g_Back_Scene_Index,x910112_g_Back_Pos_X,x910112_g_Back_Pos_Y) --Ðßa ng߶i ch½i tr· v« thành th¸ end end --******************-- end --**********************************-- --* Delete All Old Monster *-- --**********************************-- function x910112_DeleteAllOldMonster(sceneId) --******************-- local nMonsterNum=GetMonsterCount(sceneId) for i=0,nMonsterNum-1 do local MonsterId=GetMonsterObjID(sceneId,i) if LuaFnIsCharacterLiving(sceneId,MonsterId)==1 then SetCharacterDieTime(sceneId,MonsterId,100) end end --******************-- end --**********************************-- --* Creat My NPC *-- --**********************************-- function x910112_CreatMyNPC(sceneId) --******************-- x910112_DeleteAllOldMonster(sceneId) --Just fix a bug... --******************-- local Monk_Index=LuaFnCreateMonster(sceneId,x910112_g_Monk.Index,x910112_g_Monk.Pos_X,x910112_g_Monk.Pos_Y,3,0,x910112_g_Monk.ScriptID) ---Kh·i tÕo NPC Khô Vinh ÐÕi Sß SetCharacterName(sceneId,Monk_Index,x910112_g_Monk.Name) --C§p nh§t tên Khô Vinh ÐÕi Sß SetCharacterTitle(sceneId,Monk_Index,x910112_g_Monk.Title) --C§p nh§t Title cho Khô Vinh ÐÕi Sß --******************-- local nBossList={0,0,0,0,0} --Danh sách 5 Boss ðßþc ch÷n for i=1,x910112_g_Number_Per_Choose do local Ran=random(12) --Ch÷n ngçu nhiên mµt trong 12 Boss local Found=0 for j=1,i-1 do if Ran==nBossList[j] then --Tìm th¤y Boss ðã ðßþc ch÷n trß¾c ðó Found=1 break end end if Found==0 then --Boss này chßa ðßþc ch÷n trß¾c ðó nBossList[i]=Ran --C§p nh§t end end --******************-- local nSum=0 local nHumanCount=LuaFnGetCopyScene_HumanCount(sceneId) for i=0,nHumanCount-1 do local nHumanId=LuaFnGetCopyScene_HumanObjId(sceneId,i) nSum=nSum+GetLevel(sceneId,nHumanId) end --******************-- local Current_Level=floor(nSum/nHumanCount) --Level cüa Boss trong phø bän local nDec if Current_Level>=80 and Current_Level<90 then nDec=0 elseif Current_Level>=90 and Current_Level<100 then nDec=1 elseif Current_Level>=100 and Current_Level<110 then nDec=2 elseif Current_Level>=110 and Current_Level<120 then nDec=3 else nDec=4 end --******************-- for i=1,5 do local Boss_ID=x910112_g_NPC_Boss_List[nBossList[i]].Index --ID NPC Boss local Boss_Name=x910112_g_NPC_Boss_List[nBossList[i]].Name --Tên NPC Boss local Boss_Title=x910112_g_NPC_Boss_List[nBossList[i]].Title --Danh hi®u NPC Boss local Pos_X=x910112_g_NPC_Boss_Pos[i].Pos_X --T÷a ðµ X cüa NPC Boss local Pos_Y=x910112_g_NPC_Boss_Pos[i].Pos_Y --T÷a ðµ Y cüa NPC Boss local Boss_Index=LuaFnCreateMonster(sceneId,Boss_ID,Pos_X,Pos_Y,3,0,x910112_g_Script_NPC_Talk) --Kh·i tÕo NPC Boss SetCharacterName(sceneId,Boss_Index,Boss_Name) --Set tên cho NPC Boss SetCharacterTitle(sceneId,Boss_Index,Boss_Title) --Set danh hi®u cho NPC Boss end --******************-- LuaFnSetCopySceneData_Param(sceneId,x910112_g_Next_Step,1) --Ðã xong công ðoÕn kh·i tÕo LuaFnSetCopySceneData_Param(sceneId,x910112_g_Fuben_Level,nDec) --C§p nh§t c¤p ðµ LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_1,nBossList[1]) --Boss ðßþc ch÷n s¯ 1 LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_2,nBossList[2]) --Boss ðßþc ch÷n s¯ 2 LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_3,nBossList[3]) --Boss ðßþc ch÷n s¯ 3 LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_4,nBossList[4]) --Boss ðßþc ch÷n s¯ 4 LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_5,nBossList[5]) --Boss ðßþc ch÷n s¯ 5 LuaFnSetCopySceneData_Param(sceneId,x910112_g_Next_Time_Call,x910112_g_First_Battle_Time)--C§p nh§t th¶i gian g÷i Boss tiªp theo LuaFnSetCopySceneData_Param(sceneId,x910112_g_Info_Step,0) --C§p nh§t chßa có thông báo nào LuaFnSetCopySceneData_Param(sceneId,x910112_g_Mission_Completed,0) --C§p nh§t chßa hoàn thành nhi®m vø --******************-- end --**********************************-- --* Creat My Boss *-- --**********************************-- function x910112_CreatMyBoss(sceneId) --******************-- local nBossList={} nBossList[1]=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Boss_1) --Boss s¯ 1 nBossList[2]=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Boss_2) --Boss s¯ 2 nBossList[3]=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Boss_3) --Boss s¯ 3 nBossList[4]=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Boss_4) --Boss s¯ 4 nBossList[5]=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Boss_5) --Boss s¯ 5 nBossList[6]=0 --Just a trap... --******************-- local nDec=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Fuben_Level) --L¤y c¤p ðµ quái trong phø bän local Ran=6 local nCheck=0 while nBossList[Ran]==0 do Ran=random(x910112_g_Number_Per_Choose) --Ch÷n ngçu nhiên mµt Boss trong danh sách 5 Boss ðßþc ch÷n nCheck=nCheck+1 if nCheck>100 then --A trap destroy "Dead Lock" for i=1,5 do if nBossList[i]~=0 then Ran=i break end end break end end --******************-- local Boss_Name=x910112_g_Boss_List[nBossList[Ran]].Name --Tên Boss local nMonsterNum=GetMonsterCount(sceneId) for i=0,nMonsterNum-1 do local MonsterId=GetMonsterObjID(sceneId,i) if LuaFnIsCharacterLiving(sceneId,MonsterId)==1 and (GetName(sceneId,MonsterId)==Boss_Name) then LuaFnSendSpecificImpactToUnit(sceneId,MonsterId,MonsterId,MonsterId,x910112_g_Impact,0) SetCharacterDieTime(sceneId,MonsterId,100) --Xóa ði NPC Boss break end end --******************-- local Boss_ID=x910112_g_Boss_List[nBossList[Ran]].Index+nDec --ID Boss local Boss_Title=x910112_g_Boss_List[nBossList[Ran]].Title --Danh hi®u Boss local AI_Script=x910112_g_Boss_List[nBossList[Ran]].AIScript --AI script cüa Boss local Pos_X=x910112_g_Fight_Pos_X --T÷a ðµ X ra Boss local Pos_Y=x910112_g_Fight_Pos_Y --T÷a ðµ Y ra Boss local Boss_Script=x910112_g_Boss_List[nBossList[Ran]].ScriptID --Script cüa Boss local Boss_Index=LuaFnCreateMonster(sceneId,Boss_ID,Pos_X,Pos_Y,27,AI_Script,Boss_Script)--Kh·i tÕo Boss SetCharacterName(sceneId,Boss_Index,Boss_Name) --Set tên cho Boss SetCharacterTitle(sceneId,Boss_Index,Boss_Title) --Set danh hi®u cho Boss LuaFnSendSpecificImpactToUnit(sceneId,Boss_Index,Boss_Index,Boss_Index,x910112_g_Impact,0) --******************-- if Ran==1 then LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_1,0) --Boss s¯ 1 ðã ðßþc g÷i elseif Ran==2 then LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_2,0) --Boss s¯ 2 ðã ðßþc g÷i elseif Ran==3 then LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_3,0) --Boss s¯ 3 ðã ðßþc g÷i elseif Ran==4 then LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_4,0) --Boss s¯ 4 ðã ðßþc g÷i elseif Ran==5 then LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_5,0) --Boss s¯ 5 ðã ðßþc g÷i end --******************-- local nSet --L¤y biªn giá tr¸ cüa Boss tß½ng Ñng if Ran==1 then nSet=x910112_g_Boss_1 elseif Ran==2 then nSet=x910112_g_Boss_2 elseif Ran==3 then nSet=x910112_g_Boss_3 elseif Ran==4 then nSet=x910112_g_Boss_4 elseif Ran==5 then nSet=x910112_g_Boss_5 end --******************-- LuaFnSetCopySceneData_Param(sceneId,nSet,0) --Boss này ðã ra chiªn ð¤u LuaFnSetCopySceneData_Param(sceneId,x910112_g_Next_Time_Call,x910112_g_Creat_Boss_Timer)--C§p nh§t th¶i gian g÷i Boss tiªp theo LuaFnSetCopySceneData_Param(sceneId,x910112_g_Boss_Step,0) --C§p nh§t th¶i gian thông báo ra Boss tiªp theo --******************-- local nBoss=LuaFnGetCopySceneData_Param(sceneId,x910112_g_Is_On_Combat) --Ki¬m tra xem có bao nhiêu Boss ðang chiªn ð¤u LuaFnSetCopySceneData_Param(sceneId,x910112_g_Is_On_Combat,nBoss+1) --Tång s¯ Boss ðang chiªn ð¤u lên --******************-- end --**********************************-- --* Tip All Human *-- --**********************************-- function x910112_TipAllHuman(sceneId,nTip) --******************-- local nHumanNum=LuaFnGetCopyScene_HumanCount(sceneId) for i=0,nHumanNum-1 do local PlayerId=LuaFnGetCopyScene_HumanObjId(sceneId,i) if LuaFnIsObjValid(sceneId,PlayerId)==1 and LuaFnIsCanDoScriptLogic(sceneId,PlayerId)==1 then BeginEvent(sceneId) AddText(sceneId,nTip) EndEvent(sceneId) DispatchMissionTips(sceneId,PlayerId) end end --******************-- end
Hàm OnEnumerate khá quan trọng, mình dùng script khác gọi tới nó để thao tác. Cái này mình sẽ giải thích sau.
Hàm OnDefaultEvent khác với NPC là hàm này nó có vai trò tương tự hàm OnEventRequest của NPC hay item.
Hàm MakeCopyScene khá quan trọng. Hàm này dùng để creat phụ bản cũng như các biến cục bộ của nó. Tương tự như biến cục bộ của Monster thì biến cục bộ của script event cũng có chức năng tương tự và chỉ có tác dụng với event nó quản lý. Trong danh sách này thì từ 1 đến 8 là giá trị đc khởi tạo sẵn, có mục đích cả, để hiểu thì bạn xem qua scene.lua còn không thì cứ để kệ nó và bạn muốn thêm thì bạn đánh số từ 9 lên nhé.
Hàm OnCopySceneReady cũng quan trọng, khi code thường bạn chỉ cần overwrite 2 hàm MakeCopyScene và OnCopySceneReady mà ko cần sửa gì nhiều, nếu có mục đích thì bạn có thể sửa luôn.
Hàm quan trọng nhất ở đây chính là hàm OnCopySceneTimer, hàm này như hàm OnHeartBeat của Monster nghĩa là cứ mỗi ms phụ bản còn tồn tại thì nó sẽ làm điều gì đó... Ví dụ đơn giản như cái thông báo thời gian phụ bản.
Hàm OnPlayerEnter là hàm thao tác khi người chơi tiến từ map ngoài vào phụ bản. Hàm OnHumanDie là hàm thao tác mỗi khi có 1 người chơi nào đó bị giết. Bạn cần hiểu nó nhiều, về phần scene.lua mình sẽ giải thích về nó.
Ngoài ra là các hàm mình tự thiết kế phục vụ mục đích của script.
Để lấy biến cục bộ của event ta dùng cấu trúc
Code:LuaFnGetCopySceneData_Param(sceneId,x)
Tương tự set giá trị cho biến cục bộ ta dùng cấu trúc
Code:LuaFnSetCopySceneData_Param(sceneId,x,gt)
Một số câu lệnh dùng trong script mình đã giải thích rất rõ trong code rồi nên mình không overwrite lại đây nữa, các bạn chịu khó đọc code nhé.
Và cái quan trọng như mình muốn giải thích chính là cái hàm OnEnumerate. Như các bạn nhìn thấy thì nó khá cụt, không giống cấu trúc lệnh viết ra cái MsgBox mà mình giải thích trên script của NPC. Cái tinh túy của nó là thế này.
Code:--Th§p nh¸ Sát Tinh --Khô Vinh ÐÕi Sß --Author: Hoàng Steven --************************-- x910113_g_ScriptId=910113 x910113_g_Event_ScriptId=910112 --Script event --************************-- x910113_g_Introduce="Không biªt t× ðâu ra có #G12 tên#W tñ xßng #GTh§p nh¸ Sát Tinh#W hoành hành ngang ngßþc, uy hiªp bá tính. Thiên hÕ anh hùng, phàm là ng߶i hành hi®p trßþng nghîa, các hÕ không th¬ bö qua cho chúng!" --************************-- --*****************************-- --* On Default Event *-- --*****************************-- function x910113_OnDefaultEvent(sceneId,selfId,targetId) --************************-- BeginEvent(sceneId) AddText(sceneId,x910113_g_Introduce) CallScriptFunction(x910113_g_Event_ScriptId,"OnEnumerate",sceneId,selfId,targetId) EndEvent(senceId) DispatchEventList(sceneId,selfId,x910113_g_ScriptId) --************************-- end --*****************************-- --* On Event Request *-- --*****************************-- function x910113_OnEventRequest(sceneId,selfId,targetId,eventId) if eventId==x910113_g_Event_ScriptId then CallScriptFunction(eventId,"OnDefaultEvent",sceneId,selfId,targetId) return end end
Bạn phải thao tác với một vài script thật sự mới hiểu đc, phần này khá ảo diệu đó.Lần sửa cuối bởi Sói Đẹp Trai, ngày 11-01-15 lúc 04:10 AM.
Khách viếng thăm hãy cùng Sói Đẹp Trai xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
The Following 2 Users Say Thank You to Sói Đẹp Trai For This Useful Post:
caovanthanh22 (05-12-15), vuhuy99v (27-12-15)
-
11-01-15, 04:45 AM #3
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,063 Times in 1,403 Posts
Ðề: Lua in TLBB
Phần tiếp theo cũng không kém phần quan trọng đó chính là giải thích về cấu trúc biến toàn cục với ScriptGlobal.lua và các thao tác trên cảnh bất kỳ với scene.lua và biến hệ thống Activity
1. ScriptGlobal.lua
Được hiểu là biến toàn cục có tác dụng trên toàn bộ server với một người chơi, pet, item hay một Object bất kỳ. Cũng như các biến cục bộ của script event hay monster thì biến toàn cục cũng đc đánh số từ [-999..999]. Biến này có tác dụng trên toàn sv với 1 người chơi, pet, item hay một Object bất kỳ. Ví dụ như trị số tu luyện, số lần tham gia phụ bản trong ngày,... Những thứ mà nói chung là để phục vụ cho một cái Object bất kỳ. Nó như khái niệm biến toàn cục mà các bạn hay dùng trong một chương trình nào đó trong các ngôn ngữ lập trình.
Ở đây mình sẽ giải thích qua file ScriptGlobal.lua trước tiên.
File này đơn giản là khai báo hệ thống số thứ tự các biến toàn cục, cái này tránh nhầm lẫn thôi, như bạn thấy trong code của mình mình có dùng số trực tiếp với biến cục bộ đâu mà toàn gán cho 1 biến trung gian đó, để tránh nhầm lẫn thôi.
Cách thức:
Code:TÊN_BIẾN=Giá_trị
Để lấy giá trị biến toàn cục ta dùng cấu trúc
Code:GetMissionData(sceneId,Object_ID,TÊN_BIẾN_HOẶC_THỨ_TỰ)
Set giá trị biến toàn cục ta dùng cấu trúc
Code:SetMissionData(sceneId,Object_ID,TÊN_BIẾN_HOẶC_THỨ_TỰ,gt)
Cụ thể ví dụ bạn xem script NPC mình post ở bài HD 1 trong đó có sử dụng biến toàn cục.
Khá quan trọng, để hiểu kỹ về script event bạn cần hiểu cái file này.
Cụ thể các bạn mở script của nó ra, có vài hàm mình sẽ giải thích.
Hàm OnSceneInit sẽ bắt sự kiện khi cái cảnh bất kỳ đc tạo ra ví dụ phụ bản.
Hàm OnSceneTimer chính là hàm thao tác hệ thống check mỗi mili giây, và chính hàm nay gọi đến cái hàm cùng tên trong script event đó.
Hàm OnSceneQuit không dùng bao giờ.
Hàm OnScenePlayerEnter là hàm bắt sự kiện khi người chơi xuất hiện tại cảnh nào đó, cái hàm này chính là gọi đến hàm cùng tên trong script event.
Hàm OnSceneHumanDie chính là cái hàm thao tác mỗi khi có người chơi nào đó tử nạn, hàm này cũng gọi đến hàm cùng tên trong script event.
Hàm OnSceneHumanLevelUp là hàm bắt sự kiện trong cảnh nào đó mà người chơi ấn thăng cấp.
Hàm OnSceneHumanChangeMenpai bắt sự kiện khi người chơi đổi phái (không hay dùng)
Hàm OnSceneNotify hàm nhắc nhở thông báo một cái gì đó (không dùng)
Hàm OnAcceptMissionCheck thao tác khi hoàn thành nhiệm vụ
Hàm OnScenePlayerTimer thao tác tính thời gian tào vận.
Hàm OnScenePlayerLogin thao tác khi người chơi đăng nhập vào game.
Hàm OnScenePlayerFirstLogin thao tác khi người chơi lần đầu đăng nhập vào game (lúc vừa khởi tạo nhân vật xong).
Hàm OnScenePlayerOpenRevenge được gọi tới khi người chơi tuyên chiến cùng ai đó.
Hàm OnScenePlayerCloseRevenge thao tác khi kết thúc tuyên chiến.
Hàm OnPlayerPickupItemFromDropBox thao tác mỗi khi người chơi nhặt 1 vật phẩm nào đó từ cái túi trong cảnh bất kỳ, dùng để thông báo khi nhặt đc trang bị quý.
Ngoài ra còn vài cái hàm nữa nhưng ko hay dùng, các bạn tự tìm hiểu, ở đây mình chỉ list ra danh sách các hàm chính mà bạn cần biết để hiểu rõ hơn về event script.
Có vài câu lệnh trong Lua Basic như SetTimer hay GetTimer nó như kiểu check thời gian sau một khoảng nào đó thì sẽ lặp lại Get/Set giá trị cho 1 hàm nào đó. Cái này tùy thuộc vào mục đích của bạn. Hãy tham khảo forum về Lua Basic để hiểu rõ hơn nhé
Cái này rộng hơn biến toàn cục, biến này có tác dụng cho mọi đối tượng. Ví dụ như tổng điểm tích lũy hoạt động của tất cả thành viên trong bang hội trong ngày hay con số may mắn hệ thống ngẫu nhiên chọn trong trò chơi rút thăm trên toàn thể sv,...
Dườm dà khó hiểu nhưng bạn hình dung chút là sẽ được.
Để bắt đầu một chuỗi hoạt động nào đó trên toàn sv, ta dùng cấu trúc
Code:StartOneActivity(sceneId,Thời_gian,Số_thứ_tự)
Code:EndAnActivity(sceneId,Số_thứ_tự,Thời_gian,Số_lượng_biến)
Để lấy giá trị một biến nào đó trước tiên ta khởi tạo Activity rồi sau đó mới thao tác theo cấu trúc:
Code:GetActivityParam(sceneId,Số_thứ_tự_Activity,Số_thứ_tự_biến)
Code:SetActivityParam(sceneId,Số_thứ_tự_Activity,Số_thứ_tự_biến,Giá_trị)
Khách viếng thăm hãy cùng Sói Đẹp Trai xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
Các thành viên gởi lời cảm ơn đến Sói Đẹp Trai vì bài viết này !
vuhuy99v (27-12-15)
-
11-01-15, 05:10 AM #4
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,063 Times in 1,403 Posts
Ðề: Lua in TLBB
Một điều cuối cùng khá quan trọng chính là thao tác kết nối giữa SV với Client và ngược lại, giải thích nguyên lý hoạt động của file Lua bên Client.
1. UI_COMMAND và XScript
Đây chính là công cụ kết nối Server và Client.
Muốn truyền dữ liệu từ Server lên, ta dùng UI_COMMAND theo cấu trúc
Code:BeginUICommand(sceneId) UICommand_AddInt(sceneId,GetMissionData(sceneId,selfId,y) UICommand_AddString(sceneId,GetMissionData(sceneId,selfId,z) EndUICommand(sceneId) DispatchUICommand(sceneId,selfId,x)
Cái x kia đặt bất kỳ kiểu nguyên miễn không trùng với UI_COMMAND khác.
Tại client ta check UI_COMMAND như sau:
Xét hàm PreLoad, ta sẽ khai báo thêm 1 dòng sử dụng chức năng UI_COMMAND cho nó như sau:
Code:this:RegisterEvent("UI_COMMAND")
Xét hàm OnEvent, ta sẽ kiểm tra như sau
Code:if event == "UI_COMMAND" and tonumber(arg0) == x then local z=Get_XParam_INT(0) local y=Get_XParam_String(1) end
Ngoài ra bạn cũng có thể truyền UI_COMMAND từ file Lua khác bên Client qua bằng cấu trúc
Code:PushEvent("UI_COMMAND",x,Danh_sách_các_tham_biến_cần_truyền)
Vậy là xong việc truyền dữ liệu từ SV lên, bây giờ ta quan tâm truyền dữ liệu từ Client về Sv nhé.
Đó chính là cái XScript. Cấu trúc như sau
Code:Clear_XSCRIPT(); Set_XSCRIPT_Function_Name("Tên_hàm_thao_tác_tại_SV") Set_XSCRIPT_ScriptID(ID_Script_thao_tác) Set_XSCRIPT_Parameter(0,x) Set_XSCRIPT_Parameter(1,y) ... Set_XSCRIPT_Parameter(n,z) Set_XSCRIPT_ParamCount(n+1) Send_XSCRIPT()
Tùy mục đích bạn sử dụng nó như thế nào.
Một chú ý là cái hàm kia bạn phải khai báo nó trong tlbb/Server/Config/AllowableScriptFunc.txt nếu không nó sẽ diss ngay. Cái này đơn giản để chống hack thôi mà.
Chú ý cuối cùng là UI_COMMAND khi gọi từ SV lên nếu gọi nhiều cái cùng lúc thì nó chỉ thực hiện cái UI_COMMAND cuối cùng thôi nhé. Mình cũng không hiểu vì sao. Còn XScript thì bạn truyền vô tư nhiều cái 1 lúc không sao.
Và trong code hạn chế việc chuyển dữ liệu qua lại sv và client nhé nó đỡ lag SV hơn.
Với các thứ trên bạn hoàn toàn fake được vài thứ rồi đấy.
Nếu bạn học qua lập trình Java thì bạn sẽ hiểu vai trò của xml file. Nó để dựng khung giao diện và bắt các sự kiện khi người dùng thao tác vào đâu đó. Nói cái này để bạn hiểu mấy cái hàm trong Lua tại Client ấy để khi edit bị lỗi còn xem lại.
Ngoài ra để khai báo 1 file Lua nào bên Client ta khai báo trong file InterfaceEx.txt trong Config.axp. Bạn cũng nên biết qua về xml thì bạn sẽ rõ hoạt động của file Lua tại Interface. Thông thường khi copy file từ đâu đó vào ví dụ của FPT qua bị lỗi thì ngoài Lua file bạn cũng nên để ý cái xml này.
--- Chế độ gộp bài viết ---
Trong Script còn một phần là script nhiệm vụ (Mission) thì mình sẽ không hướng dẫn vì nó khá giống cơ chế hoạt động của script event (giống cơ chế thôi nhé) và các bạn nên tự tìm hiểu. Mấy cái script có sẵn như Q tại thành đại lý là thứ bạn cần đó...
OK vậy là mình đã tổng hợp hết các thứ liên quan đến code theo mình biết. Ai có ý kiến hoặc bổ sung gì hãy comment bên dưới để bài hướng dẫn này hoàn chỉnh hơn nhé!
Thân!Lần sửa cuối bởi Sói Đẹp Trai, ngày 11-01-15 lúc 05:34 AM.
Khách viếng thăm hãy cùng Sói Đẹp Trai xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
-
11-01-15, 05:39 AM #5
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,063 Times in 1,403 Posts
Ðề: Lua in TLBB
Bonus vài thứ bạn có thể làm đc theo cái guild trên, tất nhiên còn phải đọc thêm nhiều nguồn khác nữa.
Event Thiếu thất, sát tinh, tứ tuyệt, tàng kinh chuẩn FPT (Tất nhiên code thôi còn dườm dà như design skill hay impact thì nó thuộc phần khác)
Tu luyện
Trang bị pet
NPC thao tác trang bị pet
Khách viếng thăm hãy cùng Sói Đẹp Trai xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
11-01-15, 12:01 PM #6
- Ngày tham gia
- Oct 2014
- Bài viết
- 32
- Thanks
- 63
- Thanked 2 Times in 2 Posts
Ðề: Lua in TLBB
cái phần truyền biến từ client về sever , ko truyền đc xâu về ...
Khách viếng thăm hãy cùng le_huy xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
11-01-15, 06:10 PM #7
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,063 Times in 1,403 Posts
Ðề: Lua in TLBB
Có truyền đc nhé bạn. Chỉ có điều độ dài bn thì mình ko nhớ thôi
Khách viếng thăm hãy cùng Sói Đẹp Trai xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
11-01-15, 10:17 PM #8
- Ngày tham gia
- Feb 2014
- Đang ở
- Còn lâu mới nói
- Bài viết
- 623
- Thanks
- 83
- Thanked 241 Times in 181 Posts
Ðề: Lua in TLBB
Khách viếng thăm hãy cùng songtu xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
11-01-15, 10:24 PM #9
- Ngày tham gia
- Feb 2014
- Đang ở
- Còn lâu mới nói
- Bài viết
- 623
- Thanks
- 83
- Thanked 241 Times in 181 Posts
Ðề: Lua in TLBB
à muốn hỏi bạn Sói thêm 1 cái, cai giang hồ chỉ nam ở trong commont item nó ko quy đinh script thì tìm script cho nó sao nhể?
Khách viếng thăm hãy cùng songtu xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
12-01-15, 04:44 PM #10
- Ngày tham gia
- Jan 2014
- Đang ở
- LA
- Bài viết
- 1,232
- Thanks
- 286
- Thanked 1,097 Times in 474 Posts
Khách viếng thăm hãy cùng makute7413 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
Các Chủ đề tương tự
-
[TLBB] Ai share cho mình 1 sever tlbb hay và giống với tlbb hiện nay được hem
Bởi toloveru trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 10Bài viết cuối: 15-06-12, 07:43 PM -
[TLBB] Hướng dẫn sưa lỗi tlbb Server TLBB UPLOAD BY HAHOANG
Bởi manhulong trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 3Bài viết cuối: 09-06-12, 04:09 PM -
Xin hướng dẫn đưa tlbb lên online và cách tạo acc với web tlbb
Bởi duongst1 trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 5Bài viết cuối: 01-07-11, 10:22 PM -
Ai có tlbb bản full TLBB 1.0 việt hoá share dùm em ^^
Bởi hoangtoa7 trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 2Bài viết cuối: 11-01-11, 08:48 PM -
lỗi giải nén bộ SV TLBB khi cài TLBB offline
Bởi dongthaison123 trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 6Bài viết cuối: 06-01-11, 09:23 PM