以下内容是脚本实现的简单小功能,可以直接复制粘贴到游戏使用。有编程基础的小伙伴可以复制下来根据需求再做修改。如果想学习脚本、自己写脚本,或者没有编程基础又想修改功能的小伙伴,可参考《lua语言教程》和《迷你世界脚本教程》,不需要任何基础也能学会自己写脚本~
local x0,y0,z0=0,7,0--范围起点坐标(面朝N,左后下的角)
local x1,y1,z1=10,12,10--范围终点坐标(面朝N,右前上的角)
local x,y,z=nil,nil,nil--随机生成的基石坐标
local function run(e)--创建一个名字为run、入口(参数)为e的盒子(函数)
if x~=nil then--如果已经有了基石坐标,证明基石已经生成过了一次
Block:destroyBlock(x,y,z,false)--就把生成的基石破坏掉
end--结束判断
x=math.random(x0,x1)--在x0到x1之间随机生成一个数字
y=math.random(y0,y1)--在y0到y1之间随机生成一个数字
z=math.random(z0,z1)--在z0到z1之间随机生成一个数字
Block:setBlockAll(x,y,z,1,0)--在(x,z)高度y的位置生成基石
end--关闭盒子(函数)run
--下面是添加事件,游戏每运行1秒都打开盒子run(执行函数run)
ScriptSupportEvent:registerEvent([=[Game.RunTime]=],run)
local function pcb(e)--创建一个名字为pcb、入口(参数)为e的盒子(函数)
--破坏掉位于(e.x,e.z)高度e.y的方块并掉落
Block:destroyBlock(e.x,e.y,e.z,true)
end--关闭盒子(函数)pcb
--下面是添加事件,每当玩家点击方块都打开盒子pcb(执行函数pcb)
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=],pcb)
local function pcb(e)--创建一个名字为pcb、入口(参数)为e的盒子(函数)
--如果入口(参数)表格e中的blockid等于230(被点击的方块id)
if e.blockid==230 then
Block:destroyBlock(e.x,e.y,e.z,false)--就破坏掉这个方块
local r,x,y,z=Actor:getPosition(e.eventobjid)--获取玩家位置
local dx,dz=x-e.x,z-e.z--计算玩家相对于南瓜的坐标
--如果玩家在南瓜的东面,就向西一格生成南瓜
if (dx>0)and(dx>dz)and(dx>-dz) then
Block:setBlockAll(e.x-1,e.y,e.z,230,0)
--如果玩家在南瓜的北面,就向南一格生成南瓜
elseif (dz>0)and(dz>dx)and(dz>-dx) then
Block:setBlockAll(e.x,e.y,e.z-1,230,0)
--如果玩家在南瓜的西面,就向东一格生成南瓜
elseif (dx<0)and(dx<dz)and(dx<-dz) then
Block:setBlockAll(e.x+1,e.y,e.z,230,0)
--否则,就向北一格生成南瓜
else
Block:setBlockAll(e.x,e.y,e.z+1,230,0)
end--结束玩家和南瓜方位的判断
end--结束被点击的方块id的判断
end--关闭盒子(函数)pcb
--下面是添加事件,每当玩家点击方块都打开盒子pcb(执行函数pcb)
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=],pcb)
local h=7--让h等于7,岩浆面开始上升的初始高度
local function runtime(e)--创建一个名字为runtime、入口(参数)为e的盒子(函数)
--如果入口(参数)表格e中的second除以10的余数为0
--也就是游戏每运行10秒钟
if e.second%10==0 then
for i=0,5 do--让i从0到5
for j=0,5 do--让j从0到5
--在(i,j)高度h的位置生成岩浆
Block:setBlockAll(i,h,j,5,0)
end--结束j的循环
end--结束i的循环
h=h+1--让高度加1,下次生成岩浆就会升高一层
end--结束游戏运行时间的判断
end--关闭盒子(函数)runtime
--下面是添加事件,游戏每运行1秒都打开盒子run(执行函数run)
ScriptSupportEvent:registerEvent([=[Game.RunTime]=],runtime)
local function dig(e)--创建一个名字为dig、入口(参数)为e的盒子(函数)
--在(e.x,e.z)高度e.y的位置生成一个id为e.blockid的方块
--在这里的意思就是:在被挖掘的方块的位置,生成一个被挖掘的方块
Block:setBlockAll(e.x,e.y,e.z,e.blockid,0)
end--关闭盒子(函数)dig
--下面是添加事件,每当玩家完成了方块挖掘都会打开盒子dig(执行函数dig)
ScriptSupportEvent:registerEvent([=[Block.Dig.End]=],dig)
local function dig(e)--创建一个名字为dig、入口(参数)为e的盒子(函数)
--如果入口(参数)表格e中的blockid等于106
--即被挖掉的方块id是106(细沙块)
if e.blockid==106 then
--在被挖掘的位置上面一格生成一个掉落物
--掉落物id是100到1000之间的随机数
World:spawnItem(e.x,e.y+1,e.z,math.random(100,1000),1)
end--结束方块id的判断
end--关闭盒子(函数)dig
--下面是添加事件,每当玩家完成了方块挖掘都会打开盒子dig(执行函数dig)
ScriptSupportEvent:registerEvent([=[Block.Dig.End]=],dig)
local function digb(e)--创建一个名字为digb、入口(参数)为e的盒子(函数)
--如果入口(参数)表格e中,x在0到10之间,z在0到10之间
--在这里的意思就是:如果被挖掘的方块位置在(0,0)到(10,10)范围内
if (e.x>0)and(e.x<10)and(e.z>0)and(e.z<10) then
--就把当前挖掘方块的玩家设置为“不可破坏方块”
Player:setActionAttrState(e.eventobjid,8,false)
else
--否则就设置为“可以破坏方块”
Player:setActionAttrState(e.eventobjid,8,true)
end--结束被挖掘方块坐标的判断
end--关闭盒子(函数)digb
--下面是添加事件,每当玩家开始挖掘方块都会打开盒子digb(执行函数digb)
ScriptSupportEvent:registerEvent([=[Block.Dig.Begin]=],digb)
local function dig(e)--创建一个名字为dig、入口(参数)为e的盒子(函数)
--如果入口(参数)表格e中的blockid等于200
--即被挖掉的方块id是200(果木)
if e.blockid==200 then
--获取玩家手持物品的id
local r,id=Player:getCurToolID(e.eventobjid)
if id==11002 then--如果手持物品id为11002(石斧头)
for i=1,10 do--让i从1到10
--破坏掉被挖掘方块正上方第i格的方块(从1到10)
Block:destroyBlock(e.x,e.y+i,e.z,true)
end--结束i的循环
end--结束玩家手持物品的判断
end--结束被挖掘方块id的判断
end--关闭盒子(函数)dig
--下面是添加事件,每当玩家完成了方块挖掘都会打开盒子dig(执行函数dig)
ScriptSupportEvent:registerEvent([=[Block.Dig.End]=],dig)
local function f(e)--创建一个名字为f、入口(参数)为e的盒子(函数)
--把入口(参数)表格e里的x,y,z向下取一下整(即舍弃小数部分,只保留整数)
local x,y,z=math.floor(e.x),math.floor(e.y),math.floor(e.z)
--给位于(x,z)高度y处(即事件中的位置)的箱子添加被取走的物品
WorldContainer:addItemToContainer(x,y,z,e.itemid,e.itemnum)
end--关闭盒子(函数)f
--下面是添加事件,每当箱子里有物品被取走都会打开盒子f(执行函数f)
ScriptSupportEvent:registerEvent([=[Backpack.ItemTakeOut]=],f)
local function click(e)--创建一个名字为click、入口(参数)为e的盒子(函数)
local r,id=Block:getBlockID(e.x,e.y,e.z)--获取事件发生位置的方块id
if id==946 then--如果是946(红色陶花盆)
r,id=Player:getCurToolID(e.eventobjid)--获取玩家手持物品
--把玩家手持物品移除一个
Backpack:removeGridItemByItemID(e.eventobjid,id,1)
end--结束被点击方块id的判断
end--关闭盒子(函数)click
--下面是添加事件,每当玩家点击方块都会打开盒子click(执行函数click)
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=],click)
local obj={}--创建一个表格
local function crt(e)--创建一个名字为crt、入口(参数)为e的盒子(函数)
--如果入口(参数)表格e里的itemit等于12057
--即投掷物id是12057,圣诞雪球
if e.itemid==12057 then
--就把投掷雪球的玩家迷你号存到表格obj里面,名字是投掷物对象id
obj[e.toobjid]=e.eventobjid
end--结束投掷物id的判断
end--关闭盒子(函数)crt
--下面是添加事件,每当有玩家投掷物品都会打开盒子crt(执行函数crt)
ScriptSupportEvent:registerEvent([=[Missile.Create]=],crt)
local function hit(e)--创建一个名字为hit、入口(参数)为e的盒子(函数)
--e.eventobjid在这里就是落地或者击中生物的投掷物的对象id
--如果表格obj里有以这个对象id为名字的内容
--也就是这个投掷物是被迷你号为obj[e.eventobjid]的玩家抛出来的
if obj[e.eventobjid]~=nil then
--就把这个玩家传送到投掷物的落地点
Actor:setPosition(obj[e.eventobjid],e.x,e.y,e.z)
--把表格中的这个投掷物记录删掉(因为投掷物已经落地了)
obj[e.eventobjid]=nil
end--结束投掷物主人是否存在的判断
end--关闭盒子(函数)hit
--下面是添加事件,每当有投掷物击中方块或生物都会打开盒子hit(执行函数hit)
ScriptSupportEvent:registerEvent([=[Actor.Projectile.Hit]=],hit)
local function pus(e)--创建一个名字为pus、入口(参数)为e的盒子(函数)
if e.itemid==15002 then--如果玩家使用的道具id是15002(牛仔左轮)
--获取玩家朝向
local r,x,y,z=Actor:getFaceDirection(e.eventobjid)
--给玩家一个反方向的速度
Actor:appendSpeed(e.eventobjid,-x,-y,-z)
end--结束道具id的判断
end--关闭盒子(函数)pus
--下面是添加事件,每当玩家使用道具都会打开盒子pus(执行函数pus)
ScriptSupportEvent:registerEvent([=[Player.UseItem]=],pus)
local ps={}--创建一个表格ps,用来储存玩家偏移视角的持续次数
local function pus(e)--创建一个名字为pus、入口(参数)为e的盒子(函数)
if e.itemid==15002 then--如果玩家使用的道具id是15002(牛仔左轮)
ps[e.eventobjid]=10--设置当前玩家视角偏移的持续10次
end--结束道具id的判断
end--关闭盒子(函数)pus
--下面是添加事件,每当玩家使用道具都会打开盒子pus(执行函数pus)
ScriptSupportEvent:registerEvent([=[Player.UseItem]=],pus)
local function r()--创建一个名字为r、没有入口(参数)的盒子(函数)
for i,a in pairs(ps) do--让i,a分别遍历表格ps里的名字,内容
if a>0 then--如果a>0,说明玩家i还有偏移视角的次数
local r,a1=Actor:getFaceYaw(i)--获取玩家i的水平视角
local r,a2=Actor:getFacePitch(i)--获取玩家i的竖直视角
--设置玩家i视角向上偏移5度
Player:rotateCamera(i,a1+180,a2-5)
ps[i]=ps[i]-1--让玩家i的剩余偏移次数减1
else--否则(玩家已经没有偏移次数)
ps[i]=nil--从表格ps中移除玩家i
end--结束玩家是否还有偏移次数的判断
end--结束i,a的遍历循环
end--关闭盒子(函数)r
--下面是添加事件,游戏每运行0.05秒都会打开盒子r(执行函数r)
ScriptSupportEvent:registerEvent([=[Game.Run]=],r)
local function pus(e)--创建一个名字为pus、入口(参数)为e的盒子(函数)
if e.itemid==12005 then--如果使用的道具id是12005(能量剑)
local r,n,as=World:getAllPlayers(-1)--获取当前存档所有玩家
for i,a in pairs(as) do--让i,a遍历玩家列表
Actor:addBuff(a,50,4,60*20)--给玩家添加60秒4级回血buff
end--结束i,a的遍历循环
end--结束道具id的判断
end--关闭盒子(函数)pus
--下面是添加事件,每当玩家使用道具都会打开盒子pus(执行函数pus)
ScriptSupportEvent:registerEvent([=[Player.UseItem]=],pus)
local function pus(e)--创建一个名字为pus、入口(参数)为e的盒子(函数)
if e.itemid==12005 then--如果玩家使用的道具id是12005(钻石剑)
local r,x,y,z=Actor:getPosition(e.eventobjid)--获取玩家坐标
World:spawnCreature(x,y,z,3400,1)--在玩家所在坐标生成鸡
end--结束玩家使用道具的判断
end--关闭盒子(函数)pus
--下面是添加事件,每当玩家使用道具都会打开盒子pus(执行函数pus)
ScriptSupportEvent:registerEvent([=[Player.UseItem]=],pus)
local function cla(e)--创建一个名字为cla、入口(参数)为e的盒子(函数)
local r,s=Creature:getAttr(e.toobjid,21)--获取被点击生物的模型大小
--设置被点击生物的模型大小,比之前大0.2倍
Creature:setAttr(e.toobjid,21,s+0.2)
end--关闭盒子(函数)cla
--下面是添加事件,每当玩家点击生物都会打开盒子cla(执行函数cla)
ScriptSupportEvent:registerEvent([=[Player.ClickActor]=],cla)
local function coll(e)--创建一个名字为coll、入口(参数)为e的盒子(函数)
local r1=Actor:isPlayer(e.eventobjid)--获取碰撞物1是不是玩家
local r2=Actor:isPlayer(e.toobjid)--获取碰撞物2是不是玩家
if (r1==0)and(r2~=0) then--如果碰撞物1是玩家,2不是玩家
p1=e.eventobjid--让p1等于被碰撞的玩家迷你号
p2=e.toobjid--让p2等于被碰撞的生物对象id
elseif (r1~=0)and(r2==0) then--如果碰撞物1不是玩家,2是玩家
p1=e.toobjid--让p1等于被碰撞的玩家迷你号
p2=e.eventobjid--让p2等于被碰撞的生物对象id
end--结束碰撞物1和2所属类型的判断
local r,id=Creature:getActorID(p2)--获取碰撞生物的id
if id==3402 then--如果是3402(猪)
Actor:appendSpeed(p1,0,1,0)--就给碰撞的玩家加一个向上的速度
end--结束碰撞生物类型的判断
end--关闭盒子(函数)coll
--下面是添加事件,每当生物发生碰撞时都会打开盒子coll(执行函数coll)
ScriptSupportEvent:registerEvent([=[Actor.Collide]=],coll)
local function cla(e)--创建一个名字为cla、入口(参数)为e的盒子(函数)
local r,id=Creature:getActorID(e.toobjid)--获取被点击的生物id
if id==3402 then--如果是3402(猪)
local r,x,y,z=Actor:getPosition(e.toobjid)--获取被点击的生物坐标
--在被点击的生物坐标处随机生成一个掉落物,id在100到1000之间
World:spawnItem(x,y,z,math.random(100,1000),1)
end--结束被点击生物类型的判断
end--关闭盒子(函数)cla
--下面是添加事件,每当玩家点击生物时都会打开盒子cla(执行函数cla)
ScriptSupportEvent:registerEvent([=[Player.ClickActor]=],cla)
local function gah(e)--创建一个名字为gah、入口(参数)为e的盒子(函数)
if e.hour==12 then--如果游戏内时间到了12点
--获取当前存档所有玩家列表。n是数量,ps是列表
local r,n,ps=World:getAllPlayers(-1)
for i=1,n do--让i从1到n
local r,x,y,z=Actor:getPosition(ps[i])--获取第i个玩家的坐标
World:spawnCreature(x,y,z,3414,1)--坐标处生成一只团子
end--结束i的循环
end--结束游戏内时间的判断
end--关闭盒子(函数)gah
--下面是添加事件,每当游戏内时间到整点时都会打开盒子gah(执行函数gah)
ScriptSupportEvent:registerEvent([=[Game.Hour]=],gah)
local function cla(e)--创建一个名字为cla、入口(参数)为e的盒子(函数)
--杀死对象id为e.toobjid的生物,这里就是被点击的生物
Actor:killSelf(e.toobjid)
end--关闭盒子(函数)cla
--下面是添加事件,每当玩家点击生物时都会打开盒子cla(执行函数cla)
ScriptSupportEvent:registerEvent([=[Player.ClickActor]=],cla)
local function atc(e)--创建一个名字为atc、入口(参数)为e的盒子(函数)
--给对象id为e.toobjid的生物添加燃烧buff,这里就是被攻击的生物
Actor:addBuff(e.toobjid,200,2,30*20)
end--关闭盒子(函数)atc
--下面是添加事件,每当玩家攻击命中时都会打开盒子atc(执行函数atc)
ScriptSupportEvent:registerEvent([=[Player.AttackHit]=],atc)
local function pcu(e)--创建一个名字为pcu、入口(参数)为e的盒子(函数)
if e.itemid==12502 then--如果被消耗的道具id是12502(小麦面包)
--设置触发事件的玩家获胜
Player:setGameResults(e.eventobjid,1)
end--结束消耗道具id的判断
end--关闭盒子(函数)pcu
--下面是添加事件,每当玩家消耗道具都会打开盒子pcu(执行函数pcu)
ScriptSupportEvent:registerEvent([=[Player.ConsumeItem]=],pcu)
local function mob(e)--创建一个名字为mob、入口(参数)为e的盒子(函数)
local r,x,y,z=Actor:getPosition(e.eventobjid)--获取事件中玩家坐标
local r,id=Block:getBlockID(x,y-1,z)--获取玩家下面一格的方块id
if id==1 then--如果id等于1(基石)
Actor:killSelf(e.eventobjid)--杀死事件中的玩家
end--结束方块id的判断
end--关闭盒子(函数)mob
--下面是添加事件,每当玩家移动一格都会打开盒子mob(执行函数mob)
ScriptSupportEvent:registerEvent([=[Player.MoveOneBlockSize]=],mob)
local function mob(e)--创建一个名字为mob、入口(参数)为e的盒子(函数)
local r,x,y,z=Actor:getPosition(e.eventobjid)--获取事件中玩家坐标
local r,id=Block:getBlockID(x,y-1,z)--获取玩家下面一格的方块id
if id==230 then--如果id等于230(南瓜)
local r,hp=Player:getAttr(e.eventobjid,1)--获取玩家最大生命值
Player:setAttr(e.eventobjid,2,hp)--设置玩家生命值为最大
end--结束方块id的判断
end--关闭盒子(函数)mob
--下面是添加事件,每当玩家移动一格都会打开盒子mob(执行函数mob)
ScriptSupportEvent:registerEvent([=[Player.MoveOneBlockSize]=],mob)
local function plc(e)--创建一个名字为plc、入口(参数)为e的盒子(函数)
local r,team=Player:getTeam(e.eventobjid)--获取放置方块的玩家队伍
Team:addTeamScore(team,1)--给这个队伍加1分
end--关闭盒子(函数)plc
--下面是添加事件,每当玩家放置方块都会打开盒子plc(执行函数plc)
ScriptSupportEvent:registerEvent([=[Block.PlaceBy]=],plc)
local function pk(e)--创建一个名字为pk、入口(参数)为e的盒子(函数)
if e.vkey=="SPACE" then--如果被长按的按钮是空格(跳跃)
Actor:appendSpeed(e.eventobjid,0,1,0)--给玩家向上的速度
end--结束按钮的判断
end--关闭盒子(函数)pk
--下面是添加事件,每当玩家长按按钮都会打开盒子pk(执行函数pk)
ScriptSupportEvent:registerEvent([=[Player.InputKeyOnPress]=],pk)
local function pn(e)--创建一个名字为pn、入口(参数)为e的盒子(函数)
--设置进入游戏的玩家免疫掉落伤害
Actor:setImmuneType(e.eventobjid,7,true)
end--关闭盒子(函数)pn
--下面是添加事件,每当有玩家进入游戏都会打开盒子pn(执行函数pn)
ScriptSupportEvent:registerEvent([=[Game.AnyPlayer.EnterGame]=],pn)
local function pcu(e)--创建一个名字为pcu、入口(参数)为e的盒子(函数)
--在玩家背包里添加10个被消耗的道具
Backpack:addItem(e.eventobjid,e.itemid,10)
end--关闭盒子(函数)pcu
--下面是添加事件,每当玩家消耗道具都会打开盒子pcu(执行函数pcu)
ScriptSupportEvent:registerEvent([=[Player.ConsumeItem]=],pcu)
local function pac(e)--创建一个名字为pac、入口(参数)为e的盒子(函数)
if e.act==3 then--如果玩家做的表情是3(哭泣)
local r,x,y,z=Actor:getPosition(e.eventobjid)--获取玩家坐标
loc={x=x,y=y+10,z=z}--把坐标上方第10格的位置放进表格loc里
--在loc坐标处播放声音10564(烟花爆炸)
World:playSoundEffectOnPos(loc,10564,100,1,false)
--在玩家坐标上方第10格处播放特效1047(烟花特效)
World:playParticalEffect(x,y+10,z,1047,1)
end--结束玩家表情的判断
end--关闭盒子(函数)pac
--下面是添加事件,每当玩家做动作表情都会打开盒子pac(执行函数pac)
ScriptSupportEvent:registerEvent([=[Player.PlayAction]=],pac)
local function plc(e)--创建一个名字为plc、入口(参数)为e的盒子(函数)
if e.blockid==1 then--如果被放置的方块id是1(基石)
Actor:killSelf(e.eventobjid)--杀死放置方块的玩家
end--结束方块id的判断
end--关闭盒子(函数)plc
--下面是添加事件,每当玩家放置方块都会打开盒子plc(执行函数plc)
ScriptSupportEvent:registerEvent([=[Block.PlaceBy]=],plc)
local ps={}--创建表格ps,存放可以踏水的玩家列表
local function pcu(e)--创建一个名字为pcu、入口(参数)为e的盒子(函数)
if e.itemid==12502 then--如果被消耗的道具id是12502(小麦面包)
if ps[e.eventobjid]==nil then--如果玩家不在踏水列表里
ps[e.eventobjid]=1--把玩家加进可踏水列表
else--否则(玩家已经在踏水列表里)
ps[e.eventobjid]=nil--就从列表移除该玩家
end--结束玩家是否已开启踏水的判断
end--结束被消耗道具的判断
end--关闭盒子(函数)pcu
--下面是添加事件,每当玩家消耗道具都会打开盒子pcu(执行函数pcu)
ScriptSupportEvent:registerEvent([=[Player.ConsumeItem]=],pcu)
local function run()--创建一个名字为run、没有入口(参数)的盒子(函数)
for i,a in pairs(ps) do--让i,a分别遍历表格ps的名字,内容列表
local r,x,y,z=Actor:getPosition(i)--获取列表中玩家的坐标
local r,id=Block:getBlockID(x,y,z)--获取玩家所在坐标处的方块id
if id==3 then--如果玩家所在位置的方块id是3(水)
Actor:appendSpeed(i,0,0.1,0)--给玩家加一个向上的速度
end--结束方块id的判断
end--结束i,a的遍历循环
end--关闭盒子(函数)run
--下面是添加事件,游戏运行时每0.05秒都会打开盒子run(执行函数run)
ScriptSupportEvent:registerEvent([=[Game.Run]=],run)
local function mob(e)--创建一个名字为mob、入口(参数)为e的盒子(函数)
local r,x,y,z=Actor:getPosition(e.eventobjid)--获取事件中玩家坐标
for i=0,math.floor(y) do--让i从0到玩家所在高度
local r,id=Block:getBlockID(x,i,z)--获取(x,z)高度i处的方块id
if id==404 then--如果是404(蓝钻矿石)
--对玩家弹出提示文字
Player:notifyGameInfo2Self(e.eventobjid,"下方有钻")
end--结束方块id的判断
end--结束i的循环
end--关闭盒子(函数)mob
--下面是添加事件,每当玩家移动一格都会打开盒子mob(执行函数mob)
ScriptSupportEvent:registerEvent([=[Player.MoveOneBlockSize]=],mob)
--暂无注释,复制可用。
local ss="
"
local ps,mt={},3
local function pda(e)
local p,oid=e.eventobjid,e.toobjid
local r1,mhp=Actor:getMaxHP(oid)
local r2,hp=Actor:getHP(oid)
mhp,hp=math.floor(mhp),math.floor(hp)
local r3,s=0,""
r3=Actor:isPlayer(oid)
if r3==0 then
r3,s=Player:getNickname(oid)
else
r3,s=Creature:getActorName(oid)
end
if hp>0 then
MiniTimer:showTimerTips({p},ps[p][1],"#G"..s.."#n#R剩余血量为:#n#G"..hp.."/"..mhp.."#n"..ss,true)
else
MiniTimer:showTimerTips({p},ps[p][1],"#G"..s.."#n#R已被击败!#n"..ss,true)
end
ps[p][2]=0
end
ScriptSupportEvent:registerEvent([=[Player.DamageActor]=],pda)
local function pin(e)
local p=e.eventobjid
local r,id=MiniTimer:createTimer("t",nil,true)
MiniTimer:startForwardTimer(id)
ps[p]={id,0}
end
ScriptSupportEvent:registerEvent([=[Game.AnyPlayer.EnterGame]=],pin)
local function pou(e)
local p=e.eventobjid
MiniTimer:deleteTimer(ps[p][1])
ps[p]=nil
end
ScriptSupportEvent:registerEvent([=[Game.AnyPlayer.LeaveGame]=],pou)
local function run()
local i,a=0,0
for i,a in pairs(ps) do
if a[2]==mt*20 then
MiniTimer:showTimerTips({i},a[1],ss,true)
else
a[2]=a[2]+1
end
end
end
ScriptSupportEvent:registerEvent([=[Game.Run]=],run)
local function inc(e)--创建一个名字为inc、入口(参数)为e的盒子(函数)
if e.content=="回家" then--如果玩家发送的消息是“回家”
Player:teleportHome(e.eventobjid)--传送玩家回出生点
end--结束玩家消息的判断
end--关闭盒子(函数)inc
--下面是添加事件,每当玩家发送消息都会打开盒子inc(执行函数inc)
ScriptSupportEvent:registerEvent([=[Player.InputContent]=],inc)
local function pcb(e)--创建一个名字为pcb、入口(参数)为e的盒子(函数)
if e.blockid==667 then--如果被点击的方块id是667(白色硬砂块)
Block:setBlockAll(e.x,e.y,e.z,682,0)--把该位置设置为682
elseif e.blockid==682 then--如果被点击的方块id是682(黑色硬砂块)
Block:setBlockAll(e.x,e.y,e.z,667,0)--把该位置设置为667
end--结束方块id的判断
end--关闭盒子(函数)pcb
--下面是添加事件,每当玩家点击方块都打开盒子pcb(执行函数pcb)
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=],pcb)
local function dig(e)--创建一个名字为dig、入口(参数)为e的盒子(函数)
--在被挖掘的位置上面一格生成20个被挖掘的方块掉落物
World:spawnItem(e.x,e.y+1,e.z,e.blockid,20)
end--关闭盒子(函数)dig
--下面是添加事件,每当玩家完成了方块挖掘都会打开盒子dig(执行函数dig)
ScriptSupportEvent:registerEvent([=[Block.Dig.End]=],dig)
local ps={}--创建表格ps,用来存放每个玩家已经保持某种运动状态多少秒的数据
local function pn(e)--创建一个名字为pn、入口(参数)为e的盒子(函数)
ps[e.eventobjid]={0,0}--初始化玩家数据(运动状态和持续时间)
end
--下面是添加事件,每当有玩家进入游戏都会打开盒子pn(执行函数pn)
ScriptSupportEvent:registerEvent([=[Game.AnyPlayer.EnterGame]=],pn)
local function ch(e)--创建一个名字为ch、入口(参数)为e的盒子(函数)
ps[e.eventobjid]={e.playermotion,0}--刷新玩家数据
end
--下面是添加事件,玩家每次改变运动状态都会打开盒子ch(执行函数ch)
ScriptSupportEvent:registerEvent([=[Player.MotionStateChange]=],ch)
local function run(e)--创建一个名字为run、入口(参数)为e的盒子(函数)
for i,a in pairs(ps) do--让i,a分别遍历表格ps的列表名字,内容
a[2]=a[2]+1--把玩家当前运动状态的持续时间加1(秒)
if (a[1]==0)and(a[2]>5) then--如果玩家持续静止超过5秒钟
Actor:killSelf(i)--杀死当前玩家
end
end--结束i,a的遍历循环
end
--下面是添加事件,游戏每运行1秒都打开盒子run(执行函数run)
ScriptSupportEvent:registerEvent([=[Game.RunTime]=],run)
local ps={}--创建表格ps,存放开启掉落的玩家列表
local function pcu(e)--创建一个名字为pcu、入口(参数)为e的盒子(函数)
if e.itemid==12508 then--如果被消耗的道具id是12508(西瓜片)
ps[e.eventobjid]=1--把玩家加进掉落列表
end--结束被消耗道具的判断
end--关闭盒子(函数)pcu
--下面是添加事件,每当玩家消耗道具都会打开盒子pcu(执行函数pcu)
ScriptSupportEvent:registerEvent([=[Player.ConsumeItem]=],pcu)
local function run()--创建一个名字为run、没有入口(参数)的盒子(函数)
for i,a in pairs(ps) do--让i,a分别遍历表格ps的名字,内容列表
local r,x,y,z=Actor:getPosition(i)--获取列表中玩家的坐标
x,y,z=math.floor(x),math.floor(y),math.floor(z)--取整
Actor:setPosition(i,x+0.5,y,z+0.5)--设置玩家坐标在方块中心
r,id1=Block:getBlockID(x,y-1,z)--获取玩家脚下第1格的方块id
r,id2=Block:getBlockID(x,y-2,z)--获取玩家脚下第2格的方块id
r,id3=Block:getBlockID(x,y-3,z)--获取玩家脚下第3格的方块id
Block:setBlockAll(x,y-1,z,0,0)--清除玩家脚下第1格的方块
--如果玩家脚下第1格为空,或第2,3格同时为空
if (id1==0)or((id2==0)and(id3==0)) then
ps[i]=nil--就从掉落列表移除玩家(结束玩家的掉落)
end--结束是否为空的判断
end--结束i,a的遍历循环
end--关闭盒子(函数)run
--下面是添加事件,游戏运行时每0.05秒都会打开盒子run(执行函数run)
ScriptSupportEvent:registerEvent([=[Game.Run]=],run)
--暂无注释,复制可用。
local ps={}
local function pn(e)
ps[e.eventobjid]=0
end
ScriptSupportEvent:registerEvent([=[Game.AnyPlayer.EnterGame]=],pn)
local function pus(e)
local p,it=e.eventobjid,e.itemid
if it==12519 then
if ps[p]==0 then
ps[p]=1
Actor:addBuff(p,42,1,999999*20)
Actor:stopBodyEffectById(p,1237)
Actor:setImmuneType(p,7,true)
Chat:sendSystemMsg("#R开启飞行!#n",p)
else
ps[p]=0
Actor:removeBuff(p,42)
Actor:setImmuneType(p,7,false)
Chat:sendSystemMsg("#R关闭飞行!#n",p)
end
end
end
ScriptSupportEvent:registerEvent([=[Player.ConsumeItem]=],pus)
local function r()
local r,n,as=World:getAllPlayers(-1)
local i,a=0,0
for i,a in pairs(as) do
if ps[a]==1 then
Actor:appendSpeed(a,0,-0.02,0)
end
end
end
ScriptSupportEvent:registerEvent([=[Game.Run]=],r)
local function pk(e)
local p=e.eventobjid
if ps[p]==1 then
if e.vkey=="SPACE" then
Actor:appendSpeed(p,0,0.4,0)
elseif e.vkey=="SHIFT" then
Actor:appendSpeed(p,0,-0.6,0)
elseif e.vkey=="W" then
local r,x,y,z=Actor:getFaceDirection(p)
Actor:appendSpeed(p,x,0,z)
elseif e.vkey=="S" then
local r,x,y,z=Actor:getFaceDirection(p)
Actor:appendSpeed(p,-x,0,-z)
end
end
end
ScriptSupportEvent:registerEvent([=[Player.InputKeyDown]=],pk)
ScriptSupportEvent:registerEvent([=[Player.InputKeyOnPress]=],pk)
local function start()--创建一个名字为start、没有入口(参数)的盒子(函数)
Game:msgBox("欢迎进入此地图!")--对玩家展示对话窗口,内容可自行修改
end--关闭盒子(函数)start
--下面这行是添加事件,当游戏开始时打开盒子start (执行函数start)
ScriptSupportEvent:registerEvent([=[Game.Start]=],start)
local x0,y0,z0=0,7,0--范围起点坐标(面朝N,左下后的角)
local x1,y1,z1=10,12,10--范围终点坐标(面朝N,右上前的角)
for i=x0,x1 do--让i从x0到x1
for j=y0,y1 do--让j从y0到y1
for k=z0,z1 do--让k从z0到z1
--下面这行是在(i,k)高度j的位置生成基石的意思
Block:setBlockAll(i,j,k,1,0)
end--结束k的循环
end--结束j的循环
end--结束i的循环
local x0,y0,z0,r=0,7,0,15--圆心坐标(0,0)高度7,半径15
local function inc(x,z)--创建一个名字为inc、入口(参数)为x,z的盒子(函数)
if (x-x0)^2+(z-z0)^2<=r^2 then--如果(x,z)到圆心的距离小于半径
return true--就吐出“正确” (返回 真)
else--否则就
return false--吐出“错误” (返回 假)
end--结束判断
end--关闭盒子(函数)inc
for i=x0-r,x0+r do--让i从x0-r到x0+r
for j=z0-r,z0+r do--让j从z0-r到z0+r
if inc(i,j) then--把i,j放进盒子inc,如果它吐出的是“正确”
--就在(i,j)高度y0的位置生成基石
Block:setBlockAll(i,y0,j,1,0)
end--结束判断
end--结束j的循环
end--结束i的循环
local x0,y0,z0,r=0,20,0,12--球心坐标(0,0)高度20,半径12
local function inr(x,y,z)--创建一个名字为inr、入口(参数)为x,y,z的盒子(函数)
--如果(x,y,z)到球心的距离小于半径
if (x-x0)^2+(y-y0)^2+(z-z0)^2<=r^2 then
return true--就吐出“正确” (返回 真)
else--否则就
return false--吐出“错误” (返回 假)
end--结束判断
end--关闭盒子(函数)inr
for i=x0-r,x0+r do--让i从x0-r到x0+r
for j=y0-r,y0+r do--让j从y0-r到y0+r
for k=z0-r,z0+r do--让k从z0-r到z0+r
--把i,j,k放进盒子inr,如果它吐出的是“正确”
if inr(i,j,k) then
--就在(i,k)高度j的位置生成基石
Block:setBlockAll(i,j,k,1,0)
end--结束判断
end--结束k的循环
end--结束j的循环
end--结束i的循环
for i=1,100 do--让i从1到100
local x=math.random(0,30)--x等于0到30之间的一个随机数
local z=math.random(0,30)--z等于0到30之间的一个随机数
Block:setBlockAll(x,7,z,250,0)--在(x,z)高度7的位置生成一朵荷花
end--结束i的循环