script:feature:block_breaking_prohibited_allowed_areas
Mục lục
Kịch bản Khu vực cấm phá khối & 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: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
Mini World Developer Việt Nam chính thức của chúng tôi
script/feature/block_breaking_prohibited_allowed_areas.txt · Sửa đổi lần cuối: 2025/02/28 10:08 bởi leo