很多玩家在搭建好单机版传奇后,会感觉地图空空荡荡,缺少人气。想让服务器里热闹起来,加入能自主行动、甚至互相打架的假人系统是关键一步。下面从脚本编写到逻辑调试,一步步教你实现这个功能。
第一步:准备假人生成脚本
打开服务端目录下的 Mir200\Envir\Robot.txt 文件。这个文件负责控制机器人(也就是假人)的定时触发行为。在末尾添加一行:
;假人自动上线
#AutoRun NPC SEC 60 @MakeFakeHuman
这行代码的意思是每60秒执行一次 @MakeFakeHuman 标签下的指令。你可以根据自己需要调整时间间隔,比如改成30秒让假人刷新更频繁。
第二步:编写假人创建与登录逻辑
找到 Mir200\Envir\Market_Def\QFunction-0.txt 或者你自定义的NPC脚本文件,写入以下内容:
[@MakeFakeHuman]
#IF
CheckLevelEx > 0
#ACT
DelayGoto 1 ~CreateFakeMan
Break
[@~CreateFakeMan]
#IF
Random 5
#ACT
MOV D0 0
While D0 < 10
MOV S0 假人名字前缀
INC S0 <$STR(D0)>
DELAYGOTO 1000 @LoginFakeMan <$STR(S0)>
INC D0 1
EndWhile
这段脚本会随机生成10个带有不同编号的假人账号。注意把“假人名字前缀”换成你自己喜欢的名称,比如“流浪战士”“无名刀客”之类的,避免和真实玩家重名。
第三步:配置假人装备与初始状态
为了让假人看起来像真实玩家,需要给它们分配基础装备。在同一个脚本文件中继续添加:
[@LoginFakeMan]
#IF
CheckOnline <$SCRIPTPARAM1> = 0
#ACT
GMEXECUTE 召唤 <$SCRIPTPARAM1>
DELAYGOTO 500 @EquipFakeMan <$SCRIPTPARAM1>
Break
[@EquipFakeMan]
#IF
CheckOnline <$SCRIPTPARAM1> = 1
#ACT
GiveStateItem 布衣(男) 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
GiveStateItem 木剑 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
GiveStateItem 蜡烛 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DELAYGOTO 300 @SetFakeManAI <$SCRIPTPARAM1>
Break
这里用GM命令将假人传送到当前地图,然后给予基础装备。装备ID和属性值可以根据你的版本自行修改。
第四步:核心部分——假人移动与PK逻辑
这是实现假人互动的关键。创建一个新的脚本段来控制假人的行为:
[@SetFakeManAI]
#IF
CheckOnline <$SCRIPTPARAM1> = 1
#ACT
MOV D1 0
While D1 < 50
RandomMove 3
DELAYGOTO 2000 @CheckFakeManTarget <$SCRIPTPARAM1>
INC D1 1
EndWhile
Break
[@CheckFakeManTarget]
#IF
CheckOnline <$SCRIPTPARAM1> = 1
CheckRangeMonCount <$MAP> <$X> <$Y> 8 0 > 0
#ACT
GetRandomMonName S1
AttackMon <$STR(S1)>
Break
#ELSEACT
RandomMove 2
Break
上面的代码让假人每隔2秒随机移动一次,并在周围8格范围内检测是否有怪物或其他假人。如果发现目标,就会发动攻击。
但要让假人之间互相PK,需要把其他假人也视为攻击对象。修改检测逻辑:
[@CheckFakeManTarget]
#IF
CheckOnline <$SCRIPTPARAM1> = 1
CheckRangeHumanCount <$MAP> <$X> <$Y> 8 0 > 1
#ACT
GetRandomHumanName S1
#IF
Equal <$STR(S1)> <$SCRIPTPARAM1>
#ACT
Break
#ELSESAY
<$STR(S1)>
DELAYGOTO 500 @AttackTarget <$SCRIPTPARAM1> <$STR(S1)>
Break
#ELSEACT
RandomMove 2
Break
[@AttackTarget]
#IF
CheckOnline <$SCRIPTPARAM1> = 1
CheckOnline <$SCRIPTPARAM2> = 1
#ACT
GMEXECUTE 攻击 <$SCRIPTPARAM1> <$SCRIPTPARAM2>
DELAYGOTO 8000 @SetFakeManAI <$SCRIPTPARAM1>
Break
这段代码会让假人在周围检测到其他玩家(包括假人)时,随机选择一个作为目标进行攻击。攻击冷却设为8秒,防止过于频繁。
第五步:处理假人死亡与复活
假人被杀死后需要重新生成,否则地图上的人会越来越少。在 QFunction-0.txt 中添加死亡触发:
[@OnDie_FakeMan]
#IF
CheckOnline <$KILLERNAME> = 1
#ACT
DELAYGOTO 60000 @MakeFakeHuman
Break
这样假人死亡后等待60秒会自动重新上线。你也可以缩短时间,比如改为30秒让战斗更激烈。
第六步:优化假人智能程度
为了让假人表现得更真实,可以加入以下细节:
;假人喊话功能
[@FakeManChat]
#IF
CheckOnline <$SCRIPTPARAM1> = 1
Random 10
#ACT
Say 兄弟们冲啊!
Break
;假人组队功能
[@FakeManGroup]
#IF
CheckOnline <$SCRIPTPARAM1> = 1
Random 20
#ACT
GroupCreate <$SCRIPTPARAM1>
GroupAddMember <$SCRIPTPARAM1> 假人名字后缀
Break
把这些功能通过定时器循环调用,假人就会时不时喊话、组队,看起来更像活人。
第七步:测试与调试
保存所有脚本文件后重启服务端。进入游戏观察假人是否正常出现:
• 假人应该会在各个地图随机走动
• 两个假人靠近时应该会互相攻击
• 被击杀的假人一段时间后会重新出现
• 假人不会攻击同队伍的成员(如果你启用了组队功能)
如果假人不移动,检查 Robot.txt 中的路径是否正确。如果假人不攻击,检查 CheckRangeHumanCount 的范围参数是否合适,以及 GMEXECUTE 攻击 命令在你的引擎中是否有效。某些引擎可能需要换成 Attack 或 Pk 命令。
最后提醒一下,假人数量不宜过多,建议控制在20-30个以内,否则会占用大量服务器资源导致卡顿。通过调整 @MakeFakeHuman 中的循环次数和生成间隔,可以找到最适合你机器配置的平衡点。

