Trong Mini World, chúng ta đã có sẵn nhiều sự kiện được định nghĩa trước. Nhưng nếu muốn tạo ra một cấp độ phức tạp hơn, sâu hơn cho các đoạn mã của mình thì sao? Câu trả lời là: ta có thể tạo sự kiện tùy chỉnh (custom event) và Listen sự kiện đó. Việc này giúp mã của bạn trở nên linh hoạt hơn, dễ quản lý hơn và tránh được những logic rối rắm, phức tạp nếu chỉ sử dụng các sự kiện mặc định.
Việc tạo sự kiện tùy chỉnh rất hữu ích khi bạn làm việc với người khác, vì không cần phải gộp tất cả biến và hàm vào một script duy nhất. Thay vào đó, bạn có thể chia nhỏ script và chỉ cần “gọi” hoặc “lắng nghe” sự kiện từ các phần khác nhau.
Để tạo sự kiện tùy chỉnh, ta sử dụng phương thức:
Game:dispatchEvent(msg: string, customdata: any)
Trong đó:
Script lắng nghe sự kiện:
function myEventFunction() Chat:sendSystemMsg("Sự kiện của tôi đã được kích hoạt!", 0) end ScriptSupportEvent:registerEvent("myEvent", myEventFunction)
Script phát sự kiện:
function GameStart() Game:dispatchEvent("myEvent", {}) threadpool:wait(5) end ScriptSupportEvent:registerEvent([=[Game.Start]=], GameStart)
Chúng ta sẽ tạo 2 script:
Script gửi dữ liệu (Sender Script):
function GameStart() print("Kiểm tra CustomEvent") local data = {Sent = "Yes", Uid = 123456789} local success, result = pcall(JSON.encode, JSON, data) if not success then print("Đã xảy ra lỗi.") print(result) else print("Mã hóa JSON thành công.") local ret = Game:dispatchEvent("myEvent", {customdata = result}) end end ScriptSupportEvent:registerEvent([=[Game.Start]=], GameStart)
Script nhận dữ liệu (Receiver Script):
function myEventFunction(params) Chat:sendSystemMsg("Sự kiện của tôi đã được kích hoạt!", 0) Chat:sendSystemMsg("Thông tin nhận được: ".. params.CurEventParam.CloudValue.Sent, 0) end ScriptSupportEvent:registerEvent("myEvent", myEventFunction)
📝 Lưu ý:
Để lấy dữ liệu được gửi kèm theo sự kiện, bạn dùng cú pháp sau:
params.CurEventParam.CloudValue.TênBiến
Với cách này, bạn có thể dễ dàng mở rộng kịch bản, chia tách logic phức tạp thành các phần nhỏ hơn, dễ đọc và dễ bảo trì hơn. Đây cũng là một cách rất hiệu quả khi làm việc nhóm trong các dự án map phức tạp hoặc game logic nhiều tầng trong Mini World.