在《魔兽地图编辑器Lua作图教程5:X-LIK框架①概述》我们已经通过输入.\xlik.exe new mylua
新建了一个lua项目。它位于:projects\mylua文件夹下。
B站火魂侠大佬是从防守演示图开始学习之旅。那么我作为一个萌新,之前最熟悉的还是WE地图编辑器了,所以另辟蹊径,从物体编辑开始记录我的学习情况。
一、前言
通过看火魂侠大佬的视频,以及阅读框架自带的TPL模版.md文档,我们很容易发现X-LIK框架物编使用的TPL,即template,意为模板、标准。技能、物品、单位都可以基于Tpl来构建。
与传统物编对比
特性 | 传统物编 | TPL系统 |
---|---|---|
修改方式 | 需要导出导入 | 代码实时修改 |
数据绑定 | 松散关联 | 强类型关联 |
事件系统 | 有限触发条件 | 完整生命周期事件 |
动态调整 | 需要重启地图 | 运行时立即生效 |
二、学习案例
(一)TPL模版.md中的案例
TPL_UNIT.Demo = UnitTpl("Footman") -- 此处的Footman指引用语音,默认为nil/空字符串
-- 基础属性
:name("步兵") -- string 单位名称
:model("TheCaptain") -- string 单位模型路径
:icon("unit/TheCaptain") -- string 单位图标路径
:scale(1.2) -- number 模型缩放比例(1.0为原始大小)
:preAbility() -- 预置技能
-- 等级系统
:level(1) -- number 初始等级(1-100)
-- 战斗系统
:hp(100) -- number 最大生命值
:hpRegen(0) -- number 生命恢复/秒
:mp(100) -- number 最大魔法值
:mpRegen(5) -- number 魔法恢复/秒
:move(300) -- number 移动速度(游戏标准单位)
:material(UNIT_MATERIAL.metal) -- enum 材质类型:flesh(血肉), rock(石材), metal(金属), wood(木质)
:weaponSound("metal_slice_medium") -- string 武器音效路径
-- 攻击系统
:attack(10) -- number 基础攻击力
:attackSpaceBase(1.0) -- number 攻击间隔(秒)
:attackRange(100) -- number 攻击范围(像素)
:assault(Assault({ -- table 高级攻击配置
mode = "missile", -- 攻击类型:
-- "melee": 近战
-- "missile": 投射物
-- "artillery": 抛物线投射物
model = "FaerieDragonMissile", -- string 投射物模型
homing = true, -- boolean 是否追踪目标
height = 200, -- number 投射物飞行高度
speed = 1200 -- number 投射物速度(像素/秒)
}))
(二)demo.lua中的案例
这个案例位于:projects\mylua\scripts\globals\tpl\unit\demo.lua
TPL_UNIT.DEMO = UnitTpl("Footman", "avatar")
:preAbility({ TPL_ABILITY.DEMO2 })
:preItem({ TPL_ITEM.DEMO })
:name("步兵")
:model("Footman")
:weaponSound("metal_slice_medium")
:move(200)
:attack(10)
:hp(150)
:hpRegen(3)
:reborn(3)
- UnitTpl("Footman", "avatar"): 创建一个新的单位模板,语音类型为"Footman",图标为"avatar"。
- :preAbility({ TPL_ABILITY.DEMO2 }): 为该单位预设技能,这里是TPL_ABILITY.DEMO2。
- :preItem({ TPL_ITEM.DEMO }): 为该单位预设物品,这里是TPL_ITEM.DEMO。
- :name("步兵"): 设置单位的名称为"步兵"。
- :model("Footman"): 设置单位的模型为"Footman"。
- :weaponSound("metal_slice_medium"): 设置单位武器的声音为"metal_slice_medium"。
- :move(200): 设置单位的移动速度为200。
- :attack(10): 设置单位的攻击力为10。
- :hp(150): 设置单位的生命值为150。
- :hpRegen(3): 设置单位每秒生命值恢复3点。
- :reborn(3): 设置单位重生时间为3秒(指单位被击败后重新出现的时间)。
三、学习输出
(一)War3原生物编数据表
:model需要填模型文件名,:icon需要填图标路径。可以从WE里查看,也可以用mpqeditor打开mpq查找。但是我嫌麻烦,所以直接整理了一张《War3原生物编数据表.xlsx》。部分内容如下:
物编ID | 名字 | 模型文件 | 图标 - 游戏界面 |
---|---|---|---|
ID | Name | file | Art |
Ecen | 半神人 | units\nightelf\HeroKeeperoftheGrove\HeroKeeperoftheGrove | ReplaceableTextures\CommandButtons\BTNKeeperOfTheGrove.blp |
Edem | 恶魔猎手 | units\nightelf\HeroDemonHunter\HeroDemonHunter | ReplaceableTextures\CommandButtons\BTNHeroDemonHunter.blp |
Edmm | 恶魔猎手 | units\nightelf\HeroDemonHunter\HeroDemonHunter | ReplaceableTextures\CommandButtons\BTNMetamorphosis.blp |
Eevi | 恶魔猎手 | units\nightelf\EvilIllidan\IllidanEvil | ReplaceableTextures\CommandButtons\BTNEvilIllidan.blp |
Eevm | 恶魔猎手 | units\nightelf\EvilIllidan\IllidanEvil | ReplaceableTextures\CommandButtons\BTNMetamorphosis.blp |
Efur | 丛林守护者 | units\nightelf\Furion\Furion | ReplaceableTextures\CommandButtons\BTNFurion.blp |
Ekgg | 丛林守护者 | units\nightelf\HeroKeeperoftheGroveGhost\HeroKeeperoftheGroveGhost | ReplaceableTextures\CommandButtons\BTNKeeperGhostBlue.blp |
Emfr | 丛林守护者 | units\nightelf\MalFurion\MalFurion | ReplaceableTextures\CommandButtons\BTNFurion.blp |
(二)UnitTpl单位模板属性表
当前xlik框架没有代码补全提示,所以我们还需要一张UnitTpl的属性枚举表,即除了案例中的:hp、:move、:level等属性外,还有哪些属性能用。我又整理了一张《UnitTpl单位模板属性表.xlsx》,部分内容如下:
分类 | 方法 | 参数类型 | 可选值/范围 | 示例 | 说明 |
---|---|---|---|---|---|
文本属性 | :name() | string | 任意字符串 | :name("精英步兵") | 单位显示名称 |
:properName() | string | 任意字符串 | :properName("队长") | 单位头衔/称谓 | |
等级属性 | :level() | number | 1-100 | :level(5) | 当前等级 |
:levelMax() | number | 1-100 | :levelMax(10) | 可达到的最大等级 | |
状态属性 | :hp() | number | 1-999999 | :hp(5000) | 最大生命值 |
:hpRegen() | number | 0-1000 | :hpRegen(15) | 生命恢复/秒 | |
:mp() | number | 0-9999 | :mp(200) | 魔法值上限 | |
:mpRegen() | number | 0-100 | :mpRegen(2) | 魔法恢复/秒 | |
战斗属性 | :move() | number | 0-522 | :move(350) | 移动速度 |
:attack() | number | 1-99999 | :attack(150) | 基础攻击力 | |
:attackPoint() | number | 0.0-1.5 | :attackPoint(0.75) | 攻击动作触发点 | |
:defend() | number | 0-99 | :defend(5) | 护甲值 |
以上2张表格资源回复可见下载地址:
此处内容已隐藏,回复后(需要填写邮箱)可见
四、实战环节
demo里是小兵大战,大家在实战环节可以做英雄大战。
在位于projects\mylua\scripts\globals\tpl\unit的目录下新建hero.lua的文件
大佬厉害
牛逼
大佬nb
相互学习