Example #1
0
        public void BuildOre()
        {
            var itemFactory = new ItemFactory(new IdResolutionContext(new[] { new ItemInfo(ItemCode.Veldnium) }));
            var ore = itemFactory.Build(ItemCode.Veldnium, 10);

            Assert.That(ore.ItemInfo.Code, Is.EqualTo(ItemCode.Veldnium));
            Assert.That(ore.Quantity, Is.EqualTo(10));
        }
Example #2
0
        /// <summary>
        /// Initialise a default Fortis setup with a context provider and verifies the initialisation.
        /// </summary>
        /// <param name="contextProvider"></param>
        public static void Initialise(IContextProvider contextProvider)
        {
            var templateMapProvider = new TemplateMapProvider(new ModelAssemblyProvider());
            var spawnProvider = new SpawnProvider(templateMapProvider);
            var itemFactory = new ItemFactory(contextProvider, SpawnProvider);
            var itemSearchFactory = new ItemSearchFactory(templateMapProvider, new SearchResultsAdapter());

            Initialise(spawnProvider, itemFactory, itemSearchFactory);
        }
        //Only Needs a Default Constructor, This will be a Singleton
        public ItemFactoryManager()
        {
            itemFactory = new ItemFactory();

            items = new Dictionary<string, Item>();
            itemToInventory = new Dictionary<Item, string>();
            inventoryToItems = new Dictionary<string, List<Item>>();
            //playerInventories = new List<string>();
            changed = false;

            inventoryToItems["trash"] = new List<Item>();
        }
Example #4
0
        public void PackWeaponInBox()
        {
            var itemFactory = new ItemFactory(new IdResolutionContext(new[] { TestItems.Item(ItemCode.MissileLauncher), }));
            var weaponPacker = new WeaponPacker(new IdGenerator(), itemFactory);
            var itemPacker = new ItemPacker(new[] { weaponPacker });
            var weapon = new Weapon() { WeaponInfo = new WeaponInfo { Code = ItemCode.MissileLauncher} };

            Assert.That(itemPacker.CanPack(weapon), Is.True);
            var weaponInBox = itemPacker.Pack(weapon);

            Assert.That(weaponInBox, Is.Not.Null);
            Assert.That(weaponInBox.ItemInfo, Is.InstanceOf<WeaponInfo>());
        }
Example #5
0
        public void BuildWeapon()
        {
            var itemFactory = new ItemFactory(new IdResolutionContext(new[] { TestItems.Item(ItemCode.MissileLauncher), TestItems.Weapon(ItemCode.MissileLauncher) }));
            var weaponPacker = new WeaponPacker(new IdGenerator(), itemFactory);
            var itemPacker = new ItemPacker(new[] { weaponPacker });

            var weaponInBox = itemFactory.Build(ItemCode.MissileLauncher, 10);
            var weapon = itemPacker.Unpack<Weapon>(weaponInBox);

            Assert.That(weapon, Is.Not.Null);
            Assert.That(weapon.WeaponInfo.Code, Is.EqualTo(ItemCode.MissileLauncher));
            Assert.That(weapon.Id, Is.Not.EqualTo(0));
            Assert.That(weaponInBox.Quantity, Is.EqualTo(9));
        }
Example #6
0
        public ISassStylesheet Parse(IParsingRequest request)
        {
            var tokens = Tokenize(request);
            var stream = CreateTokenStream(tokens, new ParsingRequestExecutionContext(request));
            var itemFactory = new ItemFactory(new DefaultSassItemFactory());

            var stylesheet = new Stylesheet();
            if (stylesheet.Parse(itemFactory, request.Text, stream) && !request.IsCancelled)
            {
                stylesheet.Freeze();

                foreach (var import in stylesheet.Children.OfType<SassImportDirective>())
                    import.ResolveImports(request.Text, request.Document, DocumentManager);

                foreach (var reference in ResolveReferences(stylesheet))
                    reference.ResolveImports(request.Text, request.Document, DocumentManager);

                return stylesheet;
            }

            return null;
        }
    public Inventory(int capacity = 8)
    {
        m_items = new List<Item>(capacity);

        m_factory = new ItemFactory();

        // Initialize item prototypes
        Item[] items =
        {
            // Generics
            new Item_Generic(),

            // Weapons
            new Weapon_Sword(),
            new Weapon_Melee(),
            new Weapon_Staff(),
            new Weapon_Bow(),

            // Armor
            new Armor_Chestplate(),
        };

        m_factory.AddRange(items);
    }
Example #8
0
        public void IncorrectTemplateForContext()
        {
            using (ShimsContext.Create())
            {
                var templateId = new Guid("{AF49395C-74BB-4ACF-8E01-F2B5BEECA8FE}");
                var testItem = CreateTestItem(templateId: templateId);
                var contextProvider = new Mock<IContextProvider>();

                contextProvider.Setup(c => c.PageContextItem).Returns(testItem);

                var itemFactory = new ItemFactory(contextProvider.Object);
                var wrappedItem = itemFactory.GetContextItem<IScTemplate>();

                Assert.IsNull(wrappedItem);
            }
        }
        public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet)
        {
            int    PageId      = Packet.PopInt();
            int    ItemId      = Packet.PopInt();
            string Data        = Packet.PopString();
            string GiftUser    = StringCharFilter.Escape(Packet.PopString());
            string GiftMessage = StringCharFilter.Escape(Packet.PopString().Replace(Convert.ToChar(5), ' '));
            int    SpriteId    = Packet.PopInt();
            int    Ribbon      = Packet.PopInt();
            int    Colour      = Packet.PopInt();
            bool   dnow        = Packet.PopBoolean();

            if (PlusEnvironment.GetSettingsManager().TryGetValue("room.item.gifts.enabled") != "1")
            {
                Session.SendNotification("The hotel managers have disabled gifting");
                return;
            }

            /*if (PlusEnvironment.GetGame().GetCatalog().CatalogFlatOffers.ContainsKey(ItemId) && PageId < 0)
             * {
             *  PageId = PlusEnvironment.GetGame().GetCatalog().CatalogFlatOffers[ItemId];
             *
             *  CatalogPage P = null;
             *  if (!PlusEnvironment.GetGame().GetCatalog().Pages.TryGetValue(PageId, out P))
             *      PageId = 0;
             * }*/

            CatalogPage Page = null;

            if (!PlusEnvironment.GetGame().GetCatalog().TryGetPage(PageId, out Page))
            {
                return;
            }

            if (!Page.Enabled || !Page.Visible || Page.MinimumRank > Session.GetHabbo().Rank || (Page.MinimumVIP > Session.GetHabbo().VIPRank&& Session.GetHabbo().Rank == 1))
            {
                return;
            }

            CatalogItem Item = null;

            if (!Page.Items.TryGetValue(ItemId, out Item))
            {
                if (Page.ItemOffers.ContainsKey(ItemId))
                {
                    Item = (CatalogItem)Page.ItemOffers[ItemId];
                    if (Item == null)
                    {
                        return;
                    }
                }
                else
                {
                    return;
                }
            }

            if (!ItemUtility.CanGiftItem(Item))
            {
                return;
            }

            ItemData PresentData = null;

            if (!PlusEnvironment.GetGame().GetItemManager().GetGift(SpriteId, out PresentData) || PresentData.InteractionType != InteractionType.GIFT)
            {
                return;
            }

            if (Session.GetHabbo().Credits < Item.CostCredits)
            {
                Session.SendPacket(new PresentDeliverErrorMessageComposer(true, false));
                return;
            }

            if (Session.GetHabbo().Duckets < Item.CostPixels)
            {
                Session.SendPacket(new PresentDeliverErrorMessageComposer(false, true));
                return;
            }

            Habbo Habbo = PlusEnvironment.GetHabboByUsername(GiftUser);

            if (Habbo == null)
            {
                Session.SendPacket(new GiftWrappingErrorComposer());
                return;
            }

            if (!Habbo.AllowGifts)
            {
                Session.SendNotification("Oops, this user doesn't allow gifts to be sent to them!");
                return;
            }

            if ((DateTime.Now - Session.GetHabbo().LastGiftPurchaseTime).TotalSeconds <= 15.0)
            {
                Session.SendNotification("You're purchasing gifts too fast! Please wait 15 seconds!");

                Session.GetHabbo().GiftPurchasingWarnings += 1;
                if (Session.GetHabbo().GiftPurchasingWarnings >= 25)
                {
                    Session.GetHabbo().SessionGiftBlocked = true;
                }
                return;
            }

            if (Session.GetHabbo().SessionGiftBlocked)
            {
                return;
            }


            string ED = GiftUser + Convert.ToChar(5) + GiftMessage + Convert.ToChar(5) + Session.GetHabbo().Id + Convert.ToChar(5) + Item.Data.Id + Convert.ToChar(5) + SpriteId + Convert.ToChar(5) + Ribbon + Convert.ToChar(5) + Colour;

            int NewItemId = 0;

            using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor())
            {
                //Insert the dummy item.
                dbClient.SetQuery("INSERT INTO `items` (`base_item`,`user_id`,`extra_data`) VALUES (@baseId, @habboId, @extra_data)");
                dbClient.AddParameter("baseId", PresentData.Id);
                dbClient.AddParameter("habboId", Habbo.Id);
                dbClient.AddParameter("extra_data", ED);
                NewItemId = Convert.ToInt32(dbClient.InsertQuery());

                string ItemExtraData = null;
                switch (Item.Data.InteractionType)
                {
                case InteractionType.NONE:
                    ItemExtraData = "";
                    break;

                    #region Pet handling

                case InteractionType.PET:

                    try
                    {
                        string[] Bits    = Data.Split('\n');
                        string   PetName = Bits[0];
                        string   Race    = Bits[1];
                        string   Color   = Bits[2];

                        int.Parse(Race);     // to trigger any possible errors

                        if (PetUtility.CheckPetName(PetName))
                        {
                            return;
                        }

                        if (Race.Length > 2)
                        {
                            return;
                        }

                        if (Color.Length != 6)
                        {
                            return;
                        }

                        PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_PetLover", 1);
                    }
                    catch
                    {
                        return;
                    }

                    break;

                    #endregion

                case InteractionType.FLOOR:
                case InteractionType.WALLPAPER:
                case InteractionType.LANDSCAPE:

                    Double Number = 0;
                    try
                    {
                        if (string.IsNullOrEmpty(Data))
                        {
                            Number = 0;
                        }
                        else
                        {
                            Number = Double.Parse(Data, PlusEnvironment.CultureInfo);
                        }
                    }
                    catch
                    {
                    }

                    ItemExtraData = Number.ToString().Replace(',', '.');
                    break;     // maintain extra data // todo: validate

                case InteractionType.POSTIT:
                    ItemExtraData = "FFFF33";
                    break;

                case InteractionType.MOODLIGHT:
                    ItemExtraData = "1,1,1,#000000,255";
                    break;

                case InteractionType.TROPHY:
                    ItemExtraData = Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + Convert.ToChar(9) + Data;
                    break;

                case InteractionType.MANNEQUIN:
                    ItemExtraData = "m" + Convert.ToChar(5) + ".ch-210-1321.lg-285-92" + Convert.ToChar(5) + "Default Mannequin";
                    break;

                case InteractionType.BADGE_DISPLAY:
                    if (!Session.GetHabbo().GetBadgeComponent().HasBadge(Data))
                    {
                        Session.SendPacket(new BroadcastMessageAlertComposer("Oops, it appears that you do not own this badge."));
                        return;
                    }

                    ItemExtraData = Data + Convert.ToChar(9) + Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year;
                    break;

                default:
                    ItemExtraData = Data;
                    break;
                }

                //Insert the present, forever.
                dbClient.SetQuery("INSERT INTO `user_presents` (`item_id`,`base_id`,`extra_data`) VALUES (@itemId, @baseId, @extra_data)");
                dbClient.AddParameter("itemId", NewItemId);
                dbClient.AddParameter("baseId", Item.Data.Id);
                dbClient.AddParameter("extra_data", (string.IsNullOrEmpty(ItemExtraData) ? "" : ItemExtraData));
                dbClient.RunQuery();

                //Here we're clearing up a record, this is dumb, but okay.
                dbClient.SetQuery("DELETE FROM `items` WHERE `id` = @deleteId LIMIT 1");
                dbClient.AddParameter("deleteId", NewItemId);
                dbClient.RunQuery();
            }


            Item GiveItem = ItemFactory.CreateGiftItem(PresentData, Habbo, ED, ED, NewItemId, 0, 0);
            if (GiveItem != null)
            {
                GameClient Receiver = PlusEnvironment.GetGame().GetClientManager().GetClientByUserID(Habbo.Id);
                if (Receiver != null)
                {
                    Receiver.GetHabbo().GetInventoryComponent().TryAddItem(GiveItem);
                    Receiver.SendPacket(new FurniListNotificationComposer(GiveItem.Id, 1));
                    Receiver.SendPacket(new PurchaseOKComposer());
                    Receiver.SendPacket(new FurniListAddComposer(GiveItem));
                    Receiver.SendPacket(new FurniListUpdateComposer());
                }

                if (Habbo.Id != Session.GetHabbo().Id&& !string.IsNullOrWhiteSpace(GiftMessage))
                {
                    PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_GiftGiver", 1);
                    if (Receiver != null)
                    {
                        PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Receiver, "ACH_GiftReceiver", 1);
                    }
                    PlusEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, QuestType.GIFT_OTHERS);
                }
            }

            Session.SendPacket(new PurchaseOKComposer(Item, PresentData));

            if (Item.CostCredits > 0)
            {
                Session.GetHabbo().Credits -= Item.CostCredits;
                Session.SendPacket(new CreditBalanceComposer(Session.GetHabbo().Credits));
            }

            if (Item.CostPixels > 0)
            {
                Session.GetHabbo().Duckets -= Item.CostPixels;
                Session.SendPacket(new HabboActivityPointNotificationComposer(Session.GetHabbo().Duckets, Session.GetHabbo().Duckets));
            }

            Session.GetHabbo().LastGiftPurchaseTime = DateTime.Now;
        }
Example #10
0
        public void TestWeaponFactorySpecialNameLevel1()
        {
            BaseWeapon BW = ItemFactory.CreateWeapon(1, true, true);

            Assert.AreEqual("Elderwood Sword", BW.Name);
        }
Example #11
0
        public void TestWeaponFactory()
        {
            BaseWeapon BW = ItemFactory.CreateWeapon(1);

            Assert.IsInstanceOfType(BW, typeof(BaseWeapon));
        }
Example #12
0
 public override Item[] GetDrops(Item tool)
 {
     // One per layer, plus one.
     return(new[] { ItemFactory.GetItem(332, 0, (byte)(Metadata + 2)) });
 }
Example #13
0
        public void CorrectInheritedTemplateForContext()
        {
            using (ShimsContext.Create())
            {
                var testItem = CreateTestItem();

                Template templateItem = new ShimTemplate()
                {
                    DescendsFromID = id => true,
                };
                ShimTemplateManager.GetTemplateItem = id =>
                {
                    return templateItem;
                };

                var contextProvider = new Mock<IContextProvider>();

                contextProvider.Setup(c => c.PageContextItem).Returns(testItem);

                var itemFactory = new ItemFactory(contextProvider.Object);
                var wrappedItem = itemFactory.GetContextItem<IScBaseTemplate>();

                Assert.IsNotNull(wrappedItem);
            }
        }
Example #14
0
 public static Inventory AddItemFromFactory(this Inventory inventory, int itemId) => inventory.AddItem(ItemFactory.CreateItem(itemId));
Example #15
0
 public void setFactory(ItemFactory.ItemFactory factory)
 {
     this.Factory = factory;
     Items = Factory.GetItems();
 }
Example #16
0
 public void SetUp()
 {
     factory = ItemFactory.Instance;
 }
 public void Awake()
 {
     instance = this;
     enabled = false;
 }
Example #18
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            SpriteBatch = new SpriteBatch(GraphicsDevice);
            world = new World(this);

            ItemFactory itemFactory = new ItemFactory(world, @"Items");

            EnemyFactory factory = new EnemyFactory(world, @"Enemy");
            world.EnemyFactory = factory;

            Map dungeonOne = MapLoader.Load("Content/Maps/DungeonOne_top.txt", "Content/Maps/DungeonOne_bottom.txt", "Content/Maps/DungeonOne_enemy.txt", world);
            world.CurrentDungeon = dungeonOne;

            Item item = itemFactory.Create("Super Awesome Potion");
            item.Position = new Vector2(70, 70);
            world.item = item;

            Animation animation = new Animation(1, 32, 32, 0, 0);
            Animation animation2 = new Animation(1, 256, 256, 0, 0);

            AnimatedSprite sprite = new AnimatedSprite(Content.Load<Texture2D>(@"Items\Weapons\Fireball"), new Dictionary<AnimationKey, Animation> { { AnimationKey.Right, animation } });
            AnimatedSprite light = new AnimatedSprite(Content.Load<Texture2D>(@"Enemy\LightBugAttack"), new Dictionary<AnimationKey, Animation> { { AnimationKey.Right, animation2 } });

            world.Player.Inventory.TempaQuips.Add(new Sword(Content.Load<Texture2D>(@"Gui\SwordIcon"), "Sword"));

            world.Player.Inventory.TempaQuips.Add((Gun)itemFactory.Create("Bobs Gun"));
            world.Player.Inventory.SelectRelativeTempaQuip(world.Player, 0);

            world.Player.Inventory.TempaQuips.Add(new Zapper(Content.Load<Texture2D>(@"Gui\GogglesIcon"), "BobsZapper", light));

            world.Player.Inventory.TempaQuips.Add(new SomeConeWeapon(Content.Load<Texture2D>(@"Gui\GravityBootsIcon"), "BobsCone", sprite.Clone()));

            world.Player.Inventory.TempaQuips.Add((EBall)itemFactory.Create("E-Ball Fire"));
            world.Player.Inventory.TempaQuips.Add((EBall)itemFactory.Create("E-Ball Ice"));
            world.Player.Inventory.TempaQuips.Add((EBall)itemFactory.Create("E-Ball Lightning"));
        }
Example #19
0
        public void CorrectDirectTemplatesForRenderingContext()
        {
            using (ShimsContext.Create())
            {
                // Rendering Item
                var scRenderingTemplateType = typeof(IScRenderingParametersTemplate);
                var renderingTemplateAttribute = (TemplateMappingAttribute)scRenderingTemplateType.GetCustomAttributes(typeof(TemplateMappingAttribute), false).First();
                var renderingTemplateId = renderingTemplateAttribute.Id;

                Field parametersTemplateField = new ShimField()
                {
                    NameGet = () => "Parameters Template",
                    ValueGet = () => renderingTemplateId.ToString(),
                };

                var testRenderingItem = CreateTestItem(fields: CreateTestFields(new List<Field>() { parametersTemplateField }));

                // Context Item

                var scBaseTemplateType = typeof(IScTemplate);
                var templateAttribute = (TemplateMappingAttribute)scBaseTemplateType.GetCustomAttributes(typeof(TemplateMappingAttribute), false).First();
                var templateId = templateAttribute.Id;
                var testItem = CreateTestItem(templateId: templateId);

                Template templateItem = new ShimTemplate()
                {
                    DescendsFromID = id => true,
                };
                ShimTemplateManager.GetTemplateItem = id =>
                {
                    return templateItem;
                };

                var contextProvider = new Mock<IContextProvider>();

                contextProvider.Setup(c => c.PageContextItem).Returns(testItem);
                contextProvider.Setup(c => c.RenderingContextItem).Returns(testItem);
                contextProvider.Setup(c => c.RenderingItem).Returns(testRenderingItem);
                contextProvider.Setup(c => c.RenderingParameters).Returns(new Dictionary<string, string>());

                var itemFactory = new ItemFactory(contextProvider.Object);
                var renderingModel = itemFactory.GetRenderingContextItems<IScTemplate, IScTemplate, IScRenderingParametersTemplate>();

                Assert.IsNotNull(renderingModel.PageItem);
                Assert.IsNotNull(renderingModel.RenderingItem);
                Assert.IsNotNull(renderingModel.RenderingParametersItem);
            }
        }
Example #20
0
 private void SpawnRods(Vector3 pos)
 {
     ItemFactory.SpawnRods(1, pos.RoundToInt().To2Int());
 }
Example #21
0
 public void SetUp()
 {
     _itemFactory = new ItemFactory();
     _receipt = new Receipt();
     _checkout = new CheckOut(_receipt);
 }
Example #22
0
 public override string ToString() => $"{Quantity}x{ItemFactory.GetItemNameById(ItemId)}";
Example #23
0
        public void CreateShieldTest(string name)
        {
            Shield shield = (Shield)ItemFactory.CreateItem(name);

            Assert.That(shield.title, Is.EqualTo(name));
        }
Example #24
0
 public override Item[] GetDrops()
 {
     return(new[] { ItemFactory.GetItem(397, Metadata, 1) });
 }
Example #25
0
        public void UnmappedTemplateForContext()
        {
            using (ShimsContext.Create())
            {
                var testItem = CreateTestItem();
                var contextProvider = new Mock<IContextProvider>();

                contextProvider.Setup(c => c.PageContextItem).Returns(testItem);

                var itemFactory = new ItemFactory(contextProvider.Object);
                var wrappedItem = itemFactory.GetContextItem<IScUnmappedTemplate>();
            }
        }
Example #26
0
        public void CreateWeaponTest(string name)
        {
            Weapon weapon = (Weapon)ItemFactory.CreateItem(name);

            Assert.That(weapon.title, Is.EqualTo(name));
        }
 public SimpleDependencyFactory(ItemFactory item_factory)
 {
   this.item_factory = item_factory;
 }
Example #28
0
        public void CreateArmourTest(string name)
        {
            Armour armour = (Armour)ItemFactory.CreateItem(name);

            Assert.That(armour.title, Is.EqualTo(name));
        }
Example #29
0
    protected virtual void Drag(int i, Item item)
    {
        ItemFactory factory = new ItemFactory();
        draggingItem = true;
        prevIndex = i;
        draggedItem = item;

        //delete the item by making it an empty item
        current [i] = factory.CreateItem (current [i].Type);
    }
Example #30
0
        public override void SpawnToPlayers(Player[] players)
        {
            {
                Player fake = new Player(null, null)
                {
                    ClientUuid = Uuid,
                    EntityId   = EntityId,
                    NameTag    = NameTag,
                    Skin       = Skin
                };

                McpePlayerList playerList = McpePlayerList.CreateObject();
                playerList.records = new PlayerAddRecords {
                    fake
                };
                Level.RelayBroadcast(players, Level.CreateMcpeBatch(playerList.Encode()));
                playerList.records = null;
                playerList.PutPool();
            }

            {
                McpeAddPlayer message = McpeAddPlayer.CreateObject();
                message.uuid            = Uuid;
                message.username        = NameTag;
                message.entityIdSelf    = EntityId;
                message.runtimeEntityId = EntityId;
                message.x        = KnownPosition.X;
                message.y        = KnownPosition.Y;
                message.z        = KnownPosition.Z;
                message.yaw      = KnownPosition.Yaw;
                message.headYaw  = KnownPosition.HeadYaw;
                message.pitch    = KnownPosition.Pitch;
                message.metadata = GetMetadata();
                Level.RelayBroadcast(players, message);
            }
            {
                McpeMobEquipment message = McpeMobEquipment.CreateObject();
                message.runtimeEntityId = EntityId;
                message.item            = ItemInHand;
                message.slot            = 0;
                Level.RelayBroadcast(players, message);
            }
            {
                McpeMobArmorEquipment armorEquipment = McpeMobArmorEquipment.CreateObject();
                armorEquipment.runtimeEntityId = EntityId;
                armorEquipment.helmet          = ItemFactory.GetItem(Helmet);
                armorEquipment.chestplate      = ItemFactory.GetItem(Chest);
                armorEquipment.leggings        = ItemFactory.GetItem(Leggings);
                armorEquipment.boots           = ItemFactory.GetItem(Boots);
                Level.RelayBroadcast(players, armorEquipment);
            }

            //{
            //	Player fake = new Player(null, null)
            //	{
            //		ClientUuid = Uuid,
            //		EntityId = EntityId,
            //		NameTag = NameTag,
            //		Skin = Skin
            //	};

            //	McpePlayerList playerList = McpePlayerList.CreateObject();
            //	playerList.records = new PlayerRemoveRecords {fake};
            //	Level.RelayBroadcast(players, Level.CreateMcpeBatch(playerList.Encode()));
            //	playerList.records = null;
            //	playerList.PutPool();
            //}

            {
                McpeSetEntityData setEntityData = McpeSetEntityData.CreateObject();
                setEntityData.runtimeEntityId = EntityId;
                setEntityData.metadata        = GetMetadata();
                Level?.RelayBroadcast(players, setEntityData);
            }
        }
Example #31
0
        public void Parse(GameClient Session, ClientPacket Packet)
        {
            int Data1      = Packet.PopInt(); // ELEMENTO 1
            int Data2      = Packet.PopInt(); // ELEMENTO 2
            int Data3      = Packet.PopInt(); // ELEMENTO 3
            int Data4      = Packet.PopInt(); // SELECTOR
            var RewardName = "";
            var NuxGift    = RavenEnvironment.GetGame().GetNuxUserGiftsListManager().NuxUserGiftsList;

            switch (Data4)
            {
            case 0:
                switch (NuxGift.Type[0])
                {
                case "diamonds":
                    string[] Posibility = NuxGift.Reward[0].Split(',');

                    int Posibility1 = int.Parse(Posibility[0]);
                    int Posibility2 = int.Parse(Posibility[1]);

                    int RewardDiamonds           = RandomNumber.GenerateRandom(Posibility1, Posibility2);
                    Session.GetHabbo().Diamonds += RewardDiamonds;
                    Session.SendMessage(new HabboActivityPointNotificationComposer(Session.GetHabbo().Diamonds, RewardDiamonds, 5));
                    break;

                case "honor":
                    string[] Posibilitya = NuxGift.Reward[0].Split(',');

                    int Posibility1a = int.Parse(Posibilitya[0]);
                    int Posibility2a = int.Parse(Posibilitya[1]);

                    int RewardHonor = RandomNumber.GenerateRandom(Posibility1a, Posibility2a);
                    Session.GetHabbo().GOTWPoints += RewardHonor;
                    Session.SendMessage(new HabboActivityPointNotificationComposer(Session.GetHabbo().GOTWPoints, RewardHonor, 103));
                    break;

                case "item":
                    int      RewardItem = RandomNumber.GenerateRandom(1, 10);
                    string[] Furnis     = NuxGift.Reward[0].Split(',');

                    string[] Present  = Furnis[0].Split(':');
                    string[] Present1 = Furnis[1].Split(':');
                    string[] Present2 = Furnis[2].Split(':');
                    string[] Present3 = Furnis[3].Split(':');
                    string[] Present4 = Furnis[4].Split(':');
                    string[] Present5 = Furnis[5].Split(':');
                    string[] Present6 = Furnis[6].Split(':');
                    string[] Present7 = Furnis[7].Split(':');
                    string[] Present8 = Furnis[8].Split(':');
                    string[] Present9 = Furnis[9].Split(':');

                    var RewardItemId = 0;

                    switch (RewardItem)
                    {
                    case 1:
                        RewardItemId = int.Parse(Present[0]);             // VIP - club_sofa
                        RewardName   = Present[1];
                        break;

                    case 2:
                        RewardItemId = int.Parse(Present1[0]);             // VIP - club_sofa
                        RewardName   = Present1[1];
                        break;

                    case 3:
                        RewardItemId = int.Parse(Present2[0]);             // VIP - club_sofa
                        RewardName   = Present2[1];
                        break;

                    case 4:
                        RewardItemId = int.Parse(Present3[0]);             // VIP - club_sofa
                        RewardName   = Present3[1];
                        break;

                    case 5:
                        RewardItemId = int.Parse(Present4[0]);             // VIP - club_sofa
                        RewardName   = Present4[1];
                        break;

                    case 6:
                        RewardItemId = int.Parse(Present5[0]);             // VIP - club_sofa
                        RewardName   = Present5[1];
                        break;

                    case 7:
                        RewardItemId = int.Parse(Present6[0]);             // VIP - club_sofa
                        RewardName   = Present6[1];
                        break;

                    case 8:
                        RewardItemId = int.Parse(Present7[0]);             // VIP - club_sofa
                        RewardName   = Present7[1];
                        break;

                    case 9:
                        RewardItemId = int.Parse(Present8[0]);             // VIP - club_sofa
                        RewardName   = Present8[1];
                        break;

                    case 10:
                        RewardItemId = int.Parse(Present9[0]);             // VIP - club_sofa
                        RewardName   = Present9[1];
                        break;
                    }

                    ItemData Item = null;
                    if (!RavenEnvironment.GetGame().GetItemManager().GetItem(RewardItemId, out Item))
                    {
                        return;
                    }

                    Item GiveItem = ItemFactory.CreateSingleItemNullable(Item, Session.GetHabbo(), "", "");
                    if (GiveItem != null)
                    {
                        Session.GetHabbo().GetInventoryComponent().TryAddItem(GiveItem);
                        Session.SendMessage(RoomNotificationComposer.SendBubble("image2", "Acabas de recibir un " + RewardName + ".\n\n¡Corre, " + Session.GetHabbo().Username + ", revisa tu inventario, hay algo nuevo al parecer!", "inventory/open/furni"));
                        Session.SendMessage(new FurniListNotificationComposer(GiveItem.Id, 1));
                        Session.SendMessage(new FurniListUpdateComposer());
                    }

                    Session.GetHabbo().GetInventoryComponent().UpdateItems(false);
                    break;
                }
                break;

            case 1:
                switch (NuxGift.Type[1])
                {
                case "diamonds":
                    string[] Posibility = NuxGift.Reward[1].Split(',');

                    int Posibility1 = int.Parse(Posibility[0]);
                    int Posibility2 = int.Parse(Posibility[1]);

                    int RewardDiamonds           = RandomNumber.GenerateRandom(Posibility1, Posibility2);
                    Session.GetHabbo().Diamonds += RewardDiamonds;
                    Session.SendMessage(new HabboActivityPointNotificationComposer(Session.GetHabbo().Diamonds, RewardDiamonds, 5));
                    break;

                case "honor":
                    string[] Posibilitya = NuxGift.Reward[1].Split(',');

                    int Posibility1a = int.Parse(Posibilitya[0]);
                    int Posibility2a = int.Parse(Posibilitya[1]);

                    int RewardHonor = RandomNumber.GenerateRandom(Posibility1a, Posibility2a);
                    Session.GetHabbo().GOTWPoints += RewardHonor;
                    Session.SendMessage(new HabboActivityPointNotificationComposer(Session.GetHabbo().GOTWPoints, RewardHonor, 103));
                    break;

                case "item":
                    int      RewardItem = RandomNumber.GenerateRandom(1, 10);
                    string[] Furnis     = NuxGift.Reward[1].Split(',');

                    string[] Present  = Furnis[0].Split(':');
                    string[] Present1 = Furnis[1].Split(':');
                    string[] Present2 = Furnis[2].Split(':');
                    string[] Present3 = Furnis[3].Split(':');
                    string[] Present4 = Furnis[4].Split(':');
                    string[] Present5 = Furnis[5].Split(':');
                    string[] Present6 = Furnis[6].Split(':');
                    string[] Present7 = Furnis[7].Split(':');
                    string[] Present8 = Furnis[8].Split(':');
                    string[] Present9 = Furnis[9].Split(':');

                    var RewardItemId = 0;

                    switch (RewardItem)
                    {
                    case 1:
                        RewardItemId = int.Parse(Present[0]);             // VIP - club_sofa
                        RewardName   = Present[1];
                        break;

                    case 2:
                        RewardItemId = int.Parse(Present1[0]);             // VIP - club_sofa
                        RewardName   = Present1[1];
                        break;

                    case 3:
                        RewardItemId = int.Parse(Present2[0]);             // VIP - club_sofa
                        RewardName   = Present2[1];
                        break;

                    case 4:
                        RewardItemId = int.Parse(Present3[0]);             // VIP - club_sofa
                        RewardName   = Present3[1];
                        break;

                    case 5:
                        RewardItemId = int.Parse(Present4[0]);             // VIP - club_sofa
                        RewardName   = Present4[1];
                        break;

                    case 6:
                        RewardItemId = int.Parse(Present5[0]);             // VIP - club_sofa
                        RewardName   = Present5[1];
                        break;

                    case 7:
                        RewardItemId = int.Parse(Present6[0]);             // VIP - club_sofa
                        RewardName   = Present6[1];
                        break;

                    case 8:
                        RewardItemId = int.Parse(Present7[0]);             // VIP - club_sofa
                        RewardName   = Present7[1];
                        break;

                    case 9:
                        RewardItemId = int.Parse(Present8[0]);             // VIP - club_sofa
                        RewardName   = Present8[1];
                        break;

                    case 10:
                        RewardItemId = int.Parse(Present9[0]);             // VIP - club_sofa
                        RewardName   = Present9[1];
                        break;
                    }

                    ItemData Item = null;
                    if (!RavenEnvironment.GetGame().GetItemManager().GetItem(RewardItemId, out Item))
                    {
                        return;
                    }

                    Item GiveItem = ItemFactory.CreateSingleItemNullable(Item, Session.GetHabbo(), "", "");
                    if (GiveItem != null)
                    {
                        Session.GetHabbo().GetInventoryComponent().TryAddItem(GiveItem);
                        Session.SendMessage(RoomNotificationComposer.SendBubble("image2", "Acabas de recibir un " + RewardName + ".\n\n¡Corre, " + Session.GetHabbo().Username + ", revisa tu inventario, hay algo nuevo al parecer!", "inventory/open/furni"));
                        Session.SendMessage(new FurniListNotificationComposer(GiveItem.Id, 1));
                        Session.SendMessage(new FurniListUpdateComposer());
                    }

                    Session.GetHabbo().GetInventoryComponent().UpdateItems(false);
                    break;
                }
                break;

            case 2:
                switch (NuxGift.Type[2])
                {
                case "diamonds":
                    string[] Posibility = NuxGift.Reward[2].Split(',');

                    int Posibility1 = int.Parse(Posibility[0]);
                    int Posibility2 = int.Parse(Posibility[1]);

                    int RewardDiamonds           = RandomNumber.GenerateRandom(Posibility1, Posibility2);
                    Session.GetHabbo().Diamonds += RewardDiamonds;
                    Session.SendMessage(new HabboActivityPointNotificationComposer(Session.GetHabbo().Diamonds, RewardDiamonds, 5));
                    break;

                case "honor":
                    string[] Posibilitya = NuxGift.Reward[2].Split(',');

                    int Posibility1a = int.Parse(Posibilitya[0]);
                    int Posibility2a = int.Parse(Posibilitya[1]);

                    int RewardHonor = RandomNumber.GenerateRandom(Posibility1a, Posibility2a);
                    Session.GetHabbo().GOTWPoints += RewardHonor;
                    Session.SendMessage(new HabboActivityPointNotificationComposer(Session.GetHabbo().GOTWPoints, RewardHonor, 103));
                    break;

                case "item":
                    int      RewardItem = RandomNumber.GenerateRandom(1, 10);
                    string[] Furnis     = NuxGift.Reward[2].Split(',');

                    string[] Present  = Furnis[0].Split(':');
                    string[] Present1 = Furnis[1].Split(':');
                    string[] Present2 = Furnis[2].Split(':');
                    string[] Present3 = Furnis[3].Split(':');
                    string[] Present4 = Furnis[4].Split(':');
                    string[] Present5 = Furnis[5].Split(':');
                    string[] Present6 = Furnis[6].Split(':');
                    string[] Present7 = Furnis[7].Split(':');
                    string[] Present8 = Furnis[8].Split(':');
                    string[] Present9 = Furnis[9].Split(':');

                    var RewardItemId = 0;

                    switch (RewardItem)
                    {
                    case 1:
                        RewardItemId = int.Parse(Present[0]);             // VIP - club_sofa
                        RewardName   = Present[1];
                        break;

                    case 2:
                        RewardItemId = int.Parse(Present1[0]);             // VIP - club_sofa
                        RewardName   = Present1[1];
                        break;

                    case 3:
                        RewardItemId = int.Parse(Present2[0]);             // VIP - club_sofa
                        RewardName   = Present2[1];
                        break;

                    case 4:
                        RewardItemId = int.Parse(Present3[0]);             // VIP - club_sofa
                        RewardName   = Present3[1];
                        break;

                    case 5:
                        RewardItemId = int.Parse(Present4[0]);             // VIP - club_sofa
                        RewardName   = Present4[1];
                        break;

                    case 6:
                        RewardItemId = int.Parse(Present5[0]);             // VIP - club_sofa
                        RewardName   = Present5[1];
                        break;

                    case 7:
                        RewardItemId = int.Parse(Present6[0]);             // VIP - club_sofa
                        RewardName   = Present6[1];
                        break;

                    case 8:
                        RewardItemId = int.Parse(Present7[0]);             // VIP - club_sofa
                        RewardName   = Present7[1];
                        break;

                    case 9:
                        RewardItemId = int.Parse(Present8[0]);             // VIP - club_sofa
                        RewardName   = Present8[1];
                        break;

                    case 10:
                        RewardItemId = int.Parse(Present9[0]);             // VIP - club_sofa
                        RewardName   = Present9[1];
                        break;
                    }

                    ItemData Item = null;
                    if (!RavenEnvironment.GetGame().GetItemManager().GetItem(RewardItemId, out Item))
                    {
                        return;
                    }

                    Item GiveItem = ItemFactory.CreateSingleItemNullable(Item, Session.GetHabbo(), "", "");
                    if (GiveItem != null)
                    {
                        Session.GetHabbo().GetInventoryComponent().TryAddItem(GiveItem);
                        Session.SendMessage(RoomNotificationComposer.SendBubble("image2", "Acabas de recibir un " + RewardName + ".\n\n¡Corre, " + Session.GetHabbo().Username + ", revisa tu inventario, hay algo nuevo al parecer!", "inventory/open/furni"));
                        Session.SendMessage(new FurniListNotificationComposer(GiveItem.Id, 1));
                        Session.SendMessage(new FurniListUpdateComposer());
                    }

                    Session.GetHabbo().GetInventoryComponent().UpdateItems(false);
                    break;
                }
                break;
            }
        }
Example #32
0
        public void TestWeaponFactoryNameLevel1()
        {
            BaseWeapon BW = ItemFactory.CreateWeapon(1);

            Assert.AreEqual("Wood Sword", BW.Name);
        }
Example #33
0
        public void Execute(bool isNew, bool avatarBackward, bool enemyBackward)
        {
            var previousWeeklyState  = _initialState.GetWeeklyArenaState(0);
            var previousAvatar1State = _initialState.GetAvatarState(_avatar1Address);

            previousAvatar1State.level = 10;
            var prevScore = previousWeeklyState[_avatar1Address].Score;

            if (isNew)
            {
                previousWeeklyState.Remove(_avatar1Address);
            }

            var previousState = _initialState.SetState(
                _avatar1Address,
                previousAvatar1State.Serialize());

            var itemIds = _tableSheets.WeeklyArenaRewardSheet.Values
                          .Select(r => r.Reward.ItemId)
                          .ToList();

            Assert.All(itemIds, id => Assert.False(previousAvatar1State.inventory.HasItem(id)));

            var row     = _tableSheets.CostumeStatSheet.Values.First(r => r.StatType == StatType.ATK);
            var costume = (Costume)ItemFactory.CreateItem(
                _tableSheets.ItemSheet[row.CostumeId], new TestRandom());

            costume.equipped = true;
            previousAvatar1State.inventory.AddItem(costume);

            var row2         = _tableSheets.CostumeStatSheet.Values.First(r => r.StatType == StatType.DEF);
            var enemyCostume = (Costume)ItemFactory.CreateItem(
                _tableSheets.ItemSheet[row2.CostumeId], new TestRandom());

            enemyCostume.equipped = true;
            var enemyAvatarState = _initialState.GetAvatarState(_avatar2Address);

            enemyAvatarState.inventory.AddItem(enemyCostume);

            if (avatarBackward)
            {
                previousState =
                    previousState.SetState(_avatar1Address, previousAvatar1State.Serialize());
            }
            else
            {
                previousState = previousState
                                .SetState(
                    _avatar1Address.Derive(LegacyInventoryKey),
                    previousAvatar1State.inventory.Serialize())
                                .SetState(
                    _avatar1Address.Derive(LegacyWorldInformationKey),
                    previousAvatar1State.worldInformation.Serialize())
                                .SetState(
                    _avatar1Address.Derive(LegacyQuestListKey),
                    previousAvatar1State.questList.Serialize())
                                .SetState(_avatar1Address, previousAvatar1State.SerializeV2());
            }

            if (enemyBackward)
            {
                previousState =
                    previousState.SetState(_avatar2Address, enemyAvatarState.Serialize());
            }
            else
            {
                previousState = previousState
                                .SetState(
                    _avatar2Address.Derive(LegacyInventoryKey),
                    enemyAvatarState.inventory.Serialize())
                                .SetState(
                    _avatar2Address.Derive(LegacyWorldInformationKey),
                    enemyAvatarState.worldInformation.Serialize())
                                .SetState(
                    _avatar2Address.Derive(LegacyQuestListKey),
                    enemyAvatarState.questList.Serialize())
                                .SetState(_avatar2Address, enemyAvatarState.SerializeV2());
            }

            var action = new RankingBattle
            {
                avatarAddress      = _avatar1Address,
                enemyAddress       = _avatar2Address,
                weeklyArenaAddress = _weeklyArenaAddress,
                costumeIds         = new List <Guid> {
                    costume.ItemId
                },
                equipmentIds  = new List <Guid>(),
                consumableIds = new List <Guid>(),
            };

            Assert.Null(action.Result);

            var nextState = action.Execute(new ActionContext()
            {
                PreviousStates = previousState,
                Signer         = _agent1Address,
                Random         = new TestRandom(),
                Rehearsal      = false,
            });

            var nextAvatar1State = nextState.GetAvatarStateV2(_avatar1Address);
            var nextWeeklyState  = nextState.GetWeeklyArenaState(0);

            Assert.Contains(nextAvatar1State.inventory.Materials, i => itemIds.Contains(i.Id));
            Assert.NotNull(action.Result);
            Assert.NotNull(action.ArenaInfo);
            Assert.NotNull(action.EnemyArenaInfo);
            Assert.NotNull(action.EnemyAvatarState);
            Assert.Contains(typeof(GetReward), action.Result.Select(e => e.GetType()));
            Assert.Equal(BattleLog.Result.Win, action.Result.result);
            Assert.True(nextWeeklyState[_avatar1Address].Score > prevScore);

            // Check simulation result equal.
            var simulator = new RankingSimulator(
                new TestRandom(),
                previousAvatar1State,
                action.EnemyAvatarState,
                action.consumableIds,
                _tableSheets.GetRankingSimulatorSheets(),
                RankingBattle.StageId,
                action.ArenaInfo,
                action.EnemyArenaInfo,
                _tableSheets.CostumeStatSheet);

            simulator.Simulate();

            BattleLog log    = simulator.Log;
            BattleLog result = action.Result;

            Assert.Equal(result.score, log.score);
            Assert.Equal(result.Count, log.Count);
            Assert.Equal(result.result, log.result);
        }
Example #34
0
        public void AttackCurrentMonster()
        {
            if (CurrentWeapon == null)
            {
                RaiseMessage("You must select a weapon, to attack.");
                return;
            }

            // Determine damage to monster
            int damageToMonster = RandomNumberGenerator.NumberBetween(CurrentWeapon.MinimumDamage, CurrentWeapon.MaximumDamage);

            if (damageToMonster == 0)
            {
                RaiseMessage($"You missed the {CurrentMonster.Name}.");
            }
            else
            {
                CurrentMonster.HitPoints -= damageToMonster;
                RaiseMessage($"You hit the {CurrentMonster.Name} for {damageToMonster} points.");
            }

            // If monster if killed, collect rewards and loot
            if (CurrentMonster.HitPoints <= 0)
            {
                RaiseMessage("");
                RaiseMessage($"You defeated the {CurrentMonster.Name}!");

                CurrentPlayer.ExperiencePoints += CurrentMonster.RewardExperiencePoints;
                RaiseMessage($"You receive {CurrentMonster.RewardExperiencePoints} experience points.");

                CurrentPlayer.Gold += CurrentMonster.RewardGold;
                RaiseMessage($"You receive {CurrentMonster.RewardGold} gold.");

                foreach (ItemQuantity itemQuantity in CurrentMonster.Inventory)
                {
                    GameItems item = ItemFactory.CreateGameItem(itemQuantity.ItemID);
                    CurrentPlayer.AddItemToInventory(item);
                    RaiseMessage($"You receive {itemQuantity.Quantity} {item.Name}.");
                }

                // Get another monster to fight
                GetMonsterAtLocation();
            }
            else
            {
                // If monster is still alive, let the monster attack
                int damageToPlayer = RandomNumberGenerator.NumberBetween(CurrentMonster.MinimumDamage, CurrentMonster.MaximumDamage);

                if (damageToPlayer == 0)
                {
                    RaiseMessage("The monster attacks, but misses you.");
                }
                else
                {
                    CurrentPlayer.HitPoints -= damageToPlayer;
                    RaiseMessage($"The {CurrentMonster.Name} hit you for {damageToPlayer} points.");
                }

                // If player is killed, move them back to their home.
                if (CurrentPlayer.HitPoints <= 0)
                {
                    RaiseMessage("");
                    RaiseMessage($"The {CurrentMonster.Name} killed you.");

                    CurrentLocation         = CurrentWorld.LocationAt(0, -1); // Player's home
                    CurrentPlayer.HitPoints = CurrentPlayer.Level * 10;       // Completely heal the player
                }
            }
        }
Example #35
0
        public override bool Parse(ItemFactory itemFactory, ITextProvider text, TokenStream tokens)
        {
            if (tokens.CurrentToken.TokenType != CssTokenType.OpenSquareBracket)
            {
                return(false);
            }

            // Collect each piece of "[ name = value ]", any of which could be missing after the '['

            OpenBracket = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.SquareBracket);

            if (ItemName.IsAtItemName(tokens))
            {
                AttributeName = itemFactory.CreateSpecific <ItemName>(this);
                AttributeName.Parse(itemFactory, text, tokens);
                AttributeName.Context = CssClassifierContextCache.FromTypeEnum(CssClassifierContextType.ElementAttribute);
                Children.Add(AttributeName);
            }
            else
            {
                OpenBracket.AddParseError(ParseErrorType.AttributeSelectorElementMissing, ParseErrorLocation.AfterItem);
            }

            switch (tokens.CurrentToken.TokenType)
            {
            case CssTokenType.BeginsWith:           // ^=
            case CssTokenType.EndsWith:             // $=
            case CssTokenType.OneOf:                // ~=
            case CssTokenType.ListBeginsWith:       // |=
            case CssTokenType.ContainsString:       // *=
            case CssTokenType.Equals:               // =
                Operation = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.SelectorOperator);
                break;
            }

            if (tokens.CurrentToken.TokenType == CssTokenType.Identifier)
            {
                AttributeValue = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.ElementAttributeValue);
            }
            else if (tokens.CurrentToken.IsString())
            {
                AttributeValue = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.ElementAttributeValue);
            }

            if (AttributeValue != null && Operation == null)
            {
                AttributeValue.AddParseError(ParseErrorType.AttributeSelectorOperationMissing, ParseErrorLocation.BeforeItem);
            }
            else if (AttributeValue == null && Operation != null)
            {
                Operation.AddParseError(ParseErrorType.AttributeSelectorValueMissing, ParseErrorLocation.AfterItem);
            }

            if (AttributeValue != null && tokens.CurrentToken.TokenType == CssTokenType.Identifier)
            {
                OperationModifier = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.SelectorOperator);

                if (OperationModifier.Length != 1 || text[OperationModifier.Start] != 'i')
                {
                    OperationModifier.AddParseError(ParseErrorType.UnexpectedToken, ParseErrorLocation.WholeItem);
                }
            }

            if (tokens.CurrentToken.TokenType == CssTokenType.CloseSquareBracket)
            {
                CloseBracket = Children.AddCurrentAndAdvance(tokens, CssClassifierContextType.SquareBracket);
            }
            else
            {
                AddParseError(ParseErrorType.AttributeSelectorCloseBracketMissing, ParseErrorLocation.AfterItem);
            }

            return(Children.Count > 0);
        }
Example #36
0
        public void Execute(int avatarLevel, int worldId, int stageId, int playCount, bool backward, bool isLock, bool isClearedBefore)
        {
            Assert.True(_tableSheets.WorldSheet.TryGetValue(worldId, out var worldRow));
            Assert.True(stageId >= worldRow.StageBegin);
            Assert.True(stageId <= worldRow.StageEnd);
            Assert.True(_tableSheets.StageSheet.TryGetValue(stageId, out _));

            var previousAvatarState = _initialState.GetAvatarStateV2(_avatarAddress);

            previousAvatarState.level = avatarLevel;
            var clearedStageId = _tableSheets.StageSheet.First?.Id ?? 0;

            clearedStageId = isClearedBefore ? Math.Max(clearedStageId, stageId - 1) : stageId - 1;
            clearedStageId = playCount > 1 ? clearedStageId + 1 : clearedStageId;
            previousAvatarState.worldInformation = new WorldInformation(
                0,
                _tableSheets.WorldSheet,
                clearedStageId);

            List <Guid> costumes = new List <Guid>();
            IRandom     random   = new TestRandom();

            if (avatarLevel >= GameConfig.RequireCharacterLevel.CharacterFullCostumeSlot)
            {
                var costumeId = _tableSheets
                                .CostumeItemSheet
                                .Values
                                .First(r => r.ItemSubType == ItemSubType.FullCostume)
                                .Id;

                var costume = (Costume)ItemFactory.CreateItem(
                    _tableSheets.ItemSheet[costumeId], random);
                previousAvatarState.inventory.AddItem(costume);
                costumes.Add(costume.ItemId);
            }

            List <Guid> equipments = new List <Guid>();

            if (avatarLevel >= GameConfig.RequireCharacterLevel.CharacterEquipmentSlotWeapon)
            {
                var weaponId = _tableSheets
                               .EquipmentItemSheet
                               .Values
                               .Where(r => r.ItemSubType == ItemSubType.Weapon)
                               .OrderBy(r => r.Stat.ValueAsInt)
                               .Last()
                               .Id;

                var weapon = ItemFactory.CreateItem(
                    _tableSheets.EquipmentItemSheet[weaponId],
                    random)
                             as Equipment;
                equipments.Add(weapon.ItemId);
                OrderLock?orderLock = null;
                if (isLock)
                {
                    orderLock = new OrderLock(Guid.NewGuid());
                }

                previousAvatarState.inventory.AddItem(weapon, iLock: orderLock);
            }

            if (avatarLevel >= GameConfig.RequireCharacterLevel.CharacterEquipmentSlotArmor)
            {
                var armorId = _tableSheets
                              .EquipmentItemSheet
                              .Values
                              .Where(r => r.ItemSubType == ItemSubType.Armor)
                              .OrderBy(r => r.Stat.ValueAsInt)
                              .Last()
                              .Id;

                var armor = ItemFactory.CreateItem(
                    _tableSheets.EquipmentItemSheet[armorId],
                    random)
                            as Equipment;
                equipments.Add(armor.ItemId);
                previousAvatarState.inventory.AddItem(armor);
            }

            var mailEquipmentRow = _tableSheets.EquipmentItemSheet.Values.First();
            var mailEquipment    = ItemFactory.CreateItemUsable(mailEquipmentRow, default, 0);
Example #37
0
        public void CorrectInheritedTemplatesForRenderingContext()
        {
            using (ShimsContext.Create())
            {
                var tId = new Guid("{02F5002C-325E-4E5A-9C93-A97724ED3400}");
                var testItem = CreateTestItem(templateId: tId);

                Template templateItem = new ShimTemplate()
                {
                    DescendsFromID = id => true,
                };
                ShimTemplateManager.GetTemplateItem = id =>
                {
                    return templateItem;
                };

                var contextProvider = new Mock<IContextProvider>();

                contextProvider.Setup(c => c.PageContextItem).Returns(testItem);
                contextProvider.Setup(c => c.RenderingContextItem).Returns(testItem);
                contextProvider.Setup(c => c.RenderingItem).Returns(testItem);
                contextProvider.Setup(c => c.RenderingParameters).Returns(new Dictionary<string, string>());

                var itemFactory = new ItemFactory(contextProvider.Object);
                var wrappedItem = itemFactory.GetContextItem<IScTemplate>();

                Assert.IsNotNull(wrappedItem);
            }
        }
Example #38
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="node">対象Node</param>
        /// <param name="semanticModel">対象ソースのsemanticModel</param>
        /// <param name="parent">親IAnalyzeItem</param>
        /// <param name="container">イベントコンテナ</param>
        public ItemFor(ForStatementSyntax node, SemanticModel semanticModel, IAnalyzeItem parent, EventContainer container) : base(parent, node, semanticModel, container)
        {
            ItemType = ItemTypes.MethodStatement;

            // 宣言部
            if (node.Declaration != null)
            {
                // 型設定
                IsVar = node.Declaration.Type.IsVar;
                var declaredSymbol = semanticModel.GetDeclaredSymbol(node.Declaration.Variables.First());
                var parts          = ((ILocalSymbol)declaredSymbol).Type.ToDisplayParts(SymbolDisplayFormat.MinimallyQualifiedFormat);
                foreach (var part in parts)
                {
                    // スペースの場合は型設定に含めない
                    if (part.Kind == SymbolDisplayPartKind.Space)
                    {
                        continue;
                    }

                    var name = Expression.GetSymbolName(part, true);
                    var type = Expression.GetSymbolTypeName(part.Symbol);
                    if (part.Kind == SymbolDisplayPartKind.ClassName)
                    {
                        // 外部ファイル参照イベント発行
                        RaiseOtherFileReferenced(node, part.Symbol);
                    }

                    Types.Add(new Expression(name, type));
                }

                // ローカル定義
                foreach (var variable in node.Declaration.Variables)
                {
                    var declaration = semanticModel.GetOperation(variable);
                    Declarations.Add(OperationFactory.GetExpressionList(declaration, container));
                }
            }
            else if (node.Initializers != null)
            {
                // 既存定義
                foreach (var initializer in node.Initializers)
                {
                    var declaration = semanticModel.GetOperation(initializer);
                    Declarations.Add(OperationFactory.GetExpressionList(declaration, container));
                }
            }

            // 計算部
            foreach (var increment in node.Incrementors)
            {
                var incrementOperator = semanticModel.GetOperation(increment);
                Incrementors.Add(OperationFactory.GetExpressionList(incrementOperator, container));
            }

            // 条件部
            var condition = semanticModel.GetOperation(node.Condition);

            Conditions.AddRange(OperationFactory.GetExpressionList(condition, container));

            // 内部処理設定
            var block = node.Statement as BlockSyntax;

            foreach (var statement in block.Statements)
            {
                Members.Add(ItemFactory.Create(statement, semanticModel, container, this));
            }
        }
Example #39
0
 public Texture ReadFromDisk(int ItemID, IHue Hue)
 {
     ItemID &= 0x3fff;
     if ((ItemID >= 0x3584) && (ItemID <= 0x35a1))
     {
         return Hue.GetGump(0x91b + (ItemID - 0x3584));
     }
     if (this.m_Factory == null)
     {
         this.m_Factory = new ItemFactory(this);
     }
     return this.m_Factory.Load(ItemID, Hue);
 }
Example #40
0
 public void Execute(int level, int expectedLevel, int expectedGold, bool backward)
 {
     var row        = _tableSheets.EquipmentItemSheet.Values.First(r => r.Grade == 1);
     var equipment  = (Equipment)ItemFactory.CreateItemUsable(row, default, 0, level);
 public AffixManagerTest()
 {
     _affixFactory = new AffixFactory();
     _itemFactory  = new ItemFactory(_affixFactory);
 }
Example #42
0
 public override Item[] GetDrops(Item tool)
 {
     return(new[] { ItemFactory.GetItem(158, Metadata, 2) });
 }
Example #43
0
    public void OnDrawGizmos()
    {
        if (Application.isPlaying)
        {
            return;
        }

        bool layoutViz = false;

        // Dont show gizmos over item references that live in an inactive layout
        if (transform.parent)
        {
            ItemLayout layout = transform.parent.GetComponent <ItemLayout>();

            layoutViz = layout.visualizeAllRandom;

            if (layout && !layout.visualize)
            {
                return;
            }
        }

        bool previzRandom    = (visualizeRandomness && Selection.activeGameObject == this.gameObject) || layoutViz;
        int  previzInstances = previzRandom ? (instanceCount > 1 ? instanceCount : 15) : 1;

        System.Random rnd = new System.Random(itemId.GetHashCode());

        if (procedural)
        {
            for (int i = 0; i < previzInstances; i++)
            {
                Matrix4x4 previzRandomMatrix = Matrix4x4.identity;

                if (previzRandom)
                {
                    Vector3 randomOffset   = ItemFactory.GetRandomPositionOffset(randomPositionAmplitude, rnd);
                    Vector3 randomRotation = ItemFactory.GetRandomRotationOffset(randomRotationAmplitude, rnd);
                    Vector3 randomScale    = ItemFactory.GetRandomScaleOffset(randomScaleAmplitude, uniformScale, rnd);

                    previzRandomMatrix = Matrix4x4.TRS(randomOffset, Quaternion.Euler(randomRotation), randomScale);
                }

                Gizmos.matrix = this.transform.localToWorldMatrix * previzRandomMatrix;
                Gizmos.color  = Color.yellow;
                Gizmos.DrawWireCube(Vector3.zero, this.availableProceduralVolume.size);

                Gizmos.color = new Color(0f, 1f, 1f, .5f);
                Gizmos.DrawCube(GetAnchorPositionWorld() - this.transform.position, GetAnchorPlaneSize());
            }
        }
        else
        {
            LoadMeshes();

            Bounds itemBounds = CalculateBoundsWorldSpace(1);
            Gizmos.color = Color.yellow;
            Gizmos.DrawWireCube(itemBounds.center, itemBounds.size);

            for (int i = 0; i < previzInstances; i++)
            {
                Matrix4x4 previzRandomMatrix = Matrix4x4.identity;

                if (previzRandom)
                {
                    Vector3 randomOffset   = ItemFactory.GetRandomPositionOffset(randomPositionAmplitude, rnd);
                    Vector3 randomRotation = ItemFactory.GetRandomRotationOffset(randomRotationAmplitude, rnd);
                    Vector3 randomScale    = ItemFactory.GetRandomScaleOffset(randomScaleAmplitude, uniformScale, rnd);

                    previzRandomMatrix = Matrix4x4.TRS(randomOffset, Quaternion.Euler(randomRotation), randomScale);
                }

                foreach (MeshTransform m  in cachedMeshes)
                {
                    m.material.SetPass(0);
                    Graphics.DrawMeshNow(m.mesh, transform.localToWorldMatrix * previzRandomMatrix * m.matrix, 0);
                }
            }
        }
    }
        public override IAccountStateDelta Execute(IActionContext context)
        {
            IActionContext ctx         = context;
            var            states      = ctx.PreviousStates;
            var            slotAddress = AvatarAddress.Derive(
                string.Format(
                    CultureInfo.InvariantCulture,
                    CombinationSlotState.DeriveFormat,
                    SlotIndex
                    )
                );

            if (ctx.Rehearsal)
            {
                return(states
                       .SetState(AvatarAddress, MarkChanged)
                       .SetState(slotAddress, MarkChanged)
                       .SetState(ctx.Signer, MarkChanged)
                       .MarkBalanceChanged(GoldCurrencyMock, ctx.Signer, BlacksmithAddress));
            }

            if (!states.TryGetAgentAvatarStates(ctx.Signer, AvatarAddress, out var agentState,
                                                out var avatarState))
            {
                throw new FailedLoadStateException("Aborted as the avatar state of the signer was failed to load.");
            }

            var slotState = states.GetCombinationSlotState(AvatarAddress, SlotIndex);

            if (slotState is null)
            {
                throw new FailedLoadStateException("Aborted as the slot state is failed to load");
            }

            if (!slotState.Validate(avatarState, ctx.BlockIndex))
            {
                throw new CombinationSlotUnlockException(
                          $"Aborted as the slot state is invalid: {slotState} @ {SlotIndex}");
            }

            var recipeSheet   = states.GetSheet <EquipmentItemRecipeSheet>();
            var materialSheet = states.GetSheet <MaterialItemSheet>();
            var materials     = new Dictionary <Material, int>();

            // Validate recipe.
            if (!recipeSheet.TryGetValue(RecipeId, out var recipe))
            {
                throw new SheetRowNotFoundException(nameof(EquipmentItemRecipeSheet), RecipeId);
            }

            if (!(SubRecipeId is null))
            {
                if (!recipe.SubRecipeIds.Contains((int)SubRecipeId))
                {
                    throw new SheetRowColumnException(
                              $"Aborted as the sub recipe {SubRecipeId} was failed to load from the sheet."
                              );
                }
            }

            // Validate main recipe is unlocked.
            if (!avatarState.worldInformation.IsStageCleared(recipe.UnlockStage))
            {
                avatarState.worldInformation.TryGetLastClearedStageId(out var current);
                throw new NotEnoughClearedStageLevelException(recipe.UnlockStage, current);
            }

            if (!materialSheet.TryGetValue(recipe.MaterialId, out var material))
            {
                throw new SheetRowNotFoundException(nameof(MaterialItemSheet), recipe.MaterialId);
            }

            if (!avatarState.inventory.RemoveMaterial(material.ItemId, recipe.MaterialCount))
            {
                throw new NotEnoughMaterialException(
                          $"Aborted as the player has no enough material ({material} * {recipe.MaterialCount})"
                          );
            }

            var equipmentMaterial = ItemFactory.CreateMaterial(materialSheet, material.Id);

            materials[equipmentMaterial] = recipe.MaterialCount;

            BigInteger requiredGold        = recipe.RequiredGold;
            var        requiredActionPoint = recipe.RequiredActionPoint;
            var        equipmentItemSheet  = states.GetSheet <EquipmentItemSheet>();

            // Validate equipment id.
            if (!equipmentItemSheet.TryGetValue(recipe.ResultEquipmentId, out var equipRow))
            {
                throw new SheetRowNotFoundException(nameof(equipmentItemSheet), recipe.ResultEquipmentId);
            }

            var requiredBlockIndex = ctx.BlockIndex + recipe.RequiredBlockIndex;
            var equipment          = (Equipment)ItemFactory.CreateItemUsable(
                equipRow,
                ctx.Random.GenerateRandomGuid(),
                requiredBlockIndex
                );

            // Validate sub recipe.
            HashSet <int> optionIds = null;

            if (SubRecipeId.HasValue)
            {
                var subSheet = states.GetSheet <EquipmentItemSubRecipeSheet>();
                var subId    = (int)SubRecipeId;
                if (!subSheet.TryGetValue(subId, out var subRecipe))
                {
                    throw new SheetRowNotFoundException(nameof(EquipmentItemSubRecipeSheet), subId);
                }

                requiredBlockIndex  += subRecipe.RequiredBlockIndex;
                requiredGold        += subRecipe.RequiredGold;
                requiredActionPoint += subRecipe.RequiredActionPoint;

                foreach (var materialInfo in subRecipe.Materials)
                {
                    if (!materialSheet.TryGetValue(materialInfo.Id, out var subMaterialRow))
                    {
                        throw new SheetRowNotFoundException(nameof(MaterialItemSheet), materialInfo.Id);
                    }

                    if (!avatarState.inventory.RemoveMaterial(subMaterialRow.ItemId,
                                                              materialInfo.Count))
                    {
                        throw new NotEnoughMaterialException(
                                  $"Aborted as the player has no enough material ({subMaterialRow} * {materialInfo.Count})"
                                  );
                    }

                    var subMaterial = ItemFactory.CreateMaterial(materialSheet, materialInfo.Id);
                    materials[subMaterial] = materialInfo.Count;
                }

                optionIds = SelectOption(states.GetSheet <EquipmentItemOptionSheet>(), states.GetSheet <SkillSheet>(),
                                         subRecipe, ctx.Random, equipment);
                equipment.Update(requiredBlockIndex);
            }

            // Validate NCG.
            FungibleAssetValue agentBalance = states.GetBalance(ctx.Signer, states.GetGoldCurrency());

            if (agentBalance < states.GetGoldCurrency() * requiredGold)
            {
                throw new InsufficientBalanceException(
                          ctx.Signer,
                          agentBalance,
                          $"Aborted as the agent ({ctx.Signer}) has no sufficient gold: {agentBalance} < {requiredGold}"
                          );
            }

            if (avatarState.actionPoint < requiredActionPoint)
            {
                throw new NotEnoughActionPointException(
                          $"Aborted due to insufficient action point: {avatarState.actionPoint} < {requiredActionPoint}"
                          );
            }

            avatarState.actionPoint -= requiredActionPoint;
            if (!(optionIds is null))
            {
                foreach (var id in optionIds.OrderBy(id => id))
                {
                    agentState.unlockedOptions.Add(id);
                }
            }

            // FIXME: BlacksmithAddress just accumulate NCG. we need plan how to circulate this.
            if (requiredGold > 0)
            {
                states = states.TransferAsset(
                    ctx.Signer,
                    BlacksmithAddress,
                    states.GetGoldCurrency() * requiredGold
                    );
            }

            var result = new CombinationConsumable.ResultModel
            {
                actionPoint = requiredActionPoint,
                gold        = requiredGold,
                materials   = materials,
                itemUsable  = equipment,
                recipeId    = RecipeId,
                subRecipeId = SubRecipeId,
                itemType    = ItemType.Equipment,
            };

            slotState.Update(result, ctx.BlockIndex, requiredBlockIndex);
            var mail = new CombinationMail(result, ctx.BlockIndex, ctx.Random.GenerateRandomGuid(),
                                           requiredBlockIndex);

            result.id = mail.id;
            avatarState.UpdateV2(mail);
            avatarState.questList.UpdateCombinationEquipmentQuest(RecipeId);
            avatarState.UpdateFromCombination(equipment);
            avatarState.UpdateQuestRewards(materialSheet);
            return(states
                   .SetState(AvatarAddress, avatarState.Serialize())
                   .SetState(slotAddress, slotState.Serialize())
                   .SetState(ctx.Signer, agentState.Serialize()));
        }
Example #45
0
 public EntityFactory(Database database, LanguageService languageService, ItemFactory itemFactory)
 {
     this.database        = database;
     this.languageService = languageService;
     this.itemFactory     = itemFactory;
 }
Example #46
0
        public void Case(int randomSeed, int[] optionNumbers)
        {
            var gameConfigState = _initialState.GetGameConfigState();

            Assert.NotNull(gameConfigState);

            var recipeRow    = _tableSheets.EquipmentItemRecipeSheet.OrderedList.First(e => e.SubRecipeIds.Any());
            var subRecipeRow = _tableSheets.EquipmentItemSubRecipeSheetV2[recipeRow.SubRecipeIds.First()];
            var combinationEquipmentAction = new CombinationEquipment
            {
                avatarAddress = _avatarAddress,
                slotIndex     = 0,
                recipeId      = recipeRow.Id,
                subRecipeId   = subRecipeRow.Id,
            };

            var inventoryValue = _initialState.GetState(_inventoryAddress);

            Assert.NotNull(inventoryValue);
            var inventoryState = new Inventory((List)inventoryValue);

            inventoryState.AddFungibleItem(
                ItemFactory.CreateMaterial(_tableSheets.MaterialItemSheet, recipeRow.MaterialId),
                recipeRow.MaterialCount);
            foreach (var materialInfo in subRecipeRow.Materials)
            {
                inventoryState.AddFungibleItem(
                    ItemFactory.CreateMaterial(_tableSheets.MaterialItemSheet, materialInfo.Id),
                    materialInfo.Count);
            }

            var worldInformation = new WorldInformation(
                0,
                _tableSheets.WorldSheet,
                recipeRow.UnlockStage);

            var nextState = _initialState
                            .SetState(_inventoryAddress, inventoryState.Serialize())
                            .SetState(_worldInformationAddress, worldInformation.Serialize());

            var random = new TestRandom(randomSeed);

            nextState = combinationEquipmentAction.Execute(new ActionContext
            {
                PreviousStates = nextState,
                BlockIndex     = 0,
                Random         = random,
                Signer         = _agentAddress,
            });

            var slot0Value = nextState.GetState(_slot0Address);

            Assert.NotNull(slot0Value);
            var slot0State = new CombinationSlotState((Dictionary)slot0Value);

            Assert.NotNull(slot0State.Result.itemUsable);
            var equipment       = (Equipment)slot0State.Result.itemUsable;
            var additionalStats = equipment.StatsMap
                                  .GetAdditionalStats(true)
                                  .ToArray();
            var skills = equipment.Skills;

            Assert.Equal(optionNumbers.Length, equipment.optionCountFromCombination);
            var optionSheet           = _tableSheets.EquipmentItemOptionSheet;
            var mainAdditionalStatMin = 0;
            var mainAdditionalStatMax = 0;
            var requiredBlockIndex    = 0;

            foreach (var optionNumber in optionNumbers)
            {
                var optionInfo = subRecipeRow.Options[optionNumber - 1];
                requiredBlockIndex += optionInfo.RequiredBlockIndex;
                var optionRow = optionSheet[optionInfo.Id];
                if (optionRow.StatMin > 0 || optionRow.StatMax > 0)
                {
                    if (optionRow.StatType == equipment.UniqueStatType)
                    {
                        mainAdditionalStatMin += optionRow.StatMin;
                        mainAdditionalStatMax += optionRow.StatMax;
                        continue;
                    }

                    var additionalStatValue = additionalStats
                                              .First(e => e.statType == optionRow.StatType)
                                              .additionalValue;
                    Assert.True(additionalStatValue >= optionRow.StatMin);
                    Assert.True(additionalStatValue <= optionRow.StatMax + 1);
                }
                else if (optionRow.SkillId != default)
                {
                    var skill = skills.First(e => e.SkillRow.Id == optionRow.SkillId);
                    Assert.True(skill.Chance >= optionRow.SkillChanceMin);
                    Assert.True(skill.Chance <= optionRow.SkillChanceMax + 1);
                    Assert.True(skill.Power >= optionRow.SkillDamageMin);
                    Assert.True(skill.Power <= optionRow.SkillDamageMax + 1);
                }
            }

            var mainAdditionalStatValue = additionalStats
                                          .First(e => e.statType == equipment.UniqueStatType)
                                          .additionalValue;

            Assert.True(mainAdditionalStatValue >= mainAdditionalStatMin);
            Assert.True(mainAdditionalStatValue <= mainAdditionalStatMax + 1);
            Assert.Equal(requiredBlockIndex + 1, slot0State.RequiredBlockIndex);

            // FIXME
            // https://github.com/planetarium/lib9c/pull/517#discussion_r679218764
            // The tests after this line should be finished. However, since then the logic is being developed by
            // different developers in different branches. I wrote a test beforehand, but it's failing.
            // I plan to move to another branch after this PR is merged and finish writing the tests.
            return;

            if (requiredBlockIndex == 0)
            {
                return;
            }

            var hourglassRow = _tableSheets.MaterialItemSheet
                               .First(pair => pair.Value.ItemSubType == ItemSubType.Hourglass)
                               .Value;

            inventoryValue = nextState.GetState(_inventoryAddress);
            Assert.NotNull(inventoryValue);
            inventoryState = new Inventory((List)inventoryValue);
            Assert.False(inventoryState.TryGetFungibleItems(hourglassRow.ItemId, out _));

            var hourglassCount = requiredBlockIndex * gameConfigState.HourglassPerBlock;

            inventoryState.AddFungibleItem(
                ItemFactory.CreateMaterial(_tableSheets.MaterialItemSheet, hourglassRow.Id),
                hourglassCount);
            Assert.True(inventoryState.TryGetFungibleItems(hourglassRow.ItemId, out var hourglasses));
            Assert.Equal(hourglassCount, hourglasses.Sum(e => e.count));
            nextState = nextState.SetState(_inventoryAddress, inventoryState.Serialize());

            var rapidCombinationAction = new RapidCombination
            {
                avatarAddress = _avatarAddress,
                slotIndex     = 0,
            };

            nextState = rapidCombinationAction.Execute(new ActionContext
            {
                PreviousStates = nextState,
                BlockIndex     = 1,
                Random         = random,
                Signer         = _agentAddress,
            });
            inventoryValue = nextState.GetState(_inventoryAddress);
            Assert.NotNull(inventoryValue);
            inventoryState = new Inventory((List)inventoryValue);
            Assert.False(inventoryState.TryGetFungibleItems(hourglassRow.ItemId, out _));
        }
Example #47
0
        public PlayingState(Alex alex, GraphicsDevice graphics, WorldProvider worldProvider, NetworkProvider networkProvider) : base(alex)
        {
            NetworkProvider = networkProvider;

            World = new World(alex.Services, graphics, Options, networkProvider);
            World.Player.IsFirstPersonMode = true;

            WorldProvider = worldProvider;
            if (worldProvider is SPWorldProvider)
            {
                World.DoDaylightcycle = false;
                //World.Player.SetInventory(new BedrockInventory(46));
                if (ItemFactory.TryGetItem("minecraft:diamond_sword", out var sword))
                {
                    World.Player.Inventory.MainHand = sword;
                    World.Player.Inventory[World.Player.Inventory.HotbarOffset] = sword;
                }

                if (ItemFactory.TryGetItem("minecraft:dirt", out var dirt))
                {
                    World.Player.Inventory[World.Player.Inventory.HotbarOffset + 1] = dirt;
                }

                if (ItemFactory.TryGetItem("minecraft:diamond", out var compass))
                {
                    World.Player.Inventory[World.Player.Inventory.HotbarOffset + 2] = compass;
                }
            }

            var title = new TitleComponent();

            WorldProvider = worldProvider;
            WorldProvider.Init(World);

            WorldProvider.TitleComponent = title;

            _playingHud = new PlayingHud(Alex, World.Player, title);
            _playingHud.Chat.Network = networkProvider;

            WorldProvider.ScoreboardView = _playingHud.Scoreboard;
            WorldProvider.ChatRecipient  = _playingHud;
            //WorldProvider.ScoreboardView

            _debugInfo = new GuiDebugInfo();
            InitDebugInfo();

            MiniMap = new GuiMiniMap(World.ChunkManager)
            {
                Anchor = Alignment.TopRight
            };

            var settings = GetService <IOptionsProvider>();

            settings.AlexOptions.VideoOptions.Minimap.Bind(OnMinimapSettingChange);
            RenderMinimap = settings.AlexOptions.VideoOptions.Minimap.Value;

            if (RenderMinimap)
            {
                _playingHud.AddChild(MiniMap);
            }

            _networkDebugHud = new NetworkDebugHud(NetworkProvider);
        }
Example #48
0
 private static ItemUsable GetFood(ConsumableItemSheet.Row equipmentItemRow, Guid itemId, long ctxBlockIndex)
 {
     return(ItemFactory.CreateItemUsable(equipmentItemRow, itemId, ctxBlockIndex));
 }
Example #49
0
        public static Item AlternativeReadItem(this Packet packet, bool readNetworkId)
        {
            Item stack;
            int  networkId = -1;

            if (readNetworkId)
            {
                networkId = packet.ReadSignedVarInt();

                if (networkId == 0)
                {
                    return(new ItemAir());
                }
            }

            return(packet.ReadItem());

            int id = packet.ReadSignedVarInt();

            if (id == 0)
            {
                return(new ItemAir());
            }

            int   tmp      = packet.ReadSignedVarInt();
            short metadata = (short)(tmp >> 8);

            if (metadata == short.MaxValue)
            {
                metadata = 0;
            }

            byte count = (byte)(tmp & 0xff);

            stack          = ItemFactory.GetItem((short)id, metadata, count);
            stack.UniqueId = networkId;

            ushort dataMarker = packet.ReadUshort();             // NbtLen

            if (dataMarker == 0xffff)
            {
                var version = packet.ReadByte();

                switch (version)
                {
                case 1:
                    var nbt = packet.ReadNbt();

                    if (nbt != null)
                    {
                        stack.ExtraData = (NbtCompound)nbt.NbtFile.RootTag;
                    }

                    break;
                }
            }
            else if (dataMarker > 0)
            {
                var nbtData = packet.ReadBytes(dataMarker);
                //	var stream = (Stream)ReflectionHelper.GetPrivateFieldValue<MemoryStreamReader>(typeof(Packet), packet, "_reader");
                using (MemoryStream ms = new MemoryStream(nbtData))
                {
                    stack.ExtraData = ReadNbtCompound(ms);

                    /*var nbt = ReadNbt(ms);
                     *
                     * if (nbt != null)
                     * {
                     *      stack.ExtraData = (NbtCompound) nbt.NbtFile.RootTag;
                     * }*/

                    //stack.ExtraData = ReadNbt(ms);
                }
            }

            var canPlace = packet.ReadVarInt();

            for (int i = 0; i < canPlace; ++i)
            {
                packet.ReadString();
            }

            var canBreak = packet.ReadVarInt();

            for (int i = 0; i < canBreak; ++i)
            {
                packet.ReadString();
            }

            if (id == 513)             // shield
            {
                packet.ReadVarLong();  // something about tick, crap code
            }

            return(stack);
        }
Example #50
0
 public override Item[] GetDrops()
 {
     return(new[] { ItemFactory.GetItem(338, 0, 1) });
 }
Example #51
-1
        public void CorrectDirectTemplateForContext()
        {
            using (ShimsContext.Create())
            {
                var templateId = new Guid("{02F5002C-325E-4E5A-9C93-A97724ED3400}");
                var testItem = CreateTestItem(templateId: templateId);
                var contextProvider = new Mock<IContextProvider>();

                contextProvider.Setup(c => c.PageContextItem).Returns(testItem);

                var itemFactory = new ItemFactory(contextProvider.Object);
                var wrappedItem = itemFactory.GetContextItem<IScTemplate>();

                Assert.IsNotNull(wrappedItem);
            }
        }