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

lua脚本创建生物

2019-12-14
hytaleme

介绍

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

准备

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

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

开始

一. 新建区域

首先在游戏内按f3然后新建一个区域

二. 编写脚本

以下脚本格式仅为推荐使用的方式:

1. 头部:引入类

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

2. 变量:集中管理副本内用到的变量

-- 副本是否生怪
local running = false
-- 副本出生点
local spawnPos = {x = 238, y = 137, z = 217}
-- 怪物ID
-- 怪物ID可以在官方文档的ID表数据里查看
local monsterId = 3132 -- 混乱弓手
-- 生怪区id
local monsterAreaId = nil

3. 初始化:游戏开始时初始化一些数据

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

4. 事件:监听并处理事件

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

-- 每秒事件
ScriptSupportEvent:registerEvent([=[Game.RunTime]=], function (event)
    -- 判断副本是否在运行中可以生怪
    if running then
        -- 控制生怪频率:每5秒生一只
        if event.second % 5 == 0 then
            -- 生怪:在副本出生点生1只混乱弓手
            World:spawnCreature(spawnPos.x, spawnPos.y, spawnPos.z, monsterId, 1)
        end
    end
end)

-- 监听玩家离开区域事件
ScriptSupportEvent:registerEvent([=[Player.AreaOut]=], function (event)
    -- 如果离开的是副本区域,则需要判断是否停止生怪
    if event.areaid == monsterAreaId then
        -- 如果副本内没有玩家了,则停止生怪
        local ret2, playerlist = Area:getAreaPlayers(monsterAreaId)
        if #playerlist <= 0 then
            -- 停止生怪
            running = false
            -- 删除副本内的怪物
            local ret3, creaturelist = Area:getAreaCreatures(monsterAreaId)
            for i,creatureId in ipairs(creaturelist) do -- 遍历删除
                World:despawnCreature(creatureId)
            end
        end
    end
end)

效果截图

PS

以上就是全部教程了,由于字数限制与代码显示操作都不方便,这里就不贴具体代码了。 如果想学,可以参考上面的代码自己实现一遍。

最后:

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

相似文章

目录