天堂2复古HF芙蕾雅FLY全套脚本模块详解|挂机、传送、商城、防卡死一站式开发指南

前言

玩天堂 2 复古服多年,折腾过各种免费 / 付费 Bot 脚本,踩过大量坐标卡死、卡怪不换图、死亡不会回城、背包满不售卖、buff 断档挂机失效等坑。今天把手上一套工业级模块化 Bot 源码拆解分享,覆盖底层工具库、传送系统、点位挂机、商城交易、宠物、状态自检全部核心模块,附带每个单元核心方法、设计思路、实战场景,新手也能看懂复用、自定义挂机路线。
整套脚本采用单元化分层设计,职责完全拆分:底层工具函数→通用业务模块→地图挂机业务脚本,新增地图挂机只需要写对应GuaJi_xxx过程,不用改动底层逻辑,维护成本极低。

一、全局基础工具单元(Functions.pas)|所有脚本依赖底层库

整个脚本体系最基础依赖,封装数学、坐标、移动、三元简写通用函数,任何挂机、传送逻辑都要调用。

核心方法一览

  1. distanceBetween(x1,y1,z1,x2,y2,z2):extended
     
    三维空间坐标距离计算,判断角色和 NPC / 刷点远近,用于筛选最近挂机点位。
  2. inRange(obj/x,y,z,范围) 双重载
     
    判断单位 / 角色是否在指定坐标半径内,传送校验、区域切换、回城判断必备。
  3. MoveAndWait(x,y,z)
     
    移动到坐标并等待全队靠近,组队挂机核心,避免队友掉队脱节。
  4. getClosestLoc(坐标数组)
     
    批量点位数组自动匹配离玩家最近点位,实现巡回刷点就近挂机。
  5. ifThen(布尔,真值,假值) 数字 / 字符串 / 数组三重载
     
    三元运算符简写,简化打印、状态赋值代码,减少 if 嵌套冗余。 

二、传送模块 TeleportModule.pas|全城镇一键传送、回城逻辑

封装全城镇守门人对话、回城方案,支持回城卷 / 回城技能 / 守门人三种模式,不用重复写 NPC 对话代码。

常量

SCROLL_OF_SCAPE = 736 回城卷轴物品 ID

核心方法

  1. GetCity():TCity
     
    自动识别当前所在城镇,不在城内自动触发回城。
  2. GoHome(ItemID, SkillID, move)
     
    多方案回城优先级:自定义技能 > 回城卷轴 > 守门人回城,支持回城后自动走到传送师。
  3. MoveInCity
     
    各城镇复活点自动寻路到守门人,内置亚丁、古鲁丁、卢云、修加特等全城镇分段坐标逻辑,复活不用手动跑。
  4. TeleportTo(城镇名):Boolean
     
    直接传入城镇字符串一键传送,例TeleportTo('Rune')传卢云。
  5. TeleportToLocation(区域名)
     
    先切换对应城镇守门人,再传送目标狩猎区,长途挂机标准调用。

三、配置持久化 SettingsModule + ModuleFunctions|挂机参数本地存档

两套搭配,前者是底层 INI 读写,后者封装简化调用,挂机时长、职业类型、buff 列表、刷点坐标都存在本地角色独立 ini,重启脚本不丢失设置。

1. SettingsModule(底层读写)

  • SetFile(路径):绑定 ini 文件
  • Save(段,键,值):存数字 / 字符串 / 布尔
  • Load/LoadBool:读取配置,支持默认值兜底

2. ModuleFunctions(业务封装,日常优先使用)

  • updateState(类型,标识,数值):自动绑定当前角色 ini,无需手动设置文件
  • getState(类型,标识,默认值):读取挂机配置
  • getArray:读取分号分隔数组,用于存储批量挂机坐标、buffID 列表

四、角色工具 UserFunctions|职业、道具、Buff、宠物配套

针对玩家自身属性封装工具,区分法师 / 战士自动换 BUFF、自动穿戴新手装、领取道具、检测补 BUFF。

常用方法

  1. isMage():无参判断自身是否法系职业,挂机自动切换输出逻辑
  2. equipNewbieItems:自动穿戴全套新手装备
  3. countItems(ItemID):统计背包指定道具数量,判断回城补给
  4. shouldRebuff:读取配置 buff 列表,buff 即将过期返回 true,触发回城补 BUFF
  5. getNewbieBuffer:获取新手 BUFF NPC 对象,全服通用 buff 获取逻辑

五、点位基础 Locations.pas|通用刷点收尾、狩猎区传送流程

存放各地图基础传送巡路过程,同时提供通用清怪函数,供挂机脚本调用。

核心过程

  1. FinishMobs
     
    通用等待清怪函数:循环直到无目标再执行下一步,完美适配「点位到点但没打完,打完再走」需求,和之前自定义FarmPoint配套使用。
  2. Ketra/StakatoNest/Disciples 等地图流程
     
    封装每个狩猎区传送 + 分段移动坐标,直接调用直达挂机区域。

六、交易邮件 RSellAndBuy + RSendMail|自动补给、清背包、发材料

配套挂机配套商业模块,挂机背包满自动回城售卖杂物,红蓝 / 灵魂弹不足自动购买,多余材料一键邮寄仓库小号。
  1. SellAll:批量出售所有垃圾道具
  2. BuyZhanShi/BuyFaShi/BuyCommon:战士 / 法师通用补给采购
  3. SendAllObj:背包可邮寄材料全部发送小号,避免背包溢出挂机中断

七、宠物配套 LevelPet.pas|召唤物常驻后台线程

独立多线程脚本,挂机同时后台托管宠物,不用写在主循环里占用挂机逻辑:
  1. petHeal:宠物血量低自动治疗,死亡复活
  2. petRangeProtect:宠物距离过远自动召回跟随
  3. countExpAdena:定时记录经验、金币到本地 txt,统计挂机收益
  4. tpContoller:常驻宠物增益 buff 自动续上

八、核心业务挂机单元 GuaJi.pas(重点)

整套脚本的业务顶层,所有地图挂机逻辑都写在此单元,统一封装卡死、死亡、超时、回城补给自检逻辑,所有挂机过程复用CheckAndReset状态检测,不用每个地图重复写判断。

1. 核心通用过程 CheckAndReset(全地图共用防卡死 / 死亡逻辑)

这是整套挂机脚本的灵魂,统一处理所有异常场景,触发任意重置条件自动回城补给、清包、补 BUFF 后重新出发:

触发重置条件

  1. 连续 120 秒无移动无战斗 → 判定坐标卡死,回城重启挂机
  2. 挂机累计满 8 小时 → 强制下线休整,防服务器检测
  3. 角色死亡:区分格勒西亚 / 普通地图,分别回对应据点 / 氏族大厅
  4. 自动跑到卢云城镇(安全区),判定挂机周期结束

重置后标准流程

关闭自动挂机→邮寄材料→出售垃圾→根据职业购买红蓝弹→补全 BUFF→重置计时,循环挂机。

全局计时变量

  • lastX/lastY:记录上一次坐标,判断是否原地卡死
  • lastMoveTick:最后移动时间戳
  • lastCombatTick:最后战斗时间戳

2. 各地图挂机业务过程(开箱即用)

全部为永久循环while true,每 1 秒执行一次状态检测,异常自动回城恢复,正常则在对应地图分段巡路挂机:
  1. 修道院上下层 GuaJi_XiuDaoYuanXiaCeng / ShangCeng1
  2. 龙道 1~4 四层路线 GuaJi_LongDao1~4
  3. 龙谷两条挂机线 GuaJi_LongGu1/2(IsWarrior:Boolean) 传参区分战法路线
  4. 大坑挂机 GuaJi_DaKeng
  5. 毁灭鸟房 / 猴房 GuaJi_HuiMie_NF/HF

挂机标准流程(所有 GuaJi_xxx 统一模板)

  1. 初始化总计时ST:=GetTickCount
  2. 死循环,每 1 秒执行CheckAndReset异常检测
  3. 判断是否在传送城镇(卢云)→ 找守门人传对应地图
  4. 到达目标地图后,依次执行分段移动点位
  5. 开启.farmon内挂自动战斗、Engine.FaceControl(true)自动寻怪

九、引擎原生内置核心对象与 API(脚本底层操作根基)

1. Engine 引擎全局对象(控制一切动作)

移动、目标、对话、挂机开关、指令全部依托它:
  • 目标控制:SetTarget(Id/对象)锁定、CancelTarget取消目标、Attack攻击
  • 移动:MoveTo(X,Y,Z)MoveToTarget走向目标
  • 挂机开关:FaceControl(True/False)自动寻怪开关
  • NPC 对话:DlgOpen / DlgSel传送交互
  • 服务器指令:EnterText('.farmon/.farmoff')控制内挂启停

2. User 自身角色对象

  • 属性:X/Y/Z 坐标、HP/MP/CP、Dead 死亡、InCombat 战斗状态
  • 子对象:User.Target当前选中怪物、User.Buffs增益列表

3. TL2Live 单位对象(怪物 / NPC / 队友 / 宠物通用)

只读属性:Id、名称、CurHP、Dead、Attackable、XYZ 坐标,用来判断卡怪、筛选可攻击怪物。

4. NpcList / PetList / Party 列表对象

遍历范围内怪物、宠物、队友,实现手动切换目标、群体加血、拉怪逻辑。

5. Inventory 背包对象

ByID查找道具、统计数量,实现自动买卖、邮寄。

十、辅助告警脚本

  1. Goldkeeper:扫描高价稀有怪物,出现播放提示音提醒
  2. AntibotAlarm:检测反外挂倒计时弹窗,立刻报警,避免被踢下线
  3. Trade.txt:循环喊话摆摊,自动出售闲置装备材料

十一、整套脚本架构优势总结

  1. 低耦合模块化:底层工具、传送、挂机、交易完全分离,新增地图仅新增GuaJi_xxx过程,无需修改公共异常逻辑。
  2. 统一异常处理:所有挂机复用CheckAndReset,不会出现 A 图死亡回城、B 图卡死不处理的 bug。
  3. 持久化配置:挂机时长、职业、BUFF 列表本地保存,重启不重置。
  4. 多线程分离:宠物、收益统计后台独立线程,不干扰主挂机打怪。
  5. 适配复古服规则:区分氏族大厅 / 城镇回城、战法补给差异化、长时间防检测机制。
  6. 可拓展性强:可自行新增卡怪自动切换目标、定点 Farm 循环、自动组队跟随逻辑。

十二、二次开发小建议

  1. 结合之前写的FarmPoint点位停留过程,替换GuaJi内固定巡路逻辑,实现「每个点位停留指定时长,打完再走」。
  2. 封装SwitchStuckTarget卡怪切换目标自定义过程,嵌入CheckAndReset,卡怪自动取消当前怪打下一只,不用回城。
  3. 扩展getArray配置,自定义多路线轮换挂机,避免长期单地图封号风险。
  4. countExpAdena基础上增加收益预警,金币低于阈值自动回城刷金币点位。
posted @ 2026-07-30 18:33  必备神器库公众号  阅读(30)  评论(0)    收藏  举报