# 游廊RPG的ts模板
**Repository Path**: zyl1989/ts-dota-rpg
## Basic Information
- **Project Name**: 游廊RPG的ts模板
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 9
- **Created**: 2023-10-09
- **Last Updated**: 2024-04-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# `
`TsDotaRPG 3.1`
`
## 梗概
* `1.0` dota2 自定义游戏开发模板,全汉化目录结构
* `2.0` 根据既往的开发经验,在1.3.3的基础上做了大幅度修改
* 更简洁的项目结构
* `3.0` 看在捐款的份上更新的。
* 采用前端流行的monorepo结构,对硬盘更友好
* 集成了腾讯云开发做游戏后端
* 觉得有用的同志们,多金的赞助一波,多力的点个star,谢谢各位




# 内容概览
## 功能概述
1. 用 `react`来写dota2全景,实时编译
2. 用 `TypeScript`写dota2自定义RPG脚本,实时编译
3. 将 `方言`文件夹的 `.xlsx`文件输出到 `game/resources`,编译为dota2的语言文件
4. 批量编译地图、特效、全景图片资源
5. 自动生成 特效预载入列表
## 文件夹内容
| 文件夹名 | 功用 |
| --- | --- |
| 编译/content | 同步更新 `/dota 2 beta/content/dota_addons/` |
| 编译/game | 同步更新 `/dota 2 beta/game/dota_addons/` |
| 程序/panorama | 基于react的web编译,编辑界面和交互功能。同时支持 less与scss |
| 程序/vscripts | 基于TS来写游戏主程序,触发,技能等等 |
| 程序/server | 用来放服务器代码,已给出腾讯云函数示例代码 |
| 程序/shared | 用来写 `panorama ts`和 `tstl`公用的声明,如 `custom_net_tables`等 |
| 程序/npc | 存放 实体 配置文件 |
| 程序/音效 | 存放 音效 配置文件 |
| 方言 | i18n, 表格配置 |
| 策划 | 提供给策划人员放置文档、表格的目录 |
| 美术/地形 | 存放 `Hammer`用的*.vmap文件 |
| 美术/贴图 | 存放 `MaterialEditor`用的*.vtex文件及相关图片 |
| 美术/模型 | 存放 `ModelEditor`用的*.vmat文件及相关模型 |
| 美术/特效 | 存放 `ParticleEditor`用的*.vpcf文件 |
| 美术/图标 | 存放 技能、道具、buff图标 |
| 美术/切图 | 存放 前端界面用的切图 |
| 美术/音频 | 存放 音频文件 供`程序/音效`使用 |
| .bin | 各种 node 脚本,用来完成各种辅助功能 |
| node_modules? | 开发依赖 |
| | |
# 使用
## 使用须知
如果你要使用这个模板,通常需要拥有以下知识储备:
1. 掌握[Dota2 Workshop Tools](https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools:zh-cn "V 社的创意工坊开发文档") 了解[Dota2 创意工坊工具集](https://support.steampowered.com/kb_cat.php?id=109)
2. 掌握[TypeScript](https://www.tslang.cn/ "TypeScript的官方文档"), `JavaScript` 的语法,了解[TypeScriptToLua](https://github.com/TypeScriptToLua/TypeScriptToLua "ts2l的github仓库")
3. 掌握[react](https://react.docschina.org/ "react的官方文档")的基础知识 和 了解 [react-panorama](https://github.com/ark120202/react-panorama "react全景的github仓库")
4. 了解[node.js](https://nodejs.org/zh-cn/docs/ "nodejs的官方文档")的基础知识
- 你可以在完成[安装依赖](###使用步骤)后,查看 `node_modules/@moddota/`中的 `dota-lua-types`和 `panorama-types` 来了解 `DOTA2 Typescript API`
- Xavier:当然,使用强类型语言需要你有更好的代码规范和写声明的觉悟 😉
- Xavier:不过也能提升你的代码效率就是了
## 使用步骤
1. 安装nodejs
* 版本要求是 [node@16.19](https://nodejs.org/zh-cn), /** @18.16也OK */
* 推荐直接下载 [volta](https://volta.sh/) 进行node 版本管理
2. `clone` 或 `fork` [本项目](https://gitee.com/kill-seven-at-once/ts-dota-rpg.git)
3. 必要配置项目
* 打开 `dota2.config.json`,
* `FolderName`为文件目录名,全小写
* `DefaultMap`为启动地图名,全小写
4. 安装依赖
```bash
# 包管理工具
npm i -g pnpm
# volta 的安装方式
volta install pnpm
# ts执行工具
pnpm add -g tsx
```
5. 初始化
```bash
# 安装依赖与配置环境
pnpm i
```
6. `pnpm dev`,开始你的开发
### 其他常用方法
```bash
# 执行dev 并 启动游戏
pnpm go
# 启动 dota2
# 如果提供了 则会载入指定的 addon(默认该项目)
# 如果提供了 则会自动载入对应的地图名
pnpm launch
# 进入 开发 模式
# 监听且实时编译全栈代码,
# 自动把images目录下的所有图片写入样式,需要启动一次游戏实现编译
pnpm dev
# 执行 资源构建 操作
# 自动编译content 目录下的资源到 game 目录下
pnpm compile
# 更新 图片编译目录
pnpm images
# 规范代码
pnpm lint
# 安装vscode插件
# 会在编辑器下方提供快捷按钮
# 如果您使用了vscode作为IDE,那么可以使用本条指令快速安装推荐插件
# 插件不是使用本模版的必备条件,但可以方便码代码
pnpm suggest
# 执行 发布 操作
# 将会自动生成 publish 文件夹
# 并自动 link 到 dota_addons/_publish 文件夹 之后
# 你可以选择这个文件夹发布
pnpm build
```
## 可拓展的功能
1. 网表配置文件
`程序\shared\dota_net_table_keys.json` 输出到 `dist\game\scripts\custom_net_tables.txt`
2. 切图预载入
基于 `美术\切图`的相对目录,填写`layout.config.json`的`image-loader`中
3. 特效模型预载入
将lua中包含相关后缀名的字符串准备到`程序\vscripts\init`目录下
## 未来的计划
欢迎提 `issues`
欢迎贡献代码
## QQ频道
[Dota2游廊制作群](https://pd.qq.com/s/1wecr898c)
[UNCO大世界](https://pd.qq.com/s/dyprfmrpn)
# 鸣谢
- ModDota Community
- `ark120202`[已故] 开发的[react-panorama](https://github.com/ark120202/react-panorama "react全景的github仓库")和对 [API](https://moddota.com/api/#!/vscripts/functions#CreateUnitFromTable) 的维护
- 部分代码源自 `MODDOTA` 的 [TypeScriptAddonTemplate](https://github.com/MODDOTA/TypeScriptAddonTemplate)
- 模版主体源自 `Xavier` 的 [X-Template](https://github.com/XavierCHN/x-template/)
- robinCode、Demon、Xavier、unco 提供的技术支持
- 云端、1、unco 等社区同学对此脚手架的支持