======Kịch bản Khu vực cấm phá khối & Khu vực cho phép phá khối====== **Mở rộng:[[script:feature:Extend Block breaking prohibited/allowed areas| Kịch bản - Nhóm khu vực cấm phá khối & Nhóm khu vực cho phép phá khối]]** ====Chức năng==== * Kịch bản khu vực cấm phá khối [Video_1] * Kịch bản khu vực cho phép phá khối [Video_2] **Chú ý:**\\ - Chức năng không có tác dụng với các trường hợp đặc biệt khác ( Ví dụ: Khối bị phá do phát nổ, kĩ năng công cụ, độ ổn điịnh chức năng, ... ). ---- ====Khái quát cơ chế==== * Khu vực cấm phá khối - Người chơi chỉ có thể phá khối ngoài khu vực được định nghĩa bởi Area:createAreaRectByRange. Nếu người chơi phá khối ở trong khu vực, hành động đào sẽ bị vô hiệu hoá. * Khu vực cho phép phá khối - Người chơi chỉ có thể phá khối trong khu vực được định nghĩa bởi Area:createAreaRectByRange. Nếu người chơi phá khối ở ngoài khu vực, hành động đào sẽ bị vô hiệu hoá. ====Giải thích các dòng lệnh==== * Tạo khu vực chữ nhật trong bản đồ local ret, areaid = Area:createAreaRectByRange({x=20, y=6, z=0}, {x=8, y=8, z=12}) * Mô tả: Dòng này tạo một khu vực hình chữ nhật trong không gian 3D. Khu vực được xác định bởi hai điểm đối diện nhau: * Ví dụ: {x=20, y=6, z=0} và {x=8, y=8, z=12}. * Tham số: * x, y, z: Toạ độ trong không gian. * Hàm trả về hai giá trị: * ret: Kết quả thực thi. * areaid: ID của khu vực đã tạo, dùng để tham chiếu sau này. ---- ====Định nghĩa hàm xử lý sự kiện đào==== local function digb(e) if Area:posInArea({x=e.x, y=e.y, z=e.z}, areaid) == 0 then Player:setActionAttrState(e.eventobjid, 8, false) * Mô tả: * Hàm digb(e) được gọi khi người chơi bắt đầu đào một khối. * Tham số e: * e.x, e.y, e.z: Toạ độ của khối đang bị đào. * e.eventobjid: ID của đối tượng (người chơi) thực hiện hành động. * Hàm Area:posInArea kiểm tra xem vị trí khối đã đào có nằm trong khu vực areaid hay không. * Kết quả: * 0: Vị trí khối nằm trong khu vực. * Dựa vào kết quả, trạng thái hành động của người chơi được điều chỉnh: * setActionAttrState: * 8: Mã đại diện cho hành động "đào". * false: Vô hiệu hoá hành động đào. * true: Cho phép hành động đào. ---- * Đăng ký sự kiện ScriptSupportEvent:registerEvent('Block.Dig.Begin', digb) * Mô tả: Đăng ký hàm digb để kích hoạt khi sự kiện "Block.Dig.Begin" (người chơi bắt đầu đào khối) xảy ra. -Kịch Bản Tham Khảo * Chú ý: Kịch bản cần bổ sung các giá trị tọa độ cần thiết để hoạt động ---- ====Khu vực cấm phá khối==== local ret,areaid = Area:createAreaRectByRange({x= , y= , z= },{x= , y= , z= }) local function digb(e) if Area:posInArea({x=e.x, y=e.y, z=e.z}, areaid) == 0 then – Xác định được vị trí khối đã đào nằm trong khu vực Player:setActionAttrState(e.eventobjid, 8, false) else Player:setActionAttrState(e.eventobjid, 8, true) end end ScriptSupportEvent:registerEvent('Block.Dig.Begin', digb) ---- ====Khu vực cho phép phá khối==== local ret,areaid = Area:createAreaRectByRange({x= , y= , z= },{x= , y= , z= }) local function digb(e) if Area:posInArea({x=e.x, y=e.y, z=e.z}, areaid) == 0 then -- Xác định được vị trí khối đã đào nằm trong khu vực Player:setActionAttrState(e.eventobjid, 8, true) else Player:setActionAttrState(e.eventobjid, 8, false) end end ScriptSupportEvent:registerEvent('Block.Dig.Begin', digb) --- //Cre:**[[https://www.facebook.com/fb.ngkhanh.mc|Nguyễn Khánh]]** 2025/02/23 13:57// ---- 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