this is the code use in:
WarRock Item script (seriously working) - Nexon 13.03.2013 - YouTube
hahaha help me fix the code
this is C#
here.s the error
Code:
Error 1 The type or namespace name 'FileCodeListDocument' could not be found (are you missing a using directive or an assembly reference?) C:\Users\Yuri\documents\visual studio 2010\Projects\param1\param1\Program.cs 47 17 param1 Error 2 The type or namespace name 'FileCodeListDocument' could not be found (are you missing a using directive or an assembly reference?) C:\Users\Yuri\documents\visual studio 2010\Projects\param1\param1\Program.cs 47 54 param1
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace fcldParser
{
class Program
{
/*
Header:
File Format (4 bytes, usually: "FCLD") / File Version (4 bytes, eg. 0x00F51300) / Hex [CD CC 8C 3F] / File Count (4 bytes, eg. 0x71C6 // big endian)
File Entry:
Filename Length (int) / File Name / Hex [00 00] / Unknown Data (6 bytes) / Hex [01] / Unknown Data (8 bytes, long?) / Hex [00]
*/
/*[StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Explicit, CharSet = CharSet.Ansi)]
public struct FCLDEntry
{
[MarshalAs(UnmanagedType.I8, SizeConst=6), FieldOffset(2)]
public long Version;
[FieldOffset(8)]
public int HeaderChecksum;
[FieldOffset(12)]
public int FileCount;
}*/
static string bytesToString(byte[] mInput)
{
string mReturn = string.Empty;
for (int iIndex = 0; iIndex < mInput.Length; iIndex++)
mReturn += mInput[iIndex].ToString("X2").ToString() + " ";
return mReturn.Substring(0, mReturn.Length - 1);
}
static void Main(string[] args)
{
//string mFileName = Console.ReadLine();
string mBasePath = @"D:\Downloads\G1 Client\";
mBasePath = @"C:\Users\Felix\Documents\WarRock\Warrock EU\";
string mFileName = mBasePath + @"data\Global.FCL";
if (System.IO.File.Exists(mFileName))
{
FileCodeListDocument iDocument = new FileCodeListDocument(mFileName);
Console.WriteLine("Parsing document...");
iDocument.parseDocument();
Console.WriteLine("Document parsed");
Console.WriteLine("Now exporting readable data...");
string mMassiveContent = "== FileCodeListDocument Header\r\n";
mMassiveContent += iDocument.Header.Format + "/" + iDocument.Header.Version.ToString() + " [CHKSM " + iDocument.Header.HeaderChecksum.ToString("X2") + "]\r\n";
mMassiveContent += "Total Entrys: " + iDocument.Header.FileCount.ToString() + "\r\n\r\n\r\n";
int mCount = 0;
var iList = new List<string>(); // polynom meet list
var jList = new List<uint>();
var kList = new List<uint>();
var lList = new List<uint>();
byte mThreads = 0;
foreach(FCLDEntry iEntry in iDocument.Entrys)
{
/*if (!iEntry.FileName.Contains("ITEMS.BIN"))
continue;*/
/*if (iEntry.FileSize < 1024)
continue;
if (iEntry.FileSize > 131072)
continue;*/
if (!System.IO.File.Exists(mBasePath + iEntry.FileName))
continue;
/*if (kList.Contains(iEntry.FileSize))
continue;
kList.Add(iEntry.FileSize);*/
//Console.WriteLine("File Scan [" + iEntry.FileName + "]");
mMassiveContent += "File: " + iEntry.FileName + "\r\n";
mMassiveContent += "Size: " + iEntry.FileSize + " (" + iEntry.FileSize.ToString("X2") + ") bytes\r\n";
mMassiveContent += "UBDump: " + bytesToString(iEntry.UnknownBytes) + "\r\n";
mMassiveContent += "Checksum: " + iEntry.FileChecksum.ToString("X2").PadLeft(8, '0') + "\r\n";
byte[] iFileBytes = System.IO.File.ReadAllBytes(mBasePath + iEntry.FileName);
uint mChecksum = Crc32.Compute(iFileBytes);
mMassiveContent += "RealChecksum: " + mChecksum.ToString("X2").PadLeft(8, '0') + "\r\n";
mMassiveContent += "Checksum XOR: " + (iEntry.FileChecksum ^ mChecksum).ToString("X2").PadLeft(8, '0') + "\r\n\r\n";
//var iThread = new System.Threading.Thread(new System.Threading.ThreadStart(() =>
//{
//Console.WriteLine("Collision Scan...");
//uint iChecksum = iEntry.FileChecksum ^ (BitConverter.ToUInt32(new byte[4] { iIndex, iIndex, iIndex, iIndex }, 0));
var iAction = new Action<uint, byte, bool>((uint mPoly, byte polyMethod, bool doReverse) =>
{
string mLog = "Trying Match @" + iEntry.FileName + " - [mPoly:" + mPoly.ToString("X2") + " / polyMethod:" + polyMethod.ToString() + " / revesed: " + doReverse.ToString() + "]\r\n";
byte[] baChecksum = BitConverter.GetBytes(iEntry.FileChecksum);
if(doReverse)
Array.Reverse(baChecksum);
uint iChecksum = BitConverter.ToUInt32(baChecksum, 0) ^ mPoly;
if (mChecksum == iChecksum)
{
//Console.WriteLine("i like meat");
if (jList.Contains(mPoly))
{
mLog += "+ iChecksum:" + iChecksum.ToString("X2") + " / mPoly:" + mPoly.ToString("X2") + " / fileSize:" + iEntry.FileSize.ToString("X2") + " / fileChecksum:" + iEntry.FileChecksum.ToString("X2") + " / polyMethod:" + polyMethod.ToString() + "\r\n";
Console.WriteLine(mLog);
//Console.WriteLine(mLog);
if (lList.Contains(mPoly))
{
Console.WriteLine("MATCHED KEY!!!");
Console.ReadLine();
}
else
lList.Add(iChecksum);
iList.Add(mLog);
}
else
jList.Add(mPoly);
}
});
var kAction = new Action<uint, byte, bool>((uint mPoly, byte polyMethod, bool doReverse) =>
{
for (byte iIndex = 0; iIndex < 32; iIndex++)
{
iAction((mPoly << iIndex) | (mPoly >> (32 - iIndex)), polyMethod, doReverse); // bit rotate
}
});
var jAction = new Action<bool>((bool mReverse) =>
{
for (byte cIndex = 0; cIndex < 3; cIndex++)
{
uint tukBytes = BitConverter.ToUInt32(iEntry.UnknownBytes, cIndex);
kAction(tukBytes, 0, mReverse);
kAction(tukBytes ^ (uint)iDocument.Header.HeaderChecksum, 1, mReverse);
kAction(tukBytes ^ mChecksum, 2, mReverse);
kAction(tukBytes ^ mChecksum ^ (uint)iDocument.Header.HeaderChecksum, 3, mReverse);
kAction(tukBytes ^ mChecksum ^ iEntry.FileChecksum, 4, mReverse);
kAction(tukBytes ^ mChecksum ^ iEntry.FileChecksum ^ (uint)iDocument.Header.HeaderChecksum, 5, mReverse);
kAction(tukBytes ^ iEntry.FileSize, 6, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ (uint)iDocument.Header.HeaderChecksum, 7, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ mChecksum, 8, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ mChecksum ^ (uint)iDocument.Header.HeaderChecksum, 9, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ iEntry.FileChecksum, 10, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ iEntry.FileChecksum ^ (uint)iDocument.Header.HeaderChecksum, 11, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ iEntry.FileChecksum ^ mChecksum, 12, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ iEntry.FileChecksum ^ mChecksum ^ (uint)iDocument.Header.HeaderChecksum, 13, mReverse);
kAction(tukBytes ^ 0xffffffff, 14, mReverse);
kAction(tukBytes ^ (uint)iDocument.Header.HeaderChecksum ^ 0xffffffff, 15, mReverse);
kAction(tukBytes ^ mChecksum ^ 0xffffffff, 16, mReverse);
kAction(tukBytes ^ mChecksum ^ (uint)iDocument.Header.HeaderChecksum ^ 0xffffffff, 17, mReverse);
kAction(tukBytes ^ mChecksum ^ iEntry.FileChecksum ^ 0xffffffff, 18, mReverse);
kAction(tukBytes ^ mChecksum ^ iEntry.FileChecksum ^ (uint)iDocument.Header.HeaderChecksum ^ 0xffffffff, 19, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ 0xffffffff, 20, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ (uint)iDocument.Header.HeaderChecksum ^ 0xffffffff, 21, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ mChecksum ^ 0xffffffff, 22, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ mChecksum ^ (uint)iDocument.Header.HeaderChecksum ^ 0xffffffff, 23, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ iEntry.FileChecksum ^ 0xffffffff, 24, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ iEntry.FileChecksum ^ (uint)iDocument.Header.HeaderChecksum ^ 0xffffffff, 25, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ iEntry.FileChecksum ^ mChecksum ^ 0xffffffff, 26, mReverse);
kAction(tukBytes ^ iEntry.FileSize ^ iEntry.FileChecksum ^ mChecksum ^ (uint)iDocument.Header.HeaderChecksum ^ 0xffffffff, 27, mReverse);
//(uint)iDocument.Header.HeaderChecksum
}
kAction(mChecksum, 28, mReverse);
//kAction(mChecksum ^ iEntry.FileChecksum, 29, mReverse);
kAction(iEntry.FileSize, 30, mReverse);
kAction(iEntry.FileSize ^ mChecksum, 31, mReverse);
kAction(iEntry.FileSize ^ iEntry.FileChecksum, 32, mReverse);
kAction(iEntry.FileSize ^ iEntry.FileChecksum ^ mChecksum, 33, mReverse);
//kAction(iEntry.FileChecksum ^ mChecksum, 34, mReverse);
kAction(iEntry.FileSize, 35, mReverse);
kAction(iEntry.FileSize ^ mChecksum, 36, mReverse);
kAction(mChecksum, 37, mReverse);
kAction(mChecksum ^ 0xffffffff, 38, mReverse);
kAction(mChecksum ^ iEntry.FileChecksum ^ 0xffffffff, 39, mReverse);
kAction(iEntry.FileSize ^ 0xffffffff, 40, mReverse);
kAction(iEntry.FileSize ^ mChecksum ^ 0xffffffff, 41, mReverse);
kAction(iEntry.FileSize ^ iEntry.FileChecksum ^ 0xffffffff, 42, mReverse);
kAction(iEntry.FileSize ^ iEntry.FileChecksum ^ mChecksum ^ 0xffffffff, 43, mReverse);
kAction(iEntry.FileChecksum ^ mChecksum ^ 0xffffffff, 44, mReverse);
kAction(iEntry.FileSize ^ 0xffffffff, 45, mReverse);
kAction(iEntry.FileSize ^ mChecksum ^ 0xffffffff, 46, mReverse);
kAction(mChecksum ^ 0xffffffff, 47, mReverse);
});
jAction(true);
jAction(false);
/*for (uint iIndex = 0x0; iIndex < 0xffffffff; iIndex++)
{
iAction(iIndex, 7, false);
if(iIndex % 0xFFFFFF == 0)
Console.Write(".");
}
Console.WriteLine("Finished OP1");
mThreads++;
//Console.WriteLine("Scan aborted");
//}));
//iThread.Start();*/
mCount++;
if (mCount >= 3500)
break;
if (mCount % 100 == 0)
Console.Write(".");
}
//while (mThreads != 10)
//System.Threading.Thread.Sleep(500);
mMassiveContent += "\r\n\r\n\r\n\r\n== Polynomial Collisions\r\n\r\n";
foreach (string cEntry in iList)
{
mMassiveContent += cEntry + "\r\n";
//Console.WriteLine(cEntry);
}
Console.WriteLine("Saving file [" + mCount.ToString() + "]...");
if (System.IO.File.Exists(@"C:\Users\Felix\Desktop\data.dat"))
System.IO.File.Delete(@"C:\Users\Felix\Desktop\data.dat");
System.IO.File.WriteAllText(@"C:\Users\Felix\Desktop\data.dat", mMassiveContent);
Console.WriteLine("Trying to find correct CRC32Polynom. ...");
}
else
Console.WriteLine("File not Found");
Console.ReadLine();
}
}
}






