行会竞价自动招人分四层。第一层掌门在竞价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间替换,竞价自动招人即可长期运行。
传奇3K引擎行会竞价自动招人全脚本:掌门出价截标最高价入会等级职业防刷与机器人清标
来源:
作者:
点击:

