Ejemplo n.º 1
0
    static void Drop(string code, Vector3 pos, int itemLevel, QualityFactors qualityFactors = new QualityFactors())
    {
        var treasureClass = TreasureClass.Find(code);

        if (treasureClass == null)
        {
            var item = Item.Create(code);
            if (item == null)
            {
                Debug.LogWarning("Item wasn't spawned: " + code);
                return;
            }
            item.level = itemLevel;
            SelectItemQuality(item, qualityFactors, mf: 1000);
            if (item.quality != Item.Quality.HiQuality &&
                item.quality != Item.Quality.Normal &&
                item.quality != Item.Quality.LowQuality)
            {
                item.identified = false;
            }
            GenerateItemProperties(item);
            GenerateItemQuantity(item);
            Pickup.Create(pos, item);
        }
        else
        {
            Drop(treasureClass, pos, itemLevel, qualityFactors);
        }
    }
Ejemplo n.º 2
0
 static MonStat()
 {
     foreach (MonStat stat in sheet)
     {
         var key = stat.id.ToLower();
         if (stats.ContainsKey(key))
         {
             stats.Remove(key);
         }
         stats.Add(key, stat);
         stat.ext         = MonStatsExtended.Find(stat.monStatEx);
         stat.name        = stat.nameStr == null ? null : Translation.Find(stat.nameStr);
         stat.minion1     = stat.minion1Id == null ? null : Find(stat.minion1Id);
         stat.minion2     = stat.minion2Id == null ? null : Find(stat.minion2Id);
         stat.sound       = MonSound.Find(stat.monSoundId);
         stat.uniqueSound = MonSound.Find(stat.uMonSoundId);
         foreach (var tcInfo in stat.treasureClass)
         {
             tcInfo.normal   = TreasureClass.Find(tcInfo._normal);
             tcInfo.champion = TreasureClass.Find(tcInfo._champion);
             tcInfo.unique   = TreasureClass.Find(tcInfo._unique);
             tcInfo.quest    = TreasureClass.Find(tcInfo._quest);
         }
     }
 }
Ejemplo n.º 3
0
    private static void GenerateFromItemTypes()
    {
        var nodes = new List <Node>();

        foreach (var type in ItemType.sheet)
        {
            if (!type.treasureClass)
            {
                continue;
            }

            for (int i = 0; i < 100; i += 3)
            {
                var treasureClass = new TreasureClass();
                treasureClass.name  = type.code + i;
                treasureClass.picks = 1;
                byName.Add(treasureClass.name, treasureClass);
                nodes.Clear();
                foreach (var item in ItemInfo.all)
                {
                    if (item.level > i && item.level <= i + 3 && item.HasType(type))
                    {
                        var node = new Node();
                        node.code = item.code;
                        node.prob = 1;
                        nodes.Add(node);
                        treasureClass.probSum += node.prob;
                    }
                }
                treasureClass.nodeArray = nodes.ToArray();
            }
        }
    }
Ejemplo n.º 4
0
 static MonStat()
 {
     foreach(MonStat stat in sheet)
     {
         var key = stat.id.ToLower();
         if (monStats.ContainsKey(key))
         {
             monStats.Remove(key);
         }
         monStats.Add(key, stat);
         stat.ext = MonStatsExtended.Find(stat.monStatEx);
         stat.name = stat.nameStr == null ? null : Translation.Find(stat.nameStr);
         stat.minion1 = stat.minion1Id == null ? null : Find(stat.minion1Id);
         stat.minion2 = stat.minion2Id == null ? null : Find(stat.minion2Id);
         stat.sound = MonSound.Find(stat.monSoundId);
         stat.uniqueSound = MonSound.Find(stat.uMonSoundId);
         for(int i = 0; i < stat.treasureClass.Length; ++i)
         {
             stat.treasureClass[i].normal = TreasureClass.Find(stat.treasureClass[i]._normal);
             stat.treasureClass[i].champion = TreasureClass.Find(stat.treasureClass[i]._champion);
             stat.treasureClass[i].unique = TreasureClass.Find(stat.treasureClass[i]._unique);
             stat.treasureClass[i].quest = TreasureClass.Find(stat.treasureClass[i]._quest);
         }
     }
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Creates a new Quest with the provided values.
 /// </summary>
 /// <param name="questId">A unique identifier for this Quest</param>
 /// <param name="name">The user-friendly Name of the Quest</param>
 /// <param name="description">The user-friendly Description of the Quest</param>
 /// <param name="itemsToComplete">The complete list of ItemsToComplete for the Quest</param>
 /// <param name="rewardEXP">How many experience points are rewarded upon completion</param>
 /// <param name="rewardGold">How much gold is rewarded upon completion</param>
 /// <param name="rewardItems">The TreasureClass for items rewarded upon completion</param>
 public Quest(int questId, string name, string description, List <ItemQuantity> itemsToComplete,
              int rewardEXP, int rewardGold, TreasureClass rewardItems)
 {
     QuestId         = questId;
     Name            = name;
     Description     = description;
     ItemsToComplete = itemsToComplete;
     RewardEXP       = rewardEXP;
     RewardGold      = rewardGold;
     RewardItems     = rewardItems;
 }
Ejemplo n.º 6
0
    private void OnCharacterDeath(Character target, Character killer)
    {
        if (target.monStat == null)
        {
            return;
        }

        TreasureClass tc = target.monStat.treasureClass[0].normal;

        tc = tc.Upgraded(target.level);
        Drop(tc, target.transform.position, target.level);
    }
Ejemplo n.º 7
0
        /// <summary>
        /// Creates a new Quest with the provided values.
        /// </summary>
        /// <param name="questID">A unique identifier for this Quest</param>
        /// <param name="name">The user-friendly Name of the Quest</param>
        /// <param name="description">The user-friendly Description of the Quest</param>
        /// <param name="rewardExp">How many experience points are rewarded upon completion</param>
        /// <param name="rewardGold">How much gold is rewarded upon completion</param>
        /// <param name="rewardItems">The TreasureClass for items rewarded upon completion</param>
        /// <param name="itemsToComplete">ItemsToComplete for the Quest</param>
        public Quest(int questID, string name, string description, int rewardExp, int rewardGold,
                     TreasureClass rewardItems, params ItemQuantity[] itemsToComplete)
        {
            QuestId     = questID;
            Name        = name;
            Description = description;
            RewardEXP   = rewardExp;
            RewardGold  = rewardGold;
            RewardItems = rewardItems;

            ItemsToComplete = new List <ItemQuantity>();
            foreach (var item in itemsToComplete)
            {
                ItemsToComplete.Add(item);
            }
        }
Ejemplo n.º 8
0
        private void OnUnitDeath(Unit target, Unit killer)
        {
            if (target.monStat == null)
            {
                return;
            }

            TreasureClass tc = target.monStat.treasureClass[0].normal;

            if (tc == null)
            {
                return;
            }

            tc = tc.Upgraded(target.level);
            Drop(tc, target.transform.position, target.level);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Parses TreasureClass data, used by Monsters when they die to generate loot.
        /// </summary>
        private static void InitializeTreasureClasses()
        {
            TreasureClasses = new TreasureClass();
            string treasureClassPath = $@"{DataPath}\TreasureClass.txt";

            using (CsvReader csv = new CsvReader(new StreamReader(treasureClassPath), true, '\t'))
            {
                while (csv.ReadNextRecord())
                {
                    string key  = csv["treasureclass"];
                    string val1 = csv["item1"];
                    string val2 = csv["item2"];
                    string val3 = csv["item3"];

                    TreasureClasses.AddTreasureClass(key, val1, val2, val3);
                }
            }
        }
Ejemplo n.º 10
0
    static void Drop(TreasureClass treasureClass, Vector3 pos, int itemLevel, QualityFactors qualityFactors = new QualityFactors())
    {
        qualityFactors.unique = Mathf.Max(qualityFactors.unique, treasureClass.unique);
        qualityFactors.set    = Mathf.Max(qualityFactors.set, treasureClass.set);
        qualityFactors.rare   = Mathf.Max(qualityFactors.rare, treasureClass.rare);
        qualityFactors.magic  = Mathf.Max(qualityFactors.magic, treasureClass.magic);

        int noDrop = 0; // value is temporary just to increase drop for debugging purposes, should be treasureClass.noDrop

        for (int i = 0; i < treasureClass.picks; ++i)
        {
            int sample = Random.Range(0, treasureClass.probSum + noDrop);
            foreach (var node in treasureClass.nodeArray)
            {
                if (node.code == null)
                {
                    break;
                }

                if (sample < node.prob)
                {
                    Drop(node.code, pos, itemLevel, qualityFactors);
                    break;
                }

                sample -= node.prob;
            }
        }

        for (int i = 0; i < -treasureClass.picks; ++i)
        {
            var node = treasureClass.nodeArray[i];
            if (node.code == null)
            {
                break;
            }
            for (int j = 0; j < node.prob; ++j)
            {
                Drop(node.code, pos, itemLevel, qualityFactors);
            }
        }
    }
Ejemplo n.º 11
0
    static TreasureClass()
    {
        GenerateFromItemTypes();

        for (int i = 0; i < sheet.Count; ++i)
        {
            TreasureClass tc = sheet[i];
            if (tc.name == null)
            {
                continue;
            }
            if (byName.ContainsKey(tc.name))
            {
                continue;
            }
            byName.Add(tc.name, tc);
            tc.index = i;
        }

        foreach (TreasureClass tc in sheet)
        {
            if (tc.name == null)
            {
                continue;
            }
            tc.probSum = 0;
            for (int i = 0; i < tc.nodeArray.Length; ++i)
            {
                var node = tc.nodeArray[i];
                if (node.code == null)
                {
                    break;
                }
                if (node.code.StartsWith("\"gld"))
                {
                    node.code = "gld"; // todo correctly parse strings like "gld,mul=123"
                }
                tc.probSum     += node.prob;
                tc.nodeArray[i] = node;
            }
        }
    }
Ejemplo n.º 12
0
        public static List <Item> CreateLoot(Player owner, int treasureClassId)
        {
            List <Item> items = new List <Item>();

            if (MPQStorage.Data.Assets[SNOGroup.TreasureClass].ContainsKey(treasureClassId))
            {
                TreasureClass treasureClass = (TreasureClass)MPQStorage.Data.Assets[SNOGroup.TreasureClass][treasureClassId].Data;
                foreach (LootDropModifier modifier in treasureClass.LootDropModifiers)
                {
                    ItemTable definition = ItemGenerator.GetItemDefinition(modifier.ItemSpecifier.ItemGBId);
                    if (definition != null)
                    {
                        Item item = ItemGenerator.CreateItem(owner, definition);
                        item.Attributes[GameAttribute.Item_Quality_Level] = (modifier.GBIdQualityClass > 0) ? modifier.GBIdQualityClass : 0;
                        items.Add(item);
                    }
                }
            }

            return(items);
        }
Ejemplo n.º 13
0
        public static void LoadAll()
        {
            var sw = System.Diagnostics.Stopwatch.StartNew();

            Translation.Load();
            SoundInfo.Load();
            SoundEnvironment.Load();
            ObjectInfo.Load();
            BodyLoc.Load();
            ExpTable.Load();
            LevelType.Load();
            LevelWarpInfo.Load();
            LevelPreset.Load();
            LevelMazeInfo.Load();
            LevelInfo.Load();
            OverlayInfo.Load();
            MissileInfo.Load();
            ItemStat.Load();
            ItemRatio.Load();
            ItemType.Load();
            ItemPropertyInfo.Load();
            ItemSet.Load();
            UniqueItem.Load();
            SetItem.Load();
            TreasureClass.Load();
            MagicAffix.Load();
            CharStatsInfo.Load();
            MonLvl.Load();
            MonPreset.Load();
            MonSound.Load();
            MonStatsExtended.Load();
            MonStat.Load();
            SuperUnique.Load();
            SkillDescription.Load();
            SkillInfo.Load();
            SpawnPreset.Load();
            StateInfo.Load();
            Debug.Log("All txt files loaded in " + sw.ElapsedMilliseconds + " ms");
        }