/// <summary> /// Initializes this Character before it is added to the Shard for the first time. /// </summary> /// <param name="world">static world store</param> public override void Initialize(World.World world) { base.Initialize(world); // initialize default values DamageDoneArcaneMultiplier = 1.0f; DamageDoneFrostMultiplier = 1.0f; DamageDoneFireMultiplier = 1.0f; DamageDoneNatureMultiplier = 1.0f; DamageDoneShadowMultiplier = 1.0f; DamageDoneHolyMultiplier = 1.0f; DamageDonePhysicalMultiplier = 1.0f; UnitFlags |= UnitFlags.PvPUnit; // TODO: instead of 0x18 as described here, this field has value 0x28 for players. need to determine the difference UnitFlags2 |= UnitFlags2.Supportable; UnitFlags2 |= UnitFlags2.CanHaveAuras; RestState = RestState.Normal; WatchedFactionIndex = -1; // get race definition for this character and assign related unit values RaceDefinition rd = world.RaceDefinitions[Race]; DisplayID = NativeDisplayID = rd.GetDisplayID(Sex); FactionTemplate = rd.FactionID; // get model definition for this character and assign related unit values ModelDefinition md = ModelDefinition.Default; if (world.ModelDefinitions.ContainsKey(DisplayID)) { md = world.ModelDefinitions[DisplayID]; } else { log.WarnFormat("model bounding info not found for player {0} with display id {1}", Name, DisplayID); } BoundingRadius = md.BoundingRadius * Scale; CombatReach = md.CombatReach * Scale; // get player base stats and assign. probably not the best spot for this // TODO: get healthmax and manamax out of here CharacterBaseStats cbs = world.CharacterBaseStats[Race][Class][(byte)Level]; HealthMax = Health = HealthBase = cbs.Health; ManaMax = Mana = ManaBase = cbs.Mana; Strength = cbs.Strength; Agility = cbs.Agility; Stamina = cbs.Stamina; Intellect = cbs.Intellect; Spirit = cbs.Spirit; }
private void cboRace_SelectionChanged(object sender, SelectionChangedEventArgs e) { RaceDefinition selectedRace = (cboRace.SelectedItem as RaceDefinition); if (selectedRace == null) { return; } race.Name = selectedRace.Name; race.Size = selectedRace.Size; race.BaseSpeed = selectedRace.Speed; UpdateNotes(selectedRace); }
public EditCharacterRaceWindow(PlayerRace race) { if (race != null) { this.race.CopyValues(race); } InitializeComponent(); RaceDefinition tempRace = RaceList.Find(x => StringComparer.CurrentCultureIgnoreCase.Compare(x.Name, this.race.Name) == 0); if (tempRace != null) { UpdateNotes(tempRace); } }
public async Task <SaveResult> SaveEntity(RaceDefinitionViewModel viewModel) { SaveResult saveResult = new SaveResult(); Dictionary <bool, string> dictionary = new Dictionary <bool, string>(); var entity = new RaceDefinition(); try { if (viewModel.Id != 0) { if (_context.RaceDefinition.IgnoreQueryFilters().Any(a => a.Id == viewModel.Id)) { entity = await _context.RaceDefinition.IgnoreQueryFilters().FirstOrDefaultAsync(a => a.Id == viewModel.Id); } entity = viewModel.ToEntity(entity); _context.RaceDefinition.Update(entity); } else { entity = viewModel.ToEntity(entity); _context.RaceDefinition.Add(entity); } await _context.SaveChangesAsync(); if (entity.Id > 0) { saveResult.IsSuccess = true; saveResult.Id = entity.Id; } } catch (DbUpdateException upDateEx) { var results = upDateEx.GetSqlerrorNo(); string msg = results == (int)SqlErrNo.FK ? ConstEntity.MissingValueMsg : ConstEntity.UniqueKeyMsg; saveResult = dictionary.GetValidateEntityResults(msg).ToSaveResult(); } catch (Exception ex) { saveResult.Message = CrudError.SaveErrorMsg; } return(saveResult); }
private void LoadRaceDefinitions(IWhisperDatasource datasource) { log.Info("loading race definitions..."); datasource.ExecuteQuery("select id, name, flags, display_id_male, display_id_female, first_login_cinematic_id, faction_id from race_definition", reader => { var defs = new Dictionary <Race, RaceDefinition>(); while (reader.Read()) { RaceDefinition rd = new RaceDefinition((Race)reader.GetByte(0), reader.GetString(1), reader.GetInt32(6), (RaceFlags)reader.GetInt32(2), reader.GetInt32(3), reader.GetInt32(4), reader.GetInt32(5)); defs.Add(rd.Race, rd); log.DebugFormat("loaded race definition for {0}", rd.Name); } RaceDefinitions = defs; }); }
private void UpdateNotes(RaceDefinition race) { List <Inline> list = new List <Inline>(); list.Add(new Bold(new Run("Attribute Bonuses:" + Environment.NewLine))); list.Add(new Run(String.Join(", ", race.AttributeBonuses.ConvertAll(x => { if (x.CanChooseAttribute) { return(String.Format("{0} {1} or {2}", (x.Bonus < 0 ? x.Bonus.ToString() : "+" + x.Bonus.ToString()), Enum.Format(typeof(AttributeType), x.Attribute, "G"), Enum.Format(typeof(AttributeType), x.OptionalAttribute.Value, "G"))); } else { return(String.Format("{0} {1}", (x.Bonus < 0 ? x.Bonus.ToString() : "+" + x.Bonus.ToString()), (x.Attribute == AttributeType.Wildcard ? "any attribute" : Enum.Format(typeof(AttributeType), x.Attribute, "G")))); } })))); list.Add(new Run(Environment.NewLine)); list.Add(new Run(Environment.NewLine)); list.Add(new Bold(new Run("Skill Bonuses:" + Environment.NewLine))); if (race.SkillBonues.Count == 0) { list.Add(new Run("<none>")); } else { list.Add(new Run(String.Join(", ", race.SkillBonues.ConvertAll(x => String.Format("{0} {1}", (x.Bonus < 0 ? x.Bonus.ToString() : "+" + x.Bonus.ToString()), (x.Skill == Skill.Wildcard ? "any skill" : Enum.Format(typeof(Skill), x.Skill, "G"))))))); } txtNotes.Inlines.Clear(); txtNotes.Inlines.AddRange(list); }
private static void Main(string[] args) { var strategieResolver = new StrategieResolver(); var tireDefinitions = new List <ITiresDefinition> { new TiresDefinition(TiresType.RacingSuperSoft, 5, new TimeSpan(0, 0, 2, 13, 900)), new TiresDefinition(TiresType.RacingSoft, 6, new TimeSpan(0, 0, 2, 14, 900)), new TiresDefinition(TiresType.RacingMedium, 9, new TimeSpan(0, 0, 2, 16, 200)), //new TiresDefinition(TiresType.RacingHard, 12, new TimeSpan(0, 0, 2, 18, 300)), }; var def = new RaceDefinition(TimeSpan.FromHours(1), tireDefinitions, "Mon Track", new TimeSpan(0, 0, 0, 9, 500), 60, new TimeSpan(0, 0, 0, 4, 100), new TimeSpan(0, 0, 0, 10, 0), 16.5, 10); System.Console.WriteLine("Parmeters:"); System.Console.WriteLine("-----------------------------------------------"); System.Console.WriteLine("Tires definitions:"); foreach (var tiresDefinition in tireDefinitions) { System.Console.WriteLine($"\t{tiresDefinition}"); } System.Console.WriteLine("Race definition:"); System.Console.WriteLine($"\t{nameof(def.TrackName)} = {def.TrackName}"); System.Console.WriteLine($"\t{nameof(def.TiresChangeDuration)} = {def.TiresChangeDuration}"); System.Console.WriteLine($"\t{nameof(def.FuelToFillInPercent)} = {def.FuelToFillInPercent}"); System.Console.WriteLine($"\t{nameof(def.FuelFillingDuration)} = {def.FuelFillingDuration}"); System.Console.WriteLine($"\t{nameof(def.TimeLostForPitStop)} = {def.TimeLostForPitStop}"); System.Console.WriteLine($"\t{nameof(def.NumberOfLapsWithFullFuel)} = {def.NumberOfLapsWithFullFuel}"); System.Console.WriteLine($"\t{nameof(def.FuelReservePercent)} = {def.FuelReservePercent}"); System.Console.WriteLine(); var result = strategieResolver.Resolve(def); System.Console.WriteLine(); System.Console.WriteLine("Result:"); System.Console.WriteLine("-----------------------------------------------"); System.Console.WriteLine($"Startup tires : {result.StartTiresType}"); System.Console.WriteLine($"Number of laps : {result.NumberOfLaps}"); System.Console.WriteLine($"Race time : {result.RaceTime}"); System.Console.WriteLine($"Pit stops count {result.PitStops.Count} :"); var i = 1; foreach (var pitStop in result.PitStops) { System.Console.WriteLine($"\tNo {i++,3:N0}, Lap = {pitStop.LapNumber,3:N0}, Refuel = {pitStop.Refuel,3:F0}%, ChangeTires = {pitStop.ChangeTires,-5}, Tires = {pitStop.TiresType,-16}, FuelState = {pitStop.FuelState,6:F2}%, TiresState = {pitStop.TiresState,6:F2}%"); } System.Console.WriteLine($"Fuel end state {result.FuelEndState,3:N3}%"); System.Console.WriteLine($"Tires end state {result.TiresEndState,3:N3}%"); System.Console.ReadLine(); }