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