public async Task PostCreateLootAsync_ShouldCreateLoot_ThenReturnLootResponse() { const int groupId = 8; var createLootRequest = new CreateLootRequest(); var createdLoot = new Loot(); var lootResponse = new LootResponse(); _lootService.CreateLootAsync(_executionContext, groupId, createLootRequest) .Returns(createdLoot); _mapper.Map <LootResponse>(createdLoot) .Returns(lootResponse); var result = await _controller.PostCreateLootAsync(_executionContext, groupId, createLootRequest); result.Value.Should().BeSameAs(lootResponse); result.StatusCode.Should().Be(StatusCodes.Status201Created); }
public void BuildLootResponse(LootResponse packet, Player viewer, PermissionTypes permission) { if (permission == PermissionTypes.None) { return; } packet.Coins = gold; switch (permission) { case PermissionTypes.Group: case PermissionTypes.Master: case PermissionTypes.Restricted: { // if you are not the round-robin group looter, you can only see // blocked rolled items and quest items, and !ffa items for (byte i = 0; i < items.Count; ++i) { if (!items[i].is_looted && !items[i].freeforall && items[i].conditions.Empty() && items[i].AllowedForPlayer(viewer)) { LootSlotType slot_type; if (items[i].is_blocked) // for ML & restricted is_blocked = !is_underthreshold { switch (permission) { case PermissionTypes.Group: slot_type = LootSlotType.RollOngoing; break; case PermissionTypes.Master: { if (viewer.GetGroup() && viewer.GetGroup().GetMasterLooterGuid() == viewer.GetGUID()) { slot_type = LootSlotType.Master; } else { slot_type = LootSlotType.Locked; } break; } case PermissionTypes.Restricted: slot_type = LootSlotType.Locked; break; default: continue; } } else if (roundRobinPlayer.IsEmpty() || viewer.GetGUID() == roundRobinPlayer || !items[i].is_underthreshold) { // no round robin owner or he has released the loot // or it IS the round robin group owner // => item is lootable slot_type = LootSlotType.AllowLoot; } else if (!items[i].rollWinnerGUID.IsEmpty()) { if (items[i].rollWinnerGUID == viewer.GetGUID()) { slot_type = LootSlotType.Owner; } else { continue; } } else { // item shall not be displayed. continue; } LootItemData lootItem = new LootItemData(); lootItem.LootListID = (byte)(i + 1); lootItem.UIType = slot_type; lootItem.Quantity = items[i].count; lootItem.Loot = new ItemInstance(items[i]); packet.Items.Add(lootItem); } } break; } case PermissionTypes.All: case PermissionTypes.Owner: { for (byte i = 0; i < items.Count; ++i) { if (!items[i].is_looted && !items[i].freeforall && items[i].conditions.Empty() && items[i].AllowedForPlayer(viewer)) { LootItemData lootItem = new LootItemData(); lootItem.LootListID = (byte)(i + 1); lootItem.UIType = (permission == PermissionTypes.Owner ? LootSlotType.Owner : LootSlotType.AllowLoot); lootItem.Quantity = items[i].count; lootItem.Loot = new ItemInstance(items[i]); packet.Items.Add(lootItem); } } break; } default: return; } LootSlotType slotType = permission == PermissionTypes.Owner ? LootSlotType.Owner : LootSlotType.AllowLoot; var lootPlayerQuestItems = GetPlayerQuestItems(); var q_list = lootPlayerQuestItems.LookupByKey(viewer.GetGUID()); if (!q_list.Empty()) { for (var i = 0; i < q_list.Count; ++i) { NotNormalLootItem qi = q_list[i]; LootItem item = quest_items[qi.index]; if (!qi.is_looted && !item.is_looted) { LootItemData lootItem = new LootItemData(); lootItem.LootListID = (byte)(items.Count + i + 1); lootItem.Quantity = item.count; lootItem.Loot = new ItemInstance(item); switch (permission) { case PermissionTypes.Master: lootItem.UIType = LootSlotType.Master; break; case PermissionTypes.Restricted: lootItem.UIType = item.is_blocked ? LootSlotType.Locked : LootSlotType.AllowLoot; break; case PermissionTypes.Group: if (!item.is_blocked) { lootItem.UIType = LootSlotType.AllowLoot; } else { lootItem.UIType = LootSlotType.RollOngoing; } break; default: lootItem.UIType = slotType; break; } packet.Items.Add(lootItem); } } } var lootPlayerFFAItems = GetPlayerFFAItems(); var ffa_list = lootPlayerFFAItems.LookupByKey(viewer.GetGUID()); if (!ffa_list.Empty()) { foreach (var fi in ffa_list) { LootItem item = items[fi.index]; if (!fi.is_looted && !item.is_looted) { LootItemData lootItem = new LootItemData(); lootItem.LootListID = (byte)(fi.index + 1); lootItem.UIType = slotType; lootItem.Quantity = item.count; lootItem.Loot = new ItemInstance(item); packet.Items.Add(lootItem); } } } var lootPlayerNonQuestNonFFAConditionalItems = GetPlayerNonQuestNonFFAConditionalItems(); var conditional_list = lootPlayerNonQuestNonFFAConditionalItems.LookupByKey(viewer.GetGUID()); if (!conditional_list.Empty()) { foreach (var ci in conditional_list) { LootItem item = items[ci.index]; if (!ci.is_looted && !item.is_looted) { LootItemData lootItem = new LootItemData(); lootItem.LootListID = (byte)(ci.index + 1); lootItem.Quantity = item.count; lootItem.Loot = new ItemInstance(item); if (item.follow_loot_rules) { switch (permission) { case PermissionTypes.Master: lootItem.UIType = LootSlotType.Master; break; case PermissionTypes.Restricted: lootItem.UIType = item.is_blocked ? LootSlotType.Locked : LootSlotType.AllowLoot; break; case PermissionTypes.Group: if (!item.is_blocked) { lootItem.UIType = LootSlotType.AllowLoot; } else { lootItem.UIType = LootSlotType.RollOngoing; } break; default: lootItem.UIType = slotType; break; } } else { lootItem.UIType = slotType; } packet.Items.Add(lootItem); } } } }