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

