#plugins-dev-chat
1 messages · Page 193 of 1
you can troll with drinks
its more fun
i plan to add a bunch of different BS
on my way to order a cup of rage
how painful was it to make the keys 😭

<align=left><line-height=-16.9><line-indent=5.343em>\n<line-height=0.85><size=3%><mspace=0.766em>1 2 3 4 5 6 7 8 9 0\nQ W E R T Y U I O P\nA S D F G H J K L »\nZ X C V B N M - ←
How can i set the Interaction time on an InteractableToy? I used InteractionDuration and the .OnInteracted event but it doesnt trigger, i then tried using OnSearched, however it would automatically cancel the interaction and the next time it was interacted it would trigger the event. What do i do?
InteractionDuration and OnSearched is the correct way
idk what bug you are getting there
OnInteracted is for when there is no duration
so it wont trigger if you have a duration
its at 3.0f
interactableToy = InteractableToy.Create(mask.transform);
interactableToy.Parent = mask.transform;
interactableToy.Scale = new Vector3(0.15f,0.2f,0.038f);
interactableToy.Transform.localPosition = Vector3.zero;
interactableToy.InteractionDuration = 3.0f;
interactableToy.IsStatic = false;
interactableToy.Spawn();
interactableToy.OnSearched += labApiPlayer =>
hello chat
Hi
OnInteracted is called when the InteractionDuration is set to 0, otherwise, only search events are called
Do we know if any NW devs are gonna attend GDC (if any NW devs see this and are planning to attend, feel free to poke me, I'll be there March 8th to 14th)
unlikely
Good morning plugin dev cat
it's so cool when you wanna ctrl+click assets in unity to select them but instead you misclick by a pixel and it copies all the selected assets (it freezes for half a minute) (you can't press undo to remove them)
Don't worry, if the assets are big enough it'll also freeze for a minute when you delete them
Not to worry then, it'll still freeze when it discovers the files have been changed on disk
For your convenience, it won't freeze until you focus the unity window, though (perhaps I'm misremembering and being a touch too mean to unity)
that would be correct
What I like though is that if you really mess something up, you can just delete all the meta files and it only takes a few hours to reimport 


i love wayland too
Isn't all gdc is in US? There is no way that I going to fly there
Ye 800 euro to fly there and go back.
Also 16!! Hours of fly.
And I didnt even looked at booking rooms. OR ate something
Go to some european place
we have alot of stuff
I think germany or poland had gdc(?)
Damn checking wiki gdc germany was in 2016
And you wanted triangle to be optimal.. yeah nah
i mean its because i didn't know how to do a bonefire on blender
so i just took and did it irl and imported it
Hubert and other polish staff usually go to the events about games and such in Poland
what is poland?

the land of (nail) polish
||the land of femboys||
https://i.e-z.host/🐀/tku8r8iq.png
Idk i think my pc will melt
16K res textures
but the result is amazing
i still need to find something small and then im done
are you using textures in SL out of small blocks?
this was what i built
im not gonna do SL art
because SL in realistic context looks goofy
maybe too much goofy
this one 100% could work on SL
the only problem is the wind and movement
Guys, I have a slight issue with camera toys. For some reason, when I spawn custom cameras using their prefab, I can switch to some of them but not all of them. Even if I force the Room attribute to be the same as the room it's supposed to be in
I've been vibe coding for the past 2 hours since I couldn't figure this out alone..
I need help 🙏
Code anything?
Im sorry if i will not answer but sending code is a great start
@grok 
public static class CameraPrefabManager
{
public static Scp079Camera? CameraLcz { get; private set; }
public static Scp079Camera? CameraHcz { get; private set; }
public static Scp079Camera? CameraEz { get; private set; }
public enum CameraVariant
{
Lcz,
Hcz,
Ez
}
private static bool _isInitialized = false;
public static bool IsInitialized => _isInitialized;
public static void Initialize()
{
if (_isInitialized)
{
LabApi.Features.Console.Logger.Warn("[CameraPrefabManager] Already initialized!");
return;
}
int found = 0;
foreach (var kvp in NetworkClient.prefabs)
{
GameObject gameObject = kvp.Value;
if (gameObject == null)
continue;
if (gameObject.TryGetComponent(out Scp079Camera camera))
{
if (gameObject.name == "LczCameraToy")
CameraLcz = camera;
else if (gameObject.name == "HczCameraToy")
CameraHcz = camera;
else if (gameObject.name == "EzCameraToy")
CameraEz = camera;
else continue;
found++;
LabApi.Features.Console.Logger.Debug($"[CameraPrefabManager] Found SCP-079 camera prefab: {gameObject.name}");
if (CameraHcz != null && CameraLcz != null && CameraEz != null) break;
}
}
_isInitialized = true;
LabApi.Features.Console.Logger.Info($"[CameraPrefabManager] Camera prefab initialized: {found}/3 found");
if (CameraLcz == null)
{
LabApi.Features.Console.Logger.Error("[CameraPrefabManager] Failed to find camera prefab in NetworkClient.prefabs!");
}
}
public static Scp079Camera? GetCameraPrefab(CameraVariant? cameraVariant = CameraVariant.Lcz)
{
if (!_isInitialized)
{
LabApi.Features.Console.Logger.Warn("[CameraPrefabManager] Not initialized yet!");
return null;
}
return cameraVariant switch
{
CameraVariant.Ez => CameraEz,
CameraVariant.Hcz => CameraHcz,
CameraVariant.Lcz => CameraLcz,
_ => CameraLcz,
};
}
public static void ConfigureCamera(Scp079Camera camera, string name, ushort cameraId, byte zoom)
{
if (camera == null)
return;
try
{
bool nameSet = TrySetMember(camera,
[
"CameraName",
"Name",
"Label",
"_cameraName",
"_name",
"_label",
"_cameraLabel",
], name);
bool idSet = TrySetMember(camera,
[
"CameraId",
"Id",
"_id",
"_cameraId",
"_cameraID",
], cameraId);
bool zoomSet = TrySetMember(camera,
[
"Zoom",
"_zoom",
"_cameraZoom",
"_camZoom",
"DefaultZoom",
"_defaultZoom",
"MinZoom",
"_minZoom",
"MaxZoom",
"_maxZoom",
"ZoomLevel",
"_zoomLevel",
], zoom);
if (!nameSet)
camera.gameObject.name = name;
}
catch (Exception ex)
{
LabApi.Features.Console.Logger.Warn($"[CameraPrefabManager] Failed to configure camera: {ex}");
}
}
/// <summary>
/// Sets fields that are Mirror SyncVars on the camera BEFORE NetworkServer.Spawn.
/// Only values set before spawn are included in the initial spawn message sent to clients.
/// Do NOT override SyncId here — it is auto-assigned consistently on server and client.
/// </summary>
public static void PreConfigureCamera(Scp079Camera camera, string label)
{
if (camera == null)
return;
try
{
// IsToy is a SyncVar. The prefab has IsToy=true (it’s a toy prop).
// We must force it to false BEFORE spawn so the client receives false in the spawn message.
TrySetMember(camera, ["<IsToy>k__BackingField", "_isToy"], false);
// Label is the camera name shown to SCP-079. Set it here so the client gets it at spawn.
TrySetMember(camera, ["Label", "_label", "_cameraLabel"], label);
LabApi.Features.Console.Logger.Debug($"[CameraPrefabManager] PreConfigured '{label}' (IsToy=false, Label set)");
}
catch (Exception ex)
{
LabApi.Features.Console.Logger.Warn($"[CameraPrefabManager] PreConfigureCamera failed for '{label}': {ex.Message}");
}
}
sorry for flooding the chat
Excuse me
var backingField = baseType.GetField("<Room>k__BackingField", flags);
What the fuck?
Why are you accessing backing field?
Well, tbh I've been vibecoding at the end, AI told me to force things on server side
camera.Room = room
oh right because it's stupid
yea
and it can't look at library source code, let alone decompiled code
that's why I'm here now
So the main issue right now is that some of the camera toys can't be switched to, but they actually spawn correctly
3 lines
reading the xml docs is overrated
hmm
CameraToy camera = CameraToy.Create(yourpos, rot...);
camera.Room = yourRoom;
camera.Label = "YourLabel";
This is all you need to do
kk
T? found = null;
foreach (GameObject prefab in NetworkClient.prefabs.Values)
{
if (prefab.TryGetComponent(out found))
{
break;
}
}
if (found == null)
{
throw new InvalidOperationException($"No prefab in NetworkClient.prefabs has component type {typeof(T)}");
}
use this code to find it yea
- the name
that might be the reason my friend bothered making this CameraPrefabManager class
If your server has PMER you can just reference MER in your plugin and do
public static GameObject GetCameraPrefab(CameraType type)
{
return type switch
{
CameraType.Ez => ProjectMER.Features.PrefabManager.CameraEz.gameObject,
CameraType.EzArm => ProjectMER.Features.PrefabManager.CameraEzArm.gameObject,
CameraType.Hcz => ProjectMER.Features.PrefabManager.CameraHcz.gameObject,
CameraType.Lcz => ProjectMER.Features.PrefabManager.CameraLcz.gameObject,
CameraType.Sz => ProjectMER.Features.PrefabManager.CameraSz.gameObject,
_ => throw new InvalidOperationException(),
};
}
CameraType is a enum you'll have to make
Hmmm
I do have PMER indeed
sl moment
i've just had to fix 2 scenarios where i did that 
"why tf does the player get deleted"
That the point it's to reduce this number
Double it and give it to the next person
it is
congrats you have 2M triangles
Let’s toss in my 6figure polygon of a wooden box and put like 30 of them in there and call it a day
me when i force delete all admintoys
nuh uh
when you accidentally delete the prefab root and now all of your changes are gone
I DID IT AGAIN
😭
Lmao
Yeah
Going there with work so I figured I'd see if any dev here was going to
I wonder what gdc is like
Bet 
Lots of cool talks and being able to network with other game devs is always nice
Oh and the game dev concert is going to be sweet
You gotta send pics
will do
My fiancée's workplace does custom apparel so they're making me a jacket, a coat and a backpack embroidered with the logo of the studio I work for
Going to be super nice
I mean hey, free merch
I see, well at least you got swag if you go
Damn
yeah, it would be nice to try and see but i dont think in the near future i go to US. But if any game stuff will happen next to me i might look into going there
i love forcing a .net package to run on netstandard2.1 because it doesnt need to be forced to net7, but dotnet still doesnt wanna build the package...
might just have to make my own version running net48 
the package is legit locked to net7, forced it to fallback to net7 but still use net48, but now i get
0>CSC: Error CS1705 : Assembly 'package' with identity 'package, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Runtime, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' which has a higher version than referenced assembly 'System.Runtime' with identity 'System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
yes i redacted the package name
uhm, dont output everything into one directory
dotnet build -o Out doesnt work as you want
maybe thats why
dotnet build -p:BaseOutputPath="../Out/" -c:Release
idk how your csproj(s) look so
I did get the same error but fixed by this
YOU
idk
it's the minimum version
why "of fucking course" 😭
only a few edit
now idk how ur getting errors from fluxer lol
nah i compiling fluxer with netstandard2,1
hmm
no way
i meant the fluxer.net
i was hoping there would be a way for it to work so i dont have to manually update every time
plus this is in alpha
I can PR to them
they probably wont accept
"yo support netstandard bulbheads"
you can try if you want
id appreciate it
(also would like to see the changes you made lol)
We LOVE unity shader stripping
especially when it doesnt check code usage so then is like "uhm yeah no buddy"
@icy knoll well I could only do at like this
nmv WHO TF USING old ass serilog
smh
not surprised seeing CLOUDE in the fluxers repo
Whats Fluxer
idk
discord alternative that im like going fully into, currently under migration tho
it's just reached 100k people
pretty cool
idk but i can live with it
Me when
@icy knoll fixed yo thing
ctrl c v UI
real
1:1
i saw the PR, thanks
no thats YOUR thing
ur gunna have to make a PR or tell me how mate because what 😭
this is far beyond my knowledge
but anyway, when it does work it feels really nice to me
Lumi
better than discord atleast
Do you like it when Unity
Cannot create required material because shader is null
i love it david
absolutely adore it
me looking how can i create a .patch file
me too
never had the issue when making unity materials before
its my new favourite reason to wait for new rebuild
No its purely shader
it got stripped cause the only reference is its string name in code 
😭
aslo your Packages.props is a disaster my friend
@icy knoll you also manually need to build the one in the PR if u want i can also upload but you can just create a "3rdparty" folder and put the dll in there
you dont need to comment out the last i did cus it complained
it was ~ 1h of my life (hehe & lol ) so you are now have to pay me 5 euro 
git apply <patch_file>
as said you also need the Fluxer.Net.dll file
also NO auto build for Fluxer.Net? smh
blegh

it's a very new repo as im sure ur able to tell
lots of the API is confusing and empty
my first stuff is getting auto build lol
ive added some really useful stuff to my plugin so far
so ye
unlikely anyone will use it because idk anyone else using fluxer but it's there for those who do
russia for example can connect
Well if it ever happens lmk, I'd love to meet up someday
well good luck & have fun on GDC! I wanna hear how it was from you
I'll send pics
like from a directory?
The only thing that annoys me is how many AI talks there are
They can fuck right off lol
yeah lol
you want command or UI stuff?
dotnet nuget add source <LOCAL_FOLDER_PATH> -n <SOURCE_NAME>
literally a google away
exactly what i was saying
use a JB IDE
double shift -> apply patch (from clipboard)
Eh good to know how patches work anyway
Patchfiles are used in the Linux kernel
No such thing as prs
idk if they mean Claude or whatever lol
probably
as for Fluxer, they only use Claude to assist with some things, the core Dev only allows you to use it slightly and only in places you know how to test the code for and stuff
as for Fluxer.Net, I'm unsure lol
they don't use the async suffix in async method names which is really weird
you're at the tip of the iceberg, there is so much more where that comes from
Indeed
don't try 100k character in one TextToyhttps://discord.com/channels/330432627649544202/1372589869150507108
client gets an IndexOutOfRangeException from TMPro
why though
I will try 101k to fix it
perhaps never
Why not
idk if i'm allowed to say the reason
but it's definitely not planned, for now at least

yes, I will send the player a headshot of 096
Programming these mini pcs via Logism is surprisingly fun
NW central servers, circa 2026

Idk you love torturing yourself
but hey
microcontrollers are peak
bagoly mondja
I'm not into that
that is stronger than most servers on hetzner's server auction
Verébnek
@restive turret she got back at the moment you left 😭
I love how you can see .net getting better at optimizing
reminds me when i saw someone say js is faster than c# lol
riddle me this
(.net 10)
new should allocate
it's a struct so it doesn't allocate memory (on the heap)
but how is struct copying so much slower
ye you literally changing the properties/fields
you can see what it do in ILSPY/DnSpy
is there a very funny event which is called when players health is changed?
well
ldarg.0
ldobj (i guess this is the culprit)
stloc
then stloca and set fields
idunno
no labapi event but you can subscribe to HealthStat.OnStatChange
do i have to get the playershealthstat and then registeR?
yes
no
awh
Yes
(yes)
is there a good and optimal way to spawn a ragdoll with velocity and be sure it syncs between clients
CustomReasonDamageHandler damageHandler = new CustomReasonDamageHandler(message.SyncInputText);
damageHandler.StartVelocity += VelocitySlingShot;
damageHandler._velX += (short)VelocitySlingShot.x;
damageHandler._velY += (short)VelocitySlingShot.y;
damageHandler._velZ += (short)VelocitySlingShot.z;
Ragdoll.SpawnRagdoll(ev.Player, damageHandler);
Isn't that, when new is used, it creates a new element with the parameters, while in the second it initializes a copy and then changes the values? 
atleast quick guess
correct
and what about individual limbs?
you cannot
damn
triangles 
@cyan crown
top 10 crimes against humanity
triangles with controllers connection 
hypercube prefab
yes
will we like actually get the simple triangle prefab though?
idk
never
spawn collidable cube at the limb before spawning ragdoll
100% trust works
could be worse
true
Can't wait for a triangle primitive to drop and it's a huge disappointment cause we aren't allowed to position the vertices independently
Tbh allow us to position quad vertices and it's problem solved
is this how you evoke satan?
no shit cus its no longer will be a primitive if you can edit every single thing in there
question good gentleman, I've spawned the sinkhole prefab and when I change it's position the effect does get positioned somewhere else, but not the visual of the sinkhole how do I sync the position?
Despawn and spawn it back in
i dotn think thats synced
or that
got it
I have also been looking through what is spawnable and seen elevators
they're like a lot glitching though like they must stay at position they were defined at, any clue how that could be altered?
bruh these look more like mathematical fractals than animation controllers 😭
elevators are not spawnable
Elevators not designed to be customizable
I would like to see others do stuff with it and change that but yeah
What did i walk into
does SL viewmodels use set animations for jumping and landing or is it just code
especially the weapons
i think its code
yeah probably code but few animations don't feel coded
i tried this for items yesterday and its kinda good i still feel it needs improvement
i miss this UI🥹
Unity 2019
it just feels clean i do like unity 6's UI as well but this is just classic
afaik there is no active cassie team so no major modifications are happening to cassie
damn
I suggested as a joke but did it work
Whaddya need limb forces for anyway?
You should see the Cedmod panel polishing they did, it looks like it's owned by a corporate entity now
Oh i didn't know they updated it, i stopped being a mod for a very long time
It's a recent thing, Ced777ric isn't really a designer so the UI kind of looked not so great
Can you share a picture of the UI?
Damn i love it
I remember last time i used panel it was like a single color with few small differences, now it looks easier to navigate
i made it so you can go unconscious when you die, and if you get shot to death, a ragdoll just spawns and doesnt get moved as if it was shot
Most of it was greyscale anyhow, I know there were configs to change the coloration scheme but I never messed with it
Minecraft server provider ahh
That's Cedmod 
I know I read your convo
Never saw a Minecraft UI that looks like cedmod
neither did i
like they all look shit
lol
I usually see the Mojang overlay anyhow
I mean I spawned prefab of elevator like the shaft
and it doesn't render
because client renders them connected
yeah I saw it blicking really fast at one place
and giving epilepsy to whoever was close
lol
i'm not an evoker
that is its own rabbit hole
XDDD
but yea all night no sleep
decompiling
and i did it
:3
finally i can see code from a game il2cpp that i was modding lol
if (message.Attacments is [ { Name: "1.jpg" }, { Name: "2.jpg" }, { Name: "3.jpg" }, { Name: "4.jpg } ]) message.DeleteAsync();
what if my files are just named like that?
or they offset it by 1
then
at noemi
lets do instead something crazy
replace mods with AI
forgot central server hamsters are dying
i was gonna support your statement but you edited it
lets replace you with ai

who needs people
jokes on you i'm already ai
oh i forgot you are a furry thingy is fucking ai
ehm
super ai

actual intelligence
btw have you guys seen the weapon that was used for invading venezuela
the name
the "discombobulator"
Epic's Steam implementation is actually insane
On top of the issues I found, I also just managed to find a vulnerability that could let you spoof a SteamID and login to a game server as someone else if they're also connected on the server

do they have a SECURITY.md?
it would be ideal not to have everyone see this
though you posted it here already
Epic?
No
But you can send it to agent or smth
They do
I already posted about the snippet on Unreal Source too to confirm I'm not insane
The code is open source so whatevs
Or well, source available if we're going to be pedantic
Is it unreal, eos, or steam issue?
Unreal's implementation of Steam
Lmao
slime boy
Yes
make me a sandwich
Good thing I'm making my own heh
No
I also dont really like both steamworks c# project cus not exposing everything
We love steam and facepunch still good in my opinion
It has flaws
And like 90% stuck in Internal stuff so you need to publicize
Like you saying me that rumbling my controller need to be in internal method that I cannot access anywhere
Like thats so bad you don’t want the player to start idk tremble
I'm exposing everything
Bro DEVS have to implement it not like 3 monkeys and a snail working on a project where you need to use steam sdk
Nice
Idk if you got it but it was a joke lol
Idk why that was made but its funny
you can use the online services api that i implement (it calls Steam behind the scenes) or directly access Steam APIs (I wrap them 1:1 with some utilities when need be)
I'll expose it to Blueprints before release probs
Latest or stuck sith 157 or 147 as most
Ye but I see new games with 157 or 147
Timelines are goated
Gonna implement them into my game heh
Expose them to mods so they can have fun adding custom events
Cant wait to every second have an event
Why not
If it becomes an issue I'll ratelimit them
And also make it a game setting probably
You also need to call it so eh, idk why not
yeah
WTF
[2026-02-26 13:02:14.592 +08:00] [STDOUT] Unknown message id: 46055. This can happen if no handler was registered for this message.
you disconnected the host
or
you sent a message to it
make sure not to use Player.List
[2026-02-26 13:02:14.592 +08:00] [STDOUT] NetworkClient: failed to unpack and invoke message. Disconnecting.
[2026-02-26 13:02:14.593 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.593 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.593 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.593 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.594 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.594 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.594 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.594 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.594 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.594 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.594 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.595 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.595 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.595 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.595 +08:00] [STDOUT] Skipped Data message handling because connection is null.
[2026-02-26 13:02:14.595 +08:00] [STDOUT] Skipped Data message handling because connection is null.```this
okay]
Or just don't send it to host
That but instead of letting your server implode for some dubious design choices you can just patch it out so it never happens again
but i just use this ``` var ExDamageHandler = new ExplosionDamageHandler(atkfootprint, (hitPlayer.Position - hitPoint).normalized * 100f, AT4Starter.Instance.Damage, 100, ExplosionType.Grenade);
hitPlayer.Hurt(ExDamageHandler);``` ``` public void Hurt(PlayerStatsSystem.DamageHandlerBase damageHandlerBase)
{
ReferenceHub.playerStats.DealDamage(damageHandlerBase);
}```
why?
no clue
and wtf is 46055
hash of a message name
just loop through all types that implement INetworkMessage, call GetStableHash() on their full name
Find which one matches
there's no I in NetworkMessage
public static class NetworkClientPatch
{
[HarmonyPatch("UnpackAndInvoke")]
[HarmonyPostfix]
public static void postfix(ref bool __result)
{
__result = true;
}
}
this?
no
There is no I, there is no We, and there is no Us
UE is opensource btw
Or something
No way
*Source Available
STOP BEING PEDANTIC
Open source and source available are quite different
so what
Source available can mean you're not even allowed to use the code in any form
Not a bad way to but check that the connection id is 0
You can PR to them so at least that's something
You do want to disconnect players who fuck up
Been there done that, I consider it open source but with a restrictive license
When I think of epic games and pr, it reminds me of that pr when somebody pinged like 45k people on github
Mainly because of the royalties
reader dont have connectionid
The devs group contains everyone who linked their GitHub to their Unreal Engine dev account and for some reason it was mentionable
Yeah patch the other one
Do that and also do the Disconnect() function
Or whatever it's called
It's Mirror.NetworkServer
QuittingAndBlowingUp
idk why they let you disconnect the dedi player
idk why the dedi has a player
all our food keeps disconnecting
NW should really just fix it lol
imagine if we could fix all networking in this game
Fixing those two methods takes a minute heh
(never happening cuz that's not good for the community)
Also because some people are fucking weirdos they started posting gore and other nsfw stuff in the feed
That was a fun day for everyone in the dev group
Wa
My internet is shitting itself
No more fake sync
Dedotated Sewvew
NWs mirror already has some patches
can add more
Not my field 
Well fixing basegame bugs aint either so, but even as I do it still need to be merged
public static class NetworkConnectionPatch
{
[HarmonyPatch("Disconnect")]
[HarmonyPrefix]
public static bool prefix(ref NetworkConnection __instance)
{
if (__instance.connectionId == 0) return false;
return true;
}
}```
One day you'll fix the voice chat bugs
this?
could simplify it but yes
that works
Hell nah , get away from voice cat
i'll fix it today trust

i hate stupid mirror-----------
Get rid of waypoints while you're at it
that's another can of worms
i'd like to try the bases solution but not sure how to handle mounting/unmounting desync
You downvoted my parenting idea so
Rewind the base
what will the server do on 200ms
and what will other clients see
i think i answered my second question
What does that mean
(no change)
On that side I'd just buffer players by about 100/200ms
[2026-02-26 13:03:52.495 +08:00] Delayed connection incoming from endpoint *:29596 by 5 seconds.
[2026-02-26 13:03:52.888 +08:00] Delayed connection incoming from endpoint *:58370 by 5 seconds.
[2026-02-26 13:03:57.447 +08:00] Delayed connection incoming from endpoint *:33762 by 5 seconds.
[2026-02-26 13:03:58.244 +08:00] Delayed connection incoming from endpoint *:29601 by 5 seconds.
...``` happened when NetworkClient: failed to unpack and invoke message. Disconnecting. HandleData Unknown connectionId:0(and kicked all players)
Like CS does
whyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
But that would require an actual movement solution heh
Rewind the base to where it was when the player dismounted
at the movement timestamp
That way you can validate the player's post dismount position
Add a few centimeters of leniency for good measure
Or increase it for bases, up to u
it makes me sr it again and again
leakinog IPs btw
oh wait
I think I know the issue
UnpackAndInvoke cant just be prevented
You need to override the result if it's a failure for the dedi connection
Not just stop it from running, it is needed by the game
OnTransportData
@waxen kayak
.
wrong patch
or well
maybe right i dont remember
hmmm
Ill check sec
making me get up from bed
Well my current idea was using trigger boxes to mount and unmount player to those box (or any other selected one from editor) & if the box is destoryed and has someone in it (as a custom child) it will unparent it to null (going to be in root)
that's what i did in my game and it's a horrible solution
it works... locally at least
sorry for that:(
Worked for me
I tested with myself and me
(hosting with one and joining with other
More expensive
moving platforms don't work the way you expect
you need to update the parent in FixedUpdate
and CC.Move in Update
And has that snatching issue
seriously just read my wall of text i account for a ton of edge cases
otherwise the player won't move properly with the parent
no worries
yes
you're lucky i haven't fully fried my brain right now LOL
public static class NetworkConnectionPatch
{
[HarmonyPatch("Disconnect")]
[HarmonyPrefix]
public static bool prefix(ref NetworkConnection __instance)
{
if (__instance.connectionId == 0) return false;
return true;
}
} ```Plugin "UnionPlugin" threw an exception while enabling: HarmonyLib.HarmonyException: Patching exception in method abstract virtual System.Void Mirror.NetworkConnection::Disconnect() ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: Label #2 is not marked in method `Mirror.NetworkConnection.Disconnect_Patch1' noooooooooo
It looked okay dor me jn my perspective
/// <summary>
/// I have no idea why the fuck the dedicated server player can be disconnected.
/// But apparently it never gets disconnected outside of bugs so we're removing its ability to.
/// </summary>
[HarmonyPatch]
public static class NWDedicatedServerDisconnectPatch
{
[HarmonyTargetMethods]
public static IEnumerable<MethodBase> TargetMethods()
{
yield return AccessTools.Method(typeof(NetworkConnectionToClient), nameof(NetworkConnectionToClient.Disconnect));
yield return AccessTools.Method(typeof(NetworkConnectionToServer), nameof(NetworkConnectionToServer.Disconnect));
yield return AccessTools.Method(typeof(LocalConnectionToClient), nameof(LocalConnectionToClient.Disconnect));
yield return AccessTools.Method(typeof(LocalConnectionToServer), nameof(LocalConnectionToServer.Disconnect));
}
public static bool Prefix(NetworkConnection __instance)
{
// Block the dedicated server player from ever disconnecting.
if (__instance.connectionId == 0)
{
Logger.Error("Critical: attempted to disconnect the dedicated server player. This has been blocked.");
return false;
}
return true;
}
}
[HarmonyPatch(typeof(NetworkServer), nameof(NetworkServer.UnpackAndInvoke))]
public static class HostDisconnectPatch
{
public static void Postfix(ref bool __result, NetworkConnectionToClient connection, NetworkReader reader, int channelId)
{
// If the connection is 0 (the dedicated server), force the result to be true.
// We do not want to disconnect the dedicated server it causes MASSIVE issues.
// If you see a " NetworkServer: failed to unpack and invoke message. Disconnecting 0." you probably sent a message to the host.
// Do not do that. Use Player.ReadyList or check Player.IsHost before sending a network message.
if (connection.connectionId == 0)
{
__result = true;
}
}
}
enjoy
but yeah you got it wrong
thanks
was NetworkServer
I hate networking and this ass movement
I love it and it is my field
I plan to allow mods to script movement so they can have client prediction & server validation
That way they can do wonky movement and have it still work fine
Gonna be a lot of work but w/e
need modders to be able to go ham
i use [HarmonyPatch("Method Name")] btw
I wouldn't
Safer to go with nameof() and typeof()
At least you'll get a compile time error if something gets renamed
instead of a runtime patching error
It's not my field and I always get headaches for these stuff
You also should see and fix the bug that caused it
i cant change the source code in NW git:(
It's probably from your code
Not in nw, in your plugin
At the very least it won't be as problematic
I can handle nw side if the pr gets accepted
i cant``` var ExDamageHandler = new ExplosionDamageHandler(atkfootprint, (hitPlayer.Position - hitPoint).normalized * 100f, AT4Starter.Instance.Damage, 100, ExplosionType.Grenade);
hitPlayer.Hurt(ExDamageHandler);
hitplayer, atkFootprint might be server
Check that
& also are you sure THAT caused it?
yes
[2026-02-26 13:02:14.592 +08:00] [STDOUT] Unknown message id: 46055. This can happen if no handler was registered for this message.
[2026-02-26 13:02:14.592 +08:00] [STDOUT] NetworkClient: failed to unpack and invoke message. Disconnecting.
[2026-02-26 13:02:14.593 +08:00] [STDOUT] HandleData Unknown connectionId:0
[2026-02-26 13:02:14.593 +08:00] [STDOUT] HandleData Unknown connectionId:0`````` if( StraightDamageApplied)
{
Log.Info("straight damage");
float Distance = Vector3.Distance(hitPlayer.Position, hitPoint);
Footprint atkfootprint = _at4Usage._at4Holder.Footprint;
var ExDamageHandler = new ExplosionDamageHandler(atkfootprint, (hitPlayer.Position - hitPoint).normalized * 100f, AT4Starter.Instance.Damage, 100, ExplosionType.Grenade);
hitPlayer.Hurt(ExDamageHandler);
}```
If your project uses the sdk format for csproj you should use BepInEx.AssemblyPublicizer.MSBuild
<PackageReference Include="BepInEx.AssemblyPublicizer.MSBuild" Version="0.4.3" />
Then you can just do
<Reference Include="Assembly-CSharp" Publicize="true">
<HintPath>$(SLREFERENCES)\Assembly-CSharp.dll</HintPath>
</Reference>
magic
Print out hitplayer, and atk footprint
i use exiled and the only one set the _at4Usage._at4Holder is this: internal void OnGlobalChangeingItem( ChangingItemEventArgs ev) ... _curPlayerAT4useage.AT4Bind(ev.Player);
this is what happens when overlapping triggers move
unity just
doesn't like it
like there's a lot to consider with parenting
though the bases system has the issue of having to implement your own move-with-base system
kek
but yeah you don't need triggers
on top of an additional overhead you can just use ground contact
that you already will have events for
Well i know shit about these stuff so
How can i force a player to throw his current item?
Newpesht killed me 💀
I love thoes names XD
you can call Inventory::UserCode_CmdDropItem__UInt16__Boolean if you have publicized otherwise just look how that method works
I feel like we have LabAPI method for that
yeah because what is that method name 😭
Mirror generated
I have a friend called Esther so I thought about them for a sec
Also train game yippee!
thought so
:3
No
idk i just looked where the event is triggered
Player::DropItem exists but i dont see anything for throwing
added an issue about it + more 
what is channelId
referencing to?
public delegate void NetworkMessageDelegate(NetworkConnection conn, NetworkReader reader, int channelId);
Eszter gone
// channels are const ints instead of an enum so people can add their own
// channels (can't extend an enum otherwise).
//
// note that Mirror is slowly moving towards quake style networking which
// will only require reliable for handshake, and unreliable for the rest.
// so eventually we can change this to an Enum and transports shouldn't
// add custom channels anymore.
public static class Channels
{
public const int Reliable = 0; // ordered
public const int Unreliable = 1; // unordered
}
channel id reference what and how it sending
soo that all?
thank(f***) you mirror
^^^^
wait can i have public const int IDontCareName = 3;
i mean yes... but why
cause im stupid
yes but
im confused what the question is
cuz yes you can define that as a constant, but
what for
Send(StupidData.channelId = 69)
no
wouldnt work
WHY I CANT CHANGE SubtitleCategory._speakerName
ask it nicely
^^
tbh you prob want to use displaykit rather than doing subtitles
display kit is not yet out
not like that thing is getting out faster either
I'm not a guy who decides that
Is there any way I can learn about or mess with display kit stuff before it drops or do I just gotta wait
Probably when 15.0 is released
So sometime this year ¯_(ツ)_/¯
There will be a public beta for it afaik
@ everyone 
paypal beryl 10000usd
Goog
i didnt say anything about getting a feature implemented
PayPal me and i give you sneak peak (joke)
you should just paypal beryl 10000usd
Speedrun on how to get sued and hr on your ass
If it is by you im glad because you are chill else fuck no get out
He will stare at you
so pay to get feature first?

what do yall think about this command loading/handling I made. it automatically checks permissions, parses arguments by type and registers commands as parent command if there are multiple methods with the CommandMethod attribute and some more stuff. I will make this a public plugin once I finished my todos.
@hearty shard check this out
might have to use ctrl c ctrl v
for no particular reason ofc
is this reflection-based 
is that reflection or source gen
reflection
btw this is cool , how do you do the result if good or not?
@true cedar stink
ie: You must prefix as "Error: " to handle as the command did not succeeded
throw a exception if failed. if the exception is based on a BaseException it will do the same as return false with the exception message as response. if the method didnt throw it either sets the response to the default in config or if the method returns a string it will set the response to the return value

gulp

NO
yes.
I already writing SRC gen for myself
pretty please
now i wrote it 2 times
i asked nicely
pay me
and gonna ask cheatgpt to drop the reuslts
😭
insane
do yall think i should change this?
why exactly
throwing exceptions is expensive
so is reflection
hi davy
and also encourinigng poeple to throw exception
don't throw an exception at me
isnt that why it was always expensive
well its on command execution so it shouldnt be that often
you never know...
the humble admins setting a cmdbind
yea but its still a bad practice
we get people who cmdbinds a command and spawm the server
But yea generally you should rather validate your input
since thats 99% of your exception cause
int.tryparse instead int.parse
etc
null
no theyre intentionally throwing exceptions
hmm i see, i will change it then
Just async void everything so your exceptions get swallowed silently
You're welcome
try catch everything
Is there a way to replicate the friendly fire behaviour of Jailbird charge attacks not being blocked by friendlies and replicate it not active on a specific player (dummy) without fakesyncing a role change of the target?
its both client and server side afaik
Puny C# devs unable to work without exceptions
smh my head
Not for much longer dw
either that or
omw
😨
C# is one of the languages where you can live without exceptions pretty easily
Except for specific cases like files and networking
I was mostly joking
like
a humble error that just dont show in IDE
i meant ye that
i meant crashing the whole app
Ahhelnah
Exceptions are expensive
We're learning it in Uni in Eclipse
also makes your code dirtier if you abuse them
Eclipse 💪 💪 💪 💪 💪 💪
sorry for your loss
Eclipse is the first program I programmed in
and its gonna be the program where I write my last "Goodbye world" on my death bed
most of my time i reformat my code to return bool to indicate if success or not
p much the best way
and if something shouldn't ever happen I just assert & crash
I'd rather fix the edge case than have it fail silently
thank god for ref and passing by addresses
java lacked that feature and i hated every moment of it
ngl that's based
result type 🗣️🗣️🗣️
(when are we getting discriminated unions, C# pls)
is there a way to disable hitboxes on client? If I do server size to 0 the model will be half in the floor
so real
a humble EResult having 100 result
ya
Laughs in Unreal's TVariant
I love discriminating onions
super useful for my Steam plugin
XDD
I building SL rn so i cannot search anything until it finishes building
bruh
how long does it take
~30
i cannot do anything while SL is running
I LOVE CALLING WINAPI FROM C#

minute





