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})"); } } }
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); } } } }
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)); } } }
/// <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(); }
private void OnSubCategoryIntoContainer(LootSpawn lootSpawn) { Puts("OnSubCategoryIntoContainer: {0}", lootSpawn.name); }
private void OnSpawnSubCategory(LootSpawn lootSpawn) { Puts("OnSpawnSubCategory: {0}", lootSpawn.name); }