public DbChar LoadCharacter(int accId, int charId) { DbAccount acc = new DbAccount(_db, accId); if (acc.IsNull) { return(null); } DbChar ret = new DbChar(acc, charId); if (ret.IsNull) { return(null); } else { return(ret); } }
public CreateStatus CreateCharacter( XmlData dat, DbAccount acc, ushort type, out DbChar character) { XElement cls = dat.ObjectTypeToElement[type]; if (Sets.GetLength(0, "alive." + acc.AccountId).Exec() >= acc.MaxCharSlot) { character = null; return(CreateStatus.ReachCharLimit); } int newId = (int)Hashes.Increment(0, acc.Key, "nextCharId").Exec(); character = new DbChar(acc, newId) { ObjectType = type, Level = 1, Experience = 0, Fame = 0, Items = cls.Element("Equipment").Value.CommaToArray <ushort>(), Stats = new int[] { ushort.Parse(cls.Element("MaxHitPoints").Value), ushort.Parse(cls.Element("MaxMagicPoints").Value), ushort.Parse(cls.Element("Attack").Value), ushort.Parse(cls.Element("Defense").Value), ushort.Parse(cls.Element("Speed").Value), ushort.Parse(cls.Element("Dexterity").Value), ushort.Parse(cls.Element("HpRegen").Value), ushort.Parse(cls.Element("MpRegen").Value), }, HP = int.Parse(cls.Element("MaxHitPoints").Value), MP = int.Parse(cls.Element("MaxMagicPoints").Value), Tex1 = 0, Tex2 = 0, Pet = 0xffff, FameStats = new byte[0], CreateTime = DateTime.Now, LastSeen = DateTime.Now }; character.Flush(); Sets.Add(0, "alive." + acc.AccountId, BitConverter.GetBytes(newId)); return(CreateStatus.OK); }
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); }
public bool IsAlive(DbChar character) { return(_db.SetContains("alive." + character.Account.AccountId, BitConverter.GetBytes(character.CharId))); }
public IEnumerable <Tuple <string, string, double> > GetBonuses(EmbeddedData data, DbChar character, bool firstBorn) { foreach (var i in bonusDat) { if (i.Item3(this, character, character.Fame)) { yield return(Tuple.Create(i.Item1, i.Item2, i.Item4(character.Fame))); } } //Well Equiped var bonus = character.Items.Take(4).Where(x => x != -1).Sum(x => data.Items[(ushort)x].FameBonus) / 100.0; if (bonus > 0) { yield return(Tuple.Create("Well Equipped", "Bonus for equipment", character.Fame * bonus)); } //First born if (firstBorn) { yield return(Tuple.Create("First Born", "Best fame of any of your previous incarnations", character.Fame * 0.1)); } }
public bool IsAlive(DbChar character) => Sets.Contains(0, $"alive.{character.Account.AccountId}", BitConverter.GetBytes(character.CharId)).Exec();
public bool IsAlive(DbChar character) { return(Sets.Contains(0, "alive." + character.Account.AccountId, BitConverter.GetBytes(character.CharId)).Exec()); }