Dream Mod 3.0Dream Mod 3.0
首页
快速开始
资源库
首页
快速开始
资源库
  • 进度

    • 更新日志
  • 指南

    • 快速上手
    • App.lua
    • 地图
    • 角色
    • 道具
    • 技能
    • 状态
    • 窗口
    • 触发器
    • 成长
    • 皮肤
    • 自定义组件
  • Api

    • 引擎
    • 地图
    • 角色
    • 道具
    • 技能
    • 状态
    • 窗口
    • 自定义组件
    • 缓动
    • 全局
  • 控件

    • 标签
    • 按钮
    • 图片框
    • 动画框
    • 文本框
    • 进度条
    • 技能格子
    • 快捷格子
    • 包裹格子
    • 道具格子
    • 角色框
    • 选择框
    • 选择夹
    • 容器
    • 地图框
    • 滑块条
    • 组合框
    • 输入框
  • 组件

    • 文本
    • 艺术字
    • 精灵
    • 矩形
    • 圆形
  • 其他

    • 丰富文本
    • 模板变量
    • 游戏盒子

App.lua

介绍

App.lua是每个项目的入口文件,游戏的启动配置项在这里填写。

配置项

名称类型必填说明
游戏标题 文本falsewindows窗口标题
屏幕宽度 整数false屏幕宽度
屏幕高度 整数false屏幕高度
背景颜色 RGBAfalse默认:0
屏幕适配 整数false
资源表 tablefalse{ {标识="",文件=""}, {标识="",文件=""}, }
默认字体 tabletrue
信息框 tablefalse
技能气泡 tablefalse
道具气泡 tablefalse
状态气泡 tablefalse
掉落物 tablefalse
状态图标 tablefalse
控件皮肤 tablefalse
扩展属性 tablefalse
扩展组件 table {}false
扩展脚本 table {}false
装备套装 table {}false
系统事件 tablefalse

屏幕适配

  • 0:无适配
  • 1:窗口可以拉伸 画面缩放
  • 2:窗口可以拉伸 画面同步屏幕宽高

扩展属性

引擎内置了6个属性:hp mp maxhp maxmp 移动速度 攻击速度 除此之外你可以自己扩展需要的属性,扩展属性只能为数值型。

扩展属性 = {攻击=0,防御=0}, -- 游戏中有了 攻击,防御

提示

扩展属性会自动应用于整个游戏系统,道具,角色,技能 等等各种组件中都自动扩展拥有了这些属性。

扩展组件

  • DM3是一个组件化的引擎,通过即插即用的各种组件积木式产生游戏。
  • 目前的组件种类有 角色 地图 道具 技能 状态 窗口 触发器
  • 组件是一个个配置项文件,后缀名为.lua,需要保存到工程目录下,然后加入到扩展组件。
扩展组件 = {
    "UI/底部UI.lua",
    "UI/角色窗口.lua",
    "DB/Npc/主角.lua",
    "DB/Npc/稻草人.lua",
    "DB/Map/泡点图.lua",
    "DB/Item/八荒刀.lua",
    ...
    ...
},

提示

阅读文档,编写各种类型的组件。

装备套装

  • 一个套装配置数组,部件中道具对象可以在属性中可以取出[套装]属性。
名称类型说明
名称文本套装的唯一名称
部件table {}道具名称数组
效果table {}数组索引对应激活几个部件的效果
装备套装 = {
  {
    名称 = "全村的希望",
    部件 = {"黄金手镯","黄金戒指","黄金项链"},
    效果 = {
      {},	-- 1件
      {{"maxhp",20},{"maxmp",20}},	-- 2件
      {{"移动速度",20},{"攻击速度",20}}	-- 3件
    }
  },
  {
    名称 = "圣战套",
    ...
    ..
  }
},

扩展脚本

  • 自定义的Lua脚本,没有格式要求。DM3使用Lua5.4,没有特殊限制,你可以用来封装自己的系统或者常用的公共函数。
  • 扩展脚本会在游戏组件初始化之前载入执行。依次执行完成后触发 系统事件 🔹 启动
扩展脚本 = {
    "DB/系统.lua",
    ...
    ...
},

系统事件

🔹 启动

游戏启动后,系统载入所有扩展脚本后最先触发的回调。 通常用于游戏开始前的各种准备

🔹 游戏开始

游戏组件载入完成后激活此事件。

🔹 焦点变化

游戏窗口焦点发生改变时触发

回调参数类型说明描述
屏幕焦点 逻辑 获得焦点:true 丢失焦点:false

示例

系统事件 = {
		焦点变化 = function (屏幕焦点)
			调试输出(屏幕焦点)
		end,
}

🔹 宽高变化

屏幕适配 = 2时,游戏窗口宽高改变时触发

回调参数类型说明描述
宽度 整数
高度 整数

示例

系统事件 = {
		宽高变化 = function (宽度,高度)
			local 底部UI = 引擎.窗口.底部UI
			底部UI.x = (宽度 - 底部UI.宽度) * 0.5 // 1
			底部UI.y = 高度 - 底部UI.高度
		end,
}

🔹 键盘按下

按键按下触发

回调参数类型说明描述
按键信息 table
成员类型说明
code 整数键值
alt 逻辑alt键状态
shift 逻辑shift键状态
control 逻辑ctrl键状态

示例

系统事件 = {
    键盘按下 = function (按键信息)
        调试输出(按键信息)
    end,
}

🔹 键盘弹起

按键弹起时触发

回调参数类型说明描述
按键信息 table
成员类型说明
code 整数键值
alt 逻辑alt键状态
shift 逻辑shift键状态
control 逻辑ctrl键状态

示例

系统事件 = {
    键盘弹起 = function (按键信息)
        调试输出(按键信息)
    end,
}

🔹 超链接

丰富文本的超链接事件会统一回调到此处。

回调参数类型说明描述
事件 文本 热点 点击
链接 文本 / table {} #@中的 触发标识
x 数值 链接屏幕坐标x
y 数值 链接屏幕坐标y
文本框对象 文本框 这个事件从哪里来

示例

系统事件 = {
    超链接 = function (事件,链接,x,y,文本框)	
        if (事件 == "点击") then
            调试输出(链接)
        end
    end,
}

🔹 道具气泡提示

道具气泡弹出时触发,通常用户动态修改气泡内容

回调参数类型说明描述
道具对象 道具对象
格子对象 格子对象 道具所在的格子
装备对比 逻辑 是否有装备对比行为

示例

系统事件 = {
  道具气泡提示 = function (道具对象,格子对象,装备对比)
		local 主角对象 = 引擎.地图.主角

		local 需要等级 = 道具对象.等级
		local 等级颜色 = "#W"
		if (需要等级 > 主角对象.等级 ) then
			等级颜色 = "#R"
		end
		
		local 富文本 = "#z(140,0,1)\n#z(2,-12)#f(宋体14粗)#c(".. 道具对象.颜色 ..")".. 道具对象.显示名
		if (装备对比) then
			-- 显示一个已装备图标
			富文本 = 富文本 .. "\n#p(已装备图标,98,-16)\n#z(0,-8)"
		else 
			富文本 = 富文本 .. "#z(0,10,1)\n"
		end

		富文本 = 富文本 .. "#p(默认皮肤|格子底图)#p(".. 道具对象.图标 ..",-44,0,42,42)#f(宋体12)#W#z(4,-42)\n"
		富文本 = 富文本 .. "类型:" .. 道具对象.子类 .. "\n" .. 等级颜色 .. "等级:" .. 需要等级 .. "\n#W限制:无\n#z(0,0)"

		if (道具对象.分类 == "装备") then
				

			local 附加属性 = 道具对象.附加

			if(道具对象.攻击 > 0 ) then
				富文本 = 富文本 .. "\n".. (附加属性.攻击 > 0 and "#c(0x66CC00FF)" or "#W") .. "攻击 " .. 道具对象.攻击 
			end

			if(道具对象.防御 > 0) then
				富文本 = 富文本 .. "\n".. (附加属性.防御 > 0 and "#c(0x66CC00FF)" or "#W") .. "防御 " .. 道具对象.防御
			end

			if(道具对象.maxhp > 0) then
				富文本 = 富文本 .. "\n".. (附加属性.maxhp > 0 and "#c(0x66CC00FF)" or "#W") .. "生命 " .. 道具对象.maxhp 
			end

			if(道具对象.maxmp > 0) then
				富文本 = 富文本 .. "\n".. (附加属性.maxmp > 0 and "#c(0x66CC00FF)" or "#W") .. "法力 " .. 道具对象.maxmp 
			end

			if(道具对象.攻击_百分比 > 0 ) then
				富文本 = 富文本 .. "\n".. (附加属性.攻击_百分比 > 0 and "#G" or "#W") .. "攻击 +" .. 道具对象.攻击_百分比   .. "%"
			end

			if(道具对象.防御_百分比 > 0 ) then
				富文本 = 富文本 .. "\n".. (附加属性.防御_百分比 > 0 and "#G" or "#W") .. "防御 +" .. 道具对象.防御_百分比  .. "%"
			end

			if(道具对象.maxhp_百分比 > 0) then
				富文本 = 富文本 .. "\n".. (附加属性.maxhp_百分比 > 0 and "#G" or "#W") .. "生命 +" .. 道具对象.maxhp_百分比  .. "%"
			end

			if(道具对象.maxmp_百分比 > 0) then
				富文本 = 富文本 .. "\n".. (附加属性.maxmp_百分比 > 0 and "#G" or "#W") .. "法力 +" .. 道具对象.maxmp_百分比  .. "%"
			end


			-- 有套装属性
			if(道具对象.套装) then

				local 套装名称 = 道具对象.套装.名称
				local 套装部件 = 道具对象.套装.部件
				local 套装效果 = 道具对象.套装.效果
				local 激活数量 = 道具对象.套装.激活数量
				local 部件数量 = #套装部件
				富文本 = 富文本 .. "\n\n#Y" .. 套装名称  .. " (" .. 激活数量 .. "/" .. 部件数量 .. ")"

				for n=1,#套装部件 do
					富文本 = 富文本 .. "\n".. (套装部件[n].数量 > 0 and "#c(255,200,0,255)" or "#H") .. 套装部件[n].名称
				end

				for n=1,#套装效果 do
					
					if(#套装效果[n] > 0) then

						富文本 = 富文本 .. "\n\n#z(0,0)" .. (激活数量 >= n and "#c(255,200,0,255)" or "#H")  .. "[" .. n .. "]:#z(4,-14)"

						for i=1,#套装效果[n] do
							local 属性名称 = 套装效果[n][i][1]
							local 属性值 = 套装效果[n][i][2]
							if (属性名称 == "maxhp") then
								属性名称 = "生命"
							elseif (属性名称 == "maxmp") then
								属性名称 = "法力"
							end
							富文本 = 富文本 .. "\n".. 属性名称 .. " +".. 属性值
						end
						
					end
				end

			end

		elseif (道具对象.分类 == "道具") then

			if (道具对象.子类 == "消耗") then
				if(道具对象.hp > 0 ) then
					富文本 = 富文本 .. "\n".. "#GHP + " .. 道具对象.hp 
				end
				if(道具对象.mp > 0 ) then
					富文本 = 富文本 .. "\n".. "#GMP + " .. 道具对象.mp 
				end
			end

		end

		富文本 = 富文本 .. "\n\n#z(0,0)#br(140)#H普普通通的".. 道具对象.显示名 .. "#z(0,2,1)"

		道具对象.气泡提示 = 富文本
  end,
}

🔹 技能气泡提示

技能气泡弹出时触发,通常用户动态修改气泡内容

回调参数类型说明描述
技能对象 技能对象

示例

系统事件 = {
  技能气泡提示 = function (技能对象)

    -- 只有已经添加的技能才有进度这个属性 通过判断进度可以区分是否是已经学习的技能
    if (技能对象.进度 == nil) then
      技能对象.气泡提示 = "#H#f(宋体14粗)".. 技能对象.显示名 .."\n#f(宋体12)\n未掌握"
      return
    end

    local 富文本 = "#G#f(宋体14粗)" .. 技能对象.显示名 .. "\n#W#f(宋体12)\nMP:" .. 技能对象.mp .. "\nCD:" .. math.round(技能对象.间隔 / 1000,1) .. "秒\n\n#W等级:" .. 技能对象.等级
    技能对象.气泡提示 = 富文本

  end,
}

🔹 系统提示

用于拦截捕获系统默认提示

回调参数类型说明描述
编号 整数1:使用技能时,技能冷却中
2:使用物品时,道具冷却中!
3:使用物品时,等级不足!
4:拾取物品时,包裹已满!
提示内容 文本默认内容

示例

系统事件 = {
  系统提示 = function (编号,提示内容)
    调试输出(编号,提示内容)
    return true -- 拦截
  end
}

🔹 自定义事件

是指通过Api 加入事件 创建的事件。

回调参数类型说明描述
事件附加 table 是指通过Api [加入事件]中传递进来的 附加信息
dt 数值 事件执行的实际间隔时间
time 数值 事件执行的总时间

示例

系统事件 = {

  游戏开始 = function()
    引擎.加入事件("系统时钟",{},1000,false)
  end,

  系统时钟 = function (tbl,dt,time)
    调试输出(dt,time)
  end,

}
Prev
快速上手
Next
地图