/trunk/Demo.Mmose.GameServer/R.O.S.E.Server/R.O.S.E.Server/CharServer/Network/CharPacketHandlers.cs
# · C# · 3282 lines · 2346 code · 630 blank · 306 comment · 605 complexity · 985caedfed4948a22545067082db1ca5 MD5 · raw file
Large files are truncated click here to view the full file
- #region zh-CHS 版权所有 (C) 2006 - 2006 DemoSoft Corporation. 保留所有权利 | en Copyright (C) 2006 - 2006 DemoSoft Corporation. All Rights Reserved.
-
- // COPYRIGHT NOTES
- // ---------------
- // Program.cs : interface for the Program class.
- //
- // This file is a part of the Demo Toolkit for .NET.
- // 2006-2006 Demo Software, All Rights Reserved.
- //
- // This source code can only be used under the terms and conditions
- // outlined in the accompanying license agreement.
- //
- // mailto:caihuanqing@hotmail.com
-
- #region zh-CHS 包含名字空间 | en Include namespace
- using System;
- using System.Net;
- using System.Reflection;
- using System.Diagnostics;
- using Demo_G.O.S.E.Data;
- using Demo_R.O.S.E.Mobile;
- using Demo_G.O.S.E.ServerEngine.Common;
- using Demo_G.O.S.E.ServerEngine.Network;
- using Demo_R.O.S.E.Database;
- using Demo_R.O.S.E.Database.Model;
- using Demo_R.O.S.E.CharServer.Common;
- using Demo_G.O.S.E.ServerEngine.BuildScripts;
- #endregion
-
- namespace Demo_R.O.S.E.CharServer.Network
- {
- class CharPacketHandlers
- {
- #region zh-CHS CharacterServer CharServerConnectToWorld - 数据处理 | en CharacterServer CharServerConnectToWorld - OnPacketReceive
- /// <summary>
- ///
- /// </summary>
- /// <param name="netState"></param>
- /// <param name="packetReader"></param>
- internal static void CharServerConnectToWorld( NetState netState, PacketReader packetReader )
- {
- // 错误 不可能有创建
- if ( netState.ExtendData is WorldServerExtendData == true )
- {
- Debug.WriteLine( "CharPacketHandlers.CharServerConnectToWorld(...) - netState.ExtendData is WorldServerExtendData == true error!" );
- return;
- }
- else
- netState.ExtendData = null;
-
- // 不检查网络是否活动
- netState.IsCheckActivity = false;
-
- if ( packetReader.Size < 10/*6 + 4 + ?*/ )
- {
- Debug.WriteLine( "CharPacketHandlers.CharServerConnectToWorld(...) - packetReader.Size < 10 error!" );
- return;
- }
-
- long l_iWorldGUID = packetReader.ReadUInt32();
- long l_iWorldPort = packetReader.ReadUInt32();
- string l_strCharPassword = packetReader.ReadStringSafe();
-
- if ( l_strCharPassword == Program.ConfigInfo.CharPassword )
- {
- WorldServerExtendData l_ExtendData = new WorldServerExtendData();
-
- l_ExtendData.IsLoggedIn = true;
-
- l_ExtendData.WorldGUID = l_iWorldGUID;
- l_ExtendData.WorldHost = netState.NetAddress.ToString();
- l_ExtendData.WorldPort = l_iWorldPort;
- l_ExtendData.NetState = netState;
-
- netState.ExtendData = l_ExtendData;
-
- Program.AddWorldServerList( l_ExtendData );
-
- l_ExtendData.ConnectToWorldServer( l_ExtendData.WorldHost, l_ExtendData.WorldPort );
- }
- }
- #endregion
-
- #region zh-CHS CharacterServer LoginServerConnected - 数据处理 | en CharacterServer LoginConnected - OnPacketReceive
- /// <summary>
- ///
- /// </summary>
- /// <param name="netState"></param>
- /// <param name="packetReader"></param>
- internal static void LoginServerConnected( NetState netState, PacketReader packetReader )
- {
- // 错误 不可能有创建
- if ( netState.ExtendData is LoginServerExtendData == true )
- {
- Debug.WriteLine( "CharPacketHandlers.LoginConnected(...) - netState.ExtendData is LoginServerExtendData == true error!" );
- return;
- }
- else
- netState.ExtendData = null;
-
- if ( packetReader.Size < 6/*6 + ?*/ )
- {
- Debug.WriteLine( "CharPacketHandlers.LoginConnected(...) - packetReader.Size < 6 error!" );
- return;
- }
-
- // 不检查网络是否活动
- netState.IsCheckActivity = false;
-
- string l_strCharPassword = packetReader.ReadStringSafe();
-
- if ( l_strCharPassword == Program.ConfigInfo.CharPassword )
- {
- LoginServerExtendData l_ExtendData = new LoginServerExtendData();
-
- l_ExtendData.IsLoggedIn = true;
-
- netState.ExtendData = l_ExtendData;
- }
- }
- #endregion
-
- #region zh-CHS CharacterServer LoginServerAction - 数据处理 | en CharacterServer LoginDSClient - OnPacketReceive
- /// <summary>
- ///
- /// </summary>
- /// <param name="netState"></param>
- /// <param name="packetReader"></param>
- internal static void LoginServerAction( NetState netState, PacketReader packetReader )
- {
- LoginServerExtendData l_ExtendData = netState.ExtendData as LoginServerExtendData;
- if ( l_ExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.LoginAction(...) - l_ExtendData == null error!" );
- return;
- }
-
- if ( l_ExtendData.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 l_Action = packetReader.ReadByte();
-
- switch ( l_Action )
- {
- case 1:
- long l_iAccountGuid = packetReader.ReadUInt32();
-
- LoginServer_Action01( netState, l_iAccountGuid );
-
- break;
- default:
-
- break;
- }
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="netState"></param>
- /// <param name="iAccountGuid"></param>
- internal static void LoginServer_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;
- }
-
- CharServerExtendData l_CharExtendData = l_NetState.ExtendData as CharServerExtendData;
- if ( l_CharExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.LoginAction_01(...) - l_CharExtendData == null error!" );
- return;
- }
-
- if ( l_CharExtendData.IsLoggedIn == false )
- {
- Debug.WriteLine( "CharPacketHandlers.LoginAction_01(...) - l_CharExtendData.IsLoggedIn == false error!" );
- return;
- }
-
- NetState l_WorldNetState = ProcessNet.GetClientByWorldServerGuid( l_CharExtendData.ServerGuid );
- if ( l_WorldNetState == null )
- {
- Debug.WriteLine( "CharPacketHandlers.LoginAction_01(...) - l_WorldNetState == null error!" );
- return;
- }
-
- WorldServerExtendData l_WorldExtendData = l_WorldNetState.ExtendData as WorldServerExtendData;
- if ( l_WorldExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.LoginAction_01(...) - l_WorldExtendData == null error!" );
- return;
- }
-
- if ( l_WorldExtendData.IsLoggedIn == false )
- {
- Debug.WriteLine( "CharPacketHandlers.LoginAction_01(...) - l_WorldExtendData.IsLoggedIn == false error!" );
- return;
- }
-
- l_WorldExtendData.SendToWorldServer_0x502_Action01( iAccountGuid );
- }
- #endregion
-
- #region zh-CHS CharacterServer WorldServerAction - 数据处理 | en CharacterServer WSCharSelect - OnPacketReceive
- /// <summary>
- /// 选择新的人物
- /// </summary>
- /// <param name="netState"></param>
- /// <param name="packetReader"></param>
- internal static void WorldServerAction( NetState netState, PacketReader packetReader )
- {
- WorldServerExtendData l_ExtendData = netState.ExtendData as WorldServerExtendData;
- if ( l_ExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.WorldAction(...) - l_ExtendData == null error!" );
- return;
- }
-
- if ( l_ExtendData.IsLoggedIn == false )
- {
- Debug.WriteLine( "CharPacketHandlers.WorldAction(...) - l_ExtendData.m_bIsLoggedIn == false error!" );
- return;
- }
-
- if ( packetReader.Size < 10/*6 + 4*/ )
- {
- Debug.WriteLine( "CharPacketHandlers.WorldAction(...) - packetReader.Size < 10 error!" );
- return;
- }
-
-
- uint iAccountGuid = packetReader.ReadUInt32();
-
- NetState l_NetState = ProcessNet.GetClientByAccountGuid( iAccountGuid );
- if ( l_NetState == null )
- {
- Debug.WriteLine( "CharPacketHandlers.WorldAction(...) - l_NetState == null error!" );
- return;
- }
-
- CharServerExtendData l_CharExtendData = l_NetState.ExtendData as CharServerExtendData;
- if ( l_CharExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.WorldAction(...) - l_CharExtendData == null error!" );
- return;
- }
-
- if ( l_CharExtendData.IsLoggedIn == false )
- {
- Debug.WriteLine( "CharPacketHandlers.WorldAction(...) - l_CharExtendData.IsLoggedIn == false error!" );
- return;
- }
-
- l_NetState.Send( new WorldActionAck() );
-
- NetState l_WorldNetState = ProcessNet.GetClientByWorldServerGuid( l_CharExtendData.ServerGuid );
- if ( l_WorldNetState == null )
- {
- Debug.WriteLine( "CharPacketHandlers.WorldAction(...) - l_WorldNetState == null error!" );
- return;
- }
-
- WorldServerExtendData l_WorldExtendData = l_WorldNetState.ExtendData as WorldServerExtendData;
- if ( l_WorldExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.WorldAction(...) - l_WorldExtendData == null error!" );
- return;
- }
-
- if ( l_WorldExtendData.IsLoggedIn == false )
- {
- Debug.WriteLine( "CharPacketHandlers.WorldAction(...) - l_WorldExtendData.IsLoggedIn == false error!" );
- return;
- }
-
- l_WorldExtendData.SendToWorldServer_0x505( iAccountGuid );
- }
- #endregion
-
- #region zh-CHS CharacterServer DoIdentify - 数据处理 | en CharacterServer DoIdentify - OnPacketReceive
- /// <summary>
- /// Do player identification
- /// </summary>
- /// <param name="netState"></param>
- /// <param name="packetReader"></param>
- internal static void CharacterServerDoIdentify( NetState netState, PacketReader packetReader )
- {
- CharServerExtendData l_ExtendData = netState.ExtendData as CharServerExtendData;
- if ( l_ExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDoIdentify(...) - l_ExtendData == null error!" );
- return;
- }
-
- if ( l_ExtendData.IsLoggedIn == true )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDoIdentify(...) - l_ExtendData.m_bIsLoggedIn == true error!" );
- return;
- }
-
- if ( packetReader.Size < 42/*( 6 + 4 + 32)*/ )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDoIdentify(...) - 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( "CharPacketHandlers.CharacterServerDoIdentify(...) - l_AccountsResult == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- if ( l_AccountsResult.Count != 1 )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDoIdentify(...) - l_AccountsResult.Count != 1 error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- Accounts l_Accounts = l_AccountsResult[0] as Accounts;
- if ( l_Accounts == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDoIdentify(...) - l_Accounts == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- if ( l_Accounts.Password != l_strPassword )
- {
- l_bIsReturn = true;
- break;
- }
-
- //if ( l_Accounts.Locked == true )
- //{
- // l_bIsReturn = true;
- // break;
- //}
- //else
- // l_Accounts.Locked = true; // 用户已成功登陆 锁定帐户
-
- l_ExtendData.AccountGuid = l_Accounts.AccountsGuid;
- l_ExtendData.ServerGuid = l_Accounts.LastServerGuid;
-
- } while ( false );
- }
- l_Session.Commit();
-
- if ( l_bIsReturn == true )
- return;
-
- l_ExtendData.IsLoggedIn = true;
- Program.AddCharServerList( l_ExtendData );
-
- netState.Send( new DoIdentifyAck() );
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="netState"></param>
- internal static void DisconnectNetState( NetState netState )
- {
- CharServerExtendData l_ExtendData = netState.ExtendData as CharServerExtendData;
- if ( l_ExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDoIdentify(...) - l_ExtendData == null error!" );
- return;
- }
-
- if ( l_ExtendData.IsLoggedIn == true )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDoIdentify(...) - l_ExtendData.m_bIsLoggedIn == true error!" );
- return;
- }
-
- // 该先通知世界服务器人物已经断开
- // 。。。。。。
-
- 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_ExtendData.AccountGuid );
- QueryResult l_AccountsResult = l_QueryAccounts.Execute();
-
- if ( l_AccountsResult == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDoIdentify(...) - l_AccountsResult == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- if ( l_AccountsResult.Count != 1 )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDoIdentify(...) - l_AccountsResult.Count != 1 error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- Accounts l_Accounts = l_AccountsResult[0] as Accounts;
- if ( l_Accounts == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDoIdentify(...) - l_Accounts == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- if ( l_Accounts.Locked )
- l_Accounts.Locked = false; // 用户已成功断开 取消锁定的帐户
-
- } while ( false );
- }
- l_Session.Commit();
-
- if ( l_bIsReturn == true )
- return;
-
- l_ExtendData.IsLoggedIn = false;
- }
- #endregion
-
- #region zh-CHS CharacterServer GetCharacters - 数据处理 | en CharacterServer GetCharacters - OnPacketReceive
- /// <summary>
- ///
- /// </summary>
- private static PacketCharacter[] s_CharacterArray = new PacketCharacter[0];
- /// <summary>
- /// Get this clients character list
- /// </summary>
- /// <param name="netState"></param>
- /// <param name="packetReader"></param>
- internal static void CharacterServerGetCharacters( NetState netState, PacketReader packetReader )
- {
- CharServerExtendData l_ExtendData = netState.ExtendData as CharServerExtendData;
- if ( l_ExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerGetCharacters(...) - l_ExtendData == null error!" );
- return;
- }
-
- if ( l_ExtendData.IsLoggedIn == false )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerGetCharacters(...) - l_ExtendData.m_bIsLoggedIn == false error!" );
- return;
- }
-
- bool l_bIsReturn = false;
- PacketCharacter[] l_CharacterArray = s_CharacterArray;
- Session l_Session = new Session( BaseDatabase.Domain );
- l_Session.BeginTransaction();
- {
- do
- {
- Query l_QueryCharacters = new Query( l_Session, "Select Characters instances where {AccountGuid}=@AccountGuid" );
- l_QueryCharacters.Parameters.Add( "@AccountGuid", l_ExtendData.AccountGuid );
- QueryResult l_CharactersResult = l_QueryCharacters.Execute();
-
- if ( l_CharactersResult == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerGetCharacters(...) - l_CharactersResult == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- if ( l_CharactersResult.Count <= 0 )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerGetCharacters(...) - l_CharactersResult.Count <= 0 error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- // 如果大于5, 则检测看有效的是否超过5个,其余者为删除的人物
- if ( l_CharactersResult.Count > 5 )
- {
- int l_iCharactersCount = 0;
- for ( int iIndex = 0; iIndex < l_CharactersResult.Count; iIndex++ )
- {
- Characters l_Characters = l_CharactersResult[iIndex] as Characters;
- if ( l_Characters == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerGetCharacters(...) - l_Characters == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- if ( l_Characters.DeleteTime != null && l_Characters.DeleteTime < DateTime.Now )
- l_Characters.IsDelete = true;
-
- if ( l_Characters.IsDelete == false )
- ++l_iCharactersCount;
- }
-
- if ( l_bIsReturn == true )
- break;
-
- if ( l_iCharactersCount > 5 )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerGetCharacters(...) - l_iCharactersCount > 5 error!" );
-
- l_bIsReturn = true;
- break;
- }
- }
-
- l_CharacterArray = new PacketCharacter[l_CharactersResult.Count];
- for ( int iIndex = 0; iIndex < l_CharacterArray.Length; iIndex++ )
- {
- Characters l_Characters = l_CharactersResult[iIndex] as Characters;
- if ( l_Characters == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerGetCharacters(...) - l_Characters == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- if ( l_Characters.IsDelete == true )
- continue;
-
- l_CharacterArray[iIndex] = new PacketCharacter();
- l_CharacterArray[iIndex].m_CharacterName = l_Characters.CharacterName;
- l_CharacterArray[iIndex].m_CharacterGuid = (uint)l_Characters.CharacterGuid;
- l_CharacterArray[iIndex].m_Level = (uint)l_Characters.Level;
- l_CharacterArray[iIndex].m_Face = (uint)l_Characters.Face;
- l_CharacterArray[iIndex].m_HairStyle = (uint)l_Characters.HairStyle;
- l_CharacterArray[iIndex].m_ClassID = (uint)l_Characters.ClassID;
- l_CharacterArray[iIndex].m_Sex = l_Characters.Sex;
- l_CharacterArray[iIndex].m_DeleteTime = l_Characters.DeleteTime == DateTime.MaxValue ? 0 : GetTime( l_Characters.DeleteTime ) - GetTime();
- l_CharacterArray[iIndex].m_Item = new PacketCharacter.PacketItem[10]; // 10 表示的是身上的物件数
-
- for ( int iIndexItem = 0; iIndexItem < l_CharacterArray[iIndex].m_Item.Length; iIndexItem++ )
- l_CharacterArray[iIndex].m_Item[iIndexItem] = new PacketCharacter.PacketItem();
-
- Query l_QueryItems = new Query( l_Session, "Select Items instances where {CharacterGuid}=@CharacterGuid and {SlotNumber}<10" );
- l_QueryItems.Parameters.Add( "@CharacterGuid", l_Characters.CharacterGuid );
- QueryResult l_ItemsResult = l_QueryItems.Execute();
-
- if ( l_ItemsResult == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerGetCharacters(...) - l_ItemsResult == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- if ( l_ItemsResult.Count > 10 )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerGetCharacters(...) - l_ItemsResult.Count > 10 error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- for ( int iIndex2 = 0; iIndex2 < l_ItemsResult.Count; iIndex2++ )
- {
- Items l_Items = l_ItemsResult[iIndex2] as Items;
- if ( l_Items == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerGetCharacters(...) - l_Items == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- if ( l_Items.SlotNumber > 10 )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerGetCharacters(...) - l_Items.SlotNumber > 10 error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- l_CharacterArray[iIndex].m_Item[l_Items.SlotNumber].m_CharacterGuid = (uint)l_Items.CharacterGuid;
- l_CharacterArray[iIndex].m_Item[l_Items.SlotNumber].m_ItemID = (uint)l_Items.ItemID;
- l_CharacterArray[iIndex].m_Item[l_Items.SlotNumber].m_ItemType = (uint)l_Items.ItemType;
- l_CharacterArray[iIndex].m_Item[l_Items.SlotNumber].m_Refine = (uint)l_Items.Refine;
- l_CharacterArray[iIndex].m_Item[l_Items.SlotNumber].m_Durability = (uint)l_Items.Durability;
- l_CharacterArray[iIndex].m_Item[l_Items.SlotNumber].m_Lifespan = (uint)l_Items.Lifespan;
- }
- }
- } while ( false );
- }
- l_Session.Commit();
-
- if ( l_bIsReturn == true )
- l_CharacterArray = s_CharacterArray;
-
- netState.Send( new GetCharactersAck( l_CharacterArray ) );
- }
-
- /// <summary>
- /// Returns the current time/date
- /// </summary>
- /// <returns></returns>
- private static uint GetTime()
- {
- DateTime l_NowDateTime = DateTime.Now;
- uint uCurTime = 0;
- uCurTime += (uint)( l_NowDateTime.Second * 1 );
- uCurTime += (uint)( l_NowDateTime.Minute * 60 );
- uCurTime += (uint)( l_NowDateTime.Hour * 3600 );
- uCurTime += (uint)( l_NowDateTime.Day * 86400 );
- uCurTime += (uint)( ( l_NowDateTime.Year - 2000 ) * 86400 * 366 );
- return uCurTime;
- }
-
- /// <summary>
- /// Returns the this time/date
- /// </summary>
- /// <returns></returns>
- private static uint GetTime( DateTime dateTime )
- {
- uint uCurTime = 0;
- uCurTime += (uint)( dateTime.Second * 1 );
- uCurTime += (uint)( dateTime.Minute * 60 );
- uCurTime += (uint)( dateTime.Hour * 3600 );
- uCurTime += (uint)( dateTime.Day * 86400 );
- uCurTime += (uint)( ( dateTime.Year - 2000 ) * 86400 * 366 );
- return uCurTime;
- }
- #endregion
-
- #region zh-CHS CharacterServer CreateChar - 数据处理 | en CharacterServer CreateChar - OnPacketReceive
- /// <summary>
- ///
- /// </summary>
- /// <param name="netState"></param>
- /// <param name="packetReader"></param>
- internal static void CharacterServerCreateCharacter( NetState netState, PacketReader packetReader )
- {
- CharServerExtendData l_ExtendData = netState.ExtendData as CharServerExtendData;
- if ( l_ExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerCreateCharacter(...) - l_ExtendData == null error!" );
-
- CreateCharacter_ReplyRej( netState, CCLReason.BadAccountName );
- return;
- }
-
- if ( l_ExtendData.IsLoggedIn == false )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerCreateCharacter(...) - l_ExtendData.m_bIsLoggedIn == false error!" );
-
- CreateCharacter_ReplyRej( netState, CCLReason.BadAccountName );
- return;
- }
-
- if ( packetReader.Size < 13/*6 + 7 + ?*/ )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerCreateCharacter(...) - packetReader.Size < 13 error!" );
-
- CreateCharacter_ReplyRej( netState, CCLReason.BadAccountName );
- return;
- }
-
- // 给出需要创建的人物信息
- sbyte l_iSex = (sbyte)( packetReader.ReadSByte() % 2 );
- sbyte l_iUnknown = packetReader.ReadSByte();
- sbyte l_iHairStyle = packetReader.ReadSByte();
- sbyte l_iFace = packetReader.ReadSByte();
- sbyte l_iUnknown2 = packetReader.ReadSByte();
- ushort l_iUnknown3 = packetReader.ReadUInt16();
- string l_strNewCharacterName = packetReader.ReadStringSafe();
-
- if ( l_strNewCharacterName == string.Empty )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerCreateCharacter(...) - l_strNewCharacterName == string.Empty error!" );
-
- CreateCharacter_ReplyRej( netState, CCLReason.BadCharacterName );
- return;
- }
-
- if ( l_strNewCharacterName.Length > 64 )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerCreateCharacter(...) - l_strNewCharacterName.Length > 64 error!" );
-
- CreateCharacter_ReplyRej( netState, CCLReason.BadCharacterName );
- return;
- }
-
- bool l_bIsReturn = false;
- Session l_Session = new Session( BaseDatabase.Domain );
- l_Session.BeginTransaction();
- {
- do
- {
- Query l_QueryCharacters = new Query( l_Session, "Select Characters instances where {AccountGuid}=@AccountGuid" );
- l_QueryCharacters.Parameters.Add( "@AccountGuid", l_ExtendData.AccountGuid );
- QueryResult l_CharactersResult = l_QueryCharacters.Execute();
-
- if ( l_CharactersResult == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerCreateCharacter(...) - l_CharactersResult == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- // 如果大于3, 则检测看有效的是否超过3个,其余者为删除的人物
- // 最多只能创建3个人物,其实可以5个的
- if ( l_CharactersResult.Count > 3 )
- {
- int l_iCharactersCount = 0;
- for ( int iIndex = 0; iIndex < l_CharactersResult.Count; iIndex++ )
- {
- Characters l_Characters = l_CharactersResult[iIndex] as Characters;
- if ( l_Characters == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerCreateCharacter(...) - l_Characters == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- if ( l_Characters.IsDelete == false )
- ++l_iCharactersCount;
- }
-
- if ( l_bIsReturn == true )
- break;
-
- if ( l_iCharactersCount >= 3 )
- {
- l_bIsReturn = true;
- break;
- }
- }
-
- // 检查相同的人物名是否已经存在
- Query l_QueryCharactersCheck = new Query( l_Session, "Select Characters instances where {CharacterName}=@CharacterName" );
- l_QueryCharactersCheck.Parameters.Add( "@CharacterName", l_strNewCharacterName );
- QueryResult l_CharactersCheckResult = l_QueryCharactersCheck.Execute();
-
- if ( l_CharactersCheckResult != null && l_CharactersCheckResult.Count != 0 )
- {
- l_bIsReturn = true;
- break;
- }
-
- // 检查相同的帐号名是否已经存在
- Query l_QueryAccountsCheck = new Query( l_Session, "Select Accounts instances where {AccountsName}=@CharacterName" );
- l_QueryAccountsCheck.Parameters.Add( "@CharacterName", l_strNewCharacterName );
- QueryResult l_AccountsCheckResult = l_QueryAccountsCheck.Execute();
-
- if ( l_AccountsCheckResult != null && l_AccountsCheckResult.Count != 0 )
- {
- l_bIsReturn = true;
- break;
- }
-
- InitCharacter initCharacter = new InitCharacter();
- initCharacter.m_Sex = l_iSex;
- initCharacter.m_Face = l_iFace;
- initCharacter.m_HairStyle = l_iHairStyle;
- initCharacter.m_CharacterName = l_strNewCharacterName;
-
-
- //////////////////////////////////////////////////////////////////////////
- // 开始在编译后的程序集合内获取CreateCharacter
-
- Type l_Type = ScriptCompiler.FindTypeByFullName( "Demo_R.O.S.E.Scripts.CharacterBirth" );
- if ( l_Type == null )
- CreateCharacter( ref initCharacter );
- else
- {
- MethodInfo l_MethodInfo = l_Type.GetMethod( "CreateCharacter", BindingFlags.Static | BindingFlags.Public );
- if ( l_MethodInfo == null )
- CreateCharacter( ref initCharacter );
- else
- {
- object[] objectArgs = new object[] { initCharacter };
- l_MethodInfo.Invoke( null, objectArgs );
- }
- }
-
- Characters newCharacter = (Characters)l_Session.CreateObject( typeof( Characters ) );
-
- newCharacter.Sex = l_iSex;
- newCharacter.Face = l_iFace;
- newCharacter.HairStyle = l_iHairStyle;
- newCharacter.CharacterName = l_strNewCharacterName;
-
- newCharacter.CharacterGuid = newCharacter.ID;
- newCharacter.AccountGuid = l_ExtendData.AccountGuid;
-
- newCharacter.Zuly = initCharacter.Zuly;
- newCharacter.Level = initCharacter.Level;
- newCharacter.CurrentHP = initCharacter.CurrentHP;
- newCharacter.CurrentMP = initCharacter.CurrentMP;
- newCharacter.Strength = initCharacter.Strength;
- newCharacter.Convergence = initCharacter.Convergence;
- newCharacter.Dexterity = initCharacter.Dexterity;
- newCharacter.Intellect = initCharacter.Intellect;
- newCharacter.Charm = initCharacter.Charm;
- newCharacter.Sense = initCharacter.Sense;
- newCharacter.PositionX = initCharacter.PositionX;
- newCharacter.PositionY = initCharacter.PositionY;
- newCharacter.Experience = initCharacter.Experience;
- newCharacter.SkillPoint = initCharacter.SkillPoint;
- newCharacter.ClassID = initCharacter.ClassID;
- newCharacter.CurrentMap = initCharacter.CurrentMap;
- newCharacter.Stamina = initCharacter.Stamina;
- newCharacter.QuickBar = initCharacter.QuickBar;
- newCharacter.BasicSkills = initCharacter.BasicSkills;
- newCharacter.ClassSkills = initCharacter.ClassSkills;
- newCharacter.ClassSkillsLevel = initCharacter.ClassSkillsLevel;
- newCharacter.Realm = initCharacter.Realm;
- newCharacter.ClanGuid = -1;
- newCharacter.ClanRank = 0;
- newCharacter.TotalTime = 0;
- newCharacter.LevelTime = 0;
- newCharacter.IsOnline = false;
- newCharacter.DeleteTime = DateTime.MaxValue;
- newCharacter.IsDelete = false;
-
-
- for ( int iIndex = 0; iIndex < initCharacter.ItemList.Count; iIndex++ )
- {
- Items newItem = (Items)l_Session.CreateObject( typeof( Items ) );
- newItem.ItemGuid = newItem.ID;
- newItem.CharacterGuid = newCharacter.CharacterGuid;
-
- newItem.ItemID = initCharacter.ItemList[iIndex].ItemID;
- newItem.ItemType = initCharacter.ItemList[iIndex].ItemType;
- newItem.Refine = initCharacter.ItemList[iIndex].Refine;
- newItem.Durability = initCharacter.ItemList[iIndex].Durability;
- newItem.Lifespan = initCharacter.ItemList[iIndex].Lifespan;
- newItem.SlotNumber = initCharacter.ItemList[iIndex].SlotNumber;
- newItem.Count = initCharacter.ItemList[iIndex].Count;
- newItem.Stats = initCharacter.ItemList[iIndex].Stats;
- newItem.Socketed = initCharacter.ItemList[iIndex].Socketed;
- newItem.Appraised = initCharacter.ItemList[iIndex].Appraised;
- newItem.GemID = initCharacter.ItemList[iIndex].GemID;
-
- newItem.IsDelete = false;
- }
- } while ( false );
- }
- l_Session.Commit();
-
- if ( l_bIsReturn == true )
- CreateCharacter_ReplyRej( netState, CCLReason.BadCharacterName );
- else
- CreateCharacter_ReplyAck( netState );
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="netState"></param>
- private static void CreateCharacter_ReplyAck( NetState netState )
- {
- netState.Send( new CreateCharacterAck() );
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="netState"></param>
- /// <param name="cclReason"></param>
- private static void CreateCharacter_ReplyRej( NetState netState, CCLReason cclReason )
- {
- netState.Send( new CreateCharacterRej( cclReason ) );
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="newCharacter"></param>
- private static void CreateCharacter( ref InitCharacter newCharacter )
- {
- newCharacter.Level = 1;
-
- newCharacter.CurrentHP = 50;
- newCharacter.CurrentMP = 18;
-
- newCharacter.Charm = 10;
- newCharacter.Sense = 10;
- newCharacter.Strength = 15;
- newCharacter.Dexterity = 15;
- newCharacter.Intellect = 15;
- newCharacter.Convergence = 15;
- newCharacter.Stamina = 5000;
-
- newCharacter.CurrentMap = 22;
- newCharacter.PositionX = 5098;
- newCharacter.PositionY = 5321;
-
- newCharacter.QuickBar = "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";
- newCharacter.BasicSkills = "11,12,13,14,15,16,17,18,19,20,21,22,25,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";
- newCharacter.ClassSkills = "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0";
- newCharacter.ClassSkillsLevel = "1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
-
- newCharacter.Zuly = 1000;
-
-
- InitCharacterItem l_Item = new InitCharacterItem();
-
- l_Item.ItemID = 29;
- l_Item.ItemType = 3;
- l_Item.Refine = 0;
- l_Item.Durability = 40;
- l_Item.Lifespan = 100;
- l_Item.SlotNumber = 3;
- l_Item.Count = 1;
- l_Item.Stats = 0;
- l_Item.Socketed = false;
- l_Item.Appraised = false;
- l_Item.GemID = 0;
-
- newCharacter.ItemList.Add( l_Item );
-
-
- InitCharacterItem l_Item2 = new InitCharacterItem();
-
- l_Item2.ItemID = 29;
- l_Item2.ItemType = 5;
- l_Item2.Refine = 0;
- l_Item2.Durability = 40;
- l_Item2.Lifespan = 100;
- l_Item2.SlotNumber = 6;
- l_Item2.Count = 1;
- l_Item2.Stats = 0;
- l_Item2.Socketed = false;
- l_Item2.Appraised = false;
- l_Item2.GemID = 0;
-
- newCharacter.ItemList.Add( l_Item2 );
-
-
- InitCharacterItem l_Item3 = new InitCharacterItem();
-
- l_Item3.ItemID = 1;
- l_Item3.ItemType = 8;
- l_Item3.Refine = 0;
- l_Item3.Durability = 40;
- l_Item3.Lifespan = 100;
- l_Item3.SlotNumber = 7;
- l_Item3.Count = 1;
- l_Item3.Stats = 0;
- l_Item3.Socketed = false;
- l_Item3.Appraised = false;
- l_Item3.GemID = 0;
-
- newCharacter.ItemList.Add( l_Item3 );
-
- if ( newCharacter.Sex == 0 )
- {
- InitCharacterItem l_Item4 = new InitCharacterItem();
-
- l_Item4.ItemID = 222;
- l_Item4.ItemType = 2;
- l_Item4.Refine = 0;
- l_Item4.Durability = 40;
- l_Item4.Lifespan = 100;
- l_Item4.SlotNumber = 12;
- l_Item4.Count = 1;
- l_Item4.Stats = 0;
- l_Item4.Socketed = false;
- l_Item4.Appraised = false;
- l_Item4.GemID = 0;
-
- newCharacter.ItemList.Add( l_Item4 );
- }
- else
- {
- InitCharacterItem l_Item4 = new InitCharacterItem();
-
- l_Item4.ItemID = 221;
- l_Item4.ItemType = 2;
- l_Item4.Refine = 0;
- l_Item4.Durability = 40;
- l_Item4.Lifespan = 100;
- l_Item4.SlotNumber = 12;
- l_Item4.Count = 1;
- l_Item4.Stats = 0;
- l_Item4.Socketed = false;
- l_Item4.Appraised = false;
- l_Item4.GemID = 0;
-
- newCharacter.ItemList.Add( l_Item4 );
- }
- }
- #endregion
-
- #region zh-CHS CharacterServer DeleteCharacter - 数据处理 | en CharacterServer DeleteCharacter - OnPacketReceive
- /// <summary>
- ///
- /// </summary>
- /// <param name="netState"></param>
- /// <param name="packetReader"></param>
- internal static void CharacterServerDeleteCharacter( NetState netState, PacketReader packetReader )
- {
- CharServerExtendData l_ExtendData = netState.ExtendData as CharServerExtendData;
- if ( l_ExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDeleteCharacter(...) - l_ExtendData == null error!" );
-
- return;
- }
-
- if ( l_ExtendData.IsLoggedIn == false )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDeleteCharacter(...) - l_ExtendData.m_bIsLoggedIn == false error!" );
-
- return;
- }
-
- if ( packetReader.Size < 8/*6 + 2 + ?*/ )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDeleteCharacter(...) - packetReader.Size < 8 error!" );
-
- return;
- }
-
- byte l_iUnknown = packetReader.ReadByte();
- byte l_iAction = packetReader.ReadByte();
- string l_strCharacterName = packetReader.ReadStringSafe();
-
- uint l_iDeleteTime = 0;
- bool l_bIsReturn = false;
- Session l_Session = new Session( BaseDatabase.Domain );
- l_Session.BeginTransaction();
- {
- do
- {
- Query l_QueryCharacters = new Query( l_Session, "Select Characters instances where {CharacterName}=@CharacterName" );
- l_QueryCharacters.Parameters.Add( "@CharacterName", l_strCharacterName );
- QueryResult l_CharactersResult = l_QueryCharacters.Execute();
-
- if ( l_CharactersResult == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDeleteCharacter(...) - l_CharactersResult == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- if ( l_CharactersResult.Count != 1 )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDeleteCharacter(...) - l_CharactersResult.Count != 1 error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- Characters l_Characters = l_CharactersResult[0] as Characters;
- if ( l_Characters == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerDeleteCharacter(...) - l_Characters == null error!" );
-
- l_bIsReturn = true;
- break;
- }
-
- switch ( l_iAction )
- {
- case 0x00: // Resurect
- l_Characters.IsDelete = false;
- l_Characters.DeleteTime = DateTime.MaxValue;
-
- l_iDeleteTime = 0;
-
- break;
- case 0x01: // Delete
- l_Characters.IsDelete = false;
- l_Characters.DeleteTime = DateTime.Now + TimeSpan.FromDays( 7.0 );
-
- l_iDeleteTime = GetTime( l_Characters.DeleteTime ) - GetTime();
-
- break;
- default:
- break;
- }
- } while ( false );
- }
- l_Session.Commit();
-
- if ( l_bIsReturn == true )
- return;
-
- netState.Send( new DeleteCharacterAck( l_strCharacterName, l_iDeleteTime ) );
- }
- #endregion
-
- #region zh-CHS CharacterServer RequestWorld - 数据处理 | en CharacterServer RequestWorld - OnPacketReceive
- /// <summary>
- ///
- /// </summary>
- /// <param name="netState"></param>
- /// <param name="packetReader"></param>
- internal static void CharacterServerRequestWorld( NetState netState, PacketReader packetReader )
- {
- CharServerExtendData l_ExtendData = netState.ExtendData as CharServerExtendData;
- if ( l_ExtendData == null )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerRequestWorld(...) - l_ExtendData == null error!" );
-
- return;
- }
-
- if ( l_ExtendData.IsLoggedIn == false )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerRequestWorld(...) - l_ExtendData.m_bIsLoggedIn == false error!" );
-
- return;
- }
-
- if ( packetReader.Size < 9/*6 + 3 + ?*/ )
- {
- Debug.WriteLine( "CharPacketHandlers.CharacterServerRequestWorld(...) - packetReader.Size < 9 error!" );
-
- return;
- }
-
- ushort l_iUnknown = packetReader.ReadUInt16();
- byte l_iUnknown2 = packetReader.ReadByte();
- string l_strCharacterName = packetReader.ReadStringSafe();
-
- bool l_bIsReturn = false;
- IPEndPoint l_IPEndPoint = null;
- Session l_Session = new Session( BaseDatabase.Domain );
- l_Session.BeginTransaction();
- {
- do
- {
- //////////////////////////////////////////////////////////////////////////
- // 设置帐号最后选择的人物
-
- Query l_UpdateAccounts = new Query( l_Session, "Select Accounts instances where {AccountsGu…