using System;
using System.IO;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using Microsoft.Win32;
using System.IO.Compression;
using System.Diagnostics;
class Program
{
static List<string> arquivosMovidos = new List<string>();
static string steamPath = GetSteamPath();
static async Task Main()
{
if (string.IsNullOrEmpty(steamPath))
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Não foi possível encontrar o caminho do Steam no
registro!");
Console.WriteLine("Verifique se o Steam está instalado corretamente.");
Console.ResetColor();
Thread.Sleep(3000);
return;
}
while (true)
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("NÃO PAGUE POR ISSO, É GRATUITO!");
Console.WriteLine(" ");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("MANIFEST DOWNLOADER BY WAY ( OWYM )");
Console.WriteLine(" ");
Console.Write("Digite o APPID: ");
var APPID = Console.ReadLine()?.Trim();
if (string.IsNullOrWhiteSpace(APPID))
{
Console.WriteLine("APPID não pode ser vazio!");
Thread.Sleep(1000);
continue;
}
await ProcessarAPPID(APPID);
}
}
static async Task ProcessarAPPID(string APPID)
{
var DOWNLOAD =
$"https://github.com/SteamAutoCracks/ManifestHub/archive/refs/heads/{APPID}.zip";
string CAMINHO =
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
"Downloads");
string NOMEDOARQUIVO = Path.Combine(CAMINHO, APPID + ".zip");
string PASTA_EXTRAIDA = Path.Combine(CAMINHO, APPID + "_extracted");
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0");
client.Timeout = TimeSpan.FromMinutes(5);
try
{
Console.WriteLine("\nIniciando download...");
byte[] data = await client.GetByteArrayAsync(DOWNLOAD);
// Corrigido: Usando WriteAllBytes síncrono
File.WriteAllBytes(NOMEDOARQUIVO, data);
Console.WriteLine($"Download concluído:
{Path.GetFileName(NOMEDOARQUIVO)}");
Console.WriteLine("\nExtraindo arquivos...");
if (Directory.Exists(PASTA_EXTRAIDA))
{
Directory.Delete(PASTA_EXTRAIDA, true);
}
Directory.CreateDirectory(PASTA_EXTRAIDA);
ZipFile.ExtractToDirectory(NOMEDOARQUIVO, PASTA_EXTRAIDA);
Console.WriteLine($"Extração completa em: {PASTA_EXTRAIDA}");
// Mover arquivos para as pastas corretas
Console.WriteLine("\nMovendo arquivos...");
MoverArquivos(PASTA_EXTRAIDA);
// Limpeza
File.Delete(NOMEDOARQUIVO);
Directory.Delete(PASTA_EXTRAIDA, true);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("\nProcesso concluído com sucesso!");
Console.ResetColor();
Console.WriteLine("\nPressione qualquer tecla para continuar...");
foreach (var process in Process.GetProcessesByName("steam"))
{
process.Kill();
process.WaitForExit();
}
string steamExe = Path.Combine(steamPath, "steam.exe");
if (File.Exists(steamExe))
{
Process.Start(steamExe);
}
else
Console.ReadKey();
}
catch (Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("\nErro durante o processamento:");
Console.WriteLine(ex.Message);
Console.ResetColor();
Console.WriteLine("\nPressione qualquer tecla para tentar
novamente...");
Console.ReadKey();
}
}
}
static string GetSteamPath()
{
try
{
string keyPath = @"Software\Valve\Steam";
object steamPathObj = Registry.GetValue(@"HKEY_CURRENT_USER\" +
keyPath, "SteamPath", null);
if (steamPathObj != null)
{
return steamPathObj.ToString().Replace('/', '\\');
}
return null;
}
catch
{
return null;
}
}
static void MoverArquivos(string pastaOrigem)
{
try
{
var arquivosLua = Directory.GetFiles(pastaOrigem, "*.lua",
SearchOption.AllDirectories);
var arquivosManifest = Directory.GetFiles(pastaOrigem, "*.manifest",
SearchOption.AllDirectories);
string destinoLua = Path.Combine(steamPath, "config", "stplug-in");
string destinoManifest = Path.Combine(steamPath, "config",
"depotcache");
Directory.CreateDirectory(destinoLua);
Directory.CreateDirectory(destinoManifest);
void MoverArquivo(string arquivo, string destinoDir)
{
string nomeArquivo = Path.GetFileName(arquivo);
string destinoCompleto = Path.Combine(destinoDir, nomeArquivo);
if (File.Exists(destinoCompleto))
{
File.Delete(destinoCompleto);
}
File.Move(arquivo, destinoCompleto);
Console.WriteLine($"Movido: {nomeArquivo} → {destinoDir}");
}
// Mover arquivos .lua
foreach (var arquivo in arquivosLua)
{
if (!arquivosMovidos.Contains(arquivo))
{
MoverArquivo(arquivo, destinoLua);
arquivosMovidos.Add(arquivo);
}
}
// Mover arquivos .manifest
foreach (var arquivo in arquivosManifest)
{
if (!arquivosMovidos.Contains(arquivo))
{
MoverArquivo(arquivo, destinoManifest);
arquivosMovidos.Add(arquivo);
}
}
}
catch (Exception ex)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"Aviso ao mover arquivos: {ex.Message}");
Console.ResetColor();
}
}
}