static public void CL_CHECK(BaseClient client, PacketIn packet) { Client cclient = client as Client; uint Version = packet.GetUint32(); Log.Debug("CL_CHECK", "Launcher Version : " + Version); PacketOut Out = new PacketOut((byte)Opcodes.LCR_CHECK); if (Version != Program.Version) { Out.WriteByte((byte)CheckResult.LAUNCHER_VERSION); // Version incorrect + message Out.WriteString(Program.Message); client.SendPacket(Out); cclient.Disconnect(); return; } byte File = packet.GetUint8(); UInt64 Len = 0; if (File >= 1) Len = packet.GetUint64(); if ((long)Len != Program.Info.Length) { Out.WriteByte((byte)CheckResult.LAUNCHER_FILE); Out.WriteString(Program.StrInfo); } else Out.WriteByte((byte)CheckResult.LAUNCHER_OK); cclient.SendPacket(Out); }
public override void OnWorldPlayerEvent(string EventName, Player Plr, object Data) { if (EventName == "SEND_PACKAGES") { List<PacketInfo> P; if (Packets.TryGetValue(Plr._Info.Career, out P)) { foreach (PacketInfo Packet in P) { PacketOut Out = new PacketOut(Packet.Opcode); Out.Write(Packet.Data, 3, Packet.Data.Length - 3); Plr.SendPacket(Out); } } if (Plr._Info.FirstConnect && Plr.GmLevel == 0) { Plr._Info.FirstConnect = false; PacketInfo Packet = Intros[Plr._Info.Career]; PacketOut Out = new PacketOut(Packet.Opcode); Out.Write(Packet.Data, 3, Packet.Data.Length - 3); Plr.SendPacket(Out); } } }
public void SendAbilityDone(ushort TargetOID) { Log.Success("Ability", "Send Done :" + Info.Entry); Player player = this.Caster.GetPlayer(); PacketOut Out1 = new PacketOut((byte)Opcodes.F_USE_ABILITY); Out1.WriteUInt16(0); Out1.WriteUInt16(Info.Entry); Out1.WriteUInt16(Caster.Oid); Out1.WriteHexStringBytes("061022730601000001E601000000"); player.DispatchPacket(Out1, true); PacketOut Out2 = new PacketOut((byte)Opcodes.F_USE_ABILITY); Out2.WriteUInt16(0); Out2.WriteUInt16(Info.Entry); Out2.WriteUInt16(Caster.Oid); Out2.WriteHexStringBytes("0610227302010000000001000000"); player.DispatchPacket(Out2, true); PacketOut Out3 = new PacketOut((byte)Opcodes.F_SWITCH_ATTACK_MODE); Out3.WriteByte(1); Out3.Fill(0, 3); player.SendPacket(Out3); PacketOut Out4 = new PacketOut((byte)Opcodes.F_SET_ABILITY_TIMER); Out4.WriteUInt16(Info.Entry); Out4.Fill(0, 10); player.SendPacket(Out4); }
public override void SendMeTo(Player Plr) { PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_STATIC); Out.WriteUInt16(Oid); Out.WriteUInt16(0); Out.WriteUInt16((UInt16)Spawn.WorldO); Out.WriteUInt16((UInt16)Spawn.WorldZ); Out.WriteUInt32((UInt32)Spawn.WorldX); Out.WriteUInt32((UInt32)Spawn.WorldY); Out.WriteUInt16((ushort)Spawn.DisplayID); Out.WriteUInt16(Spawn.Proto.GetUnk(0)); Out.WriteUInt16(Spawn.Proto.GetUnk(1)); Out.WriteUInt16(Spawn.Proto.GetUnk(2)); Out.WriteByte(0); Out.WriteUInt16(Spawn.Proto.GetUnk(3)); Out.Fill(0, 5); Out.WriteUInt16(Spawn.Proto.GetUnk(4)); Out.WriteUInt16(Spawn.Proto.GetUnk(5)); Out.WriteUInt32(0); Out.WritePascalString(Name); Out.WriteByte(0); Plr.SendPacket(Out); base.SendMeTo(Plr); }
static public void CMSG_VerifyProtocolReq(BaseClient client, PacketIn packet) { Client cclient = client as Client; PacketOut Out = new PacketOut((byte)Opcodes.SMSG_VerifyProtocolReply); byte[] IV_HASH1 = { 0x01, 0x53, 0x21, 0x4d, 0x4a, 0x04, 0x27, 0xb7, 0xb4, 0x59, 0x0f, 0x3e, 0xa7, 0x9d, 0x29, 0xe9 }; byte[] IV_HASH2 = { 0x49, 0x18, 0xa1, 0x2a, 0x64, 0xe1, 0xda, 0xbd, 0x84, 0xd9, 0xf4, 0x8a, 0x8b, 0x3c, 0x27, 0x20 }; ByteString iv1 = ByteString.CopyFrom(IV_HASH1); ByteString iv2 = ByteString.CopyFrom(IV_HASH2); VerifyProtocolReply.Builder verify = VerifyProtocolReply.CreateBuilder(); verify.SetResultCode(VerifyProtocolReply.Types.ResultCode.RES_SUCCESS); verify.SetIv1(ByteString.CopyFrom(IV_HASH1)); verify.SetIv2(ByteString.CopyFrom(IV_HASH2)); Out.Write(verify.Build().ToByteArray()); cclient.SendTCPCuted(Out); }
public void SendAbilities() { if (!HasPlayer()) return; Log.Info("AbilityInterface", "Sending " + Abilities.Count + " Abilities"); PacketOut Out = new PacketOut((byte)Opcodes.F_CHARACTER_INFO); Out.WriteByte(1); // Action Out.WriteByte((byte)Abilities.Count); Out.WriteUInt16(0x300); foreach (Ability_Info Info in Abilities) { Out.WriteUInt16(Info.Entry); Out.WriteByte(Info.Level); } GetPlayer().SendPacket(Out); PacketOut AutoAttack = new PacketOut((byte)Opcodes.F_CHARACTER_INFO); AutoAttack.WriteByte(1); // Action AutoAttack.WriteByte(1); // Count AutoAttack.WriteUInt16(0x300); AutoAttack.WriteUInt16(245); AutoAttack.WriteByte(1); GetPlayer().SendPacket(AutoAttack); }
public static void HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = (LobbyClient)client; UInt32 WorldUid = packet.GetUint32R(); string Name = packet.GetUnicodeString(); PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CHARACTER_NAME_CHECK); if (CheckName(Name) == 0) { cclient.CreateChar = new DBCharacter(); cclient.CreateChar.AcctId = cclient.Account.Id; cclient.CreateChar.Name = Name; if (cclient.Account.WorldId != WorldUid) Program.CharMgr.SetAccountWorld(cclient.Account.Id, (int)WorldUid); Out.WriteUInt32(0); } else { cclient.CreateChar = null; Out.WriteUInt32(1); } cclient.SendTCP(Out); }
public static void HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = client as LobbyClient; Program.CharMgr.DeleteCharacter(cclient.Account.Id, packet.GetUint8()); PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CHARACTER_DELETE); Out.WriteUInt32R(0); cclient.SendTCP(Out); }
public void BuildStats(ref PacketOut Out) { Out.WriteByte(0); for (byte i = 0; i < _BaseStats.Length; ++i) { Out.WriteByte(i); Out.WriteUInt16(_BaseStats[i]); } }
public void SendInteract(Player Plr, InteractMenu Menu) { if (Money > 0) { if (Plr.GetGroup() == null) { Plr.AddMoney(Money); } else { Plr.GetGroup().AddMoney(Money / (uint)Plr.GetGroup().Size()); } Money = 0; } switch (Menu.Menu) { case 15: // Fermeture du loot return; case 13: // Récupération de tous les items if (Plr.ItmInterface.GetTotalFreeInventorySlot() < GetLootCount()) Plr.SendLocalizeString("", GameData.Localized_text.TEXT_OVERAGE_CANT_LOOT); else { for (byte i = 0; i < Loots.Length; ++i) { if (Loots[i] == null) continue; TakeLoot(Plr, i); } } break; case 12: // Récupération d'un item TakeLoot(Plr, Menu.Num); break; } PacketOut Out = new PacketOut((byte)Opcodes.F_INTERACT_RESPONSE); Out.WriteByte(4); Out.WriteByte(GetLootCount()); for (byte i = 0; i < Loots.Length; ++i) { if (Loots[i] == null) continue; Out.WriteByte(i); Item.BuildItem(ref Out, null, Loots[i].Item, 0, 1); } Plr.SendPacket(Out); }
public static void BuildObjectives(PacketOut Out, List<Quest_Objectives> Objs) { Out.WriteByte((byte)Objs.Count); foreach (Quest_Objectives Objective in Objs) { Out.WriteByte((byte)Objective.ObjCount); Out.WritePascalString(Objective.Description); } }
public void SendTok(ushort Entry, bool Print) { PacketOut Out = new PacketOut((byte)Opcodes.F_TOK_ENTRY_UPDATE); Out.WriteUInt32(1); Out.WriteUInt16((UInt16)Entry); Out.WriteByte(1); Out.WriteByte((byte)(Print ? 1 : 0)); Out.WriteByte(1); GetPlayer().SendPacket(Out); }
// Change "Character_Objectives" for "Character_InProgressObjectives" for show Quest Objectives in F_QUEST_LIST public static void BuildObjectives(PacketOut Out, List<Character_InProgressObjectives> Objs) { Out.WriteByte((byte)Objs.Count); foreach (Character_InProgressObjectives Objective in Objs) { Out.WriteByte((byte)Objective.Count); Out.WriteByte((byte)Objective.Objective.ObjCount); Out.WriteUInt16(0); Out.WritePascalString(Objective.Objective.Description); } }
static public void F_PING(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; uint Timestamp = packet.GetUint32(); PacketOut Out = new PacketOut((byte)Opcodes.S_PONG); Out.WriteUInt32(Timestamp); Out.WriteUInt64((UInt64)TCPManager.GetTimeStamp()); Out.WriteUInt32((UInt32)(cclient.SequenceID+1)); Out.WriteUInt32(0); cclient.SendPacket(Out); }
public static void Send(LobbyClient client) { PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CHARACTER_CREATE); if (client.CreateChar == null) Out.WriteInt32R(1); else { Out.WriteInt32R(0); Out.WriteInt32R(client.CreateChar.SlotId); } client.CreateChar = null; client.SendTCP(Out); }
public static void Send(LobbyClient client) { Log.Debug("LOGIN_SALT", "Send to " + client.Account.Email); MakeSalt(client); PacketOut Out = new PacketOut((UInt32)Opcodes.LOGIN_SALT); Out.WriteInt32R(client.Account.Id); Out.Write(client.B, 0, 64); Out.WriteByte(0x40); Out.WriteByte(0); Out.Write(client.Salt, 0, 10); client.SendTCP(Out); }
public static void Send(LobbyClient client) { PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_LOGIN_SUCCESS); Out.WriteUnicodeString(client.Account.RealTag,48); Out.WriteUInt32R(21); // Account Type Out.WriteInt64R(TCPManager.GetTimeStamp()); // Temps avant expiration du compte Out.WriteByte(0x13); // ms Out.WriteByte(0x29); // sec Out.WriteUInt16R(0x12); // Hour // Date de création Out.WriteByte(0x0E); // day Out.WriteByte(0x07); // month Out.WriteUInt16R(2010); // Year Out.WriteInt32R(1450); // Temps de jeu (secondes) Out.WriteInt32R(client.Account.Points); // Points APB for(int i=1;i<6;++i) Out.WriteInt32R( Program.FileMgr.GetFileVersion(client.Account.Id, i, true, "", "")); // Config file, Server Version Out.WriteInt32R(0); Out.WriteUInt16(0x957D); Out.WriteUInt16(0x0400); Out.WriteUInt16(0x5052); Out.WriteUInt16(0x4F45); Out.WriteUInt16(0x552E); Out.WriteUInt16(0x3232); Out.WriteUInt16(0x3738); Out.WriteUInt16(0x3031); Out.WriteUInt16(0); Out.WriteUInt16(0x0067); Out.WriteUInt64(0x526C624331313256); Out.WriteUInt64(0x486E314100000000); Out.WriteUInt16(0); Out.WriteStringBytes(""); Out.WriteByte(0); client.SendTCP(Out); ANS_CHARACTER_INFO.Send(client); }
public static void BuildQuestComplete(PacketOut Out, Quest Q, bool Particular) { Out.WritePascalString(Q.Name); Out.WriteUInt16((UInt16)Q.OnCompletionQuest.Length); Out.WriteStringBytes(Q.OnCompletionQuest); if (Particular) { Out.WriteUInt16((UInt16)Q.Particular.Length); Out.WriteStringBytes(Q.Particular); } Out.WriteByte(1); Out.WriteUInt32(Q.Gold); Out.WriteUInt32(Q.Xp); }
public void SendReinitTime(Player Plr, ushort Time) { PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECTIVE_INFO); Out.WriteUInt32(Info.Entry); Out.WriteByte(1); Out.WriteByte(2); Out.WriteByte(1); Out.WriteUInt16(0); Out.WritePascalString(Info.Name); Out.WriteUInt16(0); Out.WriteUInt16(Time); // Time in seconds Out.WriteUInt16(0); Out.WriteUInt16(0); Plr.SendPacket(Out); }
static public void F_CONNECT(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; packet.Skip(8); UInt32 Tag = packet.GetUint32(); string Token = packet.GetString(80); packet.Skip(21); string Username = packet.GetString(23); // TODO AuthResult Result = Program.AcctMgr.CheckToken(Username, Token); if (Result != AuthResult.AUTH_SUCCESS) { Log.Error("F_CONNECT", "Invalid Token =" + Username); cclient.Disconnect(); } else { cclient._Account = Program.AcctMgr.GetAccount(Username); if (cclient._Account == null) { Log.Error("F_CONNECT", "Invalid Account =" + Username); cclient.Disconnect(); } else { //Log.Success("F_CONNECT", "MeId=" + cclient.Id); GameClient Other = (cclient.Server as TCPServer).GetClientByAccount(cclient, cclient._Account.AccountId); if (Other != null) Other.Disconnect(); { PacketOut Out = new PacketOut((byte)Opcodes.S_CONNECTED); Out.WriteUInt32(0); Out.WriteUInt32(Tag); Out.WriteByte(Program.Rm.RealmId); Out.WriteUInt32(1); Out.WritePascalString(Username); Out.WritePascalString(Program.Rm.Name); Out.WriteByte(0); Out.WriteUInt16(0); cclient.SendPacket(Out); } } } }
public void SendToAll(PacketOut Packet) { Packet.WritePacketLength(); LockReadClients(); for (int i = 0; i < Clients.Length; ++i) { if (Clients[i] != null) { Clients[i].SendTCP(Packet.ToArray()); } } UnLockReadClients(); }
static public void F_EMOTE(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) return; UInt32 emote = packet.GetUint32(); PacketOut Out = new PacketOut((byte)Opcodes.F_EMOTE); Out.WriteUInt16(cclient.Plr.Oid); Out.WriteUInt16((UInt16)emote); if (cclient.Plr.CbtInterface.HasTarget(GameData.TargetTypes.TARGETTYPES_TARGET_ALLY)) Out.WriteUInt16(cclient.Plr.CbtInterface.Targets[(int)GameData.TargetTypes.TARGETTYPES_TARGET_ALLY]); cclient.Plr.DispatchPacket(Out, false); cclient.Plr.SendPacket(Out); }
public static void Send(LobbyClient client) { PacketOut Out = new PacketOut((UInt32)Opcodes.LOGIN_PUZZLE); Out.WriteInt32R(Program.Version[0]); Out.WriteInt32R(Program.Version[1]); Out.WriteInt32R(Program.Version[2]); Out.WriteInt32R(Program.Build); Out.WriteByte(0x05); Out.WriteInt64R(-313054979819954861); Out.WriteUInt32R(0); Out.WriteUInt32R(0); Out.WriteUInt32R(0); client.SendTCP(Out); }
public void SendMount(Player Plr) { PacketOut Out = new PacketOut((byte)Opcodes.F_MOUNT_UPDATE); Out.WriteUInt16(Owner.Oid); if (CurrentMountInfo == null) Out.WriteUInt32(0); else Out.WriteUInt32(CurrentMountInfo.Entry); Out.Fill(0, 14); if (Plr == null) Owner.DispatchPacket(Out, true); else Plr.SendPacket(Out); }
public static void F_EMOTE(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (cclient.Plr == null) return; UInt32 emote = packet.GetUint32(); PacketOut Out = new PacketOut((byte)Opcodes.F_EMOTE); Out.WriteUInt16(cclient.Plr.Oid); Out.WriteUInt16((UInt16)emote); if (cclient.Plr.CbtInterface.HasTarget()) Out.WriteUInt16(cclient.Plr.CbtInterface.CurrentTarget.Target.Oid); cclient.Plr.DispatchPacket(Out, false); cclient.Plr.SendPacket(Out); }
// Unused public void SendToAll(PacketOut Packet) { if (!Packet.Finalized) { Packet.WritePacketLength(); } LockReadClients(); for (int i = 0; i < Clients.Length; ++i) { if (Clients[i] != null) { Clients[i].SendAsynchronousTCP(Packet.ToArray()); } } UnLockReadClients(); }
public static void BuildPlayerInfo(ref PacketOut Out,uint CharId, string Name, bool Online, byte Level, UInt16 Career, UInt16 Zone) { Out.WriteUInt32(CharId); Out.WriteByte(0); Out.WritePascalString(Name); Out.WriteByte(0); Out.WriteByte((byte)(Online ? 1 : 0)); Out.WriteByte((byte)(Online ? 1 : 0)); if (!Online) return; Out.WriteByte(Level); Out.WriteUInt16(0); Out.WriteUInt16(Career); Out.WriteUInt16(Zone); Out.WriteUInt16(1); // Guild Size Out.WriteByte(0); }
/// <summary>Copies the packet into the thread-local TCP send buffer, encrypting it if required. </summary> /// <param name="packet">A network packet.</param> /// <param name="destOffset">The offset to copy this packet to in the local send buffer.</param> /// <returns>The number of bytes to send, or 0 if encryption failed.</returns> public int EncryptAndBuffer(PacketOut packet, int destOffset) { int packetLength = (int)packet.Length; if (packetLength > 65535) { Log.Error("EncryptAndBuffer", "Packet length is greater than send buffer size!"); return(0); } // Create a copy of the bytes to be encrypted Buffer.BlockCopy(packet.GetBuffer(), 0, TLSendBuffer.Value, destOffset, packetLength); if (m_crypts.Count > 0) { // Figure out the size of the header int headerPos = 0; headerPos += PacketOut.SizeLen; if (PacketOut.OpcodeInLen) { headerPos += packet.OpcodeLen; } try { // Encrypt the copy in-place, skipping the header bytes foreach (KeyValuePair <ICryptHandler, CryptKey[]> cryptEntry in m_crypts) { cryptEntry.Key.Crypt(cryptEntry.Value[0], TLSendBuffer.Value, destOffset + headerPos, packetLength - headerPos); } } catch (Exception e) { Log.Error("BaseClient", "Crypt Error : " + e); return(0); } } return(packetLength); }
public static void HandlePacket(BaseClient client, PacketIn packet) { LobbyClient cclient = (LobbyClient)client; byte FileId = packet.GetUint8(); UInt32 Version = packet.GetUint32R(); byte[] File = new byte[packet.Length - packet.Position]; packet.Read(File, 0, File.Length); File = ZlibMgr.Decompress(File); Log.Debug("ConfigSave", "Config saved : fileid=" + FileId + ", Version=" + Version + ",Size=" + File.Length); Program.FileMgr.SaveInfo(cclient.Account.Id, FileId, File); PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CONFIGFILE_SAVE); Out.WriteUInt32R(0); Out.WriteByte(FileId); Out.Write(File, 0, File.Length); cclient.SendTCP(Out); }
/* * |00 3D 71 06 90 00 00 00 00 1F E3 00 0C E3 29 00 0E 59 90 FF FF 1E 00 00 00 35 F3 00 03 04 00 00 |00 00 64 8B 76 09 CD 00 00 00 00 0F 45 6D 70 69 |..d.v.......Empi| |72 65 20 42 61 72 20 44 6F 6F 72 04 06 AB DD 00 |re Bar Door.....| ------------------------------------------------------------------- * */ public override void SendMeTo(Player Plr) { PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_STATIC); Out.WriteUInt16(Oid); Out.WriteUInt16(0); Out.WriteUInt16((UInt16)Spawn.WorldO); Out.WriteUInt16((UInt16)Spawn.WorldZ); Out.WriteUInt32((UInt32)Spawn.WorldX); Out.WriteUInt32((UInt32)Spawn.WorldY); Out.WriteUInt16((ushort)Spawn.DisplayID); Out.WriteUInt16(Spawn.GetUnk(0)); Out.WriteUInt16(Spawn.GetUnk(1)); Out.WriteUInt16(Spawn.GetUnk(2)); Out.WriteByte(Spawn.Unk1); int flags = Spawn.GetUnk(3); Loot Loots = LootsMgr.GenerateLoot(this, Plr); if (Loots != null && Loots.IsLootable()) { flags = flags | 4; } Out.WriteUInt16((ushort)flags); Out.WriteByte(Spawn.Unk2); Out.WriteUInt32(Spawn.Unk3); Out.WriteUInt16(Spawn.GetUnk(4)); Out.WriteUInt16(Spawn.GetUnk(5)); Out.WriteUInt32(Spawn.Unk4); Out.WritePascalString(Name); Out.WriteByte(0); Plr.SendPacket(Out); base.SendMeTo(Plr); }
static public void CL_START(BaseClient client, PacketIn packet) { Client cclient = client as Client; string Username = packet.GetString(); UInt32 Len = packet.GetUint32(); byte[] Password = packet.Read((int)Len); bool result = Program.AcctMgr.CheckAccount(Username, Password); Log.Debug("CL_START", "Lancement du client : " + Username + " " + result); PacketOut Out = new PacketOut((byte)Opcodes.LCR_START); if (result == true) { Out.WriteByte(0); Out.WriteString(Program.AcctMgr.GenerateToken(Username)); } else Out.WriteByte(1); cclient.SendPacket(Out); }
public static void Send(LobbyClient client) { List<WorldInfo> _Worlds = Program.CharMgr.GetWorlds(); PacketOut Out = new PacketOut((UInt32)Opcodes.WORLD_LIST); Out.WriteInt32R(0); // Returned Code Out.WriteUInt16R((UInt16)_Worlds.Count); // World Count foreach (WorldInfo Info in _Worlds) { Out.WriteUInt32R((UInt32)Info._Info.Id); // WorldUid Out.WriteUnicodeString(Info._Info.Name, 32); // WorldName Out.WriteByte((byte)(Info.RpcID == 0 ? 0 : 1)); // Status Out.WriteByte(Info._Info.Population); // Pop 0:Low 1:Medium 2:High Out.WriteByte(Info._Info.Enf); // enf recommended , true or false Out.WriteByte(Info._Info.Crim); // crim recommended , true or false } client.SendTCP(Out); }
public static void HandlePacket(BaseClient client, PacketIn packet) { WorldClient cclient = (WorldClient)client; UInt32 AcctId = packet.GetUint32R(); Log.Debug("AskWorldEnter", "New client, Account = " + AcctId); cclient.Account = Program.CharMgr.GetAccount((int)AcctId); cclient.Character = Program.CharMgr.GetInfoForEnter((int)AcctId); PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_WORLD_ENTER); if (cclient.Account == null || cclient.Character == null) Out.WriteInt32R(1); else { Out.WriteInt32R(0); Out.WriteInt32R(cclient.Character.Character.Id); Out.WriteInt32R(cclient.Account.Points); // Points Out.WriteByte(1); Out.WriteInt64R(TCPManager.GetTimeStamp()); Out.WriteFloat(5.00f); // fMarketPlaceMinimumBidPct Out.WriteByte(0); // GroupPublic Out.WriteByte(0); // GroupInvite Out.WriteInt32R(Program.FileMgr.GetFileVersion(cclient.Account.Id, 1, false, Program.Config.WorldName, cclient.Character.Character.Name)); // ConfigFileVersion Out.WriteInt32R(Program.FileMgr.GetFileVersion(cclient.Account.Id, 2, false, Program.Config.WorldName, cclient.Character.Character.Name)); Out.WriteInt32R(Program.FileMgr.GetFileVersion(cclient.Account.Id, 3, false, Program.Config.WorldName, cclient.Character.Character.Name)); Out.WriteInt32R(Program.FileMgr.GetFileVersion(cclient.Account.Id, 4, false, Program.Config.WorldName, cclient.Character.Character.Name)); Out.WriteInt32R(Program.FileMgr.GetFileVersion(cclient.Account.Id, 5, false, Program.Config.WorldName, cclient.Character.Character.Name)); Out.WriteByte(1); // Tutorial Complete Out.WriteByte(0); // lookInForGroup } cclient.SendTCP(Out); }
public PacketOut Crypt(PacketOut packet) { if (m_crypts.Count <= 0) { return(packet); } byte[] Packet = packet.ToArray(); Log.Tcp("SendTCP", Packet, 0, (int)Packet.Length); int Hpos = 0; Hpos += PacketOut.SizeLen; if (PacketOut.OpcodeInLen) { Hpos += packet.OpcodeLen; } byte[] Header = new byte[Hpos]; byte[] ToCrypt = new byte[(packet.Length - Hpos)]; for (int i = 0; i < Hpos; ++i) { Header[i] = Packet[i]; } for (int i = Hpos; i < Packet.Length; ++i) { ToCrypt[i - Hpos] = Packet[i]; } try { foreach (KeyValuePair <ICryptHandler, CryptKey[]> Entry in m_crypts) { ToCrypt = Entry.Key.Crypt(Entry.Value[0], ToCrypt); } } catch (Exception e) { Log.Error("BaseClient", "Crypt Error : " + e.ToString()); return(packet); } PacketOut Out = new PacketOut((byte)0); Out.Opcode = packet.Opcode; Out.OpcodeLen = packet.OpcodeLen; Out.Position = 0; Out.SetLength(0); byte[] Total = new byte[Header.Length + ToCrypt.Length]; for (int i = 0; i < Total.Length; ++i) { if (i < Header.Length) { Total[i] = Header[i]; } else { Total[i] = ToCrypt[i - Header.Length]; } } Out.Write(Total, 0, Total.Length); return(Out); }
public void SendTCPRaw(PacketOut packet) { SendTCP((byte[])packet.GetBuffer().Clone()); }