传奇金币不足自动回城脚本写法教程:阈值判断与回城逻辑示例

来源: 作者: 点击:
金币不足自动回城的核心是先拿到角色金币数值,再和预设最低值比较,低于最低值就执行回城、进安全区、补给药或存仓。不同运行环境写法不一样,服务端引擎脚本直接读变量最稳,外部辅助靠界面识别或内存接口风险高,建议只在自己架设的版本里测试。

一、先确定“金币不足”的判断标准

写之前先把几个数值定死:

1. 最低金币阈值:比如平时修装备、买药、交地图费合计需要5000,阈值可设8000到10000,留一点余量,避免刚回城又因为扣费卡住。
2. 回城目标点:盟重土城、比奇、沙城都行,取自己常驻安全区坐标。常见盟重示例坐标3,330,330,比奇按版本地图号来填。
3. 触发频率:打怪循环里每30秒到60秒查一次金币,不要每次攻击都查;用回城卷触发则按使用冷却来,避免连续用卷。
4. 附加条件:血量低、没药、背包满,也可以和金币不足做“或”判断,一次回城处理多项补给。

二、M2/引擎服务端脚本写法

多数传奇引擎用#IF、#ACT、#ELSEACT结构。金币检测常用CHECKGOLD,回城用MAPMOVE,个别版本元宝用CHECKGAMEGOLD。

基础版,仅金币不足回城:

[@GoldBackHome]
IF

CHECKGOLD 10000
ACT

GOTO @End
ELSEACT

SENDMSG 6 金币低于10000,自动回城补给
MAPMOVE 3 330 330
GOTO @End
[@End]
IF

ACT

BREAK

上面逻辑是:如果金币大于等于10000不处理,直接结束;小于10000发提示并传送到地图3的330,330。地图编号按你MapInfo里的配,别直接抄3,有些版本3是盟重,有些版本3是其他图。

挂机主循环里调用:

[@AutoPlay]
IF

CHECKGOLD 10000
ACT

;金币够,继续打怪逻辑
GOTO @Fight
ELSEACT

;金币不够,回城
SENDMSG 6 金币不足,回城卖物补金
MAPMOVE 3 330 330
GOTO @SellAndRepair

[@SellAndRepair]
IF

ACT

;这里写自动对话商人、卖垃圾、修装备、回地图的跳转
;例如回到打怪入口
GOTO @AutoPlay

如果回城后还要卖物,得在NPC脚本段写@sell类触发,或者由辅助端走NPC坐标对话;纯服务端做全自动交易要看引擎是否开放交易NPC自动接口。

三、金币不足+没药+血低,合并回城

挂机不想分多个脚本,可以把条件写一起:

[@CheckStatus]
IF

CHECKGOLD 10000
CHECKITEM 强效金创药 5
CHECKHP 30
ACT

GOTO @Fight
ELSEACT

SENDMSG 6 状态异常,回城处理
MAPMOVE 3 330 330
GOTO @Supply

CHECKHP 30表示血量比例或数值按引擎解释,有的版本是百分比,有的是当前血;CHECKITEM强效金创药5表示背包至少5个,不满足也回城。

四、用回城卷/回城石触发

如果不想直接用MAPMOVE强制传,可走道具触发。回城石通常在QFunction-0里写使用事件,加上冷却和安全区判断:

[@UseItem_回城石]
IF

CHECKGOLD 10000
CHECKSAFEZONE
ACT

SENDMSG 6 金币充足且在安全区,不回城
BREAK
ELSEACT

;非安全区且金币不足,用回城石
MAPMOVE 3 330 330
SENDMSG 6 金币不足,回城石返回土城

更稳妥加冷却变量,防止连续触发:

[@UseItem_回城石]
IF

SMALL StoneCD NowTime
ACT

SENDMSG 6 回城石冷却中
BREAK
ELSEACT

IF

CHECKGOLD 10000
ACT

SENDMSG 6 金币够用,暂不回城
BREAK
ELSEACT

MAPMOVE 3 330 330
SET StoneCD NowTime + 5000
SENDMSG 6 金币不足回城,5秒冷却

冷却变量名按引擎来,GOM/GEE/Hero变量写法不完全一样;部分版本用N变量、P变量或A变量,写前看引擎命令手册。

五、地图每小时/每秒扣金币,不足自动踢回城

有些收费地图按时间扣金,金币不够应传送出去。Hero类可按地图循环检测:

[@MapFee]
IF

ISMAP 地图编号
CHECKGOLD 扣费数
ACT

GAMEGOLD - 扣费数
DELAY 1000
GOTO @MapFee
ELSEACT

IF

ISMAP 地图编号
ACT

SENDMSG 6 金币不足,传出地图
MAPMOVE 3 330 330
BREAK

ISMAP和ISONMAP按引擎选择,DELAY单位看版本,有的1000是1秒,有的按帧;上线先打日志测两次扣费再正式用。

六、外部辅助/按键脚本写法

不想动服务端,用AutoHotkey、按键精灵、Python做界面判断,思路是截图读数字、判断低于阈值后按回城卷快捷键或点回城石,再走安全区。

AHK伪代码:

Loop {
gold := ReadGoldFromScreen() ; 自己写OCR或固定区域取色取字
If (gold < 10000) {
If (Not InSafeZone()) {
Send ^b ; 假设回城卷绑Ctrl+B,按自己快捷键改
Sleep 3000
}
GoSub SellAndBuy
}
Sleep 30000
}

ReadGoldFromScreen可用截图后做模板匹配,金币数字颜色通常是黄色,截取左上角金币文本区域;InSafeZone可用安全区坐标或小地图颜色判断。此方法受分辨率、UI皮肤影响大,换版本要重新采坐标。

Python+PyAutoGUI简化版:

import pyautogui, time

GOLD_REGION = (120, 60, 140, 24) # 金币文本截图区域,按客户端调
LOW_GOLD = 10000

def read_gold():
img = pyautogui.screenshot(region=GOLD_REGION)
# 这里接OCR,返回整数;没OCR先用固定像素颜色判断是否在安全区/低金状态
return 999999

while True:
g = read_gold()
if g < LOW_GOLD:
pyautogui.press('f5') # 回城卷快捷键
time.sleep(3)
# 后续点商人、卖物、修装
time.sleep(30)

纯图像方案不稳定,正式挂机最好服务端脚本为主、外部脚本只做补刀。

七、防重复回城和死循环

1. 加状态锁:回城后设变量IsBack=1,补给完成置0;检测为1就不再触发MAPMOVE。
2. 加最小间隔:上次回城时间存变量,30秒内不二次回城。
3. 回城坐标放安全区空白点,避免落药店门口卡NPC。
4. 金币阈值别设太低,修装备贵、买药贵、传送费高就要提高阈值。
5. 多条件回城用统一入口,打怪段只调用CheckStatus,不要把MAPMOVE散着写十处,后期不好改。
6. 服务端改完QFunction、QuestDiary类文件后重启M2或重载脚本;ANSI编码、半角符号、地图号错误是最常见三个不生效原因。

八、按场景套用

单人打钱图:金币阈值设“回城路费+修装费+买药费×2”,每60秒查一次,低于就MAPMOVE回主城,卖垃圾后原图重进。

收费地图:按每秒/每分钟扣费额反推,阈值至少留两倍扣费;用ISMAP检测在场,先扣后查,不够立即传走,避免欠费被系统反复踢。

战士近战缺药又缺金:合并CHECKHP、CHECKITEM、CHECKGOLD,任一不满足回城,回城段先补药再卖物,最后判断金币达到阈值才出城。

只用回城卷不想改服务端:辅助脚本定时读屏,低金按卷、在安全区不按卷、回城后等加载再执行卖买;这种方案适合自有客户端测试,正式多人服容易因界面改动失效。

写的时候先把地图编号、坐标、金币变量名、回城道具绑定键确认清楚,再用小号跑一小时看日志;日志记“检测时间、当前金币、触发条件、回城结果”,后面调阈值直接看数据,不必反复试错。