private static List <string> GatherValidOrderKeys(Dictionary <string, SpecialOrderData> order_data) { var keys = new List <string>(order_data.Keys); for (int k = 0; k < keys.Count; k++) { string key = keys[k]; bool invalid = false; if (!invalid && order_data[key].Repeatable != "True" && Game1.MasterPlayer.team.completedSpecialOrders.ContainsKey(key)) { invalid = true; } if (Game1.dayOfMonth >= 16 && order_data[key].Duration == "Month") { invalid = true; } if (!invalid && !SpecialOrder.CheckTags(order_data[key].RequiredTags)) { invalid = true; } if (!invalid) { foreach (SpecialOrder specialOrder in Game1.player.team.specialOrders) { if (specialOrder.questKey.Value == key) { invalid = true; break; } } } if (invalid) { keys.RemoveAt(k); k--; } } return(keys); }
/// <summary>Gets a list of valid order keys for use when loading available special orders.</summary> /// <remarks>Imitates logic from <see cref="SpecialOrder.UpdateAvailableSpecialOrders(bool)"/> to validate special order keys.</remarks> /// <param name="order_data">Loaded data from the asset "Data/SpecialOrders".</param> /// <returns>A list of each key from "Data/SpecialOrders" that should be available on special order boards.</returns> private static List <string> GetAvailableOrderKeys(Dictionary <string, SpecialOrderData> order_data) { List <string> keys = new List <string>(order_data.Keys); for (int k = 0; k < keys.Count; k++) { string key = keys[k]; bool invalid = false; if (!invalid && order_data[key].Repeatable != "True" && Game1.MasterPlayer.team.completedSpecialOrders.ContainsKey(key)) { invalid = true; } if (Game1.dayOfMonth >= 16 && order_data[key].Duration == "Month") { invalid = true; } if (!invalid && !SpecialOrder.CheckTags(order_data[key].RequiredTags)) //prefix CheckTags with SpecialOrders (normally called internally) { invalid = true; } if (!invalid) { foreach (SpecialOrder specialOrder in Game1.player.team.specialOrders) { if ((string)specialOrder.questKey == key) { invalid = true; break; } } } if (invalid) { keys.RemoveAt(k); k--; } } return(keys); //return the completed key list }
public static void UpdateAvailableSpecialOrders(string[] validTypes) { SpecialOrder.UpdateAvailableSpecialOrders(true); var order_data = Game1.content.Load <Dictionary <string, SpecialOrderData> >("Data\\SpecialOrders"); var keys = new List <string>(order_data.Keys); for (int k = 0; k < keys.Count; k++) { string key = keys[k]; bool invalid = false; if (!invalid && order_data[key].Repeatable != "True" && Game1.MasterPlayer.team.completedSpecialOrders.ContainsKey(key)) { invalid = true; } if (Game1.dayOfMonth >= 16 && order_data[key].Duration == "Month") { invalid = true; } if (!invalid && !SpecialOrder.CheckTags(order_data[key].RequiredTags)) { invalid = true; } if (!invalid) { foreach (SpecialOrder specialOrder in Game1.player.team.specialOrders) { if (specialOrder.questKey.Value == key) { invalid = true; break; } } } if (invalid) { keys.RemoveAt(k); k--; } } Random r = new Random((int)Game1.uniqueIDForThisGame + (int)((float)Game1.stats.DaysPlayed * 1.3f)); foreach (string type_to_find in validTypes) { var typed_keys = new List <string>(); foreach (string key3 in keys) { if (order_data[key3].OrderType == type_to_find) { typed_keys.Add(key3); } } if (type_to_find != "Qi") { for (int j = 0; j < typed_keys.Count; j++) { if (Game1.player.team.completedSpecialOrders.ContainsKey(typed_keys[j])) { typed_keys.RemoveAt(j); j--; } } } var all_keys = new List <string>(typed_keys); for (int i = 0; i < 2; i++) { if (typed_keys.Count == 0) { if (all_keys.Count == 0) { break; } typed_keys = new List <string>(all_keys); } int index = r.Next(typed_keys.Count); string key2 = typed_keys[index]; Game1.player.team.availableSpecialOrders.Add(SpecialOrder.GetSpecialOrder(key2, r.Next())); typed_keys.Remove(key2); all_keys.Remove(key2); } } }