Beispiel #1
0
    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);
        }
    }
Beispiel #2
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);
                }
            }
        }
    }
Beispiel #3
0
    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);
    }