예제 #1
0
        // generates a random item from given type category.
        // we can also set a difficulty mode parameter here, but it seems current db doesnt have nightmare or hell-mode items with valid snoId's /raist.
        public static Item GenerateRandom(Mooege.Core.GS.Actors.Actor player, ItemTypeTable type)
        {
            var itemDefinition = GetRandom(Items.Values
                                           .Where(def => ItemGroup
                                                  .HierarchyToHashList(ItemGroup.FromHash(def.ItemType1)).Contains(type.Hash)).ToList());

            return(CreateItem(player, itemDefinition));
        }
예제 #2
0
 private static void SetAllowedTypes()
 {
     foreach (int hash in ItemGroup.SubTypesToHashList("Weapon"))
     {
         AllowedItemTypes.Add(hash);
     }
     foreach (int hash in ItemGroup.SubTypesToHashList("Armor"))
     {
         AllowedItemTypes.Add(hash);
     }
     foreach (int hash in ItemGroup.SubTypesToHashList("Offhand"))
     {
         AllowedItemTypes.Add(hash);
     }
     foreach (int hash in ItemGroup.SubTypesToHashList("Jewelry"))
     {
         AllowedItemTypes.Add(hash);
     }
     foreach (int hash in ItemGroup.SubTypesToHashList("Utility"))
     {
         AllowedItemTypes.Add(hash);
     }
     foreach (int hash in ItemGroup.SubTypesToHashList("CraftingPlan"))
     {
         AllowedItemTypes.Add(hash);
     }
     foreach (int hash in TypeHandlers.Keys)
     {
         if (AllowedItemTypes.Contains(hash))
         {
             // already added structure
             continue;
         }
         foreach (int subhash in ItemGroup.SubTypesToHashList(ItemGroup.FromHash(hash).Name))
         {
             if (AllowedItemTypes.Contains(subhash))
             {
                 // already added structure
                 continue;
             }
             AllowedItemTypes.Add(subhash);
         }
     }
 }
예제 #3
0
 private void SetInitialValues(ItemTable definition)
 {
     this.ItemDefinition    = definition;
     this.ItemLevel         = definition.ItemLevel;
     this.GBHandle.Type     = (int)GBHandleType.Gizmo;
     this.GBHandle.GBID     = definition.Hash;
     this.ItemType          = ItemGroup.FromHash(definition.ItemType1);
     this.EquipmentSlot     = 0;
     this.InventoryLocation = new Vector2D {
         X = 0, Y = 0
     };
     this.Scale     = 1.0f;
     this.RotationW = 0.0f;
     this.RotationAxis.Set(0.0f, 0.0f, 1.0f);
     this.CurrentState = ItemState.Normal;
     this.Field2       = 0x00000000;
     this.Field7       = 0;
     this.NameSNOId    = -1;   // I think it is ignored anyways - farmy
     this.Field10      = 0x00;
 }
예제 #4
0
        public static Type GetItemClass(ItemTable definition)
        {
            Type type = typeof(Item);

            if (GBIDHandlers.ContainsKey(definition.Hash))
            {
                type = GBIDHandlers[definition.Hash];
            }
            else
            {
                foreach (var hash in ItemGroup.HierarchyToHashList(ItemGroup.FromHash(definition.ItemType1)))
                {
                    if (TypeHandlers.ContainsKey(hash))
                    {
                        type = TypeHandlers[hash];
                        break;
                    }
                }
            }

            return(type);
        }
예제 #5
0
        public Item(GS.Map.World world, ItemTable definition)
            : base(world, definition.SNOActor)
        {
            this.ItemDefinition = definition;

            this.GBHandle.Type     = (int)GBHandleType.Gizmo;
            this.GBHandle.GBID     = definition.Hash;
            this.ItemType          = ItemGroup.FromHash(definition.ItemType1);
            this.EquipmentSlot     = 0;
            this.InventoryLocation = new Vector2D {
                X = 0, Y = 0
            };
            this.Scale     = 1.0f;
            this.RotationW = 0.0f;
            this.RotationAxis.Set(0.0f, 0.0f, 1.0f);
            this.CurrentState = ItemState.Normal;
            this.Field2       = 0x00000000;
            this.Field7       = 0;
            this.NameSNOId    = -1;   // I think it is ignored anyways - farmy
            this.Field10      = 0x00;

            this.ItemLevel = definition.ItemLevel;

            // level requirement
            // Attributes[GameAttribute.Requirement, 38] = definition.RequiredLevel;

            Attributes[GameAttribute.Item_Quality_Level] = 1;
            if (Item.IsArmor(this.ItemType) || Item.IsWeapon(this.ItemType) || Item.IsOffhand(this.ItemType))
            {
                Attributes[GameAttribute.Item_Quality_Level] = RandomHelper.Next(6);
            }
            if (this.ItemType.Flags.HasFlag(ItemFlags.AtLeastMagical) && Attributes[GameAttribute.Item_Quality_Level] < 3)
            {
                Attributes[GameAttribute.Item_Quality_Level] = 3;
            }

            Attributes[GameAttribute.ItemStackQuantityLo] = 1;
            Attributes[GameAttribute.Seed] = RandomHelper.Next(); //unchecked((int)2286800181);

            RandomGenerator = new ItemRandomHelper(Attributes[GameAttribute.Seed]);
            RandomGenerator.Next();
            if (Item.IsArmor(this.ItemType))
            {
                RandomGenerator.Next(); // next value is used but unknown if armor
            }
            RandomGenerator.ReinitSeed();

            ApplyWeaponSpecificOptions(definition);
            ApplyArmorSpecificOptions(definition);
            ApplyDurability(definition);
            ApplySkills(definition);
            ApplyAttributeSpecifier(definition);

            int affixNumber = 1;

            if (Attributes[GameAttribute.Item_Quality_Level] >= 3)
            {
                affixNumber = Attributes[GameAttribute.Item_Quality_Level] - 2;
            }
            AffixGenerator.Generate(this, affixNumber);
        }