rmdec/RMDEC/VXAProjectToolset.cs

252 lines
7.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using static System.Windows.Forms.ListBox;
namespace RMDEC
{
public partial class vxaProjectToolset : Form
{
public VXAProject vxProject;
public vxaProjectToolset(VXAProject proj)
{
vxProject = proj;
InitializeComponent();
}
private void onIndexThreadComplete()
{
processingText.Text = "Waiting";
processingText.BackColor = Color.Red;
decryptSelected.Enabled = true;
makeVXA.Enabled = true;
makeVXA.Enabled = true;
processingBar.Style = ProgressBarStyle.Continuous;
this.Cursor = Cursors.Arrow;
}
private void indexFiles()
{
processingText.Text = "Indexing";
processingText.BackColor = Color.Yellow;
processingBar.Style = ProgressBarStyle.Marquee;
this.Cursor = Cursors.WaitCursor;
//Index Encrypted Files
Thread indexFiles = new Thread(() =>
{
vxProject.PopulateFileList();
foreach (string file in vxProject.FileList)
{
string fileExtension = Path.GetExtension(file);
string realPath = Path.Combine(vxProject.FilePath, file);
Invoke((Action)delegate
{
encryptedFileList.Items.Add("[" + fileExtension.ToUpper().TrimStart('.') + "] " + file);
});
if (File.Exists(realPath))
{
Invoke((Action)delegate
{
decryptedFileList.Items.Add("[" + fileExtension.ToUpper().TrimStart('.') + "] " + file);
});
}
}
Invoke((Action)delegate
{
onIndexThreadComplete();
});
});
indexFiles.Start();
}
private void VXAProjectToolset_Load(object sender, EventArgs e)
{
updateTitle();
indexFiles();
}
private void updateTitle()
{
this.Text = "RMDec - [RMVXA] " + vxProject.GameTitle + " - " + vxProject.FilePath;
}
private void decryptSelected_Click(object sender, EventArgs e)
{
SelectedIndexCollection itemList = encryptedFileList.SelectedIndices;
int itemCount = itemList.Count;
if (itemCount < 1)
{
return;
}
int item = 0;
processingBar.Style = ProgressBarStyle.Continuous;
processingBar.Maximum = itemCount;
processingText.BackColor = Color.Yellow;
decryptSelected.Enabled = false;
makeVXA.Enabled = false;
Thread decryptFilesThread = new Thread(() =>
{
for(int i = 0; i < itemCount; i++)
{
Invoke((Action)delegate
{
item = itemList[i];
processingText.Text = "Decrypting " + i.ToString() + "/" + itemCount.ToString();
});
string fileName = (Path.Combine(vxProject.FilePath, vxProject.FileList[item]));
Directory.CreateDirectory(Path.GetDirectoryName(fileName));
FileStream Decrypted = File.OpenWrite(fileName);
vxProject.DecryptFile(item, Decrypted);
Decrypted.Close();
Invoke((Action)delegate
{
string encEntry = encryptedFileList.Items[i].ToString();
if (!decryptedFileList.Items.Contains(encEntry))
{
decryptedFileList.Items.Add(encEntry);
}
processingBar.Value = i;
});
}
Invoke((Action)delegate
{
decryptSelected.Enabled = true;
makeVXA.Enabled = true;
processingText.BackColor = Color.Green;
processingText.Text = "Decrypted " + itemCount.ToString() + " files!";
});
});
decryptFilesThread.Start();
}
private void onMakeVxaComplete()
{
string rpgProject = Path.Combine(vxProject.FilePath, vxProject.ExeName+".rvproj2");
string rpgEncryptedArchive = Path.Combine(vxProject.FilePath, vxProject.ExeName + ".rgss3a");
File.WriteAllText(rpgProject, "RPGVXAce 1.00");
if(File.Exists(rpgEncryptedArchive))
{
vxProject.Close();
File.Move(rpgEncryptedArchive, rpgEncryptedArchive+".delete-me");
}
processingText.BackColor = Color.Green;
processingText.Text = "Game Decrypted!";
decryptSelected.Enabled = true;
makeVXA.Enabled = true;
Process.Start(vxProject.FilePath+"\\");
}
private void makeVXA_Click(object sender, EventArgs e)
{
int itemCount = vxProject.FileList.Count;
//Decrypt Everything
if (itemCount > 0)
{
processingBar.Style = ProgressBarStyle.Continuous;
processingBar.Maximum = itemCount;
processingText.BackColor = Color.Yellow;
decryptSelected.Enabled = false;
makeVXA.Enabled = false;
makeVXA.Enabled = false;
Thread decryptFilesThread = new Thread(() =>
{
for (int i = 0; i < itemCount; i++)
{
Invoke((Action)delegate
{
processingText.Text = "Decrypting " + i.ToString() + "/" + itemCount.ToString();
});
string fileName = (Path.Combine(vxProject.FilePath, vxProject.FileList[i]));
Directory.CreateDirectory(Path.GetDirectoryName(fileName));
FileStream Decrypted = File.OpenWrite(fileName);
vxProject.DecryptFile(i, Decrypted);
Decrypted.Close();
Invoke((Action)delegate
{
string encEntry = encryptedFileList.Items[0].ToString();
if (!decryptedFileList.Items.Contains(encEntry))
{
decryptedFileList.Items.Add(encEntry);
}
encryptedFileList.Items.Remove(encEntry);
processingBar.Value = i;
});
}
Invoke((Action)delegate
{
onMakeVxaComplete();
});
});
decryptFilesThread.Start();
}
else
{
onMakeVxaComplete();
}
}
}
}