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

传奇HERO引擎自动攻沙及NPC奖励脚本完整写法

热度:
本文聚焦HERO引擎自动攻沙触发配置、分档奖励设置,适配开区4天首次攻沙10000元宝、后续每日攻沙3000元宝的需求,脚本可直接嵌入NPC,兼顾自动触发与手动领取功能。

一、自动攻沙核心配置(开启时间与规则设定)

自动攻沙需通过全局脚本设置时间触发,结合开区天数判断首次攻沙与日常攻沙,核心依赖QManage.txt全局触发文件与攻沙规则脚本,步骤如下。

1.开区天数判断脚本(QManage.txt中配置)

打开服务端路径“MirServer\Mir200\Envir\MapQuest_def\QManage.txt”,在文件末尾添加开区天数统计脚本,用于区分首次攻沙与后续攻沙,脚本如下:

[@Login]

#IF

CheckServerOpenDay<1

#ACT

SetVarHUM开区天数1

SaveVarHUM开区天数..\Envir\QuestDiary\变量存储.txt

#ELSE

#ACT

LoadVarHUM开区天数..\Envir\QuestDiary\变量存储.txt

IncVarHUM开区天数1

SaveVarHUM开区天数..\Envir\QuestDiary\变量存储.txt

说明:该脚本通过登录触发统计开区天数,变量存储于专属文件,避免服务器重启后数据丢失。CheckServerOpenDay为HERO引擎自带命令,直接读取开区时长,无需额外配置。

2.自动攻沙时间触发脚本

在QManage.txt继续添加攻沙触发脚本,设定每日固定时间开启,同时判断开区天数匹配对应规则,脚本如下:

[@Timer]1440020:00:00//每日20:00自动触发,1440为间隔分钟(24小时)

#IF

CheckVarHUM开区天数=4//开区第4天触发首次攻沙

#ACT

StartSandAttack1120//开启攻沙,持续120分钟(2小时)

SendMsg0开区首次攻沙开启!20:00-22:00占领皇宫者可领10000元宝!2553

SetVarHUM首次攻沙已开启1

SaveVarHUM首次攻沙已开启..\Envir\QuestDiary\变量存储.txt

#ELSE

#IF

CheckVarHUM开区天数>4//开区4天后每日攻沙

#ACT

StartSandAttack1120

SendMsg0每日攻沙开启!20:00-22:00占领皇宫者可领3000元宝!2553

说明:StartSandAttack为攻沙开启命令,参数1为开启状态,120为持续分钟数,可按需调整时长;SendMsg命令用于全服通知,提升玩家参与度。

3.攻沙结束自动判定脚本

在QManage.txt添加攻沙结束触发,记录获胜行会,便于NPC发放奖励,脚本如下:

[@SandAttackEnd]

#ACT

GetSandWinner行会名称//获取占领皇宫的获胜行会名称

SaveVarGLOBAL获胜行会行会名称..\Envir\QuestDiary\变量存储.txt

SetVarGLOBAL攻沙奖励可领取1

SaveVarGLOBAL攻沙奖励可领取..\Envir\QuestDiary\变量存储.txt

SendMsg0本次攻沙结束!获胜行会可前往指定NPC领取奖励!2553

说明:@SandAttackEnd为HERO引擎攻沙结束自带触发标识,GetSandWinner命令自动获取获胜行会,全局变量记录确保NPC可读取信息。

二、NPC奖励脚本写法(分档发放逻辑)

奖励通过自定义NPC发放,需在NPC脚本文件中添加领取逻辑,判断攻沙类型(首次/日常)、获胜行会身份,仅允许行会成员领取,脚本可直接复制使用。

1.NPC基础脚本(SandReward.txt)

新建脚本文件“SandReward.txt”,放入路径“MirServer\Mir200\Envir\QuestDiary”,添加NPC对话与领取逻辑,完整脚本如下:

[@Main]

#IF

CheckVarGLOBAL攻沙奖励可领取=0

#SAY

暂无可领取的攻沙奖励!每日20:00-22:00参与攻沙,占领皇宫即可领取元宝奖励。\

#ELSE

#IF

CheckGuildMember【$GLOBAL(获胜行会)】//验证是否为获胜行会成员

#SAY

恭喜你所在行会赢得本次攻沙!\

〈首次攻沙奖励(10000元宝)〉\

〈日常攻沙奖励(3000元宝)〉\

#ACT

LoadVarHUM首次攻沙已开启..\Envir\QuestDiary\变量存储.txt

#IF

CheckVarHUM首次攻沙已开启=1

#ACT

GiveGold10000//发放10000元宝

SendMsg7你已成功领取首次攻沙奖励10000元宝!255

SetVarHUM首次攻沙已领取1

SaveVarHUM首次攻沙已领取..\Envir\QuestDiary\变量存储.txt

#ELSE

#ACT

GiveGold3000//发放3000元宝

SendMsg7你已成功领取日常攻沙奖励3000元宝!255

SetVarHUM日常攻沙已领取1

SaveVarHUM日常攻沙已领取..\Envir\QuestDiary\变量存储.txt

#ELSE

#SAY

你并非本次攻沙获胜行会成员,无法领取奖励!\

2.脚本核心说明

1.奖励发放:GiveGold为HERO引擎元宝发放命令,部分版本需替换为GiveYuanBao,需根据服务端元宝字段调整,确保奖励正常到账。

2.领取限制:通过变量记录领取状态,避免重复领取,首次攻沙领取后自动重置“首次攻沙已开启”变量,后续默认发放日常奖励。

3.行会验证:CheckGuildMember命令需填写完整获胜行会名称,若行会名称含特殊符号,需与游戏内完全一致,否则验证失败。

三、脚本关联与NPC挂载

1.关联全局脚本

打开“MirServer\Mir200\Envir\QuestDiary\AutoRun.txt”,添加脚本关联命令:#INCLUDE..\QuestDiary\SandReward.txt,确保服务器启动时加载奖励脚本。

重载脚本:启动M2控制器,点击“脚本-重载全部脚本”,无需重启服务器即可生效,若脚本存在语法错误,M2日志会提示具体报错位置。

2.NPC挂载操作

打开DBC数据库,找到“NPC”数据表,新建NPC(或修改现有NPC),设置NPC名称(如“攻沙奖励使者”)、所在地图(建议比奇城安全区,地图编号0)、坐标(如320330)。

在NPC“脚本标识”字段填写“@Main”,“脚本文件”字段填写“SandReward.txt”,保存数据库后,重启M2控制器,游戏内即可看到NPC并触发奖励领取功能。

四、常见问题排查与调试

1.自动攻沙不触发

排查方向:检查QManage.txt中@Timer触发时间格式是否正确(需为HH:MM:SS),开区天数变量是否正常存储,可通过M2控制器“变量查看”功能核对变量值;确保StartSandAttack命令参数正确,部分旧版HERO引擎需替换为OpenSandAttack。

2.奖励无法领取或重复领取

排查方向:重复领取需检查变量存储路径是否正确,确保SaveVar与LoadVar路径一致;无法领取需验证行会名称匹配度,或替换元宝发放命令,测试GiveGold与GiveYuanBao是否适配当前版本。

3.NPC无对话响应

排查方向:核对NPC数据表中“脚本标识”是否为@Main,脚本文件名称是否与配置一致,避免拼写错误;检查AutoRun.txt是否正确关联脚本,未关联则NPC无法读取领取逻辑。

五、进阶调整(可选)

1.攻沙时长调整:修改StartSandAttack命令第二个参数,如60代表持续60分钟,适配不同版本节奏。

2.奖励拓展:在脚本#ACT标签下添加GiveItem命令,额外发放装备、道具,如“GiveItem沙城令牌1”,丰富奖励内容。

3.领取时限:添加时间判断脚本,设置奖励领取有效期(如攻沙结束后24小时内),超时自动重置“攻沙奖励可领取”变量,关闭领取通道。
[顶部]