TS里4个字符的物编id转number id可使用以下方法互转:
let idNum: any=FourCC("hooo")//字符串转10进制的整数id
let idStr = id2string(idNum)//10进制的整数转4个字符
这些库能帮助你完成最常用的功能
- 包含CJ、BJ、japi、DZapi、部分ydwe函数(比如冲锋、任意单位伤害事件)
其中bj与ydwe由lua库实现(blizzard.lua、solar_addons.lua)
APP.ts为入口文件。
里面推荐初始化State(通常我们写的逻辑业务都是State)
可查看库里的其他State以获得State的编程思路
里面默认没有启用ECS系统(通常这个系统不是超复杂的游戏 不需要使用它 以减轻学习成本)
State主要是逻辑跟参数分开 参数通过静态变量config设置
State里启动逻辑触发 逻辑触发通过读取config里的数据来工作
比如击杀不同单位获得不同经验:
config.hpea(单位类型) = 10 (奖励值)
config.hfoo(单位类型) = 20 (奖励值)
然后触发里监听单位死亡事件
if(config.死亡单位类型) 即config有这个单位的奖励值配置信息
然后就增加 凶手单位经验值 + config[死亡的单位类型]
此方式能达到业务数据与代码逻辑分离
通常死亡单位加经验值的代码逻辑是不会变的
而config里的奖励数值经常需要调整或新增
通过在另一个StateConfig文件里来专门配置config值,就可以只关注数据了
再进一步,如果我们的配置StateConfig是通过xlsx自动生成的 就可以实现在表格里调整这些数据了
通过以上架构思维可借助太阳rpg编辑器的xlsx编译器实现xlsx做图
基础逻辑代码不用重复写 通过不同的xlsx配置项来组装不同地图 减少重复劳动
import {Trigger} from "solar/w3ts/handles/trigger";
export default class AddExpOnKillState {
//死亡单位类型 与 奖励经验值
static config: { [id: string]: number } = {}
constructor() {
let trigger = new Trigger()
trigger.registerAnyUnitEvent(EVENT_PLAYER_UNIT_DEATH)
trigger.addAction(() => {
if (!IsUnitType(GetKillingUnit(), UNIT_TYPE_HERO)) {
//凶手不是英雄就退出后续逻辑
return
}
let deathUnitTypeStr = id2string(GetUnitTypeId(GetTriggerUnit()));
let addExp = AddExpOnKillState.config[deathUnitTypeStr]
if (addExp) {
AddHeroXP(GetKillingUnit(), addExp, true)
}
})
}
}
import AddExpOnKillState from "./AddExpOnKillState";
export default function AddExpOnKillStateConfig() {
AddExpOnKillState.config.hpea = 10;
AddExpOnKillState.config.hfoo = 20;
}
这些库主要是偏功能业务了 比如每秒加属性 刷兵 伤害系统 各种模拟等等!
- 可以从这里找到需要的库复制粘贴到自己的地图中使用
- 不推荐完全在此模板下做图,因为这包括了很多TS库,大部分功能不适合同时出现在当前地图
在左侧文件树右键>新建>添加TS支持基础文件 即可覆盖旧版本的TS基础文件以达到更新太阳TS框架