/// <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)); } }
/// <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); }
/// <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)); }
/// <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(); }
/// <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()); }