Defining the NPC

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)

本文介绍利用SDK的模板创建一个简单的NPC

准备工作

任何版本的sdk包括Alien Swarm都在这个目录下server/hl2/monster_dummy.cpp提供了NPC代码模板。你可以将其复制到其他地方并开始着手工作。

Precache()Spawn()函数里面修改模型路径来选择一个有效的模型 (比如现有的人类模型)然后你就可以获得一个靠近他,他便会转过身来的简单NPC。

关系

异形丛生 本节是基于Alien Swarm代码进行教程。

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增加实体关系。