Defining the NPC
< Zh
本文介绍利用SDK的模板创建一个简单的NPC。
准备工作
任何版本的sdk包括Alien Swarm都在这个目录下server/hl2/monster_dummy.cpp
提供了NPC代码模板。你可以将其复制到其他地方并开始着手工作。
在Precache()
和Spawn()
函数里面修改模型路径来选择一个有效的模型 (比如现有的人类模型)然后你就可以获得一个靠近他,他便会转过身来的简单NPC。
关系
NPC关系决定了他与其他NPC或者玩家的互动效果。 使用FindEntityRelationship(CBaseEntity *pTarget)
函数来测试NPC的状态。
情绪
现存的四种 "情绪":
D_HATE//憎恨
D_FEAR//害怕
D_LIKE//友好
D_NEUTRAL//中立
每个关系情绪都有一个优先级。若冲突,优先级最高的为准。
目标
可以有以下三种目标:
阵营
一个NPC可以属于一个阵营,并且该阵营可以对其他的阵营进行关系互动。阵营代码定义在game/shared/shareddefs.h
(默认下没有).
AddFactionRelationship()
- 仅向此NPC增加一个阵营关系。
CBaseCombatCharacter::SetDefaultFactionRelationship()
- 添加一个默认的阵营关系,由所有NPC共享。
ChangeFaction()
- 改变该NPC的阵营。
类
NPC能够自我分类。这个特定类是Classify()
函数的返回值, 并且与C++类或者hammer类不相干。
AddClassRelationship()
- 仅向此NPC增加一个类关系。
CBaseCombatCharacter::SetDefaultRelationship()
- 添加一个默认的类关系,由所有NPC共享。
Class_T Classify()
- 返回该NPC的类。
如果打算增加一个新的NPC类,打开baseentity.h的95行,自行增改。
实体
最后, 两个不同的NPC中可以进行一次一次性的特殊关系设置。
AddEntityRelationship()
- 为2个NPC增加实体关系。