如何使用这个骗局表#

首先,确定语言. 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如 &amp; 且不到 &lt;. 其他在 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 增加它; 项指当前元素.

XML
<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)

LUA
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是不可交换的: 识别精度.

阅读时可能会发现的五个错误#

  1. Lua的使用 ~=, 在MD使用时 != 对于不平等.
  2. Lua 连接链接到 ..; MD 使用 + 在表达的形式中.
  3. Lua 任务是 =, 比较是 ==.
  4. 改变窗口文本并不证明改变世界对象.
  5. 处理器定义仍然需要加载文件,接收事件和验证输入.

阅读 Lua ↔ MD 在安装示例在测试资料中之前,并解释每个行.