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)); }
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)); }
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); }
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()); }
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); }
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!", () => {} ); } }
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); }