- Add new command for isolating combat pairs to prevent ambient escalation - Enhance combat event logging and participant tracking - Optimize combat focus handling based on participant count - Update harness scenarios to validate new combat interactions - Increment version to 0.26.7 in mod.json
47 lines
2 KiB
C#
47 lines
2 KiB
C#
using System.Reflection;
|
|
using System.Reflection.Metadata;
|
|
using System.Reflection.PortableExecutable;
|
|
string path = "/home/dazed/.local/share/Steam/steamapps/common/worldbox/worldbox_Data/Managed/Assembly-CSharp.dll";
|
|
using var fs = File.OpenRead(path);
|
|
using var pe = new PEReader(fs);
|
|
var md = pe.GetMetadataReader();
|
|
foreach (var typeName in new[]{"ActorManager","MapBox","World","Finder","BaseSystemManager`1","NanoObjectManager`2"}) {
|
|
Console.WriteLine("== "+typeName+" ==");
|
|
foreach (var th in md.TypeDefinitions) {
|
|
var t = md.GetTypeDefinition(th);
|
|
var n = md.GetString(t.Name);
|
|
var ns = md.GetString(t.Namespace);
|
|
if (n!=typeName && !(typeName.Contains('`') && n.StartsWith(typeName.Split('`')[0]))) continue;
|
|
Console.WriteLine($"TYPE {ns}.{n}");
|
|
// base type
|
|
if (!t.BaseType.IsNil) {
|
|
try {
|
|
var bt = t.BaseType;
|
|
if (bt.Kind == HandleKind.TypeReference) {
|
|
var tr = md.GetTypeReference((TypeReferenceHandle)bt);
|
|
Console.WriteLine(" base="+md.GetString(tr.Namespace)+"."+md.GetString(tr.Name));
|
|
} else if (bt.Kind == HandleKind.TypeSpecification) {
|
|
Console.WriteLine(" base=TypeSpec");
|
|
} else if (bt.Kind == HandleKind.TypeDefinition) {
|
|
var td = md.GetTypeDefinition((TypeDefinitionHandle)bt);
|
|
Console.WriteLine(" base="+md.GetString(td.Namespace)+"."+md.GetString(td.Name));
|
|
}
|
|
} catch (Exception ex) { Console.WriteLine(" baseerr "+ex.Message); }
|
|
}
|
|
foreach (var mh in t.GetMethods()) {
|
|
var m = md.GetMethodDefinition(mh);
|
|
var mn = md.GetString(m.Name);
|
|
if (mn.StartsWith("set_") || mn is ".ctor" or ".cctor") continue;
|
|
Console.WriteLine(" "+mn);
|
|
}
|
|
}
|
|
}
|
|
Console.WriteLine("== methods named getByID ==");
|
|
foreach (var mh in md.MethodDefinitions) {
|
|
var m = md.GetMethodDefinition(mh);
|
|
var mn = md.GetString(m.Name);
|
|
if (mn is "getByID" or "get" or "getActor") {
|
|
// find owning type - expensive: skip, just print token
|
|
Console.WriteLine(mn+" token="+mh.GetHashCode());
|
|
}
|
|
}
|