#plugins-dev-chat

1 messages ยท Page 205 of 1

sinful bronze
teal junco
#

whats that

strong lagoon
teal junco
#

howd u do the cassie thing

#

those subtitles are impossible to control

vast canopy
vast canopy
#

Gimme a sec

strong lagoon
#

Like this

teal junco
#

I think the player gravity can be set to any vector

#

but your model will always be upright afaik

vast canopy
#

Cassie.MessageTranslated

#

@teal junco

#

It so hard to see the code on phone

upper vapor
#

For every tyrant, a tear for the vulnerable

upper vapor
vast canopy
celest thorn
#

Omg soooo cuteeeeee

teal junco
#

been a while since I even bothered using cassie, maybe its changed

restive turret
#

I know i waiting for a pr to be merged.
Because it changes some stuff would need to review it better and more carefully.

And also i have like ~30 pr ready and waiting it takes time to review them all

restive turret
#

Lmao that's nice

celest thorn
vast canopy
celest thorn
#

#FreeRats

tranquil river
#

why wait for an update when you can just blindly code it instead

celest thorn
#

I promise

tranquil river
#

i did :3 (then switched to default hint system ๐Ÿ˜Ž )

celest thorn
tranquil river
#

the pain makes me stronger (the lies i tell myself)

celest thorn
tranquil river
# celest thorn On god please use ruei

but uh more seriously it wasn't exactly the most reliable and sometimes stopped working completely, i found it much more stable with the default system and wasn't using any other plugins that required text at that point in time

#

cool plugin though

#

for now just waiting for displaykit :3

celest thorn
#

Ruei allows you to do that

#

If you just use labapi it should work fine

tranquil river
tranquil river
upper vapor
#

ReUI

tranquil river
#

are there any more sample DisplayKit code screenshots to use as api reference

#

(I'm guessing the entire thing)

grand flower
#

Feels like a waste of time when we don't know the API yet

dim horizon
#

Maybe theres a plugin to manually edit the time between split commands

teal junco
#

empty messages

sinful bronze
#

yes empty

teal junco
#

Splits between msg and subs in theory should sync up

sinful bronze
#

Or spam a with a symbol with size=0

dim horizon
#

So sometimes its not it passing through too fast, its just not passing fast enough ๐Ÿ˜ญ

hearty shard
#

UI Toolkit

dim horizon
#

and ever since CASSIE Was sped up in the cassie refactor it kinda got worse

upper vapor
#

Well

#

You have a . with sleep

#

Put a split

#

And in the translations too

dim horizon
#

Well like, what I mean is personal translations for the game itself

#

cuz you cant change the actual ingame announcements, only the subtitles

#

and it seems theres no way to actually mess with how the split command works unless I read what you said completely wrong

dim horizon
plush summit
celest thorn
spare zodiac
#

can you make one with o cholera japjier dole?

plush summit
upper vapor
hearty shard
#

ok nerds

#

@upper vapor do you know if its worth actually using a HasFlagFast over HasFlag

#

ik theres some performance, but is it enough to warrant actually yk

#

using

upper vapor
#

if it exists

#

you might as well use it

hearty shard
#

i mean is it worth just doing the bitwise

upper vapor
#

eh

#

i'd say ye

hearty shard
#

okie

#

secretapi performance update in 20 years

upper vapor
hearty shard
#

wait

#

i just realized

#

nw already has one for DoorPermissionFlag

#

wait nvm thats not what im doing anyway

hearty shard
#

im stoopid rn

upper vapor
#

right now?
ลฑ

hearty shard
#

i hate you

upper vapor
#

thanks

hearty shard
#

also how does bitwise work again

#

specifically for the enum check

#

like what does (flag & 2ndflag) == 2ndflag do

upper vapor
#

that's hasflag

hearty shard
#

ok but

#

explain the actual

#

logic

upper vapor
#

right

hearty shard
#

behind the bitwise operation

#

what does it do to & it

#

its mostly just what & does in bitwise

upper vapor
#

so you have
flag = 0101
other = 0100
you & each bit (1 if the bit is the same in both)
0101 & 0100 = 0100

hearty shard
#

oh

#

so if a flag is in both, it just keeps the flag

#

okay

hearty shard
#

makes sense

#

now

#

WHAT THE FUCK IS THE REST

#

|=

upper vapor
#

both

hearty shard
#

& |=

#

or whatever

#

why it like this

#

im angry

upper vapor
hearty shard
#

same thing

#

why does it need both & and ~

#

oh

#

wait

#

cuz its inverting.

upper vapor
#

exactly

hearty shard
#

so

take flag, then get your 2nd flag and invert it and then set the values in 1st to that

#

sorta

#

ish

#

good enough for me

upper vapor
#

basically, yeah

hearty shard
#

ill forget this tmrw and ask it again

#

thanks bestie

upper vapor
#

np

hearty shard
#

what if i refuse to document HasFlagFast

#

because

#

its explanatory

#

i dont need to explain

upper vapor
#

it won't compile TrollDespair

#

TreatWarningsAsErrors moment

#

or you can

hearty shard
#

problemo solved

upper vapor
#

<inheritdoc cref="Enum.HasFlag"/>

hearty shard
#

ok thats

#

lowk more valid

#

also lowk

#

i should just

#

unsubscribe from the event

#

after doing it once

#

that performance will be super important trust

hearty shard
#

its a bit annoying

#

you cant just

#

look specifically for flags enum

#

cuz having just 1 method would be so much nicer

#

๐Ÿ˜ญ

upper vapor
#

um

#

no

hearty shard
#

um

#

yes

upper vapor
#

you can use this

hearty shard
#

um

#

nuh uh

#

that doesnt apply to all enums in the world

upper vapor
#

skill issue

hearty shard
#

i blame u

#

also what drugs was i on writing this docs

upper vapor
#

should've written "priority brought to you by apple"

hearty shard
#

lmao

#

also apparently the bitwise thing is just not an issue on later dotnet since they just make it compile to bitwise operation

#

which is cool

#

unfortunately

#

we're on stinky version

upper vapor
#

compiler is (most of the time) not dependent on the runtime

hearty shard
#

then theres no point doing HasFlagFast then

restive turret
#

Usually yes

hearty shard
#
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
private static unsafe Boolean HasFlags<T>(T* first, T* second) where T : unmanaged, Enum
{
    Byte* pf = (Byte*) first;
    Byte* ps = (Byte*) second;

    for (Int32 i = 0; i < sizeof(T); i++)
    {
        if ((pf[i] & ps[i]) != ps[i])
        {
                return false;
        }
    }

    return true;
}
    
/// <remarks>Faster analog of Enum.HasFlag</remarks>
/// <inheritdoc cref="Enum.HasFlag"/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe Boolean HasFlags<T>(this T first, T second) where T : unmanaged, Enum
{
    return HasFlags(&first, &second);
}
restive turret
#

Whadddehel

hearty shard
#

stolen from the hell gates of stackoverflow

hearty shard
#

apparently 25% better than HasFlag but, 10-15% slower than bitwise

restive turret
#

Just use systems hasflag

#

Stinky

hearty shard
#

nuh uh

#

max performance needed

hearty shard
#

In .NET Core 2.1 Enum.HasFlag is now a JIT intrinsic, such that the JIT generates the same quality code you would write by hand if you were doing manual bit flag testing. The evidence of this is in a simple benchmark:

upper vapor
#

so yeah

#

that's

#

the JIT compiler, not the C# compiler

#

in this cause

hearty shard
#

yeah

upper vapor
#

you're cooked

hearty shard
#

which explains why its still worth doing on older

upper vapor
#

yeeeees

restive turret
#

We waiting for the net10'th unity

#

Whcih is

#

Netx yet

upper vapor
#

are you

#

having a stroke rn?

restive turret
#

No

hearty shard
#

shhh

#

slime boy

upper vapor
restive turret
#

It jist missed registering some keys

upper vapor
#

jist

restive turret
#

Fucking hell

upper vapor
#

btw did you make this acapella version?

#

can't tell if it's done with Melodyne or generative ai

#

that "snap" on "life" is very accurate

vast canopy
upper vapor
#

i'd assume ai cuz uhhh

vast canopy
#

he is behind that part of update

upper vapor
#

cassie doesn't have all those words Kek

vast canopy
#

but if I remember correctly - someone just ai generated this

upper vapor
#

yeaaaa

#

makes it less impressive

plush summit
#

i took it from youtube

#

it and one more

celest thorn
#

you censored the second one but not the first one trolling

worn gull
#

Wth xd

wary gust
#

Is anonymous data collection of all players (including players with DNT on) banned under the CSG? Since I'm not necessarily collecting data of the DNT players but of the general game state.

(what I was thinking about was seeing how many players are opted into SCP on round start each round. so the only data saved would be an int indicating the player count and one for how many are opted in)

mild ice
#

@plush summit Please don't post videos with slurs, ty

spare zodiac
#

Petition to add Wilted rose emoji into SCP SL

slate flume
# wary gust Is anonymous data collection of all players (including players with DNT on) bann...

You're still collecting data from players with DNT on, the point is for players to opt-out of any and all unnecessary data processing
There's also the point to be made that the data you're collecting can be unanonymized given certain circumstances
E.g. one player online
Or you have situations with multiple different players online in different scenarios which, with enough data, can be extrapolated to figure out who's opted in and who isn't

If you're collecting this data for gameplay reasons, and it's actually important for different essential features of your plugin, then generally that's okay, similar justification applies for security reasons
If you're just logging this for curiousity, you need to be exempting DNT players

wary gust
#

fair enough

#

It was really a hypothetical question anyway

wary gust
slate flume
wary gust
#

you will see the DNT count somehow

#

(either printing it directly and calculating the other stuff or you would be able to get it through the methods you described)

#

again I don't plan to do it since it seems like too much work for not learning much but still

wary gust
slate flume
#

If it's curiousity then no

#

If it's for essential gameplay and security then yes

#

That's the distinction

#

The only situations in which you're allowed to track information from DNT players is for essential security and gameplay purposes

#

Otherwise for anything you're just curious about or think would be neat, don't do it

wary gust
#

thanks tho

slate flume
#

Absolutely

slate flume
#

I believe in my plugin I have a couple places where I ignore DNT but it's because I'll do stuff like track how long a player has been a certain role to prioritize spawning or other things, as it's data I need for some of the systems I use
I also don't store that data, I track it only as long as it's necessary and remove it as soon as it's not needed anymore

#

Generally if you ask "Can I record X, Y, or Z data from a DNT player" the answer is always "Depends on what you're using it for"

#

There's never really a cut and dry answer unless the situation is known

restive turret
#

ye I can answer with a "just dont collect it"

hearty shard
#

i mean ExPlayerEvents should be PlayerEvents

#

and other than that youve not specified an actual issue

static meteor
#

Its also using Exileds Enabled and Disabled overrides on labapi Kek

hearty shard
#

oh yeah

#

i didnt even realize

#

was that ai generated

tulip kiln
#

AI sucks ass at SL plugins

#

usually at least

hearty shard
#

no

hearty shard
tulip kiln
#

As in the source code or how it performes on SL plugins?

hearty shard
#

source code lel

#

was not what i was expecting to see

tulip kiln
#

I didn't look much into it as I wasn't really interested in it to begin with

hearty shard
#

ah

tulip kiln
#

but the way it leaked is funny

hearty shard
#

ya

#

Openai shutting sora down was also funny

tulip kiln
#

I hope AI dies by the end of 2027

#

and we'll all be happy again

#

(jk, actual useful for humanity AI is fine)

sweet flax
harsh thorn
#

AI itself can be a learning source for programming imo (ofcourse you need to verify what it says)
the plague is where people try to get AI to do all the work for them (eg having it write an entire plugin)

instead of blindly pasting whatever it says, people should try to understand what it said, and why it said it to apply the knowledge

#

but the fucking ai content shit is just pain

#

hate having to think "hmm is this real" for every random ass video i see

grand flower
#

Learning programming through AI is a recipe for disaster

harsh thorn
#

you didnt read what i said then

grand flower
#

I'm seeing it more and more with juniors

harsh thorn
#

if you just paste whatever it says instead of putting in your own research, yes

grand flower
#

It should NOT be a learning source, how are you going to expect a newbie to verify what AI says if they don't know programming

#

You can't verify while learning

#

And if they're going to have to do research anyway, might as well just do the research, you'll learn more

harsh thorn
#

you can ask the llm model to provide a source, if it cant do that
then its most likely hallucinating

grand flower
#

Just do the research

#

Literally better for you anyway

#

There's more and more research pointing towards loss of skill or intelligence through using AI too much

harsh thorn
#

the brain is wired to seek out the path of least effort

grand flower
#

The only time I'm neutral about AI usage is when it's someone with lots of experience trying to just get things done faster

#

Yeah well now juniors are unemployable because they all lack basic skills and it sucks

#

On one hand, thanks for the job security, on the other it's just sad to see

harsh thorn
#

sure, though how different is it from someone just typing search queries into google and pasting the nearest code they see without having a single thought about it

#

seems comparable to me imo

grand flower
#

Comparable ish maybe, but there's still more effort being put

#

and it goes a long way

#

Maybe then they'll read comments explaining better ways

#

Or they'll go through a few answers

#

Already miles better than just "hi gpt how do I do X make no mistakes"

#

Good luck doing game dev with no problem solving skills because you've replaced a chunk of your brain with some clankers

harsh thorn
#

well yeah, relying completely off of ai is not the way one should do it ๐Ÿ˜ญ

grand flower
#

I don't believe juniors should be touching AI at all

#

it's just not worth it

#

Sooner or later peeps are going to realize AI isn't the future for software development and you'll just have shot yourself in the foot

fair rain
#

Nah just let Claude do the work and ignore ppl that complain of bugs xD

grand flower
#

I welcome the job security

#

:p

fair rain
#

Same lmfao

boreal snow
#

hehehe my april fools mode in my plugin is peak

#

but its now disabled by default cuz its not april 1st anymore

fathom charm
#

Does anyone have a link to supported emojis/symbols for game?

fathom charm
#

thx

upper vapor
#

np

somber dagger
#

oh my god I didn't even think of that but that is SO useful thank you

upper vapor
boreal snow
# thin shuttle What was it

the behavior of the tesla gates gets inverted, so for example if someone was in the list of players that isn't supposed to trigger them, they do get triggered

thin shuttle
#

Lol

slow grotto
#

How bad of a plugin idea is this?

upper vapor
#

model context protocol?

#

very

slow grotto
#

Even for a joke, I think I'll just burn that folder

upper vapor
#

yeah um

#

april 1st has passsed

#

gl next year Kek

slow grotto
#

Well enough, I have several plugins and a VR mod calling for my attention.

#

Would be fun to share the VR, but I can feel NW behind me with the ban hammer.

upper vapor
slow grotto
#

Don't worry, it's a buggy mess that crashes if you look at 939's ass the wrong way. (Which I expect to be the primary demographic)

#

Or I guess 953 soon

spring plank
#

Hey so every plugin i add to exile forlder doesnt work. I changed to "true" in exiled config but still doesnt work. It doesnt show the error in console or doesnt even show it being loaded any fixes?

somber dagger
restive turret
#

Go to exiled for exiled support

somber dagger
#

True โœ…

somber dagger
#

Mmkay

manic ether
#

hi extremely new to this but what's going on here. what am I missing

#

if nothing else i'm assuming my project's missing one of the base server dlls again but i don't know which one

#

oh. nevermind. found it.

#

oops

slow grotto
crimson dune
#

fair enough

#

openxr is a pain to work with so fair enough

celest thorn
#

is it possible to tell the client to reset the values of SSS?

upper vapor
#

change the IDs toomuchtrolling

spare zodiac
uncut dagger
upper vapor
#

make sure you've put each DLL in their appropriate location

uncut dagger
#

I have everything in dependencies, because if I upload requested DLLs to plugins, it shows errors in console.

worn gull
#
                                   at LabApi.Features.Wrappers.Scp018Projectile.get_PhysicsModule () [0x00000] in <dcdabc4611d241c3b74aec95f620a184>:0
                                   at LabApi.Features.Wrappers.Scp018Projectile.get_PhysicsModule () [0x00000] in <dcdabc4611d241c3b74aec95f620a184>:0
                                   at LabApi.Features.Wrappers.Scp018Projectile.get_PhysicsModule () [0x00000] in <dcdabc4611d241c3b74aec95f620a184>:0
                                   at LabApi.Features.Wrappers.Scp018Projectile.get_PhysicsModule () [0x00000] in <dcdabc4611d241c3b74aec95f620a184>:0```
```cs
var timedProjectile = SpawnActive(Room.Get(RoomName.Lcz173).First().Transform.TransformPoint(new Vector3(21.434f, 15.87f, 8f)), ItemType.SCP018);
        if (timedProjectile is not Scp018Projectile scp018Projectile) return;
        NetworkServer.Spawn(scp018Projectile.GameObject);
        scp018Projectile.Velocity = new Vector3(0, 0, 100);
        scp018Projectile.Base.ServerActivate();

Can somebody help please

uncut dagger
sweet flax
worn gull
#

Or wdym?

sweet flax
#

/// <summary>
/// Gets the physics module for this ball.
/// </summary>
public new PickupStandardPhysics PhysicsModule => PhysicsModule;

#

Its calling itself

#

Report it

sweet flax
worn gull
#

yez

hearty shard
#

report what

#

is it off center

tired charm
#

texture stretched

restive turret
#

You can report and i can ignore itMorganTrue

#

I can maybe fix game bugs or labapi but these textures and stuff is just far for what i used to do

#

@languid temple ๐Ÿฅ€

cunning hemlock
#

posting scams in the plugin channels

#

imagine

restive turret
#

Atleast its not fucking logen paul

languid temple
#

!softban 1222260290993917984 account compromised; change password

regal lakeBOT
#

Done. Enough chaos.

restive turret
#

Ty

sweet flax
#

Legendary stack overflow

restive turret
#

I'm on unofficial break

#

My leg is ded

#

And its 00:02

#

Will check back tmr

#

Cus gonna pass out

hearty shard
#

besties who wants it

#

i was gonna add it to secretapi to realize itd be another feature no one would use

#

๐Ÿฅ€

soft depot
#

yeah maybe cuz you have to make your class have a weight built into it

#

will be cooler to have a more comprehensive weighter

#

maybe a static generic class or something where you can give a Func<T, float> to generate weights better

#

idk

hearty shard
tulip kiln
hearty shard
tulip kiln
#

ah

hearty shard
#

i forgot to update my disc

tulip kiln
#

what's the new handle?

hearty shard
#

@hearty shard

#

ok well

#

obvevelyn

#

i didnt mean to ping myself

#

or obveve

#

one of the 2

tulip kiln
#

I was about to ask if the heart emoji is included lol

hearty shard
#

it still says my old name on commits

#

no clue how to fix that lowk

tulip kiln
#

I see the new name only

#

Well unless a pull request has your old nickname on it

hearty shard
tulip kiln
#

Maybe that's an IDE issue?

hearty shard
#

rider + github desktop both end up w that

#

when i check settings they show the correct thing

#

but yes IDE shows wrong thing

#

@soft depot does it show correct one for you

#

wait

#

oh

#

it fixed literally today on my commits

#

LMAO

#

YIPPIE

#

lovely

hearty shard
tulip kiln
#

I wanted to check out if my copied SSSS is outdated trolling

#

Jokes aside, I just wanted to check out what changed

hearty shard
#

i go eep now tho

tulip kiln
#

same

#

goodnight

tired charm
wintry pagoda
#

w post bro

upper vapor
upper vapor
pulsar locust
uncut dagger
#

I'm reading the Readme, but it's not working.

upper vapor
uncut dagger
#

I did, just a different version from package 2.2.2.0. ๐Ÿ˜„
I also have this here:

upper vapor
#

what's the full error?

uncut dagger
upper vapor
uncut dagger
#

There are no more errors now, thanks!

upper vapor
#

np

tired charm
#

is it possible to donate instead of having a subscription

harsh thorn
#

You'd need to get a subscription and then cancel before the next renewal afaik

But if you want to be sure you can ask #patreon-support

tired charm
#

alright, thanks

spare zodiac
#

does the pickup not have HitscanHitregModuleBase?

restive turret
#

what

#

no?

#

cus those are in the items not the pickup

uncut dagger
#

How can I disable this thing?

tired charm
#

you cant

#

if you spawn a hidden dummy and change round ending condition it will probably hide but i havent tried that

uncut dagger
restive turret
#

last target

tired charm
restive turret
#

and same with regular game

uncut dagger
#

Okay, I didn't know that. Thanks!

sinful bronze
#

so we can just disable it

restive turret
#

tryitandsee

sinful bronze
#

500 coroutines

tired charm
#

the status effect is also a flame but its not the same one as last target. they can also show at the same time

fathom charm
unique crane
#

These are client side too

fathom charm
#

๐Ÿค”

#

after patch i don't see this particle

rustic pecan
#

Is there any way of forcefully applying the shyguy's trigger effect on a person?

So what I mean: A player stares at the intercom screen and at some point a photo of ShyGuy appears there. I wanna force the same effect on that player as if he stared at the actual ShyGuy. (There is no need for the actual ShyGuy to be triggered, I just wanna give humans that audio and camera effects as if they triggered 096)

tired charm
upper vapor
rustic pecan
thin shuttle
#

is best solution

rustic pecan
#

Cuz there is one when u look at 096 as I remember

rustic pecan
thin shuttle
soft turtle
#

Please give me the NetworkClient.prefabs id from HCZ_bulk_door

unique crane
soft turtle
#

2176035362

thin shuttle
#

so you can copy value

sinful bronze
#

Triangle god.

hearty shard
#

i lowk need a job

#

๐Ÿ’” ๐Ÿ’”

hearty shard
#

actually

#

idea

#

i charge ppl $100 per year of using secretapi

grand flower
unique crane
#

I'm gonna open source Eve

restive turret
#

whoa

hearty shard
#

WHAT

grand flower
#

You underestimate the motivational power of spite

hearty shard
#

smh...

restive turret
#

Power of a sprite drink

stiff kettle
#

ยฒhow can i talk with a french admin

restive turret
#

Idk

hearty shard
#

unless ur referring to a discord admin which in that case i dont think there is one

plain gazelle
#

I want to turn a ragdoll into bones, like 3114 does, via code.

I found this code snippet, but the last line only accepts a DynamicRagdoll and i cannot figure out either

  • How to spawn a Dynamic Ragdoll from a player
  • How to turn a Basic Ragdoll into a Ragdoll

Does anyone have any ideas for these two issues, or maybe know of any other/new way to turn a ragdoll into bones?

#

Both
Scp3114RagdollToBonesConverter.ConvertExisting and
Scp3114RagdollToBonesConverter.ServerConvertNew only accept dynamic ragdolls... i dont even know what the difference between dynamic and basic ragdolls is x.x

strong lagoon
#

I wanted to get yalls input on if itโ€™s possible to make a plugin that allows dual wielding weapons?

grand flower
#

unlikely

devout terrace
#

guys I got a weird problem

#
                foreach (Player player in Player.ReadyList)
                {
                    CustomItem? item = CustomItemUtils.GetPointItem(player, 3f);
...```
#
                                   at UnityEngine.Bindings.ThrowHelper.ThrowNullReferenceException (System.Object obj) [0x00018] in <6869b1608d104370ab4484f8f699b3fc>:0 
                                   at UnityEngine.Transform.get_position () [0x00006] in <6869b1608d104370ab4484f8f699b3fc>:0 
                                   at CustomItem.Utils.CustomItemUtils.GetPointItem (LabApi.Features.Wrappers.Player player, System.Single maxDistance) [0x00000] in D:\Repos\RgPlugin\CustomItem\Utils\CustomItemUtils.cs:14 
                                   at CustomItem.CustomItemManager+<Update>d__8.MoveNext () [0x00032] in D:\Repos\RgPlugin\CustomItem\CustomItemManager.cs:136

How could Player.Camera be null?

upper vapor
#

then check if the ragdoll themplate is a DynamicRagdoll

unique crane
#

Every human ragdoll is dynamic one

warped prairie
#

Bro put a spoiler on it like a jumpscare

#

Northwood code jumpscare

upper vapor
upper vapor
carmine prawn
warped prairie
restive turret
#

@carmine prawn @celest thorn
Ye i know. This conv has been already happened 2 week prior

restive turret
#

Since i everything worked when i tested it

celest thorn
#

and honestly i've been not speaking for way more

restive turret
#

With dummies

celest thorn
#

ok have fun ig

#

lol

restive turret
restive turret
#

Ok

soft turtle
#

Is it possible to disable auto-kill and auto-teleport outside the main map?
I want to make custom builds, but I'm running into an issue with auto-kill and teleports on Gate A's roof

upper vapor
#

wdym by those two

celest thorn
#

there are 2 pit colliders at the top of gate A

upper vapor
#

yeah um

#

find those objects and delete them

#

PitKiller behavior

celest thorn
soft turtle
upper vapor
#

yep

soft turtle
soft turtle
upper vapor
#

np

celest thorn
cedar jungle
spare wharf
#

Guys, how would I execute a RemoteAdmin command via code?

thin shuttle
spare wharf
#

I need to give a customkeycard to a player

unique crane
#

Then use the Wrappers we have

#

KeycardItem.CreateCustomSomething(params)

thin shuttle
#

^

#

likely you will always have better solution that sending command

thin shuttle
unique crane
#

No

#

But why would you do that

#

Well maybe if you send the payload to the client again

#

with new values

#

It might update?

thin shuttle
#

ok

thin shuttle
#

if i want a rainbow card

soft turtle
wary gust
#

Is it intended behavior that RA doesn't work on server in offline mode?

wary gust
soft turtle
thin shuttle
soft turtle
#

Ok

thin shuttle
#

GameObject trigger waht enter in

soft turtle
#

Just fing via name?

thin shuttle
#

Monobehaviours is what handling it

thin shuttle
soft turtle
wary gust
#

How fast would looping over all gameobjects and doing TryGetComponent<PitKiller>(...) be?

thin shuttle
#

very very slow

#

but

#

but

hearty shard
thin shuttle
#

there stil a way that slow

#

but less bad than that

hearty shard
celest thorn
#

BaseClass[] components = GameObject.FindObjectsOfType<BaseClass>();

#

here :3

wary gust
unique crane
spare wharf
unique crane
#

offline mode -> no sid -> no RA role

spare wharf
wary gust
wary gust
#

idk what sid is tho (steam id?)

ashen hound
#

offline mode is mostly on ip address

thin shuttle
ashen hound
#

uhm

thin shuttle
#

kinda slow

hearty shard
ashen hound
#

if you do call it once and theres no other way its fine, but every frame bad

thin shuttle
#

it's build in unity so better

#

that making a real loop for every gameobject

wary gust
thin shuttle
#

if you want naming

celest thorn
thin shuttle
#

that two pitkiller naming

celest thorn
#

but you shouldn't destroy ALL of them

soft turtle
thin shuttle
#

DarkRahhh

#

is a pit killer

#

:3

soft turtle
hearty shard
celest thorn
thin shuttle
soft turtle
thin shuttle
#

but why do you want to deleted them ?

#

i thinks that would help more

#

to help you in it

upper vapor
hearty shard
thin shuttle
#

^

upper vapor
#

Yeah ik

ashen hound
#

teleports on gate a roof? I fell its more ac thing

thin shuttle
#

no

#

there a pitkiller

#

on top of it

ashen hound
#

only if we had toggles in displaykit we could make easy debug tools with toggles etc to just do some fun stuff, show things which normally user cant see etc

upper vapor
#

SSSS

#

For now

ashen hound
#

I cant wait how displaykit gets abused to its limits

thin shuttle
#

@ashen hound

#

the three pitkiller

#

in GateA

thin shuttle
#

you don't need DiplayKit for it

#

i also used line to show MeshCollider

ashen hound
#

someone said we should make new RA if happens with displaykit lol

soft turtle
celest thorn
#

more ask nw

spare wharf
thin shuttle
#

you just send them the command ?

#

if they have to modify value ?

restive turret
#

Omw to rework custom keycards ClassDTroll1

celest thorn
wary gust
#

are there any other ways to get accurate head positions other than IFpcRole.FpcModule.CharacterModelInstance.AnimatedCharacterModel.Animator::GetBoneTransform(HumanBodyBones) which produces results which are just terrible for SCPs?

soft depot
#

mostly cuz those positions are client side

#

and the hitboxes etc... arent net identities so you cant parent anything to them client side, etc...

slate flume
# plain gazelle I want to turn a ragdoll into bones, like 3114 does, via code. I found this cod...
private static void MakeBones(DynamicRagdoll ragdoll)
  {
      ReferenceHub dummy = DummyUtils.SpawnDummy("Bones");
      Timing.CallDelayed(Timing.WaitForOneFrame, () => NetworkServer.Destroy(dummy.gameObject));
      PlayerRoleManager roleManager = dummy.roleManager;
      roleManager.ServerSetRole(RoleTypeId.Scp3114, RoleChangeReason.None, RoleSpawnFlags.None);
      var role = (Scp3114Role)roleManager.CurrentRole;
      Scp3114RagdollToBonesConverter.ServerConvertNew(role, ragdoll);
  }

Then

if (ragdoll is DynamicRagdoll dynamicRagdoll)
  MakeBones(dynamicRagdoll)
#

From my experience, unless a ragdoll is converted or destroyed (e.g. the body doesn't exist as a valid 3114 candidate), it will always be a DynamicRagdoll

#

I do the type check for safety but depending on use case you can likely just do a cast

#

As for spawning ragdolls, I just use the wrapper

plain gazelle
#

i got it to work too by 'casting' it (idk if thats the correct word in this case)

modified the dummy part of the code a bit as i may want to bonify multiple players at once and i only want a single dummy for all in that case. got it working

#

thank you though ExcitedCatBlob

slate flume
#

Of course

slate flume
#

Yeah the DynamicRagdoll is the only first-level inheritor of BasicRagdoll which is the base NetworkBehaviour class for ragdolls

#

It's like how we have DamageHandlerBase and StandardDamageHandler

plain gazelle
#

also found out that a ragdoll can be unfrozen which is interesting, although it just replaces it with a fresh copy and bypasses the ragdoll events lol
for a mini project it would be so nice to have ragdolls where at least the position is always synced, idc about the pose

slate flume
#

Afaik the networkbehaviour for ragdolls isn't synced but I asked about it a while back

#

Somewhere

#

One sec

plain gazelle
#

hm

barren pasture
#

Trying to just see if I can make certain things, uh, how do I make Lumi's TextChat plugin not block spectators and SCP's?

#

Like how the RueI extension does

restive mauve
#

I want to open a server, can anyone tell me if there's an egg for the pterodactyl panel?

barren pasture
#

Apparently there is, but I've no clue how to set one up.

#

I shouldn't say "apparently" a server I co-own is being hosted on one

restive mauve
barren pasture
#

Like I said, I have yet to set any up.

restive mauve
#

Okay, I'm just a little new to this.

#

I joined years ago to play

#

But with the new updates

barren pasture
restive mauve
#

I decided to play and, while I was at it, create my own server

barren pasture
#

There is also one on github that apparently supports exiled

restive mauve
barren pasture
#

np

restive mauve
static meteor
barren pasture
barren pasture
#

But good to know it exists

restive mauve
barren pasture
#

Well, Exiled isn't required for plugins, NW has their own framework, but in the end, it's really up to you which framework you use, and it kind of also depends on what plugins you plan on adding.

restive mauve
#

Well, I'd have to look at the frameworks that are available then.

#

As I said, I'm somewhat of a novice at this.

barren pasture
#

The two that are most used are LabAPI (the built in one) and Exiled

#

You can use both on a server tho

restive mauve
#

And the plugins I add will probably be the ones that are publicly available on the site.

barren pasture
#

You won't need Exiled if you just use the ones on the official site.

restive mauve
barren pasture
#

That's really about it.

restive mauve
restive mauve
#

I don't know what to do

barren pasture
#

Well, I don't mess with eggs, so idk

restive mauve
#

I'm vi

#

I did it

barren pasture
#

Good job

restive mauve
#

by the way

#

I'm reviewing the files

#

where I configure the server name among other things

#

admin panel permissions, etc.

#

For example, I have a server for an SCP game, but it's for mobile.

#

In admins.ini I place the user uid and its permissions

#

and in the configuration for the damage among others

#

I don't know what it's like here

barren pasture
#

This does not seem like a question, but if it is:

  1. Gameplay stuff and name/whatever is in gameplay_config.txt
  2. Admin ranks and perms and similar are in remoteadmin_config.txt
  3. Where these files live is based on whichever platform you are running on (windows or linux)
restive turret
#

config/SCP Secret Laboratory

restive turret
#

in ptero i assume

restive mauve
#

I'll check them now.

barren pasture
#

Eggs are different than normal in these instances, aren't they?

restive mauve
restive turret
#

There are subfolders there, check what's inside

restive mauve
barren pasture
#

Again, I don't mess with eggs/pterodactyl, so

restive mauve
barren pasture
#

Installing the server software itself using SteamCMD but eggs are more organized.

restive turret
#

Download from steam itself

#

Eggs good for server hosting.
Download from steam is good for plugin dev

#

But if you already have providers elsewhere you ain't need to care much about what or where to download SL

barren pasture
#

So what do y'all think would be the easiest version of SL to mod?

restive mauve
barren pasture
#

I'm just asking everyone in general

restive mauve
#

oh ok

#

@restive turret I already found the files but I don't see how to password-protect the admin panel

#

Can you help me?

barren pasture
#

You shouldn't

#

It's just a bad idea in general. If you need to give people ranks, do it manually.

barren pasture
#

Hold

#

For each badge (admin badge used as an example):

admin_color: purple
admin_cover: true
admin_hidden: false
admin_kick_power: 254
admin_required_kick_power: 255```
Just replace the `admin` words with your badge ID.
Also register the badge by adding ` - admin` under `Roles`, and give a badge permissions by adding them inside the brackets of the permissions you want.
#

There should be an owner one as an example

#

Also if I remember correctly, purple is a disallowed color

barren pasture
#

In remoteadmin_config.txt

#

under .config/SCP Secret Laboratory/configs

#

And then to actually assign it to a player, remember to replace the @steam and @discord ID's with the right player ID's, and owner with the right badge for that player.

restive mauve
#

I did it

#

thank you

#

How do I install plugins now?

#

like for example

upper vapor
#

You can fins some guides here

worn gull
#

(Spammed localadminlog)

unique crane
#

Do you have any other errors other than that?

#

check right before the spam starts

worn gull
hearty shard
#

@unique crane DAVIDDDDDD

#

bestieeeee

unique crane
#

What

hearty shard
#

hi!!!

unique crane
#

Hello

hearty shard
#

hmmmm

#

....

#

i hate

#

transpilers

#

i cant say that in one sentence automod hates me๐Ÿ’”

unique crane
#

XDDDD

modern lark
#

Oh

hearty shard
#

how does one

unique crane
#

Guess you gotta love them in here

hearty shard
#
public void UpdateTargetCount()
  {
    if (!NetworkServer.active)
      return;
    this.TargetCount = ReferenceHub.AllHubs.Count<ReferenceHub>((Func<ReferenceHub, bool>) (hub =>
    {
      Faction faction = hub.GetFaction();
      int num;
      switch (faction)
      {
        case Faction.FoundationStaff:
        case Faction.FoundationEnemy:
          num = 0;
          break;
        default:
          num = faction != Faction.Flamingos ? 1 : 0;
          break;
      }
      return num == 0;
    }));
  }
#

if i wanna patch the uhhh .Count

languid temple
unique crane
#

I would just prefix it

modern lark
#

I'm gonna create an issue just to add the player.IsTarget property instead of patching everything Kek

hearty shard
languid temple
hearty shard
#

im adding to secretapi the complicated way

#

but i have no clue how to do this

forest sentinel
hearty shard
#
private static MethodInfo TargetMethod()
        {
            PrivateType = typeof(RoundSummary).GetNestedTypes(all)
                .FirstOrDefault(currentType => currentType.Name is "<>c");
            if (PrivateType == null)
                throw new Exception("State machine type for <>c not found.");
            MethodInfo updateTargetCountFunction = PrivateType.GetMethods(all).FirstOrDefault(x => x.Name.Contains("UpdateTargetCount"));

            if (updateTargetCountFunction == null)
                throw new Exception("UpdateTargetCount method not found in the state machine type.");
            return updateTargetCountFunction;
        }
#

oh

hearty shard
#

ah yes

#

thank you stylecop

#

i appreciate you

#

harmony is gonna drive me crazy

restive turret
#

you already crazy

hearty shard
#

ok but like

#

[2026-04-07 14:45:03.964 +02:00] [ERROR] [SecretAPI] Patching SecretAPI.Patches.Features.RoundIgnoreCountPatch

#
internal static class RoundIgnoreCountPatch
{
    private static MethodInfo TargetMethod()
    {
        Type nestedType = typeof(RoundSummary).GetNestedTypes(AccessTools.all)
            .FirstOrDefault(currentType => currentType.Name is "<>c") ?? throw new Exception("Could not locate state machine");

        MethodInfo updateTargetCountFunction = nestedType.GetMethods(AccessTools.all)
            .FirstOrDefault(x => x.Name.Contains("UpdateTargetCount")) ?? throw new Exception("Could not locate UpdateTargetCount method in state machine");
        return updateTargetCountFunction;
    }

    private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
    {
        Logger.Error("Did this log?");
        CodeMatcher matcher = new CodeMatcher(instructions)
            .Start()
            .CreateLabel(out Label label)
            .Insert(
                new CodeInstruction(OpCodes.Call, CodeInstruction.Call(typeof(RoundIgnoreCountPatch), nameof(IsPlayerIgnored))),
                new CodeInstruction(OpCodes.Brtrue_S, label));

        return matcher.InstructionEnumeration();
    }

    private static bool IsPlayerIgnored(ReferenceHub hub) => Player.Get(hub).RoundIgnoreStatus.HasFlagFast(RoundIgnoreStatus.ScpTargetCount);
}
#

but

#

transpiler method never runs

#

im so confused

#

wait

#

is it throwing exception

restive turret
#

why not just patch UpdateTargetCount?

hearty shard
#

omg do harmony exceptions not show up in console

hearty shard
#

Count(hub => {

})

#

yk?

restive turret
#

yes but why not just the whole stuff

hearty shard
#

because

restive turret
#

less work on you

hearty shard
#

i cant be arsed for yall to change it and then i have to continue doing it

#

nahh

#

this is a one and go

#

unless yall change the method name

restive turret
#

will change how it works

#

then maybe

hearty shard
#

i literally wrap it in a try catch

restive turret
#

gonna move that into a new function

hearty shard
#

grr

restive turret
#

hmm it can be static too

hearty shard
#

i really dont understand why the transpiler isnt firing

#

..........

#

i think ik why

#

no i dont

#

im confused

restive turret
#

L

hearty shard
#

0 clue

restive turret
#

*Lol

hearty shard
#

TargetMethod also isnt firing

#

wait

#

is TargetMethod not even correct name

#

surely it is

restive turret
#

Isnt it TargetMethods

hearty shard
restive turret
#

Ah

#

Did you added attributes

hearty shard
#

yes

#
[HarmonyPatchCategory(nameof(PlayerRoundIgnore))]
internal static class RoundIgnoreCountPatch
{
    private static MethodInfo TargetMethod()
    {
        Logger.Error("1");
        Type nestedType = typeof(RoundSummary).GetNestedTypes(AccessTools.all)
            .FirstOrDefault(currentType => currentType.Name is "<>c") ?? throw new Exception("Could not locate state machine");

        Logger.Error("2");
        MethodInfo updateTargetCountFunction = nestedType.GetMethods(AccessTools.all)
            .FirstOrDefault(x => x.Name.Contains("UpdateTargetCount")) ?? throw new Exception("Could not locate UpdateTargetCount method in state machine");

        Logger.Error("Found patch method!");
        return updateTargetCountFunction;
    }

    private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
    {
        Logger.Error("Started patch!");
        CodeMatcher matcher = new CodeMatcher(instructions, generator)
            .Start()
            .CreateLabel(out Label skip)
            .Insert(
                new CodeInstruction(OpCodes.Call, CodeInstruction.Call(typeof(RoundIgnoreCountPatch), nameof(IsPlayerIgnored))),
                new CodeInstruction(OpCodes.Brtrue_S, skip));

        return matcher.InstructionEnumeration();
    }

    private static bool IsPlayerIgnored(ReferenceHub hub) => Player.Get(hub).RoundIgnoreStatus.HasFlagFast(RoundIgnoreStatus.ScpTargetCount);
}
#

this works for other patches (specifically prefixes) but doesnt work when it comes to TargetMethod here

wary gust
hearty shard
#

it needs to know what method to transpile

#

but it neveer calls to get that information

wary gust
#

idk. i don't use PatchCetgories whatever that is

hearty shard
#

at very least it should be logging "1"

hearty shard
#

but

#

it works just fine for other patches

restive turret
#

Maybe bc other patches where prefix one

hearty shard
#

yeah but

#

i have no other patches on RoundSummary

#

TargetMethod works just fine on a different thing

#

i just tested lmao

#

oh

#

...

#

actually no thats not it

#

the more i look at it the more confused i get

#

lmao

#

@restive turret im

#

gonna kill you

#

turns out that you ALWAYS need [HarmonyPatch] attribute

#

brah

restive turret
#

Plz no

hearty shard
#

now i just need to fix the patch

hearty shard
#

i thought itd at least go through and check

#

but ig fair enough

#

Unexpected unemittable operand type HarmonyLib.CodeInstructio

#

im so smart ig

#

anddd

#
private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
    {
        CodeMatcher matcher = new CodeMatcher(instructions, generator)
            .Start()
            .CreateLabel(out Label skip)
            .Insert(
                new CodeInstruction(OpCodes.Ldarg_0),
                CodeInstruction.Call(typeof(RoundIgnoreCountPatch), nameof(IsPlayerIgnored)),
                new CodeInstruction(OpCodes.Brtrue_S, skip),
                new CodeInstruction(OpCodes.Ldc_I4_0),
                new CodeInstruction(OpCodes.Ret));

        return matcher.InstructionEnumeration();
    }
#

that works

#

probably

#

i havent tested it ingame but it doesnt error so yk

#

now i just need to do all that all over again for _ProcessServerSideCode ๐Ÿ’”

celest thorn
#

I wanna ask something strange, but how could i go with a system that has 100% certain something cannot be tampered and at the same time is signed? because i wanna make a system that allows server to have a key and send data to a server and this must be signed and impossible to fake stuff

somber dagger
#

For the base of the idea, I believe you'd want something like SSH keys - zero idea how you'd implement that into a plugin, but that's probably a good basis

celest thorn
restive turret
#

RSA mostly

celest thorn
#

The only thing tho im a bit skeptical is how do i keep track which RSA Key is of who

#

like do i generate and then ask the server to self identify?

restive turret
#

Ye

#

You generate a pair and you assign it with the given I've

celest thorn
#

and then the server when sending a packet a header with name of the server

#

but then the problem would be what if a server impersonate another one?

#

by changing the name of the server?

restive turret
#

Location?

somber dagger
#

You could probably just do that on init of the plugin and store it in an internal folder

Also, aren't public keys essentially the fix to this?

celest thorn
#

like how do i know that public key is from that server and none is impersonating it?

#

because maybe what i could do is store it on the db and then give to the client an small UUID

#

that they can use?

somber dagger
restive turret
#

Ye IP is something I go for

celest thorn
#

i maybe could save myself by doing something like saving the public key on the db

#

and first log is the key tied to the db

restive turret
#

And? You can get the public key from the private

celest thorn
#

so like

PublicKey: "..."
IP: "..."

celest thorn
#

like i know for sure that public key is from them

#

like none else stole it

restive turret
#

Bro what is the server and what is the client in this case

somber dagger
#

You could also pass some HWID info, possibly

#

Just for redundancy

celest thorn
#

so to track stats of users and at the same time knowing which server they played and its VERIFIED that is that server and hard that someone could change stats and even if they fake them

#

it can be instant banned via RSA keys

restive turret
#

You still have not answered my question

celest thorn
#

and client a C# plugin

restive turret
#

Is the game server the server?
Is the game server is the client?

celest thorn
#

the client is the server in this case

#

and the website is the server

#

the website will verify RSA Key and if everything has been signed correctly the server will just send info

restive turret
#

You can do is ask for:
Enc (IP + GUID + Key)

celest thorn
#

so hashing with the public key all of this info and send them as a key

#

to know if everything is ok

restive turret
#

When you verify you generate a key and a guid to the server

#

Hold on

#

If you gimme like 5-15 min can give some example

celest thorn
#

ok! nw

#

im trying to think it in a way that it has credibility and can be easily spotted fakes from real

hearty shard
#
private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
    {
        CodeMatcher matcher = new CodeMatcher(instructions, generator)
            .MatchEndForward(new CodeMatch(CodeInstruction.Call(typeof(PlayerRolesUtils), nameof(PlayerRolesUtils.GetTeam), [typeof(ReferenceHub)])))
            .CreateLabel(out Label skip)
            .Insert(
                new CodeInstruction(OpCodes.Ldarg_0),
                CodeInstruction.Call(typeof(RoundEndIgnorePatch), nameof(IsPlayerIgnored)),
                new CodeInstruction(OpCodes.Brtrue_S, skip),
                new CodeInstruction(OpCodes.Ldc_I4_0),
                new CodeInstruction(OpCodes.Ret));

        return matcher.InstructionEnumeration();
    }
#

theoretically works

#

actually

#

in a foreach

hearty shard
#

Ldarg_0 would be the loop right

hearty shard
celest thorn
#

and 0 would be "this"?

#

let me check because im not sure

hearty shard
#

it actually might be

#

i mean

#

i can just find out kekkek

#

it either works or it doesnt

#

[2026-04-07 15:57:50.601 +02:00] [ERROR] [LabApi] [LOADER] Couldn't enable the plugin 'SecretAPI', Version: 3.0.0.0, Author: '@obvEve'
[2026-04-07 15:57:50.619 +02:00] [ERROR] [LabApi] System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> HarmonyLib.HarmonyException: IL Compile Error ---> System.FormatException: Method virtual System.Boolean <_ProcessServerSideCode>d__58::MoveNext() cannot be patched. Reason: Invalid IL code in (wrapper dynamic-method) RoundSummary/<_ProcessServerSideCode>d__58:RoundSummary+<_ProcessServerSideCode>d__58.MoveNext_Patch0 (RoundSummary/<_ProcessServerSideCode>d__58): IL_0123: br IL_066f

#

wait

#

actually

#

it shouldnt even return false should it

#

no

#

it shouldnt

#

insert there

#

then skip to the end of the loop if ignored

hearty shard
#

this is confusing

#

my head hurts

#

IL sucks

celest thorn
#

.locals init (
[0] class [System.Collections]System.Collections.Generic.List1<string> stringlist, [1] int32, [2] valuetype [System.Runtime]System.Span1<string>,
[3] int32,
[4] valuetype [System.Collections]System.Collections.Generic.List`1/Enumerator<string>,
[5] string s
)
Has it

#

so most likely it will be the last one

#

so do last + 1

#

and use that one

#

ig?

hearty shard
#

Huh

celest thorn
#

if you check what i sent you the decompiler does

#

IL_0054: ldloc.s 5
IL_0056: call void [System.Console]System.Console::WriteLine(string)
IL_005b: nop
To call up the string in the foreach

#

as you can see