private void PlayerInventoryChange(object sender, WindowChangeEventArgs windowChangeEventArgs) { var window = (Window)sender; var source = server.Clients.FirstOrDefault(c => c.Entity.Inventory == window); if (source == null) return; // This should never happen, but somehow does. var clients = GetKnownClients(source.Entity); if (windowChangeEventArgs.SlotIndex >= InventoryWindow.ArmorIndex && windowChangeEventArgs.SlotIndex < InventoryWindow.ArmorIndex + 4) { // TODO: Prevent non-armor items from being used here foreach (var client in clients) { int index = windowChangeEventArgs.SlotIndex - InventoryWindow.ArmorIndex; client.SendPacket(new EntityEquipmentPacket(source.Entity.Id, (EntityEquipmentPacket.EntityEquipmentSlot)(4 - index), windowChangeEventArgs.Value)); } } source.SendPacket(new SetSlotPacket(0, (short)windowChangeEventArgs.SlotIndex, windowChangeEventArgs.Value)); if (source.Entity.SelectedSlot == windowChangeEventArgs.SlotIndex) { foreach (var client in clients) { client.SendPacket(new EntityEquipmentPacket(source.Entity.Id, EntityEquipmentPacket.EntityEquipmentSlot.HeldItem, client.Entity.SelectedItem)); } } }
public virtual ItemStack this[int index] { get { foreach (var area in WindowAreas) { if (index >= area.StartIndex && index < area.StartIndex + area.Length) return area[index - area.StartIndex]; } throw new IndexOutOfRangeException(); } set { foreach (var area in WindowAreas) { if (index >= area.StartIndex && index < area.StartIndex + area.Length) { var eventArgs = new WindowChangeEventArgs(index, value); OnWindowChange(eventArgs); if (!eventArgs.Handled) area[index - area.StartIndex] = value; return; } } throw new IndexOutOfRangeException(); } }
protected internal virtual void OnWindowChange(WindowChangeEventArgs e) { if (WindowChange != null) WindowChange(this, e); }
private void PlayerInventoryChange(object sender, WindowChangeEventArgs windowChangeEventArgs) { var window = (Window)sender; var source = server.Clients.First(c => c.Entity.Inventory == window); if (windowChangeEventArgs.SlotIndex >= InventoryWindow.ArmorIndex && windowChangeEventArgs.SlotIndex < InventoryWindow.ArmorIndex + 4) { // TODO: Prevent non-armor items from being used here var clients = GetKnownClients(source.Entity); foreach (var client in clients) { int index = windowChangeEventArgs.SlotIndex - InventoryWindow.ArmorIndex; EntityEquipmentSlot slot; switch (index) { case 0: slot = EntityEquipmentSlot.Footwear; break; case 1: slot = EntityEquipmentSlot.Pants; break; case 2: slot = EntityEquipmentSlot.Chestplate; break; default: slot = EntityEquipmentSlot.Headgear; break; } client.SendPacket(new EntityEquipmentPacket(source.Entity.Id, slot, windowChangeEventArgs.Value)); } } source.SendPacket(new SetSlotPacket(0, (short)windowChangeEventArgs.SlotIndex, windowChangeEventArgs.Value)); }