Бесконечное возрождение NPC
Класс динамический ему можно назначить время жизни и жизни то есть он может быть уничтожен.
Можно добавить для возраждения любой Character класс и назначить время через которое появляются новые боты.

MapObjectResNPC.cs
Код:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using Engine;
using Engine.EntitySystem;
using Engine.MapSystem;
using Engine.MathEx;
using Engine.Renderer;
using Engine.PhysicsSystem;
using Engine.Utils;
using ProjectCommon;
using Engine.SoundSystem;

namespace ProjectEntities
{
	/// <summary>
	/// Defines the <see cref="InfluenceRegion"/> entity type.
	/// </summary>
	public class MapObjectResNPCType : DynamicType
	{
	[FieldSerialize]
    CharacterType characterType;
    
    [FieldSerialize]
    float respTimeType;
    
    [Description( "Character который будет возрождаться" )]
    public CharacterType CharacterType
    {
    	get { return characterType; }
    	set { characterType = value; }
    }
    
	[Description( "Время между пораждениями" )]
    public float RespTimeType
    {
    	get { return respTimeType; }
    	set { respTimeType = value; }
    }
    
	}

	public class MapObjectResNPC : Dynamic
	{
    
    
    float spawntime;

    MapObjectResNPCType _type = null; public new MapObjectResNPCType Type { get { return _type; } }
    
    
        
        
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);//при старте грузит
            spawntime = 0.0f;//переменная куда насчитвываються тики
            SubscribeToTickEvent();//подпись на событие таймера.
        }
        
        
        protected override void OnTick()
        {
            base.OnTick();
            
        
            if (Type.Name != "Box") {
 
                spawntime += TickDelta;//на переменную насчитываються тики
 
                if(spawntime >= Type.RespTimeType) {
                    CreateNPC();//создается объект
                        spawntime = 0.0f;//обнуляется переменная для тиков 
                }   
            }
            return;
        }
            

    
    void CreateNPC()
    {
    	//Создаем новый игровой объект
        MapObject RES = (MapObject)Entities.Instance.Create(Type.CharacterType, Map.Instance);
 
        //Задаем позицию
        RES.Position = GetInterpolatedPosition() + new Vec3( 0, 0, .1f );
 
        //Завершаем инициализацию
        RES.PostCreate();
    }
    
	}
}