WhySoLaggy
Find which mod causes lag and who is bombing your room. FPS tracking, plugin timing, patch profiling, and real-time on-screen alerts.
By WUYACHIYU
| Date uploaded | 3 months ago |
| Version | 1.0.1 |
| Download link | WUYACHIYU-WhySoLaggy-1.0.1.zip |
| Downloads | 243 |
| Dependency string | WUYACHIYU-WhySoLaggy-1.0.1 |
This mod requires the following mods to function
BepInEx-BepInExPack_PEAK
BepInEx pack for PEAK. Preconfigured and ready to use.
Preferred version: 5.4.2403README
WhySoLaggy
Find out which mod is making your game lag, and who is bombing your room.
Features
Performance Profiling — Find the Lag Source
- FPS Monitor: Tracks your frame rate in real time, flags any frame that takes too long
- Plugin Timer: Measures how much time each installed mod takes per frame — see who's the slowest
- Patch Analyzer: Identifies which specific modified game methods are eating up performance
Room-Bombing Detection — Find Who's Causing Trouble
- Automatically monitors network activity in your room and detects suspicious behavior:
- Spawning tons of objects in a short time
- Flooding the network with RPC commands
- Sudden explosion in the number of scene objects
- When something suspicious is detected:
- A red alert pops up on the top-left corner of your screen (auto-fades after 12s)
- The log records the suspect player's name and ID number
- Observation only — does NOT kick, block, or interfere with anyone. Just records evidence.
Log Files
After your session, open the BepInEx folder in your game directory. You'll find two files:
| File | What it records |
|---|---|
BepInEx/WhySoLaggy.log |
Performance data: FPS, mod timing, lag causes |
BepInEx/WhySoLaggy_Abuse.log |
Bombing evidence: suspicious events, suspect players, timeline |
These are recreated every time you launch the game, so they won't grow forever.
How to Analyze the Logs
Option A: Give it to any AI (Recommended)
Copy-paste the log content into any AI assistant (ChatGPT, Claude, etc.) and ask:
"This is a performance/abuse log from my game. Please tell me:
- Which mod is causing the most lag?
- Were there any suspicious players?
- What happened and when?"
The AI will give you a clear summary.
Option B: Check it yourself
- Performance log: Look for lines with
!or!!!— the number inmsshows how slow it is - Abuse log: Look for lines with
⚠ ABUSE ALERT— the player name and ID are shown right after
Configuration
Adjust via in-game ModConfig or BepInEx config file:
Performance Profiling
| Setting | Default | Description |
|---|---|---|
| SpikeThresholdMs | 50 | How many ms before a frame counts as a lag spike (16–200) |
| ReportIntervalSeconds | 10 | Seconds between performance reports (5–60) |
| EnablePluginProfiling | true | Whether to measure each mod's timing |
| EnablePatchProfiling | true | Whether to measure patched method timing |
| TopMethodCount | 10 | How many slow methods to show in reports (3–30) |
Room-Bombing Detection
| Setting | Default | Description |
|---|---|---|
| EnableAbuseDetection | true | Turn bombing detection on/off |
| CheckIntervalSeconds | 1.0 | Seconds between checks (0.5–5) |
| ReportIntervalSeconds | 30.0 | Seconds between full reports (10–120) |
| InstantiateRateThreshold | 15 | Objects spawned per second to trigger alert (5–100) |
| DestroyRateThreshold | 20 | Objects destroyed per second to trigger alert (5–100) |
| RpcRateThreshold | 50 | RPC calls per second to trigger alert (10–200) |
| ObjectSpikeThreshold | 30 | Object count increase per check to trigger alert (5–100) |
Installation
- Install BepInExPack PEAK
- Place
WhySoLaggy.dllintoPEAK/BepInEx/plugins/
No other mods required.
Contact
- Author: wuyachiyu
- QQ Group: 1093172647
Notes
- The mod waits 5 seconds after launch before starting, so other mods can finish loading first
- Extremely low overhead — won't affect your game performance
- Bombing detection is observation-only, perfect for collecting evidence after an incident
CHANGELOG
Changelog
[1.0.3] - 2026-04-26
⚠ Testing status — client-side only. Every 1.0.3 feature in this changelog was exercised from a non-host (client) install. A subset of the new diagnostics can only do real work when the install is on the Master Client — specifically:
OnRemoteRpcEventHashtable unpack (capturing real client-side RPC senders after Master relay)- Master-side Instantiate requester correlation (
SuspectedRequesterActor/Name/Rpc)- PhotonView Ownership audit (EventCode 210/211/215)
- Actor×Method hotspot detector
These Master-only paths compile cleanly and self-check, but have not yet been validated in an actual hosted session. Expect potential edge-case bugs there until a host-side capture is recorded. Client-side features (FPS / RPC monitor / Instantiate rate / FieldProbe etc.) are unaffected.
Quiet-by-default
EnablePluginProfiling/EnablePatchProfilingdefault changed tofalse— profilers are opt-in nowLogVerbositydefault changed toMinimal— text logs only carry abuse alerts; CSV/JSONL still capture everything- Fix: abuse alerts now bypass the verbosity filter, so
Minimal= "alerts only, but definitely alerts" - Fix: removed orphan continuation lines when a report header was filtered but its follow-up lines weren't
New features
- Structured logging:
whysolaggy_data.csv(58 cols) +whysolaggy_events.jsonl, auto-rotated atMaxLogFileSizeMB - Startup Harmony conflict scan:
harmony_patches.csv+ alerts when the same method is patched by multiple mods - Opt-in method stack tracer (
[MethodTracer]): name methods, get filtered call stacks per hit - FieldProbe: JSON-driven reflective snapshots of any field / parameter / return value at any method
- On-screen dashboard (opt-in): live FPS, frame time, GC KB/s, watched-RPC summary, last abuse alert
- GC allocation rate + Photon ping are attached to FPS / periodic reports
- InstantiateTrace: every
PhotonNetwork.Instantiatecaptures a filtered caller stack (3 samples per prefab + 1 per 5s window, auto-forced on flood) — finally answers "which script / mod is spawning this?" - Watched-method library expanded from 27 to 65+ RPC names across feeding / healing / status / death / revive / grab-kick-carry / inventory / prefab spawn / end-game / ownership / tornado / campfire
- Master-side Relay Diagnostics (beta, Master-only):
RemoteRpcTraceunpacksEventCode=200Hashtable to recover the real client sender; Instantiate rows gainSuspectedRequesterActor/Name/Rpc/AgeMs;OwnershipChangedecodes EventCode 210/211/215;OwnershipGrabandActorMethodHotspotalarms layer on top
Performance & robustness
- PatchProfiler throttling via
MinReportMs— ~70–90% lower self-overhead on busy scenes IgnorePluginGuids/IgnorePatchMethods/ExtraWatchMethodsconfig keys- RPC hot path moved fully to main-thread pump (
ConcurrentQueue+PumpBatchSize) - Lower GC pressure across all periodic report paths; better exception reporting; null-safe patch hooks
Docs
- README: new Real-world case section with redacted dual-client lantern lit-sync + warmth diagnostics, pulled straight from a live session (
[LitSync]/[HuddleWarmth]/[FuelMath]/[WARMTH_LOG]/BugleRestore) - README: reworked How to analyse the logs into a tag-first workflow —
grep/jqby tag now recommended, CSV pivot second, AI third (with "curate the slice first" recipe), plain-text reading fourth - README: added six copy-paste commands (3 PowerShell
Select-String, 3jq) covering abuse alerts, lit-sync, failed warmth ticks, top RPC senders, FieldProbe hits, frame spikes
Upgrade note: BepInEx only applies new defaults to missing keys. Delete
com.wuyachiyu.WhySoLaggy.cfgor flip the three keys manually to pick up the quieter defaults.
[1.0.2] - 2026-04-23
- Full RPC monitor hooks
PhotonNetwork.ExecuteRpc; counts calls, senders and payload bytes - Feeding-chain tracing:
SendFeedDataRPC → RemoveFeedDataRPC → GetFedItemRPC → Consume - 27 watched high-risk methods record sender / target / parsed args / payload size
- Per-method 32-entry ring buffer so floods can't drown out rare events
- Abuse alerts now include the current top RPC methods
- Hot path <500ns per RPC, no allocs, no locks
[1.0.1] - 2026-04-20
- Room-bombing detection now correctly identifies the remote suspect
- Real-time on-screen alert banner (auto-fades after 12s), auto EN/中 based on system locale
- Fixed wrong attribution to the local player; fixed a thread-safety crash
[1.0.0] - 2026-04-07
- Initial release: FPS tracker, plugin / patch profilers, room-bombing detection, dual text logs