private void GenerateRewards(Player player) { float MaxChance; List <RequestReward> PossibleRewards = RequestReward.GetPossibleRewards(player, RequestGiver, out MaxChance); float RewardPercentage = 1f + RequestGiver.FriendshipLevel * 0.1f; RewardPercentage *= (float)MaxObjectiveCount / Base.GetRequestObjectiveCount(0); float RewardVariationStart = 0.8f, VariationRange = 0.4f; if (RequestGiver.FriendshipLevel < 1) { MaxChance += (int)(MaxChance * 0.5f); RewardVariationStart = 0.5f; VariationRange = 0.3f; } else if (RequestGiver.FriendshipLevel < 3) { MaxChance += (int)(MaxChance * 0.25f); } else if (RequestGiver.FriendshipLevel < 5) { MaxChance += (int)(MaxChance * 0.15f); RewardVariationStart = 0.9f; VariationRange = 0.2f; } else if (RequestGiver.FriendshipLevel < 7) { MaxChance += (int)(MaxChance * 0.05f); RewardVariationStart = 0.95f; VariationRange = 0.3f; } else { RewardVariationStart = 1; VariationRange = 0.5f; } for (byte i = 0; i < 3; i++) { ThisRequestReward reward = Rewards[i]; float PickedChance = Main.rand.NextFloat() * MaxChance; float Stack = 0; Item item = new Item(); foreach (RequestReward r in PossibleRewards) { if (PickedChance >= Stack && PickedChance < Stack + r.AcquisitionChance) { item.SetDefaults(r.itemID, true); item.stack = r.Stack; break; } Stack += r.AcquisitionChance; } reward.item = item; reward.value = (int)(Base.RewardValue * RewardPercentage * (RewardVariationStart + VariationRange * Main.rand.NextFloat())); } }
public static RequestReward AddRequestReward(int ItemID, int Stack = 1, float AcquisitionChance = 1f) { RequestReward reward = new RequestReward() { itemID = ItemID, Stack = Stack, AcquisitionChance = AcquisitionChance }; RequestRewards.Add(reward); return(reward); }