Hytale之我见 专注hytale服务器技术

lua脚本创建道具

2019-12-22
hytaleme

介绍

假设这样的副本场景:有玩家进入一个区域时开启掉落道具流程,将不断掉落道具,区域内无玩家时删除道具并停止掉落道具。

准备

  1. 首先打开官方文档页面,方便查看提供的接口:https://developers.mini1.cn/wiki/

  2. 准备一个编辑器,推荐vscode,或者简单点也可以用notepad++

开始

一. 创建道具代码

-- 参数含义:x坐标 y坐标 z坐标 道具物品ID 数量
World:spawnItem(pos.x, pos.y, pos.z, itemId, 1)

二. 删除范围内道具代码

-- 参数含义:起点x坐标 起点y坐标 起点z坐标 终点x坐标 终点y坐标 终点z坐标
World:despawnItemByBox(p1.x,p1.y,p1.z, p2.x,p2.y,p2.z)

整体代码浏览

-- 03. 创建道具教程

-- 按官方文档说明,这些用到的类必须要先生成
local Area = class.Area.new()
local World = class.World.new()

-- 副本是否掉落道具
local running = false
-- 副本出生点
local spawnPos = {x = 238, y = 137, z = 217}
-- 道具ID
local itemId = 11203
-- 副本id
local areaId = nil

-- 由于目前没直接获取area的接口,可以使用以下方式实现获取area,即通过位置查找区域
-- 区域请先在游戏内按f3新建出来,位置可以点击游戏右上角的地图来查看,随便找一个区域内的位置即可
ScriptSupportEvent:registerEvent([=[Game.Start]=], function ()
    local ret, id = Area:getAreaByPos(spawnPos)
    areaId = id
end)

-- 监听玩家进入区域事件
ScriptSupportEvent:registerEvent([=[Player.AreaIn]=], function (event)
    -- 如果进入的是副本区域,则开启副本掉落道具
    if event.areaid == areaId then
        running = true
    end
end)

-- 每秒事件
ScriptSupportEvent:registerEvent([=[Game.RunTime]=], function (event)
    -- 判断副本是否在运行中可以掉落道具
    if running then
        -- 控制频率:每2秒掉落一个道具
        if event.second % 2 == 0 then
            -- 获取副本内的随机位置
            local ret, pos = Area:getRandomPos(areaId)
            -- 创建一个钻石道具
            -- 参数含义:x坐标 y坐标 z坐标 道具物品ID 数量
            World:spawnItem(pos.x, pos.y, pos.z, itemId, 1)
        end
    end
end)

-- 监听玩家离开区域事件
ScriptSupportEvent:registerEvent([=[Player.AreaOut]=], function (event)
    -- 如果离开的是副本区域,则需要判断是否停止掉落道具
    if event.areaid == areaId then
        -- 如果副本内没有玩家了,则停止掉落道具
        local ret, playerlist = Area:getAreaPlayers(areaId)
        if #playerlist <= 0 then
            -- 停止掉落道具
            running = false
            -- 获取副本范围
            local ret, p1, p2 = Area:getAreaRectRange(areaId)
            -- 删除副本范围内所有掉落的道具
            -- 参数含义:起点x坐标 起点y坐标 起点z坐标 终点x坐标 终点y坐标 终点z坐标
            World:despawnItemByBox(p1.x,p1.y,p1.z, p2.x,p2.y,p2.z)
        end
    end
end)

PS

以上就是全部教程了,具体代码可能在下方评论区以链接形式贴出,由于目前迷你盒子内置浏览器有问题,请复制链接到手机浏览器中打开。

最后:

  1. 如果想要获取更多教程可以关注我
  2. 如果想要体验本教程的效果,可以收藏下面的教程专用地图:试炼场(此地图将包含所有的脚本教程),并在游戏内进入体验
  3. 点个赞呗~

相似文章

目录