Imports System.Text Imports System.Convert Module ProcessPacket Public IRylMDI As RylMDI = Nothing Public IAdminInfo As AdminInfo = Nothing Public IUserLogin As UserLogin = Nothing Public ICharRestraint As CharRestraint = Nothing Public ICharRestraintReg As CharRestraintReg = Nothing Public ICharInfo As CharInfo = Nothing Public ICharItemInfo As CharItemInfo = Nothing Public ICharItemInfoDetail2 As CharItemInfoDetail = Nothing Public IUserLastLogout As UserLastLogOut = Nothing Public IAdminSetting As AdminSetting = Nothing '±¸Á¶Ã¼ ÃʱâÈ­. Public IToolAdminRight As New ToolAdminRight() Public Structure ItemInfo Dim m_szItemName As String ' ÅØ½ºÆ®·Î µÈ ¾ÆÀÌÅÛ À̸§(64) Dim m_dwItemUID As UInt64 ' ¾ÆÀÌÅÛ UID Dim m_usItemProtoTypeID As UInt16 ' ¾ÆÀÌÅÛ Á¾·ù ID Dim m_cItemType As Byte ' ¾ÆÀÌÅÛ Å¸ÀÔ ( ÁÖ¼® 1 Âü°í ) Dim m_cTakeType As Byte ' ¾ÆÀÌÅÛ ÄÁÅ×ÀÌ³Ê Å¸ÀÔ Dim m_cXPos As Byte ' ¾ÆÀÌÅÛ XÀ§Ä¡ Dim m_cYPos As Byte ' ¾ÆÀÌÅÛ YÀ§Ä¡ Dim m_cZPos As Byte ' ¾ÆÀÌÅÛ ÅÇ À§Ä¡ Dim m_cNumOrDurability As Byte ' Àåºñ´Â ³»±¸µµ, ´Ù¸¥ °ÍÀº °³¼ö Dim m_cXSize As Byte ' XÅ©±â Dim m_cYSize As Byte ' YÅ©±â Dim m_bEquip As Boolean ' ÀåºñÀÎÁö ¿©ºÎ Dim m_cPadding As Byte ' ¹«ÀǹÌ. ' Àåºñ¸¸ °¡Áö°í ÀÖ´Â µ¥ÀÌÅÍ Dim m_usRuneSocket As UInt16 ' ·é ¼ÒÄÏ Dim m_cMaxDurability As Byte ' ÃÖ´ë ³»±¸µµ Dim m_cCurrentSocketNum As Byte ' ÇöÀç ¼ÒÄÏ °³¼ö Dim m_cMaxSocketNum As Byte ' ÃÖ´ë ¼ÒÄÏ °³¼ö Dim m_cMaterialType As Byte ' ¾÷±×·¹ÀÌµå ´Ü°è Dim m_cSocket() As Byte ' ¹ÚÇô ÀÖ´Â ¼ÒÄÏ (ÃÖ´ë 8°³) Dim m_usAttribute() As UInt16 ' ¼Ó¼º°ª (34°³) End Structure Public Function Min(ByVal lhs As Int32, ByVal rhs As Int32) As Int32 If lhs < rhs Then Min = lhs Else Min = rhs End If End Function Public Function Max(ByVal lhs As Int32, ByVal rhs As Int32) As Int32 If lhs < rhs Then Max = rhs Else Max = lhs End If End Function Public Function GetTakePos(ByVal Pos As Int32) As String Select Case Pos Case 1 : GetTakePos = ITextItemInfo.cboitemwhere_1 Case 2 : GetTakePos = ITextItemInfo.cboitemwhere_2 Case 6 : GetTakePos = ITextItemInfo.cboitemwhere_3 Case 7 : GetTakePos = ITextItemInfo.cboitemwhere_4 Case 8 : GetTakePos = ITextItemInfo.cboitemwhere_5 Case 9 : GetTakePos = ITextItemInfo.cboitemwhere_6 Case Else : GetTakePos = "Nowhere" End Select End Function Public Function GetTakePos(ByVal Pos As String) As Byte Select Case Pos Case ITextItemInfo.cboitemwhere_1 : GetTakePos = 1 Case ITextItemInfo.cboitemwhere_2 : GetTakePos = 2 Case ITextItemInfo.cboitemwhere_3 : GetTakePos = 6 Case ITextItemInfo.cboitemwhere_4 : GetTakePos = 7 Case ITextItemInfo.cboitemwhere_5 : GetTakePos = 8 Case ITextItemInfo.cboitemwhere_6 : GetTakePos = 9 Case Else : GetTakePos = 0 End Select End Function '°ü¸®ÀÚ ÀÎÁõ Public Sub ProcessLoginAck(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) Dim cRights As Byte = contents(0) '¼º°øÇÑ °æ¿ì¿¡¸¸ °ªÀ» °¡Á®¿Â´Ù. If errorCode = 0 Then '±ÇÇÑÀ» ¾ò¾î¿Â´Ù. AdminKind = Chr(cRights) IRylMDI.ILogin.Hide() '°ü¸®ÀÚÀÇ ±ÇÇÑÀ» °¡Á®¿Â´Ù. Dim Pos As Int32 = 1 IToolAdminRight.charEdit = BitConverter.ToBoolean(contents, Pos + 1) IToolAdminRight.charLocation = BitConverter.ToBoolean(contents, Pos + 2) IToolAdminRight.charseeItem = BitConverter.ToBoolean(contents, Pos + 3) IToolAdminRight.ItemCreate = BitConverter.ToBoolean(contents, Pos + 4) IToolAdminRight.ItemEdit = BitConverter.ToBoolean(contents, Pos + 5) IToolAdminRight.ItemDel = BitConverter.ToBoolean(contents, Pos + 6) IToolAdminRight.RestraintReg = BitConverter.ToBoolean(contents, Pos + 7) IToolAdminRight.RestraintRelease = BitConverter.ToBoolean(contents, Pos + 8) IToolAdminRight.currentUserLogin = BitConverter.ToBoolean(contents, Pos + 9) IToolAdminRight.lastUserLogin = BitConverter.ToBoolean(contents, Pos + 10) IToolAdminRight.DoingLogout = BitConverter.ToBoolean(contents, Pos + 11) Else MsgBox(ITextProcessPacket.msg_error_1, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End If End Sub '°ü¸®ÀÚ ÀÔ·ÂÇϱâ Public Sub ProcessRegAdmin(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) If errorCode = 0 Then MsgBox(ITextProcessPacket.msg_success_1, MsgBoxStyle.OKOnly, ITextMSG.msg_success) IAdminInfo.RefreshAdmin() Else MsgBox(ITextProcessPacket.msg_error_2, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End If IAdminInfo.btnAdminReg.Enabled = True End Sub '°ü¸®ÀÚÁ¶È¸ Public Sub ProcessSearchAdmin(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) If 0 = contents(0) Then Select Case nPacketCMD Case 3 MsgBox(ITextProcessPacket.msg_error_3, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) Case 4 MsgBox(ITextProcessPacket.msg_error_4, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End Select Else '¹Þ¾Æ¿À´Â ÆÐŶÀ» ºÐ¸®ÇÑ´Ù. Dim encoding As Encoding = encoding.GetEncoding(Code) If False = IAdminInfo.Equals(Nothing) Then Dim myDataRow As DataRow = ds.Tables(AdminTableIndex).NewRow() myDataRow("strAdminID") = encoding.GetString(contents, 0, 16) myDataRow("strPasswd") = encoding.GetString(contents, 16, 16) myDataRow("strLevel") = Chr(contents(55)) myDataRow("strName") = encoding.GetString(contents, 48, 7) myDataRow("strIp") = encoding.GetString(contents, 32, 16) myDataRow("dateRegit") = encoding.GetString(contents, 56, 11) ds.Tables(AdminTableIndex).Rows.Add(myDataRow) End If End If End Sub '°ü¸®ÀÚ Á¤º¸º¯°æ Public Sub ProcessEditAdmin(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) If errorCode = 0 Then MsgBox(ITextProcessPacket.msg_success_2, MsgBoxStyle.OKOnly, ITextMSG.msg_success) IAdminInfo.RefreshAdmin() Else MsgBox(ITextProcessPacket.msg_error_5, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End If End Sub '°ü¸®ÀÚ»èÁ¦ Public Sub ProcessDeleteAdmin(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) If errorCode = 0 Then MsgBox(ITextProcessPacket.msg_success_3, MsgBoxStyle.OKOnly, ITextMSG.msg_success) IAdminInfo.RefreshAdmin() Else MsgBox(ITextProcessPacket.msg_error_6, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End If End Sub 'ÇöÀçÁ¢¼ÓÁßÀÎ »ç¿ëÀÚ °Ë»ö Public Sub ProcessSelectCurrentUser(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) If 0 = contents(0) Then MsgBox(ITextProcessPacket.msg_error_7, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) Else '¹Þ¾Æ¿À´Â ÆÐŶÀ» ºÐ¸®ÇÑ´Ù. If False = IUserLogin.Equals(Nothing) Then Dim encoding As Encoding = encoding.GetEncoding(Code) Dim myDataRow As DataRow = ds.Tables(CurrentUserIndex).NewRow() myDataRow("strClientID") = encoding.GetString(contents, 0, 16) myDataRow("UID") = BitConverter.ToInt32(contents, 16) '4byte myDataRow("intCRMIndex") = BitConverter.ToInt32(contents, 20) '4byte myDataRow("strIP") = encoding.GetString(contents, 24, 16) myDataRow("ServerID") = BitConverter.ToInt32(contents, 40) '4byte myDataRow("LoginTime") = encoding.GetString(contents, 44, 20) myDataRow("BillType") = Chr(contents(64)) ds.Tables(CurrentUserIndex).Rows.Add(myDataRow) End If End If End Sub 'ÇöÀçÁ¢¼ÓÁßÀÎ »ç¿ëÀÚ °Ë»ö Public Sub ProcessLogoutUser(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) If errorCode = 0 Then MsgBox(ITextProcessPacket.msg_success_4, MsgBoxStyle.OKOnly, ITextMSG.msg_success) IUserLogin.CurrentUserRefresh() Else MsgBox(ITextProcessPacket.msg_error_8, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End If End Sub Public Sub ProcessViewRestraintUser(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) ' UID(4) / UserID(16) / CharacterName(16) / BlockType(9) / BlockKind(9) / HasBlock(9) / ' BlockFinishDate(20) / AdminName(16) / Description(31) ' recv If 0 = errorCode And False = ICharRestraint.Equals(Nothing) And 0 <> BitConverter.ToInt32(contents, 0) Then Dim encoding As Encoding = encoding.GetEncoding(Code) Dim myDataRow As DataRow = ds.Tables(CharRestraintIndex).NewRow() myDataRow("UID") = BitConverter.ToInt32(contents, 0) ' UID(4) myDataRow("strClientID") = encoding.GetString(contents, 4, 16) ' UserID(16) myDataRow("strCharacterID") = encoding.GetString(contents, 20, 16) ' CharacterName(16) myDataRow("BlockType") = encoding.GetString(contents, 36, 9) ' BlockType(9) myDataRow("BlockKind") = encoding.GetString(contents, 45, 9) ' BlockKind(9) myDataRow("Blocked") = encoding.GetString(contents, 54, 9) ' HasBlock(9) myDataRow("EndTime") = encoding.GetString(contents, 63, 20) ' BlockFinishDate(20) myDataRow("adminid") = encoding.GetString(contents, 83, 16) ' AdminName(16) myDataRow("discription") = encoding.GetString(contents, 99, 31) ' Description(31) ds.Tables(CharRestraintIndex).Rows.Add(myDataRow) End If End Sub Public Sub ProcessAddRestraintUser(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) ' errorCode¸¸ º¸¸é µÊ Select Case errorCode Case 0 MsgBox(ITextProcessPacket.msg_success_5, MsgBoxStyle.OKOnly, ITextMSG.msg_success) Case Else MsgBox(ITextProcessPacket.msg_error_9, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End Select ICharRestraint.ViewRestraintList() End Sub Public Sub ProcessDeleteRestraintUser(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) ' errorCode¸¸ º¸¸é µÊ Select Case errorCode Case 0 MsgBox(ITextProcessPacket.msg_success_6, MsgBoxStyle.OKOnly, ITextMSG.msg_success) Case Else MsgBox(ITextProcessPacket.msg_error_10, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End Select ICharRestraint.ViewRestraintList() End Sub ' ij¸¯ÅÍ Á¦Àç»óȲ º¸±â Public Sub ProcessCheckRestraintUser(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) Dim encoding As Encoding = encoding.GetEncoding(Code) Dim flag As Byte = contents(0) ' 0 : Á¦Àç ¾øÀ½, 1 : °èÁ¤ ºí·°, 2 : ij¸¯ÅÍ ºí·° encoding.GetString(contents, 1, 16) ' Á¦Àçij¸¯ 1 À̸§ encoding.GetString(contents, 17, 16) ' Á¦Àçij¸¯ 2 À̸§ encoding.GetString(contents, 33, 16) ' Á¦Àçij¸¯ 3 À̸§ End Sub 'ij¸¯Å͸®½ºÆ®¸¸ º¸¿©ÁÖ±â Public Sub ProcessSelectCharidList(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) Dim encoding As Encoding = encoding.GetEncoding(Code) If False = (ICharInfo Is Nothing) Then If False = ICharInfo.btnIDSearch.Enabled Then If contents(0) = 0 And contents(16) = 0 And contents(32) = 0 Then MsgBox(ITextProcessPacket.msg_error_11, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) Else ICharInfo.lboxCharid.Items.Add(encoding.GetString(contents, 0, 16)) ICharInfo.lboxCharid.Items.Add(encoding.GetString(contents, 16, 16)) ICharInfo.lboxCharid.Items.Add(encoding.GetString(contents, 32, 16)) End If ICharInfo.btnIDSearch.Enabled = True End If End If If False = (ICharRestraintReg Is Nothing) Then If False = ICharRestraintReg.btnSearch.Enabled Then If contents(0) = 0 And contents(16) = 0 And contents(32) = 0 Then MsgBox(ITextProcessPacket.msg_error_11, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) Else ICharRestraintReg.cboCharID.Items.Add(encoding.GetString(contents, 0, 16)) ICharRestraintReg.cboCharID.Items.Add(encoding.GetString(contents, 16, 16)) ICharRestraintReg.cboCharID.Items.Add(encoding.GetString(contents, 32, 16)) ICharRestraintReg.cboCharID.SelectedIndex = 0 ICharRestraintReg.btnCommit.Enabled = True End If ICharRestraintReg.btnSearch.Enabled = True End If End If End Sub 'ij¸¯ÅÍ »ó¼¼ Á¤º¸ º¸±â Public Sub ProcessSelectCharidInfo(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) ' UID(4)/CID(4)/Type(1) ' µ¥ÀÌÅÍ Å¸ÀÔ - 0 : ij¸¯ µ¥ÀÌÅÍ, 1 : â°í Á¤º¸, 2 : ¾ÆÀÌÅÛ Ãß°¡ ¶Ç´Â ¾÷µ¥ÀÌÆ®(À§Ä¡, UID°¡ °°Àº °æ¿ì¸¸ ¾÷µ¥ÀÌÆ®) If 0 = errorCode Then Select Case contents(8) Case 0 ParseCharInfo(contents) Case 1 ParseStoreInfo(contents) Case 2 ParseItems(contents) Case 3 ' ICharInfo.btnCharSearch.Enabled = True ICharInfo.btnIDSearch.Enabled = True ICharInfo.btnDetailItemInfo.Enabled = True MsgBox(ITextProcessPacket.msg_success_7, MsgBoxStyle.OKOnly, ITextMSG.msg_success) End Select Else ICharInfo.btnCharSearch.Enabled = True ICharInfo.btnIDSearch.Enabled = True ICharInfo.btnDetailItemInfo.Enabled = False MsgBox(ITextProcessPacket.msg_error_12 + " : ErrorCode" + errorCode.ToString, MsgBoxStyle.OKOnly, "FAILED") End If End Sub Private Sub ParseCharInfo(ByVal contents() As Byte) Dim encoding As Encoding = encoding.GetEncoding(Code) Dim CharDataSize(7) As Int32 ' TODO : UID È­¸é¿¡ Ç¥½ÃÇØ ÁÙ °Í Dim dwUID As UInt32 = BitConverter.ToUInt32(contents, 0) Dim dwCID As UInt32 = BitConverter.ToUInt32(contents, 4) Dim TypeCode As Byte = contents(8) ' óÀ½ 1Byte´Â ŸÀÔ.. ' ±× ´ÙÀ½ 16Byte´Â unsigned short * 4 - °¢ ¼½¼ÇÀÇ µ¥ÀÌÅÍ ±æÀÌ. Dim nCount As Int32 For nCount = 0 To 7 CharDataSize(nCount) = ToInt32(BitConverter.ToUInt16(contents, nCount * 2 + 9)) Next Dim Pos As Int32 = 25 ' CHAR_INFOST CharDataSize(0) ' CHAR_POS CharDataSize(1) ' SKILL CharDataSize(2) ' QUICK CharDataSize(3) ' EQUIP CharDataSize(4) ¹«½Ã... ' INVEN CharDataSize(5) ¹«½Ã... ' EXTRA CharDataSize(6) ¹«½Ã... ' EXCHANGE CharDataSize(7) ¹«½Ã... ' CHAR_INFOST If 72 <= CharDataSize(0) And Pos + CharDataSize(0) <= contents.GetLength(0) Then ICharInfo.txtSearchID.Text = "" ICharInfo.txtUID.Text = dwUID.ToString ICharInfo.txtCID.Text = BitConverter.ToInt32(contents, Pos).ToString ICharInfo.txtName.Text = encoding.GetString(contents, Pos + 4, 16) ICharInfo.txtMW.Text = contents(Pos + 20).ToString ' 1 : ³²ÀÚ, 2 : ¿©ÀÚ ICharInfo.txtHead.Text = contents(Pos + 21).ToString ' Head°¡ ¾Æ´Ï¶ó HairÀÓ ICharInfo.txtFace.Text = contents(Pos + 22).ToString ' ¾ó±¼Çü ICharInfo.txtKind.Text = contents(Pos + 23).ToString ' Kind - ij¸¯ÅÍ Á¾Á·. 0 : Àΰ£, 1 : ¾ÆÄ­ ICharInfo.txtClass.Text = BitConverter.ToUInt16(contents, Pos + 24).ToString ' ij¸¯ÅÍ Å¬·¡½º ICharInfo.txtFame.Text = BitConverter.ToUInt32(contents, Pos + 26).ToString ' ¸í¼º ICharInfo.txtMi.Text = BitConverter.ToUInt32(contents, Pos + 30).ToString ' ¸¶Àϸ®Áö ICharInfo.txtGuild.Text = BitConverter.ToUInt32(contents, Pos + 34).ToString ' ±æµå ICharInfo.txtParty.Text = BitConverter.ToUInt32(contents, Pos + 38).ToString ' ÆÄƼ ICharInfo.txtLevel.Text = contents(Pos + 42).ToString ' ·¹º§ ICharInfo.txtMoney.Text = BitConverter.ToUInt32(contents, Pos + 43).ToString ' µ· ICharInfo.txtIP.Text = BitConverter.ToUInt16(contents, Pos + 47).ToString ' IP (´É·ÂÄ¡ Áõ°¡Æ÷ÀÎÆ®) ICharInfo.txtStr.Text = BitConverter.ToUInt16(contents, Pos + 49).ToString ' Èû ICharInfo.txtDex.Text = BitConverter.ToUInt16(contents, Pos + 51).ToString ' ¹Îø¼º ICharInfo.txtCon.Text = BitConverter.ToUInt16(contents, Pos + 53).ToString ' °Ç°­ ICharInfo.txtIni.Text = BitConverter.ToUInt16(contents, Pos + 55).ToString ' Áö·Â ICharInfo.txtWis.Text = BitConverter.ToUInt16(contents, Pos + 57).ToString ' ÁöÇý ICharInfo.txtHp.Text = BitConverter.ToUInt16(contents, Pos + 59).ToString ' HP ICharInfo.txtMp.Text = BitConverter.ToUInt16(contents, Pos + 61).ToString ' MP ICharInfo.txtExp.Text = BitConverter.ToUInt64(contents, Pos + 63).ToString ' EXP Pos = Pos + CharDataSize(0) End If ' CHAR_POS If 24 = CharDataSize(1) And Pos + CharDataSize(1) <= contents.GetLength(0) Then ICharInfo.txtX.Text = BitConverter.ToSingle(contents, Pos).ToString ICharInfo.txtY.Text = BitConverter.ToSingle(contents, Pos + 4).ToString ICharInfo.txtZ.Text = BitConverter.ToSingle(contents, Pos + 8).ToString Dim SaveXPos As String = BitConverter.ToSingle(contents, Pos + 12).ToString Dim SaveYPos As String = BitConverter.ToSingle(contents, Pos + 16).ToString Dim SaveZPos As String = BitConverter.ToSingle(contents, Pos + 20).ToString End If ' ¾ÆÀÌÅÛ Á¤º¸´Â ¹«½ÃÇÑ´Ù.... End Sub Private Sub ParseStoreInfo(ByVal contents() As Byte) Dim Pos As Int32 = 9 Dim Password As String = Chr(contents(Pos)) + Chr(contents(Pos + 1)) + Chr(contents(Pos + 2)) + Chr(contents(Pos + 3)) Dim Gold As UInt32 = BitConverter.ToUInt32(contents, Pos + 9) End Sub Private Sub ParseItems(ByVal contents() As Byte) 'struct(AdminToolItemInfo) '{ ' char m_szItemName[64]; 0, 64 ' unsigned __int64 m_ItemUID; 64, 8 ' unsigned short m_usItemProtoTypeID; 72, 2 ' unsigned char m_cItemType; 74, 1 ' unsigned char m_cTakeType; 75, 1 ' unsigned char m_cXPos; ' unsigned char m_cYPos; ' unsigned char m_cZPos; ' unsigned char m_cNumOrDurability; ' unsigned char m_cXSize; ' unsigned char m_cYSize; ' bool m_bEquip; ' unsigned char m_cPadding; '}; 'struct(AdminToolEquipInfo) : Public AdminToolItemInfo '{ ' unsigned short m_usRuneSocket; ' unsigned char m_cMaxDurability; ' unsigned char m_cCurrentSocketNum; ' unsigned char m_cMaxSocketNum; ' unsigned char m_cMaterialType; ' unsigned char m_cSocket[8]; ' short m_usAttribute[34]; '} Dim encoding As Encoding = encoding.GetEncoding(Code) Dim Pos As Int32 = 9 Dim itemInfo As ItemInfo = ConvertArrayToItem(contents, Pos) ICharInfo.CharItemData.Add(itemInfo) End Sub Public Sub ProcessCommitData(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) Select Case errorCode Case 0 MsgBox(ITextProcessPacket.msg_success_8, MsgBoxStyle.OKOnly, ITextMSG.msg_success) Case Else MsgBox(ITextProcessPacket.msg_error_13 + ". ErrorCode : " + errorCode.ToString, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End Select End Sub Public Sub ProcessUpdateCharData(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) Select Case errorCode Case 0 MsgBox(ITextProcessPacket.msg_success_9, MsgBoxStyle.OKOnly, ITextMSG.msg_success) Case Else MsgBox(ITextProcessPacket.msg_error_14 + ". ErrorCode : " + errorCode.ToString, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End Select End Sub Public Sub ProcessUpdateLastPos(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) Select Case errorCode Case 0 MsgBox(ITextProcessPacket.msg_success_10, MsgBoxStyle.OKOnly, ITextMSG.msg_success) Case Else MsgBox(ITextProcessPacket.msg_error_15 + ". ErrorCode : " + errorCode.ToString, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End Select End Sub Public Sub ProcessCreateItem(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) Select Case errorCode Case 0 MsgBox(ITextProcessPacket.msg_success_11, MsgBoxStyle.OKOnly, ITextMSG.msg_success) Dim Item As ItemInfo = ConvertArrayToItem(contents, 0) ' ¾ÆÀÌÅÛ µ¥ÀÌÅ͸¦ ·Î¿ì¼Â¿¡ Ãß°¡ ICharInfo.CharItemData.Add(Item) UpdateItemView() Case Else MsgBox(ITextProcessPacket.msg_error_16 + ". ErrorCode : " + errorCode.ToString, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End Select End Sub Public Sub ProcessUpdateItem(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) Select Case errorCode Case 0 MsgBox(ITextProcessPacket.msg_success_12, MsgBoxStyle.OKOnly, ITextMSG.msg_success) Dim Item As ItemInfo = ConvertArrayToItem(contents, 0) ' ¾ÆÀÌÅÛ µ¥ÀÌÅ͸¦ ·Î¿ì¼Â¿¡ Ãß°¡ Dim myEnumerator As System.Collections.IEnumerator = _ ICharInfo.CharItemData.GetEnumerator() While myEnumerator.MoveNext() Dim oldItem As ItemInfo = myEnumerator.Current If Item.m_dwItemUID.Equals(oldItem.m_dwItemUID) And _ Item.m_usItemProtoTypeID.Equals(oldItem.m_usItemProtoTypeID) And _ Item.m_cTakeType = oldItem.m_cTakeType And _ Item.m_cXPos = oldItem.m_cXPos And _ Item.m_cYPos = oldItem.m_cYPos And _ Item.m_cZPos = oldItem.m_cZPos Then ICharInfo.CharItemData.Remove(myEnumerator.Current) ICharInfo.CharItemData.Add(Item) Exit While End If End While UpdateItemView() Case Else MsgBox(ITextProcessPacket.msg_error_17 + ". ErrorCode : " + errorCode.ToString, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End Select End Sub Public Sub ProcessDeleteItem(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) Select Case errorCode Case 0 MsgBox(ITextProcessPacket.msg_success_13, MsgBoxStyle.OKOnly, ITextMSG.msg_success) ' ´ÙÀ½ Á¤º¸¸¦ °¡Áö°í, RowSet¿¡¼­ »èÁ¦¿¡ ¼º°øÇÑ ¾ÆÀÌÅÛÀ» Á¦°ÅÇÑ´Ù. Dim dwItemUID As UInt64 = BitConverter.ToUInt64(contents, 0) Dim usProtoTypeID As UInt16 = BitConverter.ToUInt16(contents, 8) Dim cTakePos As Byte = contents(10) Dim cXPos As Byte = contents(11) Dim cYPos As Byte = contents(12) Dim cZPos As Byte = contents(13) ' ¾ÆÀÌÅÛ µ¥ÀÌÅ͸¦ ·Î¿ì¼Â¿¡ Ãß°¡ Dim myEnumerator As System.Collections.IEnumerator = _ ICharInfo.CharItemData.GetEnumerator() While myEnumerator.MoveNext() Dim oldItem As ItemInfo = myEnumerator.Current If dwItemUID.Equals(oldItem.m_dwItemUID) And _ usProtoTypeID.Equals(oldItem.m_usItemProtoTypeID) And _ cTakePos = oldItem.m_cTakeType And _ cXPos = oldItem.m_cXPos And _ cYPos = oldItem.m_cYPos And _ cZPos = oldItem.m_cZPos Then ICharInfo.CharItemData.Remove(myEnumerator.Current) Exit While End If End While UpdateItemView() Case Else MsgBox(ITextProcessPacket.msg_error_18 + ". ErrorCode : " + errorCode.ToString, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End Select End Sub Public Sub ProcessViewLoginoutLog(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) If IUserLastLogout Is Nothing Then Exit Sub End If Select Case errorCode Case 0 If 0 = contents(0) Then ' µ¥ÀÌÅÍ ÀüºÎ º¸³¿. IUserLastLogout.btnSearch.Enabled = True IUserLastLogout.grdResult.Refresh() ElseIf 85 <= contents.GetLength(0) Then ' µ¥ÀÌÅÍ ¹Þ¾ÒÀ½. Dim encoding As Encoding = encoding.GetEncoding(Code) Dim data As DataRow = DBConn.ds.Tables(LastUserIndex).NewRow() data("strClientID") = encoding.GetString(contents, 0, 16) data("strIP") = encoding.GetString(contents, 16, 16) data("intCRMIndex") = BitConverter.ToUInt32(contents, 76).ToString data("UID") = BitConverter.ToUInt32(contents, 72).ToString data("LoginTime") = encoding.GetString(contents, 32, 20) data("LogOutTime") = encoding.GetString(contents, 52, 20) data("ServerID") = BitConverter.ToUInt32(contents, 80).ToString data("BillType") = Chr(contents(84)) DBConn.ds.Tables(LastUserIndex).Rows.Add(data) End If Case Else IUserLastLogout.btnSearch.Enabled = True IUserLastLogout.grdResult.Refresh() End Select End Sub Public Sub ProcessAdminRightsAck(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16) If 0 = errorCode Then Dim cRights As Byte = contents(0) Dim Pos As Int32 = 1 IAdminSetting.chkCharedit.Checked = BitConverter.ToBoolean(contents, Pos + 1) IAdminSetting.chkCharlocation.Checked = BitConverter.ToBoolean(contents, Pos + 2) IAdminSetting.chkCharSeeItem.Checked = BitConverter.ToBoolean(contents, Pos + 3) IAdminSetting.chkItemReg.Checked = BitConverter.ToBoolean(contents, Pos + 4) IAdminSetting.chkItemedit.Checked = BitConverter.ToBoolean(contents, Pos + 5) IAdminSetting.chkItemDelete.Checked = BitConverter.ToBoolean(contents, Pos + 6) IAdminSetting.chkRestraintReg.Checked = BitConverter.ToBoolean(contents, Pos + 7) IAdminSetting.chkRestraintRelease.Checked = BitConverter.ToBoolean(contents, Pos + 8) IAdminSetting.chkCurrentLogin.Checked = BitConverter.ToBoolean(contents, Pos + 9) IAdminSetting.chkLastLogin.Checked = BitConverter.ToBoolean(contents, Pos + 10) IAdminSetting.chkDoingLogout.Checked = BitConverter.ToBoolean(contents, Pos + 11) Else MsgBox(ITextProcessPacket.msg_error_19 + ". ErrorCode : " + errorCode.ToString, MsgBoxStyle.OKOnly, ITextMSG.msg_faild) End If End Sub Private Function ConvertArrayToItem(ByVal recvarray() As Byte, ByVal startpos As Int32) As ItemInfo Dim encoding As Encoding = encoding.GetEncoding(Code) If 84 + startpos <= recvarray.GetLength(0) Then ConvertArrayToItem.m_szItemName = encoding.GetString(recvarray, startpos, 64) ConvertArrayToItem.m_dwItemUID = BitConverter.ToUInt64(recvarray, startpos + 64) ConvertArrayToItem.m_usItemProtoTypeID = BitConverter.ToUInt16(recvarray, startpos + 72) ConvertArrayToItem.m_cItemType = recvarray(startpos + 74) ConvertArrayToItem.m_cTakeType = recvarray(startpos + 75) ConvertArrayToItem.m_cXPos = recvarray(startpos + 76) ConvertArrayToItem.m_cYPos = recvarray(startpos + 77) ConvertArrayToItem.m_cZPos = recvarray(startpos + 78) ConvertArrayToItem.m_cNumOrDurability = recvarray(startpos + 79) ConvertArrayToItem.m_cXSize = recvarray(startpos + 80) ConvertArrayToItem.m_cYSize = recvarray(startpos + 81) ConvertArrayToItem.m_bEquip = BitConverter.ToBoolean(recvarray, startpos + 82) ConvertArrayToItem.m_cPadding = recvarray(startpos + 83) ReDim ConvertArrayToItem.m_cSocket(7) ReDim ConvertArrayToItem.m_usAttribute(34) If 168 + startpos <= recvarray.GetLength(0) And True = ConvertArrayToItem.m_bEquip Then ConvertArrayToItem.m_usRuneSocket = BitConverter.ToUInt16(recvarray, startpos + 84) ConvertArrayToItem.m_cMaxDurability = recvarray(startpos + 86) ConvertArrayToItem.m_cCurrentSocketNum = recvarray(startpos + 87) ConvertArrayToItem.m_cMaxSocketNum = recvarray(startpos + 88) ConvertArrayToItem.m_cMaterialType = recvarray(startpos + 89) Array.Copy(recvarray, startpos + 90, ConvertArrayToItem.m_cSocket, 0, 8) Dim nCount As Int32 For nCount = 0 To 34 ConvertArrayToItem.m_usAttribute(nCount) = BitConverter.ToUInt16(recvarray, startpos + 98 + nCount * 2) Next End If End If End Function Public Sub UpdateItemView() ds.Tables(CharItemListIndex).Clear() Dim myEnumerator As System.Collections.IEnumerator = ICharInfo.CharItemData.GetEnumerator() While myEnumerator.MoveNext() Dim Item As ItemInfo = myEnumerator.Current 'Dim myDataRow As DataRow = ProcessPacket.ICharInfo.myDataTable.NewRow() Dim myDataRow As DataRow = ds.Tables(CharItemListIndex).NewRow() myDataRow("ItemName") = Item.m_szItemName myDataRow("ItemIndex") = Item.m_dwItemUID myDataRow("ItemTypeID") = Item.m_usItemProtoTypeID myDataRow("ItemType") = Item.m_cItemType myDataRow("ItemWhere") = GetTakePos(Item.m_cTakeType) myDataRow("ItemX") = Item.m_cXPos myDataRow("ItemY") = Item.m_cYPos myDataRow("ItemZ") = Item.m_cZPos myDataRow("Amount") = Item.m_cNumOrDurability myDataRow("SizeX") = Item.m_cXSize myDataRow("SizeY") = Item.m_cYSize myDataRow("WhetherAmount") = Item.m_bEquip myDataRow("RuneSocket") = Item.m_usRuneSocket myDataRow("MaxDurability") = Item.m_cMaxDurability myDataRow("CurSocketNum") = Item.m_cCurrentSocketNum myDataRow("MaxSocketNum") = Item.m_cMaxSocketNum myDataRow("MaterialType") = Item.m_cMaterialType Dim nCount As Int32 = 0 For nCount = 0 To 7 myDataRow("Socket" + nCount.ToString) = Item.m_cSocket(nCount).ToString Next For nCount = 0 To 34 myDataRow("Attribute" + nCount.ToString) = Item.m_usAttribute(nCount).ToString Next 'Ä÷³À» Ãß°¡Çϱâ 'ICharInfo.myDataTable.Rows.Add(myDataRow) ds.Tables(CharItemListIndex).Rows.Add(myDataRow) End While ICharItemInfo.grdResult.Refresh() End Sub Public Sub InitializeHandler() 'COMMAND : 1 - ·Î±×ÀÎ Ack IClientSocket.AddProcess(1, New ClientSocket.ProcessPacket(AddressOf ProcessLoginAck)) '¾îµå¹Îµî·Ï IClientSocket.AddProcess(2, New ClientSocket.ProcessPacket(AddressOf ProcessRegAdmin)) '¾îµå¹Î ¼­Ä¡ IClientSocket.AddProcess(3, New ClientSocket.ProcessPacket(AddressOf ProcessSearchAdmin)) IClientSocket.AddProcess(4, New ClientSocket.ProcessPacket(AddressOf ProcessSearchAdmin)) '¾îµå¹Î »èÁ¦ IClientSocket.AddProcess(5, New ClientSocket.ProcessPacket(AddressOf ProcessDeleteAdmin)) '¾îµå¹Î Á¤º¸º¯°æ IClientSocket.AddProcess(6, New ClientSocket.ProcessPacket(AddressOf ProcessEditAdmin)) 'ÇöÀçÁ¢¼ÓÀÎ »ç¿ëÀÚ °Ë»ö IClientSocket.AddProcess(7, New ClientSocket.ProcessPacket(AddressOf ProcessSelectCurrentUser)) '°­Á¦·Î±×¾Æ¿ô IClientSocket.AddProcess(8, New ClientSocket.ProcessPacket(AddressOf ProcessLogoutUser)) ' Á¦ÀçÀÚ ¸í´Üº¸±â IClientSocket.AddProcess(9, New ClientSocket.ProcessPacket(AddressOf ProcessViewRestraintUser)) ' Á¦ÀçÀÚ Ãß°¡ IClientSocket.AddProcess(10, New ClientSocket.ProcessPacket(AddressOf ProcessAddRestraintUser)) ' Á¦ÀçÀÚÀÎÁö È®ÀÎ IClientSocket.AddProcess(11, New ClientSocket.ProcessPacket(AddressOf ProcessCheckRestraintUser)) ' Á¦ÀçÀÚ »èÁ¦ IClientSocket.AddProcess(12, New ClientSocket.ProcessPacket(AddressOf ProcessDeleteRestraintUser)) ' UID·Î ij¸¯ÅÍ À̸§ ¾ò¾î¿À±â IClientSocket.AddProcess(13, New ClientSocket.ProcessPacket(AddressOf ProcessSelectCharidList)) ' ij¸¯ÅÍ À̸§À¸·Î ij¸¯ÅÍ µ¥ÀÌÅÍ ¾ò¾î ¿À±â IClientSocket.AddProcess(14, New ClientSocket.ProcessPacket(AddressOf ProcessSelectCharidInfo)) ' µ¥ÀÌÅÍ ¼öÁ¤ÇÑ °Í DB¿¡ ÀúÀå IClientSocket.AddProcess(15, New ClientSocket.ProcessPacket(AddressOf ProcessCommitData)) ' ij¸¯ÅÍ µ¥ÀÌÅÍ ¾÷µ¥ÀÌÆ® IClientSocket.AddProcess(16, New ClientSocket.ProcessPacket(AddressOf ProcessUpdateCharData)) ' ij¸¯ÅÍ ¸¶Áö¸· À§Ä¡ ¾÷µ¥ÀÌÆ® IClientSocket.AddProcess(17, New ClientSocket.ProcessPacket(AddressOf ProcessUpdateLastPos)) ' ¾ÆÀÌÅÛ »ý¼º IClientSocket.AddProcess(18, New ClientSocket.ProcessPacket(AddressOf ProcessCreateItem)) ' ¾ÆÀÌÅÛ ¾÷µ¥ÀÌÆ® IClientSocket.AddProcess(19, New ClientSocket.ProcessPacket(AddressOf ProcessUpdateItem)) ' ¾ÆÀÌÅÛ »èÁ¦ IClientSocket.AddProcess(20, New ClientSocket.ProcessPacket(AddressOf ProcessDeleteItem)) ' À¯Àú ·Î±×Àξƿô ·Î±× º¸±â IClientSocket.AddProcess(21, New ClientSocket.ProcessPacket(AddressOf ProcessViewLoginoutLog)) ' À¯Àú ±ÇÇÑ ¾ò¾î¿À±â/¼¼ÆÃÇϱâ IClientSocket.AddProcess(22, New ClientSocket.ProcessPacket(AddressOf ProcessAdminRightsAck)) IClientSocket.AddProcess(23, New ClientSocket.ProcessPacket(AddressOf ProcessAdminRightsAck)) End Sub End Module Module SendPacket Public Sub SendViewLoginoutLog(ByVal szUserID As String) Dim encoding As Encoding = encoding.GetEncoding(Code) Dim sendb(15) As Byte encoding.GetBytes(szUserID, 0, Min(16, szUserID.Length), sendb, 0) IClientSocket.Send(21, sendb) End Sub Public Sub SendCheckBlocked(ByVal cConnectedServer As Byte, ByVal dwUID As Int32) Dim sendb(4) As Byte sendb(0) = cConnectedServer Array.Copy(BitConverter.GetBytes(dwUID), 0, sendb, 1, 4) IClientSocket.Send(11, sendb) End Sub Public Sub UpdateCharData(ByVal charInfo As CharInfo) Dim encoding As Encoding = encoding.GetEncoding(Code) Dim sendb(71) As Byte Dim Pos As Int32 = 0 Array.Copy(BitConverter.GetBytes(Convert.ToInt32(charInfo.txtCID.Text)), 0, sendb, Pos, 4) ' CID encoding.GetBytes(charInfo.txtName.Text, 0, Min(16, charInfo.txtName.Text.Length), sendb, Pos + 4) ' À̸§ sendb(Pos + 20) = Convert.ToByte(charInfo.txtMW.Text) ' 1 : ³²ÀÚ, 2 : ¿©ÀÚ sendb(Pos + 21) = Convert.ToByte(charInfo.txtHead.Text) ' Head°¡ ¾Æ´Ï¶ó HairÀÓ sendb(Pos + 22) = Convert.ToByte(charInfo.txtFace.Text) ' ¾ó±¼Çü sendb(Pos + 23) = Convert.ToByte(charInfo.txtKind.Text) ' Kind - ij¸¯ÅÍ Á¾Á·. 0 : Àΰ£, 1 : ¾ÆÄ­ Array.Copy(BitConverter.GetBytes(Convert.ToUInt16(charInfo.txtClass.Text)), 0, sendb, Pos + 24, 2) ' ij¸¯ÅÍ Å¬·¡½º Array.Copy(BitConverter.GetBytes(Convert.ToUInt32(charInfo.txtFame.Text)), 0, sendb, Pos + 26, 4) ' ¸í¼º Array.Copy(BitConverter.GetBytes(Convert.ToUInt32(charInfo.txtMi.Text)), 0, sendb, Pos + 30, 4) ' ¸¶Àϸ®Áö Array.Copy(BitConverter.GetBytes(Convert.ToUInt32(charInfo.txtGuild.Text)), 0, sendb, Pos + 34, 4) ' ±æµå Array.Copy(BitConverter.GetBytes(Convert.ToUInt32(charInfo.txtParty.Text)), 0, sendb, Pos + 38, 4) ' ÆÄƼ sendb(Pos + 42) = Convert.ToByte(charInfo.txtLevel.Text) ' ·¹º§ Array.Copy(BitConverter.GetBytes(Convert.ToUInt32(charInfo.txtMoney.Text)), 0, sendb, Pos + 43, 4) ' µ· Array.Copy(BitConverter.GetBytes(Convert.ToUInt16(charInfo.txtIP.Text)), 0, sendb, Pos + 47, 2) ' IP (´É·ÂÄ¡ Áõ°¡Æ÷ÀÎÆ®) Array.Copy(BitConverter.GetBytes(Convert.ToUInt16(charInfo.txtStr.Text)), 0, sendb, Pos + 49, 2) ' Èû Array.Copy(BitConverter.GetBytes(Convert.ToUInt16(charInfo.txtDex.Text)), 0, sendb, Pos + 51, 2) ' ¹Îø¼º Array.Copy(BitConverter.GetBytes(Convert.ToUInt16(charInfo.txtCon.Text)), 0, sendb, Pos + 53, 2) ' °Ç°­ Array.Copy(BitConverter.GetBytes(Convert.ToUInt16(charInfo.txtIni.Text)), 0, sendb, Pos + 55, 2) ' Áö·Â Array.Copy(BitConverter.GetBytes(Convert.ToUInt16(charInfo.txtWis.Text)), 0, sendb, Pos + 57, 2) ' ÁöÇý Array.Copy(BitConverter.GetBytes(Convert.ToUInt16(charInfo.txtHp.Text)), 0, sendb, Pos + 59, 2) ' HP Array.Copy(BitConverter.GetBytes(Convert.ToUInt16(charInfo.txtMp.Text)), 0, sendb, Pos + 61, 2) ' MP Array.Copy(BitConverter.GetBytes(Convert.ToUInt64(charInfo.txtExp.Text)), 0, sendb, Pos + 63, 8) ' EXP IClientSocket.Send(16, sendb) End Sub Public Sub UpdateLastPos(ByVal charInfo As CharInfo) Dim sendb(11) As Byte Array.Copy(BitConverter.GetBytes(Convert.ToSingle(charInfo.txtX.Text)), 0, sendb, 0, 4) Array.Copy(BitConverter.GetBytes(Convert.ToSingle(charInfo.txtY.Text)), 0, sendb, 4, 4) Array.Copy(BitConverter.GetBytes(Convert.ToSingle(charInfo.txtZ.Text)), 0, sendb, 8, 4) IClientSocket.Send(17, sendb) End Sub Public Sub Commit() Dim sendb(-1) As Byte IClientSocket.Send(15, sendb) End Sub Public Sub SendCreateItem(ByVal szItemName As String, ByVal cTakePos As Byte, _ ByVal cXPos As Byte, ByVal cYPos As Byte, ByVal cZPos As Byte) Dim encoding As Encoding = encoding.GetEncoding(Code) Dim sendb(35) As Byte encoding.GetBytes(szItemName, 0, Min(32, szItemName.Length), sendb, 0) sendb(32) = cTakePos sendb(33) = cXPos sendb(34) = cYPos sendb(35) = cZPos IClientSocket.Send(18, sendb) End Sub Public Sub SendUpdateItem(ByVal Item As ItemInfo) Dim encoding As Encoding = encoding.GetEncoding(Code) Dim sendb(167) As Byte Dim Pos As Int32 = 0 encoding.GetBytes(Item.m_szItemName, 0, Min(64, Item.m_szItemName.Length), sendb, Pos) Array.Copy(BitConverter.GetBytes(Item.m_dwItemUID), 0, sendb, Pos + 64, 8) Array.Copy(BitConverter.GetBytes(Item.m_usItemProtoTypeID), 0, sendb, Pos + 72, 2) sendb(Pos + 74) = Item.m_cItemType sendb(Pos + 75) = Item.m_cTakeType sendb(Pos + 76) = Item.m_cXPos sendb(Pos + 77) = Item.m_cYPos sendb(Pos + 78) = Item.m_cZPos sendb(Pos + 79) = Item.m_cNumOrDurability sendb(Pos + 80) = Item.m_cXSize sendb(Pos + 81) = Item.m_cYSize sendb(Pos + 82) = BitConverter.GetBytes(Item.m_bEquip)(0) sendb(Pos + 83) = Item.m_cPadding If True = Item.m_bEquip Then Array.Copy(BitConverter.GetBytes(Item.m_usRuneSocket), 0, sendb, Pos + 84, 2) sendb(Pos + 86) = Item.m_cMaxDurability sendb(Pos + 87) = Item.m_cCurrentSocketNum sendb(Pos + 88) = Item.m_cMaxSocketNum sendb(Pos + 89) = Item.m_cMaterialType Array.Copy(Item.m_cSocket, 0, sendb, Pos + 90, 8) Dim nCount As Int32 For nCount = 0 To 34 Array.Copy(BitConverter.GetBytes(Item.m_usAttribute(nCount)), 0, sendb, Pos + 98 + nCount * 2, 2) Next End If IClientSocket.Send(19, sendb) End Sub Public Sub SendDeleteItem(ByVal dwItemUID As UInt64, ByVal usProtoTypeID As UInt16, _ ByVal cTakePos As Byte, ByVal cXPos As Byte, ByVal cYPos As Byte, ByVal cZPos As Byte) Dim sendb(13) As Byte Array.Copy(BitConverter.GetBytes(dwItemUID), 0, sendb, 0, 8) Array.Copy(BitConverter.GetBytes(usProtoTypeID), 0, sendb, 8, 2) sendb(10) = cTakePos sendb(11) = cXPos sendb(12) = cYPos sendb(13) = cZPos IClientSocket.Send(20, sendb) End Sub Public Sub SendAdminRightSearch(ByVal cAdminRightID As Char) Dim sendb(0) As Byte sendb(0) = Asc(cAdminRightID) IClientSocket.Send(22, sendb) End Sub Public Sub SendAdminRightUpdate(ByVal cAdminRightID As Char, ByVal cRights As Boolean()) Dim sendb(20) As Byte sendb(0) = Asc(cAdminRightID) Dim Pos As Int32 = 1 For Pos = 1 To 20 If True = cRights(Pos - 1) Then sendb(Pos) = 1 End If Next IClientSocket.Send(23, sendb) End Sub End Module