예제 #1
0
        /// <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);
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
파일: World.cs 프로젝트: soulson/whisper
        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);
        }
예제 #7
0
        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();
        }