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); } }