帮我写个脚本,杀死怪物有几率获得该怪物的兽魂。注意兽魂不是装备 不是物品。然后在NPC框可以佩戴获得的兽魂获得相对应的属性,注意佩戴只在NPC框里。NPC框可配戴六个,只要是获得的兽魂可以自由更换。但不能重复
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-04-20 14:10:52 |
👁️ 阅读: 12
根据课程日志记录,要实现怪物几率掉落兽魂并在NPC界面佩戴,需要结合多个功能模块。以下是核心实现方案:
**一、兽魂数据存储**
由于兽魂不是实体物品,需要使用自定义变量存储。建议在角色登录脚本(QManage.txt)中初始化数组:
```
[@Login]
#IF
#ACT
;初始化6个兽魂佩戴位
MOV N$佩戴兽魂1 0
MOV N$佩戴兽魂2 0
...
MOV N$佩戴兽魂6 0
;初始化兽魂背包数组
MOV N$兽魂背包数量 0
FOR N$背包索引 1 200
MOV S$兽魂背包_<$STR(N$背包索引)> ""
NEXT
```
**二、怪物掉落触发**
在QFunction-0.txt中添加击杀触发:
```
[@KillMon]
#IF
RANDOMEX 1000 ;千分之一几率
#ACT
;获取怪物名称
GETMONSTERNAME S$怪物名
;生成兽魂唯一ID(示例:怪物ID+时间戳)
GETTIME S$时间戳 yyyyMMddHHmmss
FORMULATION <$STR(M$怪物ID)><$STR(S$时间戳)> N$兽魂ID
;存储兽魂属性(属性值可根据怪物类型配置)
MOV S$兽魂_<$STR(N$兽魂ID)>_名称 <$STR(S$怪物名)>
MOV S$兽魂_<$STR(N$兽魂ID)>_攻击 10 ;示例属性
MOV S$兽魂_<$STR(N$兽魂ID)>_防御 5
...
;添加到背包
INC N$兽魂背包数量 1
MOV S$兽魂背包_<$STR(N$兽魂背包数量)> <$STR(N$兽魂ID)>
SENDMSG 6 恭喜获得【<$STR(S$怪物名)>】兽魂!
```
**三、NPC佩戴界面**
创建NPC脚本(如兽魂大师.txt):
```
[@main]
#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>
;显示6个佩戴位
<Button|x=290.0|y=262.0|size=18|color=255|nimg=public_win32/1900000662|link=@佩戴位1>
<Text|x=300|y=265|text=佩戴位1>
...
;显示背包兽魂
#ACT
MOV S$背包显示 ""
WHILE N$循环 < <$STR(N$兽魂背包数量)>
INC N$循环 1
GETVALIDSTR <$STR(S$兽魂背包_<$STR(N$循环)>)> | S$兽魂ID
GETVALIDSTR <$STR(S$兽魂_<$STR(S$兽魂ID)>_名称)> | S$兽魂名
INC S$背包显示 <Text|x=400|y=<计算公式>|text=<$STR(S$兽魂名)>|link=@选择兽魂_<$STR(S$兽魂ID)>>
ENDWHILE
#SAY
<$STR(S$背包显示)>
```
**四、佩戴/更换逻辑**
```
[@佩戴位1]
#SAY
请选择要佩戴的兽魂:
<关闭/@exit>
;显示可佩戴兽魂列表
#ACT
MOV S$可选列表 ""
WHILE N$列表循环 < <$STR(N$兽魂背包数量)>
INC N$列表循环 1
GETVALIDSTR <$STR(S$兽魂背包_<$STR(N$列表循环)>)> | S$可选ID
;检查是否已佩戴
MOV N$已佩戴 0
FOR N$检查位 1 6
IF EQUAL N$佩戴兽魂<$STR(N$检查位)> <$STR(S$可选ID)>
MOV N$已佩戴 1
ENDIF
NEXT
#IF
EQUAL N$已佩戴 0
#ACT
GETVALIDSTR <$STR(S$兽魂_<$STR(S$可选ID)>_名称)> | S$可选名
INC S$可选列表 <Text|x=350|y=<计算公式>|text=<$STR(S$可选名)>|link=@确认佩戴1_<$STR(S$可选ID)>>
#SAY
<$STR(S$可选列表)>
```
**五、属性生效**
在攻击、被攻击等触发中计算属性加成:
```
[@Attack]
#IF
#ACT
;计算6个佩戴位的总攻击
MOV N$总攻击加成 0
FOR N$位 1 6
IF LARGE N$佩戴兽魂<$STR(N$位)> 0
GETVALIDSTR <$STR(S$兽魂_<$STR(N$佩戴兽魂<$STR(N$位)>)>_攻击)> | N$单攻击
FORMULATION <$STR(N$总攻击加成)>+<$STR(N$单攻击)> N$总攻击加成
ENDIF
NEXT
;应用加成...
```
**六、重复佩戴检查**
在佩戴逻辑中加入验证:
```
[@确认佩戴1_...]
#IF
;检查是否已在其他位置佩戴
#ACT
MOV N$重复标记 0
FOR N$检查 1 6
IF EQUAL N$佩戴兽魂<$STR(N$检查)> <$STR(P0)>
MOV N$重复标记 1
ENDIF
NEXT
#IF
EQUAL N$重复标记 1
#ACT
SENDMSG 6 该兽魂已在其他位置佩戴!
BREAK
#IF
#ACT
;执行佩戴
MOV N$佩戴兽魂1 <$STR(P0)>
SENDMSG 6 佩戴成功!
```
**注意事项:**
1. 兽魂数据需持久化存储(使用SAVEVAR命令)
2. 界面坐标需根据实际布局调整
3. 属性计算需在相关触发点(攻击、防御、血量等)同步更新
4. 兽魂数量较多时需分页显示
该方案完全使用TXT脚本实现,无需调用LUA。如需更复杂的兽魂系统(如合成、升级),可在现有基础上扩展。
← 返回问答库