#plugins-dev-chat
1 messages ยท Page 205 of 1
whats that
Gravity mechanics
Didnt actually see method cause not mine part of 1st april
Gimme a sec
Like this
I think the player gravity can be set to any vector
but your model will always be upright afaik
For every tyrant, a tear for the vulnerable
Skill issue?
In every lost soul, the bones of a miracle
Omg soooo cuteeeeee
I suppose
been a while since I even bothered using cassie, maybe its changed
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
Lmao that's nice
106 is evil, its sooooo cuteeee
@plush summit
#FreeRats
why wait for an update when you can just blindly code it instead
On god please use ruei
I promise
i did :3 (then switched to default hint system ๐ )
why you wanna torture yourself?
the pain makes me stronger (the lies i tell myself)
I tried myself doing an hint and it sucked compared to 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
You know you can patch that thing?
Ruei allows you to do that
If you just use labapi it should work fine
true
i think it just sometimes just didn't display at all though while reui was running as a plugin,
maybe that bug has been fixed since I've used it though
ReUI
are there any more sample DisplayKit code screenshots to use as api reference
(I'm guessing the entire thing)
Feels like a waste of time when we don't know the API yet
I always thought the split command for subtitles were completely based on CASSIE Itself and cannot be manually controlled
Maybe theres a plugin to manually edit the time between split commands
empty messages
yes empty
Splits between msg and subs in theory should sync up
Or spam a with a symbol with size=0
One thing I find annoying is that the MTF Announcement subtitles are not synced cuz the subtitles for All Remaining etc etc last too long
So sometimes its not it passing through too fast, its just not passing fast enough ๐ญ
itll be a wrapper for like unitys thing
UI Toolkit
$SLEEP

NOOO I MEAN IN TRANSLATIONS ๐ญ
and ever since CASSIE Was sped up in the cassie refactor it kinda got worse
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
It also seems that the CASSIE Subtitles are more correctly timed when you don't add the announcement bells
Even if I use the sleep command to put CASSIE Back at its original speed before the Refactor, subtitles are still pretty delayed
i love RATTTS
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
i mean is it worth just doing the bitwise

wait
i just realized
nw already has one for DoorPermissionFlag
wait nvm thats not what im doing anyway
im stoopid rn
right now?
ลฑ
i hate you
thanks
also how does bitwise work again
specifically for the enum check

like what does (flag & 2ndflag) == 2ndflag do
that's hasflag
right
behind the bitwise operation
what does it do to & it
its mostly just what & does in bitwise
so you have
flag = 0101
other = 0100
you & each bit (1 if the bit is the same in both)
0101 & 0100 = 0100
both
that's flag & ~flagToRemove
exactly
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
basically, yeah
np
what if i refuse to document HasFlagFast
because
its explanatory
i dont need to explain
problemo solved
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
also lowk
its a bit annoying
you cant just
look specifically for flags enum
cuz having just 1 method would be so much nicer
๐ญ
you can use this
skill issue
should've written "priority brought to you by apple"
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
compile
compiler is (most of the time) not dependent on the runtime
then theres no point doing HasFlagFast then
Usually yes
[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);
}

Whadddehel
stolen from the hell gates of stackoverflow
gah dayum
apparently 25% better than HasFlag but, 10-15% slower than bitwise
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:

yeah
which explains why its still worth doing on older
yeeeees
No
this would prove the opposite
It jist missed registering some keys
jist
Fucking hell
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
@plush summit
i'd assume ai cuz uhhh
he is behind that part of update
cassie doesn't have all those words 
but if I remember correctly - someone just ai generated this
ai
i took it from youtube
it and one more
you censored the second one but not the first one 
Wth xd
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)
@plush summit Please don't post videos with slurs, ty
ok, im sorry 
Petition to add Wilted rose emoji into SCP SL
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
do you think I could still count DNTs as another player count tho?
Why do you need that
well if you wanna calcluate the average percentage of players who are opted in
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
Yeah but why
curiosity. it was an example tho
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
Absolutely
This is the principle guideline and the rule of thumb
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
ye I can answer with a "just dont collect it"
i mean ExPlayerEvents should be PlayerEvents
and other than that youve not specified an actual issue
Its also using Exileds Enabled and Disabled overrides on labapi 
no
Did you see Claude
As in the source code or how it performes on SL plugins?
I didn't look much into it as I wasn't really interested in it to begin with
ah
but the way it leaked is funny
I hope AI dies by the end of 2027
and we'll all be happy again
(jk, actual useful for humanity AI is fine)
Ai sucks at handling sl but using it for other things more programming related is not that bad
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
Learning programming through AI is a recipe for disaster
you didnt read what i said then
I'm seeing it more and more with juniors
if you just paste whatever it says instead of putting in your own research, yes
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
you can ask the llm model to provide a source, if it cant do that
then its most likely hallucinating

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
the brain is wired to seek out the path of least effort
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
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
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
well yeah, relying completely off of ai is not the way one should do it ๐ญ
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
Nah just let Claude do the work and ignore ppl that complain of bugs xD
Same lmfao
hehehe my april fools mode in my plugin is peak
but its now disabled by default cuz its not april 1st anymore
What was it
Does anyone have a link to supported emojis/symbols for game?
thx
np
oh my god I didn't even think of that but that is SO useful thank you


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
Lol
How bad of a plugin idea is this?
Even for a joke, I think I'll just burn that folder
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.

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
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?
EXILED/Plugins/, right?
Also, if they're generating configs for the actual plugins - that usually means they're loaded, could you paste console output?
Go to exiled for exiled support
True โ
the problem is it doesnt
ill send you on dms
Mmkay
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
is it openxr or openvr?
OpenVR, fought with them both and that one worked first.
is it possible to tell the client to reset the values of SSS?
change the IDs 
I was told you have to send under same id different kind of setting and them the one you want
Hi, I need help. I set it up this plugin
https://github.com/Axwabo/ScpProximityChat
and it doesn't work. Can anybody help me please?
show your plugins and dependencies
make sure you've put each DLL in their appropriate location
I have everything in dependencies, because if I upload requested DLLs to plugins, it shows errors in console.
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
I moved DLLs to the correct folders (I think) and in-game there's no hint, that plugin works.
When is this called this method
/// <summary>
/// Gets the physics module for this ball.
/// </summary>
public new PickupStandardPhysics PhysicsModule => PhysicsModule;
Its calling itself
Report it
Use the base game ones not wrapper
yez
texture stretched
You can report and i can ignore it
I can maybe fix game bugs or labapi but these textures and stuff is just far for what i used to do
@languid temple ๐ฅ
Atleast its not fucking logen paul
!softban 1222260290993917984 account compromised; change password
Done. Enough chaos.
Ty
@restive turret
Legendary stack overflow
I'm on unofficial break
My leg is ded
And its 00:02
Will check back tmr
Cus gonna pass out
besties who wants it
i was gonna add it to secretapi to realize itd be another feature no one would use
๐ฅ
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
i mean tbf that one is a wrapper for it specifically for that reason
What happened to your github account
name change
ah
i forgot to update my disc
what's the new handle?
@hearty shard
ok well
obvevelyn
i didnt mean to ping myself
or obveve
one of the 2
I was about to ask if the heart emoji is included lol
Maybe that's an IDE issue?
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
Also was there a specific reason for thos question
I wanted to check out if my copied SSSS is outdated 
Jokes aside, I just wanted to check out what changed
ah
i go eep now tho
can you fix the bug which causes scp953 to not be released yet 
w post bro
Read the readme please
git config --global user.name newname
Can you fix the bug where you're not paying for patreon

Nah they just gotta git gud
do you have 0Harmony in your dependencies? if not: https://github.com/Axwabo/ScpProximityChat/issues/2
I did, just a different version from package 2.2.2.0. ๐
I also have this here:
what's the full error?
try SecretAPI 2.0.2
There are no more errors now, thanks!
np
is it possible to donate instead of having a subscription
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
alright, thanks
does the pickup not have HitscanHitregModuleBase?
How can I disable this thing?
you cant
if you spawn a hidden dummy and change round ending condition it will probably hide but i havent tried that
But I don't see that kind of fire in regular games. Why is it there on a private server?
last target
it only appears when there is 1 human left after like 30 seconds
and same with regular game
Okay, I didn't know that. Thanks!
tryitandsee
500 coroutines
the status effect is also a flame but its not the same one as last target. they can also show at the same time
LastHumanTracker patch can you help
These are client side too
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)
you can use Scp096TargetsTracker::AddTarget. no clue if there is an labapi way
if you specifically only want the audio cue, get the Scp096TargetsTracker and send a fake rpc to the target
Okay, got it!
Can a visual effect of camera zoom be manually applied on a person or nah?
npc scale to Vector3.zero
is best solution
Cuz there is one when u look at 096 as I remember
Thanks!
nope
also you can make sure the Npc is place the position your image is set
Please give me the NetworkClient.prefabs id from HCZ_bulk_door
Hmmmmmm you can search value by name
if you want Exiled have an enum with all of them
so you can copy value
Triangle god.
secretapi usage drops to zero, open source rewrite gets released a week later
I'm gonna open source Eve
whoa
WHAT
nuh uh
theyll pay it
You underestimate the motivational power of spite
smh...
Power of a sprite drink
ยฒhow can i talk with a french admin
Idk
speak french
unless ur referring to a discord admin which in that case i dont think there is one
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
I wanted to get yalls input on if itโs possible to make a plugin that allows dual wielding weapons?
unlikely
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?
XDDDD
get the role template and check if it's an IRagdollRole
then check if the ragdoll themplate is a DynamicRagdoll
Every human ragdoll is dynamic one
New NW Moment
why
like why
yeah i noticed that immediately when i checked the bug
it is
no difference
@carmine prawn @celest thorn
Ye i know. This conv has been already happened 2 week prior
idk
Since i everything worked when i tested it
and honestly i've been not speaking for way more
With dummies
I know cus i remember it
.
Ok
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
wdym by those two
the pit colliders
there are 2 pit colliders at the top of gate A
ugh
yeah um
find those objects and delete them
PitKiller behavior
not me lol obv
^ you got your answer
Is that what it's called?
yep
Thx
Thanks
np
np :3
5 months btw
Guys, how would I execute a RemoteAdmin command via code?
first comment is don't
second comment is why ?
third comment i can explain :3
I need to give a customkeycard to a player
is there possibility to modify value after it's spawn on LabAPI ?
No
But why would you do that
Well maybe if you send the payload to the client again
with new values
It might update?
ok
Is this a GameObject or a Monobihavior?
Is it intended behavior that RA doesn't work on server in offline mode?
monobehavior
How do I find it? Do I have to go through the entire game? It'll take a long time
both
GameObject trigger waht enter in
Just fing via name?
Monobehaviours is what handling it
I think better to just disable trigger
How fast would looping over all gameobjects and doing TryGetComponent<PitKiller>(...) be?
you shouldnt be looping over all gameobjects in the game
like unless theres no other way (such as no list or instance wtv)
well I don't think PitKiller has one
Well it works as it should
the colors dont work then...
offline mode -> no sid -> no RA role
it's just that it used to work a few updates ago
password login used to be fine
idk what sid is tho (steam id?)
offline mode is mostly on ip address
i was searching to give that
how slow is this one?
uhm
kinda slow
Like this?
isnt that the same lol
if you do call it once and theres no other way its fine, but every frame bad
most unity things are bad every frame
actually there no other way
if you want naming
yes
that two pitkiller naming
but you shouldn't destroy ALL of them
thx
:(
my point was that isnt that what we said originally was bad, but yes in this case its fine
Just leave it () no args
there area where you would get stuck
Ok
but why do you want to deleted them ?
i thinks that would help more
to help you in it
GetComponentsInChildren<PitKiller>
ur late to the party
^
Yeah ik
teleports on gate a roof? I fell its more ac thing
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
I cant wait how displaykit gets abused to its limits
i already show pitkiller with Primitive
you don't need DiplayKit for it
i also used line to show MeshCollider
someone said we should make new RA if happens with displaykit lol
https://cdn.discordapp.com/attachments/1323219585851199510/1470046072867917835/image.png?ex=69d50417&is=69d3b297&hm=3038463591cd2c02359211d55df21ec13721b9c325ca1d09c774ebfb956d9e8c&
https://cdn.discordapp.com/attachments/1323219585851199510/1471551780411277483/image.png?ex=69d48fa4&is=69d33e24&hm=56e189fa558b7a6d31278a2112319c1899a411fb315355faad378b73088af3d0&
That's not it. There's only one trigger on the surface, and it's on the CI car
thats not something idk how to answer
more ask nw

๐ญ
I also need to make it easy for server admins to change. (not hard-coded)
then they can just use basegame command ?
you just send them the command ?
if they have to modify value ?
Omw to rework custom keycards 
just rework again custom keycards
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?
nope
mostly cuz those positions are client side
and the hitboxes etc... arent net identities so you cant parent anything to them client side, etc...
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
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 
Of course
wack!
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
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
Afaik the networkbehaviour for ragdolls isn't synced but I asked about it a while back
Somewhere
One sec
[Some conversation I had a few months ago](#plugins-dev-chat message)
hm
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
I want to open a server, can anyone tell me if there's an egg for the pterodactyl panel?
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
Could you please send me the link?
Haha, don't worry.
If I can find it lol
Like I said, I have yet to set any up.
Okay, I'm just a little new to this.
I joined years ago to play
But with the new updates
I decided to play and, while I was at it, create my own server
There is also one on github that apparently supports exiled
thank you so much
np
What does it mean that this is exiled?
Exiled is a plugin framework
Did not see that one
But good to know it exists
So this is the egg I should use to make a server that will have plugins?
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.
Well, I'd have to look at the frameworks that are available then.
As I said, I'm somewhat of a novice at this.
The two that are most used are LabAPI (the built in one) and Exiled
You can use both on a server tho
And the plugins I add will probably be the ones that are publicly available on the site.
You won't need Exiled if you just use the ones on the official site.
Just in case, what's the difference?
The people
That's really about it.
Oh okay
okey
This is what I see on the console
I don't know what to do
Well, I don't mess with eggs, so idk
Good job
thank you
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
This does not seem like a question, but if it is:
- Gameplay stuff and name/whatever is in gameplay_config.txt
- Admin ranks and perms and similar are in remoteadmin_config.txt
- Where these files live is based on whichever platform you are running on (windows or linux)
config/SCP Secret Laboratory
linux
in ptero i assume
I'll check them now.
Eggs are different than normal in these instances, aren't they?
thank you
There are subfolders there, check what's inside
Again, I don't mess with eggs/pterodactyl, so
What's another way to create a server besides using eggs?
Installing the server software itself using SteamCMD but eggs are more organized.
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
ok
So what do y'all think would be the easiest version of SL to mod?
I honestly don't know, I'm just starting out
I'm just asking everyone in general
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?
You shouldn't
It's just a bad idea in general. If you need to give people ranks, do it manually.
How is it done?
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
Does it have to be here?
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.
I did it
thank you
How do I install plugins now?
like for example
Plugins should include installation steps in the readme, but the process is the same for most plugins
You can fins some guides here
This seems like player gameobject didnt get removed properly or something
Do you have any other errors other than that?
check right before the spam starts
If it happends next time I will check that cuz there were 5-6 log files which were 10 gb or more and I needed to delete them
What
hi!!!
Hello
hmmmm
....
i hate
transpilers
i cant say that in one sentence automod hates me๐
XDDDD
how does one
Guess you gotta love them in here
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
of you only read it till the letter s you'll understand 
i know
I would just prefix it
I'm gonna create an issue just to add the player.IsTarget property instead of patching everything 
eh i specifically want to avoid the issue of yall changing smth and then i need to reimplement 
i mean
now you know
I'm not saying it's the best way, but maybe it can help, for example.
https://github.com/ExMod-Team/EXILED/blob/dev/EXILED/Exiled.Events/Patches/Generic/RoundTargetCount.cs
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
0>CSC: Error SA1201 : A <unknown> should not follow a property (https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1201.md)
ah yes
thank you stylecop
i appreciate you
harmony is gonna drive me crazy
you already crazy
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
why not just patch UpdateTargetCount?
omg do harmony exceptions not show up in console
im patching the Func
Count(hub => {
})
yk?
yes but why not just the whole stuff
because
less work on you
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
wait they should
i literally wrap it in a try catch
gonna move that into a new function
grr
hmm it can be static too
i really dont understand why the transpiler isnt firing
..........
i think ik why
no i dont
im confused
L
0 clue
*Lol
TargetMethod also isnt firing
wait
is TargetMethod not even correct name
surely it is
Isnt it TargetMethods
i mean i got that from here
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
maybe you can still try adding the [HarmonyTranspiler] attribute to the method
doesnt matter when TargetMethod isnt getting called
it needs to know what method to transpile
but it neveer calls to get that information
idk. i don't use PatchCetgories whatever that is
at very least it should be logging "1"
custom thing
but
it works just fine for other patches
Maybe bc other patches where prefix one
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
Plz no
now i just need to fix the patch
Told ya
brah
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 ๐
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
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
Yea obv private key is on the server and public key is given to a server
RSA mostly
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?
so i would do like a command to set it up
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?
Location?
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?
yes but the problem with that is like if i need to verify who it is from how?
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?
I see the issue now, yeah
It's possible you could do it off IP -- since servers on the server list have all their IPs public (and I assume there's an API to check?) - would that work?
Ye IP is something I go for
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
And? You can get the public key from the private
so like
PublicKey: "..."
IP: "..."
what i mean is tying it to a server
like i know for sure that public key is from them
like none else stole it
Bro what is the server and what is the client in this case
Im trying to think of a easy struct for a project like Stats and shit like that
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
You still have not answered my question
The server is gonna be most likely nodejs for the website
and client a C# plugin
Is the game server the server?
Is the game server is the client?
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
You can do is ask for:
Enc (IP + GUID + Key)
so hashing with the public key all of this info and send them as a key
to know if everything is ok
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
ok! nw
im trying to think it in a way that it has credibility and can be easily spotted fakes from real
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
what are you doing?
Ldarg_0 would be the loop right
Patching RoundSummary::_ProcessServerSideCode
isn't it Ldarg_1 loop?
and 0 would be "this"?
let me check because im not sure
it actually might be
i mean
i can just find out 

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
.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?
Huh

