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