#plugins-dev-chat
1 messages · Page 159 of 1
...
It worked now it doesn't
like any other way???
i have no idea
check the local indexes and see if they match in the updated assembly-csharp
add [HarmonyDebug] to the class to print the outputted IL to the desktop
thanks
np
Hi, I know this isn't necessarily the right place to ask but it seems the most appropriate, anyone have the most up to date version of SCP:SL servers for pterodactyl?
the egg
um
oh
the egg not the server i was about to say
I'm trying to get into LABAPI
parkeymon
but I want to set up a test server
this should work
Ahh it didn't look like it was up to date but okay thanks!
https://github.com/ExMod-Team/PteroEggs technically this one too
theyre the same in practice tho
one is a modified parkeymon the other is official
all eggs should still work without issue, its mostly the exiled support that'd be outdated
didnt u say labapi
exiled is different and if ur just doing labapi it doesnt rly matter

I wish I knew what the difference was
because it used to be something different from exiled a long time ago
Ah, which would be better to use?
I imagine LabAPI but I know the docs aren't finished since LabAPI isn't
LabAPI has been fully released
it has some stuff missing like a 1509 wrapper but
its minor stuff tbh
oh
the github is wrong then
" LabAPI
This documentation isn't finished as LabAPI isn't fully released yet."
So is there a uh egg for vanilla SL or should I just install the exiled one
i mean this one is fine
its what i use
i just didnt enable exiled
problem solved

Uh oh

No LabApi update today 🙁
if anyone is interested #advertisements message
why not #1336031121699377213 ? most people will look there instead of #advertisements
I assume because it's not fully released yet and still being tested
Are there any Events for Connection, like Requested challenge for incoming connection?
preauthenticating
How can i check if a player was revived?
Scp1509Item.RevivedPlayers
yes
i'd recommend using RoleChanged unless you specifically wanna hook into the position set event
probs not a static
And so how do i get it from RoleChanged
patch in your own event for when a player gets revived by 1509
I mean i could check, if the player is revived but is not Scp0492
that should do the job
I suppose
As long as you don't override role assignment for any reason
in RoleChanging or whatever
shocking discovery
you need a reference to the item instance
or
Scp1509Item.List
yes
there's NO list
oh
if (ev.NewRole.RoleTypeId != RoleTypeId.Scp0492 && ev.ChangeReason == RoleChangeReason.Resurrected)
return;
This does the job ig
are you doing this for 049 or 1509
1509
1509 change reason is Resurrected
and if its not 0492 Then that means he got resurrected BY the 1509
ya
- Not static because every item has its own list.
- Publicize and it should be _revivedPlayers
Hi. Is it possible to attach schematic to a player bone via transform?
It is possible to attach it to the player
But not a specific bone
but you can give it local offset
it wont, however, match the rotation correctly
yep
know
but the problem is that the schematic will be attached to the root transform of the player, and because of this, it just hangs mostly in the air, not moving behind the animation (I don't really understand)
Conventionally, I am now attaching schematic to the 096 "head", but it disappears after a second, I don't know why.
:( how?
you sure your giving it 0,0,0, position
Does it need to be pixel perfect?
I dont think so
096's animations arent that wobbly
SchematicObject.transform.SetParent(headTransform, false);
SchematicObject.transform.localPosition = Vector3.zero;
SchematicObject.transform.localRotation = Quaternion.identity;
SchematicObject.transform.localScale = Vector3.one;
correct?
that seems fine
yep
Transform model = Player.Transform.Find("SCP-096 Model Halloween(Clone)");
if (model == null)
{
return;
}
Transform headTransform = FindChildRecursive(model, "head");
if (headTransform == null)
{
return;
}
public static Transform FindChildRecursive(Transform parent, string name)
{
foreach (Transform child in parent)
{
if (child.name == name)
return child;
Transform found = FindChildRecursive(child, name);
if (found != null)
return found;
}
return null;
}
i think is this not correct to get the transform component
again, you can't parent it to a specific transform component in the player
Although not... if the schematic appears and disappears after a second, then everything is correct.
you must attach it to the player's gameobject and offset it
sad
btw you can access the character model via IFpcRole.FpcModule.CharacterModel
Animation 096 in a calm way like some drunk
bruh
what everyone has to do rn to achieve schematics-following-animation is just teleporting schematic to hitbox/bone frequently enough to both look fine and not kill TPS
When you attach a schematic to a bone, example, a head, it disappears after a spawn in a second.
Not tested with hitbox
you cant attach it you just set the position
in a coroutine
ok, i will test it
why can't we parent to bones anyway?
they have transform
or monobehaviour
No netid i guess
yep, i too think
you mean like in Update()/FixedUpdate()?
or just bones will be recreated at least in one frame
well it makes sense that there would be no netid, it's not needed to be synchronized with other clients
yes
cant see why would it be better if its a lot easier to just use coroutine with like delay parameter
I never learned from the top of my head to write coroutines, so just using monobehaviour
this also saves the headache of .CancelWith()

-# not really a headache but easy to miss
yeah monobehaviour automatically destroys every loop
what
when object is destroyed
i have this(and i know that i probably should move the offset to some static field)
you mean velocity offset?
Are you changing the delay btw? Why is it parameterised
can be customized per bone ig
yeah i know its some example code i wrote at like 3am
cuz it was going through when you sprint
going through what
through player
Tru my head
and you could see it if you run backwards
right
Watch Untitled - Copy by VirtualRain and millions of other SCP Secret Laboratory videos on Medal. Tags: #scpsecretlaboratory
that's really cool
The numbers falling is honestly so cool
I would do the cod effect
yep, it work properly with monobehaviour
internal class SchematicComponent : MonoBehaviour
{
internal Player Player;
internal SchematicObject SchematicObject;
internal Transform _transform;
internal IFpcRole FpcRole;
internal void Initialize(Player player)
{
Player = player;
Vector3 offset = new Vector3(0.1f, 1f, 0.2f);
SchematicObject = ObjectSpawner.SpawnSchematic(Mask.Plugin.Config.SchematicName, Player.Position + offset, Quaternion.identity);
if (!(Player.Role.Base is IFpcRole fpcRole) || !(fpcRole.FpcModule.CharacterModelInstance is AnimatedCharacterModel animatedCharacterModel))
return;
FpcRole = fpcRole;
_transform = FindChildRecursively(animatedCharacterModel.transform, "head");
if (_transform == null)
return;
}
public static Transform FindChildRecursively(Transform parent, string childName)
{
foreach (Transform child in parent)
{
if (child.name == childName)
return child;
Transform result = FindChildRecursively(child, childName);
if (result != null)
return result;
}
return null;
}
private void LateUpdate()
{
if (SchematicObject == null || _transform == null || Player == null)
{
Destroy();
return;
}
Vector3 playerVelocity = FpcRole.FpcModule.Motor.Velocity;
Vector3 predictedPosition = _transform.position + (playerVelocity * 0.024f);
SchematicObject.transform.position = predictedPosition;
SchematicObject.transform.rotation = _transform.rotation;
}
private void Destroy()
{
SchematicObject?.Destroy();
Destroy(this);
}
}
Code just fast placeholder
how does the auto team killing banning work?
like after how many team kills does someone get banned
isnt it in the config
@frosty bobcat
its 6
4 in a life, 6 in a round
Does anyone know the transforms names that start the IDLE animations of classes?
I found for D-class, and SCP-096
you gotta look through the character models
either print the hierarchy into the console or extract the assets with AssetRipper
i printed hierarchy
Wow
Happens if you spam another item equip keybind
The underlying cause is switching between when effects apply and when item usage is considered "complete"
Which means it could be caused by things like 3114's strangle
yeah
guys when I try to do Player.GetAll() i get FileNotFoundException' occurred while invoking 'OnServerCommandExecuting' on 'CustomHandler': 'Could not load file or assembly 'System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
and when putting using System.Linq at the top of my Events.cs file vscode says it goes unused
what version of .net is your project
my .csproj file says the targetframework is net9.0 if that's the right one
dotnet --info shows 9.0.6
you will need to change to .net framework 4.8
do i get the developer pack and runtime or just one
changing from 9.0 to 4.8 im not too sure about, might be easier to create a new project
iirc developer pack
ill download both just in case
i would believe i just have to change the targetversion in csproj and also change my path variable
but idk
yeah worth a shot
alr that worked
ty
is there an easier way to reload plugins besides restarting the server?
how do I set a dummy's role? like whether it's an SCP or human, etc.
nvm figured it out
i just saw the funniest shit ever from a server manager
he basically in short was implying that exiled and labapi were mutually exclusive until recently
no idea how he thinks this while running an sl server
i so bad wanted to correct him but thats just a dick move
Yep, you simply need to set the target framework, .NET 8 SDK and up include tools to build for .NET Framework
Gosh, I hate seeing all those old templates on GitHub
most of my new projects are made using an SCP SL template i made
which was created from a modern .net class lib downgraded to .net framework
it makes it way nicer
Exactly
maybe i'll add base folders to my template as well
also told me that LabAPI allowed for way cooler things than exiled

does he know labapi is part of SL and also what Exiled currently loads off of?
He doesn't know
they should delete the EXILED installer exe and make all server hosts install it manually
Genuinely
Tell me how can people be this confident at being wrong

i think its just ignorance from not caring
i dont mean this in a rude way i think thats just what happens
but it makes funny anecdotes for me
so be as ignorant as you want
in return, i will be as ignorant as you, and you can enjoy me as much as i enjoyed you.
the installer is good but definitely when i was starting out at like age 11, it kinda hurt my ability to comprehend what exactly was happening
but i think these tools should be as accessible as possible
Okay but tell me why it's like 50 MB for an installer like this
^ So i had no idea EXILED was a plugin itself, i thought that it made some kind of semi-permanent modification to the server software, like a dll patch or something
Back in my day
they probably made it using an installer template which had a lot of unnecessary bloat for other potential usages
Right
i dont really judge people for being ignorant about basic tech stuff, not really, but i cant deny its really funny when someone who's supposed to know it doesn't
i hear a lot of stories from professionals about the same thing but higher stakes
im just stupid, but at least i can accept it sometimes 
im stupid, mid dev, and i am much too arrogant to accept my own mid-ness
Also, I’m trying to set the role of a dummy to 079, but in RA, the role shows up as white and not red. I’m trying to set the role before the round starts, but even trying to set it after the round starts doesn’t work
Do you have gameplay data permissions?
Spooky season is over :(
As my current user? Yes, I have the owner role for the local server I’m testing on. I have full RA perms, but I also don’t fully understand what you mean by “gameplay data permissions”
I can set other dummies as every other scp but I just can’t set 079
how the hell do u use speaker toys
Can you show your LA logs?
I'm not sure why this would happen
Spawn speaker
Send AudioMessage (encoded opus)
Give #1407844197301620826 a try
how would i load audio from a file?
Check the wiki
Im not home, and won’t be all day. Can try tomorrow / when I get home.
Gameplay data permission, among other things, dictates if you can see people's role colour in their names via the admin panel
Aight be sure to ping me if you have time
SHUT UP
The labapi wiki?
I linked my library if you wanna use that
It can load mp3, wav and ogg files
By using a library you don't have to deal with loading files manually, nor the encoding & sending AudioMessages part
How would i encode it myself if i didn't use your library?
SL has an OpusEncoder wrapper
But sending audio is a bit finicky
You'd need to send an AudioMessage once every 10ms, it has to be 48000 Hz mono = 480 samples/message
Alr thanks
@hearty shard Dumb poppyhead
How did i misspell it
cuz u suck
hueh?
Why not use NVorbis (for ogg)
you can just convert mp3 to ogg
No u
shhj
noo
doing this is like converting a gun into a knife lol
(though I do the meme here "just use this lib"... fuck)
I mean, you do not want to pla high fidelity 320kbps mp3 files ingame
ogg has higher quality audio so i’ll always opt for it, i don’t use mp3 for audio anymore lol
Fortunetly a single mp3 -> ogg saves a lot of headaches
var speaker = getSpeaker(player);
using var reader = new VorbisReader(oggPath);
int sampleRate = reader.SampleRate;
int channels = reader.Channels;
float[] samples = new float[sampleRate * channels];
reader.ReadSamples(samples, 0, samples.Length);
speaker.Play(samples, false);
Np
Yeah but you still need to encode each packet
Plus no need to convert to ogg when you can use NLayer
Also I really don't like how people load entire songs into memory
No?
that is problem I admit I didn't care to fix
I forgor
Shameless SecretLabNAudio plug
yup
"I hate dependencies raaaahhhh"
LabApi.Features.Audio.AudioTransmitter
you are the labapi maintainer, implement it 
the a
I just do not want to wait for deps to update and I want to take the blame
It's probably gonna stay as "later to do"
When the dependencies don't need to be updated
mov r1,#144
mov r2,#8
mov r0,#0
multiplication
cmp r2,#0
beq end_multiplication
add r0, r0, r1
sub r2, r2, #1
b multiplication
end_multiplication
@upper vapor compiler is compiling

You're compiling?
Im the compiler lol
Yes
this is assembly
I guessed
doesn't support multiplication or division
but im compiling
if i wrote it in c most likely it would be so optimized

me vs C compiler
How does a C multiplication compile for this set then
Yeah but if you have no mul
How does it use mul if there's no mul 😭
I'm too high to understand this
get low then
AHAHAHHAHAAH
atleast im not doing divisions with like cables
and gates
i mean im doing that
but the pc is doing it for me
@upper vapor is there a known bug around 3114 strangle
im too lazy to check but
on an official server i saw 3114 move while strangling
mostly in circles of the strangled person but thats it rly
There's an exploit that now got patched for like bypassing the limit
Does anyone know how can I detect when a grenade goes through an open door in CollisionDetectionPickup::OnCollided? I'm using it to explode the grenade on impact, but it seems to be called when colliding with room geometry as well. Going through an open LCZ door will report the other collider as LCZ_T_Room_Collision, but I can't exclude it based on this naming scheme, since wall collisions are also handled by objects of this name. They are also on Layer 0 Default, so layer exclusion is also not an option. I attached an image of where the grenade is last seen before exploding. Does anyone have an easy way to only include walls in this?
You can get the DoorVariant behaviour from the collision and you can check the open state that way no?
Since you are using the OnCollided anyway
Do not know how fast would that be though
Speed is of no concern here. I've gone through all components of the collider, its parent and its children. It has no door attached to it.
[2025-11-03 16:45:20.750 +01:00] [INFO] [RoleplayPack] Hit gameObject LCZ_T_Room_Collision (layer: 0, Default)
[2025-11-03 16:45:20.764 +01:00] [INFO] [RoleplayPack] Component found: Transform
[2025-11-03 16:45:20.779 +01:00] [INFO] [RoleplayPack] Component found: MeshCollider
[2025-11-03 16:45:20.805 +01:00] [INFO] [RoleplayPack] Component found in parent: Transform
[2025-11-03 16:45:20.830 +01:00] [INFO] [RoleplayPack] Component found in parent: MeshCollider
[2025-11-03 16:45:20.856 +01:00] [INFO] [RoleplayPack] Component found in parent: Transform
[2025-11-03 16:45:20.870 +01:00] [INFO] [RoleplayPack] Component found in parent: Transform
[2025-11-03 16:45:20.886 +01:00] [INFO] [RoleplayPack] Component found in parent: Transform
[2025-11-03 16:45:20.902 +01:00] [INFO] [RoleplayPack] Component found in parent: RoomIdentifier
[2025-11-03 16:45:20.917 +01:00] [INFO] [RoleplayPack] Component found in parent: CullableRoom
[2025-11-03 16:45:20.932 +01:00] [INFO] [RoleplayPack] Component found in parent: SpawnableRoom
[2025-11-03 16:45:20.947 +01:00] [INFO] [RoleplayPack] Component found in parent: Transform
[2025-11-03 16:45:20.963 +01:00] [INFO] [RoleplayPack] Component found in parent: Transform
[2025-11-03 16:45:20.978 +01:00] [INFO] [RoleplayPack] Component found in parent: StaticBaker
[2025-11-03 16:45:20.994 +01:00] [INFO] [RoleplayPack] Component found in child: Transform
[2025-11-03 16:45:21.009 +01:00] [INFO] [RoleplayPack] Component found in child: MeshCollider
oh wait I see what is happening here
LCZ_T_Room_Collision isn't the room itself? What is the collider name when you hit a wall
When it hits a wall, it results in the exact same sequence I sent above
how can i get the outward normal of a surface i raycast on
does input direction matter, or you want the absolute outward?
trub might know
i believe they did this for CT
Who is trub and what is CT though
Now all that's left is to wait if she will share or not 🙏
What i do is make it so it only explodes when it hits a floor aka something im hitting from above. Its not perfect but its better
gulp
what if i want it to hit the ceiling :(
Seems what iv done isnt exactly what they want
I just used the dot product to check if ur hitting from above
You don't, no?
Collisions aren't processed on open doors
When I made an impact grenade I subscribed to OnCollided and had it explode when it detected a collision
You were able to shoot it through open doors
The problem I have is that when the grenade is coming through an open door, it detects a collision and explodes
Which should not happen
Oh that also can happen sometimes
There's a cool fix for that
The colliders for the doors can be a little wonk
The issue is, the collide event reports that the grenade is hitting the Room collision and not the door
Yeah
There's a fix
I'm finding it rq
ty
public class CollisionComponent : MonoBehaviour
{
private TimedGrenadeProjectile _grenade = null!;
private readonly List<Vector3> Velocities = [];
public void Init(TimedGrenadeProjectile grenade)
{
_grenade = grenade;
_grenade.Base.OnCollided += collision =>
{
if (collision.contacts[0].normal.y >= 0.7f ||
Vector3.Dot(Velocities[^1], _grenade.Rigidbody!.linearVelocity) <= 0.99f)
_grenade.RemainingTime = 0; // Note: don't use ServerFuseEnd! This causes multiple explosions because collisions tend to detect multiple times before the grenade is destroyed
};
}
public void FixedUpdate()
{
Velocities.Add(_grenade.Rigidbody!.linearVelocity);
if (Velocities.Count > 5)
Velocities.RemoveAt(0);
if (Vector3.Dot(Velocities[0], Velocities[^1]) <= 0.5f)
_grenade.RemainingTime = 0;
}
}
public static class GrenadeCollision
{
public static void ExplodeOnImpact(this TimedGrenadeProjectile grenade) => Timing.RunCoroutine(Add(grenade));
private static IEnumerator<float> Add(TimedGrenadeProjectile grenade)
{
yield return Timing.WaitForOneFrame;
yield return Timing.WaitForOneFrame;
yield return Timing.WaitForOneFrame;
grenade.GameObject.AddComponent<CollisionComponent>().Init(grenade);
}
}
This is what I did
It tracks the velocity of the grenade every frame and checks if that velocity has dramatically shifted, if so it blows the grenade up
It's actually two separate checks, and they only run when a collision is detected
The first check collision.contacts[0].normal.y >= 0.7f essentially just checks if it's hitting a floor, if so it's a guaranteed explosion
Otherwise it compares velocities
The one other check I have is in FixedUpdate Vector3.Dot(Velocities[0], Velocities[^1]) <= 0.5f which checks if the velocity has dramatically shifted from five frames earlier
Sometimes each frame has a small collision and it compounds into a large shift, so having that five-frame window keeps it in check
Took a lot of trial and error
If you paste that code in your codebase all you have to do is take the TimedGrenadeProjectile grenade and go grenade.ExplodeOnImpact();
If you want to get the coroutine and cancel the impact grenade stuff, you can make ExplodeOnImpact return the CoroutineHandle instead of void
This code works for me with grenade launchers and mirvs so it should work for you
i want the absolute outward
more specifically im looking at placing a paper on a wall
normalise the Vector3 that directional to the origin of the object
that goes inwards, if you reverse the Vector3 then you get outwards
so that will get me the normal of a wall for instance
if my mind is correct yes
sec
i made a command on Bright's for that
mostly because I needed to place stuff on the map
that is easier, if someone already done it :D
using System;
using System.Text;
using BrightPlugin.Utils.Extensions;
using CommandSystem;
using LabApi.Features.Wrappers;
using PlayerRoles.FirstPersonControl;
using RemoteAdmin;
using UnityEngine;
namespace BrightPlugin.Commands;
[CommandHandler(typeof(RemoteAdminCommandHandler))]
class Waila : ICommand
{
public string[] Aliases { get; set; } = Array.Empty<string>();
public string Description { get; set; } = "What am I looking at?";
public string usage { get; set; } = "waila";
string ICommand.Command { get; } = "waila";
public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out string response)
{
var player = Player.Get(sender);
if (sender is PlayerCommandSender && player is not { RemoteAdminAccess: true })
{
response = "You do not have access to this command.";
return false;
}
if (!player.IsValid())
{
response = "Only players may use this command";
return false;
}
if (player!.RoleBase is not IFpcRole)
{
response = "You must be playing as a human role.";
return false;
}
// Cast a ray from the player's camera, into the first gameobject we can hit.
// We'll display information it.
// We'll also want to go a little away from the player's camera otherwise we'll hit it.
var position = player.Camera.transform.position + (player.Camera.transform.forward * 0.2f);
var ray = new Ray(position, player.Camera.transform.forward);
if (!Physics.Raycast(ray, out var hitInfo, float.MaxValue))
{
response = "You're looking at nothing.";
return false;
}
var sb = new StringBuilder($"Hit Position: {hitInfo.point}\n");
sb.AppendLine($"Hit Normal: {hitInfo.normal}");
sb.AppendLine($"GameObject: {hitInfo.transform.gameObject.name}");
sb.AppendLine($"Layer: {LayerMask.LayerToName(hitInfo.transform.gameObject.layer)}");
sb.AppendLine($"Position: {hitInfo.transform.position}");
sb.AppendLine($"Rotation: {hitInfo.transform.rotation}");
sb.AppendLine($"Relative Position: {hitInfo.transform.InverseTransformPoint(hitInfo.point)}");
sb.AppendLine($"Relative Rotation: {hitInfo.transform.TransformDirection(hitInfo.normal)}");
// Try to find the room the position is in.
if (Room.TryGetRoomAtPosition(hitInfo.point, out var room) && !room.IsDestroyed)
{
sb.AppendLine($"Room: {room.Name}");
sb.AppendLine($"Relative Position: {room.Base.transform.InverseTransformPoint(hitInfo.point)}");
sb.AppendLine($"Relative Rotation: {room.Base.transform.TransformDirection(hitInfo.normal)}");
}
else
{
sb.AppendLine($"Room: NONE");
}
response = sb.ToString();
return true;
}
}
@teal junco
modded minecraft jumpscare
waila 🔥
Happy to help! :)
plugins are built with net4.8? the wiki shows features that are not in 4.8
you can use a different c# version, but only the dotnet version of 4.8
what is missing but shown in the wiki?
okay, thanks
im surprised i never ran into this issue and knew this was a thing, the downside of self teaching and figuring out c# 
lol
Preview is based
I use extension members all the time
And by all the time I mean like I make one a week
Which is pretty much all the time
i believe this is it
doing the command from in-game doesn't complain in the RA console or the client console (~)
wait
scp-079 exists
causing an overcharge causes 079 to die
How do I change someones appearence without changing their actual role?
FpcServerPositionDistributor.RoleSyncEvent
show your command class
[CommandHandler(typeof(GameConsoleCommandHandler))] is for commands in the server console
we're aware of an issue that causes commands not to be registered properly based on attribute order
Would it be possible to actually have, or make it look like a Pickup Firearm fired itself?
Mostly wondering about sfx and vfx of the shot(s). Whether or not it actually deals damage is irrelevant
If you want to use RA commands, you need to start with /
How I view it, is GameConsoleCommandHandler are commands you only want to be used in the console and use RemoteAdminCommandHandler when you want ingame as well
the question is
how did it work before round start
the server is beginning to believe
WOULD LIKE TO TEST IT IF THIS SHITHEAD WOULD ANSWER
oh yeah I see what is happening there
get the firearm template, get the AutomaticActionModule
actionModule.SendRpc(writer => { writer.WriteSubheader(MessageHeader.RpcFire); writer.WriteByte((byte) ammoToFire); }
this is for automatic firearms ofc
np
@spare zodiac /speechbubble
hiii chat
Hi cat
hello sirs
Hiiiii
beutiful, just got announced test for today that will be in 3 hours 
Crazy gl
i instead rn coding the twitch api for my server that will be able to reply to messages and do other cool stuff
having a command handler
Nice
SL plugin be able to interact with twitch chat and make twitch chat control SL that would be awesome
It already works i just need the command handler
Messages
Cheers (idk what the fuck they are)
Sub (When you get a sub)
Raid (when someone raids)
Donations
Some Updates for the chat
this is everything i can check
and do
Can't you do something thst involves the channel points
Hmmm idk
i need to see if IRC works with that
There are IRC bots that interract with that, I use chatterino and that uses IRC to communicate IIRC
hi slime boy
Hi evil
oh...
i need to subscribe to pubsub
ngl i will not DO THAT
it required 20 more additional
ig commands are fine
who kwon where i can get LabApiExtension.dll?
What do you mean?
Thats a plugin or a dependency of some kind
dependency
@restive turret i think has this
ah kadavas
Me when the dependent plugin's installation steps should tell you where it is
me when
It says it tho
i think they mean that the plugin using this dependency
the dependant
Ah in website?
idk!
Me neither!
You should kill your plugin NOW
Me when secret is no more api
is there a way to force a spawnwave to happen on a vanilla server?
thry need to re add wave buttons
the number of times ive seen people testing waves by waiting for it is about two too high
thx
I dont touch RA panel and I will never be a good one who will touch UI , im sorry 
Also how would you dynamicly do it
If a plugin dev isnt capable of running a command then I dont know how to comment that
Buttonys
not a priority or anything
each wave has an entry in a list which expands a menu
idk
Wdym dynamically
adding just the base ones
handle the customs yourself lol
Idk how it works tho, I only interacted with server side
fair enough, i just think its sad when devs dont know something and suffer from it
ive been on both sides of that situation before
I know you guys love adding buttons for the RA
Well search for it, I learned the wave command like 4 months ago
scp sl 14.3 RA api?
☠️
dummy actions is actual peak
You sure
Yes im sure
i mean ive never installrd the dummy actions plugin buttt
every client-server comm in RA is a fucking plaintext
it sounds awesome
Letting me down easy, thank you :(
I dont even remember the old wave ui
i do
mostly cause i wrote a custom wave system for a server i was on
Where is some plugin to remove AIahh mode and goldfish attention span buttons
The AI Shittification
-ai or sm like that
wtf???
short videos?
i literally remove youtube shorts from my feed on purpose why would they add it somewhere else
Cus google is shit company
no need to thank me
well i hope to work there someday. which will never happen of course but itd be cool
dont worry, if i become a google engineer i will not fix anything
No thanks
If you go there make sure you change a lot of tos and bring back the dislike button
Nor microsoft
I dont want to Vibe Code Task Manager
Ye ms is bullshit
for it to never close again
I dont have instagram account
I dont have tiktok
I have hide shorts plugin
i also do that and my brain is rotten
r u?
and I tell people to shut the fuck up with brainrot
hes cute
nooo
like any type of brainrot?
I suggest this btw
🎵 Buy the MP3 album on the Official Halidon Music Store: https://www.halidonmusic.com/en/classical-music-to-cure-brain-rot-album-9007.html
🎧 Listen to our playlist on Spotify: https://open.spotify.com/playlist/5BA6SECKXImvmtZoaQxpKZ
These recordings are available for sync licensing in web video productions, corporate videos, films, ads an...
r u one of those people who think 67 is the downfall of humanity
(which it is but not for the reasons most think)
I am one of those people who dont even know what that means
I dont know either
Im a high schooler, im one of those people who says it, i dont know what it means either
i think its a reference to an athlete's height, a song, and a kid at middle school basketball
ok so
I just ignore it lol
a kid said 67
at least it isnt like a dogwhistle
and then everyone copied
actually my friend group has a numerical dogwhistle, its kinda funny
But if I say "huh?" that tracks
smart
i see too many philosopher kids freaking out about six-seven
its really funny how so many people think theyre cool because they look down on all of their peers for making a popular joke
Allah mode?
AI ahh
Al jokes
Delete it or am calling the mods
Delete what
A short video
Shorts?
Pure evil
I wanna keep my shorts
I figured it out, it turns out that 079 exists and can die, but the 079 dummy doesn’t show as 079.
Why doesn't PlayerEvents::PickingUpItem get triggered when you pick up an armor?
I mean an armor is an item
I know that there is PlayerEvents::PickingUpArmor
But why doesn't the pickingupitem get triggered?
it's probably implemented in a different search completor
if you wanna run the same code, you can make a generic method that accepts T : IPickupEvent
or pass the pickup
what if the server browser wasnt extremely outdates and you could actually filter by language and specific player amount
its been the same for so long and it lacks alot of features
-# this is probably not a #plugins-dev-chat topic but aight
oops i just realized what channel im in
yeah the server browser could definitely use a redesign
maybe english sl wouldnt be so dead if you could actually find eu servers to play, theyre all inbetween polish and russian servers
Hi and half drunk
Why
Cant a university student drink
Im not that drunk tbh
I just got home (safely dw)
My car currently purring next to me (he misses me all the time) [such a cutie]
Anything you request, want or smth @hearty shard ?
could you release 15.0
cute
No, I am not the guy who can release stuff
Nor disclose publicly
Gr...
I won't experience most of it
I just don't play the game much
I've played the update once
14.2
um
i mean i did a bit of testing to check it out ig but actual game play? Like an hour
¯_(ツ)_/¯
I don't play daily either, I only did play is like 6h or something
Anything gn evil
ewve
What the fuck
Facts
i play the game occasionally
mostly a friend pushes me to play with him
thats been my main motivation to get on SL lately, besides making plugins and working on my server.
i only open it to fix Bright's
Can you make the hint TMP mesh cover the players entire screen, even on different text alignments?
Can you also either implement Cyn’s solution for client side patenting of network identities to non network identities or make RPC’s to parent NI’s to common client objects like my suggestion?
guh...
i wont ask for it
i will however ask for cheese
i want cheese added to sl
Make it edible
NOOO
well
if they add client side parenting to non-network identities
you can put a cheese on your head
and you can have a cheese-o-meter with a detailed graphic if the tmp mesh covered the entire screen
@upper vapor
Hey mate. Playing around with your audio library but Im struggling with skipping to the fadeout at the end of the file when given an audio player. Any ideas?
How to change text in TextToy?
textToy.Arguments.Reset();
textToy.Arguments.Add(messageJoined);
textToy.TextFormat = "<color=#00FF00>[Chat]</color> {0}";
set NetworkTextFormat instead of TextFormat
https://github.com/northwood-studios/LabAPI/issues/280
Is this what you mean?
Most common mirror mistake (even nwapi committed it)
The speaker controls the labapi audio transmitter which has nothing to do with SecretLabNAudio
You need to store a reference to the wave stream and set its CurrentTime
No way to pull the stream from the audioPlayer?
I was hoping to just pull the audio player from the gameobject's children
https://i.e-z.host/🐀/86zry487.png
How is this POSSIBLE?
same item changed id from when created???
not even dropped
What
Im as confused as you are
You mean like the item serial changed?
yes
randomly
it happens randomly
Nope
Using goto 
You can attach a component and store it in that
Alr, thanks
Lol
Ah
Np
Never used goto outside of assembly but isn't that super not recommended on C#
It shouldn't do that i guess
It just an il jump, many il jump generates in large section of the code
My guess is custom keycards are weird
Or your code is weird
...
it happens randomly
just like in a second its an id then it changes
Send the first one what do do, what is item2
Leak your entire code 
wait
the ID is correct
because when i drop it, it works as intended
but when it gets to the inventory it changes ID?
wtf
this game is cooked
Or your code is cooked
Do you think its a bit flag?
My code works fine
It works on my Custom Items
...
Never had any issue with wrong serials
But you can see this is something wrong with it?
no?
im taking the serial from labapi
and a second after it changes
Going to be honest. I never printed my serials.
I just put them in and it worked
Never checked
I dont even see what the hell is in before the tryget i dont know if you even get the right item
What's in the foreach?
Oh
I really don't like item2 as a variable name
Create a reproduction steps and I check it when I feel better
Yeah I wouldn't expect it to change
Are you changing the enumerable in the foreach, cause otherwise you shouldn't need that toArray
yes
but that doesn't matter
Alr fair enough
This please
Reproduction steps:
(Serial += 2
)
^^^^
Bruhhhh
Since works on custom items and have no clue what you doing
Ok so what i do is
InventoryExtensions.OnItemAdded i do Item.Get after 0.1
And build the item which consist in
- Removing the original on the item
- Adding custom keycard
- Their ID
to Recreate it in game i just
Give myself the Item
and then log the 2 id
It seems to change id when it enters the inventory, when its not in the inventory it works fine so OnDropping works fine
Guh ofc when you add a new custom keycard and its id it will be different
...
It never happened before this update
and i can tell you it works when i drop it
Set the serial after you created to the original one
i wouldn't know the original item type
and i already do that
so what you mean
no
Have you tried adding a 0.1 delay after the Give item?
Yea but how do i know which is the new keycard
Nothing
If you publicise it
so if you give yourself that item i can change it right away
or in any way shape possible
Ye i have no clue ngl
I found out the solution
this game created a shadow item
an exact replica
but its just invalid
it doesn't bother gameplay
nothing
it just sits there
and then gets replaced
shrodingers cat but in SL
??
ok so imagine
an item exist
but it doesn't exist
its a super item
quantum physics with items
Schrödinger's item
Zero can you show your full code
Im not home anymore
So i can’t for a while
Because people hog in the goods places with a socket
But yea now that i created qbits on sl im gonna make a quantum computer
Ngl
Btw i hate assembly i forgot that i don’t have a continue and crashed the emulator so many times
Because i was making it go back to the loop without incrementing
Kinda my skill issue

i just realized what you meant by that xd
what is the best plugin for syncing discord roles into scpsl, as well as bots with playerstats
i've used scpdiscord but it felt really unstable and kept breaking with a lot of bugs
cedmod can do that too, but some people consider that to be unstable too.
if you know how to code then #1394397577004318850 exists and you can make your own module for it (I haven't had the time to make a module yet for that kinda thing)
hmm
how to pathing from a to b
did this https://github.com/Unity-Technologies/NavMeshComponents/tree/master/Assets/NavMeshComponents/Scripts work?
navmesh is funny in HCZ but it should work fairly well in other hones
I do
private void CalculatePath()
{
if (_currentTargetRoom == null)
return;
Room currentRoom = player.CachedRoom;
if (currentRoom == null || player.Team == Team.Dead)
{
LogManager.Warn("Cannot calculate path: Current room is null, Sending bot to spawn location");
return;
}
ClearPathVisualization();
_roomPath.Clear();
List<Room> foundPath = Room.FindPath(currentRoom, _currentTargetRoom, CalculateRoomWeight);
if (foundPath != null)
_roomPath.AddRange(foundPath);
BuildWaypointPath(currentRoom);
if (_enablePathVisualization)
CreatePathVisualization();
}
hmm wtf is buildwaypointpath
My own pathing system
private void BuildWaypointPath(Room currentRoom)
{
_waypoints.Clear();
_currentWaypointIndex = 0;
if (HandleClassDInitialDoor(currentRoom))
return;
if (_roomPath.Count == 0)
{
Room randomRoom = RoomExtensions.GetRandomRoomByBlacklist();
SetDestination(randomRoom);
LogManager.Debug($"No path found from {currentRoom.Name} to {_currentTargetRoom.Name}, Selecting random room {randomRoom.Name} - {randomRoom.GameObject.name}");
return;
}
for (int i = 0; i < _roomPath.Count; i++)
{
Room room = _roomPath[i];
ProcessRoomWaypoints(room, i);
}
}
that's what navmesh are for
ok but here is a problem,how to get the waypoints because some room was very complex like new hcznuke
and my bot always hit the wall
In most rooms to uses the center in some like testroom it uses specific waypoints
can I just navmesh?(
Dosent work in heavy
we don't wanna make performance even worse by making meshes readable
?
though you could argue that some geometry is just
Game was never meant to have navmeshes
hmm
private static readonly Dictionary<string, List<Vector3>> RoomSpecificWaypoints = new()
{
["HCZ_Straight_PipeRoom(Clone)"] =
[
new Vector3(-1.89f, 1f, -5.54f),
new Vector3(2.96f, 1f, -6.19f)
],
["LCZ_ChkpB(Clone)"] =
[
new Vector3(5.34f, 1f, 0.12f),
new Vector3(14.84f, 1f, 0.12f)
],
["LCZ_ChkpA(Clone)"] =
[
new Vector3(5.34f, 1f, 0.12f),
new Vector3(14.84f, 1f, 0.12f)
],
["HCZ_Testroom(Clone)"] =
[
new Vector3(6.53f, 1f, 5.48f),
new Vector3(0f, 1f, 5.93f),
new Vector3(-6.53f, 1f, 5.48f)
],
["HCZ_127(Clone)"] =
[
new Vector3(-5f, 1f, 0f)
],
["HCZ_Crossroom_Water(Clone)"] =
[
new Vector3(2.26f, 1f, 2.48f)
],
["HCZ_Nuke(Clone)"] =
[
new Vector3(-3.14f, 1f, -0.12f)
],
["HCZ_TArmory(Clone)"] =
[
new Vector3(-2.58f, 1f, 0f)
],
["HCZ_939(Clone)"] =
[
new Vector3(2.04f, 1f, -0.45f)
],
["LCZ_330(Clone)"] =
[
new Vector3(-4.50f, 1f, 0f)
],
["LCZ_173(Clone)"] =
[
new Vector3(-4.28f, 1f, 0f)
],
};
private List<Vector3> GetRoomSpecificWaypoints(Room room, bool useRandomWaypoint = false)
{
List<Vector3> waypoints = [];
if (RoomSpecificWaypoints.TryGetValue(room.GameObject.name, out List<Vector3> localWaypoints))
{
if (useRandomWaypoint && localWaypoints.Count > 0)
{
Vector3 randomLocal = localWaypoints[Random.Range(0, localWaypoints.Count)];
waypoints.Add(room.WorldPosition(randomLocal));
}
else
{
foreach (Vector3 localPos in localWaypoints)
waypoints.Add(room.WorldPosition(localPos));
}
}
return waypoints;
}
so the main problem is how could I nav in hcz(
my advice as always
make the meshes out of simple shapes yourself
Or ignore the clutters
I'd say that's good enough
Make them walk in middle
Or define your own waypoints
thanks the code,I will try in sunday
thanks the advice,I will ask ai:)
hit wall in nuke(
np
this is true nw moment lol
I dont know how does lh work but it has lag in idle mode(
just
disable idle mode

the server runs at a low frame rate so that's partially why this happens
Idle mode isn't needed on a testing server
trueing
unless
you forget to shut it down

I dont know how to shut it down(
:q
alt+f4
-# on ptero
Press alt+f4 to command the players --Ntf private
Press T to kill all scps --Ntf private
so how to shut idle down
Either local admin configvor gameplay config
shutdown now
or im blindness
looks I need to have a meet with doctor
btw how to get those data when map updated,unpack and throw it into unity?
They're local positions in the room
/// <summary>
/// Returns the local space position, based on a world space position.
/// </summary>
/// <param name="room">The room instance this method extends.</param>
/// <param name="position">World position.</param>
/// <returns>Local position, based on the room.</returns>
public static Vector3 LocalPosition(this Room room, Vector3 position) => room.Transform.InverseTransformPoint(position);
/// <summary>
/// Returns the World position, based on a local space position.
/// </summary>
/// <param name="room">The room instance this method extends.</param>
/// <param name="offset">Local position.</param>
/// <returns>World position, based on the room.</returns>
public static Vector3 WorldPosition(this Room room, Vector3 offset) => room.Transform.TransformPoint(offset);





