/// <summary> /// Adds a compressed byte array. /// </summary> internal static void AddCompressed(this ChecksumEncoder Writer, byte[] Value) { byte[] ZLib = ZlibStream.CompressBuffer(Value); Writer.AddRange(BitConverter.GetBytes(ZLib.Length)); Writer.AddRange(ZLib); }
/// <summary> /// Encodes the first bytes of LogicGameMode. /// </summary> public void EncodeOnce(ChecksumEncoder Stream) { Stream.WriteVInt(42); // Value != 42: decodeOnce stream is corrupted! #1 Stream.AddRange("02-02-01-02-04-01-00 00-00-00-19 54-49-44-5F-43-41-53-54-5F-51-55-45-53-54-5F-4D-49-4E-5F-45-4C-49-58-49-52 00-00-00-00-1E-00-00-00-00-00-06-00-01-01-00-04-04-00 00-00-00-19 54-49-44-5F-43-41-53-54-5F-51-55-45-53-54-5F-4D-41-58-5F-45-4C-49-58-49-52 00-00-00-00-32-00-00-00-00-00-00-02-01-01-00 01 7F-7F-7F-7F-00-00-00-00-00-00-01-32-00-00-00-00-00-00-00-00-00-00-00-00-00-08-00-00-00-00-00-00-00-00-02-00-00-00-00-00-00-00-00-00-00-00-01 02 00-01 00-01 00-01 00-00-00-06-42-65-72-6B-61-6E-0A-9D-25-98-04-98-24-00-00-00-00-00-26-00-00-00-00-00-08-0E-05-01-83-B9-01-05-02-B2-04-05-03-00-05-04-00-05-0C-A3-0E-05-0D-00-05-0E-00-05-0F-8F-06-05-16-90-06-05-19-B0-DD-9E-F2-01-05-1A-09-05-1C-00-05-1D-B3-88-D5-44-05-23-01-00-00-00-05-05-06-BF-28-05-07-95-02-05-0B-26-05-14-08-05-1B-09-08-1A-17-8A-01-1A-1D-04-1A-23-26-1A-25-11-1A-2A-15-1A-2E-04-1A-36-05-1C-0B-3E-00-00-09-02-1E-97-8D-69-00-00-00-0B-6C-6F-73-20-70-69-74-75-64-6F-73-B3-01-99-0E-9C-02-00-A9-06-BA-05-01-B6-01-03-00-00-00-01".HexaToBytes()); // TODO : Implement the Events. /* Stream.WriteBoolean(false); * * if (this.Battle != null) * { * for (int I = 0; I < 4; I++) * { * if (this.Battle.Players[I] != null) * { * Stream.WriteBoolean(true); * this.Battle.Players[I].Encode(Stream, true); * * continue; * } * * Stream.WriteBoolean(false); * } * } */ Stream.WriteVInt(43); // Value != 43: decodeOnce stream is corrupted! #2 }
/// <summary> /// Encodes this instance. /// </summary> internal void Encode(ChecksumEncoder Packet) { Packet.ResetChecksum(); Packet.AddVInt(this.Time.SubTick); Packet.AddVInt(Packet.Checksum); Packet.AddVInt(TimeUtil.Timestamp); Packet.AddVInt(11); this.Time.Encode(Packet); this._Random.Encode(Packet); Packet.AddVInt(1005459526); // ? if (this._Battle != null) { this._Battle.Encode(Packet); } else { this.Home.Encode(Packet.ByteStream); } Packet.AddVInt(12); Packet.AddRange("00-00-00-91".HexaToBytes()); Packet.AddVInt(Packet.Checksum); this.CommandManager.Encode(Packet); }
/// <summary> /// Encodes in the specified stream. /// </summary> /// <param name="Stream">The stream.</param> public void Encode(ChecksumEncoder Stream) { Stream.EncodeData(this.ChestData); Stream.WriteVInt(88); Stream.WriteVInt(0); Stream.WriteString(this.Type); Stream.WriteVInt(346); Stream.WriteVInt(this.Index); Stream.EncodeSpellList(this.FortuneSpells); Stream.WriteVInt(-1); Stream.WriteVInt(0); Stream.WriteVInt(-1); return; Stream.WriteVInt(19); Stream.WriteVInt(325); Stream.WriteVInt(88); Stream.WriteVInt(2); Stream.WriteString("Fortune"); Stream.WriteVInt(346); Stream.WriteVInt(1); // Index Stream.WriteVInt(4); // Array { Stream.AddRange("1A-02".HexaToBytes()); Stream.AddRange("1A-15".HexaToBytes()); Stream.AddRange("1A-26".HexaToBytes()); Stream.AddRange("1A-19".HexaToBytes()); } Stream.WriteVInt(90000005); Stream.WriteVInt(0); Stream.WriteVInt(-1); }
/// <summary> /// Encodes this instance. /// </summary> public void Encode(ChecksumEncoder Stream, bool EncodeCommandManager) { Stream.ResetChecksum(); /* Stream.WriteVInt(this.Time); * Stream.WriteVInt(Stream.Checksum); * Stream.WriteVInt(TimeUtil.Timestamp); * * Stream.WriteVInt(11); // Val != 11: Full update stream is corrupted! * * this.Time.Encode(Stream); * this.Random.Encode(Stream); * * Stream.WriteVInt(this.Random.Seed); * * if (this.Battle != null) * { * this.Battle.Encode(Stream, this.Player); * } * else * { * this.Home.Encode(Stream.ByteStream); * } * * Stream.WriteVInt(12); // Val != 12: Full update stream is corrupted #2! * { * // TUTORIAL MANAGER * * Stream.EncodeLogicData(null, 49); * Stream.WriteVInt(0); * * if (this.Battle != null) * { * Stream.EncodeData(null); // WriteGameObjectReference * } * } * * Stream.WriteVInt(Stream.Checksum); * * if (EncodeCommandManager) * { * this.CommandManager.Encode(Stream); * } */ Stream.AddRange("00-21-7F-0B-00-54-7E-9E-44-E8-A6-D2-A9-01-02-08-01-7F-7F-00 00-01 00-00-00-00-00-00-00-00-00-06-01-00-00-09-00-00-00-01-00-00-00-8E-02-F2-7D-00-00-06-7A-06-23-01-23-01-23-01-23-01-23-00-23-00-01-00-01-00-00-01-05-00-05-01-05-02-05-03-05-04-05-05-08-0D-A4-E2-01-9C-8E-03-00-00-7F-00-C0-7C-00-00-02-00-00-00-00-00-00-01-0D-AC-36-A4-65-00-00-7F-00-80-04-00-00-01-00-00-00-00-00-00-08-0D-AC-36-9C-8E-03-00-00-7F-00-C0-7C-00-00-01-00-00-00-00-00-00-01-0D-A4-E2-01-A4-65-00-00-7F-00-80-04-00-00-02-00-00-00-00-00-00-01-0D-A8-8C-01-B8-2E-00-00-7F-00-80-04-00-00-00-00-00-00-00-00-1A-04-03-01-7C-01-04-02-06-05-07-00-7F-7F-7F-00-7F-00-00-05-00-00-00-00-00-7F-7F-7F-7F-7F-7F-7F-7F-00-00-00-00-08-0D-A8-8C-01-88-C5-03-00-00-7F-00-C0-7C-00-00-00-00-00-00-00-00-1A-04-05-7F-7E-04-04-01-07-00-03-00-7F-7F-7F-00-7F-00-00-05-00-00-00-00-00-7F-7F-7F-7F-7F-7F-7F-7F-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-A6-27-00-A8-17-00-A6-27-00-A8-17-00-88-28-00-A8-3E-00-00-00-00-00-A4-01-00-00-00-00-A4-01-00-00-00-00-A4-01-00-00-00-00-A4-01-00-00-00-00-A4-01-00-00-00-00-A4-01-FF-01-01-01-02-01-03-01-14-01-04-00-81-01-00-8E-01-01-10-00-00-FF-01-20-06-2E-01-16-05-1A-01-96-01-08-9A-01-02-21-00-15-01-00-05-06-02-02-04-02-01-03-00-00-00-00-00-00-00-00-00-02-00-00-0C-00-00-00-9C-D5-AF-FC-01-00".HexaToBytes()); }
/// <summary> /// Adds a compressable byte array. /// </summary> internal static void AddCompressableBytes(this ChecksumEncoder Writer, byte[] Value) { if (Value != null) { int length = Value.Length; if (false) { Writer.AddBoolean(true); Writer.AddCompressed(Value); } else { Writer.AddBoolean(false); Writer.AddRange(Value); } } else { Writer.AddBoolean(false); } }
/// <summary> /// Encodes this instance. /// </summary> internal void Encode(ChecksumEncoder Packet) { Packet.EncodeLogicData(CSV.Tables.Get(Gamefile.Location).GetWithInstanceID <LocationData>(2), 15); Packet.AddVInt(this.Players.Count); Packet.EncodeLogicData(null, 18); Packet.EncodeLogicData(CSV.Tables.Get(Gamefile.Arena).GetWithInstanceID <ArenaData>(1), 54); this.Players.ForEach(Player => { Packet.AddLogicLong(Player.HighID, Player.LowID); Packet.AddVInt(0); }); Packet.EncodeConstantSizeIntArray(new int[8], 8); { Packet.AddVInt(1); Packet.AddVInt(1); Packet.AddVInt(0); Packet.AddVInt(0); Packet.AddVInt(7); // EncodeLogicData (type=72) Packet.AddVInt(0); // EncodeLogicData (type=79) Packet.AddVInt(0); // EncodeLogicData (type=81) } Packet.AddBoolean(false); // isFinished Packet.AddBoolean(false); Packet.AddBoolean(false); Packet.AddBoolean(false); Packet.AddBoolean(false); // InExtraTime Packet.AddBoolean(false); // Live Packet.AddVInt(0); // Type Packet.AddVInt(0); Packet.AddVInt(0); // LogicGameObjectManager::encode(). { // Packet.EncodeConstantSizeIntArray(new int[7], 7); Packet.AddRange("00-B9-03-C7-7C-00-00-06-7A".HexaToBytes()); Packet.AddVInt(6); // Count Packet.AddRange("23-01-23-01-23-01-23-01-23-00-23-00".HexaToBytes()); Packet.AddRange("01-00-01-00-00-01".HexaToBytes()); // Is Enemy GameObject Packet.AddRange("05-00-05-01-05-02-05-03-05-04-05-05".HexaToBytes()); // ID Packet.AddRange("00-0D-A4-E2-01-9C-8E-03-00-00-7F-00-C0-7C-00-00-02-00-00-00-00-00".HexaToBytes()); Packet.AddRange("00-0D-AC-36-A4-65-00-00-7F-00-80-04-00-00-01-00-00-00-00-00".HexaToBytes()); Packet.AddRange("00-0D-AC-36-9C-8E-03-00-00-7F-00-C0-7C-00-00-01-00-00-00-00-00".HexaToBytes()); Packet.AddRange("00-0D-A4-E2-01-A4-65-00-00-7F-00-80-04-00-00-02-00-00-00-00-00".HexaToBytes()); Packet.AddRange("00-0D-A8-8C-01-B8-2E-00-00-7F-00-80-04-00-00-00-00-00-00-00".HexaToBytes()); Packet.AddRange("00-0C-00-00-05-00-00-00-00-00-7F-7F-7F-7F-7F-7F-7F-7F-00-00-00-00".HexaToBytes()); Packet.AddRange("00-0D-A8-8C-01-88-C5-03-00-00-7F-00-C0-7C-00-00-00-00-00-00-00".HexaToBytes()); Packet.AddRange("00-0D-04-07-7D-7E-01-04-05-06-01-00-00-7F-7F-00-01-04-00-00-00-00".HexaToBytes()); } Packet.AddRange("00-00-00-14-51-75-C3-AA-74-65-20-63-6F-6D-62-61-74-20-6D-69-72-6F-69-72-00-00-00-3A-50-61-72-74-69-63-69-70-65-7A-20-C3-A0-20-32-30-C2-A0-63-6F-6D-62-61-74-73-20-6D-69-72-6F-69-72-20-65-6E-20-6D-6F-64-65-20-31-63-31-2C-20-32-63-32-20-6F-75-20-64-C3-A9-66-69-00-00-00-08-73-63-2F-75-69-2E-73-63-00-00-00-16-71-75-65-73-74-5F-69-74-65-6D-5F-73-70-65-63-69-61-6C-5F-70-76-70-14-14-B8-12-00-00-01-00-00-00-1C-69-63-6F-6E-5F-71-75-65-73-74-5F-74-79-70-65-5F-73-70-65-63-69-61-6C-65-76-65-6E-74-01-05-00-14-94-01-00-00-00-00-11-00-00-00-00-05-00-00-00-00-00-7F-7F-7F-7F-7F-7F-7F-7F-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-B8-15-00-B8-15-00-B8-15-00-B8-15-00-A0-25-00-A0-25-00-00-00-00-00-00-00-00-A4-01-A4-01-00-00-00-00-00-00-00-00-A4-01-A4-01-00-00-00-00-00-00-00-00-A4-01-A4-01-00-00-00-00-00-00-00-00-A4-01-A4-01-00-00-00-00-00-00-00-00-A4-01-A4-01-00-00-00-00-00-00-00-00-A4-01-A4-01-00-FE-03-01-01-02-00-0E-00-8F-01-00-8E-01-00-04-00-0F-00-14-00-00-00-05-06-02-02-04-02-01-03-00-00-00-00-00-00-00-00".HexaToBytes()); }
/// <summary> /// Encodes this instance. /// </summary> public void Encode(ChecksumEncoder Stream, Player Player) { Stream.EncodeLogicData(this.LocationData, 15); Stream.WriteVInt(this.PlayerCount); Stream.EncodeLogicData(this.NpcData, 48); Stream.EncodeLogicData(this.ArenaData, 54); for (int I = 0; I < this.PlayerCount; I++) { Stream.WriteLogicLong(this.Players[I].HighId, this.Players[I].LowId); Stream.WriteVInt(0); } Stream.EncodeConstantSizeIntArray(new int[8], 8); { Stream.WriteVInt(1); Stream.WriteVInt(1); Stream.WriteVInt(0); Stream.WriteVInt(0); Stream.WriteVInt(7); // EncodeLogicData (type=72) Stream.WriteVInt(0); // EncodeLogicData (type=79) Stream.WriteVInt(0); // EncodeLogicData (type=81) } Stream.WriteBoolean(this.EndedCalled); Stream.WriteBoolean(this.EndedWithTimeOut); Stream.WriteBoolean(false); // ? Stream.WriteBoolean(false); // hasPlayerFinishedNpcLevel Stream.WriteBoolean(this.InOvertime); Stream.WriteBoolean(false); // Live Stream.WriteVInt(this.Type); Stream.WriteVInt(0); Stream.WriteVInt(0); { // LogicGameObjectManager::encode(). Stream.AddRange("00-B9-03-C7-7C-00-00-06-7A".HexaToBytes()); Stream.WriteVInt(6); // Count Stream.EncodeData(CsvFiles.Get(Gamefile.Buildings).GetWithInstanceId(1)); // PrincessTower Stream.EncodeData(CsvFiles.Get(Gamefile.Buildings).GetWithInstanceId(1)); // PrincessTower Stream.EncodeData(CsvFiles.Get(Gamefile.Buildings).GetWithInstanceId(1)); // PrincessTower Stream.EncodeData(CsvFiles.Get(Gamefile.Buildings).GetWithInstanceId(1)); // PrincessTower Stream.EncodeData(CsvFiles.Get(Gamefile.Buildings).GetWithInstanceId(0)); // KingTower Stream.EncodeData(CsvFiles.Get(Gamefile.Buildings).GetWithInstanceId(0)); // KingTower // Type (Enemy, etc...) Stream.WriteVInt(1); Stream.WriteVInt(0); Stream.WriteVInt(1); Stream.WriteVInt(0); Stream.WriteVInt(0); Stream.WriteVInt(1); // ID (Like 500xxxxxx for CoC) Stream.AddRange("05-00".HexaToBytes()); Stream.AddRange("05-01".HexaToBytes()); Stream.AddRange("05-02".HexaToBytes()); Stream.AddRange("05-03".HexaToBytes()); Stream.AddRange("05-04".HexaToBytes()); Stream.AddRange("05-05".HexaToBytes()); // LogicGameObject::encode(): vInt, Vector2, vInt // GameObjectType: // 0: LogicDeco // 1: LogicSpawnPoint // 2: LogicAreaEffectObject // 3: LogicProjectile // 4: LogicCharacter Stream.AddRange("00-0D-A4-E2-01-9C-8E-03-00-00-7F-00-C0-7C-00-00-02-00-00-00-00-00".HexaToBytes()); // LogicCharacter::encode Stream.AddRange("00-0D-AC-36-A4-65-00-00-7F-00-80-04-00-00-01-00-00-00-00-00".HexaToBytes()); // LogicCharacter::encode Stream.AddRange("00-0D-AC-36-9C-8E-03-00-00-7F-00-C0-7C-00-00-01-00-00-00-00-00".HexaToBytes()); // LogicCharacter::encode Stream.AddRange("00-0D-A4-E2-01-A4-65-00-00-7F-00-80-04-00-00-02-00-00-00-00-00".HexaToBytes()); // LogicCharacter::encode if (this.Players[1] == Player) { Stream.AddRange("00-0D-A8-8C-01-B8-2E-00-00-7F-00-80-04-00-00-00-00-00-00-00-00".HexaToBytes()); // LogicCharacter::encode Stream.AddRange("0C-00-00-A0-9A-0C-00-00-00-00-00-7F-7F-7F-7F-7F-7F-7F-7F-00-00-00-00".HexaToBytes()); // LogicSummoner::encode // LogicSummoner::encode Stream.AddRange("00-0D-A8-8C-01-88-C5-03-00-00-7F-00-C0-7C-00-00-00-00-00-00-00-00".HexaToBytes()); // LogicCharacter::encode Stream.WriteBoolean(true); // HAS DECK Stream.WriteBoolean(false); // ? Stream.WriteBoolean(true); // AI ENABLED ? if (true) { // If HAS DECK Stream.WriteVInt(4); { // ByteStreamHelper::writeConstantSizeIntArray(4) Stream.WriteVInt(6); Stream.WriteVInt(-1); Stream.WriteVInt(-4); Stream.WriteVInt(-1); } Stream.WriteVInt(4); { // Count Stream.WriteVInt(3); Stream.WriteVInt(4); Stream.WriteVInt(2); Stream.WriteVInt(7); } Stream.WriteVInt(0); { // Same, Is Count } Stream.WriteVInt(-1); Stream.WriteVInt(-1); Stream.WriteVInt(0); if (Globals.QuestsEnabled) { Stream.WriteVInt(0); // Count // LogicQuestManager::encode() } } Stream.WriteVInt(0); Stream.WriteVInt(0); // MsBeforeStartRegenMana Stream.WriteVInt(5); // Mana Stream.WriteVInt(0); Stream.WriteVInt(0); Stream.WriteVInt(0); { // LogicSpellAIBlackboard::encode Stream.WriteVInt(0); Stream.WriteVInt(0); } for (int I = 0; I < 8; I++) { Stream.WriteVInt(-1); } Stream.WriteBoolean(false); { // ? } Stream.WriteVInt(0); Stream.WriteVInt(0); Stream.WriteVInt(0); } else { Stream.AddRange("00-0D-A8-8C-01-B8-2E-00-00-7F-00-80-04-00-00-00-00-00-00-00-00".HexaToBytes()); // LogicCharacter::encode Stream.WriteBoolean(true); // HAS DECK Stream.WriteBoolean(false); // ? Stream.WriteBoolean(true); // AI ENABLED ? if (true) { // If HAS DECK Stream.WriteVInt(4); { // ByteStreamHelper::writeConstantSizeIntArray(4) Stream.WriteVInt(6); // 6 = SpellDeck[6] Stream.WriteVInt(-1); // 6 - 1 = SpellDeck[6 - 1] Stream.WriteVInt(-4); // 6 - 1 - 4 = SpellDeck[6 - 1 - 4] Stream.WriteVInt(-1); // 6 - 1 - 4 - 1 = = SpellDeck[6 - 1 - 4 - 1] } Stream.WriteVInt(4); { // Spell Queue Count Stream.WriteVInt(3); Stream.WriteVInt(4); Stream.WriteVInt(2); Stream.WriteVInt(7); } Stream.WriteVInt(0); { // Spell Queue 2 Count } Stream.WriteVInt(-1); Stream.WriteVInt(-1); Stream.WriteVInt(0); if (Globals.QuestsEnabled) { Stream.WriteVInt(0); // Count // LogicQuestManager::encode() } } Stream.WriteVInt(0); Stream.WriteVInt(0); // MsBeforeStartRegenMana Stream.WriteVInt(5); // Mana Stream.WriteVInt(0); Stream.WriteVInt(0); Stream.WriteVInt(0); { // LogicSpellAIBlackboard::encode Stream.WriteVInt(0); Stream.WriteVInt(0); } for (int I = 0; I < 8; I++) { Stream.WriteVInt(-1); } Stream.WriteBoolean(false); { // ? } Stream.WriteVInt(0); Stream.WriteVInt(0); Stream.WriteVInt(0); Stream.AddRange("00-0D-A8-8C-01-88-C5-03-00-00-7F-00-C0-7C-00-00-00-00-00-00-00-00".HexaToBytes()); // LogicCharacter::encode Stream.AddRange("0C-00-00-A0-9A-0C-00-00-00-00-00-7F-7F-7F-7F-7F-7F-7F-7F-00-00-00-00".HexaToBytes()); // LogicSummoner::encode } // -- COMPONENT -- Stream.AddRange("00-00-00-00-00-00-00-00".HexaToBytes()); Stream.AddRange("00-00-00-00-00-00-00-00".HexaToBytes()); Stream.AddRange("00-00-00-00-00-00-00-00".HexaToBytes()); Stream.AddRange("00-00-00-00-00-00-00-00".HexaToBytes()); Stream.AddRange("00-00-00-00-00-00-00-00".HexaToBytes()); Stream.AddRange("00-00-00-00-00-00-00-00".HexaToBytes()); // LogicHitpointComponent Stream.AddRange("B8-15-00".HexaToBytes()); Stream.AddRange("B8-15-00".HexaToBytes()); Stream.AddRange("B8-15-00".HexaToBytes()); Stream.AddRange("B8-15-00".HexaToBytes()); Stream.AddRange("A0-25-00".HexaToBytes()); Stream.AddRange("A0-25-00".HexaToBytes()); // LogicCharacterBuffComponent Stream.AddRange("00-00-00-00-00-00-00-A4-01-A4-01-00".HexaToBytes()); Stream.AddRange("00-00-00-00-00-00-00-A4-01-A4-01-00".HexaToBytes()); Stream.AddRange("00-00-00-00-00-00-00-A4-01-A4-01-00".HexaToBytes()); Stream.AddRange("00-00-00-00-00-00-00-A4-01-A4-01-00".HexaToBytes()); Stream.AddRange("00-00-00-00-00-00-00-A4-01-A4-01-00".HexaToBytes()); Stream.AddRange("00-00-00-00-00-00-00-A4-01-A4-01-00".HexaToBytes()); } for (int I = 0; I < 2; I++) { if (this.Players[I] == Player) { Stream.WriteBoolean(true); this.Decks[I].EncodeAttack(Stream); break; } Stream.WriteBoolean(false); } Stream.AddRange("00-00-05-06-02-02-04-02-01-03-00-00-00-00-00-00-00-00".HexaToBytes()); }