具体函数名及描述如下:
act = function()
local ret, hostid = Player:getHostUin()
local ret,num = Player:getCurShotcut(hostid)
if num == 0 then
--房主按下快捷栏1的时候,创建一个矩形区域,中心点是10.7.10,边长是5
local pos1 = {x = 3, y = 10 ,z = 8}
local dim = {x = 2, y = 2,z = 2}-- 注意这里的边长算法是x*x+1=实际边长
ret111, areaid = Area:createAreaRect(pos1, dim)
Area:fillBlock(areaid, 112) --用112这个方块填充区域
end
if num == 1 then
-- 房主按下快捷栏2的时候,把上面这个矩形复制到10.12.10位置(以右下角为原点,而不是中心点)
local pos2 = {x = 3 , y = 15 ,z = 8}
local ret = Area:cloneArea(areaid, pos2)
end
end
ScriptSupportEvent:registerEvent([=[Player.SelectShortcut]=], act)
--通过中心点和扩展长度创建一个区域
--第一个参数{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)
--通过起点终点坐标创建区域
--第一个参数为区域起点坐标组成的表,即面朝北时,区域的左、下、后方的顶点坐标
--第二个参数为区域终点坐标组成的表,即面朝北时,区域的右、上、前方的顶点坐标
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)
--销毁指定区域,参数为区域id
Area:destroyArea(1)
--在聊天框显示
Chat:sendSystemMsg("销毁了id为1的区域")
--判断某坐标所属的区域,参数为坐标组成的表
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
参数及类型:
返回值及类型:
该方法的主要作用:区域偏移
具体使用案例如下:
--创建一个区域
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格")
参数及类型:
返回值及类型:
该方法的主要作用:扩大区域(产生新的区域)
具体使用案例如下:
--创建一个区域
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格范围")
--创建一个区域
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..")")
--创建一个区域
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)
--创建一个区域
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..")")
--创建一个区域
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..")")
--创建一个区域
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
--创建一个区域
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
--创建一个区域
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
--创建一个区域
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
--创建一个区域
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
--创建一个区域
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.."被填充了基岩")
--创建一个区域
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.."内的所有土块")
--创建一个区域
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的位置,此坐标与区域起点对应")
参数及类型:
返回值及类型:
该方法的主要作用:传入两个坐标列表,得到相加后的位置
具体使用案例如下:
local function ClickBlock(event)
local srcpos={x=event.x,y=event.y,z=event.z}--起点坐标,这里是被点击的坐标
local dim={x=10,y=10,z=10}--偏移距离
--计算偏移后的坐标
local result,pos=Area:getPosOffset(srcpos, dim)
print(pos)--在日志输出
end
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=], ClickBlock)--点击方块
参数及类型:
返回值及类型:
该方法的主要作用:替换方块类型为新的方块类型
具体使用案例如下:
--创建一个区域
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.."内所有土块被替换为了基岩")
参数及类型:
返回值及类型:
该方法的主要作用:区域范围内有方块
具体使用案例如下:
--判断两点之前的范围内有没有某种方块
--第一个参数为方块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
参数及类型:
返回值及类型:
该方法的主要作用:获取区域范围内全部对象
具体使用案例如下:
local function ClickBlock(event)
local x,y,z=event.x,event.y,event.z--点击坐标
local posbegin={x=x-10,y=y-10,z=z-10}--起点
local posend={x=x+10,y=y+10,z=z+10}--终点
local objtype=1--对象类型,1是玩家
--获取范围内所有玩家
local result,objids=Area:getAllObjsInAreaRange(posbegin, posend, objtype)
Chat:sendSystemMsg("区域内共有".. #objids .."个玩家")--在聊天框显示玩家数量
end
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=], ClickBlock)--点击方块
参数及类型:
返回值及类型:
该方法的主要作用:获取区域范围内全部对象
具体使用案例如下:
local function ClickBlock(event)
local x,y,z=event.x,event.y,event.z--点击坐标
local posbegin={x=x-10,y=y-10,z=z-10}--起点
local posend={x=x+10,y=y+10,z=z+10}--终点
local objtypes={1,2}--对象类型,1是玩家,2是生物
--获取范围内所有玩家和生物
local result,objids=Area:getAllObjsInAreaRangeByObjTypes(posbegin, posend, objtypes)
Chat:sendSystemMsg("区域内共有".. #objids .."个玩家和生物")--在聊天框显示
end
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=], ClickBlock)--点击方块
参数及类型:
返回值及类型:
该方法的主要作用:获取区域范围内全部玩家
具体使用案例如下:
local function ClickBlock(event)
local x,y,z=event.x,event.y,event.z--点击坐标
local posbegin={x=x-10,y=y-10,z=z-10}--起点
local posend={x=x+10,y=y+10,z=z+10}--终点
--获取范围内所有玩家
local result,objids=Area:getAllPlayersInAreaRange(posbegin, posend)
Chat:sendSystemMsg("区域内共有".. #objids .."个玩家")--在聊天框显示
end
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=], ClickBlock)--点击方块
参数及类型:
返回值及类型:
该方法的主要作用:获取区域范围内全部生物
具体使用案例如下:
local function ClickBlock(event)
local x,y,z=event.x,event.y,event.z--点击坐标
local posbegin={x=x-10,y=y-10,z=z-10}--起点
local posend={x=x+10,y=y+10,z=z+10}--终点
--获取范围内所有生物
local result,objids=Area:getAllCreaturesInAreaRange(posbegin, posend)
Chat:sendSystemMsg("区域内共有".. #objids .."个生物")--在聊天框显示
end
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=], ClickBlock)--点击方块
参数及类型:
返回值及类型:
该方法的主要作用:用方块填充区域范围
具体使用案例如下:
--在两点之间的范围内填充某方块
--前两个参数为填充范围的起点和终点坐标组成的表
--第三个参数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的范围被填充了基岩")
参数及类型:
返回值及类型:
该方法的主要作用:清空区域范围内方块
具体使用案例如下:
--清空两点之间范围内的某方块
--前两个参数为范围的起点和终点坐标组成的表
--第三个参数为要清除的方块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范围内的土块")
参数及类型:
返回值及类型:
该方法的主要作用:复制区域范围内方块到另一个区域
具体使用案例如下:
--复制两点之间范围内的方块到另一位置
--前两个参数为范围的起点和终点坐标组成的表
--后一个参数为要复制到的范围起点坐标
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(以此为起点)")
参数及类型:
返回值及类型:
该方法的主要作用:替换区域范围方块
具体使用案例如下:
--替换两点之间范围内的某种方块为另一种方块
--前两个参数为范围的起点和终点坐标组成的表
--第三个参数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的范围内,所有的土块被替换为了基岩")
Area:DestroyBlockAreaRange({x=0,y=6,z=0},{x=5,y=7,z=5},100)