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