Công cụ thành viên

Công cụ trang web


script:feature:mini_world_api:how_to_create_custom_events

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 đó:

  • msg là tên của sự kiện tùy chỉnh bạn muốn tạo.
  • customdata là dữ liệu bạn muốn truyền kèm với sự kiện. Dữ liệu này phải được mã hóa dưới dạng JSON.

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 1: Gửi sự kiện.
  • Script 2: Nhận sự kiện và xử lý dữ liệu.

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.


script/feature/mini_world_api/how_to_create_custom_events.txt · Sửa đổi lần cuối: 2025/05/30 18:04 bởi leo