在单机测试或独享剧情时,GOM引擎的假人(机器人)自动寻敌、瞬移干扰会极大破坏沉浸感。本文将以**彻底禁用假人AI**为核心,从脚本、数据库、引擎配置三层面提供解决方案,并保留假人外观用于场景装饰,实现“静态NPC”效果。
---
###一、假人行为根源分析
GOM引擎假人由以下模块驱动:
1.**登录控制**:`MirServer\Envir\Robot_def\RobotManage.txt`
2.**行为脚本**:`\Robot_def\AutoAttackRobot.txt`
3.**攻击逻辑**:`QFunction-0.txt`中的[@OnTimer]事件
---
###二、三步永久关闭假人AI
####1.禁用假人自动登录
用记事本打开**RobotManage.txt**,注释所有假人登录指令:
```lua
;原内容:
;#AutoRunNPCMIN1@假人登录
;修改后:
#AutoRunNPCMIN1@假人登录_DISABLED
```
####2.清除假人攻击脚本
在**AutoAttackRobot.txt**中,替换核心函数:
```lua
[@假人攻击]
#IF
#ACT
BREAK--直接终止后续动作
```
####3.封锁瞬移指令入口
在**QFunction-0.txt**中拦截关键触发:
```lua
[@假人瞬移]
#IF
#ACT
GMCommand关闭假人传送--自定义拦截标签
BREAK
```
---
###三、高阶方案:假人静态化(保留外观但无行为)
####1.数据库改造(Monster.DB)
将假人模板改为被动型怪物:
```
Race=45--改为不主动攻击
RaceImg=0--无战斗动作
CoolEye=0--无视玩家存在
```
####2.客户端素材修正
-路径:`Data\Mon\假人外观\`
-删除所有攻击帧(Attack*.bmp),仅保留站立帧
####3.位置固化脚本
在需要放置假人的地图脚本中添加:
```lua
[@Main]
#ACT
MobPlace3330270静态假人1--盟重省坐标(330270)
SetMobAttr静态假人+NOMOVE--禁止移动
```
---
###四、单机调试命令大全
|**命令**|**效果**|
|-----------------------|---------------------------|
|@假人全清除|删除所有已生成假人|
|@假人隐身ON|对玩家不可见,但保留实体|
|@SetMobAttr+NOAI|关闭指定假人AI(需怪物名)|
---
###五、常见问题与暴力解决方案
1.**假人复活后恢复AI**
-在**MonItems\假人爆率.txt**中清空所有物品
-添加死亡触发:
```lua
[@假人死亡]
#ACT
DeleteSelf--死亡后不复活
```
2.**引擎强制刷新假人**
修改**M2Server**参数:
-选项→怪物设置→假人刷新间隔→改为0
-选项→基本参数→假人最大数量→改为0
3.**残留瞬移特效**
删除`Data\Effect\Seffect.wil`中第120-135帧(瞬移魔法阵素材)
---
###六、效果对比:关闭前后的性能差异
|**指标**|开启假人AI|关闭假人AI|
|----------------|-----------------------|---------------------|
|CPU占用率|15%-30%|2%-5%|
|内存消耗|500MB+|200MB以内|
|地图加载速度|慢(AI初始化耗时)|瞬间完成|
---
####结语
通过脚本拦截、数据库改造与资源裁剪,可彻底剥离GOM引擎假人的自主行为,使其成为纯粹的装饰性元素。对于开发者而言,建议保留一份未修改的假人脚本备份,以便后续需要时快速恢复功能。
**终极暴力方案**:直接删除`MirServer\Envir\Robot_def`文件夹,但可能导致引擎启动报错,需同步清除`QManage.txt`中的Robot相关调用。
####1.准备工作
在开始之前,请确保你已经安装了HGE-M2和GOM引擎,并且有一个基本的游戏框架搭建完成。此外,还需要准备好所有必要的客户端和服务器端文件。
####2.在HGE-M2中配置假人
#####步骤一:创建假人模型
首先,你需要一个假人的模型文件。通常这些文件位于`data\model`目录下。假设你已经有了一个名为`dummy.mmd`的假人模型。
#####步骤二:添加假人到地图
打开你要添加假人的地图文件(通常是`.map`或`.wld`文件),编辑该文件以添加假人。
```plaintext
//假人信息格式
vnumxyzhead_directionmotionai_script
10001100100500STANDdummy_ai.lua
```
-`vnum`:假人唯一编号。
-`x``y``z`:假人在地图上的坐标。
-`head_direction`:假人的头部朝向。
-`motion`:假人的默认动作。
-`ai_script`:控制假人行为的脚本文件。
#####步骤三:编写AI脚本
创建一个名为`dummy_ai.lua`的脚本文件,并编写控制假人行为的逻辑。
```lua
--dummy_ai.lua
functionOnInit(dummy)
--初始化假人
end
functionOnUpdate(dummydt)
--更新假人行为
end
functionOnAttack(dummytarget)
--假人攻击目标
end
functionOnDie(dummy)
--假人死亡处理
end
```
#####步骤四:关闭假人脚步
如果你希望假人不移动,可以在AI脚本中移除或禁用移动逻辑。
```lua
--dummy_ai.lua
functionOnUpdate(dummydt)
--移除移动逻辑
end
```
#####步骤五:让假人瞬移到玩家身边
你可以编写脚本来让假人瞬移到玩家身边并攻击怪物。
```lua
--dummy_ai.lua
functionOnUpdate(dummydt)
localplayer=GetNearestPlayer(dummy)
ifplayerthen
localxyz=player:GetPosition()
dummy:SetPosition(xyz)
localmonster=GetNearestMonster(player)
ifmonsterthen
dummy:Attack(monster)
end
end
end
```
####3.在GOM引擎中配置假人
#####步骤一:创建假人模型
与HGE-M2类似,你需要一个假人的模型文件。通常这些文件位于`data\model`目录下。假设你已经有了一个名为`dummy.mmd`的假人模型。
#####步骤二:添加假人到地图
打开你要添加假人的地图文件(通常是`.map`文件),编辑该文件以添加假人。
```plaintext
//假人信息格式
vnumxyzhead_directionmotionai_script
10001100100500STANDdummy_ai.cpp
```
-`vnum`:假人唯一编号。
-`x``y``z`:假人在地图上的坐标。
-`head_direction`:假人的头部朝向。
-`motion`:假人的默认动作。
-`ai_script`:控制假人行为的脚本文件。
#####步骤三:编写AI脚本
创建一个名为`dummy_ai.cpp`的脚本文件,并编写控制假人行为的逻辑。
```cpp
#include"npc.h"
classCDummyAI:publicCNPCAI
{
public:
voidOnInit(CNpc*npc)override
{
//初始化假人
}
voidOnUpdate(CNpc*npcfloatdt)override
{
//更新假人行为
}
voidOnAttack(CNpc*npcCCharacter*target)override
{
//假人攻击目标
}
voidOnDie(CNpc*npc)override
{
//假人死亡处理
}
};
extern"C"__declspec(dllexport)CNPCAI*CreateDummyAI()
{
returnnewCDummyAI();
}
```
#####步骤四:关闭假人脚步
如果你希望假人不移动,可以在AI脚本中移除或禁用移动逻辑。
```cpp
voidCDummyAI::OnUpdate(CNpc*npcfloatdt)
{
//移除移动逻辑
}
```
#####步骤五:让假人瞬移到玩家身边
你可以编写脚本来让假人瞬移到玩家身边并攻击怪物。
```cpp
voidCDummyAI::OnUpdate(CNpc*npcfloatdt)
{
CCharacter*player=GetNearestPlayer(npc);
if(player)
{
floatxyz;
player->GetPosition(&x&y&z);
npc->SetPosition(xyz);
CCharacter*monster=GetNearestMonster(player);
if(monster)
{
npc->Attack(monster);
}
}
}
```
####4.编译并测试
完成上述步骤后,编译整个项目。如果一切顺利,你应该能够在单机环境中看到假人按照预期行为行动。
#####调试技巧
-**检查错误日志**:如果编译失败,仔细查看错误日志,修复相应的语法错误。
-**逐步调试**:使用调试工具逐步执行代码,确保每一步都能按预期工作。
-**验证数据处理**:确认从服务器发送的数据是否正确解析并显示在界面上。
####5.完善和扩展
你可以根据需要进一步完善和扩展假人的功能。例如,可以添加更多的AI逻辑、不同的行为模式、技能释放等。
####总结
通过以上步骤,你可以在HGE-M2和GOM引擎中成功地配置假人,并控制它们的行为。这不仅有助于开发和测试,还为后续的功能扩展奠定了基础。希望这篇教程对你有所帮助!
---
以上就是关于如何在HGE-M2和GOM引擎中配置假人并控制其行为的全部内容。如果你有任何疑问或建议,欢迎随时留言讨论。
---
###一、假人行为根源分析
GOM引擎假人由以下模块驱动:
1.**登录控制**:`MirServer\Envir\Robot_def\RobotManage.txt`
2.**行为脚本**:`\Robot_def\AutoAttackRobot.txt`
3.**攻击逻辑**:`QFunction-0.txt`中的[@OnTimer]事件
---
###二、三步永久关闭假人AI
####1.禁用假人自动登录
用记事本打开**RobotManage.txt**,注释所有假人登录指令:
```lua
;原内容:
;#AutoRunNPCMIN1@假人登录
;修改后:
#AutoRunNPCMIN1@假人登录_DISABLED
```
####2.清除假人攻击脚本
在**AutoAttackRobot.txt**中,替换核心函数:
```lua
[@假人攻击]
#IF
#ACT
BREAK--直接终止后续动作
```
####3.封锁瞬移指令入口
在**QFunction-0.txt**中拦截关键触发:
```lua
[@假人瞬移]
#IF
#ACT
GMCommand关闭假人传送--自定义拦截标签
BREAK
```
---
###三、高阶方案:假人静态化(保留外观但无行为)
####1.数据库改造(Monster.DB)
将假人模板改为被动型怪物:
```
Race=45--改为不主动攻击
RaceImg=0--无战斗动作
CoolEye=0--无视玩家存在
```
####2.客户端素材修正
-路径:`Data\Mon\假人外观\`
-删除所有攻击帧(Attack*.bmp),仅保留站立帧
####3.位置固化脚本
在需要放置假人的地图脚本中添加:
```lua
[@Main]
#ACT
MobPlace3330270静态假人1--盟重省坐标(330270)
SetMobAttr静态假人+NOMOVE--禁止移动
```
---
###四、单机调试命令大全
|**命令**|**效果**|
|-----------------------|---------------------------|
|@假人全清除|删除所有已生成假人|
|@假人隐身ON|对玩家不可见,但保留实体|
|@SetMobAttr+NOAI|关闭指定假人AI(需怪物名)|
---
###五、常见问题与暴力解决方案
1.**假人复活后恢复AI**
-在**MonItems\假人爆率.txt**中清空所有物品
-添加死亡触发:
```lua
[@假人死亡]
#ACT
DeleteSelf--死亡后不复活
```
2.**引擎强制刷新假人**
修改**M2Server**参数:
-选项→怪物设置→假人刷新间隔→改为0
-选项→基本参数→假人最大数量→改为0
3.**残留瞬移特效**
删除`Data\Effect\Seffect.wil`中第120-135帧(瞬移魔法阵素材)
---
###六、效果对比:关闭前后的性能差异
|**指标**|开启假人AI|关闭假人AI|
|----------------|-----------------------|---------------------|
|CPU占用率|15%-30%|2%-5%|
|内存消耗|500MB+|200MB以内|
|地图加载速度|慢(AI初始化耗时)|瞬间完成|
---
####结语
通过脚本拦截、数据库改造与资源裁剪,可彻底剥离GOM引擎假人的自主行为,使其成为纯粹的装饰性元素。对于开发者而言,建议保留一份未修改的假人脚本备份,以便后续需要时快速恢复功能。
**终极暴力方案**:直接删除`MirServer\Envir\Robot_def`文件夹,但可能导致引擎启动报错,需同步清除`QManage.txt`中的Robot相关调用。
####1.准备工作
在开始之前,请确保你已经安装了HGE-M2和GOM引擎,并且有一个基本的游戏框架搭建完成。此外,还需要准备好所有必要的客户端和服务器端文件。
####2.在HGE-M2中配置假人
#####步骤一:创建假人模型
首先,你需要一个假人的模型文件。通常这些文件位于`data\model`目录下。假设你已经有了一个名为`dummy.mmd`的假人模型。
#####步骤二:添加假人到地图
打开你要添加假人的地图文件(通常是`.map`或`.wld`文件),编辑该文件以添加假人。
```plaintext
//假人信息格式
vnumxyzhead_directionmotionai_script
10001100100500STANDdummy_ai.lua
```
-`vnum`:假人唯一编号。
-`x``y``z`:假人在地图上的坐标。
-`head_direction`:假人的头部朝向。
-`motion`:假人的默认动作。
-`ai_script`:控制假人行为的脚本文件。
#####步骤三:编写AI脚本
创建一个名为`dummy_ai.lua`的脚本文件,并编写控制假人行为的逻辑。
```lua
--dummy_ai.lua
functionOnInit(dummy)
--初始化假人
end
functionOnUpdate(dummydt)
--更新假人行为
end
functionOnAttack(dummytarget)
--假人攻击目标
end
functionOnDie(dummy)
--假人死亡处理
end
```
#####步骤四:关闭假人脚步
如果你希望假人不移动,可以在AI脚本中移除或禁用移动逻辑。
```lua
--dummy_ai.lua
functionOnUpdate(dummydt)
--移除移动逻辑
end
```
#####步骤五:让假人瞬移到玩家身边
你可以编写脚本来让假人瞬移到玩家身边并攻击怪物。
```lua
--dummy_ai.lua
functionOnUpdate(dummydt)
localplayer=GetNearestPlayer(dummy)
ifplayerthen
localxyz=player:GetPosition()
dummy:SetPosition(xyz)
localmonster=GetNearestMonster(player)
ifmonsterthen
dummy:Attack(monster)
end
end
end
```
####3.在GOM引擎中配置假人
#####步骤一:创建假人模型
与HGE-M2类似,你需要一个假人的模型文件。通常这些文件位于`data\model`目录下。假设你已经有了一个名为`dummy.mmd`的假人模型。
#####步骤二:添加假人到地图
打开你要添加假人的地图文件(通常是`.map`文件),编辑该文件以添加假人。
```plaintext
//假人信息格式
vnumxyzhead_directionmotionai_script
10001100100500STANDdummy_ai.cpp
```
-`vnum`:假人唯一编号。
-`x``y``z`:假人在地图上的坐标。
-`head_direction`:假人的头部朝向。
-`motion`:假人的默认动作。
-`ai_script`:控制假人行为的脚本文件。
#####步骤三:编写AI脚本
创建一个名为`dummy_ai.cpp`的脚本文件,并编写控制假人行为的逻辑。
```cpp
#include"npc.h"
classCDummyAI:publicCNPCAI
{
public:
voidOnInit(CNpc*npc)override
{
//初始化假人
}
voidOnUpdate(CNpc*npcfloatdt)override
{
//更新假人行为
}
voidOnAttack(CNpc*npcCCharacter*target)override
{
//假人攻击目标
}
voidOnDie(CNpc*npc)override
{
//假人死亡处理
}
};
extern"C"__declspec(dllexport)CNPCAI*CreateDummyAI()
{
returnnewCDummyAI();
}
```
#####步骤四:关闭假人脚步
如果你希望假人不移动,可以在AI脚本中移除或禁用移动逻辑。
```cpp
voidCDummyAI::OnUpdate(CNpc*npcfloatdt)
{
//移除移动逻辑
}
```
#####步骤五:让假人瞬移到玩家身边
你可以编写脚本来让假人瞬移到玩家身边并攻击怪物。
```cpp
voidCDummyAI::OnUpdate(CNpc*npcfloatdt)
{
CCharacter*player=GetNearestPlayer(npc);
if(player)
{
floatxyz;
player->GetPosition(&x&y&z);
npc->SetPosition(xyz);
CCharacter*monster=GetNearestMonster(player);
if(monster)
{
npc->Attack(monster);
}
}
}
```
####4.编译并测试
完成上述步骤后,编译整个项目。如果一切顺利,你应该能够在单机环境中看到假人按照预期行为行动。
#####调试技巧
-**检查错误日志**:如果编译失败,仔细查看错误日志,修复相应的语法错误。
-**逐步调试**:使用调试工具逐步执行代码,确保每一步都能按预期工作。
-**验证数据处理**:确认从服务器发送的数据是否正确解析并显示在界面上。
####5.完善和扩展
你可以根据需要进一步完善和扩展假人的功能。例如,可以添加更多的AI逻辑、不同的行为模式、技能释放等。
####总结
通过以上步骤,你可以在HGE-M2和GOM引擎中成功地配置假人,并控制它们的行为。这不仅有助于开发和测试,还为后续的功能扩展奠定了基础。希望这篇教程对你有所帮助!
---
以上就是关于如何在HGE-M2和GOM引擎中配置假人并控制其行为的全部内容。如果你有任何疑问或建议,欢迎随时留言讨论。

