/// <summary> /// Crate all placed <see cref="Decor"/>, this is called directly from a packet hander. /// </summary> public void CrateAllDecor(Player player) { if (!residence.CanModifyResidence(player.CharacterId)) { throw new InvalidPacketValueException(); } var housingResidenceDecor = new ServerHousingResidenceDecor(); foreach (Decor decor in residence.GetPlacedDecor()) { decor.Crate(); housingResidenceDecor.DecorData.Add(new ServerHousingResidenceDecor.Decor { RealmId = WorldServer.RealmId, DecorId = decor.DecorId, ResidenceId = residence.Id, DecorType = decor.Type, Scale = decor.Scale, Position = decor.Position, Rotation = decor.Rotation, DecorInfoId = decor.Entry.Id }); } EnqueueToAll(housingResidenceDecor); }
/// <summary> /// Create and add <see cref="Decor"/> from supplied <see cref="HousingDecorInfoEntry"/> to your crate. /// </summary> public void DecorCreate(HousingDecorInfoEntry entry, uint quantity) { var residenceDecor = new ServerHousingResidenceDecor(); for (uint i = 0u; i < quantity; i++) { Decor decor = residence.DecorCreate(entry); decor.Type = DecorType.Crate; residenceDecor.DecorData.Add(new ServerHousingResidenceDecor.Decor { RealmId = WorldServer.RealmId, DecorId = decor.DecorId, ResidenceId = residence.Id, DecorType = decor.Type, PlotIndex = decor.PlotIndex, Scale = decor.Scale, Position = decor.Position, Rotation = decor.Rotation, DecorInfoId = decor.Entry.Id }); } EnqueueToAll(residenceDecor); }
private void SendResidenceDecor(Player player) { var residenceDecor = new ServerHousingResidenceDecor(); Decor[] decors = residence.GetDecor().ToArray(); for (uint i = 0u; i < decors.Length; i++) { // client freaks out if too much decor is sent in a single message, limit to 100 if (i != 0u && i % 100u == 0u) { player.Session.EnqueueMessageEncrypted(residenceDecor); residenceDecor = new ServerHousingResidenceDecor(); } Decor decor = decors[i]; residenceDecor.DecorData.Add(new ServerHousingResidenceDecor.Decor { RealmId = WorldServer.RealmId, DecorId = decor.DecorId, ResidenceId = residence.Id, DecorType = decor.Type, Scale = decor.Scale, Position = decor.Position, Rotation = decor.Rotation, DecorInfoId = decor.Entry.Id, ColourShift = decor.ColourShiftId }); if (i == decors.Length - 1) { player.Session.EnqueueMessageEncrypted(residenceDecor); } } }
private void DecorDelete(ClientHousingDecorUpdate.DecorUpdate update) { Decor decor = residence.GetDecor(update.DecorId); if (decor == null) { throw new InvalidPacketValueException(); } if (decor.Position != Vector3.Zero) { throw new InvalidOperationException(); } residence.DecorDelete(decor); // TODO: send packet to remove from decor list var residenceDecor = new ServerHousingResidenceDecor(); residenceDecor.DecorData.Add(new ServerHousingResidenceDecor.Decor { RealmId = WorldServer.RealmId, ResidenceId = residence.Id, DecorId = decor.DecorId, DecorInfoId = 0 }); EnqueueToAll(residenceDecor); }