万卓设计

本站是传奇3私服基地,使用996正版授权引擎架设传奇3sf传奇三私服lua脚本知识学习

用deepseek改别人的996传奇3转生脚本

好的,我已经仔细分析了这段996传奇脚本。发现了好几个严重的BUG和一些逻辑/安全隐患,下面逐一说明:

image.png


严重BUG(会导致脚本失效或报错)

1. 变量名冲突 - n$zsclIDX1/2/3 在多个地方被覆盖

问题位置: 转生功能_JmB 开头


pascal

GetDBItemFieldValue <$cfg_02B转生功能表(<$STR(n$转生目标读取行)>_10)> idx n$zsclIDX1

问题: 你从CSV的 _10、_12、_14 列读取的是物品ID字符串(如"屠龙"),但使用了 GetDBItemFieldValue ... idx,这个命令是获取物品数据库的 idx 编号。如果CSV里存的是物品名称而不是idx,这里会获取失败。


建议修改:


如果CSV存的是物品名称:直接用 <$cfg_02B转生功能表(...)> 赋值给itemid


如果CSV存的是idx:直接用数值,不需要 GetDBItemFieldValue


2. CheckItemS 和 TakeS 语法错误

问题位置: [@移动端_转生系统_点击转生]


pascal

CheckItemS <$cfg_02B转生功能表(..._10)>#<$cfg_02B转生功能表(..._11)>&...

TakeS ... P10 0 1

问题:


CheckItemS 的正确语法是:CheckItemS 物品名称 数量 或 CheckItemS 物品名称#数量


你用 & 连接多个物品条件不被支持,引擎会报错


TakeS 后面带 P10 参数用法也不正确


正确写法(需分开判断):


pascal

#If

CheckItemS <$cfg_02B转生功能表(..._10)> <$cfg_02B转生功能表(..._11)>

CheckItemS <$cfg_02B转生功能表(..._12)> <$cfg_02B转生功能表(..._13)>

CheckItemS <$cfg_02B转生功能表(..._14)> <$cfg_02B转生功能表(..._15)>

#Act

TakeS <$cfg_02B转生功能表(..._10)> <$cfg_02B转生功能表(..._11)>

TakeS <$cfg_02B转生功能表(..._12)> <$cfg_02B转生功能表(..._13)>

TakeS <$cfg_02B转生功能表(..._14)> <$cfg_02B转生功能表(..._15)>

3. n$转生当前读取行 和 n$转生目标读取行 初始值相同

问题位置: 转生功能_JmB 开头


pascal

Mov n$转生当前读取行 <$GetTypeBRow(cfg_02B转生功能表,3,<$Str(U51)>)>

Mov n$转生目标读取行 <$GetTypeBRow(cfg_02B转生功能表,3,<$Str(U51)>)>

Inc n$转生目标读取行 1

问题: 如果 U51=0(0转),GetTypeBRow 在CSV里找不到 "0" 时返回什么?如果返回空或0,后续 Inc 会变成1,但 当前读取行 还是0或空,导致取数据错位。


建议: 增加容错


pascal

Mov n$转生当前读取行 <$GetTypeBRow(cfg_02B转生功能表,3,<$Str(U51)>)>

IfEqual n$转生当前读取行 0  ; 如果没找到

  Mov n$转生当前读取行 1    ; 设为第一行(需要确认你的CSV结构)

EndIf

🟠 逻辑BUG

4. small U51 10 限制了最大9转,但CSV可能有10转数据

如果CSV里配置了10转,但这里判断 <10 才显示按钮,U51=9时显示,转生后变成10,再点NPC就看不到按钮了(但脚本里有个 small U51 10 条件包裹了Button,10转后按钮消失,这是对的)。但转生上限检查用的是:


pascal

not small U51 <$cfg_02B转生功能表(<$Str(n$当前大陆转生结束行)>_3)>

这里 _3 列应该是存最大转数,确保这个值 ≤10。


5. RestRenewLevel 和 RENEWLEVEL 重复使用

pascal

Inc U51 1

RestRenewLevel

RENEWLEVEL <$Str(U51)> 0 0

RestRenewLevel 是清空转生数据


RENEWLEVEL 是设置新转生等级


顺序没问题,但注意 RENEWLEVEL 的第二个参数 0 是保留等级百分比?通常写 0 表示不保留等级百分比,这里配合后面的 CHANGELEVEL -xxx 是对的


6. CHANGELEVEL -xxx 可能把等级扣成负数

如果玩家等级刚好等于扣除值,会变成0级。建议加判断:


pascal

#if

CHANGELEVEL - <$cfg_02B转生功能表(..._9)>

#Act

; 如果扣完等级<1,则设置为1级

IfSmall <$LEVEL> 1

  CHANGELEVEL = 1

EndIf

🟡 脚本隐患

7. CSV路径硬编码

NEWREADCSV ..\QuestDiary\0启动触发\cfg_02B转生功能表.csv


确保这个文件存在且格式正确


如果文件不存在,后续所有 <$cfg_02B转生功能表(...)> 都会返回空值


8. 气泡检测脚本 [@转生功能_气泡检测] 未触发

这个段没有在NPC主界面被调用,需要外部(如登录脚本、定时器)来调用 Goto @转生功能_气泡检测


DelbutShow 和 AddbutShow 配合使用没问题,但 n80=3 硬编码,建议用变量动态计算


9. 字符串变量未清理

Mov S60 <$Str(U51)> 赋值后没使用,可能是调试残留。


10. 注释掉的封号/称号刷新

pascal

;;;;========#Call [\03登录触发\02称号属性刷新.txt] @称号属性刷新QMFB

转生后如果不刷新属性,玩家属性不会立即生效,建议取消注释


Powered By Z-BlogPHP 1.7.4

万卓设计版权所有,传奇3私服基地是介绍的996正版授权的传奇三私服架设知识以及传奇3怀旧版1.45
备案号渝ICP备2025073319号