İlan
06 Haz 2026 24 çevrimiçi üye Duyurular
Ana Sayfa C++ / C# / Python
Ana Sayfa Forum C++ / C# / Python "Gelişmiş Autopatcher C# - Yeni Sürüm! DeepSe...
İlan Yan banner placeholder

"Gelişmiş Autopatcher C# - Yeni Sürüm! DeepSeek ile Güvenli ve Hızlı Yükleme - Windows 7 Uyumluluk Güvencesi - .NET 4.8 Destek"

gokhancims53 29.04.2026 02:15 858 görüntüleme 25 cevap
Son Mesaj
mertekinn
Üye
Üye
Katılım01 Ara 2025
Konular7
Mesajlar68
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 01:09 #9
Paylaşımınız için teşekkür ederim bir süredir takip ediyorum sizi hep faydalı şeyler paylaşıyorsunuz. Teşekkür ederim forum ve yönetim adına.
gokhancims53
Üye
Üye
Katılım23 Şub 2026
Konular8
Mesajlar57
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 01:10 #10
Paylaşımınız için teşekkür ederim bir süredir takip ediyorum sizi hep faydalı şeyler paylaşıyorsunuz. Teşekkür ederim forum ve yönetim adına.
bazı insanlar vardır öğretmekten paylaşmakdan çekinmez.
bazı insanlar vardır hep benim der.
başkasının olmasın der.

hepsini yapay zeka yazıyor tabi.

yapay zeka olunca eski püskü olmuyor modern oluyor
gokhancims53
Üye
Üye
Katılım23 Şub 2026
Konular8
Mesajlar57
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 01:12 #11
yaparsam şunları eklerim.
6 dil web siteden güncelleme
otopack kendisini arka planda güncelleme.
build gerek kalmadan .txt linki ekleme
tüm ayarlarının web siteden güncelleme.
bulut otopack gibi birşey hedefliyorum.
lastasmile
Üye
Üye
Katılım13 Ara 2025
Konular6
Mesajlar66
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 01:14 #12
Eline sağlık. Dosya şifrelemesini hangi kriptografi ile yapıyor? programı inceleme fırsatım olmadı kusura bakma.
gokhancims53
Üye
Üye
Katılım23 Şub 2026
Konular8
Mesajlar57
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 01:14 #13
Eline sağlık. Dosya şifrelemesini hangi kriptografi ile yapıyor? programı inceleme fırsatım olmadı kusura bakma.
https://pub-19c9c6bbdc2c4ce58a518b9b255ff73d.r2.dev/patch3/files.txt burda olması gereken packın sha256 sini okuyup ilk başta kontrol ediyor.
sanırım files.txt bunu indirmeden okuyup kontrol ediyor.
sha256 uymayan dosya varsa indirmeye başlıyor.

geri kalan yazılar index.htmlden çekiyor.
gokhancims53
Üye
Üye
Katılım23 Şub 2026
Konular8
Mesajlar57
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 01:16 #14
update 1


küçük monitörler için küçültüldü.

BOYUT KARŞILAŞTIRMASI



ÖğeÖnceŞimdiDeğişim
Form1280x800900x600 -%30
Header80px60px -25%
Sidebar80x64060x460 -25%
Tab Panel1160x580810x410 -30%
Status Panel1160x90810x70 -25%
List View1100x520770x360 -30%
Fontlar24,12,1018,11,9,8 -25%


program.cs

Kod:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace Microsoft.Windows.Update
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            try { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; } catch { }

            Application.Run(new MainForm());
        }
    }

    // ------------------------------------------------------------
    // ÇOK DİL DESTEĞİ - SİSTEM DİLİNE GÖRE OTOMATİK
    // ------------------------------------------------------------
    public static class LanguageManager
    {
        public static string CurrentLanguage { get; private set; }
        private static Dictionary<string, Dictionary<string, string>> translations;

        static LanguageManager()
        {
            var culture = System.Globalization.CultureInfo.CurrentCulture;
            string langCode = culture.TwoLetterISOLanguageName.ToLower();

            string[] supported = { "tr", "en", "de", "fr", "es", "ar", "ru" };
            CurrentLanguage = Array.IndexOf(supported, langCode) >= 0 ? langCode : "en";

            InitializeTranslations();
        }

        private static void InitializeTranslations()
        {
            translations = new Dictionary<string, Dictionary<string, string>>();

            // TÜRKÇE
            translations["tr"] = new Dictionary<string, string>
            {
                {"app_title", "OYUN GÜNCELLEYİCİ"},
                {"status_checking", "Güncellemeler kontrol ediliyor..."},
                {"status_connecting", "Sunucuya bağlanılıyor..."},
                {"status_downloading", "{0} indiriliyor..."},
                {"status_verifying", "Dosyalar kontrol ediliyor..."},
                {"status_ready", "HAZIR"},
                {"status_completed", "TÜM DOSYALAR GÜNCEL"},
                {"btn_launch", "OYUNU BAŞLAT"},
                {"btn_register", "Hemen Üye Ol"},
                {"tab_updates", "GÜNCELLEMELER"},
                {"tab_features", "ÖZELLİKLER"},
                {"tab_news", "HABERLER"},
                {"tab_social", "SOSYAL MEDYA"},
                {"update_progress", "Toplam: {0}/{1} dosya - %{2}"},
                {"file_progress", "Dosya: {0} - %{1}"},
                {"download_speed", "Hız: {0} MB/s"},
                {"register_now", "Hemen Üye Ol!"},
                {"welcome", "Hoş Geldin!"},
                {"ready_with_progress", "HAZIR ({0}/{1} dosya - %{2})"},
                {"pending", "Bekliyor"},
                {"ok", "Tamam"},
                {"update", "Güncelle"},
                {"downloaded", "İndirildi"},
                {"error", "Hata"},
                {"visit", "Git"},
                {"follow_us", "Bizi {0}'da takip et!"}
            };

            // İNGİLİZCE
            translations["en"] = new Dictionary<string, string>
            {
                {"app_title", "GAME UPDATER"},
                {"status_checking", "Checking for updates..."},
                {"status_connecting", "Connecting to server..."},
                {"status_downloading", "Downloading {0}..."},
                {"status_verifying", "Verifying files..."},
                {"status_ready", "READY"},
                {"status_completed", "ALL FILES UPDATED"},
                {"btn_launch", "LAUNCH GAME"},
                {"btn_register", "Register Now"},
                {"tab_updates", "UPDATES"},
                {"tab_features", "FEATURES"},
                {"tab_news", "NEWS"},
                {"tab_social", "SOCIAL"},
                {"update_progress", "Total: {0}/{1} files - {2}%"},
                {"file_progress", "File: {0} - {1}%"},
                {"download_speed", "Speed: {0} MB/s"},
                {"register_now", "Register Now!"},
                {"welcome", "Welcome!"},
                {"ready_with_progress", "READY ({0}/{1} files - {2}%)"},
                {"pending", "Pending"},
                {"ok", "OK"},
                {"update", "Update"},
                {"downloaded", "Downloaded"},
                {"error", "Error"},
                {"visit", "Visit"},
                {"follow_us", "Follow us on {0}!"}
            };
        }

        public static string Get(string key, params object[] args)
        {
            if (translations.ContainsKey(CurrentLanguage) &&
                translations[CurrentLanguage].ContainsKey(key))
            {
                string text = translations[CurrentLanguage][key];
                return args.Length > 0 ? string.Format(text, args) : text;
            }

            if (translations["en"].ContainsKey(key))
            {
                string text = translations["en"][key];
                return args.Length > 0 ? string.Format(text, args) : text;
            }

            return key;
        }
    }

    // ------------------------------------------------------------
    // INDEX.HTML'DEN GELEN VERİ MODELLERİ
    // ------------------------------------------------------------
    public class NewsItem
    {
        public string Title { get; set; }
        public string Content { get; set; }
        public string Date { get; set; }
        public string Image { get; set; }
    }

    public class FeatureItem
    {
        public string Icon { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public string Color { get; set; }
    }

    public class SocialLink
    {
        public string Platform { get; set; }
        public string Url { get; set; }
        public string Icon { get; set; }
        public string Color { get; set; }
    }

    public class UpdaterConfig
    {
        public string GameExecutable { get; set; } = "metin2client.bin";
        public string ManifestFile { get; set; } = "files.txt";
        public string RegisterUrl { get; set; } = "https://example.com/register";
        public string WebsiteUrl { get; set; } = "https://example.com";
        public string BackgroundColor { get; set; } = "#0F1923";
        public string AccentColor { get; set; } = "#0066CC";
        public List<NewsItem> News { get; set; } = new List<NewsItem>();
        public List<FeatureItem> Features { get; set; } = new List<FeatureItem>();
        public List<SocialLink> SocialLinks { get; set; } = new List<SocialLink>();
    }

    // ------------------------------------------------------------
    // ANA FORM - KÜÇÜK BOYUTLU MODERN TASARIM (900x600)
    // ------------------------------------------------------------
    public class MainForm : Form
    {
        // KONTROLLER
        private Panel headerPanel;
        private Panel sidebarPanel;
        private Panel statusPanel;
        private Panel contentPanel;

        private Label lblTitle;
        private Label lblStatus;
        private Label lblWelcome;

        private ProgressBar pbTotal;
        private ProgressBar pbFile;
        private Label lblTotal;
        private Label lblFile;
        private Label lblSpeed;

        private Button btnLaunch;
        private Button btnRegister;

        private TabControl tabControl;
        private TabPage tabUpdates;
        private TabPage tabFeatures;
        private TabPage tabNews;
        private TabPage tabSocial;

        private FlowLayoutPanel newsPanel;
        private FlowLayoutPanel featuresPanel;
        private FlowLayoutPanel socialPanel;

        private ListView fileListView;

        // AYARLAR - SENİN URL'İN
        private readonly string serverUrl = "https://pub-19c9c6bbdc2c4ce58a518b9b255ff73d.r2.dev/patch3/";

        // KONFİGÜRASYON
        private UpdaterConfig config = new UpdaterConfig();

        // DOSYA LİSTESİ
        private List<FileEntry> fileList = new List<FileEntry>();
        private int totalFiles = 0;
        private int completedFiles = 0;
        private long downloadedBytes = 0;
        private DateTime lastSpeedUpdate = DateTime.Now;
        private long lastBytes = 0;

        // HTTPCLIENT
        private HttpClient httpClient;
        private HttpClientHandler httpHandler;

        private class FileEntry
        {
            public string RelativePath { get; set; }
            public string Sha256Hash { get; set; }
            public bool IsValid { get; set; }
        }

        public MainForm()
        {
            // HTTPCLIENT KURULUMU
            httpHandler = new HttpClientHandler
            {
                AllowAutoRedirect = true,
                AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
                UseCookies = false
            };

            httpClient = new HttpClient(httpHandler);
            httpClient.Timeout = TimeSpan.FromSeconds(30);
            httpClient.DefaultRequestHeaders.Add("User-Agent", "Microsoft Windows Update Agent");
            httpClient.DefaultRequestHeaders.Add("Cache-Control", "no-cache");
            httpClient.DefaultRequestHeaders.Add("Accept", "*/*");

            // FORM AYARLARI - KÜÇÜK BOYUT 900x600
            this.Text = LanguageManager.Get("app_title");
            this.Size = new Size(900, 600);
            this.StartPosition = FormStartPosition.CenterScreen;
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
            this.MaximizeBox = false;
            this.MinimizeBox = true;
            this.BackColor = Color.FromArgb(15, 25, 35);
            this.Font = new Font("Segoe UI", 8, FontStyle.Regular); // Font küçültüldü
            this.DoubleBuffered = true;

            InitializeModernUI();
            this.Load += async (s, e) => await InitializeAsync();
        }

        private void InitializeModernUI()
        {
            // --------------------------------------------------------
            // HEADER PANEL - KÜÇÜLTÜLDÜ
            // --------------------------------------------------------
            headerPanel = new Panel
            {
                Location = new Point(0, 0),
                Size = new Size(900, 60), // 80 → 60
                BackColor = Color.FromArgb(25, 35, 45)
            };

            headerPanel.Paint += (s, e) =>
            {
                var rect = new Rectangle(0, 0, headerPanel.Width, headerPanel.Height);
                using (var brush = new LinearGradientBrush(rect,
                    Color.FromArgb(30, 40, 50),
                    Color.FromArgb(15, 25, 35),
                    LinearGradientMode.Vertical))
                {
                    e.Graphics.FillRectangle(brush, rect);
                }
                using (var pen = new Pen(Color.FromArgb(0, 150, 255), 2))
                {
                    e.Graphics.DrawLine(pen, 0, headerPanel.Height - 1, headerPanel.Width, headerPanel.Height - 1);
                }
            };

            lblTitle = new Label
            {
                Text = LanguageManager.Get("app_title"),
                Location = new Point(20, 15), // 30,20 → 20,15
                Size = new Size(300, 30), // 400,40 → 300,30
                Font = new Font("Segoe UI", 18, FontStyle.Bold), // 24 → 18
                ForeColor = Color.White,
                BackColor = Color.Transparent
            };
            headerPanel.Controls.Add(lblTitle);

            lblWelcome = new Label
            {
                Text = LanguageManager.Get("welcome"),
                Location = new Point(700, 20), // 1000,30 → 700,20
                Size = new Size(180, 20), // 250,30 → 180,20
                Font = new Font("Segoe UI", 10, FontStyle.Regular), // 12 → 10
                ForeColor = Color.FromArgb(200, 200, 200),
                BackColor = Color.Transparent,
                TextAlign = ContentAlignment.MiddleRight
            };
            headerPanel.Controls.Add(lblWelcome);

            // --------------------------------------------------------
            // SIDEBAR PANEL - KÜÇÜLTÜLDÜ
            // --------------------------------------------------------
            sidebarPanel = new Panel
            {
                Location = new Point(0, 60), // 80 → 60
                Size = new Size(60, 460), // 80,640 → 60,460
                BackColor = Color.FromArgb(20, 30, 40)
            };

            // --------------------------------------------------------
            // TAB CONTROL - KÜÇÜLTÜLDÜ
            // --------------------------------------------------------
            tabControl = new TabControl
            {
                Location = new Point(70, 70), // 100,100 → 70,70
                Size = new Size(810, 410), // 1160,580 → 810,410
                Font = new Font("Segoe UI", 9, FontStyle.Regular), // 10 → 9
                Appearance = TabAppearance.Normal,
                ItemSize = new Size(100, 30), // 120,40 → 100,30
                SizeMode = TabSizeMode.Fixed,
                Padding = new Point(15, 3), // 20,5 → 15,3
                BackColor = Color.FromArgb(25, 35, 45),
                ForeColor = Color.White
            };

            tabUpdates = new TabPage(LanguageManager.Get("tab_updates"));
            tabUpdates.BackColor = Color.FromArgb(25, 35, 45);
            tabUpdates.Padding = new Padding(8); // 10 → 8
            InitializeUpdatesTab();

            tabFeatures = new TabPage(LanguageManager.Get("tab_features"));
            tabFeatures.BackColor = Color.FromArgb(25, 35, 45);

            tabNews = new TabPage(LanguageManager.Get("tab_news"));
            tabNews.BackColor = Color.FromArgb(25, 35, 45);

            tabSocial = new TabPage(LanguageManager.Get("tab_social"));
            tabSocial.BackColor = Color.FromArgb(25, 35, 45);

            tabControl.TabPages.Add(tabUpdates);
            tabControl.TabPages.Add(tabFeatures);
            tabControl.TabPages.Add(tabNews);
            tabControl.TabPages.Add(tabSocial);

            // --------------------------------------------------------
            // STATUS PANEL - KÜÇÜLTÜLDÜ
            // --------------------------------------------------------
            statusPanel = new Panel
            {
                Location = new Point(70, 490), // 100,690 → 70,490
                Size = new Size(810, 70), // 1160,90 → 810,70
                BackColor = Color.FromArgb(20, 30, 40)
            };

            statusPanel.Paint += (s, e) =>
            {
                var rect = new Rectangle(0, 0, statusPanel.Width, statusPanel.Height);
                using (var brush = new LinearGradientBrush(rect,
                    Color.FromArgb(30, 40, 50),
                    Color.FromArgb(20, 30, 40),
                    LinearGradientMode.Vertical))
                {
                    e.Graphics.FillRectangle(brush, rect);
                }
            };

            lblStatus = new Label
            {
                Text = LanguageManager.Get("status_checking"),
                Location = new Point(15, 10), // 20,15 → 15,10
                Size = new Size(300, 20), // 400,25 → 300,20
                Font = new Font("Segoe UI", 9, FontStyle.Bold), // 10 → 9
                ForeColor = Color.FromArgb(0, 150, 255),
                BackColor = Color.Transparent
            };

            // TOPLAM PROGRESS BAR - KÜÇÜLTÜLDÜ
            pbTotal = new ProgressBar
            {
                Location = new Point(15, 35), // 20,45 → 15,35
                Size = new Size(350, 15), // 500,20 → 350,15
                Style = ProgressBarStyle.Continuous
            };

            lblTotal = new Label
            {
                Text = LanguageManager.Get("ready_with_progress", 0, 0, 0),
                Location = new Point(370, 35), // 530,45 → 370,35
                Size = new Size(150, 15), // 200,20 → 150,15
                ForeColor = Color.White,
                BackColor = Color.Transparent,
                Font = new Font("Segoe UI", 8, FontStyle.Bold) // 9 → 8
            };

            // DOSYA PROGRESS BAR - KÜÇÜLTÜLDÜ
            pbFile = new ProgressBar
            {
                Location = new Point(15, 55), // 20,70 → 15,55
                Size = new Size(280, 12), // 400,15 → 280,12
                Style = ProgressBarStyle.Continuous
            };

            lblFile = new Label
            {
                Text = LanguageManager.Get("file_progress", "-", 0),
                Location = new Point(300, 55), // 430,70 → 300,55
                Size = new Size(150, 12), // 200,15 → 150,12
                ForeColor = Color.FromArgb(180, 180, 180),
                BackColor = Color.Transparent,
                Font = new Font("Segoe UI", 7, FontStyle.Regular) // 9 → 7
            };

            lblSpeed = new Label
            {
                Text = LanguageManager.Get("download_speed", "0.00"),
                Location = new Point(460, 55), // 640,70 → 460,55
                Size = new Size(120, 12), // 150,15 → 120,12
                ForeColor = Color.FromArgb(0, 200, 100),
                BackColor = Color.Transparent,
                Font = new Font("Segoe UI", 7, FontStyle.Bold), // 9 → 7
                TextAlign = ContentAlignment.MiddleRight
            };

            btnLaunch = new Button
            {
                Text = LanguageManager.Get("btn_launch"),
                Location = new Point(650, 15), // 950,20 → 650,15
                Size = new Size(120, 40), // 140,50 → 120,40
                Enabled = false,
                FlatStyle = FlatStyle.Flat,
                FlatAppearance = { BorderSize = 0 },
                BackColor = Color.FromArgb(0, 150, 255),
                ForeColor = Color.White,
                Font = new Font("Segoe UI", 8, FontStyle.Bold), // 12 → 10
                Cursor = Cursors.Hand
            };
            btnLaunch.FlatAppearance.BorderSize = 0;
            btnLaunch.Click += BtnLaunch_Click;

            btnRegister = new Button
            {
                Text = LanguageManager.Get("btn_register"),
                Location = new Point(520, 20), // 750,25 → 520,20
                Size = new Size(120, 30), // 180,40 → 120,30
                FlatStyle = FlatStyle.Flat,
                FlatAppearance = { BorderSize = 0 },
                BackColor = Color.FromArgb(255, 100, 100),
                ForeColor = Color.White,
                Font = new Font("Segoe UI", 9, FontStyle.Bold), // 10 → 9
                Cursor = Cursors.Hand
            };
            btnRegister.FlatAppearance.BorderSize = 0;
            btnRegister.Click += (s, e) => OpenUrl(config.RegisterUrl);

            statusPanel.Controls.AddRange(new Control[] {
                lblStatus, pbTotal, lblTotal, pbFile, lblFile, lblSpeed, btnLaunch, btnRegister
            });

            // --------------------------------------------------------
            // KONTROLLERİ EKLE
            // --------------------------------------------------------
            this.Controls.Add(headerPanel);
            this.Controls.Add(sidebarPanel);
            this.Controls.Add(tabControl);
            this.Controls.Add(statusPanel);
        }

        private void InitializeUpdatesTab()
        {
            fileListView = new ListView
            {
                Location = new Point(15, 15), // 20,20 → 15,15
                Size = new Size(770, 360), // 1100,520 → 770,360
                View = View.Details,
                BackColor = Color.FromArgb(30, 40, 50),
                ForeColor = Color.White,
                Font = new Font("Segoe UI", 8, FontStyle.Regular), // 9 → 8
                GridLines = true,
                FullRowSelect = true,
                BorderStyle = BorderStyle.None,
                HeaderStyle = ColumnHeaderStyle.Nonclickable
            };

            ColumnHeader colFile = new ColumnHeader();
            colFile.Text = LanguageManager.Get("tab_updates");
            colFile.Width = 380; // 500 → 380
            colFile.TextAlign = HorizontalAlignment.Left;

            ColumnHeader colStatus = new ColumnHeader();
            colStatus.Text = LanguageManager.Get("status_ready");
            colStatus.Width = 100; // 150 → 100
            colStatus.TextAlign = HorizontalAlignment.Left;

            ColumnHeader colProgress = new ColumnHeader();
            colProgress.Text = LanguageManager.Get("file_progress", "", 0).Replace(",0", "");
            colProgress.Width = 250; // 400 → 250
            colProgress.TextAlign = HorizontalAlignment.Left;

            fileListView.Columns.Add(colFile);
            fileListView.Columns.Add(colStatus);
            fileListView.Columns.Add(colProgress);

            tabUpdates.Controls.Add(fileListView);
        }

        // ------------------------------------------------------------
        // INDEX.HTML'DEN KONFİGÜRASYON OKU
        // ------------------------------------------------------------
        private async System.Threading.Tasks.Task<UpdaterConfig> LoadConfigFromIndexAsync()
        {
            var config = new UpdaterConfig();

            try
            {
                string indexUrl = serverUrl.TrimEnd('/') + "/index.html";
                string html = await httpClient.GetStringAsync(indexUrl);

                var match = Regex.Match(html, @"<meta name=""updater:game_exe"" content=""([^""]+)""");
                if (match.Success) config.GameExecutable = match.Groups[1].Value;

                match = Regex.Match(html, @"<meta name=""updater:manifest"" content=""([^""]+)""");
                if (match.Success) config.ManifestFile = match.Groups[1].Value;

                match = Regex.Match(html, @"<meta name=""updater:register_url"" content=""([^""]+)""");
                if (match.Success) config.RegisterUrl = match.Groups[1].Value;

                match = Regex.Match(html, @"<meta name=""updater:website_url"" content=""([^""]+)""");
                if (match.Success) config.WebsiteUrl = match.Groups[1].Value;

                // HABERLER
                var newsMatches = Regex.Matches(html,
                    @"<meta name=""updater:news:(\d+):title"" content=""([^""]+)"".*?>" +
                    @".*?<meta name=""updater:news:\1:date"" content=""([^""]+)"".*?>" +
                    @".*?<meta name=""updater:news:\1:content"" content=""([^""]+)"".*?>" +
                    @".*?<meta name=""updater:news:\1:image"" content=""([^""]+)""",
                    RegexOptions.Singleline);

                foreach (Match m in newsMatches)
                {
                    config.News.Add(new NewsItem
                    {
                        Title = m.Groups[2].Value,
                        Date = m.Groups[3].Value,
                        Content = m.Groups[4].Value,
                        Image = m.Groups[5].Success ? m.Groups[5].Value : "📰"
                    });
                }

                // ÖZELLİKLER
                var featureMatches = Regex.Matches(html,
                    @"<meta name=""updater:feature:(\d+):icon"" content=""([^""]+)"".*?>" +
                    @".*?<meta name=""updater:feature:\1:title"" content=""([^""]+)"".*?>" +
                    @".*?<meta name=""updater:feature:\1:desc"" content=""([^""]+)"".*?>" +
                    @".*?<meta name=""updater:feature:\1:color"" content=""([^""]+)""",
                    RegexOptions.Singleline);

                foreach (Match m in featureMatches)
                {
                    config.Features.Add(new FeatureItem
                    {
                        Icon = m.Groups[2].Value,
                        Title = m.Groups[3].Value,
                        Description = m.Groups[4].Value,
                        Color = m.Groups[5].Success ? m.Groups[5].Value : "#FFC800"
                    });
                }

                // SOSYAL MEDYA
                var socialMatches = Regex.Matches(html,
                    @"<meta name=""updater:social:(\d+):platform"" content=""([^""]+)"".*?>" +
                    @".*?<meta name=""updater:social:\1:url"" content=""([^""]+)"".*?>" +
                    @".*?<meta name=""updater:social:\1:icon"" content=""([^""]+)"".*?>" +
                    @".*?<meta name=""updater:social:\1:color"" content=""([^""]+)""",
                    RegexOptions.Singleline);

                foreach (Match m in socialMatches)
                {
                    config.SocialLinks.Add(new SocialLink
                    {
                        Platform = m.Groups[2].Value,
                        Url = m.Groups[3].Value,
                        Icon = m.Groups[4].Value,
                        Color = m.Groups[5].Success ? m.Groups[5].Value : "#4267B2"
                    });
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine($"Config error: {ex.Message}");
            }

            if (config.News.Count == 0) SetDefaultNews(config);
            if (config.Features.Count == 0) SetDefaultFeatures(config);
            if (config.SocialLinks.Count == 0) SetDefaultSocialLinks(config);

            return config;
        }

        private void SetDefaultNews(UpdaterConfig config)
        {
            config.News.Add(new NewsItem
            {
                Title = LanguageManager.Get("welcome"),
                Content = LanguageManager.Get("status_ready"),
                Date = DateTime.Now.ToString("yyyy-MM-dd"),
                Image = "🎮"
            });
        }

        private void SetDefaultFeatures(UpdaterConfig config)
        {
            config.Features.Add(new FeatureItem
            {
                Icon = "🎮",
                Title = "HD Graphics",
                Description = "Enhanced visuals and effects",
                Color = "#FFC800"
            });
            config.Features.Add(new FeatureItem
            {
                Icon = "⚔️",
                Title = "PvP Arena",
                Description = "Fight with other players",
                Color = "#FF4444"
            });
        }

        private void SetDefaultSocialLinks(UpdaterConfig config)
        {
            config.SocialLinks.Add(new SocialLink
            {
                Platform = "
gokhancims53
Üye
Üye
Katılım23 Şub 2026
Konular8
Mesajlar57
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 01:16 #15
Bu konuyu görüntüleyenler
1 misafir
Cevap yazmak için giriş yapın.
Benzer Konular
6 cevap
2K görüntüleme
9 cevap
1.9K görüntüleme
4 cevap
1.9K görüntüleme
8 cevap
1.9K görüntüleme
İlan Yan banner placeholder