コード例 #1
0
        public void EquipLoadout_UnknownErrorCode_ShouldReturnErrorResultWithMessage()
        {
            IConfiguration        config               = Mock.Of <IConfiguration>();
            IBungieApiService     bungieApiService     = Mock.Of <IBungieApiService>();
            IManifestDao          manifestDao          = Mock.Of <IManifestDao>();
            EmissaryDbContext     dbContext            = Mock.Of <EmissaryDbContext>();
            IEmissaryDao          emissaryDao          = Mock.Of <IEmissaryDao>();
            IAuthorizationService authorizationService = Mock.Of <IAuthorizationService>();


            // ulong discordId = 69;

            // long destinyCharacterId = 2305843009504575107;
            uint        izanagiHash       = 3211806999;
            long        izanagiInstanceId = 6917529135183883487;
            DestinyItem izanagiItem       = new DestinyItem(izanagiInstanceId, "Izanagi's Burden", new List <string>()
            {
                "Weapon", "Kinetic Weapon", "Sniper Rifle"
            }, izanagiHash, new List <uint>()
            {
                2, 1, 10
            }, "Exotic");
            // Loadout loadoutToEquip = new Loadout(discordId, destinyCharacterId, "raid", new List<DestinyItem>() { izanagiItem });

            EquipItemResult izanagiEquipResult = new EquipItemResult(izanagiInstanceId, 155);

            EquipItemsResponse equipResponse = new EquipItemsResponse(new List <EquipItemResult>()
            {
                izanagiEquipResult
            });

            ProfileCharactersResponse charactersResponse = new ProfileCharactersResponse();
            DestinyCharacter          titan = new DestinyCharacter(2305843009504575107, DateTimeOffset.Parse("2019-12-24T22:40:31Z"), 420, BungieMembershipType.Steam);

            charactersResponse.Characters.Add(titan.CharacterId, titan);

            Mock.Get(bungieApiService).Setup(m => m.EquipItems(It.IsAny <EquipItemsRequest>())).Returns(equipResponse);
            Mock.Get(emissaryDao).Setup(m => m.GetUserByDiscordId(It.IsAny <ulong>())).Returns(new EmissaryUser());
            Mock.Get(bungieApiService).Setup(m => m.GetProfileCharacters(It.IsAny <ProfileCharactersRequest>())).Returns(charactersResponse);
            Mock.Get(emissaryDao).Setup(m => m.GetLoadout(It.IsAny <ulong>(), It.IsAny <long>(), It.IsAny <string>())).Returns(new Loadout(69, 420, "raid", new List <DestinyItem>()
            {
                izanagiItem
            }));
            Mock.Get(authorizationService).Setup(m => m.GetAccessToken(69)).Returns("access-token");

            IEmissary emissary = new Emissary(config, bungieApiService, manifestDao, dbContext, emissaryDao, authorizationService);

            EmissaryResult result = emissary.EquipLoadout(69, "raid");

            Assert.IsFalse(result.Success);
            Assert.IsTrue(result.ErrorMessage.Contains("155"));
        }
コード例 #2
0
        public void EquipLoadout_ItemHasBeenDismantled_ShouldReturnErrorResult()
        {
            IConfiguration        config               = Mock.Of <IConfiguration>();
            IBungieApiService     bungieApiService     = Mock.Of <IBungieApiService>();
            IManifestDao          manifestDao          = Mock.Of <IManifestDao>();
            EmissaryDbContext     dbContext            = Mock.Of <EmissaryDbContext>();
            IEmissaryDao          emissaryDao          = Mock.Of <IEmissaryDao>();
            IAuthorizationService authorizationService = Mock.Of <IAuthorizationService>();

            long        wendigoInstanceId = 6917529112673221040;
            DestinyItem wendigoItem       = new DestinyItem(wendigoInstanceId, "Wendigo GL3", new List <string>()
            {
            }, 69, new List <uint>()
            {
            }, "Legendary");
            EquipItemResult wendigoEquipResult = new EquipItemResult(wendigoInstanceId, BungiePlatformErrorCodes.DestinyItemNotFound);

            EquipItemsResponse equipResponse = new EquipItemsResponse(new List <EquipItemResult>()
            {
                wendigoEquipResult
            });

            ProfileCharactersResponse charactersResponse = new ProfileCharactersResponse();
            DestinyCharacter          titan = new DestinyCharacter(2305843009504575107, DateTimeOffset.Parse("2019-12-24T22:40:31Z"), 420, BungieMembershipType.Steam);

            charactersResponse.Characters.Add(titan.CharacterId, titan);

            Mock.Get(bungieApiService).Setup(m => m.EquipItems(It.IsAny <EquipItemsRequest>())).Returns(equipResponse);
            Mock.Get(emissaryDao).Setup(m => m.GetUserByDiscordId(It.IsAny <ulong>())).Returns(new EmissaryUser());
            Mock.Get(bungieApiService).Setup(m => m.GetProfileCharacters(It.IsAny <ProfileCharactersRequest>())).Returns(charactersResponse);
            Mock.Get(emissaryDao).Setup(m => m.GetLoadout(It.IsAny <ulong>(), It.IsAny <long>(), It.IsAny <string>())).Returns(new Loadout(69, 420, "raid", new List <DestinyItem>()
            {
                wendigoItem
            }));
            Mock.Get(authorizationService).Setup(m => m.GetAccessToken(69)).Returns("access-token");


            IEmissary emissary = new Emissary(config, bungieApiService, manifestDao, dbContext, emissaryDao, authorizationService);

            EmissaryResult result = emissary.EquipLoadout(69, "raid");

            Assert.IsFalse(result.Success);
            Assert.IsTrue(result.ErrorMessage.Contains("dismantled"));
        }
コード例 #3
0
        public void EquipLoadout_ExoticWeaponAndArmorCurrentlyEquipped_ShouldPutExoticsAtEndOfEquipRequestList()
        {
            IConfiguration        config               = Mock.Of <IConfiguration>();
            IBungieApiService     bungieApiService     = Mock.Of <IBungieApiService>();
            IManifestDao          manifestDao          = Mock.Of <IManifestDao>();
            EmissaryDbContext     dbContext            = Mock.Of <EmissaryDbContext>();
            IEmissaryDao          emissaryDao          = Mock.Of <IEmissaryDao>();
            IAuthorizationService authorizationService = Mock.Of <IAuthorizationService>();

            ulong discordId = 221313820847636491;

            long izanagiInstanceId              = 6917529135183883487;
            long recluseInstanceId              = 6917529123204409619;
            long wendigoInstanceId              = 6917529112673221040;
            long maskOfRullInstanceId           = 6917529110566559001;
            long reverieDawnInstanceId          = 6917529138010460936;
            long plateOfTranscendenceInstanceId = 6917529109687230597;
            long peacekeepersInstanceId         = 6917529122999918127;
            long markOfTheGreatHuntInstanceId   = 6917529128966008940;

            DestinyItem izanagiItem = new DestinyItem(izanagiInstanceId, "Izanagi's Burden", new List <string>()
            {
            }, 69, new List <uint>()
            {
            }, "Exotic");
            DestinyItem recluseItem = new DestinyItem(recluseInstanceId, "The Recluse", new List <string>()
            {
            }, 69, new List <uint>()
            {
            }, "Legendary");
            DestinyItem wendigoItem = new DestinyItem(wendigoInstanceId, "Wendigo GL3", new List <string>()
            {
            }, 69, new List <uint>()
            {
            }, "Legendary");
            DestinyItem maskOfRullItem = new DestinyItem(maskOfRullInstanceId, "Mask of Rull", new List <string>()
            {
            }, 69, new List <uint>()
            {
            }, "Legendary");
            DestinyItem reverieDawnItem = new DestinyItem(reverieDawnInstanceId, "Reverie Dawn Gauntlets", new List <string>()
            {
            }, 69, new List <uint>()
            {
            }, "Legendary");
            DestinyItem plateOfTranscendenceItem = new DestinyItem(plateOfTranscendenceInstanceId, "Plate of Transcendence", new List <string>()
            {
            }, 69, new List <uint>()
            {
            }, "Legendary");
            DestinyItem peacekeepersItem = new DestinyItem(peacekeepersInstanceId, "Peacekeepers", new List <string>()
            {
            }, 69, new List <uint>()
            {
            }, "Exotic");
            DestinyItem markOfTheGreatHuntItem = new DestinyItem(markOfTheGreatHuntInstanceId, "Mark of the Great Hunt", new List <string>()
            {
            }, 69, new List <uint>()
            {
            }, "Legendary");

            IList <DestinyItem> loadoutItems = new List <DestinyItem>()
            {
                izanagiItem, recluseItem, wendigoItem, maskOfRullItem, reverieDawnItem, plateOfTranscendenceItem, peacekeepersItem, markOfTheGreatHuntItem
            };

            Loadout savedLoadout = new Loadout(discordId, 420, "last wish raid", loadoutItems);

            ProfileCharactersResponse charactersResponse = new ProfileCharactersResponse();
            DestinyCharacter          titan = new DestinyCharacter(2305843009504575107, DateTimeOffset.Parse("2019-12-24T22:40:31Z"), 69, BungieMembershipType.Steam);

            charactersResponse.Characters.Add(titan.CharacterId, titan);

            IList <long> originalItemInstanceIdsOrder = new List <long>()
            {
                izanagiInstanceId, recluseInstanceId, wendigoInstanceId, maskOfRullInstanceId, reverieDawnInstanceId, plateOfTranscendenceInstanceId, peacekeepersInstanceId, markOfTheGreatHuntInstanceId
            };

            IList <long> expectedItemInstanceIdsOrder = new List <long>()
            {
                recluseInstanceId, wendigoInstanceId, maskOfRullInstanceId, reverieDawnInstanceId, plateOfTranscendenceInstanceId, markOfTheGreatHuntInstanceId, izanagiInstanceId, peacekeepersInstanceId
            };

            EquipItemResult    izanagiEquipResult              = new EquipItemResult(izanagiInstanceId, BungiePlatformErrorCodes.Success);
            EquipItemResult    recluseEquipResult              = new EquipItemResult(recluseInstanceId, BungiePlatformErrorCodes.Success);
            EquipItemResult    wendigoEquipResult              = new EquipItemResult(wendigoInstanceId, BungiePlatformErrorCodes.Success);
            EquipItemResult    maskOfRullEquipResult           = new EquipItemResult(maskOfRullInstanceId, BungiePlatformErrorCodes.Success);
            EquipItemResult    reverieDawnEquipResult          = new EquipItemResult(reverieDawnInstanceId, BungiePlatformErrorCodes.Success);
            EquipItemResult    plateOfTranscendenceEquipResult = new EquipItemResult(plateOfTranscendenceInstanceId, BungiePlatformErrorCodes.Success);
            EquipItemResult    peacekeepersEquipResult         = new EquipItemResult(peacekeepersInstanceId, BungiePlatformErrorCodes.Success);
            EquipItemResult    markOfTheGreatHuntEquipResult   = new EquipItemResult(markOfTheGreatHuntInstanceId, BungiePlatformErrorCodes.Success);
            EquipItemsResponse equipResponse = new EquipItemsResponse(new List <EquipItemResult>()
            {
                izanagiEquipResult, recluseEquipResult, wendigoEquipResult, maskOfRullEquipResult, reverieDawnEquipResult, plateOfTranscendenceEquipResult, peacekeepersEquipResult, markOfTheGreatHuntEquipResult
            });


            Mock.Get(emissaryDao).Setup(m => m.GetLoadout(discordId, It.IsAny <long>(), "last wish raid")).Returns(savedLoadout);
            Mock.Get(bungieApiService).Setup(m => m.GetProfileCharacters(It.IsAny <ProfileCharactersRequest>())).Returns(charactersResponse);
            Mock.Get(emissaryDao).Setup(m => m.GetUserByDiscordId(discordId)).Returns(new EmissaryUser());
            Mock.Get(bungieApiService).Setup(m => m.EquipItems(It.IsAny <EquipItemsRequest>())).Returns(equipResponse);
            Mock.Get(authorizationService).Setup(m => m.GetAccessToken(discordId)).Returns("access-token");

            IEmissary      emissary = new Emissary(config, bungieApiService, manifestDao, dbContext, emissaryDao, authorizationService);
            EmissaryResult result   = emissary.EquipLoadout(discordId, "last wish raid");

            Assert.IsTrue(result.Success);
            Mock.Get(bungieApiService).Verify(m => m.EquipItems(It.Is <EquipItemsRequest>(r => r.ItemInstanceIds.SequenceEqual(expectedItemInstanceIdsOrder))), Times.Once());
        }
コード例 #4
0
        public void OnMoveItem(SagaMap.Packets.Client.MoveItem p)
        {
            if (this.state != SESSION_STATE.MAP_LOADED)
            {
                return;
            }
            Packets.Client.ITEM_MOVE_TYPE moveType = p.GetMoveType();

            if (moveType == Packets.Client.ITEM_MOVE_TYPE.EquToInv)
            {
                // unequip, equip items are not stackable?
                byte index, amount;
                UnequipItemResult ures = this.Char.inv.UnequipItem(p.GetSourceIndex(), out index, out amount);
                if (ures == UnequipItemResult.NEW_INDEX || ures == UnequipItemResult.STACKED)
                {
                    Packets.Server.MoveItem p1 = new SagaMap.Packets.Server.MoveItem();
                    p1.SetMoveType(SagaMap.Packets.Server.ITEM_MOVE_TYPE.EquToInv);
                    p1.SetSourceIndex(p.GetSourceIndex());
                    p1.SetDestIndex(index);
                    this.netIO.SendPacket(p1, this.SessionID);
                    Item item = this.Char.inv.GetItem(CONTAINER_TYPE.INVENTORY, index);
                    item.equipSlot = -1;
                    MapServer.charDB.UpdateItem(this.Char, item);
                    Bonus.BonusHandler.Instance.EquiqItem(this.Char, item, true);
                    SkillHandler.CalcHPSP(ref this.Char);
                    SendCharStatus(0);
                    SendExtStats();
                    SendBattleStatus();

                    this.map.SendEventToAllActorsWhoCanSeeActor(Map.EVENT_TYPE.CHANGE_EQUIP, new Map.ChangeEquipArgs((EQUIP_SLOT)(p.GetSourceIndex()), 0), this.Char, false);
                }
                else
                {
                    SendMessage("Saga", "unequip error");
                }
            }
            else if (moveType == Packets.Client.ITEM_MOVE_TYPE.InvToEqu)
            {
                // equip
                Item item;
                Item itemori = null;
                if (this.Char.inv.EquipList.ContainsKey((EQUIP_SLOT)p.GetDestIndex()))
                {
                    itemori = this.Char.inv.EquipList[(EQUIP_SLOT)p.GetDestIndex()];
                }
                EquipItemResult eres = this.Char.inv.EquipItem(p.GetSourceIndex(), p.GetDestIndex(), out item);

                if (eres == EquipItemResult.NO_ERROR)
                {
                    Packets.Server.MoveItem p1 = new SagaMap.Packets.Server.MoveItem();
                    p1.SetMoveType(SagaMap.Packets.Server.ITEM_MOVE_TYPE.InvToEqu);
                    p1.SetSourceIndex(p.GetSourceIndex());
                    p1.SetDestIndex(item.index);
                    item.equipSlot = item.index;
                    MapServer.charDB.UpdateItem(this.Char, item);
                    this.netIO.SendPacket(p1, this.SessionID);
                    if (itemori != null)
                    {
                        Bonus.BonusHandler.Instance.EquiqItem(this.Char, itemori, true);
                        itemori.equipSlot = -1;
                        MapServer.charDB.UpdateItem(this.Char, itemori);
                    }
                    Bonus.BonusHandler.Instance.EquiqItem(this.Char, item, false);
                    SkillHandler.CalcHPSP(ref this.Char);
                    SendCharStatus(0);
                    SendExtStats();
                    SendBattleStatus();
                    this.map.SendEventToAllActorsWhoCanSeeActor(Map.EVENT_TYPE.CHANGE_EQUIP, new Map.ChangeEquipArgs((EQUIP_SLOT)(item.index), item.id), this.Char, false);
                }
                else if (eres == EquipItemResult.NOT_EQUIPABLE)
                {
                    SendMessage("Saga", "error, item is not equipable");
                }
                else if (eres == EquipItemResult.WRONG_EQUIPSLOT)
                {
                    SendMessage("Saga", "error, wrong equip slot");
                }
                else
                {
                    SendMessage("Saga", "error, cannot equip item");
                }
            }
            else if (moveType == Packets.Client.ITEM_MOVE_TYPE.InvToSto)
            {
                Item item;
                byte index, amount;
                item = this.Char.inv.GetItem(CONTAINER_TYPE.INVENTORY, p.GetSourceIndex());
                if (item == null)
                {
                    return;
                }
                if (!this.Char.inv.HasFreeSpaceStorage())
                {
                    return;
                }
                if (this.Char.inv.AddItemStorage(item, out index, out amount) == AddItemResult.ERROR)
                {
                    return;
                }

                this.Char.inv.DeleteItem(CONTAINER_TYPE.INVENTORY, p.GetSourceIndex(), item.id, p.GetAmount(), out amount);
                MapServer.charDB.DeleteItem(this.Char, item);
                MapServer.charDB.NewStorage(this.Char, item);
                Packets.Server.MoveItem p1 = new SagaMap.Packets.Server.MoveItem();
                p1.SetMoveType(SagaMap.Packets.Server.ITEM_MOVE_TYPE.InvToSto);
                p1.SetSourceIndex(p.GetSourceIndex());
                p1.SetDestIndex(item.index);
                this.netIO.SendPacket(p1, this.SessionID);
            }
            else if (moveType == Packets.Client.ITEM_MOVE_TYPE.StoToInv)
            {
                Item item;
                byte amount;
                item = this.Char.inv.GetItem(CONTAINER_TYPE.STORAGE, p.GetSourceIndex());
                if (item == null)
                {
                    return;
                }
                if (!this.Char.inv.HasFreeSpace())
                {
                    return;
                }
                if (this.Char.inv.AddItem(item) == AddItemResult.ERROR)
                {
                    return;
                }
                this.Char.inv.DeleteItem(CONTAINER_TYPE.STORAGE, p.GetSourceIndex(), item.id, p.GetAmount(), out amount);
                MapServer.charDB.DeleteStorage(this.Char, item);
                MapServer.charDB.NewItem(this.Char, item);
                Packets.Server.MoveItem p1 = new SagaMap.Packets.Server.MoveItem();
                p1.SetMoveType(SagaMap.Packets.Server.ITEM_MOVE_TYPE.StoToInv);
                p1.SetSourceIndex(p.GetSourceIndex());
                p1.SetDestIndex(item.index);
                this.netIO.SendPacket(p1, this.SessionID);;
            }

            //Send Answer
            // Do item movement stuff in inventory db?
            Packets.Server.MoveReply sendPacket = new SagaMap.Packets.Server.MoveReply();
            // Todo : Switch result of move and obtain relevent string to send from GameStringTable
            sendPacket.SetMessage(0);
            this.netIO.SendPacket(sendPacket, this.SessionID);
        }