Bạn có thể đã sử dụng các trigger nếu bạn đang học script và bạn có thể nói “Script thật khó”. Nhưng trên thực tế, nó thực sự giống với trigger, có các hàm lắng nghe các sự kiện, listening hoặc Listeners là gì trong lập trình, chúng là các chương trình hoặc các hàm cụ thể trong một chương trình chờ và phản hồi các sự kiện hoặc thông báo cụ thể. Nói cách khác. Đó là một hàm chờ một sự kiện và thực hiện một việc gì đó khi sự kiện đó xảy ra.
Đó là lý do tại sao tập lệnh và trình kích hoạt lại giống nhau, vì cả hai đều tuân theo cấu trúc
Sự kiện: Hàm Listener
Điều kiện: Điều kiện, toán tử quan hệ, toán tử logic, v.v.
Hành động: Thực thi mã
Để sử dụng sự kiện, người ta phải gọi hàm trong tập lệnh
ScriptSupportEvent:registerEvent([=[EventName]=],FunctionToExecute)
Khi chúng ta thay đổi EventName thành tên của sự kiện mà chúng ta muốn lắng nghe, bạn có thể tìm thấy danh sách sự kiện trong Kịch Bản và tham số FunctionToExecute là hàm mà chúng ta muốn thực thi khi sự kiện đó xảy ra (Thông tin thêm về hàm Lua Chương về hàm Lua)
👉 Hàm sẽ trả về một bảng có tất cả thông tin quan trọng như
Trong ví dụ này khi người chơi nhận được bất kỳ buff nào, người chơi nhận được buff sẽ gửi đến trò chuyện “Tôi nhận được buff!” đối với điều này, chúng ta có thể sử dụng sự kiện Player.AddBuff trả về eventobjid, tham số buffid
function GetBuff(params) end
ScriptSupportEvent:registerEvent([=[Player.AddBuff]=], FunctionToExecute)
ScriptSupportEvent:registerEvent([=[Player.AddBuff]=], GetBuff)
function GetBuff(params) end ScriptSupportEvent:registerEvent([=[Player.AddBuff]=], GetBuff)
Nhưng nếu chúng ta thực thi nó ngay bây giờ thì nó sẽ không làm gì cả, chúng ta cần thêm nhiều chức năng hơn và để khiến người chơi gửi tin nhắn vào cuộc trò chuyện, chúng ta có thể sử dụng phương thức Chat:sendChat(content, targetuin), phương thức này sẽ khiến người chơi gửi tin nhắn, đối số content là nội dung chúng ta muốn người chơi viết, trong ví dụ này, chúng ta sẽ sử dụng “I just got a buff” nhưng bạn có thể thay đổi thành bất kỳ nội dung nào bạn muốn, miễn là đó là một chuỗi (Thông tin thêm về chuỗi trong Trang chuỗi Lua và targetuin là uid của người chơi sẽ gửi tin nhắn, nhưng làm thế nào để chúng ta có được nó?
Câu trả lời là chúng ta cần sử dụng các tham số hàm tên biến (trong trường hợp này là params) và chúng ta có thể lấy chúng bằng params.paramname hoặc params['paramname'] chúng ta biết rằng Player.AddBuff cung cấp cho chúng ta eventobjid và buffid. Chúng ta muốn eventobjid nên chúng ta lấy nó dưới dạng params.eventobjid hoặc params['eventobjid'].
function GetBuff(params) Chat:sendChat("I just got a buff!", params.eventobjid) end ScriptSupportEvent:registerEvent([=[Player.AddBuff]=], GetBuff)
Tuyệt vời, nhưng nếu chúng ta muốn khi người chơi nhận được một buff cụ thể, người chơi sẽ gửi một tin nhắn, và khi người chơi nhận được một buff khác không phải là buff mà chúng ta muốn, chúng ta sẽ gửi một tin nhắn khác, chúng ta có thể thực hiện bằng cách sử dụng điều kiện if và else, chúng ta sẽ lấy id của buff mà chúng ta muốn bằng cách sử dụng thư viện id, chúng ta sẽ nhận được hai id khi chúng ta chọn bất kỳ buff nào, id đầu tiên là buffid và id thứ hai là bufflv nhưng điều này không quan trọng, vì vậy chúng ta thêm vào hàm GetBuff của mình một câu lệnh if để kiểm tra xem params.buffid == 40 (nếu người chơi nhận được buff có id là 40 thì thực thi đoạn mã này) và một câu lệnh else để gửi tin nhắn gốc của chúng ta
function GetBuff(params) if params.buffid == 40 then Chat:sendChat("I'm big now!", params.eventobjid) else Chat:sendChat("I just got a buff!", params.eventobjid) end end
Bây giờ, khi chúng ta thực thi trò chơi và nhận được bất kỳ buff nào, chúng ta sẽ nhận được thông báo gốc, nhưng nếu chúng ta nhận được buff mà chúng ta muốn, chúng ta sẽ gửi “Tôi lớn rồi!”, bây giờ, bạn có thể hỏi liệu có cách hiệu quả hơn để lấy các tham số không, và câu trả lời là CÓ! Chúng ta có thể khai báo một biến và sau đó sử dụng nó, mã sẽ trông như thế này và hoạt động giống nhau, nhưng chúng ta có thể sử dụng tên biến thay vì “params.paramname” hoặc “params['paramname']
function GetBuff(params) local curid = params.buffid local playerid = params.eventobjid if CurId == 40 then Chat:sendChat("I'm big now!", playerid) else Chat:sendChat("I just got a buff!", playerid) end end