#plugins-dev-chat

1 messages · Page 193 of 1

wheat flower
#

no

#

:)

spare zodiac
wheat flower
#

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

quiet rune
#

how painful was it to make the keys 😭

wheat flower
#

<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 - ←

quiet rune
#

dang

#

it looks sick by the way

celest thorn
#

i just made this gem

#

atsomeone should be thanked for the idea ngl

quiet rune
#

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?

wheat flower
#

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

quiet rune
#

ill record in a sec

celest thorn
#

and it should be fine

quiet rune
#

its at 3.0f

wheat flower
#

whats the code look like

quiet rune
# wheat flower whats the code look like
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 =>
wheat flower
#

IsStatic can be changed to true

#

other than that i dont see any issues

quiet rune
#

Well thanks for yalls help!

celest thorn
#

hello chat

restive turret
#

Hi

upper vapor
grand flower
#

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)

worn gull
#

Good morning plugin dev cat

upper vapor
#

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)

tawny berry
#

Don't worry, if the assets are big enough it'll also freeze for a minute when you delete them

upper vapor
#

i deleted them through rider

#

it was faster

tawny berry
#

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)

tawny berry
#

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 HmmThumbsUp

restive turret
#

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

celest thorn
#

we have alot of stuff

restive turret
#

I think germany or poland had gdc(?)

celest thorn
#

maybe

restive turret
#

Damn checking wiki gdc germany was in 2016

celest thorn
#

btw is it bad?

restive turret
#

And you wanted triangle to be optimal.. yeah nah

celest thorn
#

so i just took and did it irl and imported it

unique crane
#

Hubert and other polish staff usually go to the events about games and such in Poland

upper vapor
#

the land of (nail) polish

celest thorn
#

16K res textures

#

but the result is amazing

#

i still need to find something small and then im done

spare zodiac
celest thorn
#

this was what i built

spare zodiac
#

now SL

celest thorn
#

because SL in realistic context looks goofy

#

maybe too much goofy

spare zodiac
#

no like import the scene into SL

#

trust the process

celest thorn
#

fuck no

celest thorn
#

this one 100% could work on SL

#

the only problem is the wind and movement

rough tundra
#

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 🙏

celest thorn
#

Im sorry if i will not answer but sending code is a great start

upper vapor
rough tundra
# celest thorn Im sorry if i will not answer but sending code is a great start
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

unique crane
#

Excuse me
var backingField = baseType.GetField("<Room>k__BackingField", flags);
What the fuck?

#

Why are you accessing backing field?

rough tundra
#

Well, tbh I've been vibecoding at the end, AI told me to force things on server side

upper vapor
#

IsToy is a SyncVar

#

no it is not

unique crane
#

camera.Room = room

upper vapor
#

atp

#

install an IDE and use it

#

(most of them have copilot)

rough tundra
#

😭

#

I'm using copilot

#

actually..

upper vapor
#

oh right because it's stupid

rough tundra
#

yea

upper vapor
#

and it can't look at library source code, let alone decompiled code

rough tundra
#

that's why I'm here now

unique crane
#

Use CameraToy.Create(...) to spawn it
Set the label, room constraints

#

thats it

rough tundra
#

So the main issue right now is that some of the camera toys can't be switched to, but they actually spawn correctly

unique crane
#

3 lines

upper vapor
#

reading the xml docs is overrated

rough tundra
#

hmm

upper vapor
#

gotta love my daily dose of nvidia driver timeouts

unique crane
# rough tundra hmm
CameraToy camera = CameraToy.Create(yourpos, rot...);
camera.Room = yourRoom;
camera.Label = "YourLabel";
#

This is all you need to do

rough tundra
#

can we choose the camera prefab with this?

#

otherwise nvm

unique crane
#

Good question

#

Nop

rough tundra
#

kk

upper vapor
#

back to NetworkClient.prefabs

unique crane
#

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
rough tundra
#

that might be the reason my friend bothered making this CameraPrefabManager class

static meteor
#

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

rough tundra
#

Hmmm

rough tundra
#

I do have PMER indeed

upper vapor
#

i've just had to fix 2 scenarios where i did that Kek

#

"why tf does the player get deleted"

restive turret
#

seems to be skill issue on your part

thin shuttle
warped prairie
upper vapor
restive turret
warped prairie
#

Let’s toss in my 6figure polygon of a wooden box and put like 30 of them in there and call it a day

restive turret
#

me when i force delete all admintoys

warped prairie
#

I’m deleting you

#

Gg

restive turret
#

nuh uh

upper vapor
#

when you accidentally delete the prefab root and now all of your changes are gone

#

I DID IT AGAIN

#

😭

restive turret
#

Lmao

grand flower
#

Going there with work so I figured I'd see if any dev here was going to

spring swan
#

I wonder what gdc is like

grand flower
#

I'll let you know in 2 weeks DogKek

#

But we're excited

spring swan
#

Bet SmugDance

grand flower
#

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

spring swan
#

You gotta send pics

grand flower
#

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

spring swan
#

I mean hey, free merch

grand flower
#

I'm paying for it lol

#

I ordered them for GDC, should have them tomorrow

spring swan
#

I see, well at least you got swag if you go

grand flower
#

defo going

#

Paid for by my work, already have the pass, flights and hotel

spring swan
#

Damn

restive turret
#

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

icy knoll
#

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 TrollDespair

restive turret
#

huh

#

i have a package that has netstandard2.0;net8.0;net10.0

icy knoll
# restive turret i have a package that has netstandard2.0;net8.0;net10.0

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

restive turret
#

uhm, dont output everything into one directory

#

dotnet build -o Out doesnt work as you want

icy knoll
#

i dont use -o

#

I do use <SharedBinPath> tho

restive turret
#

maybe thats why

icy knoll
#

just removed it

#

error :3

restive turret
#

dotnet build -p:BaseOutputPath="../Out/" -c:Release

#

idk how your csproj(s) look so

restive turret
icy knoll
#

it's a mix of csproj and .props files

#

lol

restive turret
#

ye thanks

#

404

icy knoll
#

private repo

#

lemme public

restive turret
#

guh

#

how would u think i help if i cant see shit

icy knoll
#

I DIDNT KNOW

#

bleh

restive turret
#

ask cheatgpt

#

or smth

icy knoll
#

i know how to fix

#

smh

#

check now

restive turret
#

ye its open

hearty shard
#

YOU

restive turret
#

OF FUCKING COURSE

#

also why net7?? net7 is now out of support

icy knoll
#

remove it and it wont build

icy knoll
#

it's the minimum version

icy knoll
restive turret
#

only a few edit

icy knoll
#

now idk how ur getting errors from fluxer lol

restive turret
#

nah i compiling fluxer with netstandard2,1

icy knoll
#

hmm

restive turret
#

i compiled

#

do you want it?

icy knoll
restive turret
icy knoll
#

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

restive turret
#

I can PR to them

icy knoll
#

they probably wont accept

restive turret
#

"yo support netstandard bulbheads"

icy knoll
#

you can try if you want

#

id appreciate it

#

(also would like to see the changes you made lol)

restive turret
icy knoll
#

peak

#

not a lot of changes

unique crane
#

We LOVE unity shader stripping

#

especially when it doesnt check code usage so then is like "uhm yeah no buddy"

restive turret
#

@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

unique crane
#

Whats Fluxer

restive turret
#

idk

icy knoll
#

discord alternative that im like going fully into, currently under migration tho

#

it's just reached 100k people

#

pretty cool

restive turret
icy knoll
unique crane
#

Me when

restive turret
#

@icy knoll fixed yo thing

unique crane
#

ctrl c v UI

icy knoll
unique crane
#

1:1

icy knoll
restive turret
#

no thats YOUR thing

icy knoll
#

oh shit

#

for my repo?

restive turret
#

the bot

#

ya

icy knoll
#

ur gunna have to make a PR or tell me how mate because what 😭

#

this is far beyond my knowledge

icy knoll
unique crane
#

Lumi

icy knoll
#

better than discord atleast

unique crane
#

Do you like it when Unity
Cannot create required material because shader is null

icy knoll
#

absolutely adore it

restive turret
#

me looking how can i create a .patch file

unique crane
#

me too

icy knoll
#

never had the issue when making unity materials before

unique crane
#

its my new favourite reason to wait for new rebuild

unique crane
#

it got stripped cause the only reference is its string name in code kekw

icy knoll
#

😭

restive turret
#

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 ClassDTrollHD

icy knoll
#

smh

#

idk how a patch file works...

restive turret
#

git apply <patch_file>

#

as said you also need the Fluxer.Net.dll file

icy knoll
#

blegh

icy knoll
#

it's a very new repo as im sure ur able to tell

#

lots of the API is confusing and empty

restive turret
#

my first stuff is getting auto build lol

icy knoll
#

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

grand flower
restive turret
grand flower
#

I'll send pics

restive turret
#

🔥

#

@icy knoll idk if we can send nuget packages (nupgks) around

#

or I can dm u

icy knoll
#

i forgor how to do manual pupkgs tbh

#

lol

restive turret
#

like from a directory?

grand flower
#

The only thing that annoys me is how many AI talks there are

#

They can fuck right off lol

icy knoll
restive turret
#

you want command or UI stuff?

icy knoll
#

we use different IDEs

#

so commands probs lol

restive turret
#

dotnet nuget add source <LOCAL_FOLDER_PATH> -n <SOURCE_NAME>

#

literally a google away

icy knoll
#

fair enuf

#

send over the file and ill see what can be done :3

upper vapor
upper vapor
upper vapor
pulsar locust
#

Eh good to know how patches work anyway

#

Patchfiles are used in the Linux kernel

#

No such thing as prs

icy knoll
upper vapor
#

probably

icy knoll
#

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

upper vapor
icy knoll
restive turret
#

Indeed

carmine prawn
#

don't try 100k character in one TextToyhttps://discord.com/channels/330432627649544202/1372589869150507108

#

client gets an IndexOutOfRangeException from TMPro

grand flower
#

why though

sinful bronze
carmine prawn
#

pixel loss

grand flower
#

When's NW getting you an ImageToy

#

The amount of wasted bandwidth makes me cry

upper vapor
grand flower
#

Why not

upper vapor
#

idk if i'm allowed to say the reason
but it's definitely not planned, for now at least

grand flower
#

Is the reason security

carmine prawn
grand flower
carmine prawn
#

yes, I will send the player a headshot of 096

unique crane
#

Programming these mini pcs via Logism is surprisingly fun

grand flower
#

NW central servers, circa 2026

upper vapor
celest thorn
#

but hey

pulsar locust
#

microcontrollers are peak

upper vapor
unique crane
icy knoll
worn gull
restive turret
true quest
#

@restive turret she got back at the moment you left 😭

restive turret
#

I love how you can see .net getting better at optimizing

icy knoll
upper vapor
#

(.net 10)

restive turret
#

new should allocate

upper vapor
#

it's a struct so it doesn't allocate memory (on the heap)

#

but how is struct copying so much slower

restive turret
#

ye you literally changing the properties/fields

#

you can see what it do in ILSPY/DnSpy

sweet flax
#

is there a very funny event which is called when players health is changed?

upper vapor
#

well
ldarg.0
ldobj (i guess this is the culprit)
stloc
then stloca and set fields

restive turret
#

idunno

upper vapor
sweet flax
upper vapor
#

yes

hearty shard
#

chat

#

am i real

upper vapor
#

no

hearty shard
#

awh

halcyon folio
open furnace
#

(yes)

sweet flax
#

is there a good and optimal way to spawn a ragdoll with velocity and be sure it syncs between clients

celest thorn
royal mica
# upper vapor riddle me this

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? thonk

#

atleast quick guess

upper vapor
#

correct

sharp hedge
celest thorn
sharp hedge
#

been wondering if it was possible for a while

#

oh

celest thorn
#

you just can fling

#

thats it

#

its not about limbs

#

lol

sharp hedge
#

damn

spare zodiac
#

triangles SteamHappy

cyan crown
#

Lmao

#

That is how my humans animatot looking rn

#

Without weapons or items added

spare zodiac
vast canopy
upper vapor
#

❌ triangle prefab
✅ animator transition prefab

#

@restive turret what do you think

restive turret
#

hypercube prefab

upper vapor
#

yes

spare zodiac
#

will we like actually get the simple triangle prefab though?

upper vapor
#

idk

restive turret
#

never

teal junco
#

100% trust works

sharp hedge
#

so itd push the limb?

#

actually kind of a good idea

upper vapor
#

could be worse

cyan crown
#

true

slate flume
#

Tbh allow us to position quad vertices and it's problem solved

restive turret
spare zodiac
#

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?

unique crane
#

Despawn and spawn it back in

hearty shard
#

or that

spare zodiac
spare zodiac
#

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?

soft depot
restive turret
#

Elevators not designed to be customizable

#

I would like to see others do stuff with it and change that but yeah

hearty ember
#

What did i walk into

cyan crown
#

does SL viewmodels use set animations for jumping and landing or is it just code

#

especially the weapons

sharp hedge
#

i think its code

cyan crown
#

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

cyan crown
#

i miss this UI🥹

#

Unity 2019

#

it just feels clean i do like unity 6's UI as well but this is just classic

tired charm
#

why arent yall using a bot to block the mrbeast scam

#

its pretty easy to do

static meteor
#

afaik there is no active cassie team so no major modifications are happening to cassie

tired charm
#

damn

teal junco
sharp hedge
#

i havent done it yet

#

i might just cope with no limb forces

teal junco
#

Whaddya need limb forces for anyway?

snow pulsar
# cyan crown

You should see the Cedmod panel polishing they did, it looks like it's owned by a corporate entity now

cyan crown
#

Oh i didn't know they updated it, i stopped being a mod for a very long time

snow pulsar
#

It's a recent thing, Ced777ric isn't really a designer so the UI kind of looked not so great

cyan crown
#

Can you share a picture of the UI?

snow pulsar
#

It's cleaner

cyan crown
#

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

sharp hedge
snow pulsar
teal junco
snow pulsar
teal junco
#

I know I read your convo

snow pulsar
#

Never saw a Minecraft UI that looks like cedmod

celest thorn
#

like they all look shit

#

lol

snow pulsar
#

I usually see the Mojang overlay anyhow

spare zodiac
celest thorn
#

because client renders them connected

spare zodiac
#

yeah I saw it blicking really fast at one place

#

and giving epilepsy to whoever was close

celest thorn
upper vapor
upper vapor
celest thorn
#

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

upper vapor
upper vapor
#

then

upper vapor
#

at noemi

celest thorn
#

replace mods with AI

#

forgot central server hamsters are dying

upper vapor
#

i was gonna support your statement but you edited it

celest thorn
#

who needs people

upper vapor
#

jokes on you i'm already ai

celest thorn
#

ehm

#

super ai

upper vapor
#

actual intelligence

celest thorn
#

btw have you guys seen the weapon that was used for invading venezuela

#

the name

#

the "discombobulator"

grand flower
#

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

restive turret
upper vapor
#

CVSS 10.0 alert alertalertalertalert

#

-# toomuchtrolling

grand flower
#

Eh, I'm gonna validate what I found and just PR it

#

Maybe

upper vapor
#

it would be ideal not to have everyone see this

#

though you posted it here already

restive turret
#

But you can send it to agent or smth

grand flower
#

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

restive turret
#

Is it unreal, eos, or steam issue?

grand flower
#

Unreal's implementation of Steam

restive turret
#

Lmao

hearty shard
#

slime boy

restive turret
#

Yes

hearty shard
#

make me a sandwich

grand flower
#

Good thing I'm making my own heh

restive turret
restive turret
celest thorn
restive turret
#

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

celest thorn
restive turret
restive turret
celest thorn
#

Idk why that was made but its funny

grand flower
#

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

restive turret
#

Yeah make sure the core works and then do more

#

Which version you using?

grand flower
#

Latest

#

I can update whenever

restive turret
#

Latest or stuck sith 157 or 147 as most

grand flower
#

163 is latest iirc

#

I want the Timeline stuff

restive turret
#

Ye but I see new games with 157 or 147

restive turret
grand flower
#

Gonna implement them into my game heh

#

Expose them to mods so they can have fun adding custom events

restive turret
#

Cant wait to every second have an event

grand flower
#

Why not

#

If it becomes an issue I'll ratelimit them

#

And also make it a game setting probably

restive turret
#

You also need to call it so eh, idk why not

grand flower
#

yeah

waxen kayak
#

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.

upper vapor
#

you disconnected the host

#

or

#

you sent a message to it

#

make sure not to use Player.List

waxen kayak
#
[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
grand flower
#

Patch it out

#

Block disconnections when it's the host

waxen kayak
#

okay]

restive turret
#

Or just don't send it to host

grand flower
#

That but instead of letting your server implode for some dubious design choices you can just patch it out so it never happens again

waxen kayak
#

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?

grand flower
#

no clue

waxen kayak
#

and wtf is 46055

grand flower
#

hash of a message name

#

just loop through all types that implement INetworkMessage, call GetStableHash() on their full name

#

Find which one matches

upper vapor
#

there's no I in NetworkMessage

grand flower
#

More dubious design choices

#

Good job Mirror

upper vapor
#

welcome to mirror

grand flower
#

Nuh uh

#

I'm not touching it

#

Happy on UE

waxen kayak
#
    public static class NetworkClientPatch
    {
        [HarmonyPatch("UnpackAndInvoke")]
        [HarmonyPostfix]
        public static void postfix(ref bool __result)
        {
            __result = true;
        }
    }
#

this?

upper vapor
#

no

pulsar locust
waxen kayak
pulsar locust
#

Or something

grand flower
restive turret
pulsar locust
#

Yea

grand flower
pulsar locust
#

Open source and source available are quite different

waxen kayak
pulsar locust
#

Source available can mean you're not even allowed to use the code in any form

grand flower
restive turret
#

You can PR to them so at least that's something

grand flower
#

You do want to disconnect players who fuck up

grand flower
pulsar locust
grand flower
#

Mainly because of the royalties

restive turret
#

I aint royal

#

I'm not a royal jelly

waxen kayak
grand flower
#

It does

#

It should

#

I remember patching it

pulsar locust
upper vapor
#

you were patching the client Kek

grand flower
#

Yeah patch the other one

#

Do that and also do the Disconnect() function

#

Or whatever it's called

waxen kayak
grand flower
#

It's Mirror.NetworkServer

restive turret
grand flower
#

idk why the dedi has a player

upper vapor
grand flower
#

NW should really just fix it lol

upper vapor
grand flower
#

Fixing those two methods takes a minute heh

upper vapor
#

(never happening cuz that's not good for the community)

pulsar locust
#

Wa

#

My internet is shitting itself

restive turret
grand flower
#

Another reason why Reflection exists so I'm not complaining

pulsar locust
restive turret
grand flower
#

can add more

restive turret
#

Not my field ClassDTrollHD

upper vapor
restive turret
#

Well fixing basegame bugs aint either so, but even as I do it still need to be merged

waxen kayak
#
    public static class NetworkConnectionPatch
    {
        [HarmonyPatch("Disconnect")]
        [HarmonyPrefix]
        public static bool prefix(ref NetworkConnection __instance)
        {
            if (__instance.connectionId == 0) return false;
            return true;
        }
    }```
grand flower
#

One day you'll fix the voice chat bugs

waxen kayak
#

this?

grand flower
#

that works

restive turret
#

Hell nah , get away from voice cat

upper vapor
upper vapor
waxen kayak
#

i hate stupid mirror-----------

grand flower
upper vapor
#

that's another can of worms

#

i'd like to try the bases solution but not sure how to handle mounting/unmounting desync

restive turret
#

You downvoted my parenting idea so

grand flower
#

Define desync

#

Parenting bad

upper vapor
#

like

#

latency

grand flower
#

Rewind the base

upper vapor
#

what will the server do on 200ms

#

and what will other clients see

#

i think i answered my second question

restive turret
upper vapor
#

(no change)

grand flower
#

On that side I'd just buffer players by about 100/200ms

waxen kayak
#
[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)
grand flower
#

Like CS does

waxen kayak
#

whyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

grand flower
#

But that would require an actual movement solution heh

grand flower
#

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

waxen kayak
upper vapor
#

leakinog IPs btw

grand flower
#

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

upper vapor
#

OnTransportData

grand flower
#

@waxen kayak

grand flower
#

wrong patch

#

or well

#

maybe right i dont remember

#

hmmm

#

Ill check sec

#

making me get up from bed

restive turret
#

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)

upper vapor
#

it works... locally at least

waxen kayak
restive turret
#

I tested with myself and me

#

(hosting with one and joining with other

upper vapor
#

moving platforms don't work the way you expect

#

you need to update the parent in FixedUpdate

#

and CC.Move in Update

grand flower
#

And has that snatching issue

#

seriously just read my wall of text i account for a ton of edge cases

upper vapor
#

otherwise the player won't move properly with the parent

grand flower
grand flower
#

you're lucky i haven't fully fried my brain right now LOL

waxen kayak
#
    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
restive turret
grand flower
# waxen kayak ``` [HarmonyPatch(typeof(NetworkConnection))] public static class Network...
/// <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

waxen kayak
#

thanks

grand flower
#

was NetworkServer

restive turret
grand flower
#

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

waxen kayak
#

i use [HarmonyPatch("Method Name")] btw

grand flower
#

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

waxen kayak
#

🙁

grand flower
#

ah

#

i would

restive turret
waxen kayak
#

working, thanks alot

#

(sorry for chinese)

grand flower
#

no need to apologize

#

glad i could help

restive turret
#

You also should see and fix the bug that caused itmtfplush

waxen kayak
grand flower
#

It's probably from your code

restive turret
#

Not in nw, in your plugin

grand flower
#

At the very least it won't be as problematic

restive turret
#

I can handle nw side if the pr gets accepted

waxen kayak
restive turret
#

hitplayer, atkFootprint might be server

#

Check that

#

& also are you sure THAT caused it?

waxen kayak
#

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);
            }```
static meteor
# waxen kayak i dont use Publicized dll

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>
waxen kayak
#

magic

restive turret
waxen kayak
#

i use exiled and the only one set the _at4Usage._at4Holder is this: internal void OnGlobalChangeingItem( ChangingItemEventArgs ev) ... _curPlayerAT4useage.AT4Bind(ev.Player);

upper vapor
#

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

grand flower
#

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

restive turret
#

Well i know shit about these stuff so

sweet flax
#

How can i force a player to throw his current item?

worn gull
#

I love thoes names XD

upper vapor
#

pentagon, hexagon, esthergon

#

ty

grand flower
#

have this meme

#

can't wait for it to have 50+ parameters

tired charm
unique crane
#

I feel like we have LabAPI method for that

icy knoll
#

yeah because what is that method name 😭

unique crane
#

Mirror generated

pulsar locust
#

Also train game yippee!

icy knoll
upper vapor
icy knoll
#

:3

unique crane
#

He see train he happy

#

What a nice life

upper vapor
#

yes

#

but i can't be at a station all the time

pulsar locust
#

I will see a sandbox game I will suggest train

restive turret
tired charm
#

Player::DropItem exists but i dont see anything for throwing

unique crane
#

Feel free to add it

restive turret
waxen kayak
#

what is channelId

hearty shard
waxen kayak
#

public delegate void NetworkMessageDelegate(NetworkConnection conn, NetworkReader reader, int channelId);

worn gull
hearty shard
# waxen kayak public delegate void NetworkMessageDelegate(NetworkConnection conn, NetworkReade...
    // 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
    }
restive turret
#

channel id reference what and how it sending

waxen kayak
#

soo that all?

hearty shard
#

thats it

#

just ignore it tbh

waxen kayak
#

thank(f***) you mirror

upper vapor
waxen kayak
#

wait can i have public const int IDontCareName = 3;

hearty shard
#

i mean yes... but why

waxen kayak
#

cause im stupid

hearty shard
#

yes but

#

im confused what the question is

#

cuz yes you can define that as a constant, but

#

what for

waxen kayak
#

Send(StupidData.channelId = 69)

upper vapor
#

no

hearty shard
#

wouldnt work

waxen kayak
#

WHY I CANT CHANGE SubtitleCategory._speakerName

upper vapor
#

Because it's client side

#

🤯

hearty ember
spare zodiac
#

^^

restive turret
#

tbh you prob want to use displaykit rather than doing subtitles

spare zodiac
restive turret
#

not like that thing is getting out faster either

plain gazelle
restive turret
#

I'm not a guy who decides that

plain gazelle
#

Who does

#

Who can i ping and annoyingly ask

warped prairie
#

Is there any way I can learn about or mess with display kit stuff before it drops or do I just gotta wait

static meteor
#

So sometime this year ¯_(ツ)_/¯

restive turret
upper vapor
woeful geyser
#

paypal beryl 10000usd

warped prairie
#

Goog

celest thorn
#

Because that will guarantee it

woeful geyser
#

i didnt say anything about getting a feature implemented

restive turret
#

PayPal me and i give you sneak peak (joke)

woeful geyser
#

you should just paypal beryl 10000usd

celest thorn
celest thorn
# restive turret

If it is by you im glad because you are chill else fuck no get out

warped prairie
#

He will stare at you

spare zodiac
tired charm
#

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.

restive turret
#

@hearty shard check this out

hearty shard
#

for no particular reason ofc

tired charm
upper vapor
#

is this reflection-based TrollDespair

hearty shard
#

is that reflection or source gen

tired charm
#

reflection

hearty shard
#

nvm

#

no ctrl c ctrl v this time

#

holy crap id cry

upper vapor
#

paws

#

awps

#

swap

restive turret
hearty shard
#

@true cedar stink

restive turret
#

ie: You must prefix as "Error: " to handle as the command did not succeeded

tired charm
# restive turret btw this is cool , how do you do the result if good or not?

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

upper vapor
tired charm
restive turret
hearty shard
#

slime

#

can you write the source gen for me

#

thanks bestie

restive turret
#

NO

hearty shard
#

yes.

restive turret
#

I already writing SRC gen for myself

hearty shard
#

pretty please

restive turret
#

now i wrote it 2 times

hearty shard
#

i asked nicely

restive turret
#

pay me

hearty shard
#

um

#

maybe

#

i will give you 5 cents

restive turret
#

and gonna ask cheatgpt to drop the reuslts

hearty shard
#

😭

upper vapor
#

cheatgpt

#

XD

hearty shard
#

insane

tired charm
restive turret
#

yes

#

by 100%

hearty shard
tired charm
hearty shard
#

so is reflection

#

hi davy

unique crane
#

It is in older .net

#

in newer its kinda runtime cost

restive turret
#

and also encourinigng poeple to throw exception

upper vapor
#

don't throw an exception at me

hearty shard
tired charm
#

well its on command execution so it shouldnt be that often

restive turret
#

you never know...

upper vapor
hearty shard
restive turret
#

we get people who cmdbinds a command and spawm the server

unique crane
#

But yea generally you should rather validate your input

#

since thats 99% of your exception cause

#

int.tryparse instead int.parse

#

etc

restive turret
#

null

hearty shard
tired charm
#

hmm i see, i will change it then

restive turret
#

or ArgumentOutOfExcteption

#

or smth

grand flower
#

Just async void everything so your exceptions get swallowed silently

#

You're welcome

restive turret
#

just do dynamic

grand flower
#

try catch everything

wary gust
#

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?

restive turret
#

its both client and server side afaik

grand flower
#

Puny C# devs unable to work without exceptions

upper vapor
#

currently dealing with mix-n-match Task & Awaitable

grand flower
#

smh my head

hearty shard
#

ax

#

why do you exist

grand flower
#

Not for much longer dw

upper vapor
#

either that or

grand flower
#

omw

hearty shard
upper vapor
unique crane
#

Except for specific cases like files and networking

grand flower
#

I was mostly joking

upper vapor
grand flower
#

Unreal disables exception by default

#

You're not supposed to use em

restive turret
grand flower
#

what

#

If you crash you crash

#

You just learn to write solid code

restive turret
#

i meant ye that

restive turret
#

i meant crashing the whole app

grand flower
#

Exceptions are expensive

worn gull
#

We're learning it in Uni in Eclipse

grand flower
#

also makes your code dirtier if you abuse them

unique crane
upper vapor
unique crane
#

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

restive turret
grand flower
#

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

restive turret
#

thank god for ref and passing by addresses

#

java lacked that feature and i hated every moment of it

vast canopy
#

Some hard-for-brain talking in chat

upper vapor
#

(when are we getting discriminated unions, C# pls)

wary gust
upper vapor
restive turret
grand flower
unique crane
upper vapor
grand flower
#

super useful for my Steam plugin

upper vapor
unique crane
#

*not to be confused with OnionMan

#

I like him

restive turret
#

I building SL rn so i cannot search anything until it finishes building

upper vapor
#

bruh

grand flower
#

how long does it take

restive turret
#

~30

upper vapor
unique crane
upper vapor
restive turret
#

minute