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