/// <summary>
        ///
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void WorldServerShout(NetState netState, PacketReader packetReader)
        {
            WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;

            if (l_ExtendData == null)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData == null error!");
                return;
            }

            if (l_ExtendData.ROSEMobile.IsLoggedIn == false)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData.m_bIsLoggedIn == false error!");
                return;
            }

            if (packetReader.Size < 7 /*6 + 1 + ?*/)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - packetReader.Size < 7 error!");
                return;
            }

            string msg = packetReader.ReadStringSafe();

            //SendToMap( &pak, thisclient->PlayerPosition->Map );

            netState.Send(new ShoutAck(l_ExtendData.ROSEMobile, msg));
        }
        /// <summary>
        /// // Disconnect Character 人物
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="iAccountGuid"></param>
        internal static void CharServer_Action01(NetState netState, long iAccountGuid)
        {
            NetState l_NetState = ProcessNet.GetClientByAccountGuid(iAccountGuid);

            if (l_NetState == null)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction_01(...) - l_NetState == null error!");
                return;
            }

            WorldServerExtendData l_CharExtendData = l_NetState.ExtendData as WorldServerExtendData;

            if (l_CharExtendData == null)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction_01(...) - l_CharExtendData == null error!");
                return;
            }

            if (l_CharExtendData.ROSEMobile.IsLoggedIn == false)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction_01(...) - l_CharExtendData.IsLoggedIn == false error!");
                return;
            }

            l_NetState.Send(new ExitAck(0));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void WorldServerDoEmote(NetState netState, PacketReader packetReader)
        {
            WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;

            if (l_ExtendData == null)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData == null error!");
                return;
            }

            if (l_ExtendData.ROSEMobile.IsLoggedIn == false)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData.m_bIsLoggedIn == false error!");
                return;
            }

            if (packetReader.Size < 7 /*6 + 1 + ?*/)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - packetReader.Size < 7 error!");
                return;
            }

            ushort iUshort1 = packetReader.ReadUInt16();
            ushort iUshort2 = packetReader.ReadUInt16();

            netState.Send(new DoEmoteAck(iUshort1, iUshort2, l_ExtendData.ROSEMobile));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void WorldServerUserDied(NetState netState, PacketReader packetReader)
        {
            WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;

            if (l_ExtendData == null)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData == null error!");
                return;
            }

            if (l_ExtendData.ROSEMobile.IsLoggedIn == false)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData.m_bIsLoggedIn == false error!");
                return;
            }

            if (packetReader.Size < 7 /*6 + 1 + ?*/)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - packetReader.Size < 7 error!");
                return;
            }

            byte iRespawn = packetReader.ReadByte();

            //1 - Current / 2 - save point

            netState.Send(new UserDiedAck(l_ExtendData.ROSEMobile));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void WorldServerQuest(NetState netState, PacketReader packetReader)
        {
            WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;

            if (l_ExtendData == null)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - l_ExtendData == null error!");
                return;
            }

            if (l_ExtendData.ROSEMobile.IsLoggedIn == true)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - l_ExtendData.m_bIsLoggedIn == true error!");
                return;
            }

            if (packetReader.Size < 42 /*( 6 + 4 + 32)*/)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - packetReader.Size < 42 error!");
                return;
            }

            byte iAction    = packetReader.ReadByte();
            byte iQuestPart = packetReader.ReadByte();
            uint iQuestId   = packetReader.ReadUInt32();

            bool bQuestFlag = false;

            switch (iAction)
            {
            case 0x02:

                bQuestFlag = l_ExtendData.RemoveQuest(iQuestId);

                iAction = 0x03;

                break;

            case 0x03:

                bQuestFlag = l_ExtendData.AddQuest(iQuestId);

                iAction = 0x05;

                break;

            default:

                break;
            }

            if (bQuestFlag)
            {
                netState.Send(new QuestAck(iAction, iQuestPart, iQuestId));
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void WorldServerMoveChar(NetState netState, PacketReader packetReader)
        {
            LOGs.WriteLine(LogMessageType.MSG_NONE, " WorldServerMoveChar(...)");

            WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;

            if (l_ExtendData == null)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerMoveChar(...) - l_ExtendData == null error!");
                return;
            }

            if (l_ExtendData.ROSEMobile.IsLoggedIn == false)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerMoveChar(...) - l_ExtendData.m_bIsLoggedIn == true error!");
                return;
            }

            if (packetReader.Size < 18 /*( 6 + 2 + 4 + 4 + 2)*/)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerMoveChar(...) - packetReader.Size < 22 error!");
                return;
            }

            Debug.WriteLine(string.Format("packetReader.Size {0}", packetReader.Size));

            l_ExtendData.ROSEMobile.targetid = packetReader.ReadUInt16();
            l_ExtendData.ROSEMobile.X        = (long)packetReader.ReadFloat() / 100;
            l_ExtendData.ROSEMobile.Y        = (long)packetReader.ReadFloat() / 100;
            ushort Z = packetReader.ReadUInt16();

            netState.Send(new MoveCharAck(l_ExtendData.ROSEMobile));

            Debug.WriteLine(string.Format("WorldServerMoveChar {0}, {1}, {2}", l_ExtendData.ROSEMobile.targetid, l_ExtendData.ROSEMobile.X, l_ExtendData.ROSEMobile.Y));

            IPooledEnumerable pooledEnumerable = netState.Mobile.Map.GetClientsInRange(netState.Mobile.Location);

            if (pooledEnumerable == null)
            {
                return;
            }

            foreach (object client in pooledEnumerable)
            {
                NetState l_NetState = client as NetState;
                if (l_NetState == null)
                {
                    break;
                }

                l_NetState.Send(new MoveCharAck(l_ExtendData.ROSEMobile));
            }
        }
Exemple #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="strCharName"></param>
        /// <returns></returns>
        internal static NetState GetClientByCharName(string strCharName)
        {
            NetState[] netStateArray = Program.BaseWorld.NetStateToArray();

            foreach (NetState netState in netStateArray)
            {
                WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;
                if (l_ExtendData == null)
                {
                    continue;
                }

                if (l_ExtendData.ROSEMobile.CharacterName == strCharName)
                {
                    return(netState);
                }
            }

            return(null);
        }
Exemple #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="iAccount"></param>
        /// <returns></returns>
        internal static NetState GetClientByAccountGuid(long iAccount)
        {
            NetState[] netStateArray = Program.BaseWorld.NetStateToArray();

            foreach (NetState netState in netStateArray)
            {
                WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;
                if (l_ExtendData == null)
                {
                    continue;
                }

                if (l_ExtendData.ROSEMobile.AccountGuid == iAccount)
                {
                    return(netState);
                }
            }

            return(null);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void WorldServerWhisper(NetState netState, PacketReader packetReader)
        {
            WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;

            if (l_ExtendData == null)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData == null error!");
                return;
            }

            if (l_ExtendData.ROSEMobile.IsLoggedIn == false)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData.m_bIsLoggedIn == false error!");
                return;
            }

            if (packetReader.Size < 7 /*6 + 1 + ?*/)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - packetReader.Size < 7 error!");
                return;
            }

            string msgto = packetReader.ReadStringSafe(16);
            string msg   = packetReader.ReadStringSafe();

            NetState l_NetState = ProcessNet.GetClientByCharName(msgto);

            if (l_NetState != null)
            {
                WorldServerExtendData extendData = l_NetState.ExtendData as WorldServerExtendData;
                if (extendData != null)
                {
                    l_NetState.Send(new WhisperAck(extendData.ROSEMobile, msg));

                    return;
                }
            }

            netState.Send(new WhisperAck(l_ExtendData.ROSEMobile, msg));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void WorldServerWeight(NetState netState, PacketReader packetReader)
        {
            WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;

            if (l_ExtendData == null)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData == null error!");
                return;
            }

            if (l_ExtendData.ROSEMobile.IsLoggedIn == false)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData.m_bIsLoggedIn == false error!");
                return;
            }

            if (packetReader.Size < 7 /*6 + 1 + ?*/)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - packetReader.Size < 7 error!");
                return;
            }

            byte iWeight = packetReader.ReadByte();

            if (iWeight > 110)
            {
            }
            else
            {
            }

            if (iWeight > 100)
            {
            }
            else
            {
            }

            netState.Send(new WeightAck(l_ExtendData.ROSEMobile, iWeight));
        }
Exemple #11
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="iClanGuid"></param>
        /// <returns></returns>
        internal static NetState[] GetClientsByClanGuid(long iClanGuid)
        {
            List <NetState> netStateList = new List <NetState>();

            NetState[] netStateArray = Program.BaseWorld.NetStateToArray();

            foreach (NetState netState in netStateArray)
            {
                WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;
                if (l_ExtendData == null)
                {
                    continue;
                }

                if (l_ExtendData.ROSEMobile.ClanGuid == iClanGuid)
                {
                    netStateList.Add(netState);
                }
            }

            return(netStateList.ToArray());
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void WorldServerChangeStance(NetState netState, PacketReader packetReader)
        {
            WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;

            if (l_ExtendData == null)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData == null error!");
                return;
            }

            if (l_ExtendData.ROSEMobile.IsLoggedIn == false)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - l_ExtendData.m_bIsLoggedIn == false error!");
                return;
            }

            if (packetReader.Size < 7 /*6 + 1 + ?*/)
            {
                Debug.WriteLine("CharPacketHandlers.LoginAction(...) - packetReader.Size < 7 error!");
                return;
            }

            byte iStanceNum = packetReader.ReadByte();

            if (iStanceNum == 0)
            {
            }
            else if (iStanceNum == 1)
            {
            }
            else if (iStanceNum == 2)
            {
            }
            else
            {
            }

            netState.Send(new ChangeStanceAck(l_ExtendData.ROSEMobile));
        }
        public static void WorldServerNormalChat(NetState netState, PacketReader packetReader)
        {
            LOGs.WriteLine(LogMessageType.MSG_NONE, " WorldServerNormalChat(...)");

            WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;

            if (l_ExtendData == null)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerNormalChat(...) - l_ExtendData == null error!");
                return;
            }

            if (l_ExtendData.ROSEMobile.IsLoggedIn == false)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerNormalChat(...) - l_ExtendData.m_bIsLoggedIn == true error!");
                return;
            }

            if (packetReader.Size < 7 /*( 6 + ?)*/)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerStopChar(...) - packetReader.Size < 7 error!");
                return;
            }

            string l_strNormalChat = packetReader.ReadStringSafe();

            LOGs.WriteLine(LogMessageType.MSG_NONE, l_strNormalChat);

            BaseGameCommand l_GameCommand = GameCommands.GetGameCommand(l_strNormalChat);

            if (l_GameCommand != null)
            {
                l_GameCommand.OnEventGameCommand(netState);
            }
            else
            {
                netState.Send(new NormalChatAck(l_ExtendData.ROSEMobile, l_strNormalChat));
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        internal static void WorldServerDoID(NetState netState, PacketReader packetReader)
        {
            LOGs.WriteLine(LogMessageType.MSG_NONE, " WorldServerDoID(...)");

            WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;

            if (l_ExtendData == null)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - l_ExtendData == null error!");
                return;
            }

            if (l_ExtendData.ROSEMobile.IsLoggedIn == false)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - l_ExtendData.m_bIsLoggedIn == true error!");
                return;
            }

            l_ExtendData.ROSEMobile.m_iClientID = RoseSerial.GetNewClientID();

            if (l_ExtendData.ROSEMobile.m_iClientID == 0)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - l_ExtendData.ROSEMobile.m_iClientID == 0 error!");
                return;
            }

            l_ExtendData.ROSEMobile.InGame = true;

            netState.Send(new Unknown0x07D5Ack(l_ExtendData.ROSEMobile));
            netState.Send(new Unknown0x0721Ack());
            netState.Send(new Unknown0x0730Ack());
            netState.Send(new Unknown0x0753Ack(l_ExtendData.ROSEMobile));
            netState.Send(new Unknown0x0762Ack(l_ExtendData.ROSEMobile));
            netState.Send(new Unknown0x0782Ack(l_ExtendData.ROSEMobile));
            netState.Send(new Unknown0x0702Ack(Program.ConfigInfo.WelcomeMessage));

            l_ExtendData.CleanPlayerVector();
            l_ExtendData.RestartPlayerVal();
        }
Exemple #15
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="newNetState"></param>
        public static void NetState_InitializeNetState(NetState newNetState)
        {
            if (newNetState.EncoderSeed == null && newNetState.ExtendData == null)
            {
                // 初始化客户端加密的数据种子
                newNetState.EncoderSeed = m_CryptTableBuffers.AcquireBuffer();
                Buffer.BlockCopy(ROSECrypt.Instance().CryptTableBuffer, 0, newNetState.EncoderSeed, 0, ROSECrypt.Instance().CryptTableBuffer.Length);

                ROSEMobile l_ROSEMobile = new ROSEMobile();
                newNetState.Mobile = l_ROSEMobile;

                l_ROSEMobile.Player   = true;
                l_ROSEMobile.NetState = newNetState;

                WorldServerExtendData l_ExtendData = new WorldServerExtendData();
                l_ExtendData.ROSEMobile = l_ROSEMobile;

                newNetState.ExtendData = l_ExtendData;
            }
            else
            {
                Debug.WriteLine("ProcessNet.MessagePump_ProcessReceive(...) - newNetState.Seed != null error!");
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        internal static void WorldServerDoIdentify(NetState netState, PacketReader packetReader)
        {
            LOGs.WriteLine(LogMessageType.MSG_NONE, " WorldServerDoIdentify(...)");

            WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;

            if (l_ExtendData == null)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - l_ExtendData == null error!");
                return;
            }

            if (l_ExtendData.ROSEMobile.IsLoggedIn == true)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - l_ExtendData.m_bIsLoggedIn == true error!");
                return;
            }

            if (packetReader.Size < 42 /*( 6 + 4 + 32)*/)
            {
                Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - packetReader.Size < 42 error!");
                return;
            }

            int    l_iAccountGuid = packetReader.ReadInt32();
            string l_strPassword  = packetReader.ReadString(32);

            bool    l_bIsReturn = false;
            Session l_Session   = new Session(BaseDatabase.Domain);

            l_Session.BeginTransaction();
            {
                do
                {
                    Query l_QueryAccounts = new Query(l_Session, "Select Accounts instances where {AccountsGuid}=@AccountGuid");
                    l_QueryAccounts.Parameters.Add("@AccountGuid", l_iAccountGuid);
                    QueryResult l_AccountsResult = l_QueryAccounts.Execute();

                    if (l_AccountsResult == null)
                    {
                        Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - l_AccountsResult == null error!");

                        l_bIsReturn = true;
                        break;
                    }

                    if (l_AccountsResult.Count != 1)
                    {
                        Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - l_AccountsResult.Count != 1 error!");

                        l_bIsReturn = true;
                        break;
                    }

                    Accounts l_Accounts = l_AccountsResult[0] as Accounts;
                    if (l_Accounts == null)
                    {
                        Debug.WriteLine("WorldPacketHandlers.WorldServerDoIdentify(...) - l_Accounts == null error!");

                        l_bIsReturn = true;
                        break;
                    }

                    if (l_Accounts.Password != l_strPassword)
                    {
                        l_bIsReturn = true;
                        break;
                    }

                    l_ExtendData.ROSEMobile.AccountGuid   = l_Accounts.AccountsGuid;
                    l_ExtendData.ROSEMobile.CharacterName = l_Accounts.LastCharacter;
                    l_ExtendData.ROSEMobile.AccessLevel   = l_Accounts.GMLevel == 300 ? AccessLevel.GameMaster : AccessLevel.Player;
                    l_ExtendData.ROSEMobile.StorageZuly   = l_Accounts.StorageZuly;
                    l_ExtendData.ROSEMobile.Player        = true;
                } while (false);
            }
            l_Session.Commit();

            if (l_bIsReturn == true)
            {
                return;
            }

            if (l_ExtendData.LoadData() == false)
            {
                return;
            }

            if (l_ExtendData.GetStats() == false)
            {
                return;
            }

            l_ExtendData.ROSEMobile.IsLoggedIn = true;

            netState.Send(new Unknown0x070CAck());
            netState.Send(new UserInformationAck(l_ExtendData.ROSEMobile));
            netState.Send(new UserInventoryDataAck(l_ExtendData.ROSEMobile));
            netState.Send(new UserQuestDataAck(l_ExtendData.ROSEMobile));
            netState.Send(new Unknown0x07DEAck());
            netState.Send(new Unknown0x07DFAck());
        }