====== Kịch bản nhập lệnh dịch chuyển ======
====Kịch bản hoạt động====
{{ :script:feature:teleport_command_0.mp4?direct&400 |}}\\
* **CHÚ Ý: Chức năng mang tính tham khảo, có thể tạo các chức năng tối ưu, đa dạng hơn**\\
----
====Giới thiệu chức năng====
* Điều kiện bắt buộc kích hoạt lệnh: nội dung người chơi nhập khởi đầu phải có định dạng là ‘@tp ’ và kết thúc là 1 kí tự số. Các thông số vị trí được ngăn cách bởi dấu phẩy\\
**– Ví dụ về lệnh ( mẫu )\\
**@tp 02, 73, 08\\
@tp -8, 984, 84\\
@tp 85.5, 948.0, -49\\
====Giải thích các dòng chức năng====
* **Hàm phụ: kiem_tra_lenh(input)** – Hàm phụ kiểm tra > trả về thông số vị trí
for x_y_z in string.gmatch(string.sub(input, #cau_lenh_mac_dinh + 1), '([^,]+)') do
\\
* for x_y_z in string.gmatch(...) do
* Mục đích: Lặp qua từng phần tách ra từ chuỗi theo dấu phẩy.
* Các chức năng trong đó;
* string.sub(input, #cau_lenh_mac_dinh + 1) – Lấy chuỗi sau kí tự lệnh bắt buộc. Ví dụ ở đây là chuỗi ‘@tp ’ có 4 kí tự nên sẽ lấy từ kí tự thứ 5
* string.gmatch([chuỗi đã cắt], '([^,]+)') – Tìm tất cả các phần của chuỗi khớp với mẫu ‘([^,]+)'. Các kí tự được ngăn cách bởi dấu phẩy
if tonumber(x_y_z) then
\\
* Chuyển đổi chuỗi thành số. Với các kí tự không liên quan hàm sẽ ngay lập tức ngừng
* **Hàm chính: miniworld_tp(b) – Xử lý sự kiện khi người chơi nhập lệnh**
if string.match(b.content, '^@tp%s+.*%d$') then
\\
* Kiểm tra chuỗi được nhập có đúng định dạng bắt buộc không!
local nhom_x_y_z = kiem_tra_lenh(b.content)
\\
* Nếu đúng sẽ gửi chuỗi tới hàm phụ để kiểm tra thông số vị trí
if nhom_x_y_z and #nhom_x_y_z == 3 then
\\
* Giá trị trả về phải là bảng chứa đúng 3 thông số x, y, z không được thiếu hay thừa
Actor:setPosition(b.eventobjid, nhom_x_y_z[1], nhom_x_y_z[2], nhom_x_y_z[3])
\\
** => Nếu thoả mãn sẽ tiến hành dịch chuyển người chơi**
----
====Kịch Bản Tham Khảo:====
local cau_lenh_mac_dinh = '@tp ' -- Câu lệnh kích hoạt
local function kiem_tra_lenh(input)
local nhom_x_y_z = {}
-- Tách chuỗi theo dấu phẩy và kiểm tra số
for x_y_z in string.gmatch(string.sub(input, #cau_lenh_mac_dinh + 1), '([^,]+)') do
if tonumber(x_y_z) then
table.insert(nhom_x_y_z, tonumber(x_y_z)) -- Thêm thông số nếu thoả mãn là số
else
return false -- lập tức trả về giá trị SAI khi có thông số hỏng
end
end
return nhom_x_y_z -- Nếu không có thông số hỏng sẽ trả về bảng thông số
end
local function miniworld_tp(b)
-- Kiểm tra định dạng câu lệnh
if string.match(b.content, '^@tp%s+.*%d$') then
local nhom_x_y_z = kiem_tra_lenh(b.content) -- Kiểm tra thông số
if nhom_x_y_z and #nhom_x_y_z == 3 then -- Xác định thông số thoả mãn thuộc số và đủ 3 thông số
Actor:setPosition(b.eventobjid, nhom_x_y_z[1], nhom_x_y_z[2], nhom_x_y_z[3])
else
print('Câu lệnh không hợp lệ') -- Câu lệnh kiểm tra [ Nên xoá ]
end
end
end
ScriptSupportEvent:registerEvent('Player.InputContent', miniworld_tp)
\\
--- //Cre:**[[https://www.facebook.com/fb.ngkhanh.mc|Nguyễn Khánh]]** 2024/09/28 15:54//
----
Nếu bạn có bất kỳ câu hỏi nào về Chế Độ DEV Nâng Cao, vui lòng tham gia\\
**[[https://www.facebook.com/groups/miniworldvn.developer|Mini World Developer Việt Nam]]** chính thức của chúng tôi