当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇服务端宝宝存取脚本实现方案

热度:
脚本原理:变量暂存与文本备份

“存宝宝”并非将怪物实体存入仓库,而是通过脚本记录宝宝类型与等级,再通过命令重新召唤。核心流程为:检测当前宝宝→读取数据存入变量→保存变量到文本→取回时读取文本召唤。

标准存取脚本示例(GOM/GEE引擎)

以下为通用脚本框架,需在NPC脚本中实现。

存宝宝脚本段

[@StoreBaby]
#IF
;检测是否有宝宝
CHECKSLAVECOUNT>0
#ACT
;获取第一个宝宝信息(名称与等级)
GetSlaveInfo0<$STR(S$宝宝名)><$STR(N$宝宝等级)>
;将信息存入私人变量(防止串号)
MOVU10<$STR(S$宝宝名)>
MOVU11<$STR(N$宝宝等级)>
;将信息写入文本备份(路径需真实存在)
AddTextListEx..\QuestDiary\宝宝存档\<$USERNAME>.txt<$STR(S$宝宝名)>|<$STR(N$宝宝等级)>
;清除当前宝宝
KILLCALLMOB
SENDMSG6宝宝[<$STR(S$宝宝名)>]已存入仓库,等级:<$STR(N$宝宝等级)>
#ELSEACT
SENDMSG6你当前没有携带宝宝,无法存储。


取宝宝脚本段

[@LoadBaby]
#IF
;检测是否已存宝宝(检查变量或文件)
CHECKVARLIST..\QuestDiary\宝宝存档\<$USERNAME>.txt<$STR(S$TEMP)>
;检测当前宝宝数量是否超标(如最多5只)
CHECKSLAVECOUNT<5
#ACT
;从文本读取宝宝信息并分割
GetListString<$STR(S$TEMP)>0<$STR(S$宝宝名)>
GetListString<$STR(S$TEMP)>1<$STR(N$宝宝等级)>
;召唤宝宝(参数:名称等级叛变时间[分钟]颜色)
RECALLMOB<$STR(S$宝宝名)><$STR(N$宝宝等级)>72000
;清除存档标记
DELVARLIST..\QuestDiary\宝宝存档\<$USERNAME>.txt
SENDMSG6宝宝[<$STR(S$宝宝名)>]取回成功。
#ELSEACT
SENDMSG6取回失败:未找到存档或宝宝数量已满。


关键命令与路径配置

•检测命令:CHECKSLAVECOUNT检测宝宝数量;CHECKSLAVENAME检测特定宝宝是否存在。

-存储介质:建议使用QuestDiary\宝宝存档\目录,按角色名建立角色名.txt文件存储数据。
-变量选择:必须使用私人变量(如U变量、T变量),若使用全局变量会导致所有玩家数据混乱。
-叛变时间:RECALLMOB的第三个参数建议设为较大值(如7200),避免取回后立即叛变。

常见问题与排查

1.宝宝不攻击/叛变:检查RECALLMOB命令的叛变时间参数,若设为0可能立即叛变;确认怪物数据库(Monster.DB)中该宝宝的Race字段是否为宝宝类型(通常为81或特定值)。
2.变量冲突:若多人同时存取出错,检查脚本是否使用了重复的U/T变量编号,建议每个NPC使用独立的变量区间。
3.路径权限:确保Mir200\Envir\QuestDiary\宝宝存档\文件夹存在,且M2Server有写入权限(否则AddTextListEx会失败)。
4.引擎兼容:GetSlaveInfo命令在部分老引擎(如HERO)可能不支持,需替换为循环检测宝宝名称的脚本逻辑。

脚本放置位置

将上述脚本代码放入MirServer\Mir200\Envir\Market_Def\下的NPC脚本文件中(如功能NPC-3.txt),并在对应NPC的菜单中链接[@StoreBaby]和[@LoadBaby]标签即可生效。
[顶部]