《魔兽地图编辑器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名字模型文件图标 - 游戏界面
IDNamefileArt
Ecen半神人units\nightelf\HeroKeeperoftheGrove\HeroKeeperoftheGroveReplaceableTextures\CommandButtons\BTNKeeperOfTheGrove.blp
Edem恶魔猎手units\nightelf\HeroDemonHunter\HeroDemonHunterReplaceableTextures\CommandButtons\BTNHeroDemonHunter.blp
Edmm恶魔猎手units\nightelf\HeroDemonHunter\HeroDemonHunterReplaceableTextures\CommandButtons\BTNMetamorphosis.blp
Eevi恶魔猎手units\nightelf\EvilIllidan\IllidanEvilReplaceableTextures\CommandButtons\BTNEvilIllidan.blp
Eevm恶魔猎手units\nightelf\EvilIllidan\IllidanEvilReplaceableTextures\CommandButtons\BTNMetamorphosis.blp
Efur丛林守护者units\nightelf\Furion\FurionReplaceableTextures\CommandButtons\BTNFurion.blp
Ekgg丛林守护者units\nightelf\HeroKeeperoftheGroveGhost\HeroKeeperoftheGroveGhostReplaceableTextures\CommandButtons\BTNKeeperGhostBlue.blp
Emfr丛林守护者units\nightelf\MalFurion\MalFurionReplaceableTextures\CommandButtons\BTNFurion.blp

(二)UnitTpl单位模板属性表

当前xlik框架没有代码补全提示,所以我们还需要一张UnitTpl的属性枚举表,即除了案例中的:hp、:move、:level等属性外,还有哪些属性能用。我又整理了一张《UnitTpl单位模板属性表.xlsx》,部分内容如下:

分类方法参数类型可选值/范围示例说明
文本属性:name()string任意字符串:name("精英步兵")单位显示名称
:properName()string任意字符串:properName("队长")单位头衔/称谓
等级属性:level()number1-100:level(5)当前等级
:levelMax()number1-100:levelMax(10)可达到的最大等级
状态属性:hp()number1-999999:hp(5000)最大生命值
:hpRegen()number0-1000:hpRegen(15)生命恢复/秒
:mp()number0-9999:mp(200)魔法值上限
:mpRegen()number0-100:mpRegen(2)魔法恢复/秒
战斗属性:move()number0-522:move(350)移动速度
:attack()number1-99999:attack(150)基础攻击力
:attackPoint()number0.0-1.5:attackPoint(0.75)攻击动作触发点
:defend()number0-99:defend(5)护甲值

以上2张表格资源回复可见下载地址:

此处内容已隐藏,回复后(需要填写邮箱)可见

四、实战环节

demo里是小兵大战,大家在实战环节可以做英雄大战。

在位于projects\mylua\scripts\globals\tpl\unit的目录下新建hero.lua的文件