public Field Get(int templateId)
        {
            lock (this)
            {
                if (_fields.ContainsKey(templateId))
                {
                    return(_fields[templateId]);
                }
                var field = new Field(templateId, _fieldLazyTemplateManager.Get(templateId));
                _fields[templateId] = field;

                field.Template.Life.ForEach(l =>
                {
                    switch (l.Type)
                    {
                    case FieldLifeType.NPC:
                        var npcTemplate = _npcLazyTemplateManager.Get(l.TemplateID);

                        field.Enter(new FieldNPC(npcTemplate)
                        {
                            X          = (short)l.X,
                            Y          = (short)l.Y,
                            MoveAction = l.F,
                            Foothold   = (short)l.FH,
                            RX0        = l.RX0,
                            RX1        = l.RX1
                        });
                        break;

                    case FieldLifeType.Monster:
                        var mobTemplate = _mobLazyTemplateManager.Get(l.TemplateID);

                        field.Enter(new FieldMob(mobTemplate)
                        {
                            X          = (short)l.X,
                            Y          = (short)l.Y,
                            MoveAction = 0x4,
                            Foothold   = (short)l.FH
                        });
                        break;
                    }
                });
                return(field);
            }
        }