DreamFXLang
诊断码

DFX2xxx — 词法与语法

DFX2xxx 段的全部诊断码,每条带严重级别、逐字消息、成因与修法。

本族共 22 条(21 错误 / 1 警告)。消息是编译器持有的格式串:%s%d%c 在运行时被替换掉。

DFX2000

错误抛出位置Parser/DreamFXParser.cpp:1740

Unknown document type '%s'. Expected System, Emitter, Module or DynamicInput.

原因. 文件的第一个词不是四种文档类型之一。

修复.SystemEmitterModuleDynamicInput,并与文件扩展名一致。

DFX2001

错误抛出位置Parser/DreamFXLexer.cpp:399Parser/DreamFXParser.cpp:87

Expected '{' to open a raw block but found '%s'.

原因. 一个需要 raw block 的构造后面没有跟 {

修复. 补上花括号。hlslBody 永远是 hlsl { ... } / Body = { ... }

DFX2002

错误抛出位置Parser/DreamFXParser.cpp:98

Expected a name but found %s.

原因. 这里期待一个标识符 —— 模块名、输入名、emitter 名。

修复. 检查报出位置之前有没有多余的标点。

DFX2003

错误抛出位置Parser/DreamFXParser.cpp:394

Expected a number but found '%s'.

原因. 这里期待一个数字:向量字面量里、box() 里,或者曲线的键上。

修复. 向量分量和曲线时间只能是数字,参数引用不能出现在那里。

DFX2004

错误抛出位置Parser/DreamFXParser.cpp:581

Expected a value but found %s.

原因. = 后面期待一个值。

修复. 要么右边少了东西,要么上一条语句少了 ;

DFX2005

错误抛出位置Parser/DreamFXParser.cpp:789

'#EndRegion' has no matching '#Region'.

原因. 出现了 #EndRegion,但没有打开着的 #Region

修复. 删掉它,或者补上开头的 #Region "..."

DFX2006

错误抛出位置Parser/DreamFXParser.cpp:799

Unknown directive '#%s'. Expected Region or EndRegion.

原因. 指令只有 #Region#EndRegion 两个。

修复. 检查拼写。#Region 是一种注释装置(L5),从不到达资产。

DFX2007

错误抛出位置Parser/DreamFXParser.cpp:460Parser/DreamFXParser.cpp:481Parser/DreamFXParser.cpp:859

Expected a version after '@'.

原因. @ 引入一个 R7 版本固定,后面必须跟版本号。

修复.ModuleName@1.2,或者把 @ 去掉。

DFX2008

错误抛出位置Parser/DreamFXParser.cpp:878Generation/DreamFXGenerator.cpp:973

Module '%s' was given a positional argument. Module inputs must be written as 'Name = Value'.

原因. 模块调用被喂了一个裸值。Niagara 按名字寻址模块输入,而它们在栈 UI 里出现的顺序并不是声明顺序。

修复. 每个实参都写成 Name = Valuedfx schema <Module> 会列出名字。

DFX2010

警告抛出位置Parser/DreamFXParser.cpp:963

'#Region \"%s\"' was never closed with '#EndRegion'.

原因. 一个 #Region 到块结束都没等到 #EndRegion。无害 —— region 只是文本 —— 但通常意味着某一段被搬走了,闭合行留在了原地。

修复. 补上 #EndRegion

DFX2013

错误抛出位置Parser/DreamFXParser.cpp:1153

'%s' is a system-scope stack and must be written at the top level of a .dfs, not inside an emitter.

原因. SystemSpawnSystemUpdate 属于系统,不属于 emitter(L1)。

修复. 把这个块挪到 .dfs 的顶层,和 Emitter 块并列。

DFX2015

错误抛出位置Parser/DreamFXParser.cpp:1483

'from' must be followed by a quoted path to a .dfe source file.

原因. from 后面要跟一个带引号的 .dfe 路径。

修复. 加引号。扩展名可省;路径先相对本文件解析。

DFX2016

错误抛出位置Parser/DreamFXParser.cpp:1097

(built at runtime)

原因. Defaults = { … } 块里出现了赋值以外的东西。默认值说的是「没人写过它时读出什么」,模块调用在那里没有任何含义。

修复. 把模块调用挪进某个栈(ParticleSpawnParticleUpdate…)。Defaults 里只能写 <type> Namespace.Name = value;

DFX2018

错误抛出位置Parser/DreamFXParser.cpp:1650

A Module or DynamicInput must declare a 'Body = { }' block.

原因. 一个没有 Body.dfm 只声明了输入,生成出来的模块什么都不做。

修复. 加上 Body = { ... }

DFX2019

错误抛出位置Parser/DreamFXParser.cpp:1677Parser/DreamFXParser.cpp:1694Parser/DreamFXParser.cpp:1702

Header argument '%s' must be a quoted string.

原因. 文件头的参数(Name=Root=)是带引号的字符串。

修复. 给值加引号。

DFX2020

错误抛出位置Parser/DreamFXParser.cpp:365

Unknown curve key attribute '%s'. Expected Interp, Tangent, Arrive or Leave.

原因. 曲线键的属性列表只接受 InterpTangentArriveLeave

修复. 检查拼写。切线只有在 Interp 让它有意义时才被采纳。

DFX2021

错误抛出位置Parser/DreamFXParser.cpp:1754

File declares '%s' but its extension is '%s'. Rename the file to '%s' or change the declaration.

原因. 声明的文档类型和文件扩展名对不上。

修复. 改文件名或改声明 —— 构建是按扩展名枚举源码的。

DFX2022

错误抛出位置Parser/DreamFXParser.cpp:1783

Unexpected '%s' after the end of the document. A DreamFX file declares exactly one top-level object.

原因. 顶层对象的收尾花括号后面还有内容。通常是某个块被复制了一份,或者上面某处少了一个花括号。

修复. 一个文件,一个顶层对象。报出的位置是多余内容开始的地方,不是花括号失配的地方。

DFX2023

错误抛出位置Parser/DreamFXParser.cpp:919

'%s' is a module call, so it cannot be given a type. Types are written only on assignments.

原因. 模块调用前面写了类型。类型是给赋值用的 —— L2 需要知道一个新属性是什么类型;模块调用的类型来自它自己的 schema。

修复. 把类型去掉。

DFX2024

错误抛出位置Parser/DreamFXParser.cpp:930

'disabled' can only prefix a module call, and '%s' is an assignment.

原因. disabled 前缀的是模块调用,而它写在的这条语句是赋值。

赋值没有东西可以禁用:它会和这个栈里其他所有赋值一起折进该栈自己的 Set Parameters 模块, 把那个模块关掉会静默地把它们全部丢掉。

修复. 删掉 disabled,改成把这一行注释掉;或者把这个赋值挪进一个可以整体停用的模块调用里。

DFX2025

错误抛出位置Parser/DreamFXParser.cpp:1311Parser/DreamFXParser.cpp:1319Parser/DreamFXParser.cpp:1334

Unknown OnEvent argument '%s'. Expected Source, Event, Mode, SpawnNumber, MaxEventsPerFrame, UpdateAttributeInitialValues, RandomSpawnNumber or MinSpawnNumber.

原因. OnEvent(...) 头部带了一个解析器不认识的参数,或者某个参数缺了值,或者必填参数(SourceEvent)根本没写。

这个头部不是模块调用 —— 它的参数配置的是处理器自身(听哪个 emitter 的事件、怎么花掉它们), 所以接受的集合是固定的:Source(本系统里的 emitter 名)、Event(事件名,带引号)、 ModeSpawnedParticlesEveryParticle)、SpawnNumberMaxEventsPerFrameUpdateAttributeInitialValuesRandomSpawnNumberMinSpawnNumber响应事件的模块写在块里面,不写在头部。

修复. 按上面的列表拼写(匹配时忽略大小写),每个参数给一个形状正确的值 —— SourceMode 是标识符,Event 是名字或字符串,数量是整数,标志是 true/false —— 并且至少写上 SourceEvent

OnEvent(Source = Sparks, Event = "LocationEvent", Mode = SpawnedParticles, SpawnNumber = 1) = {
    ReceiveLocationEvent();
}

DFX2026

错误抛出位置Parser/DreamFXParser.cpp:1447Parser/DreamFXParser.cpp:1455

Unknown Stage argument '%s'. Expected Iteration, DataInterface, NumIterations, ExecuteBehavior or Enabled.

原因. Stage name(...) 头部带了一个语法不认识的参数,或者某个参数的值形状不对。 四个参数是:Iteration(一个标识符,取 ENiagaraIterationSource 的条目:ParticlesDataInterfaceDirectSet)、DataInterface(绑定网格的点号名,字符串或裸标识符均可)、 NumIterations(整数)和 Enabledtrue/false)。全部可选 —— 裸的 Stage name = { } 就是一个启用的、按粒子迭代、跑一次的 stage。

修复. 照上面的列表拼写;这四个之外的 stage 属性(执行行为、state 迭代那一组)目前还没有文本形式,不能在这里要求。

本页目录