跳到主要内容

副本

副本

通过npc进入副本

一、功能简介

进入玩家个人副本打怪。

声明:该demo使用引擎示例“除魔挑战副本”做模板

二、制作流程

  • 1:配置副本场景、怪物
  • 2:复制副本demo模板
  • 3:配置NPC入口

三、流程详细说明

1.配置副本场景、怪物

这里我们主要是讲解创建个人副本(镜像副本),因此我们从已有的场景配置中,找一个有怪的场景ID,作为副本的镜像场景。 场景表 更多场景配置请查看 场景配置 更多刷怪配置请查看 刷怪功能 spawn_cs.xlsx 表的配置

进入个人副本接口:edi.dg:enter_solo
- 参数:玩家对象
- 参数:副本名
- 参数:场景ID
- 参数:副本有效时间[秒]
- 参数:用户自定义透传字段[可不填]
- 参数:副本创建日志记录[可不填]

2. 复制副本

副本模板复制: ../dev/modules/除魔挑战/除魔挑战副本.lua 用户自动义目录: ../dev/modules/自定副本/自定副本.lua

只是进入副本打怪这种玩法,拷贝就完事!!!

除魔挑战副本.lua
--用户配置
local SCENE_ID = 1026 -- 场景ID scene_cs.xlsx 表
local LIFE_TIME = 300 -- 秒

--功能实现
local module = {}
module.NAME = "除魔挑战" -- 副本名
-------------------------------↓↓↓ 副本 ↓↓↓---------------------------------------
-- npc点击进入副本回调
local function _click_enter_dg(player)
local ext = module.NAME -- 自定义 拓展数据方便透传做创建时特殊处理
local remark = module.NAME -- 自定义来源,用于项目日志记录
edi.dg:enter_solo(player, module.NAME, SCENE_ID, LIFE_TIME, ext, remark)
end

--@Main--
edi.event:reg(edi.event.click_enter_dg, _click_enter_dg, module.NAME)

return module

3. 配置NPC对话

打开测试文件: ../dev/modules/npc/npc201.lua 添加进入副本按钮 接口:

    util.add_enter_dg_btn(root, "进入除魔挑战副本", "除魔挑战")

示例:

-- npc201.lua
local util = include("npc.npc_util")

-- 新人大使
local module = {}
module.ID = 201
module.Name = "新手-比奇校尉"

local function _on_click(player)

local root = util.build_root_context(player, module.ID)

-- 添加npc按钮
util.add_enter_dg_btn(root, "进入除魔挑战副本", "除魔挑战")
-- 发送ssr命令
util.say(player, root)
end
edi.event:reg_npc_click(module.ID, _on_click)

return module

四、副本高级事件接口

用户定制化功能开发才需要理解这类接口,否则拷贝就完事!!! 用户定制化功能开发才需要理解这类接口,否则拷贝就完事!!! 用户定制化功能开发才需要理解这类接口,否则拷贝就完事!!!

  • 进入副本前检查事件
---进入副本前检查
---@param player userdata 玩家对象
---@param dg userdata 副本对象
---@return boolean
local function _pre_enter(player, dg, remark)
-- 用户自定义检查功能
-- return true 表示允许进入副本,false表示不允许进入副本
return true
end
edi.event:reg(edi.event.pre_enter_dg, _pre_enter, module.NAME)
  • 初始化副本事件
--- 初始化副本
---@param player any
---@param dg any
local function _on_create_dg(dg, ext)
-- 这里可以通过引擎接口刷怪,详细看 相关场景接口文档
end
edi.event:reg(edi.event.create_dg, _on_create_dg, module.NAME)
  • 进入副本事件
--- 进入副本
---@param player any
---@param dg any
local function _on_enter(player, dg)
-- 跑马灯提示
edi.general:send_player_notice(player, 8, "玩家进入除魔挑战副本!!")

-- 退出副本按钮
edi.ui.open_ui(player, 11060, "除魔使者")
end
edi.event:reg(edi.event.enter_dg, _on_enter, module.NAME)
  • 离开副本(主动离开)事件
--- 离开副本(主动离开)
---@param player userdata
---@param dg userdata 副本
---@param remark string
local function _on_leave(player, dg, remark)
edi.general:send_player_notice(player, 8, "玩家离开除魔挑战副本!!")
edi.ui.close_ui(player, 11060)
end
edi.event:reg(edi.event.leave_dg, _on_leave, module.NAME)
  • 结束副本事件
--- 结束副本
---@param dg userdata 副本
local function _on_finish(dg)
end
edi.event:reg(edi.event.finish_dg, _on_finish, module.NAME)

了解更多 edi.event:reg 的使用规则,请参考 事件说明文档 了解更多 副本 接口,请参考 副本接口文档