public CoCServer()
 {
     Clients = new List<CoCRemoteClient>();
     AvatarManager = new AvatarManager(this);
     DefaultVillage = new Village();
     DefaultVillage.FromJson(File.ReadAllText("default_village.json"));
 }
 public CoCRemoteClient(CoCServer server, Socket connection)
 {
     Connection = connection;
     Server = server;
     NetworkManager = new NetworkManagerAsync(connection, HandlePacketReceived, HandleReceicedPacketFailed);
     PacketHandlers = new Dictionary<ushort, PacketHandler>();
     Avatar = new Avatar();
     Home = new Village();
 }
        public CoCClient()
        {
            Fingerprint = new Fingerprint();
            Home = new Village();
            Avatar = new Avatar();
            Connection = new Socket(SocketType.Stream, ProtocolType.Tcp);
            PacketHandlers = new Dictionary<ushort, PacketHandler>();
            KeepAliveManager = new KeepAliveManager(this);
            PacketLogger = new PacketLogger()
            {
                LogConsole = false
            };

            LoginPacketHandlers.RegisterLoginPacketHandlers(this);
            InGamePacketHandlers.RegisterInGamePacketHandler(this);
        }
Exemple #4
0
        public CoCClient()
        {
            Fingerprint = new Fingerprint();
            Home = new Village();
            Avatar = new Avatar();
            Connection = new Socket(SocketType.Stream, ProtocolType.Tcp);
            DefaultPacketHandlers = new Dictionary<ushort, PacketHandler>();
            PacketHandlers = new Dictionary<ushort, PacketHandler>();
            KeepAliveManager = new KeepAliveManager(this);
            PacketLog = new PacketLog("packets.log")
            {
                AutoSave = true
            };
            PluginManager = new PluginManager(this);

            LoginPacketHandlers.RegisterLoginPacketHandlers(this);
            InGamePacketHandlers.RegisterInGamePacketHandler(this);
            PluginManager.LoadPlugins();
            PluginManager.EnablePlugins();
        }
Exemple #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Obstacle"/> class with
 /// the specified class.
 /// </summary>
 /// <param name="id">Sets the ID of this <see cref="Obstacle"/> class.</param>
 public Obstacle(int id, Village village)
     : base(id, village)
 {
     // Space
 }
Exemple #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Building"/> class with the specified
 /// <see cref="Village"/> instance and <see cref="BuildingData"/>.
 /// </summary>
 ///
 /// <param name="village">
 /// <see cref="Village"/> instance which owns this <see cref="Building"/>.
 /// </param>
 ///
 /// <param name="data"><see cref="BuildingData"/> representing the data of the <see cref="Building"/>.</param>
 ///
 /// <exception cref="ArgumentNullException"><paramref name="village"/> is null.</exception>
 /// <exception cref="ArgumentNullException"><paramref name="data"/> is null.</exception>
 public Building(Village village, BuildingData data) : base(village, data)
 {
     SetComponents();
 }
Exemple #7
0
 /// <summary>
 /// Initailizes a new instance of the <see cref="Building"/> class with the specified
 /// ID and level.
 /// </summary>
 /// <param name="id">Sets the ID of this <see cref="Building"/> class.</param>
 /// <param name="level">Sets the Level of this <see cref="Building"/> class</param>
 public Building(int id, int level, Village village)
     : base(id, village)
 {
     Level = level;
 }
        public void ReadPacket(PacketReader reader)
        {
            LastVisit = TimeSpan.FromSeconds(reader.ReadInt32());

            //Unknown1 = reader.ReadInt();
            reader.Seek(4, SeekOrigin.Current);

            TimeStamp = reader.ReadInt64();
            UserID = reader.ReadInt64();
            ShieldDuration = TimeSpan.FromSeconds(reader.ReadInt32());

            //Unknown2 = reader.ReadLong();
            reader.Seek(8, SeekOrigin.Current);
            Compressed = reader.ReadBoolean();
            Home = new Village();
            Home.ReadFromPacketReader(reader);

            //Unknown4 = reader.ReadInt();
            reader.Seek(4, SeekOrigin.Current);

            //UserID2 = reader.ReadLong();
            //UserID3 = reader.ReadLong();
            reader.Seek(16, SeekOrigin.Current);

            if ((HasClan = reader.ReadBoolean()))
            {
                Clan = new Clan()
                {
                    ID = reader.ReadInt64(),
                    Name = reader.ReadString(),
                    Badge = reader.ReadInt32(),
                };
                Level = reader.ReadInt32(); // member status?
                Level = reader.ReadInt32();
            }

            if (reader.ReadBoolean())
                reader.Seek(8, SeekOrigin.Current);
            if (reader.ReadBoolean())
                reader.Seek(8, SeekOrigin.Current);

            //Unknown5 = (byte)reader.ReadByte();
            //Unknown6 = reader.ReadInt();
            //Unknown7 = reader.ReadLong();
            //Unknown8 = reader.ReadLong();
            reader.Seek(4, SeekOrigin.Current);

            AllianceCastleLevel = reader.ReadInt32();
            AllianceCastleCapacity = reader.ReadInt32();
            AllianceCastleUsed = reader.ReadInt32();
            TownHallLevel = reader.ReadInt32();
            Username = reader.ReadString();
            FacebookID = reader.ReadInt32();
            Level = reader.ReadInt32();
            Experience = reader.ReadInt32();
            Gems = reader.ReadInt32();
            //Gems1 = reader.ReadInt();

            //Unknown9 = reader.ReadLong();
            reader.Seek(12, SeekOrigin.Current);

            TrophiesCount = reader.ReadInt32();
            AttackWon = reader.ReadInt32();
            AttackLost = reader.ReadInt32();
            DefenceWon = reader.ReadInt32();
            DefenceLost = reader.ReadInt32();

            reader.Seek(21, SeekOrigin.Current);

            HasName = reader.ReadBoolean();

            reader.Seek(16, SeekOrigin.Current);
        }
Exemple #9
0
 /// <summary>
 ///
 /// </summary>
 public VillageObject(Village village)
 {
     ID      = -1;
     Village = village;
 }
Exemple #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Decoration"/> class with
 /// the specified ID.
 /// </summary>
 /// <param name="id">Sets the ID of this <see cref="Decoration"/> class.</param>
 public Decoration(int id, Village village)
     : base(id, village)
 {
     // Space
 }
Exemple #11
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Obstacle"/> class with
 /// the specified class.
 /// </summary>
 /// <param name="id">Sets the ID of this <see cref="Obstacle"/> class.</param>
 public Obstacle(int id, Village village)
     : base(id, village)
 {
     // Space
 }
        public void ReadPacket(PacketReader reader)
        {
            var offset = 0x2A;
            LastVisit = TimeSpan.FromSeconds(reader.ReadInt32());
            Unknown1 = reader.ReadInt32();
            Timestamp = DateTimeConverter.FromUnixTimestamp(reader.ReadInt32());
            Unknown2 = reader.ReadInt32();
            UserID = reader.ReadInt64();
            ShieldDuration = TimeSpan.FromSeconds(reader.ReadInt32());
            Unknown3 = reader.ReadInt32();
            Unknown4 = reader.ReadInt32();
            Compressed = reader.ReadBoolean();
            Home = new Village();
            Home.Read(reader);

            Avatar = new Avatar();
            // Seems like a whole object
            Unknown6 = reader.ReadInt32();
            UserID1 = reader.ReadInt64();
            UserID2 = reader.ReadInt64();
            Avatar.ID = UserID1;

            switch (reader.ReadByte())
            {
                case 0:
                    break;

                case 1:
                    Avatar.Clan = new Clan();
                    Avatar.Clan.ID = reader.ReadInt64();
                    Avatar.Clan.Name = reader.ReadString();
                    Avatar.Clan.Badge = reader.ReadInt32();
                    reader.ReadInt32();
                    Avatar.Clan.Level = reader.ReadInt32();
                    offset += 1;
                    break;

                case 2: // clanless but clan castle built?
                    var lel = reader.ReadInt64();
                    break;
            }

            if (Unknown7 = reader.ReadBoolean())
                Unknown8 = reader.ReadInt64();

            if (Unknown9 = reader.ReadBoolean())
                Unknown10 = reader.ReadInt64();

            reader.Seek(offset, SeekOrigin.Current);
            Unknown11 = reader.ReadInt32();
            AllianceCastleLevel = reader.ReadInt32(); // -1 if not constructed
            AllianceCastleUnitCapacity = reader.ReadInt32();
            AllianceCastleUnitCount = reader.ReadInt32();
            Avatar.TownHallLevel = reader.ReadInt32();
            Avatar.Username = reader.ReadString();
            FacebookID = reader.ReadString();
            Avatar.Level = reader.ReadInt32();
            Avatar.Experience = reader.ReadInt32();
            Avatar.Gems = reader.ReadInt32();
            Gems1 = reader.ReadInt32();
            Unknown14 = reader.ReadInt32();
            Unknown15 = reader.ReadInt32();
            Avatar.Trophies = reader.ReadInt32();
            Avatar.AttacksWon = reader.ReadInt32();
            Avatar.AttacksLost = reader.ReadInt32();
            Avatar.DefencesWon = reader.ReadInt32();
            Avatar.DefencesLost = reader.ReadInt32();
            Unknown16 = reader.ReadInt32();
            Unknown17 = reader.ReadInt32();
            Unknown18 = reader.ReadInt32();
            if (Unknown19 = reader.ReadBoolean())
                Unknown20 = reader.ReadInt64();
            Unknown21 = reader.ReadByte();
            Unknown22 = reader.ReadInt32();
            Unknown23 = reader.ReadInt32();
            Unknown24 = reader.ReadInt32();
            Unknown25 = reader.ReadInt32();

            var count1 = reader.ReadInt32();
            for (int i = 0; i < count1; i++)
            {
                var id = reader.ReadInt32(); // resource id from resources.csv
                var capacity = reader.ReadInt32();
            }

            var count2 = reader.ReadInt32();
            for (int i = 0; i < count2; i++)
            {
                var id = reader.ReadInt32(); // resource id from resources.csv
                var amount = reader.ReadInt32();
            }

            var count3 = reader.ReadInt32();
            for (int i = 0; i < count3; i++)
            {
                var id = reader.ReadInt32(); // unit id from characters.csv
                var amount = reader.ReadInt32();
            }

            var count4 = reader.ReadInt32();
            for (int i = 0; i < count4; i++)
            {
                var id = reader.ReadInt32(); // spell id from spells.csv
                var amount = reader.ReadInt32();
            }

            var count5 = reader.ReadInt32();
            for (int i = 0; i < count5; i++)
            {
                var id = reader.ReadInt32(); // unit id from characters.csv
                var level = reader.ReadInt32();
            }

            var count6 = reader.ReadInt32();
            for (int i = 0; i < count6; i++)
            {
                var id = reader.ReadInt32(); // spell id from spells.csv
                var level = reader.ReadInt32();
            }

            var count7 = reader.ReadInt32();
            for (int i = 0; i < count7; i++)
            {
                var id = reader.ReadInt32(); // hero id from heros.csv
                var level = reader.ReadInt32();
            }

            var count8 = reader.ReadInt32();
            for (int i = 0; i < count8; i++)
            {
                var id = reader.ReadInt32(); // hero id from heros.csv
                var health = reader.ReadInt32();
            }

            var count9 = reader.ReadInt32();
            for (int i = 0; i < count9; i++)
            {
                var id = reader.ReadInt32(); // hero id from heros.csv
                var state = reader.ReadInt32();
            }

            var count10 = reader.ReadInt32();
            for (int i = 0; i < count10; i++)
            {
                var id = reader.ReadInt32(); // unit id from characters.csv
                var amount = reader.ReadInt32();
                var level = reader.ReadInt32();
            }

            var count11 = reader.ReadInt32();
            for (int i = 0; i < count11; i++)
            {
                var id = reader.ReadInt32(); // mission id from missions.csv
            }

            var count12 = reader.ReadInt32();
            for (int i = 0; i < count12; i++)
            {
                var id = reader.ReadInt32(); // achievement id from achievements.csv
            }

            var count13 = reader.ReadInt32();
            for (int i = 0; i < count13; i++)
            {
                var id = reader.ReadInt32(); // achievement id from achievements.csv
                var progress = reader.ReadInt32();
            }

            var count14 = reader.ReadInt32();
            for (int i = 0; i < count14; i++)
            {
                var id = reader.ReadInt32(); // npc id from npcs.csv
                var stars = reader.ReadInt32();
            }

            var count15 = reader.ReadInt32();
            for (int i = 0; i < count15; i++)
            {
                var id = reader.ReadInt32(); // npc id from npcs.csv
                var gold = reader.ReadInt32();
            }

            var count16 = reader.ReadInt32();
            for (int i = 0; i < count16; i++)
            {
                var id = reader.ReadInt32(); // npc id from npcs.csv
                var elixir = reader.ReadInt32();
            }

            Unknown26 = reader.ReadInt32();
            Unknown27 = reader.ReadInt32();
            Unknown28 = reader.ReadInt32();
        }
Exemple #13
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="id"></param>
 public VillageObject(int id, Village village)
 {
     ID = id;
     Village = village;
 }
Exemple #14
0
 /// <summary>
 /// 
 /// </summary>
 public VillageObject(Village village)
 {
     ID = -1;
     Village = village;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="Obstacle"/> class with the specified
 /// <see cref="Village"/> instance and <see cref="ObstacleData"/>.
 /// </summary>
 ///
 /// <param name="village">
 /// <see cref="Village"/> instance which owns this <see cref="Obstacle"/>.
 /// </param>
 ///
 /// <param name="data"><see cref="ObstacleData"/> representing the data of the <see cref="Obstacle"/>.</param>
 ///
 /// <exception cref="ArgumentNullException"><paramref name="village"/> is null.</exception>
 /// <exception cref="ArgumentNullException"><paramref name="data"/> is null.</exception>
 public Trap(Village village, TrapData data) : base(village, data)
 {
     // Space
 }
        public void ReadPacket(PacketReader reader)
        {
            Unknown1 = reader.ReadInt32();
            Unknown2 = reader.ReadInt32();
            UserID = reader.ReadInt64();
            Shield = TimeSpan.FromSeconds(reader.ReadInt32());
            Unknown3 = reader.ReadInt32();
            Unknown4 = reader.ReadInt32();
            Compressed = reader.ReadBoolean();
            Home = new Village();
            Home.Read(reader);
            Unknown5 = reader.ReadInt32();

            UserID1 = reader.ReadInt64();
            UserID2 = reader.ReadInt64();

            var offset = 0x2A;
            bool isClan = reader.ReadBoolean();
            if (isClan)
            {
                Clan = new Clan();
                Clan.ID = reader.ReadInt64();
                Clan.Name = reader.ReadString();
                Clan.Badge = reader.ReadInt32();
                Unknown6 = reader.ReadInt32();
                Clan.Level = reader.ReadInt32();
                offset += 1;
            }

            bool Unknown7 = reader.ReadBoolean();
            if (Unknown7)
                Unknown8 = reader.ReadInt64();

            bool Unknown9 = reader.ReadBoolean();
            if (Unknown9)
                Unknown10 = reader.ReadInt64();

            reader.Seek(offset, SeekOrigin.Current);
            Unknown11 = reader.ReadInt32();
            Unknown12 = reader.ReadInt32();
            Unknown13 = reader.ReadInt32();

            ClanUnits = reader.ReadInt32();
            TownHall = reader.ReadInt32();
            Username = reader.ReadString();
            FacebookID = reader.ReadString();
            Stars = reader.ReadInt32();
            Points = reader.ReadInt32();

            Unknown14 = reader.ReadInt32();
            Unknown15 = reader.ReadInt32();
            Unknown16 = reader.ReadInt32();
            Unknown17 = reader.ReadInt32();

            Trophies = reader.ReadInt32();
            AttacksWon = reader.ReadInt32();
            Unknown18 = reader.ReadInt32();
            DefenseWon = reader.ReadInt32();
            Unknown19 = reader.ReadInt32();

            Unknown20 = reader.ReadInt32();
            Unknown21 = reader.ReadInt32();
            Unknown22 = reader.ReadInt32();

            bool Unknown23 = reader.ReadBoolean();
            if (Unknown23)
                Unknown24 = reader.ReadInt64();

            Unknown25 = reader.ReadByte();
            Unknown26 = reader.ReadInt32();
            Unknown27 = reader.ReadInt32();
            Unknown28 = reader.ReadInt32();
            Unknown29 = reader.ReadInt32();

            var count = reader.ReadInt32(); //storage
            for (int i = 0; i < count; i++)
            {
                var id = reader.ReadInt32();
                var capacity = reader.ReadInt32();
            }

            count = reader.ReadInt32(); //resources
            for (int i = 0; i < count; i++)
            {
                var id = reader.ReadInt32();
                var capacity = reader.ReadInt32();
            }

            count = reader.ReadInt32(); //units
            for (int i = 0; i < count; i++)
            {
                var id = reader.ReadInt32();
                var capacity = reader.ReadInt32();
            }

            count = reader.ReadInt32(); //spells
            for (int i = 0; i < count; i++)
            {
                var id = reader.ReadInt32();
                var capacity = reader.ReadInt32();
            }

            count = reader.ReadInt32(); //unit_upgrades
            for (int i = 0; i < count; i++)
            {
                var id = reader.ReadInt32();
                var capacity = reader.ReadInt32();
            }

            count = reader.ReadInt32(); //spell_upgrades
            for (int i = 0; i < count; i++)
            {
                var id = reader.ReadInt32();
                var capacity = reader.ReadInt32();
            }

            count = reader.ReadInt32(); //hero_upgrades
            for (int i = 0; i < count; i++)
            {
                var id = reader.ReadInt32();
                var capacity = reader.ReadInt32();
            }

            count = reader.ReadInt32(); //hero_health
            for (int i = 0; i < count; i++)
            {
                var id = reader.ReadInt32();
                var capacity = reader.ReadInt32();
            }

            count = reader.ReadInt32(); //hero_state
            for (int i = 0; i < count; i++)
            {
                var id = reader.ReadInt32();
                var capacity = reader.ReadInt32();
            }

            count = reader.ReadInt32(); //alliance_units
            for (int i = 0; i < count; i++)
            {
                var id = reader.ReadInt32();
                var capacity = reader.ReadInt32();
                var level = reader.ReadInt32();
            }

            // more (needed?) values...
        }
Exemple #17
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Decoration"/> class with
 /// the specified ID.
 /// </summary>
 /// <param name="id">Sets the ID of this <see cref="Decoration"/> class.</param>
 public Decoration(int id, Village village)
     : base(id, village)
 {
     // Space
 }
Exemple #18
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="id"></param>
 public VillageObject(int id, Village village)
 {
     ID      = id;
     Village = village;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="Buildable{TCsvData}"/> class with the specified
 /// <see cref="Village"/> instance and <typeparamref name="TCsvData"/>.
 /// </summary>
 ///
 /// <param name="village">
 /// <see cref="Village"/> instance which owns this <see cref="Buildable{TCsvData}"/>.
 /// </param>
 ///
 /// <param name="data"><typeparamref name="TCsvData"/> representing the data of the <see cref="Buildable{TCsvData}"/>.</param>
 ///
 /// <exception cref="ArgumentNullException"><paramref name="village"/> is null.</exception>
 /// <exception cref="ArgumentNullException"><paramref name="data"/> is null.</exception>
 protected Buildable(Village village, TCsvData data) : base(village, data)
 {
     _upgradeLevel = -1;
     _timer        = new TickTimer();
 }
Exemple #20
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Decoration"/> class with the specified
 /// <see cref="Village"/> instance and <see cref="DecorationData"/>.
 /// </summary>
 ///
 /// <param name="village">
 /// <see cref="Village"/> instance which owns this <see cref="Decoration"/>.
 /// </param>
 ///
 /// <param name="data"><see cref="DecorationData"/> representing the data of the <see cref="Decoration"/>.</param>
 ///
 /// <exception cref="ArgumentNullException"><paramref name="village"/> is null.</exception>
 /// <exception cref="ArgumentNullException"><paramref name="data"/> is null.</exception>
 public Decoration(Village village, DecorationData data) : base(village, data)
 {
     // Space
 }
Exemple #21
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Obstacle"/> class with the specified
 /// <see cref="Village"/> instance and <see cref="ObstacleData"/>.
 /// </summary>
 ///
 /// <param name="village">
 /// <see cref="Village"/> instance which owns this <see cref="Obstacle"/>.
 /// </param>
 ///
 /// <param name="data"><see cref="ObstacleData"/> representing the data of the <see cref="Obstacle"/>.</param>
 ///
 /// <exception cref="ArgumentNullException"><paramref name="village"/> is null.</exception>
 /// <exception cref="ArgumentNullException"><paramref name="data"/> is null.</exception>
 public Obstacle(Village village, ObstacleData data) : base(village, data)
 {
     _timer = new TickTimer();
 }
Exemple #22
0
 /// <summary>
 /// Initailizes a new instance of the <see cref="Trap"/> class with the specified
 /// ID and level.
 /// </summary>
 /// <param name="id">Sets the ID of this <see cref="Trap"/> class.</param>
 /// <param name="level">Sets the ID of this <see cref="Trap"/> class.</param>
 public Trap(int id, int level, Village village)
     : base(id, village)
 {
     Level = level;
 }
Exemple #23
0
 /// <summary>
 /// Initailizes a new instance of the <see cref="Building"/> class with the specified
 /// ID and level.
 /// </summary>
 /// <param name="id">Sets the ID of this <see cref="Building"/> class.</param>
 /// <param name="level">Sets the Level of this <see cref="Building"/> class</param>
 public Building(int id, int level, Village village)
     : base(id, village)
 {
     Level = level;
 }
Exemple #24
0
 /// <summary>
 /// Initailizes a new instance of the <see cref="Trap"/> class with the specified
 /// ID and level.
 /// </summary>
 /// <param name="id">Sets the ID of this <see cref="Trap"/> class.</param>
 /// <param name="level">Sets the ID of this <see cref="Trap"/> class.</param>
 public Trap(int id, int level, Village village)
     : base(id, village)
 {
     Level = level;
 }
Exemple #25
0
        public int Unknown4; // 0

        /// <summary>
        /// Reads the <see cref="VillageData"/> from the specified <see cref="MessageReader"/>.
        /// </summary>
        /// <param name="reader">
        /// <see cref="MessageReader"/> that will be used to read the <see cref="VillageData"/>.
        /// </param>
        /// <exception cref="NotImplementedException">Compressed set to false.</exception>
        /// <exception cref="InvalidMessageException">Home data array is null.</exception>
        public void Read(MessageReader reader)
        {
            if (!Compressed)
                throw new NotImplementedException("Uncompressed Village definition is not implemented.");

            Unknown1 = reader.ReadInt32(); // 0
            UserID = reader.ReadInt64();
            ShieldDuration = TimeSpan.FromSeconds(reader.ReadInt32());
            Unknown2 = reader.ReadInt32(); // 1200
            Unknown3 = reader.ReadInt32(); // 60
            Compressed = reader.ReadBoolean();

            var homeData = reader.ReadBytes();
            if (homeData == null)
                throw new InvalidMessageException("No data was provided about Village.");

            using (var br = new BinaryReader(new MemoryStream(homeData))) // little endian
            {
                var decompressedLength = br.ReadInt32();
                var compressedHome = br.ReadBytes(homeData.Length - 4); // -4 to remove the decompressedLength bytes read
                var homeJson = ZlibStream.UncompressString(compressedHome);
                Home = Village.FromJson(homeJson);
            }

            Unknown4 = reader.ReadInt32();
        }