Công cụ thành viên

Công cụ trang web


script:feature:block_breaking_prohibited_allowed_areas

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