Mục lục

Tạo sự kiện tùy chỉnh bằng Mini API

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.


Cách tạo sự kiện tùy chỉnh

Để tạo sự kiện tùy chỉnh, ta sử dụng phương thức:

Game:dispatchEvent(msg: string, customdata: any)

Trong đó:


Ví dụ 1: Tạo sự kiện tùy chỉnh (không truyền dữ liệu)

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)

Ví dụ 2: Tạo sự kiện tùy chỉnh (có truyền dữ liệu)

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.