mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-29 17:43:01 +00:00
177 lines
4.5 KiB
C++
177 lines
4.5 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
// This is a skeleton file for use when creating a new
|
|
// NPC. Copy and rename this file for the new
|
|
// NPC and add the copy to the build.
|
|
//
|
|
// Leave this file in the build until we ship! Allowing
|
|
// this file to be rebuilt with the rest of the game ensures
|
|
// that it stays up to date with the rest of the NPC code.
|
|
//
|
|
// Replace occurances of CNewNPC with the new NPC's
|
|
// classname. Don't forget the lower-case occurance in
|
|
// LINK_ENTITY_TO_CLASS()
|
|
//
|
|
//
|
|
// ASSUMPTIONS MADE:
|
|
//
|
|
// You're making a character based on CAI_BaseNPC. If this
|
|
// is not true, make sure you replace all occurances
|
|
// of 'CAI_BaseNPC' in this file with the appropriate
|
|
// parent class.
|
|
//
|
|
// You're making a human-sized NPC that walks.
|
|
//
|
|
//=============================================================================//
|
|
#include "cbase.h"
|
|
#include "ai_default.h"
|
|
#include "ai_task.h"
|
|
#include "ai_schedule.h"
|
|
#include "ai_hull.h"
|
|
#include "soundent.h"
|
|
#include "game.h"
|
|
#include "npcevent.h"
|
|
#include "entitylist.h"
|
|
#include "activitylist.h"
|
|
#include "ai_basenpc.h"
|
|
#include "engine/IEngineSound.h"
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include "tier0/memdbgon.h"
|
|
|
|
//=========================================================
|
|
// Private activities
|
|
//=========================================================
|
|
int ACT_MYCUSTOMACTIVITY = -1;
|
|
|
|
//=========================================================
|
|
// Custom schedules
|
|
//=========================================================
|
|
enum
|
|
{
|
|
SCHED_MYCUSTOMSCHEDULE = LAST_SHARED_SCHEDULE,
|
|
};
|
|
|
|
//=========================================================
|
|
// Custom tasks
|
|
//=========================================================
|
|
enum
|
|
{
|
|
TASK_MYCUSTOMTASK = LAST_SHARED_TASK,
|
|
};
|
|
|
|
|
|
//=========================================================
|
|
// Custom Conditions
|
|
//=========================================================
|
|
enum
|
|
{
|
|
COND_MYCUSTOMCONDITION = LAST_SHARED_CONDITION,
|
|
};
|
|
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
class CNewNPC : public CAI_BaseNPC
|
|
{
|
|
DECLARE_CLASS( CNewNPC, CAI_BaseNPC );
|
|
|
|
public:
|
|
void Precache( void );
|
|
void Spawn( void );
|
|
Class_T Classify( void );
|
|
|
|
DECLARE_DATADESC();
|
|
|
|
// This is a dummy field. In order to provide save/restore
|
|
// code in this file, we must have at least one field
|
|
// for the code to operate on. Delete this field when
|
|
// you are ready to do your own save/restore for this
|
|
// character.
|
|
int m_iDeleteThisField;
|
|
|
|
DEFINE_CUSTOM_AI;
|
|
};
|
|
|
|
LINK_ENTITY_TO_CLASS( npc_newnpc, CNewNPC );
|
|
IMPLEMENT_CUSTOM_AI( npc_citizen,CNewNPC );
|
|
|
|
|
|
//---------------------------------------------------------
|
|
// Save/Restore
|
|
//---------------------------------------------------------
|
|
BEGIN_DATADESC( CNewNPC )
|
|
|
|
DEFINE_FIELD( m_iDeleteThisField, FIELD_INTEGER ),
|
|
|
|
END_DATADESC()
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Initialize the custom schedules
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
void CNewNPC::InitCustomSchedules(void)
|
|
{
|
|
INIT_CUSTOM_AI(CNewNPC);
|
|
|
|
ADD_CUSTOM_TASK(CNewNPC, TASK_MYCUSTOMTASK);
|
|
|
|
ADD_CUSTOM_SCHEDULE(CNewNPC, SCHED_MYCUSTOMSCHEDULE);
|
|
|
|
ADD_CUSTOM_ACTIVITY(CNewNPC, ACT_MYCUSTOMACTIVITY);
|
|
|
|
ADD_CUSTOM_CONDITION(CNewNPC, COND_MYCUSTOMCONDITION);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
void CNewNPC::Precache( void )
|
|
{
|
|
PrecacheModel( "models/mymodel.mdl" );
|
|
|
|
BaseClass::Precache();
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
void CNewNPC::Spawn( void )
|
|
{
|
|
Precache();
|
|
|
|
SetModel( "models/mymodel.mdl" );
|
|
SetHullType(HULL_HUMAN);
|
|
SetHullSizeNormal();
|
|
|
|
SetSolid( SOLID_BBOX );
|
|
AddSolidFlags( FSOLID_NOT_STANDABLE );
|
|
SetMoveType( MOVETYPE_STEP );
|
|
SetBloodColor( BLOOD_COLOR_RED );
|
|
m_iHealth = 20;
|
|
m_flFieldOfView = 0.5;
|
|
m_NPCState = NPC_STATE_NONE;
|
|
|
|
CapabilitiesClear();
|
|
//CapabilitiesAdd( bits_CAP_NONE );
|
|
|
|
NPCInit();
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//
|
|
//
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
Class_T CNewNPC::Classify( void )
|
|
{
|
|
return CLASS_NONE;
|
|
}
|