Exemple #1
0
        public void IgnoreAccount(DbAccount target, DbAccount acc, bool add)
        {
            var ignoreList = target.IgnoreList.ToList();

            if (ignoreList.Contains(acc.AccountId) && add)
            {
                return;
            }

            if (add)
            {
                ignoreList.Add(acc.AccountId);
            }
            else
            {
                ignoreList.Remove(acc.AccountId);
            }

            target.IgnoreList = ignoreList.ToArray();
            target.FlushAsync();
        }
Exemple #2
0
        public LoginStatus Verify(string uuid, string password, out DbAccount acc)
        {
            acc = null;
            var info = new DbLoginInfo(this, uuid);

            if (info.IsNull)
            {
                return(LoginStatus.AccountNotExists);
            }

            var userPass = Utils.SHA1(password + info.Salt);

            if (Convert.ToBase64String(userPass) != info.HashedPassword)
            {
                return(LoginStatus.InvalidCredentials);
            }

            acc = new DbAccount(this, info.AccountId);

            return(LoginStatus.OK);
        }
Exemple #3
0
        public bool CheckPackage(DbAccount acc, int package, int maxpurchases)
        {
            List <int> packageList = acc.PurchasedPackages.ToList();
            int        purchases   = 0;

            foreach (IGrouping <int, int> i in packageList.GroupBy(j => j))
            {
                if (i.Key == package)
                {
                    purchases = i.Count();
                }
            }
            if (purchases < maxpurchases)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemple #4
0
        public bool CheckMysteryBox(DbAccount acc, int box, int total)
        {
            List <int> boxList   = acc.PurchasedBoxes.ToList();
            int        purchases = 0;

            foreach (IGrouping <int, int> i in boxList.GroupBy(j => j))
            {
                if (i.Key == box)
                {
                    purchases = i.Count();
                }
            }
            if (purchases < total)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemple #5
0
 public bool RenameIGN(DbAccount acc, string newName, string lockToken)
 {
     if (defaultNames.Contains(newName, StringComparer.InvariantCultureIgnoreCase))
     {
         return(false);
     }
     using (var trans = CreateTransaction())
     {
         trans.AddCondition(Condition.KeyEquals(1, NAME_LOCK, lockToken));
         Hashes.Remove(0, "names", acc.Name.ToUpperInvariant());
         Hashes.Set(0, "names", newName.ToUpperInvariant(), acc.AccountId.ToString());
         if (!trans.Execute().Exec())
         {
             return(false);
         }
     }
     acc.Name       = newName;
     acc.NameChosen = true;
     acc.Flush();
     return(true);
 }
Exemple #6
0
        public void LockAccount(DbAccount target, DbAccount acc, bool add)
        {
            var lockList = target.LockList.ToList();

            if (lockList.Contains(acc.AccountId) && add)
            {
                return;
            }

            if (add)
            {
                lockList.Add(acc.AccountId);
            }
            else
            {
                lockList.Remove(acc.AccountId);
            }

            target.LockList = lockList.ToArray();
            target.FlushAsync();
        }
Exemple #7
0
        private void UpdateAccountCurrency(DbAccount acc, CurrencyType type, int value, bool total = false)
        {
            switch (type)
            {
            case CurrencyType.Gold:
                if (total)
                {
                    acc.TotalCredits = value;
                }
                else
                {
                    acc.Credits = value;
                }
                break;

            case CurrencyType.Fame:
                if (total)
                {
                    acc.TotalFame = value;
                }
                else
                {
                    acc.Fame = value;
                }
                break;

            case CurrencyType.Tokens:
                if (total)
                {
                    acc.TotalTokens = value;
                }
                else
                {
                    acc.Tokens = value;
                }
                break;
            }
        }
Exemple #8
0
 public DbDeath(DbAccount acc, int charId)
 {
     Account = acc;
     CharId  = charId;
     Init(acc.Database, "death." + acc.AccountId + "." + charId);
 }
Exemple #9
0
 public DbClassStats(DbAccount acc)
 {
     Account = acc;
     Init(acc.Database, "classStats." + acc.AccountId);
 }
Exemple #10
0
 public DbVault ReadVault(DbAccount acc)
 {
     return(new DbVault(acc));
 }
Exemple #11
0
 private void UpdatePlayerGuildFame(DbAccount acc, int amount)
 {
     acc.GuildFame = (int)_db.HashIncrement(acc.Key, "guildFame", amount);
 }
Exemple #12
0
        public RegisterStatus Register(string uuid, string password, bool isGuest, out DbAccount acc)
        {
            var newAccounts = _resources.Settings.NewAccounts;

            acc = null;
            if (!_db.HashSet("logins", uuid.ToUpperInvariant(), "{}", When.NotExists))
            {
                return(RegisterStatus.UsedName);
            }

            int newAccId = (int)_db.StringIncrement("nextAccId");

            acc = new DbAccount(_db, newAccId)
            {
                UUID           = uuid,
                Name           = GuestNames[(uint)uuid.GetHashCode() % GuestNames.Length],
                Admin          = false,
                NameChosen     = false,
                FirstDeath     = true,
                GuildId        = 0,
                GuildRank      = 0,
                VaultCount     = newAccounts.VaultCount,
                MaxCharSlot    = newAccounts.MaxCharSlot,
                RegTime        = DateTime.Now,
                Guest          = isGuest,
                Fame           = newAccounts.Fame,
                TotalFame      = newAccounts.Fame,
                Credits        = newAccounts.Credits,
                TotalCredits   = newAccounts.Credits,
                PassResetToken = "",
                LastSeen       = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds
            };

            if (newAccounts.SkinsUnlocked)
            {
                acc.Skins = (from skin in _resources.GameData.Skins.Values
                             select skin.Type).ToArray();
            }

            acc.FlushAsync();

            DbLoginInfo login = new DbLoginInfo(_db, uuid);

            byte[] x = new byte[0x10];
            gen.GetNonZeroBytes(x);
            string salt = Convert.ToBase64String(x);
            string hash = Convert.ToBase64String(Utils.SHA1(password + salt));

            login.HashedPassword = hash;
            login.Salt           = salt;
            login.AccountId      = acc.AccountId;
            login.Flush();

            DbClassStats stats = new DbClassStats(acc);

            if (newAccounts.ClassesUnlocked)
            {
                foreach (var @class in _resources.GameData.Classes.Keys)
                {
                    stats.Unlock(@class);
                }
            }
            stats.FlushAsync();

            return(RegisterStatus.OK);
        }
Exemple #13
0
 public IDisposable Lock(DbAccount acc)
 {
     return(new l(this, acc));
 }
Exemple #14
0
 public DbVault ReadVault(DbAccount acc) => new DbVault(acc);
Exemple #15
0
 public DbClassStats ReadClassStats(DbAccount acc) => new DbClassStats(acc);
Exemple #16
0
 public TimeSpan?GetLockTime(DbAccount acc)
 {
     return(_db.KeyTimeToLive($"lock:{acc.AccountId}"));
 }
Exemple #17
0
 public l(Database db, DbAccount acc)
 {
     this.db  = db;
     this.acc = acc;
     lockOk   = db.AcquireLock(acc);
 }
Exemple #18
0
 public void VerifyAge(DbAccount acc)
 {
     Hashes.Set(0, acc.Key, "isAgeVerified", "1");
     acc.Flush();
     acc.Reload();
 }
Exemple #19
0
 public void Guest(DbAccount acc, bool isGuest)
 {
     acc.Guest = isGuest;
     acc.FlushAsync();
 }
Exemple #20
0
 // Market
 public void AddPlayerOffer(DbAccount acc, int id) => AddPlayerOffers(acc, new int[] { id });
Exemple #21
0
 public void ReloadAccount(DbAccount acc)
 {
     acc.FlushAsync();
     acc.Reload();
 }
Exemple #22
0
 public void AddGift(DbAccount acc, ushort item) => AddGifts(acc, new ushort[] { item });
Exemple #23
0
 public DbClassStats ReadClassStats(DbAccount acc)
 {
     return(new DbClassStats(acc));
 }
Exemple #24
0
 public DbCharInv(DbAccount acc, int charId)
 {
     Field = "items";
     Init(acc.Database, "char." + acc.AccountId + "." + charId, Field);
 }
Exemple #25
0
        public int CreateGiftChest(DbAccount acc)
        {
            var id = (int)_db.HashIncrement(acc.Key, "giftCount");

            return(id);
        }
Exemple #26
0
 public DbClassStats(DbAccount acc, ushort?type = null)
 {
     Account = acc;
     Init(acc.Database, "classStats." + acc.AccountId, type?.ToString());
 }
Exemple #27
0
 internal DbChar(DbAccount acc, int charId)
 {
     Account = acc;
     CharId  = charId;
     Init(acc.Database, "char." + acc.AccountId + "." + charId);
 }
Exemple #28
0
 public DbClassAvailability(DbAccount acc)
 {
     Account = acc;
     Init(acc.Database, $"classAvailability.{acc.AccountId}");
 }
Exemple #29
0
 public DbVault(DbAccount acc)
 {
     Account = acc;
     Init(acc.Database, "vault." + acc.AccountId);
 }
Exemple #30
0
        public CreateStatus CreateCharacter(DbAccount acc, ushort type, ushort skinType, out DbChar character)
        {
            if (_db.SetLength("alive." + acc.AccountId) >= acc.MaxCharSlot)
            {
                character = null;
                return(CreateStatus.ReachCharLimit);
            }

            // check skin requirements
            if (skinType != 0)
            {
                var skinDesc = _resources.GameData.Skins[skinType];
                if (!acc.Skins.Contains(skinType) ||
                    skinDesc.PlayerClassType != type)
                {
                    character = null;
                    return(CreateStatus.SkinUnavailable);
                }
            }

            var objDesc     = _resources.GameData.ObjectDescs[type];
            var playerDesc  = _resources.GameData.Classes[type];
            var classStats  = ReadClassStats(acc);
            var unlockClass = (playerDesc.Unlock != null)
                ? playerDesc.Unlock.Type
                : null;

            // check to see if account has unlocked via gold
            if (classStats.AllKeys
                .All(x => (ushort)(int)x != type))
            {
                // check to see if account meets unlock requirements
                if ((unlockClass != null && classStats[(ushort)unlockClass].BestLevel < playerDesc.Unlock.Level))
                {
                    character = null;
                    return(CreateStatus.Locked);
                }
            }

            var newId = (int)_db.HashIncrement(acc.Key, "nextCharId");

            var newCharacters = _resources.Settings.NewCharacters;

            character = new DbChar(acc, newId)
            {
                ObjectType = type,
                Level      = newCharacters.Level,
                Experience = 0,
                Fame       = 0,
                Items      = InitInventory(playerDesc.Equipment),
                Stats      = new int[]
                {
                    playerDesc.Stats[0].StartingValue,
                    playerDesc.Stats[1].StartingValue,
                    playerDesc.Stats[2].StartingValue,
                    playerDesc.Stats[3].StartingValue,
                    playerDesc.Stats[4].StartingValue,
                    playerDesc.Stats[5].StartingValue,
                    playerDesc.Stats[6].StartingValue,
                    playerDesc.Stats[7].StartingValue,
                },
                HP         = playerDesc.Stats[0].StartingValue,
                MP         = playerDesc.Stats[1].StartingValue,
                Tex1       = 0,
                Tex2       = 0,
                Skin       = skinType,
                PetId      = 0,
                FameStats  = new byte[0],
                CreateTime = DateTime.Now,
                LastSeen   = DateTime.Now
            };

            if (newCharacters.Maxed)
            {
                character.Stats = new int[]
                {
                    playerDesc.Stats[0].MaxValue,
                    playerDesc.Stats[1].MaxValue,
                    playerDesc.Stats[2].MaxValue,
                    playerDesc.Stats[3].MaxValue,
                    playerDesc.Stats[4].MaxValue,
                    playerDesc.Stats[5].MaxValue,
                    playerDesc.Stats[6].MaxValue,
                    playerDesc.Stats[7].MaxValue,
                };
                character.HP = character.Stats[0];
                character.MP = character.Stats[1];
            }

            character.FlushAsync();
            _db.SetAdd("alive." + acc.AccountId, BitConverter.GetBytes(newId));
            return(CreateStatus.OK);
        }