Esempio n. 1
0
 //public event EventHandler<ItemUsedEventArgs> ItemUsed;
 private void Use(IItem item) //, bool isWorldItem)
 {
     //if (this.ItemUsed != null)
     //{
     //    this.ItemUsed(this, new ItemUsedEventArgs(item, isWorldItem));
     //}
     //if (isWorldItem)
     //{
     //    if (world.PlayerCharacter.PickupItem(item))
     //    {
     //        NetworkEngine.Instance.PickUpItem(world.PlayerCharacter.Inventory.Data.ItemDataID, item);
     //        this.BaseContainer = (BagClientItem)world.PlayerCharacter.Inventory; //new ClientBagItem((BagItem)world.GetItem(this.Player.InventoryBagId));
     //        this.GroundItems = world.GroundItemsInRange(world.PlayerCharacter.Id);
     //    }
     //}
     //else
     //{
     if (item.Category == ItemCategory.Consumable)
     {
         ConsumableItem consumable = (ConsumableItem)item;
         if (consumable.Use(world.PlayerCharacter, world))
         {
             NetworkEngine.Instance.UseItem(world.PlayerCharacter.Id, consumable);
             //this.BaseContainer = (BagClientItem)world.PlayerCharacter.Inventory; //new ClientBagItem((BagItem)world.GetItem(this.Player.InventoryBagId));
             //this.GroundItems = world.GroundItemsInRange(world.PlayerCharacter.Id);
         }
     }
     if (item.Category == ItemCategory.Armor || item.Category == ItemCategory.Weapon)
     {
         if (world.PlayerCharacter.Equip(item))
         {
             NetworkEngine.Instance.UseItem(world.PlayerCharacter.Id, item);
             //this.BaseContainer = (BagClientItem)world.PlayerCharacter.Inventory; //new ClientBagItem((BagItem)world.GetItem(this.Player.InventoryBagId));
             //this.GroundItems = world.GroundItemsInRange(world.PlayerCharacter.Id);
         }
     }
     if (item.Category == ItemCategory.Container)
     {
         InventoryScreen openBag = new InventoryScreen(world, this.BaseContainer, (ContainerItem)item);
         openBag.Initialize(this.Manager);
         openBag.Show();
     }
     //}
 }
        protected override void OnHandle(IPacket packet, NetState netState, ServerWorldState worldState)
        {
            UseItemPacket incomingPacket = (UseItemPacket)packet;
            //if (incomingPacket.MobileId != netState.WorldId)
            //{
            //    netState.SendError(0, string.Format("Invalid CMD: '{0},{1},{2}'.", incomingPacket.PacketId, incomingPacket.MobileId, incomingPacket.ItemId));
            //    return;
            //}

            ServerCharacter serverCharacter = (ServerCharacter)worldState.GetCharacter(netState.WorldId);
            Item            itemToUse       = worldState.GetItem(incomingPacket.ItemId);

            if (serverCharacter != null && itemToUse != null)
            {
                if (itemToUse.IsWorldItem)
                {
                    if (serverCharacter.PickupItem(itemToUse))
                    {
                        worldState.SaveItemPosition(itemToUse);
                        this.OnSuccessfulUse(serverCharacter.CurrentMapId, incomingPacket.MobileId, incomingPacket.ItemId, worldState);
                    }
                }
                else
                {
                    if (itemToUse.Category == ItemCategory.Consumable)
                    {
                        ConsumableItem consumable = (ConsumableItem)itemToUse;
                        if (consumable.Use(serverCharacter, worldState))
                        {
                            worldState.SaveItemUse(itemToUse);
                            this.OnSuccessfulUse(serverCharacter.CurrentMapId, incomingPacket.MobileId, incomingPacket.ItemId, worldState);
                        }
                    }
                    if (itemToUse.Category == ItemCategory.Armor || itemToUse.Category == ItemCategory.Weapon)
                    {
                        if (serverCharacter.Equip(itemToUse))
                        {
                            worldState.SaveCharacterItems(serverCharacter);
                            this.OnSuccessfulUse(serverCharacter.CurrentMapId, incomingPacket.MobileId, incomingPacket.ItemId, worldState);
                        }
                    }
                }
            }
        }
        protected override void OnHandle(IPacket packet, ClientWorldState worldState)
        {
            UseItemPacket   incomingPacket = (UseItemPacket)packet;
            ClientCharacter mobileToUpdate = (ClientCharacter)worldState.GetCharacter(incomingPacket.MobileId);
            Item            itemToUse      = worldState.GetItem(incomingPacket.ItemId);

            if (mobileToUpdate == null)
            {
                worldState.MissingCharacters.Add(incomingPacket.MobileId);
            }

            if (mobileToUpdate != null && itemToUse != null)
            {
                if (itemToUse.IsWorldItem)
                {
                    if (!mobileToUpdate.PickupItem(itemToUse))
                    {
                        //ToDo: Simulation missmatch, Force server Authority
                    }
                }
                else
                {
                    if (itemToUse.Category == ItemCategory.Consumable)
                    {
                        ConsumableItem itemToConsume = (ConsumableItem)itemToUse;
                        if (!itemToConsume.Use(mobileToUpdate, worldState))
                        {
                            //ToDo: Simulation missmatch, Force server Authority
                        }
                    }
                    else if (itemToUse.Category == ItemCategory.Armor || itemToUse.Category == ItemCategory.Weapon)
                    {
                        if (!mobileToUpdate.Equip(itemToUse))
                        {
                            //ToDo: Sim missmatch, force server Auth
                        }
                    }
                }
            }
        }
Esempio n. 4
0
        private void OnRightClick()
        {
            if (ItemInSlot != null)
            {
                if (ItemInSlot is EquipmentItem)
                {
                    EquipmentItem equipmentItemClone = new EquipmentItem(ItemInSlot as EquipmentItem);

                    if (equipmentItemClone != null)
                    {
                        GameManager.Instance.PlayerRef.EquipmentManager.Equip(equipmentItemClone);

                        Debug.Log($"{this.ItemInSlot.name} has been equipped.");

                        UpdateSlot(null);

                        return;
                    }
                }
                else if (ItemInSlot is ConsumableItem)
                {
                    ConsumableItem consumableItem = new ConsumableItem(ItemInSlot as ConsumableItem);

                    if (consumableItem != null)
                    {
                        ConsumableItem consumable = ItemInSlot as ConsumableItem;
                        consumable.Use(GameManager.Instance.PlayerRef, consumableItem);

                        GameManager.Instance.PlayerRef.Inventory.Items.Remove(consumable);

                        UpdateSlot(null);

                        return;
                    }
                }
            }
        }