传奇服务端挖矿全功能脚本编写基础逻辑进阶玩法落地完整实战操作指南

来源: 作者: 点击:
前置资源与初始化配置

所有挖矿相关脚本统一存放在Mir200\Envir目录下,提前完成资源配置避免后续运行报错。首先在StdItems.db物品数据库中添加矿锄道具,Idx序号选择未被占用的编号,Name设为“矿锄”,Shape字段设置为挖矿专用武器类型,Dur耐久初始值设为30,NeedLevel限制为10级才能装备,备注字段标注为挖矿专用工具。接着在数据库中添加对应矿物资源,分别为铜矿、铁矿、黑铁矿石、金矿、钻石,按稀有度依次设置物品权重,黑铁矿石及以上品质设置为可交易材料,用于装备强化合成消耗。
服务器启动段脚本写入QManage.txt的[@Startup]节点,统一初始化挖矿相关全局变量,所有变量加ORE_前缀避免与其他功能变量冲突。定义{G_ORE_TIMER_RUN}标记矿点刷新定时器运行状态,初始值设为0;为矿区每个矿点设置独立状态变量,命名格式为ORE_地图号_X坐标_Y坐标,初始值设为1代表矿点可挖掘,0代表矿点枯竭。预留定时器编号20作为矿点刷新专属定时器,启动时先执行StopTimer 20清空历史计时,再启动300秒也就是5分钟周期的定时器,定期扫描枯竭矿点完成自动刷新。
初始化核心脚本示例:

text
[@Startup]
#ACT
MOV G_ORE_TIMER_RUN 0
; 毒蛇矿区D2011所有矿点初始化为可挖掘状态
CALCVAR GLOBAL ORE_D2011_123_89 = 1
CALCVAR GLOBAL ORE_D2011_145_92 = 1
CALCVAR GLOBAL ORE_D2011_167_101 = 1
CALCVAR GLOBAL ORE_D2011_189_115 = 1
CALCVAR GLOBAL ORE_D2011_201_128 = 1
StopTimer 20
StartTimer 20 300
BREAK

基础挖矿触发核心脚本

挖矿触发逻辑写入MapEvent.txt地图事件配置,绑定毒蛇山谷矿区、比奇矿区两张挖矿地图的点击事件,玩家点击地面坐标时自动触发判定,无需绑定具体NPC或怪物。核心判定逻辑写入QFunction-0.txt的[@DigMine]触发段,第一步检测玩家当前所在地图是否为允许挖矿的矿区地图,非矿区地图直接返回提示不执行后续逻辑;第二步检测玩家武器位是否装备矿锄,未装备矿锄提示玩家需要装备专用工具;第三步检测玩家当前坐标与点击矿点坐标的直线距离是否在1格以内,防止隔空挖矿的作弊行为;第四步检测对应矿点的状态变量是否为1,矿点处于枯竭状态时提示玩家矿点已挖空需要等待刷新。
所有检测条件全部通过后,执行锁定玩家动作指令,播放挥动矿锄的挖矿动画,将玩家状态锁定2秒钟,期间无法移动、使用技能、交易物品,模拟真实挖矿的动作时长,等待2秒后跳转至奖励结算段落。
触发核心脚本示例:

text
[@DigMine]
#IF
CHECKMAPNAME D2011
CHECKITEMW 矿锄 1
CALCVAR GLOBAL ORE___ = 1
CheckRange <$CURR_X> <$CURR_Y> <$MAP_X> <$MAP_Y> 1
#ACT
ChangeState 5 2000
SENDMSG 6 你开始挥动矿锄敲击矿层...
WAIT 2000
GOTO @GetOreReward
BREAK
#ELSEACT
SENDMSG 5 你需要装备矿锄站在矿点旁,才能在这里挖矿。
BREAK

矿物产出概率与奖励结算

奖励结算段落统一处理矿锄耐久消耗、矿物随机掉落、矿点状态更新逻辑。首先执行矿锄耐久判定,用RANDOM 5生成0-4的随机数,结果为1时扣除矿锄1点耐久,扣除耐久后检测矿锄剩余耐久是否为0,耐久耗尽时直接收回背包中的矿锄,发送提示告知玩家矿锄碎裂。
接着执行矿物掉落概率判定,用RANDOM 100生成0-99的随机数,按概率区间分配奖励:0-59区间共60%概率掉落铜矿,60-79区间共20%概率掉落铁矿,80-89区间共10%概率掉落黑铁矿石,90-96区间共7%概率掉落金矿,97区间共3%概率掉落钻石,98区间概率掉落1瓶祝福油,99区间触发地底怪物突袭事件。所有奖励发放前先检测玩家背包剩余空间,背包满时提示玩家清理背包后再挖掘,不会发放道具造成资源丢失。奖励发放完成后,将当前挖掘的矿点状态变量改为0,标记为枯竭状态,告知玩家矿点已挖空。
奖励结算脚本示例:

text
[@GetOreReward]
#ACT
RANDOM 5
#IF
EQUAL N0 1
#ACT
DECDUR 矿锄 1
CHECKDUR 矿锄 0
#ACT
TAKE 矿锄 1
SENDMSG 6 你的矿锄因为长时间敲击矿层耐久耗尽,碎成了几段。
BREAK
RANDOM 100
#IF
SMALL N0 60
#ACT
CHECKBAGSIZE
GIVE 铜矿 1
SENDMSG 6 你挖下了一块成色普通的铜矿。
BREAK
#IF
LARGE N0 59
SMALL N0 80
#ACT
CHECKBAGSIZE
GIVE 铁矿 1
SENDMSG 6 你挖下了一块坚硬的铁矿。
BREAK
#IF
LARGE N0 79
SMALL N0 90
#ACT
CHECKBAGSIZE
GIVE 黑铁矿石 1
SENDMSG 6 你挖到了一块黑铁矿石,可用于装备强化。
BREAK
#IF
LARGE N0 89
SMALL N0 97
#ACT
CHECKBAGSIZE
GIVE 金矿 1
SENDMSG 6 你挖到了一块闪闪发光的金矿!
BREAK
#IF
EQUAL N0 97
#ACT
CHECKBAGSIZE
GIVE 钻石 1
SENDMSG 6 恭喜你挖到了稀有钻石,价值连城!
BREAK
#IF
EQUAL N0 98
#ACT
CHECKBAGSIZE
GIVE 祝福油 1
SENDMSG 6 你在矿层缝隙里发现了一瓶尘封的祝福油。
BREAK
#IF
EQUAL N0 99
#ACT
PARAM1 <$MAP>
PARAM2 <$X>
PARAM3 <$Y>
PARAM4 1
MONGEN 洞蛆 1
SENDMSG 6 你不小心挖穿了地底洞穴,一只洞蛆爬了出来!
BREAK
CALCVAR GLOBAL ORE___ = 0
SENDMSG 6 这个矿点已经被挖空,等待矿层自然恢复。
BREAK

矿点刷新与矿锄修复逻辑

5分钟周期的定时器触发段写入QFunction-0.txt的[@Timer20]节点,遍历所有预定义的矿点坐标,检测每个矿点的状态变量,若变量值为0代表矿点处于枯竭状态,直接将状态重置为1,同时向当前地图所有玩家发送矿点刷新提示,避免玩家死等空矿点。定时器执行过程中同步统计地图内所有矿点的存活数量,若可挖矿点少于总数量的30%,立即将所有枯竭矿点重置为可挖掘状态,防止玩家扎堆抢矿点影响体验。
在矿区入口放置铁匠NPC,添加矿锄修复功能,玩家携带损坏的矿锄和5000金币即可将矿锄修复为满耐久状态。NPC对话脚本放入Market_Def目录下对应NPC的txt文件中,对话界面提供修理选项,点击后检测玩家背包内是否存在矿锄、金币是否足够,扣除对应金币和耐久耗尽的矿锄,发放一把全新满耐久的矿锄即可。
矿点刷新脚本示例:

text
[@Timer20]
#ACT
; 遍历所有矿点重置状态
CALCVAR GLOBAL ORE_D2011_123_89 + 0
#IF
EQUAL G_ORE_D2011_123_89 0
#ACT
CALCVAR GLOBAL ORE_D2011_123_89 = 1
SENDMAPMSG D2011 6 坐标(123,89)的矿层已经恢复,可以挖矿了。
BREAK
; 其余矿点按相同格式复制检测逻辑即可
BREAK


矿锄修复NPC脚本示例:

text
[@main]
我这里可以修理挖矿用的矿锄,一把5000金币。\
<修理矿锄/@RepairPick>\
<离开/@exit>
[@RepairPick]
#IF
CHECKITEM 矿锄 1
CHECKGOLD 5000
#ACT
TAKE 矿锄 1
TAKE GOLD 5000
GIVE 矿锄 1
SENDMSG 6 你的矿锄已经修复到满耐久状态。
BREAK
#ELSEACT
SENDMSG 5 你身上没有待修理的矿锄,或者金币不足。
BREAK

防脱机挖矿校验逻辑

在挖矿奖励结算段加入防挂机检测逻辑,玩家每次成功挖矿时记录当前系统毫秒时间戳,与上次挖矿时间戳做差值,两次挖矿间隔小于800毫秒判定为异常操作,累计3次异常直接将玩家传送回比奇安全区,清除当前挖矿状态。累计挖矿成功50次时,自动触发随机验证弹窗,给玩家弹出个位数加减法算术题,15秒内答对可以继续挖矿,超时或者答错直接踢下线10分钟,拦截全自动脱机挖矿脚本。
额外加入连续挖矿时长检测,玩家在矿区连续挖矿超过1小时,自动触发1分钟挖矿冷却,期间无法进行挖矿操作,提示玩家活动手腕休息片刻,避免脚本24小时不间断刷取矿物资源影响游戏经济平衡。