/// <summary>
        ///
        /// </summary>
        public void AddPlayerInfo(string playerName, long iGuid, WowCharacter wowPlayerInfo)
        {
            m_WowPlayerNameFromGuid.Add(iGuid, playerName);
            m_WowPlayerGuidFromName.Add(playerName, iGuid);

            m_WowPlayerInfoFromGuid.Add(iGuid, wowPlayerInfo);
        }
        /// <summary>
        /// 
        /// </summary>
        public void AddPlayerInfo( string playerName, long iGuid, WowCharacter wowPlayerInfo )
        {
            m_WowPlayerNameFromGuid.Add( iGuid, playerName );
            m_WowPlayerGuidFromName.Add( playerName, iGuid );

            m_WowPlayerInfoFromGuid.Add( iGuid, wowPlayerInfo );
        }
示例#3
0
        /// <summary>
        ///
        /// </summary>
        public WowItemBankManager(WowCharacter player)
        {
            base.Owner = player;

            base.InitBagSlot(InventorySlotBank.InventorySlotDefaultBank, InventorySlotBank.InventorySlotBankEnd - 1);

            WowItemContainer baseItemContainerDefaultBag = new WowItemContainer();

            baseItemContainerDefaultBag.Item = new WowItem();
            baseItemContainerDefaultBag.InitContainerSlot(BankSlotItem.BankSlotItemStart, (long)BankSlotItem.BankSlotItemEnd - 1);
            base.AddContainer(InventorySlotBank.InventorySlotDefaultBank, baseItemContainerDefaultBag);
        }
示例#4
0
        /// <summary>
        ///
        /// </summary>
        public WowItemBagManager(WowCharacter player)
        {
            base.Owner = player;

            base.InitBagSlot(InventorySlotBag.InventorySlotEquipmentBag, InventorySlotBag.InventorySlotMainBag);

            m_WowEquipmentBag      = new WowItemContainer();
            m_WowEquipmentBag.Item = new WowItem();
            m_WowEquipmentBag.InitContainerSlot(EquipmentSlot.EquipmentSlotStart, (long)EquipmentSlot.EquipmentSlotEnd - 1);
            base.AddContainer(InventorySlotBag.InventorySlotEquipmentBag, m_WowEquipmentBag);

            m_WowMainBag      = new WowItemContainer();
            m_WowMainBag.Item = new WowItem();
            m_WowMainBag.InitContainerSlot(BagSlotItem.BagSlotItemStart, (long)BagSlotItem.BagSlotItemEnd - 1);
            base.AddContainer(InventorySlotBag.InventorySlotMainBag, m_WowMainBag);
        }
        /// <summary>
        /// 
        /// </summary>
        private static void SQL_HandleCharLogin( CharLoginSQL sqlInfo )
        {
            //////////////////////////////////////////////////////////////////////////
            // 读取人物基础信息(CharacterBase)
            // 读取人物状态信息(CharacterBase)
            // 读取道具信息(CharacterItem)
            // 读取技能信息(CharacterSkill)
            // 读取法术信息(CharacterSpell)
            // 读取天赋信息(CharactersGift)
            // 读取宠物信息(CharacterPet)
            // 读取探索信息(CharacterExplore)
            // 读取声望信息(CharacterReputation)
            // 读取邮件信息(Mail)
            // 读取飞行点信息(CharactersTaxi)
            // 读取快捷按钮信息(CharacterActionBar)
            // 读取好友信息(CharacterSocial)
            // 读取行会信息(Guild)/
            // 读取团队信息(Group)
            // 读取组队信息 ?
            // 计算攻防信息
            // 读取人物增益/减益信息(CharacterAura)
            // 读取法书/道具冷却信息(CharacterSpellCooldown)


            //////////////////////////////////////////////////////////////////////////
            // 读取人物基础信息(CharacterBase)
            XPQuery<CharacterBase> characters = new XPQuery<CharacterBase>( OneDatabase.Session );

            var characterList = from character in characters
                               where character.Oid == sqlInfo.LoginCharGuid
                               select character;

            bool bIsFinde = false;
            WowCharacter wowCharacter = new WowCharacter();
            foreach ( CharacterBase character in characterList )
            {
                //////////////////////////////////////////////////////////////////////////
                // 读取人物状态信息(CharacterBase)
                wowCharacter.GuildGuid = character.Oid;
                wowCharacter.Name = character.CharacterName;
                wowCharacter.Level = (uint)character.Level;
                wowCharacter.Race = (uint)character.Race;
                wowCharacter.Class = (uint)character.Class;
                wowCharacter.ZoneId = (uint)character.ZoneId;
                wowCharacter.MapId = (uint)character.MapId;
                wowCharacter.X = character.PositionX;
                wowCharacter.Y = character.PositionY;
                wowCharacter.Z = character.PositionZ;
                wowCharacter.Gender = (uint)character.Gender;
                wowCharacter.Face = (uint)character.Face;
                wowCharacter.HairStyle = (uint)character.HairStyle;
                wowCharacter.HairColor = (uint)character.HairColor;
                wowCharacter.FacialHair = (uint)character.FacialHair;



                //////////////////////////////////////////////////////////////////////////
                // 读取道具信息(CharacterItem)
                XPQuery<CharacterItem> characterItems = new XPQuery<CharacterItem>( OneDatabase.Session );


                var characterItemList = from characterItem in characterItems
                                        where characterItem.Owner == character && characterItem.BagId > InventorySlotBag.InventorySlotEquipmentBag && characterItem.BagId < InventorySlotBag.InventorySlotMainBag
                                        select characterItem;

                foreach ( CharacterItem characterItem in characterItemList )
                {
                    if ( characterItem.SlotId != BaseItem.SlotNotSet )
                        continue;

                    WowItemContainer wowItemContainer = wowCharacter.BagManager.FindContainerAtSlot( characterItem.BagId ) as WowItemContainer;
                    if ( wowItemContainer != null )
                        continue;
                    else
                    {
                        WowItemTemplate wowItemTemplate = ProcessServer.WowZoneCluster.World.ItemTemplateManager.GetItemTemplate( (Serial)characterItem.ItemTemplateGuid ) as WowItemTemplate;
                        if ( wowItemTemplate == null )
                            continue;

                        wowItemContainer = new WowItemContainer();
                        wowItemContainer.InitContainerSlot( 0, wowItemTemplate.ContainerSlots );
                        wowItemContainer.Item = new WowItem();
                        wowItemContainer.Item.Serial = characterItem.Oid;
                        wowItemContainer.Item.ItemTemplate = wowItemTemplate;

                        wowCharacter.BagManager.AddContainer( characterItem.BagId, wowItemContainer );
                    }
                }


                characterItemList = from characterItem in characterItems
                                        select characterItem;

                foreach ( CharacterItem characterItem in characterItemList )
                {
                    if ( characterItem.SlotId != BaseItem.SlotNotSet )
                        continue;

                    WowItem wowItem = new WowItem();
                    wowItem.Serial = characterItem.Oid;

                    if ( characterItem.BagId == InventorySlotBag.InventorySlotEquipmentBag )
                    {
                        if ( characterItem.SlotId == BaseItem.SlotNotSet ||
                            characterItem.SlotId < EquipmentSlot.EquipmentSlotStart ||
                            characterItem.SlotId >= EquipmentSlot.EquipmentSlotEnd )
                            continue;

                        if ( wowCharacter.BagManager.EquipmentBag.FindSubItemAtSlot( characterItem.SlotId ) != null )
                            continue;

                        wowCharacter.BagManager.EquipmentBag.AddSubItem( characterItem.SlotId, wowItem );
                    }
                    else if ( characterItem.BagId == InventorySlotBag.InventorySlotMainBag )
                    {
                        if ( characterItem.SlotId == BaseItem.SlotNotSet ||
                            characterItem.SlotId < BagSlotItem.BagSlotItemStart ||
                            characterItem.SlotId >= BagSlotItem.BagSlotItemEnd )
                            continue;

                        if ( wowCharacter.BagManager.EquipmentBag.FindSubItemAtSlot( characterItem.SlotId ) != null )
                            continue;

                        wowCharacter.BagManager.MainBag.AddSubItem( characterItem.SlotId, wowItem );
                    }
                    else
                    {
                        WowItemContainer wowItemContainer = wowCharacter.BagManager.FindContainerAtSlot( characterItem.BagId ) as WowItemContainer;
                        if ( wowItemContainer == null )
                            continue;
                        else
                        {
                            if ( wowItemContainer.FindSubItemAtSlot( characterItem.SlotId ) != null )
                                continue;

                            wowItemContainer.AddSubItem( characterItem.SlotId, wowItem );
                        }
                    }
                }



                //////////////////////////////////////////////////////////////////////////
                // 读取技能信息(CharacterSkill)
                XPQuery<CharacterSkill> characterSkills = new XPQuery<CharacterSkill>( OneDatabase.Session );


                var characterSkillList = from characterSkill in characterSkills
                                        where characterSkill.Owner == character
                                         select characterSkill;

                foreach ( CharacterSkill characterSkill in characterSkillList )
                {
                    WowSkill wowSkill = new WowSkill();
                    wowSkill.Serial = characterSkill.SkillId;

                    wowCharacter.SkillManager.AddSkill( wowSkill.Serial, wowSkill );
                }



                //////////////////////////////////////////////////////////////////////////
                // 读取法术信息(CharacterSpell)
                XPQuery<CharacterSpell> characterSpells = new XPQuery<CharacterSpell>( OneDatabase.Session );


                var characterSpellList = from characterSpell in characterSpells
                                         where characterSpell.Owner == character
                                         select characterSpell;

                foreach ( CharacterSpell characterSpell in characterSpellList )
                {
                    WowSpell wowSpell = new WowSpell();
                    wowSpell.Serial = characterSpell.SpellId;

                    wowCharacter.SpellManager.AddSpell( wowSpell.Serial, wowSpell );
                }



                //////////////////////////////////////////////////////////////////////////
                // 读取天赋信息(CharactersGift)
                XPQuery<CharactersGift> charactersGifts = new XPQuery<CharactersGift>( OneDatabase.Session );


                var charactersGiftList = from charactersGift in charactersGifts
                                         where charactersGift.Owner == character
                                         select charactersGift;

                foreach ( CharactersGift charactersGift in charactersGiftList )
                {
                    WowTalent wowTalent = new WowTalent();
                    wowTalent.Serial = charactersGift.Oid;

                    wowCharacter.TalentManager.AddTalent( wowTalent.Serial, wowTalent );
                }



                //////////////////////////////////////////////////////////////////////////
                // 读取宠物信息(CharacterPet)
                XPQuery<CharacterPet> characterPets = new XPQuery<CharacterPet>( OneDatabase.Session );


                var characterPetList = from characterPet in characterPets
                                         where characterPet.Owner == character
                                         select characterPet;

                foreach ( CharacterPet characterPet in characterPetList )
                {
                    WowPet wowPet = new WowPet();

                }



                //////////////////////////////////////////////////////////////////////////
                // 读取探索信息(CharacterExplore)
                XPQuery<CharacterExplore> characterExplores = new XPQuery<CharacterExplore>( OneDatabase.Session );


                var characterExploreList = from characterExplore in characterExplores
                                       where characterExplore.Owner == character
                                       select characterExplore;

                foreach ( CharacterExplore characterExplore in characterExploreList )
                {

                }



                //////////////////////////////////////////////////////////////////////////
                // 读取声望信息(CharacterReputation)
                XPQuery<CharacterReputation> characterReputations = new XPQuery<CharacterReputation>( OneDatabase.Session );


                var characterReputationList = from characterReputation in characterReputations
                                           where characterReputation.Owner == character
                                           select characterReputation;

                foreach ( CharacterReputation characterReputation in characterReputationList )
                {

                }



                //////////////////////////////////////////////////////////////////////////
                // 读取邮件信息(Mail)
                XPQuery<Mail> mails = new XPQuery<Mail>( OneDatabase.Session );


                var mailList = from mail in mails
                               where mail.Receiver == character
                               select mail;

                foreach ( Mail mail in mailList )
                {

                }



                //////////////////////////////////////////////////////////////////////////
                // 读取飞行点信息(CharactersTaxi)
                XPQuery<CharactersTaxi> charactersTaxis = new XPQuery<CharactersTaxi>( OneDatabase.Session );


                var charactersTaxiList = from charactersTaxi in charactersTaxis
                                         where charactersTaxi.Owner == character
                                         select charactersTaxi;

                foreach ( CharactersTaxi charactersTaxi in charactersTaxiList )
                {

                }



                //////////////////////////////////////////////////////////////////////////
                // 读取快捷按钮信息(CharacterActionBar)
                XPQuery<CharacterActionBar> characterActionBars = new XPQuery<CharacterActionBar>( OneDatabase.Session );


                var characterActionBarList = from characterActionBar in characterActionBars
                                         where characterActionBar.Owner == character
                                         select characterActionBar;

                foreach ( CharacterActionBar characterActionBar in characterActionBarList )
                {

                }



                //////////////////////////////////////////////////////////////////////////
                // 读取好友信息(CharacterSocial)
                XPQuery<CharacterSocial> characterSocials = new XPQuery<CharacterSocial>( OneDatabase.Session );


                var characterSocialList = from characterSocial in characterSocials
                                          where characterSocial.Owner == character
                                          select characterSocial;

                foreach ( CharacterSocial characterSocial in characterSocialList )
                {

                }



                //////////////////////////////////////////////////////////////////////////
                // 读取行会信息(Guild)
                XPQuery<Guild> guilds = new XPQuery<Guild>( OneDatabase.Session );


                var guildList = from guild in guilds
                                where guild.Leader == character
                                select guild;

                foreach ( Guild guild in guildList )
                {

                }



                //////////////////////////////////////////////////////////////////////////
                // 读取团队信息(Group)
                XPQuery<Group> groups = new XPQuery<Group>( OneDatabase.Session );


                var groupList = from groupItem in groups
                                where groupItem.Leader == character
                                select groupItem;

                foreach ( Group group in groupList )
                {

                }



                //////////////////////////////////////////////////////////////////////////
                // 读取组队信息 ?

                //////////////////////////////////////////////////////////////////////////
                // 计算攻防信息

                //////////////////////////////////////////////////////////////////////////
                // 读取人物增益/减益信息(CharacterAura)
                XPQuery<CharacterAura> characterAuras = new XPQuery<CharacterAura>( OneDatabase.Session );


                var characterAuraList = from characterAura in characterAuras
                                        where characterAura.Owner == character
                                        select characterAura;

                foreach ( CharacterAura characterAura in characterAuraList )
                {

                }



                //////////////////////////////////////////////////////////////////////////
                // 读取法书/道具冷却信息(CharacterSpellCooldown)
                XPQuery<CharacterSpellCooldown> characterSpellCooldowns = new XPQuery<CharacterSpellCooldown>( OneDatabase.Session );


                var characterSpellCooldownList = from characterSpellCooldown in characterSpellCooldowns
                                                 where characterSpellCooldown.Owner == character
                                                 select characterSpellCooldown;

                foreach ( CharacterSpellCooldown characterSpellCooldown in characterSpellCooldownList )
                {

                }

                bIsFinde = true;
                break;
            }

            if ( bIsFinde == false )
            {
                Debug.WriteLine( "CHAR_LOGIN_FAILED error!" );

                sqlInfo.NetState.Send( new Word_PlayerLoginFailedResponse( ResponseCodes.CHAR_LOGIN_FAILED ) );
                return;
            }

            sqlInfo.NetState.Send( new Word_PlayerDungeonDifficulty( InstanceMode.MODE_NORMAL ) );

            sqlInfo.NetState.Send( new Word_PlayerLoginVerifyWorld( wowCharacter.MapId, wowCharacter.X, wowCharacter.Y, wowCharacter.Z, wowCharacter.O ) );

            AccountData[] accountDataArray = new AccountData[8];
            for ( int iIndex = 0; iIndex < accountDataArray.Length; iIndex++ )
                accountDataArray[iIndex] = new AccountData();

            sqlInfo.NetState.Send( new Word_PlayerAccountDataMd5( accountDataArray ) );

            sqlInfo.NetState.Send( new Word_PlayerVoiceSystemStatus( 0 ) );// 需要连接套接字

            sqlInfo.NetState.Send( new Word_PlayerTriggerCinematic( 0 ) );

            sqlInfo.NetState.Send( new Word_PlayerBroadcastMsg( "ookk1234567" ) );

            sqlInfo.NetState.Send( new Word_PlayerSetRestStart() );

            sqlInfo.NetState.Send( new Word_PlayerBindPointUpdate( wowCharacter.X, wowCharacter.Y, wowCharacter.Z, wowCharacter.MapId, wowCharacter.ZoneId ) );

            uint[] uiTutorialArray = new uint[8];
            for ( int iIndex = 0; iIndex < uiTutorialArray.Length; iIndex++ )
                uiTutorialArray[iIndex] = 0;

            sqlInfo.NetState.Send( new Word_PlayerTutorialFlags( uiTutorialArray ) );

            sqlInfo.NetState.Send( new Word_PlayerInitialSpells( wowCharacter.SpellManager.ToArray(), wowCharacter.SpellCooldownManager.ToArray() ) );

            sqlInfo.NetState.Send( new Word_PlayerActionButtons( wowCharacter.ActionBarManager.ToArray() ) );

            sqlInfo.NetState.Send( new Word_PlayerInitializeFactions( wowCharacter.ReputationManager.ToArray() ) );

            sqlInfo.NetState.Send( new Word_PlayerInitWorldStates( wowCharacter.MapId, wowCharacter.ZoneId, 0 ) );

            sqlInfo.NetState.Send( new Word_PlayerLoginSetTimeSpeed( DateTime.Now ) );
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="character"></param>
 /// <returns></returns>
 public bool KnowsOf( WowCharacter character )
 {
     return m_KnownCharacters.Contains( character );
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="dt"></param>
        public virtual void OnUpdate(object sender, ProcessSliceEventArgs eventArgs)
        {
            if (m_isInWorld == false)
            {
                return;
            }

            uint         uiUpdateCount = 0;
            MemoryPacket memoryPacket  = new MemoryPacket();

            // 把自己改变得值广播到附近
            this.BroadcastValueUpdate();

            // 开始更新道具

            // 开始更新 新的游戏道具
            if (m_NewItems.Count > 0)
            {
                WowItem[] newItemArray = m_NewItems.ToArrayAndClear();
                foreach (var newItem in newItemArray)
                {
                    //item.OnInsert();
                    newItem.ObjectCreationUpdate(memoryPacket, true);
                    //obj.m_isInWorld = true;
                }

                uiUpdateCount += (uint)newItemArray.Length;
            }
            // 结束更新 新的游戏道具


            // 开始跟新 存在的游戏道具
            WowItem[] ownedItemArray = m_OwnedItemsRequiringUpdates.ToArrayAndClear();
            foreach (var ownedItem in ownedItemArray)
            {
                ownedItem.BroadcastValueUpdate();
            }
            // 结束跟新 存在的游戏道具

            // 检测
            if ((eventArgs.UpdateTime - m_PreUpdateTime) < ProcessServer.WowZoneCluster.World.UpdateWorldSpeed && uiUpdateCount > 0)
            {
                // 仅仅更新道具,就发送数据 然后退出
                // 完成更新
                this.AddUpdateData(memoryPacket, uiUpdateCount);
                this.SendUpdates();

                return;
            }


            // 如果还需要更新人物等。。。
            HashSet <WorldEntity> newWorldEntity = new HashSet <WorldEntity>();

            // 获取附近的对象
            IEnumerable <WorldEntity> nearbyWorldEntity = this.GetAllEntitysInRange(WowCharacter.BROAD_CAST_RANGE);

            // 排除已存在的对象
            newWorldEntity.AddRange(nearbyWorldEntity);
            newWorldEntity.ExceptWith(m_KnownEntity);
            newWorldEntity.Remove(this);


            // 开始更新 新的游戏物体
            foreach (WorldEntity entity in newWorldEntity)
            {
                WowCharacter wowCharacter = entity as WowCharacter;
                if (wowCharacter != null)
                {
                    m_KnownCharacters.Add(wowCharacter);
                }

                IWowUpdate wowUpdate = entity.GetComponent <IWowUpdate>(WowUpdate.WOW_UPDATE_COMPONENT_ID);
                if (wowUpdate != null)
                {
                    wowUpdate.ObjectCreationUpdate(memoryPacket, false);
                }
                //OnEncountered( obj );
            }

            uiUpdateCount += (uint)newWorldEntity.Count;
            // 结束更新 新的游戏物体


            // 获取已不再附近的对象
            HashSet <WorldEntity> outOfRangeWorldEntity = new HashSet <WorldEntity>();

            // 排除已不存在的对象
            outOfRangeWorldEntity.AddRange(m_KnownEntity);
            outOfRangeWorldEntity.ExceptWith(nearbyWorldEntity);

            foreach (WorldEntity entity in outOfRangeWorldEntity)
            {
                WowCharacter wowCharacter = entity as WowCharacter;
                if (wowCharacter != null)
                {
                    m_KnownCharacters.Remove(wowCharacter);
                }

                // m_outOfRange.Add(obj.EntityId);

                //OnOutOfRange( obj );
            }

            // 添加现在已存在附近的游戏物体
            m_KnownEntity.Clear();
            m_KnownEntity.AddRange(nearbyWorldEntity);

            // 完成更新
            if (uiUpdateCount > 0)
            {
                this.AddUpdateData(memoryPacket, uiUpdateCount);
                this.SendUpdates();
            }

            foreach (var entity in outOfRangeWorldEntity)
            {
                // send the destroy packet
                IWowUpdate wowUpdate = entity.GetComponent <IWowUpdate>(WowUpdate.WOW_UPDATE_COMPONENT_ID);
                if (wowUpdate != null)
                {
                    wowUpdate.SendDestroyToPlayer(this);
                }
            }

            m_PreUpdateTime = eventArgs.UpdateTime;
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="character"></param>
 /// <returns></returns>
 public bool KnowsOf(WowCharacter character)
 {
     return(m_KnownCharacters.Contains(character));
 }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        internal static void World_HandleCharCreate( NetState netState, PacketReader packetReader )
        {
            WorldExtendData extendData = netState.GetComponent<WorldExtendData>( WorldExtendData.COMPONENT_ID );
            if ( extendData == null )
            {
                Debug.WriteLine( "World_PacketHandlers.World_HandleCharEnum(...) - extendData == null error!" );
                return;
            }

            if ( extendData.IsLoggedIn == false )
            {
                Debug.WriteLine( "World_PacketHandlers.World_HandleCharEnum(...) - extendData.IsLoggedIn == false error!" );
                return;
            }

            string strName = packetReader.ReadUTF8StringSafe();
            byte iRace = packetReader.ReadByte();
            byte iClass = packetReader.ReadByte();
            byte iGender = packetReader.ReadByte();
            byte iSkin = packetReader.ReadByte();
            byte iFace = packetReader.ReadByte();
            byte iHairStyle = packetReader.ReadByte();
            byte iHairColor = packetReader.ReadByte();
            byte iFacialHair = packetReader.ReadByte();
            byte iOutFitId = packetReader.ReadByte();

            if ( WorldPacketHandlers.VerifyName( strName ) == false )
            {
                netState.Send( new Word_CharCreateResponseError( ResponseCodes.CHAR_CREATE_NAME_IN_USE ) );
                return;
            }

            if ( ProcessServer.WowZoneCluster.World.GlobalPlayerInfo.GetPlayerInfo( strName ) != null )
            {
                netState.Send( new Word_CharCreateResponseError( ResponseCodes.CHAR_CREATE_NAME_IN_USE ) );
                return;
            }

            WowCharacterCreateInfo wowCharacterCreateInfo = ProcessServer.WowZoneCluster.World.GlobalCreateInfo.GetCreateInfo( iRace, iClass );
            if ( wowCharacterCreateInfo == null )
            {
                netState.Send( new Word_CharCreateResponseError( ResponseCodes.CHAR_CREATE_NAME_IN_USE ) );
                return;
            }

            if ( ( iRace == WowRace.BloodElf || iRace == WowRace.Draenei ) &&
                extendData.CommonData.IsTBC == false )
            {
                netState.Send ( new Word_CharCreateResponseError ( ResponseCodes.CHAR_CREATE_NAME_IN_USE ) );
                return;
            }

            WowCharacterLevelInfo[] wowCharacterLevelInfo = ProcessServer.WowZoneCluster.World.GlobalLevelInfo.GetLevelInfo( iRace, iClass );
            if ( wowCharacterLevelInfo == null )
            {
                netState.Send( new Word_CharCreateResponseError( ResponseCodes.CHAR_CREATE_NAME_IN_USE ) );
                return;
            }

            WowCharacter wowPlayerInfo = new WowCharacter();

            wowPlayerInfo.Serial = 0;
            wowPlayerInfo.IsTBC = extendData.CommonData.IsTBC;
            wowPlayerInfo.AccountGuid = extendData.CommonData.AccountsGuid;

            wowPlayerInfo.Name = strName;
            wowPlayerInfo.Race = iRace;
            wowPlayerInfo.Class = iClass;
            wowPlayerInfo.Gender = iGender;
            wowPlayerInfo.Skin = iSkin;
            wowPlayerInfo.Face = iFace;
            wowPlayerInfo.HairStyle = iHairStyle;
            wowPlayerInfo.HairColor = iHairColor;
            wowPlayerInfo.FacialHair = iFacialHair;

            wowPlayerInfo.X = wowCharacterCreateInfo.PositionX;
            wowPlayerInfo.Y = wowCharacterCreateInfo.PositionY;
            wowPlayerInfo.Z = wowCharacterCreateInfo.PositionZ;
            wowPlayerInfo.MapId = wowCharacterCreateInfo.Map;
            wowPlayerInfo.ZoneId = wowCharacterCreateInfo.Zone;

            wowPlayerInfo.BindX = 0;
            wowPlayerInfo.BindY = 0;
            wowPlayerInfo.BindZ = 0;
            wowPlayerInfo.BindMapId = 0;
            wowPlayerInfo.BindZoneId = 0;

            ChrRacesEntry chrRacesEntry = DBCInstances.ChrRacesEntry.LookupIDEntry( iRace );
            if ( chrRacesEntry == null )
            {
                netState.Send( new Word_CharCreateResponseError( ResponseCodes.CHAR_CREATE_NAME_IN_USE ) );
                return;
            }

            if ( chrRacesEntry.m_TeamId == 7 )
                wowPlayerInfo.TeamId = WowTeam.ALLIANCE;
            else
                wowPlayerInfo.TeamId = WowTeam.HORDE;

            ChrClassesEntry chrClassesEntry = DBCInstances.ChrClassesEntry.LookupIDEntry( iClass );
            if ( chrClassesEntry == null )
            {
                netState.Send( new Word_CharCreateResponseError( ResponseCodes.CHAR_CREATE_NAME_IN_USE ) );
                return;
            }

            wowPlayerInfo.PowerType = chrClassesEntry.m_PowerType;

            switch ( iRace )
            {
                case (byte)WowRace.Tauren:
                    wowPlayerInfo.TaxiMask[0] = 1 << ( 22 - 1 );

                    break;
                case (byte)WowRace.Human:
                    wowPlayerInfo.TaxiMask[0] = 1 << ( 2 - 1 );
                    
                    break;
                case (byte)WowRace.Dwarf:
                    wowPlayerInfo.TaxiMask[0] = 1 << ( 6 - 1 );

                    break;
                case (byte)WowRace.Gnome:
                    wowPlayerInfo.TaxiMask[0] = 1 << ( 6 - 1 );

                    break;
                case (byte)WowRace.Orc:
                    wowPlayerInfo.TaxiMask[0] = 1 << ( 23 - 1 );

                    break;
                case (byte)WowRace.Troll:
                    wowPlayerInfo.TaxiMask[0] = 1 << ( 23 - 1 );

                    break;
                case (byte)WowRace.Undead:
                    wowPlayerInfo.TaxiMask[0] = 1 << ( 11 - 1 );

                    break;
                case (byte)WowRace.Nightelf:
                    wowPlayerInfo.TaxiMask[0] = 1 << ( 27 - 1 );

                    break;
                case (byte)WowRace.BloodElf:
                    wowPlayerInfo.TaxiMask[2] = 1 << ( 18 - 1 );

                    break;
                case (byte)WowRace.Draenei:
                    wowPlayerInfo.TaxiMask[2] = 1 << ( 30 - 1 );

                    break;
            }

            wowPlayerInfo.Size = ( iRace == WowRace.Tauren ) ? 1.3f : 1.0f;

            wowPlayerInfo.Health = wowCharacterLevelInfo[0].Health;
            wowPlayerInfo.Mana = wowCharacterLevelInfo[0].Mana;
            wowPlayerInfo.Rage = 0;
            wowPlayerInfo.Focus = 0;
            wowPlayerInfo.Energy = 0;

            wowPlayerInfo.MaxHealth = wowCharacterLevelInfo[0].Health;
            wowPlayerInfo.MaxMana = wowCharacterLevelInfo[0].Mana;
            wowPlayerInfo.MaxRage = 0;
            wowPlayerInfo.MaxFocus = 0;
            wowPlayerInfo.MaxEnergy = 0;

            wowPlayerInfo.BaseHealth = wowCharacterLevelInfo[0].Health;
            wowPlayerInfo.BaseMana = wowCharacterLevelInfo[0].Mana;

            wowPlayerInfo.FactionTemplate = 0;
            wowPlayerInfo.Level = 1;

            wowPlayerInfo.Strength = wowCharacterLevelInfo[0].Strength;
            wowPlayerInfo.Agility = wowCharacterLevelInfo[0].Agility;
            wowPlayerInfo.Stamina = wowCharacterLevelInfo[0].Stamina;
            wowPlayerInfo.Intellect = wowCharacterLevelInfo[0].Intellect;
            wowPlayerInfo.Spirit = wowCharacterLevelInfo[0].Spirit;

            wowPlayerInfo.BoundingRadius = 0.388999998569489f;
            wowPlayerInfo.CombatReach = 1.5f;

            if ( iGender == 0 )
            {
                wowPlayerInfo.DisplayId = wowCharacterCreateInfo.MaleDisplayId;
                wowPlayerInfo.NativeDisplayId = wowCharacterCreateInfo.MaleDisplayId;
            }
            else
            {
                wowPlayerInfo.DisplayId = wowCharacterCreateInfo.FemaleDisplayId;
                wowPlayerInfo.NativeDisplayId = wowCharacterCreateInfo.FemaleDisplayId;
            }


            wowPlayerInfo.AttackPower = 0;
            wowPlayerInfo.NextLevelXP = 400;
            wowPlayerInfo.MaxLevel = 10;

            for ( uint iIndex = 0; iIndex < DBCInstances.FactionEntry.Count; iIndex++ )
            {
                FactionEntry factionEntry = DBCInstances.FactionEntry.LookupRowEntry( iIndex );
                if ( factionEntry == null )
                    continue;

                if ( factionEntry.m_RepListId < 0 )
                    continue;

                int iReputation = 0;
                if ( ( factionEntry.m_BaseRepMask1 & ( 1 << ( iRace - 1 ) ) ) != 0 )
                {
                    iReputation = (int)factionEntry.m_BaseRepValue1;
                }
                else if ( ( factionEntry.m_BaseRepMask2 & ( 1 << ( iRace - 1 ) ) ) != 0 )
                {
                    iReputation = (int)factionEntry.m_BaseRepValue2;
                }
                else if ( ( factionEntry.m_BaseRepMask3 & ( 1 << ( iRace - 1 ) ) ) != 0 )
                {
                    iReputation = (int)factionEntry.m_BaseRepValue3;
                }
                else if ( ( factionEntry.m_BaseRepMask4 & ( 1 << ( iRace - 1 ) ) ) != 0 )
                {
                    iReputation = (int)factionEntry.m_BaseRepValue4;
                }
                else continue;

                WowReputation wowReputation = new WowReputation()
                {
                    FactionId = factionEntry.ID,
                    Reputation = iReputation,
                };

                if ( (int)wowReputation.CalcRating() <= (int)WowFactionRating.Hostile )
                    wowReputation.Flag |= (byte)WowFactionFlag.FactionFlagAtWar;

                if ( ( factionEntry.m_Team == 469 && wowPlayerInfo.TeamId == WowTeam.ALLIANCE ) ||
                    ( factionEntry.m_Team == 67 && wowPlayerInfo.TeamId == WowTeam.HORDE ) )
                    wowReputation.Flag |= (byte)WowFactionFlag.FactionFlagVisible;

                wowPlayerInfo.ReputationManager.AddReputation( wowReputation.FactionId, wowReputation );
            }

            foreach ( WowPlayerInfoSkill wowPlayerInfoSkill in wowCharacterCreateInfo.WowPlayerSkills.Skills )
            {
                WowSkillTemplate wowSkillTemplate = ProcessServer.WowZoneCluster.World.GlobalSkillTemplates.GetSkillTemplate( (long)wowPlayerInfoSkill.Skill ) as WowSkillTemplate;
                if ( wowSkillTemplate == null )
                    continue;

                WowSkill wowSkill = new WowSkill()
                {
                    Serial = wowSkillTemplate.SkillId,
                    SkillTemplate = wowSkillTemplate
                };

                wowPlayerInfo.SkillManager.AddSkill( wowSkill.Serial, wowSkill );
            }

            foreach ( WowPlayerInfoSpell wowPlayerInfoSpell in wowCharacterCreateInfo.WowPlayerSpells.Spells )
            {
                WowSpellTemplate wowSpellTemplate = ProcessServer.WowZoneCluster.World.GlobalSpellTemplates.GetSpellTemplate( (long)wowPlayerInfoSpell.Spell ) as WowSpellTemplate;
                if ( wowSpellTemplate == null )
                    continue;

                WowSpell wowSpell = new WowSpell()
                {
                    Serial = wowSpellTemplate.SpellId,
                    SpellTemplate = wowSpellTemplate
                };

                wowPlayerInfo.SpellManager.AddSpell( wowSpell.Serial, wowSpell );
            }

            foreach ( WowPlayerInfoItem wowPlayerInfoItem in wowCharacterCreateInfo.WowPlayerItems.Items )
            {
                WowItemTemplate wowItemTemplate = ProcessServer.WowZoneCluster.World.ItemTemplateManager.GetItemTemplate( (long)wowPlayerInfoItem.ItemId ) as WowItemTemplate;
                if ( wowItemTemplate == null )
                    continue;

                WowItemContainer equipmentBag = wowPlayerInfo.BagManager.EquipmentBag;
                if ( equipmentBag == null )
                    break;

                WowItem wowItem = equipmentBag.FindSubItemAtSlot( wowItemTemplate.InventoryType ) as WowItem;
                if ( wowItem == null )
                {
                    wowItem = new WowItem()
                    {
                        ItemTemplate = wowItemTemplate
                    };

                    equipmentBag.AddSubItem( wowItemTemplate.InventoryType, wowItem );
                }
                else
                {
                    WowItemContainer mainBag = wowPlayerInfo.BagManager.MainBag;
                    if ( mainBag == null )
                        break;

                    wowItem = new WowItem()
                    {
                        ItemTemplate = wowItemTemplate
                    };

                    mainBag.AddToFreeSlot( wowItem );
                }
            }


            foreach ( WowPlayerInfoAction wowPlayerInfoAction in wowCharacterCreateInfo.WowPlayerActions.Actions )
            {
                WowActionBar wowActionBar = new WowActionBar()
                {
                    Serial = wowPlayerInfoAction.Button, 
                    Action = wowPlayerInfoAction.Action, 
                    Type = wowPlayerInfoAction.Type
                };

                wowPlayerInfo.ActionBarManager.AddActionBar( wowActionBar.Serial, wowActionBar );
            }

            if ( wowPlayerInfo.SaveNewCreature() == false )
            {
                netState.Send( new Word_CharCreateResponseError( ResponseCodes.CHAR_CREATE_NAME_IN_USE ) );
                return;
            }

            ProcessServer.WowZoneCluster.World.GlobalPlayerInfo.AddPlayerInfo( wowPlayerInfo.Name, wowPlayerInfo.Serial, wowPlayerInfo );

            netState.Send( new Word_CharCreateResponse() );
        }
示例#10
0
 protected static void SendUpdatePacket( WowCharacter character, Packet packet )
 {
 }
示例#11
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="character"></param>
 /// <param name="packet"></param>
 protected static void SendUpdatePacket( WowCharacter character, Packet packet )
 {
     character.NetState.Send( packet );
 }