Пример #1
0
        public void KilledEnemyGivesFoodOfAllKinds()
        {
            var env = CreateTestEnv(numEnemies: 100);

            env.LootGenerator.Probability = new Roguelike.Probability.Looting();
            env.LootGenerator.Probability.SetLootingChance(LootSourceKind.Enemy, LootKind.Food, 1);

            var enemies = env.Enemies;

            Assert.AreEqual(enemies.Count, 100);

            var li = new LootInfo(game, null);

            env.KillAllEnemies();
            var lootItems = li.GetDiff();

            Assert.Greater(lootItems.Count, 0);
            var foods = li.Get <Food>().ToList();

            Assert.Greater(foods.Count, 40);
            var kinds = Enum.GetValues(typeof(FoodKind)).Cast <FoodKind>().Where(i => i != FoodKind.Unset).ToList();

            foreach (var kind in kinds)
            {
                Assert.IsTrue(foods.Any(i => i.Kind == kind));
            }
        }
    //corrutinas comunes
    IEnumerator SearchLoot(float time)
    {
        List <GameObject> members = enemyGroup.GetComponent <GroupManager>().GetMembers();

        foreach (GameObject member in members)
        {
            if (member.GetComponent <Npc>().GetItsLooteable())
            {
                LootInfo loot = member.GetComponent <Npc>().GetLoot();
                if (loot != null)
                {
                    int gold = 0;
                    gold = Random.Range(loot.minGold, loot.maxGold);

                    GameObject deckInformation = GameObject.FindGameObjectWithTag("DeckInformation");
                    deckInformation.GetComponent <DeckInformation>().AddGold(gold);
                    if (loot.cardsForRetrieve.Length > 0)
                    {
                        CardInfo cardInfoFromLoot;
                        cardInfoFromLoot = loot.cardsForRetrieve[Random.Range(1, loot.cardsForRetrieve.Length)];
                        deckInformation.GetComponent <DeckInformation>().AddCardToInventory(cardInfoFromLoot);
                        deck.GetComponent <Deck>().PutCardInDeck(cardInfoFromLoot);
                        Debug.Log("se adhirio: " + cardInfoFromLoot.description);
                    }
                }
            }
        }
        yield return(new WaitForSeconds(time));

        StartCoroutine("FleeOption", 3);
    }
Пример #3
0
        public void LotsOfPotionsTest()
        {
            var des = EquipmentKind.Weapon.ToDescription();
            var env = CreateTestEnv();

            //GenerationInfo.DebugInfo.EachEnemyGivesPotion = true;
            try
            {
                var         lootInfo = new LootInfo(game, null);
                ILootSource lootSrc  = ActivePlainEnemies.First();//env.Game.Hero
                for (int i = 0; i < 10; i++)
                {
                    var pot   = env.LootGenerator.GetRandomLoot(LootKind.Potion, 1);
                    var added = game.GameManager.AddLootReward(pot, lootSrc, false);
                    Assert.True(added);
                    var dist = pot.DistanceFrom(lootSrc.GetPoint());
                    Assert.Less(dist, 5);
                    Assert.True(dist < 4 || i > 5);
                }
                var newLootItems = lootInfo.GetDiff();
                Assert.AreEqual(newLootItems.Count, 10);
            }
            catch (System.Exception)
            {
                //GenerationInfo.DebugInfo.EachEnemyGivesPotion = false;
            }
        }
Пример #4
0
 private void AddLoot(LootInfo l)
 {
     if (LootTracker.IsStandardServer(l.Server))
     {
         lootList.Add(l);
     }
     //LogInfo($"Looted {l.Item} from {l.Source} in {l.Zone}");
 }
Пример #5
0
    public GameObject Drop()
    {
        float total = GetWeightTotal();

        insertionSort(loot);

        float num = UnityEngine.Random.Range(0f, total);

        foreach (LootInfo info in loot)
        {
            if (num <= info.rate)
            {
                if (info.nightOnly)
                {
                    if (LightingManager.Instance.night)
                    {
                        return(info.item);
                    }
                    else
                    {
                        num -= info.rate;
                    }
                }
                else
                {
                    return(info.item);
                }
            }
            else
            {
                num -= info.rate;
            }
        }

        return(null);

        void insertionSort(List <LootInfo> unsortedLoot)
        {
            int n = unsortedLoot.Count;

            for (int i = 1; i < n; ++i)
            {
                LootInfo key = unsortedLoot[i];
                int      j   = i - 1;

                while (j >= 0 && unsortedLoot[j].rate > key.rate)
                {
                    unsortedLoot[j + 1] = unsortedLoot[j];
                    j = j - 1;
                }
                unsortedLoot[j + 1] = key;
            }

            loot.Reverse();
        }
    }
Пример #6
0
    public void SpawnLoot()
    {
        foreach (Transform storageSpawnpoint in StorageLootParent.transform)
        {
            foreach (Transform UntakenDrag in storageSpawnpoint.GetComponent <Storage>().UnreadyItems.transform)
            {
                Destroy(UntakenDrag.gameObject);
            }
        }
        foreach (Transform UnTakenItem in Untaken.transform)
        {
            Destroy(UnTakenItem.gameObject);
        }
        foreach (Transform spawnpoint in FreeLootParent.transform)
        {
            LootInfo li = spawnpoint.gameObject.GetComponent <LootInfo>();
            int      RandomizedRarity = CheckRandomizedRarity(Random.Range(0, 1000));
            if (RandomizedRarity != 8)
            {
                int RandomizedItem = Random.Range(0, SpawnPointLists[GetLLSpawnPoint(li)].Rarities[RandomizedRarity].ItemTypes[GetLLType(li)].ItemsList.Count);

                GameObject clone = Instantiate(SpawnPointLists[GetLLSpawnPoint(li)].Rarities[RandomizedRarity].ItemTypes[GetLLType(li)].ItemsList[RandomizedItem].itemPickupPrefab.gameObject, spawnpoint.transform.position, Quaternion.identity) as GameObject;
                clone.transform.parent = Untaken.transform;
            }
        }
        foreach (Transform storageSpawnpoint in StorageLootParent.transform)
        {
            foreach (Storage.StorageSpawnPoint storagePoint in storageSpawnpoint.gameObject.GetComponent <Storage>().AllSpawnpoints)
            {
                Storage ss = storageSpawnpoint.gameObject.GetComponent <Storage>();
                int     RandomizedRarity = CheckRandomizedRarity(Random.Range(0, 1000));
                if (RandomizedRarity != 8)
                {
                    int pointIndex     = storageSpawnpoint.gameObject.GetComponent <Storage>().AllSpawnpoints.IndexOf(storagePoint);
                    int RandomizedItem = Random.Range(0, SpawnPointLists[GetSSSpawnPoint(ss, pointIndex)].Rarities[RandomizedRarity].ItemTypes[GetSSType(ss, pointIndex)].ItemsList.Count);

                    Debug.Log("Spawned");
                    GameObject clone = Instantiate(SpawnPointLists[GetSSSpawnPoint(ss, pointIndex)].Rarities[RandomizedRarity].ItemTypes[GetSSType(ss, pointIndex)].ItemsList[RandomizedItem].itemDragDropPrefab, storagePoint.Point.transform.position, Quaternion.identity) as GameObject;
                    clone.GetComponent <ItemCollisionDetection>().CollidingItem = false;
                    clone.GetComponent <ItemCollisionDetection>().CharCont      = storageSpawnpoint.gameObject;
                    clone.GetComponent <ItemCollisionDetection>().itemDataBase  = ItemDB;
                    clone.GetComponent <ItemCollisionDetection>().Inv           = storageSpawnpoint.GetComponent <Storage>().UnreadyItems;
                    clone.transform.SetParent(storageSpawnpoint.GetComponent <Storage>().UnreadyItems.transform);
                    clone.GetComponent <ItemCollisionDetection>().posOffseter = new Vector3(ItemDB.GetComponent <ItemDatabase>().items[clone.GetComponent <ItemCollisionDetection>().itemID].cellSize.x, (-ItemDB.GetComponent <ItemDatabase>().items[clone.GetComponent <ItemCollisionDetection>().itemID].cellSize.y), 0);
                    clone.transform.position = storagePoint.Point.transform.position + clone.gameObject.GetComponent <ItemCollisionDetection>().posOffseter;
                    clone.GetComponent <ItemCollisionDetection>().SlotOn        = storagePoint.Point.gameObject;
                    clone.GetComponent <ItemCollisionDetection>().CollidingItem = false;
                    //
                    //
                    //clone.transform.parent = Untaken.transform;
                }
            }
        }
        LootSpawned = true;
    }
Пример #7
0
 public void SetNpcInfo(NpcInfo _npcInfo)
 {
     npcInfo = _npcInfo;
     graphic.GetComponent <SpriteRenderer>().sprite = npcInfo.graphic;
     life    = npcInfo.LifeValue;
     attack  = npcInfo.OffensiveValue;
     defence = npcInfo.DefensiveValue;
     heal    = npcInfo.HealingValue;
     npcUI.GetComponent <NpcUI>().SetHealth(_npcInfo.LifeValue, life);
     npcUI.GetComponent <NpcUI>().SetActionSpended(actionExpended);
     itsLooteable       = _npcInfo.itsLooteable;
     itsInanimateObject = _npcInfo.inanimateObject;
     loot = _npcInfo.loot;
 }
Пример #8
0
 public void KilledEnemyGivesPotionFromTimeToTime()
 {
     for (int i = 0; i < loopCount; i++)
     {
         var env = CreateTestEnv(numEnemies: 100);
         var li  = new LootInfo(game, null);
         env.KillAllEnemies();
         var lootItems = li.GetDiff();
         Assert.Greater(lootItems.Count, 10);
         var potions = li.Get <Potion>();
         Assert.Greater(potions.Count, 2);
         Assert.Less(potions.Count, 10);
     }
 }
Пример #9
0
        private LootInfo KillEnemies(int enemiesCount)
        {
            var env     = CreateTestEnv(numEnemies: enemiesCount);
            var enemies = env.Enemies;

            Assert.AreEqual(enemies.Count, enemiesCount);

            var li = new LootInfo(game, null);

            env.KillAllEnemies();
            var lootItems = li.GetDiff();

            Assert.Greater(lootItems.Count, 0);
            return(li);
        }
Пример #10
0
 public bool GenerateLootAt(LootInfo info, Vector2Int coords)
 {
     if (UnityEngine.Random.value < info.LootChance)
     {
         int numRolls = UnityEngine.Random.Range(info.MinRolls, info.MaxRolls + 1);
         for (int i = 0; i < numRolls; ++i)
         {
             int amount = UnityEngine.Random.Range(info.MinItems, info.MaxItems + 1);
             // select Data
             // _entityController.CreatePickable(_data, item, coords, amount, false);
         }
         return(true);
     }
     return(false);
 }
Пример #11
0
        public void LotsOfEqTest()
        {
            var env      = CreateTestEnv();
            var lootInfo = new LootInfo(game, null);

            for (int i = 0; i < 10; i++)
            {
                var pot      = env.LootGenerator.GetRandomLoot(LootKind.Equipment, 1);
                var closeEmp = env.Game.Level.GetClosestEmpty(env.Game.Hero, true, true);
                var set      = env.Game.Level.SetTile(pot, closeEmp.point);
                Assert.True(set);
            }
            var newLootItems = lootInfo.GetDiff();

            Assert.AreEqual(newLootItems.Count, 10);
        }
Пример #12
0
        public static void AddMobLoot(uint mob, uint QID, uint sID, int itemID, uint rate)
        {
            LootInfo info = new LootInfo();
            List<LootInfo> table;
            info.itemID = itemID;
            info.QID = QID;
            info.SID = sID;
            info.rate = rate;
            if (MobQuestItem.ContainsKey(mob))
                table = MobQuestItem[mob];
            else
            {
                table = new List<LootInfo>();
                MobQuestItem.Add(mob, table);
            }

            table.Add(info);
        }
Пример #13
0
        public void GemsLevel()
        {
            var env = CreateTestEnv();

            try
            {
                var         lootInfo = new LootInfo(game, null);
                ILootSource lootSrc  = ActivePlainEnemies.First();
                for (int i = 0; i < 10; i++)
                {
                    var loot = env.LootGenerator.GetRandomLoot(LootKind.Gem, 1) as Gem;
                    Assert.AreEqual(loot.EnchanterSize, EnchanterSize.Small);
                }
            }
            catch (System.Exception)
            {
                //GenerationInfo.DebugInfo.EachEnemyGivesPotion = false;
            }
        }
Пример #14
0
 int GetLLType(LootInfo ll)
 {
     if (ll.Type == Item.ItemOfType.Drink)
     {
         return(1);
     }
     else if (ll.Type == Item.ItemOfType.CraftingMaterial)
     {
         return(2);
     }
     else if (ll.Type == Item.ItemOfType.placeable)
     {
         return(3);
     }
     else
     {
         return(0);
     }
 }
Пример #15
0
        public static void AddMobLoot(uint mob, uint QID, uint sID, int itemID, uint rate)
        {
            LootInfo        info = new LootInfo();
            List <LootInfo> table;

            info.itemID = itemID;
            info.QID    = QID;
            info.SID    = sID;
            info.rate   = rate;
            if (MobQuestItem.ContainsKey(mob))
            {
                table = MobQuestItem[mob];
            }
            else
            {
                table = new List <LootInfo>();
                MobQuestItem.Add(mob, table);
            }

            table.Add(info);
        }
Пример #16
0
        /////////////////////////////////////////////////////////
        public void KilledEnemyLevelAffectsEnchanter(LootKind kind, int enemyLevel, EnchanterSize[] expectedSizes)
        {
            var env = CreateTestEnv(true, 10, 2);

            env.LootGenerator.Probability = new Roguelike.Probability.Looting();
            env.LootGenerator.Probability.SetLootingChance(LootSourceKind.Enemy, kind, 1);

            var enemies = AllEnemies;

            Assert.GreaterOrEqual(enemies.Count, 5);
            enemies.ForEach(i =>
            {
                SetEnemyLevel(i, enemyLevel);
            });

            var li = new LootInfo(game, null);

            env.KillAllEnemies();

            var res                  = new List <LootKind>();
            var lootItems            = li.GetDiff();
            int expectedKindsCounter = 0;

            {
                foreach (var loot in lootItems)
                {
                    var expected = kind == loot.LootKind;

                    if (expected)
                    {
                        var ench = loot as Enchanter;
                        Assert.True(expectedSizes.Contains(ench.EnchanterSize));
                        expectedKindsCounter++;
                    }

                    res.Add(loot.LootKind);
                }
            }
            Assert.Greater(expectedKindsCounter, 0);
        }
Пример #17
0
 int GetLLSpawnPoint(LootInfo ll)
 {
     if (ll.SpawnPoint == Item.ItemSpawnPoint.Houses)
     {
         return(1);
     }
     else if (ll.SpawnPoint == Item.ItemSpawnPoint.DestroyedVehicles)
     {
         return(2);
     }
     else if (ll.SpawnPoint == Item.ItemSpawnPoint.Military)
     {
         return(3);
     }
     else if (ll.SpawnPoint == Item.ItemSpawnPoint.Industrial)
     {
         return(4);
     }
     else
     {
         return(0);
     }
 }
Пример #18
0
        public void KilledEnemyAtSamePlace()
        {
            var env = CreateTestEnv(true, 20);

            env.LootGenerator.Probability = new Roguelike.Probability.Looting();
            env.LootGenerator.Probability.SetLootingChance(LootSourceKind.Enemy, LootKind.Equipment, 1f);

            var enemies = game.GameManager.EnemiesManager.GetEnemies().Where(i => i.PowerKind == EnemyPowerKind.Plain).ToList();
            var en      = enemies[0];

            env.KillEnemy(en);
            var loot = env.Game.Level.GetTile(en.point);//loot shall be at enemy point

            Assert.NotNull(loot as Loot);

            var en1 = enemies[1];

            Assert.True(env.Game.Level.SetTile(en1, en.point));

            Debug.WriteLine("Killing en1...");
            var li             = new LootInfo(game, null);
            var prevCountLevel = env.Game.Level.Loot.Count;
            var prevCount      = li.Prev.Count;
            var prevCopy       = li.Prev.ToList();

            env.KillEnemy(en1);
            var lootItems = li.GetDiff();

            if (lootItems.Count == 0)
            {
                int k = 0;
                k++;
            }
            Assert.GreaterOrEqual(lootItems.Count, 1);
            Assert.True(lootItems[0].DistanceFrom(loot) < 2);
        }
Пример #19
0
    // #############################################
    // ##### EVENTS

    // On start
    void Start()
    {
        // Set application framerate to current screen refresh rate
        Application.targetFrameRate = Screen.currentResolution.refreshRate;

        // Hide cursor
        Cursor.visible = false;

        // Init loot information struct
        lootInfo = new LootInfo();
        ResetLootInfo();

        // Save references to post process volume settings
        postProcessVolume.profile.TryGet <Vignette>(out postProcessVignette);
        postProcessVolume.profile.TryGet <ColorAdjustments>(out postProcessColorAdjustments);

        // Update UI
        UpdateWorth();
        UpdateEquipped();
        UpdateHeader(whichPPSettingisSet);

        // Set post process settings to default
        UpdatePP(PPSettings.Default);
    }