#plugins-dev-chat
1 messages ยท Page 20 of 1
have an internal id system
something like that
for me i just ID the speaker with a private int and increment it each time i make a new speaker
is it not executing after an OperationCanceledException?
Cause you're kinda telling it not to catch that one
Thanks it works
there is some code after that try catch and it doesn't get executed
but if i remove that check then it works
this works
oh, i didn't change method name
love the automod
lmao
but yeah that should work
Unless I'm mistaken when in that scenario won't catch OperationCanceledException and you'll end up halting your code
and since it's an awaitable i'm guessing you got hit with a silent exception
@mild ice any idea whats going wrong with auto mod here, seeing this alot again
wonder if it's the dollar sign
$interpolation is cool
hmm
.Error
it's dotToken
Yeah it's picking up tlds again 
In this case: .to
maybe, although i thought stuff inside ``` should be excluded mostly
anyway to exluded it inside code blocks
To be honest, Automod is in a bit of a state right now and I currently lack the access to fix it
Once some things are sorted out behind the scenes I'll definitely look at making sure false detections are properly addressed, in the meantime I apologise for the inconvenience!
No worries, thanks for looking into it either way
okay, somehow i thought it would catch that OperationCanceledException and wouldn't execute the code in catch block..
silly me
does anyone know what the branch is? i put in Labapi-beta but its not showing my server
Try early server build
anything like this in the server logs?
[2025-05-13 14:04:48.493 -07:00] Your server won't be visible on the public server list -
ill try this then ill check my logs
there was nothing in my server logs
Are you on the beta?
On client
Or just server
Both have to be same version
i think my steam has been on the public beta since it released. unless if it updated today
Updated 19 hours ago
i think i was still on my server
i had Labapi-beta in before then i switched to early-server-build
i fixed the spelling error but my server doesnt show up still
did you reinstall?
let me do that
that was it 
Me when I can no longer update my plugins cus the update release at 11 pm
๐ญ
Should be under AdminToys namespace
i hate
why does it send as a file
its not there
because you have it encoded in a way discord doesnt accept
was working 20 mins ago
smh discord
Or or
Discord moment
(its discord)
thank god
it is discord
yeah
i just found that out
everyone started sending images
and having the issue
but the encoding part is a factor!
wouhou found texttoy
tell me its sarcastic
There's a way that i could actually make the reload force without having any ammo, so you drain still the ammo but on reload you don't need any ammo
does anyone have a screenshot of the text toy
yes
oh god
why
something broke i think
i remade that top one in higher resolution :3
show them
are you spawning a shit ton of primitives to make an image
nope, TextToy
how
i'm parsing .bmp colormap to TMP
Its a TMPText thing
each individual pixel row in the image is a separate argument for TextToy and Format contains all these arguments/lines with newline's in between
wdym?
how long is the string
also can you upload it as a .txt just for demonstration purposes
either one will do
here's the unity one
547 kb aint no way bro
not even the biggest file
if you combine multiple texttoys then higher resolutions are possible
wasnt there like a website or something
custom program, it get's pixel data from image in .bmp format and creates text image just by coloring this char โ using richtext
thanks for idea, just made it in 10 mins
Oh you're spawning a pickup, I missed that
You need call ServerSetInstanceAmmo with the serial of the pickup
So you just do like Minecraft images from multiple maps
where can i get dependecies for TextToy?
Wdym
Yes, i update labapi
where i can get that updated?
thx
what the hell
I dont speak russian
or whatever is that
Have you publicized the assembly by chance?
Ambiguity between 'ServerSpecificSettingsSync.ServerOnSettingValueReceived' and 'ServerSpecificSettingsSync.ServerOnSettingValueReceived'
Any chance of dummies getting unique ids instead of just ID_Dummy
Kinda screws with existing code
To the point where I have an extension method that returns $"{dummyHub.connectionToClient.connectionId}@dummy" as an id
Yes but any code using UserId breaks with them
Which is what is used for 99% of code anyway
Then assign them unique id
I guess, but the idea was to avoid writing dummy-specific checks when they pretty much are full fledged players in all other respects
Which would make them even better for QA testing
Okay but like, what are you doing with the user id?
Storing data using the userid as the key
Works fine for players, dummies break because they all have the same id
just use Id
You mean PlayerId?
Bad idea
yes, but I don't want to have different code between players and dummies, that's the point heh
then just change userid for npc
you can how i know
that would break the rest of the game
since it expects ID_Dummy for some checks
it's why I'm asking NW if they can fix it :^)
bit of an oversight imo
Well but you arent storing it in a file or something, arent you?
Wouldnt make sense for dummy
I'm not no
But even if I was dummies really shouldn't break it
Considering it seems you meant for them to basically just be players since they can do everything a player can
Which is great for QA, the UserId issue is pretty much the only grievance I have with them
I'm not storing data about them
Not long term, just while they're alive, I need to attach things by UserId
Use the ReferenceHub then
Using the Reference Hub as a key is a bad idea
Why?
If it gets destroyed, or if I have to hold data regarding a player even if they reconnect
Which while it won't happen with dummies obviously, the point of my request is to not have to write code that's different between dummies and players
Right now I have to either do dummy checks or just make my own userid for dummies
which means more code to write for dummies that won't exist in normal gameplay anyway heh
(and while I could patch it, I'd prefer not to since the more patches I have the bigger the risk of things exploding between updates)
when someone add ai for dummy?
shooting / picking up items or just for scps
I would use the dummies only for testing then
Use Debug version to keep in dummies
and use Release to ignore them
I guess, wouldn't change the fact I'd have to write more code to differentiate them
The only thing really making them different from players atp is the UserId, because otherwise they don't differ
they'll trigger the same events and all, which is great for QA testing, just that being forced to differentiate them purely because of the UserId is a bit of a pain point
Them not having the ID_Dummy UserId is fine?
I doubt its used somewhere else in the code
They have unique network connection object too
sounds good then, ty
Yeah every base game code uses IsDummy property
Feel free to change the id as you wish
I guess
is there in text toy chars limit?
65534 chars for the base string
And 65534 for each argument
Maybe few chars less for the args as they are wrapped by the synclist stuff
Is there a proper way to remove a SpeakerToy once it has finished playing sound? I didn't seem to find any events
is it possible to have a different panel for keycard access for pedestals ?
If I put different DoorPermissionFlags visually it won't be recognizable.
you need custom keycard
to change the permissions
oh
you mean change the pedestals required permissions
uhh
not possible i dont think
you could also load non-bmp files if you load it into a Texture2D
i would have to do it like that yea?
hm, ig it saves some time
File.ReadAllBytes
and done
hopefully it has a stream overload but i'm not sure
and then you can resize the image in-memory without modifying the "uploaded" image
sadly it doesn't
rip
in some scenarios i will still use external software for that, eg. color quantization
but it is a nice feature
The TextToy which category?
UI, most likely
Not really ๐
huh
Thanks
Unless server got updated which I doubt
I had this issue during testing where the text disappeared when looking at sky
So I changed it to different layer and it worked fine
But then it got merged and skybox has changed meanwhile
public static bool Raycast(Player player, out RaycastHit hit) => Raycast(player.Camera.position, player.Camera.forward, out hit);
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hit) => Physics.Raycast(origin, direction, out hit, 100f, ToolGunMask.Mask);
private static readonly CachedLayerMask ToolGunMask = new("Default", "Door", "CCTV", "Viewmodel", "UI", "Phantom");```
Still can't detect it bruh, Am I doing something wrong?
UI can't be raycasted
what
you mean GraphicRaycaster?
in that case, ye
I guess
actually no
that would be for the client
does the text actually get created as a TMPro object on the server?
try adding an Image to the canvas instead
the text might not get raycasted if you hit outside of the actual text mesh
๐
integrate into your coroutine
rendering video frames to TextToy in real time is challenging
having multiple TextToys rendering video frames at the same time can have a lot of stuttering
Yeah thx already do
hey patrick
I said I wouldnt switch to LabAPI but thinking about how similar they are I might at least make half my plugins in it.
and just make the exiled version use the exiled entrypoint or something
that's what i do for all my new plugins
the plugin entry point just has an exiled check, and then it uses labapi events
oh i use that
just compiler processing to remove exiled from non exiled dll
to prevent load error
i dont like having to manually change the references but its alright
you dont?
well
its literally the same as swapping from debug to release
and back
its 2 clicks
no i mean removing the exiled dlls from the project refs
i heard theres a way to make it conditional too but i couldnt be assed to figure that out
just this
oh awesome
I'll take a deeper look at the differences between labapi and exiled later
theres probably some events exiled has labapi doesnt.
Ye basically
I set those in .props so doesn't need to actually edit and .csproj file
cant wait for ucr labapi port
Is ucr being ported to LabAPI?
no
its not
that would be cool tho idk
the biggest issue i have with labapi rn is no customrole/customitem
Im gonna send u to the edge of the game
my hope is only one or two people make such a thing for labapi and there isnt like 3 frameworks of the same thing
Hey I did my Own custom item, kinda custom roles too
I'll look at your repo and see if theres any PRs I wanna make
Have fun I accept those if I see benefits or something
Since I only used for my server isn't much
My issue currently is the Ondropped runs twice but that can be changed
Because it doesn't run the labapis one
If you drop it while in inventory or by throwing (which should be)
The structure looks a bit confusing but I think I understand it
my only problem really is that there isnt a one file solution for custom event subscriptions
but your solution you have is pretty good
I split it by functionality
just have a bunch of interfaces for every event in labapi 
i can see
Tried that but it throws NullException ๐ญ
why not
Get the template
Not sure if it's the best approach but InventoryItemLoader.TryGetItem
IScp096Item is fire
Having like 15ish interfaces?
Eh might do it
I don't even know what am I doing.
Dude i swear some people are so ignorant
I hope labapi never gets dumbasses asking for help in it.
(t will)
there is 0 way to avoid it
I hope they'll at least be respectful and literate and even try to read the material people give them
Nah just put an IQ test at the gate
it wont happen
my below average iq begs for an exception ๐
anyways i dont really care that much about dumb people as long as they dont bother anybody. i mean i kind of used to be the same way in exiled
i will spam ping u and call u a hoe
before i had an arc and came back in 2024
call my plugin stupid because you didnt read the docs
Guys its better Linux or windows for plugin development?
@cedar jungle non hai diritti
Use whichever one you want, windows from what i can see has visual studio ide and also can run scp sl natively
Oh ok
Dont look at my pfp please
a bit too late
Its kind of the first thing i saw
I dont know anything abt linux pros and cons
if a linux user sees please say them
Windows, .NET 4.8 is not supported on linux
not a linux user myself but
pros of linux:
- overall far better customizability
- usually faster compile times
cons: - a bit more difficult to install .NET for SL development (you need Mono to develop for .NET Framework)
- can be less user-friendly
Rider works on linux, too, no need for VS
if you're familiar with windows, consider trying out WSL (windows subsystem for linux)
yeah...
You are able to compile .NET 4.8 stuff
at least I did in a past
๐
@trail pumice
really?
If u have net8+ installed you can compile into net4x
How do i know?
Cus I tested it
I am stupid
Tested under manjaro but should work whatever platform u want
If your main platfrom is win then easy choise
You can literally compile plugins just fine on Linux
via dotnet8 or dotnet9 package
don't even need mono
Is every keycard an IDoorPermissionProvider?
I'm doing an if like this: ev.Player.CurrentItem != null && ev.Player.CurrentItem is IDoorPermissionProvider permissionProvider and it returns false when holding a keycard
no need for null check btw
It's a legacy check, I'm trying to make the code work first ๐ญ
ye ye
I opened the solution for the first time since 14.0
wait
/// <summary>
/// Checks whether a player has permission to access a <see cref="IDoorPermissionRequester"/>.
/// </summary>
/// <param name="player">The player to check.</param>
/// <param name="requester">The requester to check the player for permissions on.</param>
/// <returns>Whether a valid permission was found.</returns>
public static bool HasDoorPermission(this Player player, IDoorPermissionRequester requester)
{
if (player.IsBypassEnabled)
return true;
if (player.RoleBase is IDoorPermissionProvider roleProvider && requester.PermissionsPolicy.CheckPermissions(roleProvider.GetPermissions(requester)))
return true;
foreach (Item? item in player.Items)
{
if (item?.Base is IDoorPermissionProvider itemProvider && requester.PermissionsPolicy.CheckPermissions(itemProvider.GetPermissions(requester)))
return true;
}
return false;
}
well
for you only check the current item
In this case I'm 049, so this method would override my "Plague Doctor needs keycard" mod
but good to know it exists ig
@unique crane when Scp3114Events
(sowwy for ping)
also why is the documentation for PlayerEffectUpdated whenever a player has recieved an effect, does it also include effect removals because of the name of the event args?
Should be iirc
okie
I always forgot lumi doesn't have the src
when the applications came out i assumed it was web api, and i couldnt be fussed as i dislike making apis
but no
it's labapi
so i didnt apply
i should have tho
applications to develop labapi?
i would have liked to apply but i'm not old enough...
18
Ye 18
how old is bolton
17
๐ญ
im gonna be a crazy programmer by the time im 18
I was applied but they choose others
scp sl beter be around by then
to make u wanna use them
n ur like dam. i coulda used that emote
I should make a game in unity to get familiar with it more
I only just understood components/monobehavior thing after programming for ProjectMER
I dislike unity
I know some people dislike unity for political, technical, performance reasons
my brain is too small to really understand most of that
I mostly just hate the ui
and the long ass building
like guh I chanign 1 file with NOTHGIN inside it and I have to wait ~5 min to actually able to do something?
i think i heard people in MER say Unity is a bad company
I not saying anything about their political / financtial view
their politics directly affect their build times
slow af even in Ryzen 5?
if the unity ceo was more socialist unity would compile instantly trust trust


Someone knows a similar way to do the IsInvisble/InvisibleFor of Exiled (FPCRole) on LabAPI
there should be a player checking visibility event
Fr?
If you can tell me more precisily that could be really good
because i didn't know nw actually added it
PlayerValidatedVisibility
this is the most peak thing since megapatch 2
I cannot belive this is real
lol
I was loosing hope
we were trying different patches for almost an entire day
nothing worked on the beta
strange
Can you make a player invisible and have a object parented not be invisible?
nope
Invisible effect
Sucks that the invisible effect stops you from networking to other players
Just have a component on the object always sets its position to the player without actually parenting it
public static void OnPlayerVisibility(PlayerValidatedVisibilityEventArgs ev)
{
ExPlayer p = ExPlayer.Get(ev.Player);
ExPlayer t = ExPlayer.Get(ev.Target);
var spawn = Spawn.Instance;
if (spawn != null && spawn.Players.Contains(p) && spawn.Players.Contains(t))
{
ev.IsVisible = true;
return;
}
var aim = Aimlab.Instance;
if (aim != null && aim.Players.Contains(p) && aim.Players.Contains(t))
{
ev.IsVisible = true;
return;
}
foreach (var va in VirtualArena.Instances)
{
if ((va.TeamA.Contains(p) && va.TeamA.Contains(t)) ||
(va.TeamB.Contains(p) && va.TeamB.Contains(t)) ||
(va.Spectator.Contains(p) && va.Spectator.Contains(t)))
{
ev.IsVisible = true;
return;
}
}
foreach (var arena in Arena.arenas)
{
foreach (var fight in arena.Fights)
{
var participants = fight.Team1.Concat(fight.Team2).Concat(fight.Spectators);
if (participants.Contains(p) && participants.Contains(t))
{
ev.IsVisible = true;
return;
}
}
}
ev.IsVisible = false;
}
Its not like working at all and im honestly not understanding why
should i force it?
uhhh
force?
I don't think it does what you're trying to do?
what do you mean?
You're trying to make players only visible to certain players right
I think that even is just to check if player A can see player B. As in "if B was 173, would A affect B"
alongside all of the other "you see a player" buffs like zombies seeing humans
I don't think SL provides any way to hide players from others other than by faking their role for the other players
This gets called tho everytime a player gets the fpc update
so it doesn't make any sense
yeah because when a player moves it might change the visibility of other players
Like in my dictionary visibility should be can i see him?
and should affect the Bloodlust or any other scp
Think of it as having line of sight with another player
not being able to see the player as a toggle
yeah
So its just for the abilities lol?
p much
shouldnt be
no?
Im testing it by making it always false
because i know for a fact it should work
you can override the result, it does check beforehand if a player would of been visible from any other reason like abilities/range
yeah that should work(players should be invisible)
yes
i stand corrected, i'll try it out
Ok now im checking if always works
(could we get an event to force networking of player A to player B)
(I don't want invisible players to stop being networked in some cases)
it doesn't work amazing
LabApi.Events.Handlers.PlayerEvents.ValidatedVisibility += OnPlayerVisibility;
LabApi.Events.Handlers.PlayerEvents.ValidatedVisibility -= OnPlayerVisibility;
public static void OnPlayerVisibility(PlayerValidatedVisibilityEventArgs ev)
{
ExPlayer p = ExPlayer.Get(ev.Player);
ExPlayer t = ExPlayer.Get(ev.Target);
ev.IsVisible = false;
}
like this are all of the stuff im doing now
uh
LabApi.Events.Handlers.PlayerEvents.ValidatedVisibility += OnPlayerVisibility;
LabApi.Events.Handlers.PlayerEvents.ValidatedVisibility -= OnPlayerVisibility;
is that actual code you're running
there was a suggestion like that on the labapi github, its something im working on
No
okay just making sure hah
its not the code im actually running
sweet
would help with some of the hacky workarounds I had to do for some plugins
If that doesn't work and you're certain it runs through debugging, transmitting fake role data
in theory that should work, btw you dont have EXILED installed or any other plugins that effect visibility?
I just have exiled
and nothing else
try without exiled perhaps
right because of ExPlayer
let me check for any error
btw i did test it with dummies and it did work for me
also need a way to hide players from the spectator list 
No errors
i think david is working on that one
having to send fake spectator role data is kinda hacky and not very polished
hell yeah
so yea exiled, maybe?
exiled definitely patches it, so probably
let me check
I'll also open an issue for a custom event that gets fired when RoundSummary wants to end the round, so you can block it
because I'll be honest, RoundSummary._ProcessServerSideCode() is the bane of my existance
patching that is hell ;-;
they do
i will patch over it to disable it
i think theres a ServerRoundRestarting or ServerRoundEnding event already
actually where is restarting
....
i did
yeah i missed it
fuck me
was about to spend an hour or two figuring out the IL needed to add a check
nvm then
[HarmonyPatch("GhostModePatch", "Transpiler")]
public class DisableGhost
{
public static bool Prefix() => false;
}
I just think this will be enough (its internal, i just don't wanna pull up the publicizer)
this is like, the third time I start writing a patch to find out LabAPI has an event now
Can we get a player activating workstation event or player changing attachments event in LabApi?
patching the patch
I couldn't find one so I assume it dosent exist
nope probably it doesn't work
Me when i can just Publicize="true" in reference
On Exiled.Events
Oh yea i can
lol
i forgot
make an issue on the labapi github, otherwise we will forger
Forgor
is something wrong
LabApi.Events.Handlers.PlayerEvents.ValidatedVisibility += OnPlayerVisibility;
LabApi.Events.Handlers.PlayerEvents.ValidatedVisibility -= OnPlayerVisibility;
this would subscribe and unsubscribe the handler, but it's not the code they're running
so it's fine
https://github.com/northwood-studios/LabAPI/issues/124 another good idea 
One of the big issues I have with LabAPI right now is handler execution order
Can't always guarantee it so sometimes you get conflicts
Could maybe have a Priority attribute for the CustomEventHandlers, but that wouldn't solve it for the static version of the events
u cant guarantee the execution order?
how so
like if you subscribe two events in a row, its not clear which comes first?
If you have lots of plugins, I don't like to assume plugin A loads before plugin B
or vice versa
they might not
If you make that assumption and you're wrong, you p much get race condition related bugs
that might not always happen and are hard to debug
also c# events dont garuntee an order even when you can garuntee the order they were subscribed in
yeah
that's why having more events helps reduce that
but if NW ever adds some sort of priority code, even just for the CustomEventHandlers based events, it'd be awesome
[Priority(1)] // Higher priority = executes first
public class MyHandlers : CustomEventHandlers
{
// Or
public override int GetPriority() => 1;
}
Attribute would be easier
Since it's compile time and can't change yeah
that way NW can just re-order registered handlers whenever one gets added
Or even can get priority for the subbed event
Im switching my entire project and i was trying to update when i do
<Reference Include="Assembly-CSharp" publicize="true" Condition="'$(Configuration)' != 'EDITOR'">
<HintPath>$(SL_REFERENCES)\Assembly-CSharp.dll</HintPath>
</Reference>
its the only things that never loads
SL_REFERENCES:
"C:\Program Files (x86)\Steam\steamapps\common\SCP Secret Laboratory Dedicated Server\SCPSL_Data\Managed"
I tried everything
Remove condition?
Publicize must start with big P
Condition works fine
and im going to try
Nope still it doesn't load
If u use the bepin msbuild one you will see warn icon on the file
U can ignore it
Try building the project
Nope just throws the error
of the missing references
Error?
0>TestClass.cs(26,20): Error CS0246 : The type or namespace name 'PrimitiveFlags' could not be found (are you missing a using directive or an assembly reference?)
Try using smth directly from the acs
what?
Isn't primitiveflags under AdminToys namespace?
yes
Are you using it?
wait they are separated?
No its under Assembly-CSharp
Ye but what namespace is under it
No namespace, AdminToys or some other? Who knows
AdminToys
i already have using AdminToys btw
the Assembly-CSharp is not totally loading because ReferenceHub either is loading
And that line isn't throwing any error
yes it is
0>TestClass.cs(26,20): Error CS0246 : The type or namespace name 'PrimitiveFlags' could not be found (are you missing a using directive or an assembly reference?)
Are you see the acs in the references/deoendencies panel?
If you not using VS well
Ok this is funny
CS is trying to load it in another folder
that now doesn't exist
like what?
Idk what's on your side so
Good night
execution order is not guaranteed in delegates
plus, as Cyn has stated, you might not know which plugin subscribes first
Cyn making suggestions day by day
This isnt exactly hard to do, all thats needed is to sync who to make appear on the map
As all players are iterated either way
and filtered by SCP team
P much anytime I hit a wall or the hacky workaround isn't desirable
Thank you David for implementing it
The latter this time
Didnt promise anything xd
Would be hella useful if it made it in IMO
Maybe just having a string syncvar that if isn't null:
- Overrides the default label for SCPs
- Displays the player with that label for other roles.
also hiding a player from 079s map / being counted in the total
Hello ๐ Ive got a technical question on a vanilla server
i heard that u are able to embed images with the new spawntoy text command or something like that to display images
but i couldnt figure out how to so i wanted to ask in here
cause stuff like <color=red> works so i imagined putting a image in there would be something like <img src"">
apart from are there any other cool features to test like <color=> or <size=> cause more then that i wasnt able to figure out yet?
the new spawn toy lets you spawn a text toy
you need to convert an image to text
search for TMPro tags
And that is possible on a vanilla server?
You'd have to manually spawn it every time
Yea i know that, its nothing to stay permanently more as a cool joke to show off
idk if you can modify admintoy without a plugin
stuff like <color=red> works without plugins, and someone else told me it is possible to do stuff like images too but he left before i could ask him how it was done
you need to use an image converter
I have a python script that converts images into tmp tags I might be able to share
that would be kind, cause i cant seem to find what eve says about an image converter for that
Give me like 20 minutes
sure np
do u have an example by any chance?
Ive found out that there is a method using <sprite> but it requires for the image file to be in a specific folder of the game so that doesnt work on vanilla
I sent it to you
How do I force 3114 to let go? Like if I disable the effect, it keeps them hanging on, but the player is free to leave?
this is what the code does when 3114 takes damage while strangling
What class is that under?
me when exiled doesn't have that method
in the game asm?
PlayerRoles.PlayableScps.Scp3114.Scp3114Strangle
ye u can just parse null and should work
so sad this version of .net not support interface basic implementation
Question for @stuck peak, this isn't in 0.7.0 right? https://github.com/northwood-studios/LabAPI/pull/77
Because yesterday we've spotted issues where players reconnecting would get their old data stores back for some reason
Dunno if it's a LabAPI bug or just on our end, could be but it was pretty weird
Question for everyone else, is there any event for when an item is removed from a player's inventory via code
Not dropping, not throwing, just removed
Doesn't seem to be the case?
ig you can use OnItemRemoved
removing via code means destroying the item instance
hmmmmm
is that called before the item is removed from the inventory or after
cause I need to have the player it got removed from as well
this is called before it is removed
there is also another event
and there is the item and a player
this one's better ig
what can be null here?
ev.Pickup also appears to be null here
i mean
if they are spectator
but without a synced id then yeah ig
#1372594509849956462 message im having a similar problem but my data are just wrong
thats true
there is also no Destroying
yea idk
no idea
like the the thing should still exist no ?
the instance at least
sure the stuff in it wont work
but i just need dictionary lookup
this patch i still gotta fix
i have no clue why it wont patch it
the other patches work fine
only this one doesnt
๐
Internal?
Does it not run
Added logging?
No patch error when loading it in logs
nope
all is fine
just doesnt patch it
and patches in same category patch just fine
ig it's an oversight because it can fail in retrieving that pickup from dictionary
so the Pickup property in the event should be nullable
[EveLabs] CustomRAUtilsPatch was called!!?!!?
oh
its called now
just broken code now
so i somehow fixed it
cuz it didnt work last week
nice
wait
it works entirely on my local server

OH MY GOD
NOT AGAIN
ITS CEDMOD
im killing c ed
i hate cedmod
๐
Hmmm can you make it possible to cuff friendlies with LabAPI?
i.e. mtf cuffing mtf
or is that blocked clientside
correct me if i'm wrong, checked the code and it seems that it's still blocked clientside
at least we have keybinds so you can "override" this behaviour
it would be cool to have player disarming working like pickup searching so it can be cancelled and verified serverside
this doesnt seem to work 
Hey so anyone ever get a bug where reloading animations play but the server doesn't reload, or players are fully desynced movement wise? Can't see each other move but we're defo still connected since the server responds to certain events
shooting shows tracers coming out from nowher
can't shoot each other either
you want to show every info on a player except the Role?
Where the other player sees me vs where I am (mtf), and I can't even see them in the right spot either
i think ik the issue
that & maybe why
the issue
and setting player.CustomInfo doesn't add PlayerInfoArea.CustomInfo to these flags
is that its removing customrole on role change
but i techhnically add a player to the role before they fully spawn in
so when they fully spawn it removes it
๐
ill just
Anyone know what message id 16484 is
getting a weird bug where it sends this in logs and then reloading breaks

is connection(0) the dedicated server?
[2025-05-15 13:19:24.386 -07:00] [STDOUT] Unknown message id: 16484 for connection: connection(0). This can happen if no handler was registered for this message.
[2025-05-15 13:19:24.386 -07:00] [STDOUT] NetworkServer: failed to unpack and invoke message. Disconnecting 0.
yes
bruh
any way to check what's sending this
guessing something's making the host disconnect and then things just break
we're still connected but like, reloading doesn't work, sometimes we don't even see each other move
we can still do server actions though which is weird
okay found it
just had to output all message types
16484 is Mirror.SpawnMessage
Do not send messages to dedicated server player
Use ReadyList instead of List
(unless its been fixed already?)
I think List probably has the host, oops
yep found the issue ouch
3 instances of us doing that fixed, ty
Is it normal that I'M stuck at 0,0,0 when I prevent world gen via OnServerMapGenerating -> ev.IsAllowed = false;?
I'm assuming I need to spawn some sort of skybox of sorts for the game so it doesn't freak out
Only thing that is left is surface and pocket dimension
No facility is generated
And when you tp to surface?
I made a custom command to teleport to coords
Nothing concrete
tried to abomination to replicate generating the skybox but I gave up
Will check this, once second
Because like surface and pocket dimension is pretty much hardcoded into the scene
Its not generated during map gen
I think I broke the game 
Eh
OH WIAT
Hm?
- My custom cube spawns at 0 100 0
- I can teleport to coords just fine via custom position setting
- Enabling noclip snaps me to 0,0,0
- Tutorial forceclass just puts me at 0,0,0
I have no idea what is going on
also world is pitch black
I just got the Tutorial tower coords, will check if that works
Well if it didnt spawn you there normally
Yeah, surface is just GONE
Very possible
Try spawning a door
and cube near it
like below it
maybe you will be able to see it
Doors are not in the spawntoy cmd, one sec
I already spawn a cube at 0 100 0 btw and that works
will spawn a door on that actually
You will have to do that via plugin
yeye
Funny cause those are not refering to AtlasZoneGenerator
nor other Generator actually
so either Rider decomp lying to me, or that is generated in a roundabout way
They do, believe its called SingleRoomZoneGenerator or something like that
OH
Yep
I need to remove something from the Assemblies tab so the decomp in Rider refreshes so I can open classes 
I love this software
So I have all System. added to the disassembler so I can reload the decomp
Wait, how do you spawn a door with LabAPI now
I assume you no longer iterate through Prefabs and init from there
But looking at code all of the Get and DoorVariant assumes they exists ingame, which in my case they don't 
wait how do you even spawn a door? It is not part of the prefabs anymore
Ofc it is...
You do that still
Yeah
They are added via code
somewhere...
idk where
They might be in the zone gens...
troll
which doesnt run if you cancel the event
david ur trolling
YYeaaah about that. They are not in the prefab
I'm doing that
they are not in it
What if you generate the facility?
idk, I don't use LabAPI wrappers
dont cancel the event
Does OnPlayerValidatedVisibility not work for SCP-939? I set it to true but the 939 can't see the player at all until they get close enough
Ok not even then
[2025-05-15 23:17:16.340 +02:00] [INFO] [LabBreak] Pf: sportTargetPrefab
[2025-05-15 23:17:16.351 +02:00] [INFO] [LabBreak] Pf: dboyTargetPrefab
[2025-05-15 23:17:16.362 +02:00] [INFO] [LabBreak] Pf: binaryTargetPrefab
[2025-05-15 23:17:16.373 +02:00] [INFO] [LabBreak] Pf: TantrumObj
[2025-05-15 23:17:16.383 +02:00] [INFO] [LabBreak] Pf: PrimitiveObjectToy
[2025-05-15 23:17:16.394 +02:00] [INFO] [LabBreak] Pf: LightSourceToy
[2025-05-15 23:17:16.405 +02:00] [INFO] [LabBreak] Pf: SpeakerToy
[2025-05-15 23:17:16.415 +02:00] [INFO] [LabBreak] Pf: Sinkhole
[2025-05-15 23:17:16.426 +02:00] [INFO] [LabBreak] Pf: CapybaraToy
[2025-05-15 23:17:16.436 +02:00] [INFO] [LabBreak] Pf: InvisibleInteractableToy
[2025-05-15 23:17:16.446 +02:00] [INFO] [LabBreak] Pf: EzArmCameraToy
[2025-05-15 23:17:16.457 +02:00] [INFO] [LabBreak] Pf: EzCameraToy
[2025-05-15 23:17:16.467 +02:00] [INFO] [LabBreak] Pf: HczCameraToy
[2025-05-15 23:17:16.477 +02:00] [INFO] [LabBreak] Pf: LczCameraToy
[2025-05-15 23:17:16.487 +02:00] [INFO] [LabBreak] Pf: SzCameraToy
[2025-05-15 23:17:16.498 +02:00] [INFO] [LabBreak] Pf: TextToy
[2025-05-15 23:17:16.508 +02:00] [ERROR] [LabApi] 'ArgumentException' occured while invoking 'OnServerRoundStarting' on 'LabBreak.MapGen.DisableMapGen': 'The Object you want to instantiate is null.', stack trace:
I assume this is too early for it
Interesting cause I'M using OnServerRoundStarting to access these
Sure
public override void OnServerRoundStarting(RoundStartingEventArgs ev)
{
base.OnServerRoundStarting(ev);
var platform = PrimitiveObjectToy.Create(
new Vector3(0, 100, 0),
Quaternion.identity,
new Vector3(10, 1, 10)
);
platform.Type = PrimitiveType.Cube;
platform.Color = Color.blue;
platform.Flags = PrimitiveFlags.Collidable | PrimitiveFlags.Visible;
LightSourceToy.Create(new Vector3(0, 102, 0));
SpawnUtil.JustFuckingSpawnADoor(new Vector3(0, 102, 0));
Logger.Info("Spawned toy at " + platform.Position);
foreach (var player in Player.ReadyList)
{
player.Position = new Vector3(0, 102, 0);
player.SendHint("Sending to 0, 104, 0", 10);
}
}
JustFuckingSpawnADoor is
public static GameObject JustFuckingSpawnADoor(
Vector3 pos,
Vector3? pRot = null,
Vector3? pScale = null,
bool isOpenable = false,
bool isAlmostIndestructable = true
)
{
Vector3 rotation = pRot ?? new Vector3(0, 0, 0);
Vector3 scale = pScale ?? new Vector3(1f, 1f, 1f);
foreach (var singletonSpawnPrefab in NetworkManager.singleton.spawnPrefabs)
{
Logger.Info($"Pf: {singletonSpawnPrefab.name}");
}
var prefab = NetworkManager.singleton.spawnPrefabs.Find(p => p.gameObject.name == "HCZ BreakableDoor");
//https://www.youtube.com/watch?v=ZLiN2Js1UtQ
var door = Object.Instantiate(prefab);
door.transform.localPosition = pos;
door.transform.localRotation = Quaternion.Euler(rotation);
door.transform.localScale = scale;
var doorVariant = door.GetComponent<BreakableDoor>();
if (!isOpenable) doorVariant.Lock(DoorLockReason.AdminCommand, true);
if (isAlmostIndestructable) doorVariant.TryDamage(float.MinValue + 80f);
//door.UpdatePlayers();
NetworkServer.Spawn(door);
return door;
}
(HCZ BreakableDoor is maybe wrong , but the foreach should list the correct name for it)
ah
Moment
yeah
now it works
also it has a lot more prefabs
idk why its migreated to NetworkClient from that
but there must be internal reasons
Anyway. I have a door now.
But I still cannot move, nothing works
it is fine, I'M glad I noticed a problem
Yeah thanks
Will help further developing a very custom gamemode
Is there a way to spawn a skybox?
No
Ah
very strange that I see nothing and cannot move
I wonder, can I somehow get the zone generator instances and generate surface to check?
@royal mica Try spawning the door when the map generating even runs?
Not after round starts
That might work
The Door prefab is not added during OnServerMapGenerating
Only these 4, so I strongly assume either these are prefilled or async
will restart and see if it changes
wait, if you round restart, the server generates the map?!
huh?!
Huh
WAIT WHAT
Eh
Spawning a DOOR MAKES IT WORK?!
Okay.
So prefab is not filled during cold start
Fast restart keeps prefab filled.
In this way the game works?
I assume the door spawning
Yea
It works?!
trying a cold start rn
Oh is event order wrong in my head?
Does map gen happen BEFORE wait for players?
Which is OnWaitingForPlayers
Lmao
Actually I wonder how spawning a door affect this.
Does this need a fix from NW side so that no door is required?
Would I need to consider the position of this door so it is near 0,0,0 or is it fine to be at 1000(x3) ?
The answer is yes
Very strange behaviour.
I'm in Noclip. Door is at (1000, 1000, 1000)
I get snapped back to (872,872,872)
bump because I'm stumped. I even patched 939's visibility controller to always return true and it doesn't work 
Client side momenr
seriously, did NW change this between 14.0 and 14.1???
was like this before
i remember doing 939 events
on exiled
it nono work
god fucking dammit
alright must've broken sometime ago because i'm porting code that used to work apparently
ah well
"apparently"
?
was a working feature in the past, just guess that nobody noticed or reported it breaking between now and then
I'll open an issue
make everything client side
the unit gen is client side
the reloading is client side
the entire map is client side
the other people are client side
its just you
also for anyone who gets this one day, yeah just don't send messages to the dedicated server. You can also postfix NetworkServer.UnpackAndInvoke to always return true for the server (connection 0) so that if it ever happens again it won't be as severe.
Some parts I get, others are a little annoying but if NW wants to "fix" it by giving us LabAPI access it'd be nice
Reloading needs to be predicted or it'll feel like crap with latency/server lag
Don't need to let people attempt to cuff their teammates if the base game doesn't need it
etc etc




