Exemplo n.º 1
0
        public static void F_CREATE_CHARACTER(BaseClient client, PacketIn packet)
        {
            GameClient cclient = (GameClient)client;
            CreateInfo Info;

            Info.slot     = packet.GetUint8();
            Info.race     = packet.GetUint8();
            Info.career   = packet.GetUint8();
            Info.sex      = packet.GetUint8();
            Info.model    = packet.GetUint8();
            Info.NameSize = packet.GetUint16();
            packet.Skip(2);

            byte[] traits = new byte[8];
            packet.Read(traits, 0, traits.Length);
            packet.Skip(7);

            string name = packet.GetString(Info.NameSize);

            ushort duplicate = 0;

            for (int i = 0; i < name.Length; i++)
            {
                if (i != 0)
                {
                    if (name[i] == name[i - 1])
                    {
                        duplicate++;
                    }
                    else
                    {
                        duplicate = 0;
                    }

                    if (duplicate > 3)
                    {
                        break;
                    }
                }
            }

            if (name.Length > 2 && !CharMgr.NameIsUsed(name) && CharMgr.AllowName(name) && !CharMgr.NameIsDeleted(name) && duplicate < 3)
            {
                CharacterInfo CharInfo = CharMgr.GetCharacterInfo(Info.career);
                if (CharInfo == null)
                {
                    Log.Error("ON_CREATE", "Can not find career :" + Info.career);
                }
                else
                {
                    //Log.Success("OnCreate", "New Character : " + Name);

                    Character Char = new Character
                    {
                        AccountId    = cclient._Account.AccountId,
                        bTraits      = traits,
                        Career       = Info.career,
                        CareerLine   = CharInfo.CareerLine,
                        ModelId      = Info.model,
                        Name         = name,
                        Race         = Info.race,
                        Realm        = CharInfo.Realm,
                        RealmId      = Program.Rm.RealmId,
                        Sex          = Info.sex,
                        FirstConnect = true
                    };

                    if (!CharMgr.CreateChar(Char))
                    {
                        Log.Error("CreateCharacter", "Hack : can not create more than 10 characters!");
                    }
                    else
                    {
                        List <CharacterInfo_item> Items = CharMgr.GetCharacterInfoItem(Char.CareerLine);

                        foreach (CharacterInfo_item Itm in Items)
                        {
                            if (Itm == null)
                            {
                                continue;
                            }

                            CharacterItem Citm = new CharacterItem
                            {
                                Counts       = Itm.Count,
                                CharacterId  = Char.CharacterId,
                                Entry        = Itm.Entry,
                                ModelId      = Itm.ModelId,
                                SlotId       = Itm.SlotId,
                                PrimaryDye   = 0,
                                SecondaryDye = 0
                            };
                            CharMgr.CreateItem(Citm);
                        }

                        Character_value CInfo = new Character_value
                        {
                            CharacterId = Char.CharacterId,
                            Level       = 1,
                            Money       = 2000,
                            Online      = false,
                            RallyPoint  = CharInfo.RallyPt,
                            RegionId    = CharInfo.Region,
                            Renown      = 0,
                            RenownRank  = 1,
                            RestXp      = 0,
                            Skills      = CharInfo.Skills,
                            Speed       = 100,
                            PlayedTime  = 0,
                            WorldO      = CharInfo.WorldO,
                            WorldX      = CharInfo.WorldX,
                            WorldY      = CharInfo.WorldY,
                            WorldZ      = CharInfo.WorldZ,
                            Xp          = 0,
                            ZoneId      = CharInfo.ZoneId
                        };

                        CharMgr.Database.AddObject(CInfo);
                        Program.AcctMgr.UpdateRealmCharacters(Program.Rm.RealmId, (uint)CharMgr.Database.GetObjectCount <Character>(" Realm=1"), (uint)CharMgr.Database.GetObjectCount <Character>(" Realm=2"));

                        CharacterClientData clientData = new CharacterClientData {
                            CharacterId = Char.CharacterId
                        };
                        CharMgr.Database.AddObject(clientData);

                        Char.Value      = CInfo;
                        Char.ClientData = clientData;

                        PacketOut Out = new PacketOut((byte)Opcodes.F_SEND_CHARACTER_RESPONSE, 32);
                        Out.WritePascalString(cclient._Account.Username);
                        cclient.SendPacket(Out);
                    }
                }
            }
            else
            {
                PacketOut Out = new PacketOut((byte)Opcodes.F_SEND_CHARACTER_ERROR, 64);
                Out.FillString(cclient._Account.Username, 24);
                Out.WriteStringBytes("You have entered a duplicate or invalid name. Please enter a new name.");
                cclient.SendPacket(Out);
            }
        }
Exemplo n.º 2
0
        public static void F_REQUEST_LASTNAME(BaseClient client, PacketIn In)
        {
            GameClient cclient = client as GameClient;

            if (cclient.Plr == null)
            {
                return;
            }

            Player Plr = cclient.Plr;

            string lastName = In.GetStringToZero();

            if (lastName == null)
            {
                lastName = "";
            }

            if (Plr.noSurname == 1)
            {
                Plr.SendClientMessage("You have been flagged by a GM to not be able to set a last name", ChatLogFilters.CHATLOGFILTERS_USER_ERROR);
                // Send success, don't subtract gold
                SendUpdateLastNameSuccess(Plr);
                return;
            }

            // Check to see if the player actually changed their last name
            if (lastName == Plr.Info.Surname)
            {
                Plr.SendClientMessage("The new name is the same as the current name.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR);
                // Send success, don't subtract gold
                SendUpdateLastNameSuccess(Plr);
                return;
            }

            // Check that the name does not exceed the character limit
            if (lastName.Length > GameData.Constants.LastNameCharacterLimit)
            {
                Plr.SendClientMessage("The new name is longer than the character limit.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR);
                SendUpdateLastNameError(Plr);
                return;
            }

            // Check that lastName contains only valid characters
            string invalidCharsFound = FindInvalidCharsInLastName(lastName);

            if (invalidCharsFound.Length > 0)
            {
                string msg = string.Format(
                    "The requested name '{0}' contains the invalid characters [{1}].",
                    lastName, invalidCharsFound);
                Plr.SendClientMessage(msg, ChatLogFilters.CHATLOGFILTERS_USER_ERROR);
                SendUpdateLastNameError(Plr);
                return;
            }

            // Check for high enough level
            if (Plr._Value.Level < GameData.Constants.LastNameLevelRequirement)
            {
                Plr.SendClientMessage("You require Rank " + GameData.Constants.LastNameLevelRequirement + " in order to set a last name.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR);
                SendUpdateLastNameError(Plr);
                return;
            }

            // Check that the player has enough gold
            if (Plr._Value.Money < GameData.Constants.LastNameChangeCost)
            {
                Plr.SendClientMessage("You do not have enough money.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR);
                SendUpdateLastNameError(Plr);
                return;
            }

            // Check for abuse
            // Kick straight off for using invalid name.
            if (!CharMgr.AllowName(lastName))
            {
                PacketOut Out = new PacketOut((byte)Opcodes.F_PLAYER_QUIT, 4);
                Out.WriteHexStringBytes("01000000");
                Plr.SendPacket(Out);
                return;
            }

            if (lastName.Length > 1)
            {
                lastName = char.ToUpper(lastName[0]) + lastName.Substring(1).ToLower();
            }

            // Update last name field
            Plr.SetLastName(lastName);
            Plr.RemoveMoney(Constants.LastNameChangeCost);

            SendUpdateLastNameSuccess(Plr);
        }