Пример #1
0
        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."
                });
        }
Пример #2
0
        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."
                });
        }