コード例 #1
0
ファイル: EntityManager.cs プロジェクト: seaboy1234/Craft.Net
 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));
         }
     }
 }
コード例 #2
0
ファイル: Window.cs プロジェクト: cpancake/Craft.Net
 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();
     }
 }
コード例 #3
0
ファイル: WindowArea.cs プロジェクト: cpancake/Craft.Net
 protected internal virtual void OnWindowChange(WindowChangeEventArgs e)
 {
     if (WindowChange != null)
         WindowChange(this, e);
 }
コード例 #4
0
 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));
 }