写一个合成脚本
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-04-21 21:12:21 |
👁️ 阅读: 6
根据课程日志记录,合成功能可以通过两种方式实现:使用引擎自带的合成表(cfg_makeitems.csv)或使用纯TXT脚本编写。
**1. 使用引擎合成表(固定成功率100%)**
这种方式需要配置`cfg_makeitems.csv`表,然后在脚本中调用`OPENWINDOWS`命令打开对应面板ID(对应`cfg_menulayer.xls`表ID)。合成逻辑由引擎处理,成功率固定为100%。
示例脚本片段(用于触发合成):
```
[@Main]
#IF
#ACT
; 打开合成界面,2201为面板ID,需在cfg_menulayer.xls中配置
OPENWINDOWS 2201
; 如果需要将合成表数据加载到内存,通常在QM启动触发中执行,也可在此处执行
NEWREADCSV ..\Data\cfg_makeitems.csv
```
**2. 使用纯TXT脚本编写(可自定义成功率)**
如果需要自定义成功率、在不同NPC显示不同合成目录,或实现更复杂的逻辑,需要使用纯TXT脚本编写。系统自带的合成界面无法在不同地方显示不同目录。
一个基础的脚本合成逻辑框架如下:
```
[@Main]
#ACT
; 初始化变量,例如要合成的物品ID和成功率
MOV N$合成物品ID 10001
MOV N$合成成功率 80 ; 80%成功率
MOV S$显示内容 ""
; 这里可以编写循环和判断逻辑,生成合成界面的显示内容
; 例如,使用WHILE循环遍历合成列表,将内容拼接到S$显示内容变量中
...
#SAY
<Img|x=161.0|y=113.0|reset=1|loadDelay=1|show=0|esc=1|img=public_win32/1900000610.png|move=0|bg=1>
<Layout|x=780.0|y=101.0|width=80|height=80|link=@exit>
<Button|x=800.0|y=114.0|pimg=public/1900000511.png|nimg=public/1900000510.png|link=@exit>
; 显示合成界面和内容
<$str(S$显示内容)>
<Button|x=290.0|y=262.0|size=18|color=255|nimg=public_win32/1900000662|link=@开始合成>
[@开始合成]
#IF
; 检查材料是否足够,例如检查物品和货币
checkitem 金币 1000
checkitem 材料1 5
#ACT
; 进行成功率判定
RANDOMEX <$str(N$合成成功率)>
; 成功则扣除材料并给予物品
take 金币 1000
take 材料1 5
give <$str(N$合成物品ID)> 1
sendmsg 6 合成成功!
#ELSESAY
; 失败可能扣除部分材料或提示
sendmsg 6 合成失败,材料已损失。
```
**注意事项:**
* `RANDOMEX`命令只能出现在`#IF`语句下,用于成功率判断。
* 复杂的合成界面(如多行多列物品展示)需要使用`WHILE`循环和`FORMULATION`命令计算坐标,并将内容拼接到字符串变量中,最后在`#SAY`中显示。
* 合成表(csv)方式适合标准化、大批量的合成;脚本方式适合需要复杂逻辑和自定义界面的合成。
如果您需要实现具体的合成逻辑(如多材料消耗、概率计算、界面布局),请提供更详细的需求。
← 返回问答库