mirror of
https://mirror.ghproxy.com/https://github.com/dexyfex/CodeWalker
synced 2024-11-26 17:02:53 +08:00
RPF Explorer support for files not in RPFs
This commit is contained in:
parent
4bc51f8d69
commit
a434d9ad55
@ -1365,61 +1365,68 @@ namespace CodeWalker
|
|||||||
if (data == null) return;
|
if (data == null) return;
|
||||||
|
|
||||||
var ft = item.FileType;
|
var ft = item.FileType;
|
||||||
|
var fe = item.File;
|
||||||
|
if (fe == null)
|
||||||
|
{
|
||||||
|
//this should only happen when opening a file from filesystem...
|
||||||
|
fe = CreateFileEntry(name, path, ref data);
|
||||||
|
}
|
||||||
|
|
||||||
switch (ft.DefaultAction)
|
switch (ft.DefaultAction)
|
||||||
{
|
{
|
||||||
case FileTypeAction.ViewText:
|
case FileTypeAction.ViewText:
|
||||||
ViewText(name, path, data, item.File);
|
ViewText(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewXml:
|
case FileTypeAction.ViewXml:
|
||||||
ViewXml(name, path, data, item.File);
|
ViewXml(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewYtd:
|
case FileTypeAction.ViewYtd:
|
||||||
ViewYtd(name, path, data, item.File);
|
ViewYtd(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewYmt:
|
case FileTypeAction.ViewYmt:
|
||||||
ViewYmt(name, path, data, item.File);
|
ViewYmt(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewYmf:
|
case FileTypeAction.ViewYmf:
|
||||||
ViewYmf(name, path, data, item.File);
|
ViewYmf(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewYmap:
|
case FileTypeAction.ViewYmap:
|
||||||
ViewYmap(name, path, data, item.File);
|
ViewYmap(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewYtyp:
|
case FileTypeAction.ViewYtyp:
|
||||||
ViewYtyp(name, path, data, item.File);
|
ViewYtyp(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewJPso:
|
case FileTypeAction.ViewJPso:
|
||||||
ViewJPso(name, path, data, item.File);
|
ViewJPso(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewCut:
|
case FileTypeAction.ViewCut:
|
||||||
ViewCut(name, path, data, item.File);
|
ViewCut(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewModel:
|
case FileTypeAction.ViewModel:
|
||||||
ViewModel(name, path, data, item.File);
|
ViewModel(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewAwc:
|
case FileTypeAction.ViewAwc:
|
||||||
ViewAwc(name, path, data, item.File);
|
ViewAwc(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewGxt:
|
case FileTypeAction.ViewGxt:
|
||||||
ViewGxt(name, path, data, item.File);
|
ViewGxt(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewRel:
|
case FileTypeAction.ViewRel:
|
||||||
ViewRel(name, path, data, item.File);
|
ViewRel(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewFxc:
|
case FileTypeAction.ViewFxc:
|
||||||
ViewFxc(name, path, data, item.File);
|
ViewFxc(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewYwr:
|
case FileTypeAction.ViewYwr:
|
||||||
ViewYwr(name, path, data, item.File);
|
ViewYwr(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewYvr:
|
case FileTypeAction.ViewYvr:
|
||||||
ViewYvr(name, path, data, item.File);
|
ViewYvr(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewYcd:
|
case FileTypeAction.ViewYcd:
|
||||||
ViewYcd(name, path, data, item.File);
|
ViewYcd(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewCacheDat:
|
case FileTypeAction.ViewCacheDat:
|
||||||
ViewCacheDat(name, path, data, item.File);
|
ViewCacheDat(name, path, data, fe);
|
||||||
break;
|
break;
|
||||||
case FileTypeAction.ViewHex:
|
case FileTypeAction.ViewHex:
|
||||||
default:
|
default:
|
||||||
@ -1628,6 +1635,31 @@ namespace CodeWalker
|
|||||||
f.LoadMeta(cachedat);
|
f.LoadMeta(cachedat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private RpfFileEntry CreateFileEntry(string name, string path, ref byte[] data)
|
||||||
|
{
|
||||||
|
//this should only really be used when loading a file from the filesystem.
|
||||||
|
RpfFileEntry e = null;
|
||||||
|
uint rsc7 = (data?.Length > 4) ? BitConverter.ToUInt32(data, 0) : 0;
|
||||||
|
if (rsc7 == 0x37435352) //RSC7 header present! create RpfResourceFileEntry and decompress data...
|
||||||
|
{
|
||||||
|
e = RpfFile.CreateResourceFileEntry(ref data, 0);//"version" should be loadable from the header in the data..
|
||||||
|
data = ResourceBuilder.Decompress(data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var be = new RpfBinaryFileEntry();
|
||||||
|
be.FileSize = (uint)data?.Length;
|
||||||
|
be.FileUncompressedSize = be.FileSize;
|
||||||
|
e = be;
|
||||||
|
}
|
||||||
|
e.Name = name;
|
||||||
|
e.NameLower = name?.ToLowerInvariant();
|
||||||
|
e.NameHash = JenkHash.GenHash(e.NameLower);
|
||||||
|
e.ShortNameHash = JenkHash.GenHash(Path.GetFileNameWithoutExtension(e.NameLower));
|
||||||
|
e.Path = path;
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private Form FindExistingForm(RpfFileEntry e)
|
private Form FindExistingForm(RpfFileEntry e)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user