private void Sync(Account account)
        {
            this.Username = account.Username;
              int totalBattles = account.Battles.Count();
              int wonABattles = account.BattlesA.Where(battle => battle.Result == 1).Count();
              int wonBBattles = account.BattlesB.Where(battle => battle.Result == 2).Count();
              int tiedBattles = account.Battles.Where(battle => battle.Result == 0).Count();

              this.BattlesWon = wonBBattles + wonABattles;
              this.BattlesTied = tiedBattles;
              this.BattlesLost = totalBattles - BattlesWon - tiedBattles;
              this.Ranking = (int)Game.Core.RequestContext.Model<Entities>()
                                   .UserRanks.FirstOrDefault(u => u.Username == this.Username)
                                   .Rank;
        }
 /// <summary>
 /// Create a new Account object.
 /// </summary>
 /// <param name="id">Initial value of the Id property.</param>
 /// <param name="username">Initial value of the Username property.</param>
 public static Account CreateAccount(global::System.Int32 id, global::System.String username)
 {
     Account account = new Account();
     account.Id = id;
     account.Username = username;
     return account;
 }
 /// <summary>
 /// Deprecated Method for adding a new object to the Accounts EntitySet. Consider using the .Add method of the associated ObjectSet&lt;T&gt; property instead.
 /// </summary>
 internal void AddToAccounts(Account account)
 {
     base.AddObject("Accounts", account);
 }
 public UserStats(Account acc)
 {
     this.Sync(acc);
 }
        /// <summary>
        /// Crea una cuenta nueva, regresando el resultado de la operación
        /// </summary>
        /// <param name="username">The user.</param>
        /// <param name="password">The password.</param>
        /// <returns>The operation result</returns>
        public IOperationResult CreateAccount(string username, string password)
        {
            if (!userRegx.IsMatch(username))
            {
                return new OperationResult(ResultValue.Fail, "El nombre de usuario solamente puede contener letras, números y _\ny ser de 4 a 16 caracteres");
            }

            if (!passRegx.IsMatch(password))
            {
                return new OperationResult(ResultValue.Fail, "El password solamente puede contener letras, números y _\ny ser de 8 a 32 caracteres");
            }

            if (IsAlreadyTaken(username))
            {
                return new OperationResult(ResultValue.Fail, "El nombre de usuario " + username + " ya está registrado");
            }

            /**
             * Se tiene un conjunto de cartas por default con las que inician los jugadores.
             **/
            var acc = new Account
                {
                    Username = username,
                    Password = password,
                };

            var model = RequestContext.Model<Entities>();
            foreach (var card in model.Cards.Take(8))
            {
                acc.Deck.Add(card);
            }

            acc.Deck.Add(new Card
            {
                AttackPoints = 10,
                DefensePoints = 20,
                Effect = new CardEffect
                {
                    ProbabilityOfEffect = 0.1,
                    Name = "name",
                    LifePointsChange = 0,
                    EffectTiming = 0,
                    DisableOpponentEffect = false,
                    Description = "as",
                    CardDefenseMultiplier = 0.9,
                    CardDefenseChange = 10,
                    CardAttackMultiplier = 1,
                    Affected = 0
                },
                ImageUrl = "",
                Name = "name"
            });

            model.AddToAccounts(acc);

            model.SaveChanges();

            return new OperationResult(ResultValue.Success, "Cuenta creada exitósamente");
        }