; #or
; equal <$getstrvalue(T51,先天气运1)> 阅历大道
; equal <$getstrvalue(T51,先天气运2)> 阅历大道
; equal <$getstrvalue(T51,先天气运3)> 阅历大道
; equal <$getstrvalue(T51,先天气运4)> 阅历大道
; equal <$getstrvalue(T51,先天气运5)> 阅历大道
; equal <$getstrvalue(T51,先天气运6)> 阅历大道
; e
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-03-12 01:05:01 |
👁️ 阅读: 12
根据课程日志记录,TXT语法中`#or`语句用于多条件并行判断,但执行效率受条件数量影响。对于大量重复结构的条件判断,建议使用循环配合字符串分割来优化。
你的脚本需要检查T51表中“先天气运1”到“先天气运10”这10个字段的值,并匹配不同的字符串给予不同的经验奖励。当前写法使用了10个`#or`块,每个块内又有10行`equal`判断,结构重复且效率较低。
优化方案是使用`WHILE`循环遍历1到10,通过`FORMULATION`动态生成字段名,并利用`#IF`的`equal`进行判断。由于TXT中`WHILE`循环内不能直接使用`#IF`,需要通过`GOTO`跳转到判断标签。
以下是优化后的脚本示例:
```
#ACT
MOV N$循环 1
MOV S$目标值 ""
WHILE N$循环 < 11
; 动态构建字段名,例如“先天气运1”
FORMULATION "先天气运"+<$STR(N$循环)> S$字段名
; 获取T51表中对应字段的值
GETSTRVALUE T51 <$STR(S$字段名)> S$气运值
; 跳转到判断逻辑
GOTO @判断经验奖励
INC N$循环 1
ENDWHILE
BREAK
[@判断经验奖励]
; 根据获取到的气运值进行判断并给予经验
#IF
EQUAL S$气运值 阅历大道
#ACT
CHANGEEXP + 1000
GOTO @结束本次循环
#IF
EQUAL S$气运值 阅历化境
#ACT
CHANGEEXP + 900
GOTO @结束本次循环
; ... 依次添加其他气运值的判断,如阅历圆满、阅历大成等 ...
[@结束本次循环]
; 循环会自动回到主流程
```
此方案将原本上百行的条件判断压缩到一个循环中,通过动态生成字段名来获取值,并根据值进行分支判断。`GOTO @结束本次循环`确保每次匹配后跳出当前循环的判断,避免不必要的后续判断。
注意:`GETSTRVALUE`命令用于获取T51表指定字段的值,请确保该命令在知识库允许范围内。如果该命令不可用,则需要通过其他方式获取表数据。
← 返回问答库