Beispiel #1
0
        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);
        }