public int GetRandomLoot(LootMetadata lootMetadata) { if (lootMetadata == null) { return(0); } else { float currentValue = 0; float random = UnityEngine.Random.value; if (lootMetadata == null || lootMetadata.lootRates.Count == 0) { Debug.LogError("LootId " + lootMetadata.lootId + " is not in db or empty!!!"); return(0); } for (int i = 0; i < lootMetadata.lootRates.Count; i++) { if (currentValue + lootMetadata.lootRates[i].rate > random) { return(lootMetadata.lootRates[i].itemId); } else { currentValue += lootMetadata.lootRates[i].rate; if (currentValue > 1) { Debug.LogError("The total rate of lootId " + lootMetadata.lootId + " is over 1"); } } } return(0); } }
public void DropLoot(int lootId, Vector3 pos) { LootMetadata lootMetadata = MetadataLoader.Instance.GetLootMetadataById(lootId); int itemId = MetadataManager.Instance.GetRandomLoot(lootMetadata); if (itemId != 0) { if (lootPrefab == null) { Debug.LogError("no loot prefab"); } else { if (lootRoot == null) { lootRoot = new GameObject("[LootRoot]"); lootRoot.transform.position = Vector3.zero; lootRoot.transform.rotation = Quaternion.identity; lootRoot.transform.localScale = Vector3.one; } ObjectMetadata item = MetadataManager.Instance.GetObjectMetadataWithObjectId(itemId); if (item == null) { Debug.LogError("loot item " + itemId + " is not in db!"); return; } bool isLootUnlocked = (lootMetadata.behaviour.Equals(LootEnum.UNLOCK_BEHAVIOUR) && TechTreeManager.Instance.IsItemUnlocked(item)); if (isLootUnlocked) { return; } GameObject loot = GameObject.Instantiate(lootPrefab, lootRoot.transform) as GameObject; Vector3 position = pos; position.y = 0; loot.transform.position = position; var lootObject = loot.GetComponent <LootObject>(); if (lootObject == null) { Debug.LogError("No LootObject on lootObject"); return; } else { lootObject.Init(lootMetadata.behaviour, item); } } } }
public List <LootMetadata> GetLootMetadata() { if (lootList != null) { return(lootList); } lootList = new List <LootMetadata>(); SqliteCommand cmd = sqlHelper.CreateTextCommand("SELECT * FROM loot_config"); SqliteDataReader reader = sqlHelper.ExecuteCommand(cmd); while (reader.Read()) { LootMetadata row = new LootMetadata(reader); lootList.Add(row); } sqlHelper.CloseResultReader(reader); return(lootList); }