Merge pull request #12 from LingASDJ/0.0.2-Develop

0.0.2 develop
This commit is contained in:
JDSA Ling 2023-04-11 23:29:01 +08:00 committed by GitHub
commit ca5fcbf504
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 14006 additions and 0 deletions

38
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,38 @@
---
name: 错误报告
about: 创建报告以帮助我们改进
title: ''
labels: ''
assignees: ''
---
**描述错误**
清晰简明地描述错误的内容。
**重现步骤**
重现行为的步骤:
1. 进入“...”
2. 点击“...”
3. 滚动至“...”
4. 查看错误
**期望行为**
清晰简明地描述你期望发生的情况。
**屏幕截图**
如果可用,添加屏幕截图以帮助解释您的问题。
**桌面设备(请填写以下信息):**
- 操作系统:[例如iOS]
- 浏览器:[例如Chrome、Safari]
- 版本:[例如22]
**手机设备(请填写以下信息):**
- 设备:[例如iPhone6]
- 操作系统:[例如iOS8.1]
- 浏览器:[例如默认浏览器、Safari]
- 版本:[例如22]
**其他上下文**
在此处添加有关问题的任何其他上下文。

View File

@ -0,0 +1,20 @@
---
name: 功能请求
about: 为此项目提出建议
title: ''
labels: ''
assignees: ''
---
**您的功能请求是否与问题有关?请描述。**
清晰简明地描述问题是什么。例如:我总是感到沮丧,因为[...]
**描述您想要的解决方案**
清晰简明地描述您希望发生的情况。
**描述您考虑过的替代方案**
清晰简明地描述您考虑过的任何替代解决方案或功能。
**其他上下文**
在此处添加有关功能请求的任何其他上下文或屏幕截图。

10
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,10 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
day: saturday
time: "15:00"
timezone: Asia/Shanghai
open-pull-requests-limit: 10

29
.github/workflows/Code-review.yml vendored Normal file
View File

@ -0,0 +1,29 @@
name: Code Review
on:
pull_request:
branches: [ main ] # 只有针对主分支的 PR 会触发此工作流程
jobs:
code-review:
name: Code Review
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3 # 检查代码库,将其检出到 runner 中
- name: Setup Node.js
uses: actions/setup-node@v3 # 安装 Node.js 运行环境和依赖包
with:
node-version: '12.x'
- name: Install dependencies
run:
npm install
npm i vitepress -D
npm run docs:build
- name: Setup code review
uses: reviewdog/action-eslint@v1 # 使用 reviewdog 工具进行代码审查
with:
github_token: ${{ secrets.GITHUB_TOKEN }} # 授权访问 GitHub API
eslint_level: error # 设置 Eslint 输出级别为 error
# 这个 workflow 文件使用 `pull_request` 事件来监听新的 PR 提交并且只有针对主分支的操作才会触发它。code-review job 使用 `actions/checkout` action 将代码库检出到 runner 中,使用 `actions/setup-node` action 安装 Node.js 运行环境和依赖包,接着通过运行 `npm run lint` 进行代码风格检查和运行 `npm test` 命令来运行测试。最后,在 Setup code review 步骤中,我们使用 `reviewdog/action-eslint` action 来进行代码审查,并将输出级别设置为 `error`。
#
# 需要注意的是,在此示例中,我们使用了 Eslint 工具来进行代码风格检查。如果您的项目使用其他工具或规则,请相应地更改该命令或引用其他 action。

20
.github/workflows/First-interaction.yml vendored Normal file
View File

@ -0,0 +1,20 @@
name: First interaction
on:
issues:
types: [opened]
pull_request_target:
types: [opened]
jobs:
welcome:
runs-on: ubuntu-latest
steps:
- name: Welcome new contributor
uses: actions/first-interaction@v1.1.1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-message: |
你好呀!感谢您打开我们项目的第一期。感谢您的反馈,并期待尽快解决此问题。
pr-message: |
恭喜你打开了你的第一个拉取请求!我们的团队将很快对其进行审核并提供任何必要的反馈。感谢您为我们的项目做出贡献!

58
.github/workflows/auto-merge.yml vendored Normal file
View File

@ -0,0 +1,58 @@
name: Auto Merge
on:
pull_request:
types:
- labeled
- unlabeled
- synchronize
- opened
- edited
- ready_for_review
- reopened
- unlocked
pull_request_review:
types:
- submitted
status: { }
# 定义作业 jobs包括检查 PR 合规性和自动合并发布版本的 PR 到 master 分支两个步骤
jobs:
# 检查 PR 合规性
check:
runs-on: ubuntu-latest # 运行环境为最新版 ubuntu
# 步骤,包括代码 checkout、Node.js 环境设置、依赖安装、代码 lint、单元测试等操作
steps:
- name: Checkout code # 步骤名称为Checkout code
uses: actions/checkout@v3 # 使用 actions/checkout 动作
- name: Setup Node.js environment # 步骤名称为Setup Node.js environment
uses: actions/setup-node@v3 # 使用 actions/setup-node 动作安装 Node.js 环境
with:
node-version: '14.x'
- name: Install dependencies # 步骤名称为Install dependencies
run: |# 安装依赖
npm install
npm i vitepress -D
# - name: Lint code # 步骤名称为Lint code
# run: |# 执行 lint 命令
# npm run lint
- name: Run unit tests # 步骤名称为Run unit tests
run: |# 执行单元测试,如果没有测试用例返回 0
npm run test || exit 0
# 合并发布版本的 PR 到 master 分支
auto-merge:
runs-on: ubuntu-latest # 运行环境为最新版 ubuntu
# 步骤,使用 pascalgn/automerge-action 动作实现自动合并发布版本的 PR 到 master 分支,并定义了环境变量 GITHUB_TOKEN 和 MERGE_FILTER_AUTHOR 条件过滤器。
steps:
- name: Automerge # 步骤名称为Automerge
uses: pascalgn/automerge-action@v0.15.6 # 使用 pascalgn/automerge-action 动作进行自动合并 PR 操作
env:
GITHUB_TOKEN: '${{ secrets.RELEASE_TOKEN }}' # 设置 GitHub Token 密钥,从 secrets 中获取
MERGE_LABELS: ''
MERGE_FILTER_AUTHOR: 'LingASDJ' # 只有作者是 mason369 的 PR 才会被自动合并。

55
.github/workflows/build-and-deploy.yml vendored Normal file
View File

@ -0,0 +1,55 @@
name: build-and-deploy
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Install and Build
run: |
npm install
npm i vitepress -D
npm run docs:build
- name: Deploy
uses: JamesIves/github-pages-deploy-action@v4.4.1
with:
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
BRANCH: gh-pages
FOLDER: dist
# 判断工作流是否全部成功,如果有任意一个步骤失败,则发送失败邮件;否则发送成功邮件。
# - name: Send Mail 发送邮件
# if: ${{ !cancelled() && success() }}
# uses: bingblue/send-nodemailer@master
# with:
# user: '${{ secrets.EMAIL_USERNAME }}'
# pass: '${{ secrets.EMAIL_PASSWORD }}'
# host: 'smtp.gmail.com'
# port: 465
# secure: true
# from: '构建与部署 <maosenyang00@gmail.com>'
# to: 1960638223@qq.com,1694181697@qq.com
# subject: 'Success部署成功'
# html: '<h2>构建部署执行完毕!</h2>'
# - name: Send Mail 发送邮件
# if: ${{ !cancelled() && failure() }}
# uses: bingblue/send-nodemailer@master
# with:
# user: '${{ secrets.EMAIL_USERNAME }}'
# pass: '${{ secrets.EMAIL_PASSWORD }}'
# host: 'smtp.gmail.com'
# port: 465
# secure: true
# from: '构建与部署 <maosenyang00@gmail.com>'
# to: 1960638223@qq.com,1694181697@qq.com
# subject: 'Failed部署失败'
# html: '<h2>部署失败请重新检查代码。</h2>'

View File

@ -0,0 +1,17 @@
# 监听 main 分支
name: Contributes
on:
push:
branches:
- main
jobs:
# 任务
contrib-readme-en-job:
runs-on: ubuntu-latest
name: A job to automate contrib in readme
steps:
- name: Contribute List
uses: akhilmhdh/contributors-readme-action@v2.3.6
env:
GITHUB_TOKEN: ${{ secrets.CONTRIBUTORS_TOKEN }}

17
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,17 @@
name: Release
on:
push:
branches:
- main
jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: GoogleCloudPlatform/release-please-action@v3
id: release
with:
token: ${{ secrets.RELEASE_TOKEN }}
release-type: node
package-name: standard-version
changelog-types: '[{"type": "types", "section":"Types", "hidden": false},{"type": "revert", "section":"Reverts", "hidden": false},{"type": "feat", "section": "Features", "hidden": false},{"type": "fix", "section": "Bug Fixes", "hidden": false},{"type": "improvement", "section": "Feature Improvements", "hidden": false},{"type": "docs", "section":"Docs", "hidden": false},{"type": "style", "section":"Styling", "hidden": false},{"type": "refactor", "section":"Code Refactoring", "hidden": false},{"type": "perf", "section":"Performance Improvements", "hidden": false},{"type": "test", "section":"Tests", "hidden": false},{"type": "build", "section":"Build System", "hidden": false},{"type": "ci", "section":"CI", "hidden":false},{"type": "update", "section":"update", "hidden":false},{"type": "Update", "section":"Update", "hidden":false},{"type": "mods", "section":"MODS", "hidden":false},{"type": "mod", "section":"MOD", "hidden":false},{"type": "更新", "section":"更新", "hidden":false},{"type": "del", "section":"Delete", "hidden":false}]'

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
node_modules
rustedwarfareapicode/.vitepress/dist/

1503
Backup/code.md Normal file

File diff suppressed because it is too large Load Diff

63
README_en.md Normal file
View File

@ -0,0 +1,63 @@
# RW-API-CODE
Easy Code,Easy Study.
Rusted Warfare API Code Base on VitePress Frame Work.
In this.You Can Study RTS Unit Code,And Map Code,Debug Code Or More And More,
Do you Ready? Let's Go!
# Rules
* The code is for reference only. If there are any errors or omissions, please feel free to mention Github Issues
* RW-API-Code is an unofficial third-party RustedWarfare code website that provides an efficient and highly learned service attitude.
* If you want to collaborate on development, please Fork our main branch and apply for PullRequst
# Dev
## 1.Prerequisite: Node.js 18 or above
```txt
If you don't have Node.js, you can download it from the link below.
What, I'm not sure what Node.js is doing? I suggest closing this page immediately.
```
Node.js Link:[Node.js](https://nodejs.org/en)
## 2.Install Vite Press
```bash
npm i vitepress -D
```
## 3.Package.json Framework
```json
{
"scripts": {
"docs:dev": "vitepress dev rustedwarfareapicode",
"docs:build": "vitepress build rustedwarfareapicode",
"docs:preview": "vitepress preview rustedwarfareapicode"
},
"devDependencies": {
"vitepress": "^1.0.0-alpha.65"
}
}
```
## 4.Local Deployment
DEV TEST:
```bash
npm run docs:dev
```
Build TEST:
```bash
npm run docs:build
```
Preview TEST:
```bash
npm run docs:preview
```
# Netlify Deployment
When you submit your PR, it will automatically process it for you.
# License
[Apache License-2.0](https://github.com/LingASDJ/RW-API-Code/blob/main/LICENSE)

1184
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

10
package.json Normal file
View File

@ -0,0 +1,10 @@
{
"scripts": {
"docs:dev": "vitepress dev rustedwarfareapicode",
"docs:build": "vitepress build rustedwarfareapicode",
"docs:preview": "vitepress preview rustedwarfareapicode"
},
"devDependencies": {
"vitepress": "^1.0.0-alpha.65"
}
}

View File

@ -0,0 +1,41 @@
// node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/index.js
import "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/styles/fonts.css";
// node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/without-fonts.js
import "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/styles/vars.css";
import "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/styles/base.css";
import "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/styles/utils.css";
import "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/styles/components/custom-block.css";
import "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/styles/components/vp-code.css";
import "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/styles/components/vp-code-group.css";
import "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/styles/components/vp-doc.css";
import "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/styles/components/vp-sponsor.css";
import VPBadge from "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/components/VPBadge.vue";
import Layout from "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/Layout.vue";
import { default as default2 } from "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/components/VPHomeHero.vue";
import { default as default3 } from "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/components/VPHomeFeatures.vue";
import { default as default4 } from "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/components/VPHomeSponsors.vue";
import { default as default5 } from "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue";
import { default as default6 } from "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/components/VPTeamPage.vue";
import { default as default7 } from "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue";
import { default as default8 } from "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/components/VPTeamPageSection.vue";
import { default as default9 } from "D:/RTS-Code-V4-Html/node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/components/VPTeamMembers.vue";
var theme = {
Layout,
enhanceApp: ({ app }) => {
app.component("Badge", VPBadge);
}
};
var without_fonts_default = theme;
export {
default5 as VPDocAsideSponsors,
default3 as VPHomeFeatures,
default2 as VPHomeHero,
default4 as VPHomeSponsors,
default9 as VPTeamMembers,
default6 as VPTeamPage,
default8 as VPTeamPageSection,
default7 as VPTeamPageTitle,
without_fonts_default as default
};
//# sourceMappingURL=@theme_index.js.map

View File

@ -0,0 +1,7 @@
{
"version": 3,
"sources": ["../../../../node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/index.js", "../../../../node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/without-fonts.js"],
"sourcesContent": ["import './styles/fonts.css';\nexport * from './without-fonts';\nexport { default as default } from './without-fonts';\n", "import './styles/vars.css';\nimport './styles/base.css';\nimport './styles/utils.css';\nimport './styles/components/custom-block.css';\nimport './styles/components/vp-code.css';\nimport './styles/components/vp-code-group.css';\nimport './styles/components/vp-doc.css';\nimport './styles/components/vp-sponsor.css';\nimport VPBadge from './components/VPBadge.vue';\nimport Layout from './Layout.vue';\n// Note: if we add more optional components here, i.e. components that are not\n// used in the theme by default unless the user imports them, make sure to update\n// the `lazyDefaultThemeComponentsRE` regex in src/node/build/bundle.ts.\nexport { default as VPHomeHero } from './components/VPHomeHero.vue';\nexport { default as VPHomeFeatures } from './components/VPHomeFeatures.vue';\nexport { default as VPHomeSponsors } from './components/VPHomeSponsors.vue';\nexport { default as VPDocAsideSponsors } from './components/VPDocAsideSponsors.vue';\nexport { default as VPTeamPage } from './components/VPTeamPage.vue';\nexport { default as VPTeamPageTitle } from './components/VPTeamPageTitle.vue';\nexport { default as VPTeamPageSection } from './components/VPTeamPageSection.vue';\nexport { default as VPTeamMembers } from './components/VPTeamMembers.vue';\nconst theme = {\n Layout,\n enhanceApp: ({ app }) => {\n app.component('Badge', VPBadge);\n }\n};\nexport default theme;\n"],
"mappings": ";AAAA,OAAO;;;ACAP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO,aAAa;AACpB,OAAO,YAAY;AAInB,SAAoB,WAAXA,gBAA6B;AACtC,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAAqC;AAC9C,SAAoB,WAAXA,gBAA6B;AACtC,SAAoB,WAAXA,gBAAkC;AAC3C,SAAoB,WAAXA,gBAAoC;AAC7C,SAAoB,WAAXA,gBAAgC;AACzC,IAAM,QAAQ;AAAA,EACV;AAAA,EACA,YAAY,CAAC,EAAE,IAAI,MAAM;AACrB,QAAI,UAAU,SAAS,OAAO;AAAA,EAClC;AACJ;AACA,IAAO,wBAAQ;",
"names": ["default"]
}

View File

@ -0,0 +1,19 @@
{
"hash": "cfff58c0",
"browserHash": "db198c51",
"optimized": {
"vue": {
"src": "../../../../node_modules/_vue@3.2.47@vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "bdf893bb",
"needsInterop": false
},
"@theme/index": {
"src": "../../../../node_modules/_vitepress@1.0.0-alpha.65@vitepress/dist/client/theme-default/index.js",
"file": "@theme_index.js",
"fileHash": "ea36232e",
"needsInterop": false
}
},
"chunks": {}
}

View File

@ -0,0 +1 @@
{"type":"module"}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,30 @@
import { defineConfig } from 'vitepress'
// https://vitepress.dev/reference/site-config
export default defineConfig({
title: "RW-API_Code",
description: "Easy Code",
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: 'Home', link: '/' },
{ text: 'Examples', link: '/markdown-examples' }
],
sidebar: [
{
text: 'RW-API-Code',
items: [
{ text: '主页-Home', link: '/markdown-examples' },
{ text: '核心-CORE', link: '/src/Unit/core' },
{ text: '可建造-CORE', link: '/src/Unit/canbuild' },
{ text: '逻辑组-LogicBoolean', link: '/src/Unit/loginboolean' }
]
}
],
socialLinks: [
{ icon: 'github', link: 'https://github.com/vuejs/vitepress' }
]
}
})

View File

@ -0,0 +1,49 @@
---
outline: deep
---
# Runtime API Examples
This page demonstrates usage of some of the runtime APIs provided by VitePress.
The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files:
```md
<script setup>
import { useData } from 'vitepress'
const { theme, page, frontmatter } = useData()
</script>
## Results
### Theme Data
<pre>{{ theme }}</pre>
### Page Data
<pre>{{ page }}</pre>
### Page Frontmatter
<pre>{{ frontmatter }}</pre>
```
<script setup>
import { useData } from 'vitepress'
const { site, theme, page, frontmatter } = useData()
</script>
## Results
### Theme Data
<pre>{{ theme }}</pre>
### Page Data
<pre>{{ page }}</pre>
### Page Frontmatter
<pre>{{ frontmatter }}</pre>
## More
Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata).

View File

@ -0,0 +1,25 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: "RW-API_Code"
text: "Easy Code"
tagline: My great project tagline
actions:
- theme: brand
text: Markdown Examples
link: /markdown-examples
- theme: alt
text: API Examples
link: /api-examples
features:
- title: Feature A
details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
- title: Feature B
details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
- title: Feature C
details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
---

View File

@ -0,0 +1,85 @@
# Markdown Extension Examples
This page demonstrates some of the built-in markdown extensions provided by VitePress.
## Syntax Highlighting
VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting:
**Input**
````
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
````
**Output**
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
## Custom Containers
**Input**
```md
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a dangerous warning.
:::
::: details
This is a details block.
:::
```
**Output**
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a dangerous warning.
:::
::: details
This is a details block.
:::
## More
Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown).

View File

@ -0,0 +1 @@
xx

View File

@ -0,0 +1,770 @@
---
outline: deep
---
# **[core]组**
## 第一类-通用代码组
::: tip
以下的代码为`通用代码`,多半是必要的代码,如果不包括这些,可能在`绝大多数情况下导致错误`。
:::
### name
#### name-代码简介
代码:name 中文释义:名字 类型:字符型 隶属于:通用代码组
#### name-要点指示
<!-- 代码盒子例子 -->
::: code-group
```bash [JDSALing]
定义单位原始名称,可以是中文。
游戏使用它区分其它单位。
如果没有在[displayText或者语言文件设置显示名称]
那么它也将作为单位的显示名称。
具体描述文件位置(内部):
1.assets/translationsStrings_zh.properties
格式:units.单位名称.name=写单位显示的名称
units.单位名称.description= [[填单位显示的描述]]
```
```bash [Tobby3600]
ini文件的单独定义(外部-推荐):
2.displayText: -单位的标题
displayDescription: -单位的描述
```
:::
特别提醒:`displayText支持本地化`,例如如果要写一个`多语言的单位描述`,可以通过以下例子:
#### name-演示例子
```ini
演示例子
[core]
name: Ling
displayText: English Title Text
displayText_zh:中文标题
displayDescription: -English Description
displayDescription_zh:-中文描述
```
### price
#### price-代码简介
代码:price 中文释义:价格 类型:整数 隶属于:通用代码组
#### price-要点指示
定义单位的价格,显示在单位信息中,建造时也以此价格为准。
::: code-group
``` bash [Tobby3600]
默认情况下price只需要填写一个整数此时使用的是游戏内自带的资金credit
想要更改资源类型,可以使用:
`price:资源1=数值1,资源2=数值2,资源3=数值3,……` 的格式
(前提是此资源要在使用的单位进行定义)。
```
:::
#### price-演示例子
```ini
[core]
price:120,石油=80,铁=60
```
### radius
#### radius-代码简介
代码:radius 中文释义:半径 类型:整数 隶属于:通用代码组
#### radius-要点指示
半径定义单位的`实际碰撞体积和显示范围`,在未设置`选择框大小`时,半径决定是单位选择框的大小。
半径的单位是像素(px)。
#### radius-演示例子
```ini
[core]
radius:20
```
### mass
#### mass-代码简介
代码:mass 中文释义:质量 类型:整数 隶属于:通用代码组
#### mass-要点指示
质量决定单位在各种碰撞时的效果。`质量越大,其他单位越难推动`。
#### mass-演示例子
```ini
[core]
mass:2000
```
### maxHp
#### maxHp-代码简介
代码:maxHp 中文释义:最大生命值 类型:整数 隶属于:通用代码组
#### maxHp-要点指示
::: code-group
``` bash [tobby3600]
最大生命值定义单位在不修改它时最多能够有多少血量,
单位默认生成时即是这个血量。
maxHp可以通过单位参考.maxHp()来获取,
也可以通过[action]进行修改。
```
:::
#### maxHp-演示例子
```ini
[core]
maxHp:600
```
### altNames
#### altNames-代码简介
代码:altNames 中文释义:别名/曾用名 类型:字符型 隶属于:通用代码组
#### altNames-要点指示
altNames代码要点指示:
<!-- chat:start -->
#### **JDSALing的小提示**
主要在<font color=orange>启用多个自定义Mod</font>进行优先级定义<br>
以逗号分隔的名称列表。像<font color=orange>名称一样,但优先级较低</font>,对于<font color=orange>启用多个自定义mod</font>有用。
<!-- chat:end -->
#### altNames-演示例子
```ini
[core]
altNames:ling,tobby3600,coldmint
```
### class
#### class-代码简介
代码:class 中文释义:类 类型:字符型 隶属于:通用代码组
无实际用处,可以删除。<br>
Luke保留供将来使用默认情况下必须为`CustomUnitMetadata`。由于该代码无实际用途,可以忽略该代码<br>
该代码后面什么都可以输,但没有实际用途。或许在未来会有用。
#### class-演示例子
```ini
[core]
class:CustomUnitMetadata
```
### strictLevel
#### strictLevel-代码简介
代码:strictLevel 中文释义:严格级别 类型:数字固定型 隶属于:通用代码组
::: tip
建议添加到"all-units.template"以应用于所有单位,进行统一查错。<br>
默认值为0忽略代码重复。设为1时如果当前单位内有重复代码则报错。
:::
#### strictLevel-演示例子
```all-units.template,ini
[core]
strictLevel:1
```
### techLevel
#### techLevel-代码简介
代码:techLevel 中文释义:科技等级 类型:数字固定型 隶属于:通用代码组
::: tip
早期是用于在<font color=orange>builtFrom</font>的代码,并结合科技等级使用。如果工厂的等级低于单位的目标科技等级,则会在工厂里面隐藏该单位。<br>自铁锈1.09后出现<font color=orange>overrideAndReplace</font>后,该方法则不建议使用。有关于新策略,请参考<font color=orange>overrideAndReplace</font>代码文档指南。<br>
设置单位的科技等级共有3个级别1级GUI显示为绿色2、3级显示为黄色。超过3报错。
:::
#### techLevel-演示例子
```ini
[core]
techLevel:2
```
### buildSpeed
#### buildSpeed-代码简介
代码:buildSpeed 中文释义:建造速度 类型:浮点/秒型 隶属于:通用代码组
::: tip
建造此单位需要的时间,填秒。<br>
以前的计算方式为:此处所填时间=1÷(60x你需要的秒)如果定义了工厂速率则需要乘以建造乘数。
:::
#### buildSpeed-演示例子
```ini
[core]
buildSpeed:30s
#或者
## 下方可能有误差
buildSpeed:0.0006
```
### isBio
#### isBio-代码简介
代码:isBio 中文释义:是生物 类型:布尔型 隶属于:通用代码组
:::tip {2}
若设置成true,则会在单位死亡时产生血迹,
图像在<font color=orange>drawable/blood_mark.png---hideScorchMark:true</font>时可以隐藏非生物则为黑色爆炸效果。
:::
#### isBio-演示例子
```ini
[core]
isBio:true
```
### isBug
#### isBug-代码简介
代码:isBug 中文释义:是虫子 类型:布尔型 隶属于:通用代码组
:::tip
若设置成true,则会认定为虫子,用于沙盒中的单独分类。
:::
#### isBug-演示例子
```ini
[core]
isBug:true
```
### isBuilder
#### isBuilder-代码简介
代码:isBuilder 中文释义:是建造者 类型:布尔型 隶属于:通用代码组
:::tip
若设置成true,则会需要此单位建造建筑物,则通常需要此代码。
并且默认设为[ai] useAsBuilder。
:::
#### isBuilder-演示例子
```ini
[core]
isBuilder:true
```
### streamingCost
#### streamingCost-代码简介
代码:streamingCost 中文释义:流式资金 类型:整数型 隶属于:通用代码组
::: tip和价格一样但在建造时逐渐消耗资金如果在构建过程中资源耗尽
建造或生产队列将暂停。就像是红警中那样。铁锈默认是预先扣除资金。
若使用该代码,则玩家的每秒资金将会根据流式资金的算法进行扣减。
#### streamingCost-演示例子
```ini
[core]
streamingCost:1145
```
### switchPriceWithStreamingCost
#### S.P.S.C.-代码简介
代码:switchPriceWithStreamingCost(S.P.S.C.)
中文释义:流式资金模式全局切换 类型:布尔型 隶属于:通用代码组
::: tip
快捷设置为默认资金消耗方式或为流式建造方式。
建议使用模板快速将一个模组为所有单位切换流资源。
例如all-units.template.
:::
#### S.P.S.C.-演示例子
```ini,all-units.template
[core]
switchPriceWithStreamingCost:true
```
## 第二类-单位统计代码组
::: tip
非必须存在的代码,请根据情况自行使用
:::
### selfRegenRate
#### selfRegenRate-代码简介
代码:selfRegenRate 中文释义:生命恢复速度 类型:浮点型 隶属于:单位统计代码组
::: tip
此数值决定每帧增加血量。游戏内默认速度下一秒为60逻辑帧而你看到的FPS帧数为渲染帧所以电脑上几百帧和手机上60帧和省电模式下30帧并不影响计算。所以不要写太大。可以写负值用于自毁。
:::
#### selfRegenRate-演示例子
```ini
[core]
maxHp:500
selfRegenRate:0.5
```
### maxShield
#### maxShield-代码简介
代码:maxShield 中文释义:护盾值 类型:整型 隶属于:单位统计代码组
::: tip
单位最大护盾值默认生成时即为此值。如果设置了startShieldAtZero:true则初始为0.
:::
#### maxShield-演示例子
```ini
[core]
maxShield:3000
```
### startShieldAtZero
#### startShieldAtZero-代码简介
代码:startShieldAtZero 中文释义:护盾初始值为0 类型:布尔型 隶属于:单位统计代码组
::: tip
如果为true则单位护盾值从0开始增加。
:::
#### startShieldAtZero-演示例子
```ini
[core]
maxShield:3000
startShieldAtZero:true
```
### shieldRegen
#### shieldRegen-代码简介
代码:shieldRegen 中文释义:护盾恢复速度 类型:浮点型 隶属于:单位统计代码组
::: tip
此数值决定每帧增加护盾值游戏内一秒为60帧所以不要写太大。可以写负值。
:::
#### shieldRegen-演示例子
```ini
[core]
maxShield:3000
shieldRegen:0.5
```
### energyMax
#### energyMax-代码简介
代码:energyMax 中文释义:能量值 类型:浮点型 隶属于:单位统计代码组
::: tip
默认值为0。可以用作炮塔激光防御和行动的弹药的能量。
:::
#### energyMax-演示例子
```ini
[core]
energyMax:5
```
### energyRegen
#### energyRegen-代码简介
代码:energyRegen 中文释义:能量恢复速度 类型:浮点型 隶属于:单位统计代码组
::: tip
能量每帧恢复速度游戏内一秒为60帧所以不要写太大。可以写负值。
:::
#### energyRegen-演示例子
```ini
[core]
energyRegen:0.4
```
### energyRegenWhenRecharging(E.R.W.C)
#### E.R.W.C-代码简介
代码:energyRegenWhenRecharging
中文释义:充能时能量恢复速度 类型:浮点型 隶属于:单位统计代码组
::: tip
能量恢复是持续的,如果你设置了<font color="orange">energyNeedsToRechargeToFull</font>
那么攻击时按energyRegen恢复耗尽时的灰条按此处设定值恢复。
:::
#### E.R.W.C-演示例子
```ini
[core]
energyMax:1
energyRegenWhenRecharging:0.4
```
### energyNeedsToRechargeToFull(E.N.T.R)
#### E.N.T.R-代码简介
代码:energyNeedsToRechargeToFull
中文释义:能量需要充满 类型:布尔型 隶属于:单位统计代码组
::: tip
如果能量耗尽,则需要完全充能才能进行攻击。
:::
#### E.N.T.R-演示例子
```ini
[core]
energyMax:4
energyNeedsToRechargeToFull:true
```
### armour
#### armour-代码简介
代码:armour
中文释义:装甲 类型:整型 隶属于:单位统计代码组
::: tip
抵消敌方攻击所造成的伤害。
:::
#### armour-演示例子
```ini
[core]
armour:40
#如果受到40以上的常规攻击则进行抵消反之返回1伤害点。
#例如45伤害40护甲那么将获得5点伤害。
```
### armourMinDamageToKeep(A.M.D.T)
#### A.M.D.T-代码简介
代码:armour
中文释义:装甲最低伤害 类型:整型 隶属于:单位统计代码组
:::tip
至少造成多少点伤害默认为1.防止护甲太高完全打不动。
:::
#### A.M.D.T-演示例子:
```ini
[core]
armour:40
armourMinDamageToKeep:2
#如果受到40以下的常规攻击,则进行最低伤害判定
```
### borrowResourcesWhileAlive(B.R.W.A)
#### B.R.W.A-代码简介
代码:armour
中文释义:资源活着时借用 类型:Price型 隶属于:单位统计代码组
:::tip
创建时获取这些资源,删除或销毁时将其返回。
例如用于电力逻辑,负数供电和正数耗电。
:::
#### B.R.W.A-演示例子:
```ini
[core]
borrowResourcesWhileAlive:5000
#单位活着的时候给予5000金币死亡扣除5000金币
#一个小型贷款系统
```
:::code-group
``` bash [考考你]
如果这里要通过这个代码做一个小的贷款系统,
并经过一段时间让单位死亡。
只需要4行代码即可实现试试看。
提示dieOnZeroEnergy:true
(无能量时死亡|如果能量值为零,该单位死亡)
```
``` bash [显示答案]
#参考答案为
[core]
borrowResourcesWhileAlive:5000
energyMax:1
energyRegen:-0.4
dieOnZeroEnergy:true
#原理是通过能量为0单位死亡并通过这个代码还钱
是很简陋的贷款思路,当然,在后续会有更加高级的思路。
```
:::
### generation_resources(G.R_R.S)
#### G.R_R.S-代码简介
代码:generation_resources
中文释义:资源获取 类型:Price型 隶属于:单位统计代码组
::: tip
单位定时获得的资源,可自定义资源。
:::
#### G.R_R.S-演示例子
```ini
[core]
generation_resources:10
#or
generation_resources:credit=10
#常规产出10Credit/1s游戏资金
-----------我是分界线----------
#自定义资源写法
[core]
generation_resources:金属=5
```
### generation_active
#### generation_active-代码简介
代码:generation_active
中文释义:资源获取条件 类型:逻辑布尔型 隶属于:单位统计代码组
::: tip
获取资源条件。可用于受损时无法产出。
:::
#### generation_active-演示例子
```ini
[core]
#1.14写法
generation_resources:金属=5
generation_active: if not self.hp(lessThan=100)
#1.15写法
[core]
generation_resources:金属=5
generation_active: if not self.hp<100
#效果单位低于1000血量可以产出资源
```
### generation_credits
#### generation_credits-代码简介
代码:generation_credits
中文释义:资金获取 类型:整型 隶属于:单位统计代码组
::: tip
生成资源,仅用于默认的资金,也就是铁锈默认的金钱。
:::
#### generation_credits-演示例子
```ini
[core]
generation_credits=5
```
### generation_delay
::: danger
此代码为老旧代码作者Luke不推荐使用。
:::
::: warning
警告请勿使用40以外的数值否则会有视觉Bug。例如使用30资金生成3实际就为6但是一旦这类单位多了游戏的资金显示会出问题。
:::
#### generation_delay-代码简介
代码:generation_delay
中文释义:资金获取时间 类型:整型 隶属于:单位统计代码组
::: tip
多久帧添加添加一次资源(generation_credits指定数值)。
默认值为40一秒为60帧。
:::
#### generation_delay-演示例子
```ini
[core]
generation_delay=40
```
## 第三类-UI和图形代码
### showInEditor
#### showInEditor-代码简介
代码:showInEditor
中文释义:沙盒中可见 类型:布尔型 隶属于:UI和图形代码组
::: tip
设置为false可在沙箱编辑器中隐藏单位。(默认为true)
:::
#### showInEditor-演示例子
```ini
[core]
showInEditor:false
```
### displayText_LANG
#### displayText_{LANG}-代码简介
代码:displayText_{LANG}
中文释义:界面显示文本多语言 类型:字符型 隶属于:UI和图形代码组
::: tip
为单位名称添加多语言支持。此方法并不方便不如设置游戏内部语言文件建议催Luke改。有关常见语言代码请参考下表
:::
| 语言代码 | 所属国家/地区| 语言代码 | 所属国家/地区
|:--------:|:-----------:|:--------:|:-----------:
| zh | (中文通用) | en(可忽略) | (英语通用)
| zh-cn | (简体) | ru | (俄语)
| zh-tw | (台湾) | ja | (日语)
| zh-hk | 中文(香港) | es-ES | (西班牙)
| de | (德语) | fr-FR | 法语(法国)
::: warning
其它自查(此列表并不全),不过你应该不会闲着支持这么多语言。另外英文的语言代码`en`可以忽略,因为英文在软件里为默认语言,故而无需加`en`,当然加了也没事。
:::
如果你不想进行多语言化,你应该直接`displayText:坦克`,而不是`displayText_zh:坦克`,如果你写了`displayText_zh:坦克`<br>你必须再声明一个`displayText:Tank`,否则,游戏会找不到`默认语言缺省值`,将会导致`mod报错而无法运行`。所有可以使用多语言的都有这个检查还请各位Moder留意。若有特别的代码将会在它里面特别提示
#### displayText_{LANG}-演示例子
```ini
[core]
#English
displayText:Tank
#Chinese
displayText_zh:坦克
```
### displayDescription_LANG
#### displayDescription-代码简介
代码:displayDescription_{LANG}
中文释义:界面显示描述 类型:字符型 隶属于:UI和图形代码组
::: tip
单位显示给玩家的单位描述,可以使用多语言,具体使用方法参考在`displayText`的演示说明,这里不再过多讨论。
:::
#### displayDescription-演示例子
```ini
[core]
displayText:坦克
displayDescription:只能对地,弱输出,只能在地上行走。
```
### displayLocaleKey
#### displayLocaleKey-代码简介
代码:displayLocaleKey
中文释义:界面显示内部调用 类型:字符型 隶属于:UI和图形代码组
::: tip
调用内部语言文件的单位名称和说明的翻译文件。用处不大,通常是在`替换原版单位的同时直接调用它的原始描述`。该代码例子需要会拆包,如果你是初学者,该代码了解即可。
:::
#### displayLocaleKey-演示例子
```ini
[core]
displayLocaleKey: units.mechArtillery
```
### displayRadius
#### displayRadius-代码简介
代码:displayRadius 中文释义:单位选择时显示圆圈 类型:整形 隶属于:UI和图形代码组
::: tip
修改选择单位时显示的绿色圆圈,不更改实际碰撞(radius)和可选择范围。
:::
#### displayRadius-演示例子
```ini
[core]
displayRadius:25
```
### uiTargetRadius
#### uiTargetRadius-代码简介
代码:uiTargetRadius 中文释义:为目标时半径 类型:整形 隶属于:UI和图形代码组
::: tip
默认为显示半径值。攻击/回收/等单位时使用的半径
:::
#### uiTargetRadius-演示例子:
```ini
[core]
uiTargetRadius:25
```
### shieldRenderRadius
#### shieldRenderRadius-代码简介
代码:shieldRenderRadius 中文释义:单位护盾显示半径 类型:整形 隶属于:UI和图形代码组
::: tip
护盾绘制半径,默认值比半径大一点。
可以设置在单位上显示更大或更小的护盾圈。
:::
#### shieldRenderRadius-演示例子:
```ini
[core]
shieldRenderRadius:20
```
### shieldDisplayOnlyDeflection
#### shieldDisplayOnlyDeflection-代码简介
代码:shieldDisplayOnlyDeflection 中文释义:护盾只在受攻击时显示 类型:布尔型 隶属于:UI和图形代码组
::: tip
隐藏护盾,只在受到攻击时显示。
:::
#### shieldDisplayOnlyDeflection-演示例子:
```ini
[core]
shieldDisplayOnlyDeflection:true
```
### shieldDeflectionDisplayRate
#### shieldDeflectionDisplayRate-代码简介
代码:shieldDeflectionDisplayRate 中文释义:护盾消失速度 类型:浮点型 隶属于:UI和图形代码组
::: tip
默认值为4。数值越大消失越快。
:::
#### shieldDeflectionDisplayRate-演示例子:
```ini
[core]
shieldDeflectionDisplayRate:3
```
### showOnMinimap
#### showOnMinimap-代码简介
代码:shieldDeflectionDisplayRate 中文释义:显示在小地图上 类型:布尔型 隶属于:UI和图形代码组
::: tip
默认为true。如果为false则在小地图上不显示此单位。
:::
#### showOnMinimap-演示例子:
```ini
[core]
showOnMinimap:true
```
### showOnMinimapToEnemies
#### showOnMinimapToEnemies-代码简介
代码:showOnMinimapToEnemies 中文释义:显示于敌人小地图 类型:布尔型 隶属于:UI和图形代码组
::: tip
是否在敌人小地图上显示。
:::
#### showOnMinimapToEnemies-演示例子:
```ini
[core]
showOnMinimapToEnemies:true
```
### showActionsWithMixedSelectionIfOtherUnitsHaveTag
#### showActionsWithMixedSelectionIfOtherUnitsHaveTag-代码简介
代码:showActionsWithMixedSelectionIfOtherUnitsHaveTag 中文释义:混合所选单位所显示的行为 类型:标签型 隶属于:UI和图形代码组
::: tip
如果选择的单位都包含此处使用的标签,则合并“行为(action)”。比如你的步兵通过部署转化成另一个单位,在混合时可以当作同一个单位处理,不再是默认的谁都无法执行操作。例子如红警的盟军大兵在混合选中后依旧可执行部署或解除。
:::
#### showActionsWithMixedSelectionIfOtherUnitsHaveTag-演示例子
```ini
[core]
showActionsWithMixedSelectionIfOtherUnitsHaveTag:tag_联系
```
## 第四组-构建代码

View File

@ -0,0 +1 @@
xxxx

View File

@ -0,0 +1,428 @@
---
outline: deep
---
# **[LogicBoolean] 逻辑序列组**
> [!ATTENTION] 由于这个组的特殊性,格式不标准,请勿参考这个组的写法。
### 前置知识
#### 布尔值
<font color=orange>布尔值</font>表达“真(true)”或“假(false)”的一个状态。在铁锈中,布尔值(`boolean`)被运用于逻辑判断。
#### 数据类型
数据类型指数据的种类,在铁锈中,不同的数据有不同的类型,不同的数据类型之间通常不能直接进行运算。
|常见数据类型英文 |存储的值类型 |
| -------- | ------------ |
| string | 字符串 |
| number | 整数 |
| float | 浮点数(小数) |
| boolean | 布尔值 |
| unit | 单位 |
<!-- MarkDown表格必须有上方的分割线以告诉浏览器是表格 -->
#### 算数优先级
与数学中计算符一样,铁锈中算数运算符有优先级区别。`%`和`*`和`/`的优先级大于`+`和`-`。
### 比较运算符
#### 如果
代码:if 中文释义:如果
`if`是大部分逻辑运算的开头(select等不需要if),用于在支持逻辑的键引入逻辑判断。
<!-- 若要连续嵌套请直接使用Html原生代码 -->
<div class="alert callout tip">
<p>演示例子:</p>
</div>
```ini
[action]
autoTrigger:if self.maxHp() > memory.emx_hp
```
#### 小于
代码:< 中文释义:小于<br>
小于用于在逻辑布尔值中比较两个数的大小,格式为`数据a < 数据b``a<b`则整个式子的值为`true`否则为`false`
<!-- 自定义的提示框请使用原生Html进行套入 -->
<div class="alert callout note">
<p class="title">
<span class="icon icon-note"></span>要点指示:</p>
</div>
```ini
[action]
autoTrigger:if memory.a < memory.b
```
#### 大于
代码:> 中文释义:大于<br>
同上,格式为`数据a > 数据b`,若`a>b`则整个式子的值为`true`,否则为`false`。
#### 小于等于
代码:<= 中文释义:小于等于<br>
同上,若`a<=b`则整个式子的值为`true`,否则为`false`。
#### 大于等于
代码:>= 中文释义:大于等于<br>
同上,若`a>=b`则整个式子的值为`true`,否则为`false`。
#### 等于
代码:== 中文释义:等于<br>
> [!TIP] 请注意,铁锈中等于的符号为<font color=orange>==</font><font color=orange>=</font>在铁锈中用于赋值或参数。
>
同上,若`a=b`则整个式子的值为`true`,否则为`false`。
#### 不等于
代码:!= 中文释义:不等于<br>
同上,若`a!=b`则整个式子的值为`true`,否则为`false`。
### 逻辑运算符
#### 且
代码:and 中文释义:且<br>
> [!TIP] <font color=orange>and</font>用于连接两个逻辑判断,只有在这两个逻辑判断的值都为<font color=orange>true</font>时,<font color=orange>and</font>的值才为true。
<br>
<!-- 自定义的提示框请使用原生Html进行套入 -->
<div class="alert callout note">
<p class="title">
<span class="icon icon-note"></span>要点指示:</p>
</div>
<!-- 并保证首尾留有一行换行以便Markdown正确解析 -->
```ini
[action]
autoTrigger:if memory.a < memory.b and memory.a > memory.c
# 在这个例子中只有a小于b且a大于c时自动触发才会被触发
```
#### 或
代码:or 中文释义:或<br>
> [!TIP] <font color=orange>or</font>用于连接两个逻辑判断,只要这两个逻辑判断的值有一个为<font color=orange>true</font>时,<font color=orange>or</font>的值就为true。
#### 非
代码:not 中文释义:非<br>
> [!TIP] <font color=orange>not</font>用于将某个逻辑判断的值取反,即`true`变`false``false`变`true`。
> [!NOTE] 多个逻辑运算符同时使用时,优先级为`not>and>or`,同时<font color=orange>支持使用括号改变运算优先级</font>
<br>推荐<font color=orange>在不确定优先级时打括号</font>
<div class="alert callout tip">
<p>演示例子:</p>
</div>
```ini
[action]
autoTrigger:if (memory.a < memory.b or memory.a > memory.c) and not memory.a < memory.d
```
<!-- tabs:start -->
<!-- 换行两个空格 或者 <br> -->
#### **动动脑考考你**
#### 考考你,在上述这个例子中,满足什么条件才会触发?
#### **显示答案-#2**
#### 答案a必须满足小于b和大于c中的一个且a必须小于c自动触发才会被触发。
<!-- tabs:end -->
### 算数运算符
#### 加
代码:+ 中文释义:加<br>
加用于将两个逻辑值相加,得到结果,格式为`数据a + 数据b`。
> [!NOTE] 不同数据类型通常<font color=orange>不能直接进行算数运算</font>,但在部分情况下,<font color=orange>number</font><font color=orange>float</font>类型可以混用(建议<font color=orange>所有数值全部使用float</font>来避免混淆)。
<div class="alert callout tip">
<p>演示例子:</p>
</div>
```ini
[action]
autoTrigger:if (memory.a + memory.c) < memory.b
```
#### 减
代码:- 中文释义:减<br>
减用于将两个逻辑值相减,得到结果,格式为`数据a - 数据b`。
> [!NOTE] 对于<font color=orange>不满足交换律的运算符</font>,需要注意<font color=orange>运算优先级</font>是否正确。由于铁锈本身bug<font color=orange>在数学上正确的优先级不一定在铁锈中正确</font>,因此可能出现减法顺序混乱等问题。
<br>为了避免可能的问题,请尽量在任何<font color=orange>不满足交换律的运算符</font>两边打上括号。
#### 乘
代码:* 中文释义:乘<br>
乘用于将两个逻辑值相乘,得到结果,格式为`数据a * 数据b`。
#### 除
代码:/ 中文释义:除<br>
除用于将两个逻辑值相除,得到结果,格式为`数据a / 数据b`。
#### 求余
代码:% 中文释义:求余(取模)<br>
求余用于获取两个逻辑值中,第一个除第二个的余数,格式为`数据a % 数据b`。
例如`7%3=1(7除3余1)`
### 单位统计
#### 通用统计关键字
单位统计中部分通用的关键字:
1. `greaterThan` 大于
2. `lessThan` 小于
3. `empty`
4. `full`
5. `equalTo` 等于
#### 内置参数
单位统计中部分内置参数返回代码(由于过于简单不单独列出):
1. `self.hp()` 生命值
2. `self.maxHp()` 最大生命值
3. `self.energy()` 能量
4. `self.shield()` 护盾
5. `self.kills()` 击杀数
6. `self.maxEnergy()` 最大能量
7. `self.maxShield()` 最大护盾
8. `self.height()/self.x()` 高度
9. `self.ammo()` 弹药
10. `self.isAmmoEmpty()` 弹药为空(快捷方式:`self.ammo(empty=true)`)
11. `self.ammoIncludingQueued()` 包括队列中的弹药
12. `self.energyIncludingQueued()` 包括队列中的能量
13. `self.isEnergyFull()` 能量满(快捷方式:`self.energy(full=true)`)
14. `self.isEnergyEmpty()` 能量空(快捷方式:`self.energy(empty=true)`)
15. `self.isEnergyRecharing()` 能量充能中
16. `self.playerName()` 玩家名称
17. `self.teamName()` 队伍名称
18. `self.x(),self.y()` x,y坐标
19. `self.dir()` 方向
20. `self.priceCredits()` 金钱价格
21. `self.speed()` 当前速度
22. `self.maxMoveSpeed()` 最大速度
23. `self.id()` 单位id(每个单位的序号)
24. `self.builtAmount()` 建造数量
25. `self.complate()` 自身建造完成
26. `self.teamDefeatedTech()` 队伍失败
27. `self.teamWipedOut()` 队伍全部死亡
28. `self.teamVictory()` 队伍获胜
29. `self.queueSize()` 自身队列大小
30. `self.transportingCount()` 运输数量
31. `self.isAttacking()` 在攻击
32. `self.isOnNeutralTeam()` 是中立队伍
33. `self.isControlledByAI()` 是AI控制
34. `self.isInMap()` 在地图内
35. `game.mapWidth()` 地图宽度
36. `game.mapHeight()` 地图高度
#### self.hasResources()
代码:self.hasResources() 中文释义:有资源 返回类型:boolean<br>
`self.hasResources()` 用于检测自身某资源是否大于等于某数值,格式为`self.hasResources(资源名=数值)`
<div class="alert callout tip">
<p>演示例子:</p>
</div>
```ini
self.hasResources(hp=10,energy=5)
```
#### self.resource()
代码:self.resource() 中文释义:资源 返回类型:float<br>
与`self.hasResources()`不同,`self.resource()`直接返回某个资源的数值。格式为`self.resource(type="资源名")`。
> [!NOTE] 引用资源时,请确保<font color=orange>这个资源在这个单位定义过</font>,否则会报错。
#### self.resource.RESOURCE_TYPE
代码:self.resource.RESOURCE_TYPE 中文释义:资源 返回类型:float<br>
`self.resource.RESOURCE_TYPE`是`self.resource()`的快捷方式。格式为`self.resource.资源名称`,引用更加方便。
#### self.isResourceLargerThan()
代码:self.isResourceLargerThan() 中文释义:资源是否大于 返回类型:boolean<br>
> [!ATTENTION] 此代码为老旧解决方案,不推荐使用。
`self.isResourceLargerThan()`用于比较两种资源的大小。格式为`self.isResourceLargerThan(source=资源A,compareTarget=资源B,byMoreThan=大于资源B数量,multiplyTargetBy=资源B倍数)`
#### self.numberOfQueuedWaypoints()
代码:self.numberOfQueuedWaypoints() 中文释义:队列中路径点数量 返回类型:float<br>
`self.numberOfQueuedWaypoints()`用于返回队列中路径点的数量。格式为`self.numberOfQueuedWaypoints(type="路径点类型")`。
### 单位计时
#### self.hasTakenDemage()
代码:self.hasTakenDemage() 中文释义:受到伤害 返回类型:bool<br>
> [!NOTE] 单位计时部分能返回到最小时间精度为<font color=orange>0.1秒</font>
`self.hasTakenDemage()`用于获取指定时间内是否收到伤害。使用`self.hasTakenDemage(withInSecounds=多少秒内,laterThanSecounds=多少秒后)`格式时返回bool类型。
#### self.timeAlive()
代码:self.timeAlive() 中文释义:存活时间 返回类型:float/bool<br>
`self.timeAlive()`用于获取单位存活时间。使用`self.timeAlive(withInSecounds=多少秒内,laterThanSecounds=多少秒后)`格式时返回bool类型是否符合此范围使用`self.timeAlive()`格式时返回float类型。更推荐使用后者
#### self.lastConverted()
代码:self.lastConverted() 中文释义:最后转换时间 返回类型:float/bool<br>
`self.timeAlive()`用于获取单位上次转换后的时间。使用`self.lastConverted(withInSecounds=多少秒内,laterThanSecounds=多少秒后)`格式时返回bool类型是否符合此范围使用`self.lastConverted()`格式时返回float类型。
#### self.customTimer()
代码:self.customTimer() 中文释义:自定义计时器 返回类型:float/bool<br>
`self.timeAlive()`用于获取自定义计时器的时间。使用`self.customTimer(withInSecounds=多少秒内,laterThanSecounds=多少秒后)`格式时返回bool类型是否符合此范围使用`self.customTimer()`格式时返回float类型。
<div class="alert callout tip">
<p>演示例子:</p>
</div>
```ini
[action]
autoTrigger:if self.customTimer() >= 10
resetCustomTimer:true
showMessageToPlayers:10秒过去了
```
### 杂项
#### thisActionIndex/index()
代码:thisActionIndex/index() 中文释义:索引 返回类型:float(number)<br>
`thisActionIndex/index()`是`alsoTriggerActionRepeat`中当前的索引。例如`alsoTriggerActionRepeat:10`那么index在10次循环中分别为1-10。
#### self.hasFlag()
代码:self.hasFlag() 中文释义:有标志 返回类型:boolean<br>
`self.hasFlag()`用于获取自身是否有<font color=orange>标志</font>,格式为`self.hasFlag(id=数字)`。
> [!NOTE] 不同于<font color=orange>标签tag</font><font color=orange>标志flag</font>是内置的一些<font color=orange>布尔值</font>,无需定义即可直接使用。<br>
> 标签的添加方法为<font color=orange>[action]addResource:flag=1,3-7,13</font>,且只支持<font color=orange>0-31</font>,标签的移除方法与之相反。
#### self.tags()
代码:self.tags() 中文释义:有标签 返回类型:boolean<br>
`self.tags()`用于检测自身是否有某个标签,格式为`self.tags(includes="标签")`。
#### self.globalTeamTags/self.hasGlobalTeamTags()
代码:self.globalTeamTags/self.hasGlobalTeamTags() 中文释义:有全局标签 返回类型:boolean<br>
`self.globalTeamTags/self.hasGlobalTeamTags()`用于检测队伍内是否有某个全局标签,格式为`self.globalTeamTags/self.hasGlobalTeamTags(includes="标签")`
#### self.numberOfConnections()
代码:self.numberOfConnections() 中文释义:连接数 返回类型:float<br>
隐藏代码,用途不明。
#### self.numberOfAttachedUnits()
代码:self.numberOfAttachedUnits() 中文释义:有附属物 返回类型:int/bool<br>
`self.numberOfAttachedUnits()`用于获取自身附属物数量,可以通过`self.numberOfAttachedUnits(withTag="标签")`格式来限制附属物标签。
#### self.hasActiveWaypoint()
代码:self.hasActiveWaypoint() 中文释义:有活动的路径点 返回类型:bool<br>
`self.hasActiveWaypoint()`用于获取自身有无活动的路径点,格式为`self.hasActiveWaypoint(type="路径点类型")`。
> [!NOTE] 路径点类型可以是<font color=orange>move, attackMove, guard, loadInto, loadUp, attack, reclaim, repair, touchTarget, build, follow, setPassiveTarget</font>
#### self.transportingUnitWithTags()
代码:self.transportingUnitWithTags() 中文释义:运输单位中有此标签 返回类型:bool<br>
`self.transportingUnitWithTags()`用于检测自身运输的单位中是否有含有特定标签的单位,格式为`self.transportingUnitWithTags(includes="标签")`。
#### self.hasParent()
代码:self.hasParent() 中文释义:有父单位 返回类型:bool<br>
`self.hasParent()`用于检测自身是否有父单位,且可以通过`self.hasParent(hasTag="标签")`来筛选父单位标签。<br>
通常情况下,附属和被运输单位会有父单位。
#### self.numberOfUnitsInTeam()
代码:self.numberOfUnitsInTeam() 中文释义:队伍中此单位数量 返回类型:float<br>
`self.numberOfUnitsInTeam()`(可省略`self.`)用于检测自身队伍符合条件的单位数量,格式为`self.numberOfUnitsInTeam(withTag="标签",withinRange=此距离内,incompleteBuildings=包含不完整建筑,factoryQueue=包含工厂队列)`
<div class="alert callout tip">
<p>演示例子:</p>
</div>
```ini
self.numberOfUnitsInTeam(withTag="air",withInRange=500,factoryQueue=true)
#有air标签500范围内包含工厂队列中的单位
```
#### self.numberOfUnitsInAllyNotOwnTeam()
代码:self.numberOfUnitsInAllyNotOwnTeam() 中文释义:盟友队伍中此单位数量 返回类型:float<br>
`self.numberOfUnitsInAllyNotOwnTeam()`与`self.numberOfUnitsInTeam()`用法完全相同,区别仅在于前者的查询范围是盟友中。
#### self.numberOfUnitsInEnemyTeam()
代码:self.numberOfUnitsInEnemyTeam() 中文释义:敌方队伍中此单位数量 返回类型:float<br>
`self.numberOfUnitsInEnemyTeam()`与`self.numberOfUnitsInTeam()`用法完全相同,区别仅在于前者的查询范围是敌方中。
#### self.numberOfUnitsInNeutralTeam()
代码:self.numberOfUnitsInNeutralTeam() 中文释义:中立队伍中此单位数量 返回类型:float<br>
`self.numberOfUnitsInNeutralTeam()`与`self.numberOfUnitsInTeam()`用法完全相同,区别仅在于前者的查询范围是中立中。
#### self.numberOfUnitsInAggressiveTeam()
代码:self.numberOfUnitsInAggressiveTeam() 中文释义:敌对中立队伍中此单位数量 返回类型:float<br>
`self.numberOfUnitsInAggressiveTeam()`与`self.numberOfUnitsInTeam()`用法完全相同,区别仅在于前者的查询范围是敌对中立中。
#### self.numberOfUnitsInAllyTeam()
代码:self.numberOfUnitsInAllyTeam() 中文释义:所有队伍中此单位数量 返回类型:float<br>
`self.numberOfUnitsInAllyTeam()`与`self.numberOfUnitsInTeam()`用法完全相同,区别仅在于前者的查询范围是所有中。
#### self.hasUnitInTeam()
代码:self.hasUnitInTeam() 中文释义:队伍中有单位 返回类型:bool<br>
`self.hasUnitInTeam()`与`self.numberOfUnitsInTeam()`格式完全相同,区别在于前者仅查询队伍中有无符合条件的单位,并返回`boolean`类型。
#### self.noUnitInTeam()
代码:self.noUnitInTeam() 中文释义:队伍中无单位 返回类型:bool<br>
`self.noUnitInTeam()`与`self.numberOfUnitsInTeam()`格式完全相同,区别在于前者仅查询队伍中是否无符合条件的单位,并返回`boolean`类型。
#### self.readUnitMemory()
代码:self.readUnitMemory() 中文释义:读取单位内存 返回类型:跟随memory类型<br>
`self.readUnitMemory()`用于获取指定单位内存,格式为`self.readUnitMemory("内存名",type="类型",index=下标(仅当类型是数组时可选填写))`。
> [!NOTE] 在<font color=orange>跨单位读取数组</font>时,如果下标使用了逻辑,无论逻辑值都会返回第零项,<font color=orange>为游戏bug</font>,解决方法可以参考<br>https://www.bilibili.com/video/BV17v4y1r7dV (感谢十山月)<br>
<iframe src="//player.bilibili.com/player.html?aid=566144438&bvid=BV17v4y1r7dV&cid=988997369&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="600" height="400"> </iframe>
::: code-group
```ini{7} [如果下标使用了逻辑,无论逻辑值都会返回第零项的解决策略--Thanks 十山月]
[action_copyArry]
text:copyFromUnit
alsoTriggerAction:copyOne
alsoTriggerActionRepeat:memory.target.readUnitMemory("Afloat",type="float[]").size
## 最重要的
alsoTriggerOrQueueActionWithTarget:memory.target
[hiddenAction_copyOne]
setUnitMemory:Afloat[index] = thisActionTarget.readUnitMemory("Afloat",type="float[]")[index]
```
:::
<div class="alert callout tip">
<p>演示例子:</p>
</div>
```ini
if parent.readUnitMemory("boostTarget", type="unit") == self
#如果 父单位内存boostTarget的值等于自己
```