コード例 #1
0
ファイル: LootConfig.cs プロジェクト: rustmy/oxideplugins-1
 private static void PrintLootSpawn(LootSpawn lootSpawn, float parentChance, StringBuilder sb, int depth = 0)
 {
     if (lootSpawn.subSpawn != null && lootSpawn.subSpawn.Length > 0)
     {
         sb.Append('\t', depth);
         sb.AppendLine($"{lootSpawn.name} {parentChance:P1}");
         depth++;
         var sum = lootSpawn.subSpawn.Sum(l => l.weight);
         var cur = 0;
         foreach (var entry in lootSpawn.subSpawn)
         {
             cur += entry.weight;
             PrintLootSpawn(entry.category, parentChance * (cur / (float)sum), sb, depth);
         }
         return;
     }
     if (lootSpawn.items != null && lootSpawn.items.Length > 0)
     {
         foreach (var amount in lootSpawn.items)
         {
             sb.Append('\t', depth);
             sb.AppendLine($"{parentChance:P1} {amount.amount}x {amount.itemDef.shortname} ({lootSpawn.name})");
         }
     }
 }
コード例 #2
0
ファイル: BetterLoot.cs プロジェクト: Mixfair/Unit-Scripts
 void GetLootSpawn(LootSpawn lootSpawn, ref Dictionary <string, object> items)
 {
     if (lootSpawn.subSpawn != null && lootSpawn.subSpawn.Length > 0)
     {
         foreach (var entry in lootSpawn.subSpawn)
         {
             GetLootSpawn(entry.category, ref items);
         }
         return;
     }
     if (lootSpawn.items != null && lootSpawn.items.Length > 0)
     {
         foreach (var amount in lootSpawn.items)
         {
             object options  = GetAmounts(amount, 1);
             string itemName = amount.itemDef.shortname;
             if (amount.itemDef.spawnAsBlueprint)
             {
                 itemName += ".blueprint";
             }
             if (!items.ContainsKey(itemName))
             {
                 items.Add(itemName, options);
             }
         }
     }
 }
コード例 #3
0
        private void UpdateLootSpawn(LootSpawn lootSpawn, JSONObject obj, string path)
        {
            var value = obj.GetValue(path);

            if (value != null && value.Type == JSONValueType.Array && value.Array.Length > 0)
            {
                lootSpawn.items      = new ItemAmount[0];
                lootSpawn.blueprints = new ItemAmount[0];
                lootSpawn.subSpawn   = new LootSpawn.Entry[value.Array.Length];
                for (var i = 0; i < lootSpawn.subSpawn.Length; i++)
                {
                    lootSpawn.subSpawn[i] = new LootSpawn.Entry {
                        category = ScriptableObject.CreateInstance <LootSpawn>(), weight = value.Array[i].Obj.GetInt("weight", 0)
                    };
                    UpdateLootSpawn(lootSpawn.subSpawn[i].category, value.Array[i].Obj, "category");
                }
                return;
            }
            var itemsValue = obj.GetValue("items");

            if (itemsValue != null && itemsValue.Type == JSONValueType.Array && itemsValue.Array.Length > 0)
            {
                var items = itemsValue.Array;
                lootSpawn.items = new ItemAmount[items.Length];
                for (var i = 0; i < items.Length; i++)
                {
                    var def = ItemManager.FindItemDefinition(items[i].Obj.GetString("item", "unnamed"));
                    //TODO null check
                    lootSpawn.items[i] = new ItemAmount(def, items[i].Obj.GetFloat("amount", 0));
                }
            }
            var blueprintsValue = obj.GetValue("blueprints");

            if (blueprintsValue != null && blueprintsValue.Type == JSONValueType.Array && blueprintsValue.Array.Length > 0)
            {
                var blueprints = blueprintsValue.Array;
                lootSpawn.blueprints = new ItemAmount[blueprints.Length];
                for (var i = 0; i < blueprints.Length; i++)
                {
                    var def = ItemManager.FindItemDefinition(blueprints[i].Obj.GetString("item", "unnamed"));
                    //TODO null check
                    lootSpawn.blueprints[i] = new ItemAmount(def, blueprints[i].Obj.GetFloat("amount", 0));
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// Kills this Enemy, dropping Loot and calling OnDeath
        /// </summary>
        private void Die()
        {
            float     rng   = Random.Range(0f, 1f);
            LootTable loot  = data.Loot;
            LootSpawn spawn = loot.Dust; // Dust

            if (spawn.Amount > 0 && spawn.Chance >= rng)
            {
                LootSpawner.Instance.SpawnLoot(Collectables.Collectables.Dust, transform.position, spawn.Amount);
            }
            spawn = loot.Gold; // Gold
            if (spawn.Amount > 0 && spawn.Chance >= rng)
            {
                LootSpawner.Instance.SpawnLoot(Collectables.Collectables.Gold, transform.position, spawn.Amount);
            }
            spawn = loot.Potion; // Potion
            if (spawn.Amount > 0 && spawn.Chance >= rng)
            {
                LootSpawner.Instance.SpawnLoot(Collectables.Collectables.Potion, transform.position, spawn.Amount);
            }
            // Spawning of SpellPage handled separately by BookEnemy
            OnDeath();
        }
コード例 #5
0
ファイル: LootConfig.cs プロジェクト: rustmy/oxideplugins-1
 private void OnSubCategoryIntoContainer(LootSpawn lootSpawn)
 {
     Puts("OnSubCategoryIntoContainer: {0}", lootSpawn.name);
 }
コード例 #6
0
ファイル: LootConfig.cs プロジェクト: rustmy/oxideplugins-1
 private void OnSpawnSubCategory(LootSpawn lootSpawn)
 {
     Puts("OnSpawnSubCategory: {0}", lootSpawn.name);
 }