Mục lục

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 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 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ư

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

function GetBuff(params)
end
 ScriptSupportEvent:registerEvent([=[Player.AddBuff]=], FunctionToExecute) 
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 Trang chuỗi Luatargetuin 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 eventobjidbuffid. 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)

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 ifelse, 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