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); }
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); }