Exemplo n.º 1
0
        void AddSkillPoint(BasePlayer player, RCCAT Category, ItemDefinition ItemDef)
        {
            storedData.Players[player.userID].SkillTable[Category].Level++;

            PlayerInfo pInfo        = storedData.Players[player.userID];
            ulong      CurrentPoint = pInfo.SkillTable[Category].Level % RCK.LevelStep;

            //Get filtered list of Items
            List <ItemDefinition> selectedItemPool = GetAvailableItems(player, ItemDef, Category);

            // If all items are already discovered, it's time to move to the next rarity level... if possible ;-)
            if (selectedItemPool.Count > 0)
            {
                PrintToChat(player, string.Format(lang.GetMessage("NewItemRewarded", this), new object[] { CurrentPoint, RCK.LevelStep }));
                PrintToChat(player, string.Format(lang.GetMessage("RewardProgress", this), new object[] { ItemDef.category }));

                if (storedData.Players[player.userID].SkillTable[Category].Level % RCK.LevelStep == 0)
                {
                    ItemDefinition selectedItemDefinition = selectedItemPool[UnityEngine.Random.Range(0, selectedItemPool.Count - 1)];
                    player.blueprints.Learn(selectedItemDefinition);
                    PrintToChat(player, string.Format(lang.GetMessage("NewItemLearned", this), new object[] { selectedItemDefinition.displayName.english }));
                }
            }
            else
            {
                if (pInfo.SkillTable[Category].CurrentRarityLevel < Rust.Rarity.VeryRare)
                {
                    storedData.Players[player.userID].SkillTable[Category].CurrentRarityLevel++;
                    PrintToChat(player, string.Format(lang.GetMessage("RarityLevelChanged", this), new object[] { storedData.Players[player.userID].SkillTable[Category].CurrentRarityLevel }));
                }
                else
                {
                    PrintToChat(player, string.Format(lang.GetMessage("EverythingDiscovered", this), new object[] { ItemDef.category.ToString() }));
                }
            }
            Interface.Oxide.DataFileSystem.WriteObject(RCK.DataFileName, storedData);
        }
Exemplo n.º 2
0
        List <ItemDefinition> GetAvailableItems(BasePlayer player, ItemDefinition ItemDef, RCCAT Category)
        {
            List <ItemDefinition> selectedItemPool = new List <ItemDefinition>();
            PlayerInfo            pInfo            = storedData.Players[player.userID];

            foreach (ItemBlueprint itemBlueprint in ItemManager.bpList)
            {
                if (itemBlueprint.isResearchable)
                {
                    ItemDefinition item = itemBlueprint.targetItem;
                    if (ItemDef.category == item.category)
                    {
                        if (!player.blueprints.CanCraft(item.itemid, 0))
                        {
                            if (item.rarity <= pInfo.SkillTable[Category].CurrentRarityLevel)
                            {
                                selectedItemPool.Add(item);
                            }
                        }
                    }
                }
            }
            return(selectedItemPool);
        }