#if
equal <$SORTRANK(1,<$str(N1)>)>
#act
inc S$记录玩家名单 <Text|id=ds_ph_<$str(N1)>|color=161|size=16|text=[暂无玩家]>
#elseact
inc S$记录玩家名单 <Text|id=ds_ph_<$str(N1)>|color=151|size=16|text=[<$SORTRANK(1,<$str(N1)>)>]|link=@DS_排行玩家#查询玩家=<$SORTRANK(1,<$str(N1
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-04-10 15:19:55 |
👁️ 阅读: 0
要避免容器中重复显示玩家名称,需要先判断该玩家是否已经添加到S$记录玩家名单中。但根据课程日志记录,TXT没有提供直接检查字符串是否包含子串的命令。
要实现去重,可以维护一个用特定分隔符(如“,”)连接的字符串变量S$已添加玩家名单。在添加前,通过循环遍历这个名单来检查是否已存在。
以下是根据课程日志记录提供的修改方案:
```txt
#ACT
; 获取当前排行的玩家名
MOV S$当前玩家 <$SORTRANK(1,<$STR(N1)>)>
; 初始化检查变量
MOV N$已存在 0
; 如果S$已添加玩家名单不为空,则进行遍历检查
#IF
LARGE <$LEN(<$STR(S$已添加玩家名单)>)> 0
#ACT
; 将名单分割成数组进行检查(这里假设用“,”分隔)
; 注意:TXT没有直接的数组分割命令,需要借助其他方法
; 以下使用循环和字符串截取模拟检查过程
MOV N$检查位置 1
MOV N$名单长度 <$LEN(<$STR(S$已添加玩家名单)>)>
WHILE N$检查位置 < <$STR(N$名单长度)>
; 获取每个玩家名(这里需要根据实际分隔符处理)
; 由于缺少字符串分割命令,此逻辑无法完整实现
; 建议改用Lua脚本处理复杂的列表去重
INC N$检查位置 1
ENDWHILE
#ELSEACT
; 名单为空,直接标记为不存在
MOV N$已存在 0
```
由于TXT缺少字符串分割和列表查找的命令,上述逻辑无法完整实现。要实现严格的去重,建议:
1. 如果必须用TXT,可以尝试用S$已添加玩家名单作为字符串,用`CHECKSTRINGLIST`命令检查(但该命令不在课程日志记录中,可能不可用)。
2. 更可靠的方法是使用Lua脚本处理:在Lua中维护一个表(table)来记录已添加的玩家名,每次添加前检查表内是否已存在。
如果坚持用TXT且允许一定误差,可以尝试用`<FINDSTR>`常量检查,但只能判断是否包含子串,无法精确匹配整个玩家名(可能误判包含关系)。
```txt
#IF
NOT <FINDSTR <$STR(S$已添加玩家名单)> <$STR(S$当前玩家)>>
#ACT
inc S$记录玩家名单 <Text|id=ds_ph_<$str(N1)>|color=151|size=16|text=[<$STR(S$当前玩家)>]|link=@DS_排行玩家#查询玩家=<$STR(S$当前玩家)>>
; 更新已添加名单,用“,”分隔
inc S$已添加玩家名单 <$STR(S$当前玩家)>,
#ELSEACT
; 已存在,跳过或显示其他内容
inc S$记录玩家名单 <Text|id=ds_ph_<$str(N1)>|color=161|size=16|text=[已存在]>
```
注意:`<FINDSTR>`可能无法精确匹配(比如“玩家1”和“玩家10”会误判),且该常量的可用性需确认。如果不可用,则只能通过Lua实现。
← 返回问答库