Exemple #1
0
        protected override void Configure()
        {
            container = new SimpleContainer();

            container.Singleton <IWindowManager, MetroWindowManager>();
            container.Singleton <IEventAggregator, EventAggregator>();

            var baseExperienceData = new ExperienceData()
            {
                DisplayName = "Base Experience"
            };
            var classExperienceData = new ExperienceData()
            {
                DisplayName = "Class Experience"
            };

            IExperienceControl[] baseExperienceControls = GetExperienceControls(baseExperienceData, classExperienceData);

            ExperienceContainer experienceContainer = new ExperienceContainer(baseExperienceData, classExperienceData, baseExperienceControls);

            container.Handler <ShellViewModel>(simpleContainer =>
                                               new ShellViewModel(
                                                   container.GetInstance <SettingsViewModel>(),
                                                   experienceContainer,
                                                   new ExpCardCalculatorViewModel(experienceContainer),
                                                   container.GetInstance <IWindowManager>()));

            // TODO - refactor settings view model to just take a collection of menuitems
            container.Handler <SettingsViewModel>(simpleContainer => new SettingsViewModel(baseExperienceControls));
        }
Exemple #2
0
        public override FightResultListEntry GetFightResultListEntry()
        {
            var additionalDatas = new List <DofusProtocol.Types.FightResultAdditionalData>();

            if (ExperienceData != null)
            {
                additionalDatas.Add(ExperienceData.GetFightResultAdditionalData());
            }

            if (PvpData != null)
            {
                additionalDatas.Add(PvpData.GetFightResultAdditionalData());
            }

            return(new FightResultPlayerListEntry((short)Outcome, 0, Loot.GetFightLoot(), Id, Alive, Level,
                                                  additionalDatas));
        }
Exemple #3
0
        public void WriteToFile(ExperienceData experienceData)
        {
            if (!isExperienceDataToTextServiceEnabled)
            {
                return;
            }

            var prefix = experienceData.DisplayName.Replace(" ", string.Empty).ToLower();

            WriteToFile($"{prefix}_currentBaseExperience.txt", experienceData.CurrentExperience.ToString("N0"));
            WriteToFile($"{prefix}_requiredBaseExperience.txt", experienceData.RequiredExperience.ToString("N0"));
            WriteToFile($"{prefix}_killsTilNextLevel.txt", experienceData.KillsTilNextLevel.ToString("N0"));
            WriteToFile($"{prefix}_currentBaseExperiencePercent.txt", experienceData.CurrentExperiencePercent.ToString("F2") + "%");
            WriteToFile($"{prefix}_lastExperienceGain.txt", experienceData.LastExperienceGain.ToString("N0"));
            WriteToFile($"{prefix}_timeToLevel.txt", experienceData.TimeToLevel);
            WriteToFile($"{prefix}_experiencePerHour.txt", experienceData.ExperiencePerHour.ToString("N0"));
        }
        public void UpdateExperienceValues(ExperienceData experienceData, int currentExperience, int requiredExperience)
        {
            var newCurrentBaseExperience = currentExperience;
            var requiredBasedExp         = requiredExperience;

            if (newCurrentBaseExperience == int.MinValue || requiredBasedExp == int.MinValue ||
                requiredBasedExp == 15) // for some reason required base exp returns as 15 when char not selected, no idea why
            {
                experienceData.Reset();
                return;
            }

            experienceData.RequiredExperience = requiredBasedExp;

            if (experienceData.FirstUpdate)
            {
                experienceData.PreviousRequiredExperience = requiredBasedExp;
                experienceData.CurrentExperience          = newCurrentBaseExperience;
                experienceData.FirstUpdate = false;
            }
            else if (newCurrentBaseExperience != experienceData.CurrentExperience)                 // exp hasn't changed, nothing else to do
            {
                if (experienceData.RequiredExperience > experienceData.PreviousRequiredExperience) // handle level up scenarios
                {
                    experienceData.LastExperienceGain         = (experienceData.PreviousRequiredExperience - experienceData.CurrentExperience) + newCurrentBaseExperience;
                    experienceData.PreviousRequiredExperience = requiredBasedExp;
                }
                else
                {
                    experienceData.LastExperienceGain = newCurrentBaseExperience - experienceData.CurrentExperience;
                }

                experienceData.CurrentExperience = newCurrentBaseExperience;
                experienceData.GainedExperience += experienceData.LastExperienceGain;
            }

            experienceData.ExperiencePerHour = (int)(experienceData.GainedExperience * (TimeSpan.FromHours(1).TotalMilliseconds / experienceData.ElapsedTime.TotalMilliseconds));

            experienceData.TimeToLevel = CalculateTimeToLevel(experienceData);
            // make sure the elapsed time is kept updated every tick, must be called from experience data class
            experienceData.NotifyOfPropertyChange(() => experienceData.ElapsedTime);

            experienceDataToTextService.WriteToFile(experienceData);
        }
Exemple #5
0
        private void HandleExperienceGain(ExperienceInfo experience)
        {
            uint   points      = 0;
            string description = "";

            switch (experience.Type)
            {
            case ExperienceType.PerfectLevel:
                points      = GameFacade.Instance.RetrieveMediator <FashionLevel>().PerfectCompleteBonus;
                description = FashionGameTranslation.PERFECT_LEVEL;
                break;

            default:
                ExperienceData experienceForType = mExperiencePerType[experience.Type];
                if (experience.MultipleEvent != null)
                {
                    points = ((uint)experience.MultipleEvent) * experienceForType.ExperienceAmount;
                }
                else
                {
                    points = experienceForType.ExperienceAmount;
                }
                description = experienceForType.Description;
                break;
            }

            Vector3 windowPosition;

            if (experience.Position != null)
            {
                windowPosition = (Vector3)experience.Position;
            }
            else
            {
                FashionCameraMediator fashionCamera = GameFacade.Instance.RetrieveMediator <FashionCameraMediator>();
                windowPosition = fashionCamera.Camera.ViewportPointToRay(Vector3.one * 0.5f).GetPoint(1.0f);
            }

            EarnedXP(points);

            // TODO: Hard coded value
            GameFacade.Instance.RetrieveMediator <FashionGameGui>().SpawnFloatingWindow(windowPosition, points, description, new Color(0.69f, 0.79f, 0.36f));
        }
        private string CalculateTimeToLevel(ExperienceData experienceData)
        {
            if (experienceData.LastExperienceGain == 0)
            {
                return(Constants.INFINITY);
            }

            var totalExperienceRequired = experienceData.RequiredExperience - experienceData.CurrentExperience;
            var experiencePerSecond     = experienceData.GainedExperience / experienceData.ElapsedTime.TotalSeconds;

            if (experiencePerSecond == 0 || double.IsNaN(experiencePerSecond))
            {
                return(Constants.INFINITY);
            }

            var estimatedTimeToLevel = TimeSpan.FromSeconds(totalExperienceRequired / experiencePerSecond);

            return(estimatedTimeToLevel.ToShortDisplayFormat());
        }
Exemple #7
0
        public override void Apply()
        {
            Character.Inventory.AddKamas(Loot.Kamas);

            foreach (var drop in Loot.Items.Values)
            {
                // just diplay purpose
                if (drop.IgnoreGeneration)
                {
                    continue;
                }

                var template = ItemManager.Instance.TryGetTemplate(drop.ItemId);

                if (template.Effects.Count > 0)
                {
                    for (var i = 0; i < drop.Amount; i++)
                    {
                        var item = ItemManager.Instance.CreatePlayerItem(Character, drop.ItemId, 1);
                        Character.Inventory.AddItem(item, false);
                    }
                }
                else
                {
                    var item = ItemManager.Instance.CreatePlayerItem(Character, drop.ItemId, (int)drop.Amount);
                    Character.Inventory.AddItem(item, false);
                }
            }

            if (ExperienceData != null)
            {
                ExperienceData.Apply();
            }

            if (PvpData != null)
            {
                PvpData.Apply();
            }

            CharacterHandler.SendCharacterStatsListMessage(Character.Client);
            InventoryHandler.SendInventoryContentMessage(Character.Client);
        }
Exemple #8
0
    public void OnLevelUpBtn()
    {
        ExperienceData nextExpData = ExperienceDataTableObject.Instance.Table.All.FirstOrDefault(expData => expData.Level == "" + (_charData.Level + 1));

        if (nextExpData == null)
        {
            UiController.Instance.OpenDialogPanel("Level is at its Maximum",
                                                  () => {}
                                                  );
            return;
        }

        //レアリティによって1 ExpPointの価値が変わる
        int necessaryExpPoint = (int)(nextExpData.Exp * _charData.RarityData.CompoCostRatio);

        //次のレベルに必要なExpPointがある
        if (PlayerData.unusedExpPoints >= necessaryExpPoint)
        {
            UiController.Instance.OpenDialogPanel("Level Up to " + nextExpData.Level + "\nNeed: " + necessaryExpPoint + " To Level Up.",
                                                  //レベルアップ
                                                  () => {
                PlayerData.unusedExpPoints -= necessaryExpPoint;
                _charData.Level++;
                _charData.CurrentExp += necessaryExpPoint;

                UpdateCharacterParam();
            },
                                                  //cancelを押した場合何もなし
                                                  () => {
            }
                                                  );
        }
        //足りなかった場合
        else
        {
            UiController.Instance.OpenDialogPanel("Need More Exp Points!",
                                                  () => {}
                                                  );
        }
    }
Exemple #9
0
        private IExperienceControl[] GetExperienceControls(ExperienceData baseExperienceData, ExperienceData classExperienceData)
        {
            IExperienceControl[] experienceControls = new IExperienceControl[]
            {
                new ExperienceControl <ExperienceData>(
                    settings => settings.HideCurrentBaseExperience,
                    baseExperienceData,
                    baseData => baseData.CurrentExperience,
                    baseData => baseData.CurrentExperience.ToString("N0"),
                    classExperienceData)
                {
                    DisplayName       = "Current Exp",
                    HideComponentText = "Hide Current Experience"
                },
                new ExperienceControl <ExperienceData>(
                    settings => settings.HideRequiredBaseExperience,
                    baseExperienceData,
                    baseData => baseData.RequiredExperience,
                    baseData => baseData.RequiredExperience.ToString("N0"),
                    classExperienceData)
                {
                    DisplayName       = "Required Exp",
                    HideComponentText = "Hide Required Exp"
                },
                new ExperienceControl <ExperienceData>(
                    settings => settings.HideCurrentBaseExperencePercent,
                    baseExperienceData,
                    baseData => baseData.CurrentExperiencePercent,
                    baseData => baseData.CurrentExperiencePercent.ToString("N4"),
                    classExperienceData)
                {
                    DisplayName       = "Current Exp %",
                    HideComponentText = "Hide Current Experience %"
                },
                new ExperienceControl <ExperienceData>(
                    settings => settings.HideLastExperienceGain,
                    baseExperienceData,
                    baseData => baseData.LastExperienceGain,
                    baseData => baseData.LastExperienceGain.ToString("N0"),
                    classExperienceData)
                {
                    DisplayName       = "Last Exp",
                    HideComponentText = "Hide Last Exp Gain"
                },
                new ExperienceControl <ExperienceData>(
                    settings => settings.HideLastExperienceGainPercent,
                    baseExperienceData,
                    baseData => baseData.LastExperienceGainPercent,
                    baseData => baseData.LastExperienceGainPercent.ToString("N4"),
                    classExperienceData)
                {
                    DisplayName       = "Last Exp %",
                    HideComponentText = "Hide Last Exp Gain %"
                },
                new ExperienceControl <ExperienceData>(
                    settings => settings.HideKillsTilNextLevel,
                    baseExperienceData,
                    baseData => baseData.KillsTilNextLevel,
                    baseData => baseData.KillsTilNextLevel.ToString("N0"),
                    classExperienceData)
                {
                    DisplayName       = "Kills TNL",
                    HideComponentText = "Hide Kills TNL"
                },
                new ExperienceControl <ExperienceData>(
                    settings => settings.HideExperiencePerHour,
                    baseExperienceData,
                    baseData => baseData.ExperiencePerHour,
                    baseData => baseData.ExperiencePerHour.ToString("N0"),
                    classExperienceData)
                {
                    DisplayName       = "Exp/Hr",
                    HideComponentText = "Hide Exp/Hr"
                },
                new ExperienceControl <ExperienceData>(
                    settings => settings.HideTimeToLevel,
                    baseExperienceData,
                    baseData => baseData.TimeToLevel,
                    baseData => baseData.TimeToLevel,
                    classExperienceData)
                {
                    DisplayName       = "Time TNL",
                    HideComponentText = "Hide Time TNL",
                },
                new ExperienceControl <ExperienceData>(
                    settings => settings.HideSessionTime,
                    baseExperienceData,
                    data => data.ElapsedTime,
                    data => data.ElapsedTime.ToShortDisplayFormat())
                {
                    DisplayName       = "Session",
                    HideComponentText = "Hide Session Time",
                    CanShowClassValue = false
                },
            };

            foreach (var experienceControl in experienceControls)
            {
                experienceControl.ShowClassValue = Settings.Default.ShowClassExperienceRow;
            }

            return(experienceControls);
        }