Defining the NPC
< Zh
Jump to navigation
Jump to search
本文介绍利用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增加实体关系。