传奇3K引擎行会竞价自动招人全脚本:掌门出价截标最高价入会等级职业防刷与机器人清标

来源: 作者: 点击:
行会竞价自动招人分四层。第一层掌门在竞价NPC出价,扣元宝或金币,记录最高行会名、当前最高价、最低入会等级、入会职业限制、截止标志。第二层普通玩家在招人NPC点加入,脚本校验无行会、等级达标、职业在允许列表、当前有中标行会,自动执行AddGuildMember把玩家加进中标行会。第三层用3K定时器或机器人做倒计时,到点自动截标,未到截止前允许继续加价。第四层机器人每日或每周清标,避免旧中标行会长期占着自动招人入口。3K不同子版本入会命令可能用AddGuildMember,也可能用ADDGUILDMEMBER,按所用M2命令帮助二选一替换;竞价变量用全局G变量或文本文件存,重启后靠SAVEVAR/LOADVAR恢复。

一、变量与文件规划

全局变量用G系列示例,实际按3K不冲突编号改:

G100 竞价状态,0未开、1进行中、2已截标
G101 当前最高价,单位按元宝或金币统一
G102 最低加价幅度
G103 最低入会等级
G104 入会职业开关,0全职业、1战士、2法师、3道士,可扩展多职业位
G105 中标行会开关,1有效、0无效
S1 中标行会名
S2 竞价公告文本
S3 当前最高出价掌门名

文本文件放Envir\QuestDiary\行会竞价\,用于持久化:

最高价记录.txt 写 S1=行会名S3=掌门名 G101=价格
G100=状态
招人名单.txt 可选,记录自动入会日志,排错用
屏蔽行会.txt 可选,禁止参与竞价的行会

机器人或NPC启动段用LOADVAR读这些文件;每次出价成功用SAVEVAR回写。纯G变量小退不丢但重启可能复位,重要竞价必须落文件。

二、竞价NPC掌门出价

Market_Def建“行会竞价官-0.txt”,Merchant按3K格式写地图号、坐标、范围、名称。脚本体:

[@main]
查看当前竞价状态/state
参与行会竞价出价/bid
设置入会等级要求/setlv
设置入会职业要求/setjob
修改竞价招人公告/setgg
管理本行会中标状态/mgr

[@state]
if

EQUAL G100 0
act

SENDMSG 6 当前无竞价,联系管理员开启或点出价开始。
elsesay

if

EQUAL G100 1
act

SENDMSG 6 竞价进行中,最高行会<S1>,最高价<G101>,最低入会等级<$G103>。
elsesay

SENDMSG 6 竞价已截标,当前中标行会<$S1>,招人按截标结果执行。

[@bid]
if

HAVEGUILD
ISGUILDMASTER
CHECKGAMEGOLD > <$G101>
act

CALCVAR G101 + G102
GAMEGOLD - <$G101新增额按实际写>
MOV S1 行会名变量取法按3K取当前行会名
MOV S3 <$USERNAME>
SET G100 1
SET G105 1
SAVEVAR GLOBAL G101 ..\QuestDiary\行会竞价\最高价记录.txt
SENDMSG 0 <S3>代表<S1>出价<$G101>,成为当前最高竞价行会。
elsesay

if

HAVEGUILD
ISGUILDMASTER
elsesay

SENDMSG 6 你不是行会掌门或无行会,无法参与竞价。
elsesay

if

CHECKGAMEGOLD < <G101>+<G102>
act

SENDMSG 6 元宝不足,出价需高于当前最高价且包含最低加价<$G102>。
elsesay

SENDMSG 6 出价条件不满足。

上面出价逻辑用通用伪写;3K若取当前行会名用专门命令,就替换MOV S1后的取值。掌门必须HAVEGUILD且ISGUILDMASTER,避免小弟乱出价。 扣款前先比较“当前最高价+最低加价”,首次出价可设底价G101初始值、G102加价幅度。若用金币不用元宝,把CHECKGAMEGOLD、GAMEGOLD换成CHECKGOLD、GOLD相关命令。

三、输入最低等级与职业

用@@InPutInteger收等级,@@InPutString收公告,3K自动招人帖常用这两组输入命令。

[@setlv]
if

HAVEGUILD
ISGUILDMASTER
EQUAL S1 当前中标行会名一致性校验
act

@@InPutInteger 设置最低入会等级
elsesay

SENDMSG 6 仅中标掌门可设置招人条件。

[@InPutInteger设置最低入会等级]
if

LARGE N1 1
SMALL N1 300
act

MOV G103 N1
SAVEVAR GLOBAL G103 ..\QuestDiary\行会竞价\最高价记录.txt
MESSAGEBOX 已设置自动招人最低等级<$G103>。
elsesay

MESSAGEBOX 请输入1到300之间的等级。

[@setjob]
if

HAVEGUILD
ISGUILDMASTER
act

@@InPutInteger 设置职业开关1战士2法师3道士可多选改多段
elsesay

SENDMSG 6 仅掌门可设置。

[@InPutInteger设置职业开关]
if

EQUAL N2 0
act

SET G104 0
SENDMSG 6 已设为全职业招人。
elsesay

if

EQUAL N2 1
act

SET G104 1
SENDMSG 6 已限战士。
elsesay

if

EQUAL N2 2
act

SET G104 2
SENDMSG 6 已限法师。
elsesay

if

EQUAL N2 3
act

SET G104 3
SENDMSG 6 已限道士。
elsesay

SENDMSG 6 职业参数错误,0全职业、1战士、2法师、3道士。

多职业允许可改G104为位标志,例如1战士、2法师、4道士,入会段用按位与判断;简单版本只做单职业或全职业最稳。

[@setgg]
if

HAVEGUILD
ISGUILDMASTER
act

@@InPutString 设置竞价招人公告
elsesay

SENDMSG 6 仅掌门可改公告。

[@InPutString设置竞价招人公告]
if

act

MOV S2 <$STR(N0)>
SAVEVAR GLOBAL S2 ..\QuestDiary\行会竞价\最高价记录.txt
MESSAGEBOX 公告已更新:<$S2>。
elsesay

SENDMSG 6 公告内容为空。

四、玩家自动加入中标行会

招人NPC可和竞价官分开,也可同NPC。Market_Def建“行会自动招人-0.txt”:

[@main]
查看中标行会与招人要求/view
一键申请加入中标行会/join
退出/exit

[@view]
if

EQUAL G105 1
act

SENDMSG 6 当前中标行会<S1>,最低等级<G103>,职业限制<G104>,公告:<S2>。
elsesay

SENDMSG 6 当前无中标行会,暂不可自动加入。

[@join]
if

HAVEGUILD
act

SENDMSG 6 你已有行会,不能重复加入。
elsesay

if

EQUAL G105 0
act

SENDMSG 6 当前没有开启竞价中标行会。
elsesay

if

CHECKLEVELEX < <$G103>
act

SENDMSG 6 等级低于<$G103>,未达到自动招人要求。
elsesay

if

EQUAL G104 1
CHECKJOB 0
act

GOTO @doadd
elsesay

if

EQUAL G104 2
CHECKJOB 1
act

GOTO @doadd
elsesay

if

EQUAL G104 3
CHECKJOB 2
act

GOTO @doadd
elsesay

if

EQUAL G104 0
act

GOTO @doadd
elsesay

SENDMSG 6 当前中标行会不招收你的职业。

[@doadd]
if

EQUAL G105 1
act

AddGuildMember <$S1>
SENDMSG 0 恭喜<USERNAME>通过行会竞价自动招人加入<S1>。
ADDNAMELIST ..\QuestDiary\行会竞价\招人名单.txt
elsesay

SENDMSG 6 加入失败,中标行会状态异常。

若3K该子版本入会命令为ADDGUILDMEMBER,把AddGuildMember <S1>改成ADDGUILDMEMBER <S1> 或ADDGUILDMEMBER <S1> <USERNAME>;空第二参数表示把自己加入。 已会判断用HAVEGUILD前置拦截,避免重复加人报错。招人名单用ADDNAMELIST写日志,后期查谁通过自动招人进来。

五、定时器倒计时截标

3K定时器在QManage用SetOnTimer,OnTimer0到OnTimer19对应段。 竞价开始NPC里启动:

[@starttimer]
if

ISADMIN
act

SETONTIMER 0 60 0
SENDMSG 6 竞价定时器已启动,每60秒检测一次截标条件。
elsesay

SENDMSG 6 无权限启动竞价定时器。

QManage.txt:

[@OnTimer0]
if

EQUAL G100 1
CHECKTIME > 截标时间变量按3K取系统时间
act

SET G100 2
SET G105 1
SAVEVAR GLOBAL G100 ..\QuestDiary\行会竞价\最高价记录.txt
SENDMSG 0 行会竞价已截标,中标行会<S1>,最高价<G101>,自动招人继续开放。
elsesay

if

EQUAL G100 1
act

SENDMSG 6 当前最高<S1>、价格<G101>,继续出价。

没有系统时间比较命令时,用机器人RUNONDAY到固定点执行截标段代替定时器。定时器索引别和其他泡点、活动冲突;测试先SetOnTimer 0 10 0,10秒一检,稳定再改正式间隔。

六、机器人自动清标与每日招人维护

Envir\Robot_def\AutoRunRobot.txt:

AutoRun NPC RUNONDAY 00:00:05 @竞价每日初始化

AutoRunRobot按所用3K文件名写

AutoRun NPC RUNONDAY 20:00:00 @竞价自动截标

AutoRun NPC RUNONWEEK 1:00:00 @竞价每周清标

RobotManage.txt或对应机器人功能文件:

[@竞价每日初始化]
if

act

SET G100 0
SET G105 0
MOV S1 无
MOV S3 无
SAVEVAR GLOBAL G101 ..\QuestDiary\行会竞价\最高价记录.txt
SENDMSG 1 行会竞价每日初始化完成,掌门可重新出价。

[@竞价自动截标]
if

EQUAL G100 1
act

SET G100 2
SET G105 1
SAVEVAR GLOBAL G100 ..\QuestDiary\行会竞价\最高价记录.txt
SENDMSG 0 晚间截标完成,中标行会<$S1>开启自动招人。
elsesay

SENDMSG 1 当前无进行中竞价,晚间截标跳过。

[@竞价每周清标]
if

act

SET G100 0
SET G105 0
SET G101 底价重置值
MOV S1 无
DELNAMELIST ..\QuestDiary\行会竞价\招人名单.txt
SAVEVAR GLOBAL G101 ..\QuestDiary\行会竞价\最高价记录.txt
SENDMSG 1 每周竞价清标完成,历史招人名单已清空。

机器人RUNONDAY/RUNONWEEK写法参考通用定时活动配置;3K若机器人目录命令名不同,按M2机器人帮助改。 清标太频繁会导致掌门刚出价就被清,正式服建议每日开标一次、固定晚上截标,或每周几轮。

七、防刷与异常规则

同会多号抬价:出价段加判断,S3等于当前最高掌门且S1等于当前中标行会时不允许自己继续加价;若允许自我加价会刷高底价但不增加真实竞争,可禁止。

小号占中标:掌门出价前校验行会人数、行会等级、创建时长;例如少于5人、创建不足1天不允许竞价。3K创建行会走沃玛号角+金币,掌门资格本身有门槛,脚本再加ISGUILDMASTER即可。

重复入会:join段HAVEGUILD前置;入会后再次点NPC直接提示已会,不执行AddGuildMember。

职业绕过:G104全职业为0才放行,单职业只放行对应CHECKJOB;多职业用位标志,别用多个EQUAL并列导致全满足才进。

金钱异常:出价先判断余额再扣款;用CHECKGAMEGOLD/CHECKGOLD前置,避免扣成负数。拍卖类通用做法也是先校验当前价+加价、再扣款、再更新最高价。

中标行会被解散:机器人或定时器招人前检测S1对应行会是否存在,不存在则G105置0、G100置0、S1置无,避免把玩家加进空会报错。

重启丢数据:NPC启动段LOADVAR读最高价记录.txt、招人名单可不读只写;定时器截标后SAVEVAR,机器人清标后SAVEVAR。通用拍卖/竞价都建议变量持久化。

八、完整最小可跑示例

行会竞价官-0.txt:

[@main]
出价竞价/bid
设等级/setlv
设职业/setjob
状态/state

[@bid]
if

HAVEGUILD
ISGUILDMASTER
CHECKGAMEGOLD > <G101>+<G102>
act

CALCVAR G101 + G102
GAMEGOLD - <$G102新增按实际>
MOV S1 取当前行会名
MOV S3 <$USERNAME>
SET G100 1
SET G105 1
SAVEVAR GLOBAL G101 ..\QuestDiary\行会竞价\最高价记录.txt
SENDMSG 0 <S3>代表<S1>出价<$G101>,当前最高。
elsesay

SENDMSG 6 掌门元宝不足或出价不高于最高价加幅。

行会自动招人-0.txt:

[@main]
申请入会/join
状态/view

[@join]
if

HAVEGUILD
act

SENDMSG 6 已有行会。
elsesay

if

EQUAL G105 0
act

SENDMSG 6 无中标行会。
elsesay

if

CHECKLEVELEX < <$G103>
act

SENDMSG 6 等级不足。
elsesay

if

EQUAL G104 0
GOTO @doadd
elsesay

if

EQUAL G104 1
CHECKJOB 0
GOTO @doadd
elsesay

if

EQUAL G104 2
CHECKJOB 1
GOTO @doadd
elsesay

if

EQUAL G104 3
CHECKJOB 2
GOTO @doadd
elsesay

SENDMSG 6 职业不符合。

[@doadd]
if

EQUAL G105 1
act

AddGuildMember <$S1>
SENDMSG 0 <USERNAME>加入中标行会<S1>。
ADDNAMELIST ..\QuestDiary\行会竞价\招人名单.txt
elsesay

SENDMSG 6 入会失败。

机器人每天开标、晚上截标、每周清标三段的G变量和S变量与NPC保持一致,NPC文件用ANSI,QManage定时器索引不与其他活动重复,入会命令按3K子版本在AddGuildMember与ADDGUILDMEMBER间替换,竞价自动招人即可长期运行。