protected virtual bool DoImpersonate(string rawParameters, params CommandParameter[] parameters) { if (parameters.Length == 0) { if (Impersonating != null) { Send("You stop impersonating {0}.", Impersonating.DisplayName); UpdateCharacterDataFromImpersonated(); StopImpersonating(); } else { Send("Impersonate whom?"); } return(true); } CharacterData characterData = _avatarList.FirstOrDefault(x => FindHelpers.StringStartsWith(x.Name, parameters[0].Value)); if (characterData == null) { Send("Avatar not found. Use listavatar to display your avatar list."); return(true); } IRoom location = DependencyContainer.Instance.GetInstance <IWorld>().Rooms.FirstOrDefault(x => x.Blueprint.Id == characterData.RoomId); if (location == null) { string msg = $"Invalid roomId {characterData.RoomId} for character {characterData.Name}!!"; location = DependencyContainer.Instance.GetInstance <IWorld>().Rooms.FirstOrDefault(x => x.Blueprint.Id == 3001); // TODO: default room in IWorld Log.Default.WriteLine(LogLevels.Error, msg); DependencyContainer.Instance.GetInstance <IServer>().Wiznet(msg, WiznetFlags.Bugs, AdminLevels.Implementor); } ICharacter avatar = DependencyContainer.Instance.GetInstance <IWorld>().AddCharacter(Guid.NewGuid(), characterData, location); Send("%M%You start impersonating %C%{0}%x%.", avatar.DisplayName); avatar.ChangeImpersonation(this); Impersonating = avatar; PlayerState = PlayerStates.Impersonating; avatar.AutoLook(); return(true); }