======Sử dụng sự kiện Mini API====== =====Sự kiện API là gì===== 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 **[[https://en.wikipedia.org/wiki/Event_(computing)#Event_handler|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ã =====Cách sử dụng sự kiện API===== Để 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 **[[developer_center:developer_editor:Script]]** 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 **[[https://www.lua.org/pil/5.html|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ư * ID của người chơi hoặc diễn viên đã kích hoạt sự kiện **(eventobjid)** * ID của người chơi hoặc diễn viên bị ảnh hưởng trực tiếp bởi sự kiện **(toobjid)** __Không áp dụng cho hầu hết các sự kiện__ * Các tham số của sự kiện =====Ví dụ===== 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**\\ * Đầu tiên, chúng ta định nghĩa một hàm và làm cho nó lấy các đối số đã được trả về function GetBuff(params) end * và chúng ta lấy hàm lắng nghe và thay thế EventName bằng sự kiện của chúng ta là **Player.AddBuff** ScriptSupportEvent:registerEvent([=[Player.AddBuff]=], FunctionToExecute) * và chúng ta thay thế **FunctionToExecute** bằng tên hàm của chúng ta là **GetBuff** ScriptSupportEvent:registerEvent([=[Player.AddBuff]=], GetBuff) =====Code trên sẽ trông giống như thế này:===== 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 **[[https://www.lua.org/pil/2.4.html|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']**.\\ =====Bây giờ Code sẽ trông như thế này:===== function GetBuff(params) Chat:sendChat("I just got a buff!", params.eventobjid) end ScriptSupportEvent:registerEvent([=[Player.AddBuff]=], GetBuff) * Bây giờ, nếu chúng ta thực hiện nó, nhân vật của chúng ta sẽ gửi tin nhắn khi nhận được bất kỳ buff nào! 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']\\ =====Code:===== 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 ----