当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

自己做的单机版传奇,如何添加智能假人并实现互相PK

热度:
很多玩家在搭建好单机版传奇后,会感觉地图空空荡荡,缺少人气。想让服务器里热闹起来,加入能自主行动、甚至互相打架的假人系统是关键一步。下面从脚本编写到逻辑调试,一步步教你实现这个功能。

第一步:准备假人生成脚本

打开服务端目录下的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中的循环次数和生成间隔,可以找到最适合你机器配置的平衡点。
[顶部]