如何使用这个骗局表#
首先,确定语言. XPath,MD和Lua以不同的方式表达着类似的意图. 这是一个有用阅读这些例子和项目代码的选择,而不是统计排名或完整的语言参考. 开始 X4 代码的工作原理 如果这些条款不熟悉. 新的摘录是学习例子,而不是声称在游戏中的测试.
四个基本概念#
一个变量存储一个值. 一种条件决定是否要做某事. 一个函数接收参数并执行工作,有时返回结果. 事件处理器是为特定事件运行的函数或MD节点. 区分定义 getName, 电话 getName() 存储返回值.
XML 元素,属性和选项#
| 形式 | 含义 |
|---|---|
<hull max="1800" /> |
具有属性且没有儿童内容的元素 |
<actions> ... </actions> |
集装箱的开始和结束 |
<!-- comment --> |
XML 评论 |
replace, add, remove |
取代,添加或删除选定的内容的差异操作 |
/properties/hull/@max |
XPath到属性 |
[@name='example'] |
XPath属性过器 |
在 XML 属性中,逃离 Ampersands如 & 且不到 <. 其他在 MD 表达式之前,XML被解析,这就是为什么 lt/le/gt/ge是方便的比较. 差异选择器和do_if表达式使用不同的语法.
MD:一次完成一个小操作#
| 建设 | 用途 |
|---|---|
set_value |
赋予或更新值 |
do_if, do_elseif, do_else |
选择一个分支 |
do_for_each |
过程列表元素 |
append_to_list |
添加一个元素 |
remove_value |
删除变量或记录 |
debug_text |
写诊断 |
run_actions |
运行一个适当的动作库 |
event_ui_triggered |
在预示条件下接收 UI 事件 |
raise_lua_event |
发送事件到Lua |
这些是MD元素名称,而不是标准XML函数. 引擎定义属性和有效的背景. 下面的行动示例创建了自己的列表,并以数为2结束. operation=add exact=1 增加它; 项指当前元素.
<set_value name="$Items" exact="['Корпус', 'Двигатель']" />
<set_value name="$Count" exact="0" />
<do_for_each name="$Item" in="$Items">
<set_value name="$Count" operation="add" exact="1" />
</do_for_each>
<do_if value="$Count == 2">
<debug_text text="'Обработано два элемента'" />
</do_if>MD表达式#
| 形式 | 含义 |
|---|---|
$Count, Init.$States |
变量,或在明确的提示语境中的变量 |
==, != |
平等,不平等 |
lt, le, gt, ge |
较小,较小或等等,较大,较大的或等 |
and, or, not |
逻辑操作 |
+, -, *, /, % |
数学;百分比是剩余的 |
'Name: ' + $Label |
弦连接 |
$Value?, $Object.exists |
变量/属性分辨率与对象存在 |
typeof $D == datatype.list |
值类型测试 |
$D.{1}, $D.count |
列表元素和元素数量 |
table[], [] |
空的表和空的列表 |
if $Ready then 'yes' else 'no' |
条件值表达式 |
显示的MD列表从1开始. 一个可解决的变量可能包含虚假;存在和真相是不同的. 看到 变量上下文, 尤其是当我们看到一个提示时.
Lua: 阅读普通函数#
下面的独立例子没有使用X4函数. 结果是8,假设每个项目都有数量字段. {} 创建一个表,用于两个序列和命名记录. item.amount 平均 item["amount"]. 其他在 for _, item, 标记为"指数" (subscore) 标记为"指数" (subscore)
local function total(items)
if type(items) ~= "table" then
return 0
end
local result = 0
for _, item in ipairs(items) do
result = result + item.amount
end
return result
end
local amount = total({{amount = 3}, {amount = 5}})Lua运营商#
| 形式 | 含义 |
|---|---|
= |
任务 |
==, ~= |
平等,不平等 |
<, <=, >, >= |
进行比较 |
and, or, not |
逻辑操作 |
+, -, *, /, % |
算术 |
.. |
弦连接 |
#value |
字符串的字节长度或序列边界 |
object.field |
访问表场 |
object:method(x) |
同等于 object.method(object, x) |
#table 没有任意的钥匙. 孔和弦键不会形成密集的序列. 字符串长度计算字节,这对UTF-8来说很重要. 在Lua中,只有虚假和零是虚假的;0和空连串是真实的. value or fallback 假的也取代了假的. 逻辑和/或返回选定的值,不一定是布尔值.
Lua 标准函数#
type 报告价值类型; tostring 格式一个值; tonumber 试图转换,可能返回零. ipairs 密度指数从1到缺失项; pairs 没有订单保证. table.insert, table.remove 和 table.concat 操作序列. string.format 构建格式化的文本;使用Lua模式的匹配/gsub. math.min 和 math.max 选择数值. pcall 捕获Lua错误; require 根据环境规则,载载模块.
不是每个模块都可用在游戏UI中. 不要假设有故障或文件访问. 检查电话调用标志和错误,而不是默默地隐藏失败. 保护Lua通话不会使无效的本地通话安全. 参见下面的Lua 5.1和LuaJIT主要参考文献.
X4函数与模特函数#
在正确的表示中解决对象ID. 随机号码,船舶名称,网络ID,UI操作和UniverseID是不可交换的: 识别精度.
阅读时可能会发现的五个错误#
- Lua的使用
~=, 在MD使用时!=对于不平等. - Lua 连接链接到
..; MD 使用+在表达的形式中. - Lua 任务是
=, 比较是==. - 改变窗口文本并不证明改变世界对象.
- 处理器定义仍然需要加载文件,接收事件和验证输入.
阅读 Lua ↔ MD 在安装示例在测试资料中之前,并解释每个行.