传奇服务端转生系统脚本详细解析与实战配置全流程完整教程全攻略

来源: 作者: 点击:
转生系统是服务端脚本里改动量偏大的一块。普通NPC只管给东西、开门、传地图,转生要写人物数据、要管称号显示、要分配属性点,还得在上线那一刻把属性补回去。这几件事里任何一件没理顺,玩家转完就会发现问题。

先看它落到文件上由哪几块拼起来。

服务端目录里,NPC脚本放在MirServer\Mir200\Envir\Market_Def下面,一个转生使者就是一个独立的txt文件。NPC能不能刷出来、刷在地图哪个点、长什么样子,由同目录下的Merchant.txt登记。玩家升级、转生、领取奖励这些和人物数据打交道的内容,多数写在MapQuest_def\QManage.txt里,它管的是登录和各类触发。给玩家发属性、发名单记录这类通用功能,通常落在功能脚本QFunction-0.txt或者QuestDiary目录下的自定义文件里。弄清单个脚本归哪个目录,后面改起来才不会到处找。

热血传奇

接下来是三条绕不开的命令。

RENEWLEVEL是执行转生的核心命令,格式是RENEWLEVEL 转次数 转后等级 分配点数,部分引擎后面还能跟一个是否显示升级效果的开关。转次数指的是这一次涨多少转,取值1到255;转后等级写人物转生之后的等级,填0表示不改变当前等级;分配点数给的是可分配属性点,范围1到20000。举例,RENEWLEVEL 1 28 100表示转一次,人物等级落到28级,同时发100点属性点。

CHECKRENEWLEVEL是判断转生等级的命令,格式为CHECKRENEWLEVEL 运算符 转生等级,运算符支持等于、大于、小于三种。它只能写在#IF之后,用来判断玩家到没到某一转。

RESTRENEWLEVEL用来重置转生数据,把人物打回没转生的状态,做版本调试或者清理错误数据时用得上。

具体数字还有一个显示变量,<RELEVEL>,它读取人物当前的转生等级。放在#SAY里就能实时显示,比如"您当前转生等级:<RELEVEL>转"。

脚本运行的基本骨架是这一套。方括号加段名表示一个执行段,[@main]是NPC被点开时的入口;#IF下面是条件,#ACT下面是满足条件后要执行的命令,#SAY下面是要显示的文字;#ELSEACT和#ELSESAY对应条件不满足的情况;BREAK用来结束当前段的执行,CLOSE直接关掉对话框。检测类命令一律写在#ACT之前或者#SAY之前,写反了引擎不会报错,但逻辑会乱。

一个一转脚本可以写成这样。

text
[@main]
#IF
CHECKRENEWLEVEL = 0
CHECKLEVELEX > 49
CHECKITEM 转生证明 1
#ACT
TAKE 转生证明 1
RENEWLEVEL 1 30 100
ADDNAMELIST ..\QuestDiary\转生\一转名单.txt
SENDMSG 0 恭喜《%s》完成一转,属性点已发放
#ELSEACT
MESSAGEBOX 等级不足50级,或缺少转生证明,或已经转过生
BREAK


这段里的条件检测分三层。CHECKRENEWLEVEL = 0是防重复的关键,它保证只有没转过生的玩家才能执行。少了这一句,已经三转的玩家可以拿一转的条件再刷一遍。CHECKLEVELEX判断等级门槛,CHECKITEM判断材料在不在背包里。执行部分依次扣除材料、执行转生、把角色名写进名单、发全服公告。

一转写完,二转、三转按同样的结构往下排,只改检测的转数、等级、材料和分配点数。八转的版本就是八段几乎一样的脚本。
二转段只要把条件换成CHECKRENEWLEVEL = 1,材料换成更高级的那一种。这里有个容易忽略的点,检测命令一定要写明具体的转数,不能只写CHECKRENEWLEVEL > 0就放行,那样一转和二转会串在一起。

多阶段转生还有一种写法,用跳转命令把流程分出去。

text
#IF
CHECKRENEWLEVEL = 0
#ACT
GOTO @一转流程

#IF
CHECKRENEWLEVEL = 5
#ACT
GOTO @五转流程


每段只负责一个转数,主界面负责调度。转数多了以后,这种拆法比堆在一个段里好维护。

属性加成有几种不同的实现路径,选哪种取决于需求。

最直接的是RENEWLEVEL自带的分配点数,玩家的属性界面上会多出可分配的点,自己加到攻击、魔法、道术上。这种方式引擎原生支持,不用额外写脚本。

想让加成固定落在某几项属性上,用USEBONUSPOINT命令,格式是USEBONUSPOINT 属性位置 控制符 点数。属性位置1到9分别对应攻击、魔法、道术、防御、魔防、生命值上限、魔法值上限、准确、躲避。例如USEBONUSPOINT 1 + 20就是永久加20点攻击上限,控制符里的加号表示增加,减号表示减少,等号表示直接设定。

要的是整倍数提升,用POWERRATE,格式是POWERRATE 倍数 时间。倍数写200就是2倍,时间按秒计。这个命令带着时限,适合做转生后限时爆发,不适合做永久属性,时限一到效果就没了。

还有一种走状态模式的办法,ChangeModeEx 模式 时间 附加值。模式1到10分别对应无敌、隐身、生命值、魔法值、攻击力、魔法力、道术力、攻击速度、禁止攻击、锁定。ChangeModeEx 3 65535 100就是加100点生命上限,第二个参数是持续时间。

属性算出来之后,怎么让它永久生效是转生系统最容易出问题的环节。

如果只在转生那一刻给属性,人物下线再上线,属性就丢了。解决办法是在登录脚本里补发。QManage.txt里加入[@Login]段,用#CALL调用外部的属性文件。

text
[@Login]
#IF
#ACT
#CALL [..\QuestDiary\转生\转生属性.txt] @登陆补属性


被调用的文件里再按转生等级判断该给多少。

text
[@登陆补属性]
#IF
CHECKRENEWLEVEL = 1
#ACT
USEBONUSPOINT 1 + 20
USEBONUSPOINT 6 + 100

#IF
CHECKRENEWLEVEL = 2
#ACT
USEBONUSPOINT 1 + 40
USEBONUSPOINT 6 + 200


这里有个必须处理的问题,登录脚本每上线一次就执行一次,如果补发逻辑每次都往下加,属性会越堆越高。正确做法是转生成功时就把属性写进人物数据,登录时只做校验和补发,或者干脆用名单文件记录,靠CHECKNAMELIST判断,避免重复叠加。

转生后的称号和名字显示,靠配置文件完成。String.ini里有这三行:WarrReNewName=%chrname*<圣>、WizardReNewName=%chrname*<神>、TaosReNewName=%chrname*<尊>*,分别对应战士、法师、道士转生之后名字上带的字。名字前面的%chrname是人物原名,后面括号里的字可以换成自己版本想用的字样。想在称号上做更细的区分,用SETRANKLEVELNAME,例如SETRANKLEVELNAME %s\·武圣转生。

转生材料要在物品数据库里先建好。StdItems.DB里登记材料的名字、外观、类型和需求等级,脚本里的CHECKITEM和TAKE才能识别。材料名字和脚本里写的不一致,检测永远返回失败,这是排查转生脚本时最常见的一类错误。

不同引擎的写法有差异,改动前要先确认自己用的是哪套。

GOM和GEE引擎走前面这套命令式写法,RENEWLEVEL、CHECKRENEWLEVEL直接可用,兼容性最好。BLUE和LEGEND引擎同样是命令式,但在变量和调用上有细微区别。战神引擎这类走Pascal脚本的,用的是另一套写法,转生等级存在人物变量里,比如This_Player.SetV(43,1,2)把转生等级设为2,This_Player.GetV(43,1)读取,材料用This_Player.Take扣除,元宝用This_Player.ScriptRequestSubYBNum。更新的引擎把转生封装成了对象方法,可以写成Player.ChangeReNewLevel(2,200,500),表示设到2转、人物等级200、增加500属性点,也可以直接赋值Player.ReNewLevel。脚本从旧引擎搬到新引擎,命令名往往要整段替换,不能照抄。

下面这些是实际调试时反复出现的问题。

转生后属性消失。原因是属性只在下发时给了一次,登录脚本里没补,或者补发条件写错。检查QManage.txt的[@Login]段有没有正确调用属性文件,以及被调用文件里的标签名和#CALL后面写的名字是否一致。标签名对不上,调用会静默失败。

已经转过生的玩家还能再转。原因是脚本里缺了转数检测,或者检测没写具体数值。每段转生脚本都要有CHECKRENEWLEVEL的精确判断。

条件都满足但脚本不执行。先看BREAK的位置,BREAK写早了会把后面的段截断。再看检测和执行有没有分错行,#IF下面必须是检测,#ACT下面必须是执行,顺序颠倒引擎不会提示。

一个按钮同时触发了多个结果。比如既提示转生成功又提示条件不足。这类问题出在多段检测共用一个入口时没有及时BREAK,脚本会继续往下匹配。在每段末尾补上BREAK就能解决。

NPC点了没反应或者界面空白。多半是Merchant.txt里登记的脚本文件名和实际文件对不上,或者坐标落在地图外,或者外观编号在客户端资源里不存在。

材料被扣了但转生没成功。检查RENEWLEVEL的参数有没有越界,转次数和分配点数都有取值范围,超范围会导致命令整体不生效,而前面已经执行过的TAKE不会回滚。把材料扣除放在转生命令之后,能减少这类损失。

数值设计上有几点要提前定。转生等级设上限,常见是八转到十五转,配合CHECKRENEWLEVEL的上限判断。每转的材料消耗和元宝消耗递增,第一转用普通材料,高转用稀有材料。转生名单统一放在QuestDiary下的独立目录里,一转一个文件,方便查数据也方便活动时清理。等级门槛随转数抬高,避免玩家把等级练满之后一路连转。

把文件、命令、属性这三层理清楚,再按引擎的写法套进去,转生系统就能稳定跑起来。剩下的就是数值调整,那部分靠实际测试反复磨。