Ejemplo n.º 1
0
        public void Execute(CommodityVO commodity)
        {
            GossipModel model = AmbitionApp.Gossip;

            if (model.Quests.Count >= model.MaxQuests)
            {
                return;
            }

            FactionModel factions = AmbitionApp.GetModel <FactionModel>();
            QuestVO      quest    = new QuestVO();

            CommodityVO[] rewards;
            int           rewardTier = RNG.Generate(2) < 1 ? 0 : RNG.Generate(3) < 2 ? 1 : 2;

            if (!Enum.TryParse <FactionType>(commodity.ID, true, out quest.Faction))
            {
                List <FactionType> factionTypes = new List <FactionType>(factions.Factions.Keys);
                factionTypes.Remove(FactionType.None);
                quest.Faction = RNG.TakeRandom(factionTypes);
            }

            quest.Created = AmbitionApp.Calendar.Day;
            quest.Due     = commodity.Value >= 5
                ? quest.Created + commodity.Value
                : quest.Created + RNG.Generate(5) + RNG.Generate(4) + RNG.Generate(4) + 5;

            rewards      = model.RewardTiers[rewardTier].Rewards;
            quest.Reward = RNG.TakeRandom(rewards);
            AmbitionApp.Localization.SetCurrentQuest(quest);
            AmbitionApp.Gossip.Quests.Add(quest);
            AmbitionApp.Gossip.Broadcast();
        }
Ejemplo n.º 2
0
        public void SetCurrentQuest(QuestVO quest)
        {
            Dictionary <string, string> subs = new Dictionary <string, string>()
            {
                ["%t"] = quest.Reward.Type.ToString(),
                ["%v"] = quest.Reward.Value.ToString()
            };

            CommodityVO[] rewards;
            Substitutions[LocalizationConsts.QUESTGOSSIPFACTION] = AmbitionApp.Localize(quest.Faction.ToString().ToLower());
            Substitutions[LocalizationConsts.QUESTTIME]          = (quest.Due - quest.Created).ToString();
            for (int tier = AmbitionApp.Gossip.RewardTiers.Length - 1; tier >= 0; --tier)
            {
                rewards = AmbitionApp.Gossip.RewardTiers[tier].Rewards;
                if (Array.Exists(rewards, t => t.Type == quest.Reward.Type && t.Value == quest.Reward.Value))
                {
                    Substitutions[LocalizationConsts.QUESTREWARD] = AmbitionApp.Localize(GossipConsts.QUEST_REWARD_LOC + quest.Reward.Type.ToString().ToLower() + "." + tier, subs);
                }
            }
        }