public async Task <UseResult> UseItem(int itemId, ItemFunctionality itemFunctionality, int entityId, User activeUser)
        {
            var item = (await InventoryRepo.RetrieveFullItemsByIds(itemId)).FirstOrDefault();

            if (item != null && item.Item.OwnerUserId == activeUser.Id)
            {
                UseResult result = new UseResult();
                using (var trans = TransactionScopeFactory.Create())
                {
                    IEnumerable <ItemEffect> effects = await getItemEffects(item.ItemType.Id, itemFunctionality);

                    foreach (ItemEffect effect in effects)
                    {
                        switch (effect.EffectType)
                        {
                        case EffectType.ChangePetStat:
                            result.PetChanges = result.PetChanges.Concat(await changePetStat(item, effect, entityId, activeUser));
                            break;

                        case EffectType.ChangeItemStat:
                            result.ItemChanges = result.ItemChanges.Concat(await changeItemStat(item, effect, activeUser));
                            break;

                        case EffectType.ChangeUserStat:
                            result.UserChanges = result.UserChanges.Concat(await changeUserStat(item, effect, activeUser));
                            break;

                        case EffectType.Transform:
                        {
                            result.ItemChanges = result.ItemChanges.Concat(await transform(item, effect, activeUser));
                            break;
                        }

                        default:
                            break;
                        }
                    }
                    trans.Complete();
                }
                return(result);
            }
            throw new CritterException($"You can't do that, its not your item!",
                                       $"Invalid item provided for use - item: {itemId}, user: {activeUser.Id}",
                                       System.Net.HttpStatusCode.BadRequest);
        }
Exemple #2
0
 // Use this for initialization
 void Start()
 {
     systemColor       = new Color(57f / 255f, 140f / 255f, 53f / 255f, 1f);
     sceneManager      = FindObjectOfType <SceneManager>();
     itemFunctionality = FindObjectOfType <ItemFunctionality>();
 }
 private async Task <IEnumerable <ItemEffect> > getItemEffects(int itemType, ItemFunctionality itemUse)
 {
     return(await InventoryRepo.RetrieveItemEffects(itemType, itemUse));
 }
        public async Task <ActionResult> UseItem(int itemId, ItemFunctionality use, int targetEntityId, [ModelBinder(typeof(LoggedInUserModelBinder))] User activeUser)
        {
            var results = await useDomain.UseItem(itemId, use, targetEntityId, activeUser);

            return(Ok(results));
        }
 public async Task <IEnumerable <ItemEffect> > RetrieveItemEffects(int itemType, ItemFunctionality itemUse)
 {
     return(await dbConnection.QueryAsync <ItemEffect, string, ItemEffect>(
                @"SELECT * FROM itemEffects WHERE itemTypeId = @itemType AND itemUseId = @itemUse",
                param : new
     {
         itemType,
         itemUse = (int)itemUse
     },
                splitOn : "id, effectparameters",
                map : (effect, effparams) =>
     {
         effect.EffectParameters = JsonConvert.DeserializeObject <dynamic>(effparams, settings);
         return effect;
     }));
 }