示例#1
0
        public async Task <ItemTemplateDto> UpdateAsync(int id, ItemTemplateDto dto)
        {
            ItemTemplateModel model = await _unitOfWork.ItemTemplatesRepository.GetAsync(id);

            _mapper.Map(dto, model);
            await _unitOfWork.SaveAsync();

            return(dto);
        }
示例#2
0
        private static void ProcessObjectUseRequest(WorldClient Client, string Packet)
        {
            int    guid       = -1;
            int    targetGuid = -1;
            int    targetCell = -1;
            Player Target     = null;

            try
            {
                String[] infos = Regex.Split(Packet.Substring(2), "\\|");
                guid = int.Parse(infos[0]);
                if (infos.Length == 3)
                {
                    targetCell = int.Parse(infos[2]);
                }
                try //try
                {
                    targetGuid = int.Parse(infos[1]);
                }
                catch (Exception e)
                {
                    targetGuid = -1;
                };
            }
            catch (Exception e)
            {
                Logger.Error(e);
                return;
            }
            if (CharacterTable.GetCharacter(targetGuid) != null)
            {
                Target = CharacterTable.GetCharacter(targetGuid);
            }
            if (!Client.Character.InventoryCache.hasItemGuid(guid))
            {
                return;
            }

            InventoryItemModel obj = InventoryItemTable.getItem(guid);
            ItemTemplateModel  T   = obj.Template;

            if (!T.Criterions.Equals("") && !ConditionParser.validConditions(Client.Character, T.Criterions))
            {
                Client.Send(new ImMessage("119|43"));
                return;
            }
            if (T.ItemType == ItemTypeEnum.ITEM_TYPE_PAIN || T.ItemType == ItemTypeEnum.ITEM_TYPE_VIANDE_COMESTIBLE)
            {
                Client.Character.myMap.SendToMap(new MapEmoticoneMessage(Client.Character.ActorId, 17));
            }
            else if (T.ItemType == ItemTypeEnum.ITEM_TYPE_BIERE)
            {
                Client.Character.myMap.SendToMap(new MapEmoticoneMessage(Client.Character.ActorId, 18));
            }
            T.applyAction(Client.Character, Target, guid, (short)targetCell);
        }
示例#3
0
        public async Task <ItemTemplateDto> CreateAsync(int creatorId, ItemTemplateDto dto)
        {
            dto.CreatorId    = creatorId;
            dto.CreationTime = DateTime.Now;
            ItemTemplateModel model = _mapper.Map <ItemTemplateDto, ItemTemplateModel>(dto);
            await _unitOfWork.ItemTemplatesRepository.InsertAsync(model);

            await _unitOfWork.SaveAsync();

            return(dto);
        }
示例#4
0
        private InventoryItemModel getSimilarItem(InventoryItemModel item)
        {
            ItemTemplateModel objModel = item.Template;

            if (objModel.Type == 85 || objModel.Type == 18)
            {
                return(null);
            }
            foreach (InventoryItemModel obj in Mount.Items)
            {
                if ((obj.Slot == ItemSlotEnum.SLOT_INVENTAIRE || obj.Position > 15) && item.ID != obj.ID && (obj.TemplateID == objModel.ID && (obj.GetStats().ToItemStats() == item.GetStats().ToItemStats() || obj.GetStats().ToItemStats().Equals(item.GetStats().ToItemStats()))))
                {
                    return(obj);
                }
            }
            return(null);
        }
示例#5
0
        public void MoveItem(int Guid, ItemSlotEnum Slot, bool Packet, int Quantity = 1)
        {
            var Item = this.get(Guid);

            // Item inexistant
            if (Item == null)
            {
                return;
            }

            // Meme endroit ?
            if (Item.Slot == Slot)
            {
                return;
            }

            // Veu equiper un item
            if (Slot > ItemSlotEnum.SLOT_INVENTAIRE && Slot <= ItemSlotEnum.SLOT_BOUCLIER)
            {
                if (Item.Template.Type == 113)
                {
                    if (this.GetItemInSlot(Slot) == null)
                    {
                        this.Player.Send(new TextInformationMessage(TextInformationTypeEnum.ERREUR, 161));
                        return;
                    }
                    if (Item.Quantity > 1)
                    {
                        if (Quantity > Item.Quantity)
                        {
                            Quantity = Item.Quantity;
                        }
                        int newQ = Item.Quantity - Quantity;
                        if (newQ > 0)
                        {
                            InventoryItemTable.TryCreateItem(Item.TemplateID, this.Player, newQ, -1, Item.GetStats().ToItemStats());
                            UpdateObjectquantity(Item, Quantity);
                        }
                    }
                    var EquipedItemB = this.GetItemInSlot(Slot);

                    var SpeakingTestItem = SpeakingTable.Cache.Values.FirstOrDefault(x => x != null && x.LinkedItem == Item.ID && x.Associated == 0);

                    if (SpeakingTestItem != null)
                    {
                        EquipedItemB.SpeakingID     = SpeakingTestItem.ID;
                        SpeakingTestItem.Stats      = EquipedItemB.GetStats().ToItemStats();
                        SpeakingTestItem.LinkedItem = EquipedItemB.ID;
                        SpeakingTestItem.Associated = 1;
                        remove(Item.ID);
                        Player.Send(new ObjectRemoveMessage(Item.ID));
                        Player.Send(new ObjectRefreshMessage(EquipedItemB));
                        Player.myMap.SendToMap(new ObjectActualiseMessage(Player));
                        if (Player.Client.GetFight() != null)
                        {
                            Player.Client.GetFight().SendToFight(new ObjectActualiseMessage(Player));
                        }
                        return;
                    }

                    var    ID        = DatabaseCache.nextSpeakingId++;
                    String Date      = DateTime.Now.Month + "" + DateTime.Now.Day;
                    String InterDate = (DateTime.Now.Month + 3) + "" + DateTime.Now.Day;
                    String Time      = DateTime.Now.Hour + "" + DateTime.Now.Minute;

                    Speaking newItem = new Speaking(ID, DateTime.Now.Year, int.Parse(Date), int.Parse(Time), 1, 1, EquipedItemB.Template.Type, EquipedItemB.ID, 0, DateTime.Now.Year, int.Parse(InterDate), int.Parse(Time), DateTime.Now.Year, int.Parse(Date), int.Parse(Time), 1, Item.TemplateID, Item.ID, EquipedItemB.GetStats().ToItemStats());
                    SpeakingTable.New(newItem);
                    EquipedItemB.SpeakingID = ID;
                    remove(Item.ID);
                    Player.Send(new ObjectRemoveMessage(Item.ID));
                    Player.Send(new ObjectRefreshMessage(EquipedItemB));
                    Player.myMap.SendToMap(new ObjectActualiseMessage(Player));
                    if (Player.Client.GetFight() != null)
                    {
                        Player.Client.GetFight().SendToFight(new ObjectActualiseMessage(Player));
                    }
                    return;
                }

                // Il peu placer l'item dans le slot desiré ?
                if (!ItemTemplateModel.CanPlaceInSlot(ItemTemplateTable.GetTemplate(Item.TemplateID).ItemType, Slot))
                {
                    return;
                }

                // Level requis
                if (ItemTemplateTable.GetTemplate(Item.TemplateID).Level > Player.Level)
                {
                    if (Packet)
                    {
                        Player.Send(new ObjectMoveFailMessage(ObjectMoveFailReasonEnum.REASON_LEVEL_REQUIRED));
                    }
                    return;
                }

                if (!ItemTemplateTable.GetTemplate(Item.TemplateID).Criterions.Equals("") && !ConditionParser.validConditions(this.Player, ItemTemplateTable.GetTemplate(Item.TemplateID).Criterions))
                {
                    this.Player.Send(new ImMessage("119|43"));
                    return;
                }

                var EquipedItem = this.GetItemInSlot(Slot);

                // Si item deja equipé dans le slot
                if (EquipedItem != null)
                {
                    // Deplacement dans l'inventaire
                    Player.GetStats().UnMerge(EquipedItem.GetStats());
                    this.Player.Life    -= EquipedItem.GetStats().GetTotal(EffectEnum.AddVitalite);
                    EquipedItem.Position = -1;
                    Player.Send(new ObjectMoveSucessMessage(EquipedItem.ID, -1));
                }

                // Template deja equipé
                if (this.HasTemplateEquiped(Item.TemplateID))
                {
                    if (Packet)
                    {
                        Player.Send(new ObjectMoveFailMessage(ObjectMoveFailReasonEnum.REASON_ALREADY_EQUIPED));
                    }
                    return;
                }

                /*var simlarItem = this.getSimilarInventoryItem(Item);
                 * if (simlarItem != null)
                 * {
                 *  this.UpdateObjectquantity(simlarItem, simlarItem.Quantity + Item.Quantity);
                 *  remove(Item.ID);
                 *  InventoryItemTable.removeItem(Item.ID);
                 *  Player.Send(new ObjectRemoveMessage(Item.ID));
                 *
                 * }
                 * else*/
                if (Item.Quantity > 1)
                {
                    var NewItem = InventoryItemTable.TryCreateItem(Item.TemplateID, this.Player, 1, (short)Slot, Item.Effects);
                    this.UpdateObjectquantity(Item, Item.Quantity - 1);
                }
                else
                {
                    // On modifi la position et fusionne les stats
                    Item.Position = (short)Slot;
                    Player.Send(new ObjectMoveSucessMessage(Item.ID, (short)Slot));
                    Player.Send(new ObjectMoveSucessMessage(Item.ID, (short)Item.Position));
                }

                if (GetItemInSlot(ItemSlotEnum.SLOT_ARME) != null)
                {
                    Player.Send(new ObjectTaskMessage(-1));
                }

                Player.GetStats().Merge(Item.GetStats());
                this.Player.Life += Item.GetStats().GetTotal(EffectEnum.AddVitalite);
                this.Player.Life += Item.GetStats().GetTotal(EffectEnum.AddVie);
                if (Packet)
                {
                    Player.Client.Send(new AccountStatsMessage(Player));
                    Player.myMap.SendToMap(new ObjectActualiseMessage(Player));
                    if (Player.Client.GetFight() != null)
                    {
                        Player.Client.GetFight().SendToFight(new ObjectActualiseMessage(Player));
                    }
                }
            }
            else
            {
                var NeedActualise = false;

                // Si l'item est equipé, on deduit les stats
                if (Item.Slot > ItemSlotEnum.SLOT_INVENTAIRE && Item.Slot < ItemSlotEnum.SLOT_BOUCLIER)
                {
                    // Retire les stats
                    Player.GetStats().UnMerge(Item.GetStats());
                    this.Player.Life -= Item.GetStats().GetTotal(EffectEnum.AddVitalite);
                    this.Player.Life -= Item.GetStats().GetTotal(EffectEnum.AddVie);
                    if (Player.Life <= 0)
                    {
                        Player.Life = 1;
                    }
                    if (Packet)
                    {
                        Player.Client.Send(new AccountStatsMessage(this.Player));
                        NeedActualise = true;
                    }
                }

                // On tente de fusionner
                if (!this.TryMergeItem(Item.TemplateID, Item.Effects, Slot, Item.Quantity, Item))
                {
                    Item.Position = (short)Slot;
                    if (Packet)
                    {
                        Player.Send(new ObjectMoveSucessMessage(Item.ID, (short)Item.Position));
                    }
                }

                if (NeedActualise)
                {
                    Player.myMap.SendToMap(new ObjectActualiseMessage(Player));
                    if (Player.Client.GetFight() != null)
                    {
                        Player.Client.GetFight().SendToFight(new ObjectActualiseMessage(Player));
                    }
                }
            }
            onMoveItem(Item);
        }