コード例 #1
0
        /// <summary>
        /// Handles the creation of the character.
        /// </summary>
        /// <param name="player">The player.</param>
        /// <param name="packet">The packet.</param>
        private static bool HandleCreation(Models.Entities.Player player, CharacterCreationPacket packet)
        {
            if (player.ClientId != packet.ClientId)
            {
                Accounts.Ban(player.DbPlayer.Account, Drivers.Messages.INVALID_CLIENT_ID, DbAccount.BanRangeType.Perm);
                return(false);
            }

            if (!packet.Job.ToString().StartsWith("Intern"))
            {
                Accounts.Ban(player.DbPlayer.Account, Drivers.Messages.INVALID_CLIENT_ID, DbAccount.BanRangeType.Perm);
                return(false);
            }

            if (packet.Model != 1003 && packet.Model != 1004 &&
                packet.Model != 2001 && packet.Model != 2002)
            {
                Accounts.Ban(player.DbPlayer.Account, Drivers.Messages.INVALID_MODEL, DbAccount.BanRangeType.Perm);
                return(false);
            }

            if (!ValidateCharacters(packet.Name))
            {
                player.ClientSocket.Send(MessageController.CreateNewPlayer(Drivers.Messages.Errors.INVALID_CHARS));
                return(true);
            }

            if (IsBannedName(packet.Name))
            {
                player.ClientSocket.Send(MessageController.CreateNewPlayer(Drivers.Messages.Errors.NAME_BANNED));
                return(true);
            }

            if (Players.GetPlayerByName(packet.Name, Drivers.Settings.WorldSettings.Server) != null)
            {
                player.ClientSocket.Send(MessageController.CreateNewPlayer(Drivers.Messages.Errors.NAME_TAKEN));
                return(true);
            }

            // stats fallback ...
            player.DbPlayer.Strength = 0;
            player.DbPlayer.Agility  = 0;
            player.DbPlayer.Vitality = 0;
            player.DbPlayer.Spirit   = 0;

            player.DbPlayer.Name  = packet.Name;
            player.Job            = packet.Job;
            player.Level          = 1;
            player.DbPlayer.Model = packet.Model;

            Players.Create(player.DbPlayer,
                           new ushort[] { player.Strength, player.Vitality, player.Agility, player.Spirit },
                           player.MaxHP, player.MaxMP);
            player.ClientSocket.Disconnect(Drivers.Messages.SUCCESS_CREATE);

            return(true);
        }