# 区域管理接口 Area

在使用区域接口前需先创建区域管理对象,方法如下:(此处已废弃)

local Area = class.Area.new()

具体函数名及描述如下:

序号 函数名 函数描述
1 createAreaRect(...) 创建矩形区域
2 createAreaRectByRange(...) 创建矩形区域(通过范围)
3 destroyArea(...) 销毁区域
4 getAreaByPos(...) 通过位置查找区域
5 offsetArea(...) 区域偏移
6 expandArea(...) 扩大区域
7 getAreaCenter(...) 获取区域中间点
8 getAreaRectLength(...) 获取区域各边长
9 getAreaRectRange(...) 获取区域范围
10 getRandomPos(...) 随机区域内位置
11 objInArea(...) 检测obj是否在区域内
12 blockInArea(...) 检测区域内是否有某个方块
13 posInArea(...) 位置是否再区域内
14 getAreaPlayers(...) 获取区域中的所有玩家
15 getAreaCreatures(...) 获取区域中的所有生物
16 fillBlock(...) 用方块填充区域
17 clearAllBlock(...) 清空区域内全部方块
18 cloneArea(...) 复制区域内方块到另一个区域
19 getPosOffset(...) 获取位置的偏移距离
20 replaceAreaBlock(...) 替换方块类型为新的方块类型
21 blockInAreaRange(...) 检测两个位置范围内有方块
22 getAllObjsInAreaRange(...) 获取区域范围内全部对象
23 getAllObjsInAreaRangeByObjTypes(...) 获取区域范围内全部对象
24 getAllPlayersInAreaRange(...) 获取区域范围内全部玩家
25 getAllCreaturesInAreaRange(...) 获取区域范围内全部生物
26 fillBlockAreaRange(...) 用方块填充区域范围
27 clearAllBlockAreaRange(...) 清空区域范围内方块
28 DestroyBlockAreaRange(...) 删除区域范围内方块
29 cloneAreaRange(...) 复制区域范围内方块到另一个区域
30 replaceAreaRangeBlock(...) 替换区域范围方块

# createAreaRect

  • 参数及类型:
    • pos:table区域中心位置
    • dim:table区域的长宽高
  • 返回值及类型:
  • 该方法的主要作用: 创建矩形区域
  • 具体使用案例如下:
--通过中心点和扩展长度创建一个区域
--第一个参数{x=0,y=10,z=0}为区域中心坐标组成的表
--第二个参数{x=1,y=2,z=3}为区域各方向扩展的距离组成的表
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=1,y=2,z=3})
--在聊天框显示
Chat:sendSystemMsg("以(0,0)高度10为中心,左右各扩展1格,上下各扩展2格,前后各扩展3格,创建了一个区域,id为"..areaid)

# createAreaRectByRange

  • 参数及类型:
    • posBeg:table区域起始坐标
    • posEnd:table区域结束坐标
  • 返回值及类型:
  • 该方法的主要作用: 创建矩形区域(通过范围)
  • 具体使用案例如下:
--通过起点终点坐标创建区域
--第一个参数为区域起点坐标组成的表,即面朝北时,区域的左、下、后方的顶点坐标
--第二个参数为区域终点坐标组成的表,即面朝北时,区域的右、上、前方的顶点坐标
local result,areaid=Area:createAreaRectByRange({x=0,y=7,z=0},{x=5,y=10,z=5})
--在聊天框显示
Chat:sendSystemMsg("以(0,0)高度7为起点,(5,5)高度10为终点创建一个区域,id为"..areaid)

# destroyArea

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 销毁区域
  • 具体使用案例如下:
--销毁指定区域,参数为区域id
Area:destroyArea(1)
--在聊天框显示
Chat:sendSystemMsg("销毁了id为1的区域")

# getAreaByPos

  • 参数及类型:
    • pos:table区域中心位置
  • 返回值及类型:
  • 该方法的主要作用: 通过位置查找区域
  • 具体使用案例如下:
--判断某坐标所属的区域,参数为坐标组成的表
local result,areaid=Area:getAreaByPos({x=0,y=7,z=0})
if result==0 then--如果获取成功
	--在聊天框显示
	Chat:sendSystemMsg("(0,0)高度7所在的区域id为"..areaid)
else--如果获取失败
	--在聊天框显示
	Chat:sendSystemMsg("获取失败,或(0,0)高度7不属于任何区域")
end

# offsetArea

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 区域偏移
  • 具体使用案例如下:
--创建一个区域
local result,areaid = Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--平移区域范围
--第一个参数为要平移的区域id
--后三个参数分别为向右、上、前的平移距离,可为负
Area:offsetArea(areaid,5,5,5)
--在聊天框显示
Chat:sendSystemMsg("id为"..areaid.."的区域被向右、上、前各移动了5格")

# expandArea

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 扩大区域
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--扩充区域范围
--第一个参数为区域id
--后三个参数分别为区域向左右、上下、前后扩充的距离
Area:expandArea(areaid,2,2,2)
--在聊天框显示
Chat:sendSystemMsg("id为"..areaid.."的区域向左右、上下、前后各扩充了2格范围")

# getAreaCenter

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 获取区域中间点
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--获取指定区域的中心坐标,参数为要获取中心的区域id
local result,pos=Area:getAreaCenter(areaid)
--在聊天框显示
Chat:sendSystemMsg("id为"..areaid.."的区域的中心点坐标为:("..pos.x..","..pos.y..","..pos.z..")")

# getAreaRectLength

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 获取区域各边长
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--获取指定区域各方向的边长,参数为区域id
local result,x,y,z=Area:getAreaRectLength(areaid)
--在聊天框显示
Chat:sendSystemMsg("id为"..areaid.."的区域各方向的边长为:左右"..x..",上下"..y..",前后"..z)

# getAreaRectRange

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 获取区域范围
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--获取指定区域的起点和终点坐标,参数为区域id
local result,posBeg,posEnd=Area:getAreaRectRange(areaid)
--在聊天框显示
Chat:sendSystemMsg("id为"..areaid.."的区域的起点坐标为("..posBeg.x..","..posBeg.y..","..posBeg.z.."),终点坐标为("..posEnd.x..","..posEnd.y..","..posEnd.z..")")

# getRandomPos

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 随机区域内位置
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--从指定区域中随机获取一个坐标,参数为区域id
local result,pos=Area:getRandomPos(areaid)
--在聊天框显示
Chat:sendSystemMsg("从id为"..areaid.."的区域中随机获取了一个坐标("..pos.x..","..pos.y..","..pos.z..")")

# objInArea

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 检测obj是否在区域内
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--判断某对象是否在指定区域中
--第一个参数为区域id
--第二个参数为对象id,可以是玩家迷你号、生物id或掉落物id等等
local result=Area:objInArea(areaid,1000)
if result==0 then--如果在区域内
	--在聊天框显示
	Chat:sendSystemMsg("玩家1000在区域"..areaid.."内部")
else--如果不在内部或获取失败
	--在聊天框显示
	Chat:sendSystemMsg("玩家1000不在区域"..areaid.."内部,或玩家1000不在当前存档")
end

# blockInArea

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 检测区域内是否有某个方块
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--判断指定区域是否包含某种方块
--第一个参数为区域id
--第二个参数为方块id
local result=Area:blockInArea(areaid,101)
if result==0 then--如果包含
	--在聊天框显示
	Chat:sendSystemMsg("id为"..areaid.."的区域内有土块")
else--如果不包含
	--在聊天框显示
	Chat:sendSystemMsg("id为"..areaid.."的区域内没有土块")
end

# posInArea

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 位置是否再区域内
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--判断某坐标是否在指定区域内
--第一个参数为要判断的坐标组成的表
--第二个参数为区域id
local result=Area:posInArea({x=0,y=7,z=0},areaid)
if result==0 then--如果在内部
	--在聊天框显示
	Chat:sendSystemMsg("(0,0)高度7的位置在id为"..areaid.."的区域内")
else--如果不在内部
	--在聊天框显示
	Chat:sendSystemMsg("(0,0)高度7的位置不在id为"..areaid.."的区域内")
end

# getAreaPlayers

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 获取区域中的所有玩家
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--获取区域内的玩家列表,参数为区域id
local result,playerlist=Area:getAreaPlayers(areaid)
if #playerlist>0 then--如果区域内存在玩家
	for i,a in ipairs(playerlist) do
		--在聊天框显示列表
		Chat:sendSystemMsg("区域"..areaid.."内第"..i.."个玩家:"..a)
	end
else--如果区域内不存在玩家
	--在聊天框显示
	Chat:sendSystemMsg("区域"..areaid.."内没有玩家")
end

# getAreaCreatures

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 获取区域中的所有生物
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--获取区域内的生物列表,参数为区域id
local result,creaturelist=Area:getAreaCreatures(areaid)
if #creaturelist>0 then--如果区域内存在生物
	for i,a in ipairs(creaturelist) do
		--在聊天框显示列表
		Chat:sendSystemMsg("区域"..areaid.."内第"..i.."个生物:"..a)
	end
else--如果区域内不存在生物
	--在聊天框显示
	Chat:sendSystemMsg("区域"..areaid.."内没有生物")
end

# fillBlock

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 用方块填充区域
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=3,y=3,z=3})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展3格的区域,区域id为"..areaid)
--用方块填充指定区域
--第一个参数为区域id
--第二个参数为要填充的方块id,1为基岩
--第三个参数为方块朝向:0西 1东 2南 3北 4下 5上
Area:fillBlock(areaid,1,0)
--在聊天框显示
Chat:sendSystemMsg("区域"..areaid.."被填充了基岩")

# clearAllBlock

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 清空区域内全部方块
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--清空指定区域内的指定方块
--第一个参数为区域id
--第二个参数为要清除的方块id
Area:clearAllBlock(areaid,101)
--在聊天框显示
Chat:sendSystemMsg("清空了区域"..areaid.."内的所有土块")

# cloneArea

  • 参数及类型:
    • areaid:number区域唯一ID
    • deststartpos:table目标起始位置
  • 返回值及类型:
  • 该方法的主要作用: 复制区域内方块到另一个区域
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--复制区域内的方块到另一位置
--第一个参数为要复制的区域id
--第二个参数为要复制到的起点坐标组成的表
Area:cloneArea(areaid,{x=0,y=10,z=0})
--在聊天框显示
Chat:sendSystemMsg("把区域"..areaid.."内的所有方块复制到了(0,0)高度10的位置,此坐标与区域起点对应")

# getPosOffset

  • 参数及类型:
    • srcpos:table方块坐标位置
    • dim:tablexyz方向上的偏移量
  • 返回值及类型:
  • 该方法的主要作用: 获取位置的偏移距离
  • 具体使用案例如下:
local code, pos = Area:getPosOffset(srcpos, dim)
if code == ErrorCode.OK then
	print('执行成功', code, pos )
else
	print('执行失败')
end

# replaceAreaBlock

  • 参数及类型:
    • areaid:number区域唯一ID
    • srcblockid:number区域内的方块类型
    • destblockid:number替换的方块类型
    • face:number方块朝向
  • 返回值及类型:
  • 该方法的主要作用: 替换方块类型为新的方块类型
  • 具体使用案例如下:
--创建一个区域
local result,areaid=Area:createAreaRect({x=0,y=10,z=0},{x=30,y=30,z=30})
--在聊天框显示
Chat:sendSystemMsg("创建了以(0,0)高度10为中心,向左右上下前后各扩展30格的区域,区域id为"..areaid)
--把指定区域内的一种方块替换成新的方块
--第一个参数为区域id
--第二个参数为要替换掉的方块id,101是土块
--第三个参数为要替换为的方块id,1是地心基石
--最后一个参数为方块朝向:0西 1东 2南 3北 4下 5上
Area:replaceAreaBlock(areaid,101,1,0)
--在聊天框显示
Chat:sendSystemMsg("区域"..areaid.."内所有土块被替换为了基岩")

# blockInAreaRange

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 检测两个位置范围内有方块
  • 具体使用案例如下:
--判断两点之前的范围内有没有某种方块
--第一个参数为方块id,101是土块
--后两个参数分别是范围起点和终点坐标组成的表
local result=Area:blockInAreaRange(101,{x=0,y=5,z=0},{x=1,y=8,z=1})
if result==0 then--如果包含
	--在聊天框显示
	Chat:sendSystemMsg("在(0,0)高度5到(1,1)高度8的范围内有土块")
else--如果不包含
	--在聊天框显示
	Chat:sendSystemMsg("在(0,0)高度5到(1,1)高度8的范围内没有土块")
end

# getAllObjsInAreaRange

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 获取区域范围内全部对象
  • 具体使用案例如下:
local code, objs = Area:getAllObjsInAreaRange(posbeg, posend, objtype)
if code == ErrorCode.OK then
	print('执行成功', code, objs )
else
	print('执行失败')
end

# getAllObjsInAreaRangeByObjTypes

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 获取区域范围内全部对象
  • 具体使用案例如下:
local code, objs = Area:getAllObjsInAreaRangeByObjTypes(posbeg, posend, objtypes)
if code == ErrorCode.OK then
	print('执行成功', code, objs )
else
	print('执行失败')
end

# getAllPlayersInAreaRange

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 获取区域范围内全部玩家
  • 具体使用案例如下:
local code, objs = Area:getAllPlayersInAreaRange(posbeg, posend)
if code == ErrorCode.OK then
	print('执行成功', code, objs )
else
	print('执行失败')
end

# getAllCreaturesInAreaRange

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 获取区域范围内全部生物
  • 具体使用案例如下:
local code, objs = Area:getAllCreaturesInAreaRange(posbeg, posend)
if code == ErrorCode.OK then
	print('执行成功', code, objs )
else
	print('执行失败')
end

# fillBlockAreaRange

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 用方块填充区域范围
  • 具体使用案例如下:
--在两点之间的范围内填充某方块
--前两个参数为填充范围的起点和终点坐标组成的表
--第三个参数1为要填充的方块id,1是地心基石
--第四个参数0为方块朝向:0西 1东 2南 3北 4下 5上
Area:fillBlockAreaRange({x=0,y=7,z=0},{x=5,y=9,z=5},1,0)
--在聊天框显示
Chat:sendSystemMsg("从(0,0)高度7到(5,5)高度9的范围被填充了基岩")

# clearAllBlockAreaRange

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 清空区域范围内方块
  • 具体使用案例如下:
--清空两点之间范围内的某方块
--前两个参数为范围的起点和终点坐标组成的表
--第三个参数为要清除的方块id,101是土块
Area:clearAllBlockAreaRange({x=0,y=7,z=0},{x=5,y=9,z=5},101)
--在聊天框显示
Chat:sendSystemMsg("清空了(0,0)高度7到(5,5)高度9范围内的土块")

# DestroyBlockAreaRange

  • 参数及类型:
  • 返回值及类型:
  • 该方法的主要作用: 删除区域范围内方块
  • 具体使用案例如下:
local code = Area:DestroyBlockAreaRange(posbeg, posend, blockid)
if code == ErrorCode.OK then
	print('执行成功', code )
else
	print('执行失败')
end

# cloneAreaRange

  • 参数及类型:
    • posbeg:table起始位置
    • posend:table末点位置
    • deststartpos:table目标起始位置
  • 返回值及类型:
  • 该方法的主要作用: 复制区域范围内方块到另一个区域
  • 具体使用案例如下:
--复制两点之间范围内的方块到另一位置
--前两个参数为范围的起点和终点坐标组成的表
--后一个参数为要复制到的范围起点坐标
Area:cloneAreaRange({x=0,y=3,z=0},{x=5,y=7,z=5},{x=0,y=10,z=0})
--在聊天框显示
Chat:sendSystemMsg("把(0,0)高度3到(5,5)高度7范围内的方块复制到了(0,0)高度10(以此为起点)")

# replaceAreaRangeBlock

  • 参数及类型:
    • posbeg:table起始位置
    • posend:table末点位置
    • srcblockid:number方块类型
    • destblockid:number目标方块类型
    • face:number朝向
    • inair:number是否包括空气方块
  • 返回值及类型:
  • 该方法的主要作用: 替换区域范围方块
  • 具体使用案例如下:
--替换两点之间范围内的某种方块为另一种方块
--前两个参数为范围的起点和终点坐标组成的表
--第三个参数101为要替换掉的方块id,101是土块
--第四个参数为要替换为的方块id,1是地心基石
--最后一个参数为方块朝向:0西 1东 2南 3北 4下 5上
Area:replaceAreaRangeBlock({x=0,y=3,z=0},{x=5,y=7,z=5},101,1,0)
--在聊天框显示
Chat:sendSystemMsg("从(0,0)高度3到(5,5)高度7的范围内,所有的土块被替换为了基岩")
上次更新: 2023/5/10 15:09:30