Files
PhotonViewDumper/Plugin.cs
2026-04-06 21:08:06 -04:00

69 lines
2.0 KiB
C#

using BepInEx;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using CsvHelper;
using Il2CppInterop.Runtime;
using Photon.Pun;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
namespace PhotonViewDumper;
public class ViewElement
{
public int RecNetId { get; set; }
public int ActorId { get; set; }
public string NickName { get; set; }
public string RecNetUserName { get; set; }
public int ViewId { get; set; }
public string PrefabName { get; set; }
}
[BepInPlugin("dev.proxnet.recroom.photonviewdumper", "PhotonViewDumper", "0.1.0")]
public class Plugin : BasePlugin
{
public static new ManualLogSource Log;
public override void Load()
{
Log = base.Log;
Log.LogInfo($"Loaded");
AddComponent<GameObject>();
}
public static void Dump()
{
List<ViewElement> views = new();
foreach (PhotonView view in PhotonNetwork.PhotonViews)
{
try
{
var recNetId = view.Owner == null ? -1 : view.Owner.RecNetAccountId;
CCEOLAOLEKJ recNetAccount = null;
PEGGCEDHBOF.DKNKKLPCGLM.TryGetValue(recNetId, out recNetAccount);
views.Add(new ViewElement
{
RecNetId = recNetId,
ActorId = view.Owner == null ? -1 : view.Owner.ActorNumber,
NickName = view.Owner == null ? "" : view.Owner.nickName,
RecNetUserName = recNetAccount == null ? "" : recNetAccount.BIOGKFGIMDG.ToString(),
ViewId = view.ViewID,
PrefabName = view.name
});
} catch (Exception ex)
{
Log.LogWarning($"Failed to dump view {view.ViewID}: {ex}");
}
}
using var writer = new StreamWriter("views.csv");
using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
csv.WriteRecords(views);
Log.LogInfo($"Wrote {views.Count} to views.csv");
}
}