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

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

热度:
前置资源与初始化配置

所有挖矿相关脚本统一存放在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作为矿点刷新专属定时器,启动时先执行StopTimer20清空历史计时,再启动300秒也就是5分钟周期的定时器,定期扫描枯竭矿点完成自动刷新。
初始化核心脚本示例:

text
[@Startup]
#ACT
MOVG_ORE_TIMER_RUN0
;毒蛇矿区D2011所有矿点初始化为可挖掘状态
CALCVARGLOBALORE_D2011_123_89=1
CALCVARGLOBALORE_D2011_145_92=1
CALCVARGLOBALORE_D2011_167_101=1
CALCVARGLOBALORE_D2011_189_115=1
CALCVARGLOBALORE_D2011_201_128=1
StopTimer20
StartTimer20300
BREAK

基础挖矿触发核心脚本

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

text
[@DigMine]
#IF
CHECKMAPNAMED2011
CHECKITEMW矿锄1
CALCVARGLOBALORE___=1
CheckRange<$CURR_X><$CURR_Y><$MAP_X><$MAP_Y>1
#ACT
ChangeState52000
SENDMSG6你开始挥动矿锄敲击矿层...
WAIT2000
GOTO@GetOreReward
BREAK
#ELSEACT
SENDMSG5你需要装备矿锄站在矿点旁,才能在这里挖矿。
BREAK

矿物产出概率与奖励结算

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

text
[@GetOreReward]
#ACT
RANDOM5
#IF
EQUALN01
#ACT
DECDUR矿锄1
CHECKDUR矿锄0
#ACT
TAKE矿锄1
SENDMSG6你的矿锄因为长时间敲击矿层耐久耗尽,碎成了几段。
BREAK
RANDOM100
#IF
SMALLN060
#ACT
CHECKBAGSIZE
GIVE铜矿1
SENDMSG6你挖下了一块成色普通的铜矿。
BREAK
#IF
LARGEN059
SMALLN080
#ACT
CHECKBAGSIZE
GIVE铁矿1
SENDMSG6你挖下了一块坚硬的铁矿。
BREAK
#IF
LARGEN079
SMALLN090
#ACT
CHECKBAGSIZE
GIVE黑铁矿石1
SENDMSG6你挖到了一块黑铁矿石,可用于装备强化。
BREAK
#IF
LARGEN089
SMALLN097
#ACT
CHECKBAGSIZE
GIVE金矿1
SENDMSG6你挖到了一块闪闪发光的金矿!
BREAK
#IF
EQUALN097
#ACT
CHECKBAGSIZE
GIVE钻石1
SENDMSG6恭喜你挖到了稀有钻石,价值连城!
BREAK
#IF
EQUALN098
#ACT
CHECKBAGSIZE
GIVE祝福油1
SENDMSG6你在矿层缝隙里发现了一瓶尘封的祝福油。
BREAK
#IF
EQUALN099
#ACT
PARAM1<$MAP>
PARAM2<$X>
PARAM3<$Y>
PARAM41
MONGEN洞蛆1
SENDMSG6你不小心挖穿了地底洞穴,一只洞蛆爬了出来!
BREAK
CALCVARGLOBALORE___=0
SENDMSG6这个矿点已经被挖空,等待矿层自然恢复。
BREAK

矿点刷新与矿锄修复逻辑

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

text
[@Timer20]
#ACT
;遍历所有矿点重置状态
CALCVARGLOBALORE_D2011_123_89+0
#IF
EQUALG_ORE_D2011_123_890
#ACT
CALCVARGLOBALORE_D2011_123_89=1
SENDMAPMSGD20116坐标(12389)的矿层已经恢复,可以挖矿了。
BREAK
;其余矿点按相同格式复制检测逻辑即可
BREAK


矿锄修复NPC脚本示例:

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

防脱机挖矿校验逻辑

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