兄弟,你这个合成脚本思路挺好!想做成抽卡那种效果:先抽“成功/失败”,成功了再抽“给什么装备”。现在卡在 合成几率.txt 和 合成品.txt 这两个文件到底该咋写,对吧?别急,你脚本的结构是对的,只需要按规则把这两个文本文件的内容填好就行。
核心原理:
GetRandomName 命令: 这是关键!它从一个文本文件里随机抽一行内容出来,然后塞到你指定的变量里(比如 S1, S2)。
合成几率.txt: 这个文件就存放关于本次合成是否成功的判定结果。通常就是几个“成功”和“失败” 的文本行。引擎会随机抽其中一行。
合成品.txt: 这个文件存放如果合成成功了,玩家能得到什么具体奖品的名字。引擎也会在这里随机抽一行。
<STR(S1)> / <STR(S2)>: 这就是读取变量 S1 和 S2 当前值的格式。S1 存的是从“合成几率”文件里抽出来的结果(比如"成功"),S2 存的是从“合成品”文件里抽出来的奖品名(比如"倚天剑")。
关键问题解答:合成几率.txt 和 合成品.txt 怎么写?
合成几率.txt (控制成功/失败)
作用: 决定这次合成是走 #act (成功) 还是 #elseact (失败)。
写法:
创建一个纯文本文件,名字就叫 合成几率.txt。
文件内容,一行就写一个“判定结果”!
你需要多少行就写多少行。
想控制成功概率,就调整文件里 “成功” 和 “失败” 这两行各自的数量比例。
示例(实现 50% 成功率):
成功
成功
失败
失败
这个文件有4行:2行“成功”,2行“失败”。引擎每次随机抽1行。抽中“成功”的概率是 2/4 = 50%。
示例(实现 20% 成功率):
成功
失败
失败
失败
失败
这个文件有5行:1行“成功”,4行“失败”。抽中“成功”的概率是 1/5 = 20%。
重要提示:
脚本里 CompareText <$STR(S1)> 成功 就是检查抽到的这一行内容是不是等于“成功”这两个字。
所以文件里必须保证有一行或多行内容是 完整等于 “成功” 这两个字的(不能多空格或其他字符)。同样,“失败”也需要写对。
文件名路径 ..\QuestDiary\几率控制\合成几率.txt 必须正确!确保这个文件确实放在服务器上的这个位置。
合成品.txt (控制成功后给的奖品)
作用: 当合成成功后,玩家具体能得到哪一件装备(比如随机给倚天剑、屠龙刀、裁决中的一种)。
写法:
创建一个纯文本文件,名字就叫 合成品.txt。
文件内容,一行就写一个 在数据库中真实存在的、完整的装备名称 !
你想随机出几种装备,就写几行。
想控制某些装备出现概率高,就把它的名字多写几次。
示例(随机产出倚天剑、屠龙刀或裁决之杖):
倚天剑
屠龙刀
裁决之杖
文件里写了3件不同的装备。引擎抽中每件的概率都是 1/3 (约33.3%)。
示例(让倚天剑更容易出,比如50%概率):
倚天剑
倚天剑
屠龙刀
裁决之杖
文件里写了4行。抽中“倚天剑”的概率是 2/4 = 50%,抽中“屠龙刀”和“裁决之杖”各是1/4 = 25%。
重要提示:
脚本里 give <$STR(S2)> 1 就是把抽出来的这一行文本的内容当作装备名发给玩家。
装备名字必须完全正确! 必须和 StdItems.DB 数据库里这件装备的 Name 字段一模一样!写错一个字(比如多一个空格、少一个字、用昵称)都会导致发装备失败!
文件名路径 ..\QuestDiary\几率控制\合成品.txt 必须正确!确保文件存在。
最终完整脚本逻辑流程梳理(让你不蒙圈):
玩家点 <倚天剑/@倚天剑合成>: 进入合成界面。
执行 #ACT GetRandomName ..\QuestDiary\几率控制\合成几率.txt S1:
引擎跑去打开 合成几率.txt。
从里面随便捞一行内容出来(比如“成功”)。
把捞到的这行内容存进变量 S1。现在 S1 = "成功"。
执行 #ACT GetRandomName ..\QuestDiary\几率控制\合成品.txt S2:
引擎跑去打开 合成品.txt。
从里面随便捞一行内容出来(比如“屠龙刀”)。
把捞到的这行内容存进变量 S2。现在 S2 = "屠龙刀"。
检查条件 #IF checkgamegold > 4999, checkitem 黑铁剑 1, CompareText <$STR(S1)> 成功:
玩家有5000+金币?(>4999)
玩家背包有1把“黑铁剑”?
变量 S1 里存的内容 是否等于 “成功”?(CompareText <$STR(S1)> 成功 比较的就是 S1 变量的值是不是 "成功")
如果上面三个条件 都满足: 执行 #act 部分。
如果上面三个条件有 任何一个不满足: 执行 #elseact 部分。
如果条件都满足 (#act 执行):
gamegold - 5000: 扣掉玩家5000金币。
take 黑铁剑 1: 收走玩家背包里的1把黑铁剑。
give <$STR(S2)> 1: 把变量 S2 里的内容当作物品名给玩家1个。此时 S2="屠龙刀",就给了一把屠龙刀!
sendmsg 0 恭喜:合成<STR(S2)>成功!: 全服发红字公告 “恭喜:合成屠龙刀成功!” (<STR(S2)> 显示为 “屠龙刀”)。
(结束)
如果条件不满足 (#elseact 执行):
sendmsg 6 合成失败或者条件不足!: 给玩家自己发一条蓝字消息 “合成失败或者条件不足!”。
goto @main: 跳转回合成开始的界面 (@main) 让玩家再点。
(结束)
你需要注意的坑!
文件名和路径: ..\QuestDiary\几率控制\ 这个路径必须存在!合成几率.txt 和 合成品.txt 这两个文件名必须和你脚本里写的 完全一致(包括大小写?看引擎,一般Windows不区分,但最好保持一致)。最好用英文/数字路径和文件名,避免中文乱码。
文本文件编码: 用 记事本 或者 Notepad++ 保存这两个文件。保存时选择 ANSI 编码!不要用 UTF-8!否则引擎读中文内容会乱码,导致 CompareText 永远不等于 “成功” 或者装备名字匹配不上。
装备名称: 合成品.txt 里的装备名字,务必去 StdItems.DB 数据库里 复制粘贴 Name 字段的值!自己打很容易打错。
概率控制: 修改概率就是修改那两个文本文件里的 行数比例。想改概率?直接打开文件增删行就行!改完 重启引擎/M2Server 生效(有些引擎支持重新加载脚本,重启最保险)。
空格和换行: 合成几率.txt 和 合成品.txt 里,每一行就是一个结果选项。行首和行尾不要有多余的空格!一行写完按回车换行。
操作步骤总结:
在服务器上找到目录:..\QuestDiary\几率控制\ (没有就自己创建这个文件夹)。
在 几率控制 文件夹里:
新建 合成几率.txt: 按你想要的概率写入多行 成功 和 失败。
新建 合成品.txt: 按你想要的奖品概率写入多行 完全正确的装备名称(从数据库里复制)。
保存文件,编码选 ANSI!
启动或重启传奇服务端引擎(M2Server)。
进游戏测试!准备好金币和黑铁剑,看看概率是不是你设置的,奖品是不是随机的。
搞定了!按这个步骤来,你的随机合成抽奖功能就能完美运行了。哪里没弄明白再问!
核心原理:
GetRandomName 命令: 这是关键!它从一个文本文件里随机抽一行内容出来,然后塞到你指定的变量里(比如 S1, S2)。
合成几率.txt: 这个文件就存放关于本次合成是否成功的判定结果。通常就是几个“成功”和“失败” 的文本行。引擎会随机抽其中一行。
合成品.txt: 这个文件存放如果合成成功了,玩家能得到什么具体奖品的名字。引擎也会在这里随机抽一行。
<STR(S1)> / <STR(S2)>: 这就是读取变量 S1 和 S2 当前值的格式。S1 存的是从“合成几率”文件里抽出来的结果(比如"成功"),S2 存的是从“合成品”文件里抽出来的奖品名(比如"倚天剑")。
关键问题解答:合成几率.txt 和 合成品.txt 怎么写?
合成几率.txt (控制成功/失败)
作用: 决定这次合成是走 #act (成功) 还是 #elseact (失败)。
写法:
创建一个纯文本文件,名字就叫 合成几率.txt。
文件内容,一行就写一个“判定结果”!
你需要多少行就写多少行。
想控制成功概率,就调整文件里 “成功” 和 “失败” 这两行各自的数量比例。
示例(实现 50% 成功率):
成功
成功
失败
失败
这个文件有4行:2行“成功”,2行“失败”。引擎每次随机抽1行。抽中“成功”的概率是 2/4 = 50%。
示例(实现 20% 成功率):
成功
失败
失败
失败
失败
这个文件有5行:1行“成功”,4行“失败”。抽中“成功”的概率是 1/5 = 20%。
重要提示:
脚本里 CompareText <$STR(S1)> 成功 就是检查抽到的这一行内容是不是等于“成功”这两个字。
所以文件里必须保证有一行或多行内容是 完整等于 “成功” 这两个字的(不能多空格或其他字符)。同样,“失败”也需要写对。
文件名路径 ..\QuestDiary\几率控制\合成几率.txt 必须正确!确保这个文件确实放在服务器上的这个位置。
合成品.txt (控制成功后给的奖品)
作用: 当合成成功后,玩家具体能得到哪一件装备(比如随机给倚天剑、屠龙刀、裁决中的一种)。
写法:
创建一个纯文本文件,名字就叫 合成品.txt。
文件内容,一行就写一个 在数据库中真实存在的、完整的装备名称 !
你想随机出几种装备,就写几行。
想控制某些装备出现概率高,就把它的名字多写几次。
示例(随机产出倚天剑、屠龙刀或裁决之杖):
倚天剑
屠龙刀
裁决之杖
文件里写了3件不同的装备。引擎抽中每件的概率都是 1/3 (约33.3%)。
示例(让倚天剑更容易出,比如50%概率):
倚天剑
倚天剑
屠龙刀
裁决之杖
文件里写了4行。抽中“倚天剑”的概率是 2/4 = 50%,抽中“屠龙刀”和“裁决之杖”各是1/4 = 25%。
重要提示:
脚本里 give <$STR(S2)> 1 就是把抽出来的这一行文本的内容当作装备名发给玩家。
装备名字必须完全正确! 必须和 StdItems.DB 数据库里这件装备的 Name 字段一模一样!写错一个字(比如多一个空格、少一个字、用昵称)都会导致发装备失败!
文件名路径 ..\QuestDiary\几率控制\合成品.txt 必须正确!确保文件存在。
最终完整脚本逻辑流程梳理(让你不蒙圈):
玩家点 <倚天剑/@倚天剑合成>: 进入合成界面。
执行 #ACT GetRandomName ..\QuestDiary\几率控制\合成几率.txt S1:
引擎跑去打开 合成几率.txt。
从里面随便捞一行内容出来(比如“成功”)。
把捞到的这行内容存进变量 S1。现在 S1 = "成功"。
执行 #ACT GetRandomName ..\QuestDiary\几率控制\合成品.txt S2:
引擎跑去打开 合成品.txt。
从里面随便捞一行内容出来(比如“屠龙刀”)。
把捞到的这行内容存进变量 S2。现在 S2 = "屠龙刀"。
检查条件 #IF checkgamegold > 4999, checkitem 黑铁剑 1, CompareText <$STR(S1)> 成功:
玩家有5000+金币?(>4999)
玩家背包有1把“黑铁剑”?
变量 S1 里存的内容 是否等于 “成功”?(CompareText <$STR(S1)> 成功 比较的就是 S1 变量的值是不是 "成功")
如果上面三个条件 都满足: 执行 #act 部分。
如果上面三个条件有 任何一个不满足: 执行 #elseact 部分。
如果条件都满足 (#act 执行):
gamegold - 5000: 扣掉玩家5000金币。
take 黑铁剑 1: 收走玩家背包里的1把黑铁剑。
give <$STR(S2)> 1: 把变量 S2 里的内容当作物品名给玩家1个。此时 S2="屠龙刀",就给了一把屠龙刀!
sendmsg 0 恭喜:合成<STR(S2)>成功!: 全服发红字公告 “恭喜:合成屠龙刀成功!” (<STR(S2)> 显示为 “屠龙刀”)。
(结束)
如果条件不满足 (#elseact 执行):
sendmsg 6 合成失败或者条件不足!: 给玩家自己发一条蓝字消息 “合成失败或者条件不足!”。
goto @main: 跳转回合成开始的界面 (@main) 让玩家再点。
(结束)
你需要注意的坑!
文件名和路径: ..\QuestDiary\几率控制\ 这个路径必须存在!合成几率.txt 和 合成品.txt 这两个文件名必须和你脚本里写的 完全一致(包括大小写?看引擎,一般Windows不区分,但最好保持一致)。最好用英文/数字路径和文件名,避免中文乱码。
文本文件编码: 用 记事本 或者 Notepad++ 保存这两个文件。保存时选择 ANSI 编码!不要用 UTF-8!否则引擎读中文内容会乱码,导致 CompareText 永远不等于 “成功” 或者装备名字匹配不上。
装备名称: 合成品.txt 里的装备名字,务必去 StdItems.DB 数据库里 复制粘贴 Name 字段的值!自己打很容易打错。
概率控制: 修改概率就是修改那两个文本文件里的 行数比例。想改概率?直接打开文件增删行就行!改完 重启引擎/M2Server 生效(有些引擎支持重新加载脚本,重启最保险)。
空格和换行: 合成几率.txt 和 合成品.txt 里,每一行就是一个结果选项。行首和行尾不要有多余的空格!一行写完按回车换行。
操作步骤总结:
在服务器上找到目录:..\QuestDiary\几率控制\ (没有就自己创建这个文件夹)。
在 几率控制 文件夹里:
新建 合成几率.txt: 按你想要的概率写入多行 成功 和 失败。
新建 合成品.txt: 按你想要的奖品概率写入多行 完全正确的装备名称(从数据库里复制)。
保存文件,编码选 ANSI!
启动或重启传奇服务端引擎(M2Server)。
进游戏测试!准备好金币和黑铁剑,看看概率是不是你设置的,奖品是不是随机的。
搞定了!按这个步骤来,你的随机合成抽奖功能就能完美运行了。哪里没弄明白再问!

