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(); return; } 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 = Manager.Worlds[targetWorld].EnterWorld(entity = new Player(this)) }); stage = ProtocalStage.Ready; } else SendFailure("Failed to Load character."); }
private 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(); return; } if (CheckAccountInUse(account.AccountId) != false) { logger.Warn("Account in use: " + account.AccountId); SendPacket(new svrPackets.FailurePacket() { Message = "Account in use! Retrying..." }); return; } 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.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(); ok = v > 0; 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 svrPackets.FailurePacket() { Message = "Failed to Load character." }); }