private void ProcessCreatePacket(CreatePacket pkt) { var nextCharId = 1; var maxChar = 2; nextCharId = db.GetNextCharId(account); var cmd = db.CreateQuery(); cmd.CommandText = "SELECT maxCharSlot FROM accounts WHERE id=@accId;"; cmd.Parameters.AddWithValue("@accId", account.AccountId); try { maxChar = (int)cmd.ExecuteScalar(); } catch { } cmd = db.CreateQuery(); cmd.CommandText = "SELECT COUNT(id) FROM characters WHERE accId=@accId AND dead = FALSE;"; cmd.Parameters.AddWithValue("@accId", account.AccountId); var currChar = (int)(long)cmd.ExecuteScalar(); if (currChar >= maxChar) { Disconnect(); db.Dispose(); return; } if (CheckAccountInUse(account.AccountId) != false) { Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine(@"Account in use: " + account.AccountId); Console.ForegroundColor = ConsoleColor.White; SendPacket(new FailurePacket { Message = "Account in use! Retrying..." }); db.Dispose(); return; } character = Database.CreateCharacter(pkt.ObjectType, nextCharId); var stats = new int[] { character.MaxHitPoints, character.MaxMagicPoints, character.Attack, character.Defense, character.Speed, character.Dexterity, character.HpRegen, character.MpRegen, }; var ok = true; cmd = db.CreateQuery(); cmd.Parameters.AddWithValue("@accId", account.AccountId); cmd.Parameters.AddWithValue("@charId", nextCharId); cmd.Parameters.AddWithValue("@charType", pkt.ObjectType); cmd.Parameters.AddWithValue("@items", Utils.GetCommaSepString(character.EquipSlots())); cmd.Parameters.AddWithValue("@stats", Utils.GetCommaSepString(stats)); cmd.Parameters.AddWithValue("@fameStats", character.FameStats.ToString()); cmd.CommandText = "INSERT INTO characters (accId, charId, charType, level, exp, fame, items, hp, mp, stats, dead, pet, fameStats) VALUES (@accId, @charId, @charType, 1, 0, 0, @items, 100, 100, @stats, FALSE, -1, @fameStats);"; var v = cmd.ExecuteNonQuery(); ok = v > 0; if (ok) { if (account.Bonuses != null) if (account.Bonuses.Count > 0) { var chrEquip = character.Equipment; for (var i = 4; i < 12; i++) { if (chrEquip[i] == -1) { chrEquip[i] = account.Bonuses.First(); account.Bonuses.Remove(account.Bonuses.First()); SendPacket(new TextPacket { Name = "", BubbleTime = 0, Stars = -1, Text = "You received " + XmlDatas.TypeToId[chrEquip[i]] + "." }); if (account.Bonuses.Count == 0) break; } } db.SetBonuses(account.AccountId, account.Bonuses); character.Equipment = chrEquip; } else { } else { account.Bonuses = new List<short>(); } if (IP.Gifts != null) if (IP.Gifts.Count > 0) { var chrEquip = character.Equipment; for (var i = 4; i < 12; i++) { if (chrEquip[i] == -1) { chrEquip[i] = IP.Gifts.First(); IP.Gifts.Remove(IP.Gifts.First()); SendPacket(new TextPacket { Name = "", BubbleTime = 0, Stars = -1, Text = "You received " + XmlDatas.TypeToId[chrEquip[i]] + "." }); if (IP.Gifts.Count == 0) break; } } db.SetBonuses(IP.Address, IP.Gifts); character.Equipment = chrEquip; } else { } else { IP.Gifts = new List<short>(); } db.SaveBackpacks(character, account); } if (ok) { var target = RealmManager.Worlds[targetWorld]; //Delay to let client load remote texture target.Timers.Add(new WorldTimer(2000, (w, t) => SendPacket(new CreateResultPacket { CharacterID = character.CharacterId, ObjectID = RealmManager.Worlds[targetWorld].EnterWorld(entity = new Player(this)) }))); stage = ProtocalStage.Ready; } else SendPacket(new FailurePacket { Message = "Failed to Load character." }); }
void ProcessCreatePacket(CreatePacket pkt) { Console.WriteLine("Client char create packet"); int nextCharId = 1; nextCharId = db0.GetNextCharID(account); var cmd = db0.CreateQuery(); cmd.CommandText = "SELECT maxCharSlot FROM accounts WHERE id=@accId;"; cmd.Parameters.AddWithValue("@accId", account.AccountId); object maxChar1 = cmd.ExecuteScalar(); int maxChar = int.Parse(maxChar1.ToString()); cmd = db0.CreateQuery(); cmd.CommandText = "SELECT COUNT(id) FROM characters WHERE accId=@accId AND dead = FALSE;"; cmd.Parameters.AddWithValue("@accId", account.AccountId); object currChar1 = cmd.ExecuteScalar(); int currChar = int.Parse(currChar1.ToString()); if (currChar >= maxChar) { Disconnect(); } if (CheckAccountInUse(account.AccountId) != false) { Console.WriteLine("Account in use: " + account.AccountId); SendPacket(new svrPackets.FailurePacket() { Message = "Account in use! Retrying..." }); return; } Console.WriteLine("Client second char create packet"); character = Database.CreateCharacter(pkt.ObjectType, nextCharId); int[] stats = new int[] { character.MaxHitPoints, character.MaxMagicPoints, character.Attack, character.Defense, character.Speed, character.Dexterity, character.HpRegen, character.MpRegen, }; bool ok = true; cmd = db0.CreateQuery(); cmd.Parameters.AddWithValue("@accId", account.AccountId); cmd.Parameters.AddWithValue("@charId", nextCharId); cmd.Parameters.AddWithValue("@charType", pkt.ObjectType); cmd.Parameters.AddWithValue("@items", character._Equipment); cmd.Parameters.AddWithValue("@stats", Utils.GetCommaSepString(stats)); cmd.Parameters.AddWithValue("@fameStats", character.FameStats.ToString()); cmd.CommandText = "INSERT INTO characters (accId, charId, charType, level, exp, fame, items, hp, mp, stats, dead, pet, fameStats) VALUES (@accId, @charId, @charType, 1, 0, 0, @items, 100, 100, @stats, FALSE, -1, @fameStats);"; int v = cmd.ExecuteNonQuery(); //int v = 1; ok = v > 0; Console.WriteLine("Client char create packet result: "+ok); if (ok) { SendPacket(new CreateResultPacket() { CharacterID = character.CharacterId, ObjectID = RealmManager.Worlds[targetWorld].EnterWorld(entity = new Player(this)) }); stage = ProtocalStage.Ready; } else SendPacket(new svrPackets.FailurePacket() { Message = "Failed to Load character." }); }
void ProcessCreatePacket(CreatePacket pkt) { int nextCharId = 1; nextCharId = db.GetNextCharID(account); var cmd = db.CreateQuery(); cmd.CommandText = "SELECT maxCharSlot FROM accounts WHERE id=@accId;"; cmd.Parameters.AddWithValue("@accId", account.AccountId); int maxChar = (int)cmd.ExecuteScalar(); cmd = db.CreateQuery(); cmd.CommandText = "SELECT COUNT(id) FROM characters WHERE accId=@accId AND dead = FALSE;"; cmd.Parameters.AddWithValue("@accId", account.AccountId); int currChar = (int)(long)cmd.ExecuteScalar(); if (currChar >= maxChar) Disconnect(); character = Database.CreateCharacter(pkt.ObjectType, nextCharId); int[] stats = new int[] { character.MaxHitPoints, character.MaxMagicPoints, character.Attack, character.Defense, character.Speed, character.Dexterity, character.HpRegen, character.MpRegen, }; bool ok = true; cmd = db.CreateQuery(); cmd.CommandText = @"INSERT INTO characters(accId, charId, charType, level, exp, fame, items, hp, mp, stats, dead, pet) VALUES(@accId, @charId, @charType, 1, 0, 0, @items, 100, 100, @stats, FALSE, -1);"; cmd.Parameters.AddWithValue("@accId", account.AccountId); cmd.Parameters.AddWithValue("@charId", nextCharId); cmd.Parameters.AddWithValue("@charType", pkt.ObjectType); cmd.Parameters.AddWithValue("@items", character._Equipment); cmd.Parameters.AddWithValue("@stats", Utils.GetCommaSepString(stats)); int v = cmd.ExecuteNonQuery(); ok = v > 0; if (ok) { SendPacket(new CreateSuccessPacket() { CharacterID = character.CharacterId, ObjectID = RealmManager.Worlds[targetWorld].EnterWorld(entity = new Player(this)) }); stage = ProtocalStage.Ready; } else SendPacket(new svrPackets.FailurePacket() { Message = "Failed to Load character." }); }