Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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
        }
Exemple #3
0
        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);
                }
            }
        }