Ejemplo n.º 1
0
        public static void HandleHousingVisit(WorldSession session, ClientHousingVisit housingVisit)
        {
            if (!(session.Player.Map is ResidenceMap))
            {
                throw new InvalidPacketValueException();
            }

            if (!session.Player.CanTeleport())
            {
                return;
            }

            Task <Residence> residenceTask;

            if (housingVisit.TargetResidenceName != "")
            {
                residenceTask = ResidenceManager.Instance.GetResidence(housingVisit.TargetResidenceName);
            }
            else if (housingVisit.TargetResidence.ResidenceId != 0ul)
            {
                residenceTask = ResidenceManager.Instance.GetResidence(housingVisit.TargetResidence.ResidenceId);
            }
            else
            {
                throw new NotImplementedException();
            }

            session.EnqueueEvent(new TaskGenericEvent <Residence>(residenceTask,
                                                                  residence =>
            {
                if (residence == null)
                {
                    // TODO: show error
                    return;
                }

                switch (residence.PrivacyLevel)
                {
                case ResidencePrivacyLevel.Private:
                    {
                        // TODO: show error
                        return;
                    }

                // TODO: check if player is either a neighbour or roommate
                case ResidencePrivacyLevel.NeighborsOnly:
                    break;

                case ResidencePrivacyLevel.RoommatesOnly:
                    break;
                }

                // teleport player to correct residence instance
                ResidenceEntrance entrance = ResidenceManager.Instance.GetResidenceEntrance(residence);
                session.Player.TeleportTo(entrance.Entry, entrance.Position, 0u, residence.Id);
            }));
        }
Ejemplo n.º 2
0
        public static void HandleHousingVisit(WorldSession session, ClientHousingVisit housingVisit)
        {
            if (!(session.Player.Map is ResidenceMapInstance))
            {
                throw new InvalidPacketValueException();
            }

            if (!session.Player.CanTeleport())
            {
                return;
            }

            Residence residence;

            if (!string.IsNullOrEmpty(housingVisit.TargetResidenceName))
            {
                residence = GlobalResidenceManager.Instance.GetResidenceByOwner(housingVisit.TargetResidenceName);
            }
            else if (!string.IsNullOrEmpty(housingVisit.TargetCommunityName))
            {
                residence = GlobalResidenceManager.Instance.GetCommunityByOwner(housingVisit.TargetCommunityName);
            }
            else if (housingVisit.TargetResidence.ResidenceId != 0ul)
            {
                residence = GlobalResidenceManager.Instance.GetResidence(housingVisit.TargetResidence.ResidenceId);
            }
            else if (housingVisit.TargetCommunity.NeighbourhoodId != 0ul)
            {
                ulong residenceId = GlobalGuildManager.Instance.GetGuild <Community>(housingVisit.TargetCommunity.NeighbourhoodId)?.Residence?.Id ?? 0ul;
                residence = GlobalResidenceManager.Instance.GetResidence(residenceId);
            }
            else
            {
                throw new NotImplementedException();
            }

            if (residence == null)
            {
                //session.Player.SendGenericError();
                // TODO: show error
                return;
            }

            switch (residence.PrivacyLevel)
            {
            case ResidencePrivacyLevel.Private:
            {
                // TODO: show error
                return;
            }

            // TODO: check if player is either a neighbour or roommate
            case ResidencePrivacyLevel.NeighborsOnly:
                break;

            case ResidencePrivacyLevel.RoommatesOnly:
                break;
            }

            // teleport player to correct residence instance
            ResidenceEntrance entrance = GlobalResidenceManager.Instance.GetResidenceEntrance(residence.PropertyInfoId);

            session.Player.Rotation = entrance.Rotation.ToEulerDegrees();
            session.Player.TeleportTo(new MapPosition
            {
                Info = new MapInfo
                {
                    Entry      = entrance.Entry,
                    InstanceId = residence.Parent?.Id ?? residence.Id
                },
                Position = entrance.Position
            });
        }