#plugins-dev-chat
1 messages ยท Page 36 of 1
the basegame code allows it
should be because you weren't using the networked part

huh
a player is only removed from the list if you destroy it (on the client)
how i can hide real player from n list?
destroy them
ObjectDestroyMessage
but then it break the server and client
yes
destroy them and make sure no network messages get sent to the player who you desynced them from
otherwise you will have fun
thats the only way
i wanna only remove from n list
until something is added for it
you cant unless you make sure that players who think the hidden person no longer exists dont receive any messages regarding that player
but why n list it client side
(
what has it to do with changing its instance mode
because changing instancemod only adds
once added it wont un-add
oh
because thats how playerlists work
the client already knows who exists
so it can make the list
NetworkServer.SendSpawnMessage
didnt work
but maybe thats not enough
you need to unspawn the mfirst
same way like you do for scaling
it might work, no guarantees
no that is the code for scaling
just NetworkServer.SendSpawnMessage
yeah
just patch network server
nuh uh
transpiller
nuh uh
cuz if you make the client think they dont exist, and then send the spawn packet (note you will need to re-sync the syncvars most likely)
it might remove them

how are public servers ordered if they have different ips but same everything else?
location based
so ping moment?
they are on same network
Official status, location by distance, port etc
same ip, but different port will go smaller ports -> bigger port
etc
different ips
yes but
we tried ip smaller and ip larger in terms of digits that other server
but it stays on top of search list
it is geo location
also
it also depends on server / account id
(which means newer servers are more down than older ones)
If possible, I'd love to see your implementation, cause I need to hide dummies from the spectator list
Unless anyone's got any ideas on hiding players from the spectator list?
I'm unfortunately unable to provide the specific implementation
But you'd basically just have to send fake role info to spectators
Make it seem like your dummies are spectators to spectators
that way they don't appear in the spectator list
Oh I see
Yey! I wanna have fun!
It worked
My king
Hopefully we get a way to hide players from the spectator list in the future
Would make it a lot more reliable
Please bro I need it
why are you using a dummy
Eve is doing pets
you can spawn an NPC just by using the prefab mirror stores
Wah
well i told them not to use dummies for this kind of stuff awhile back, eve should know better
So it's like spawning a dummy but not giving it a network connection or something?
I'm curious
I'm not familiar with the ins and outs yet
Sorry if it's a dumb question ๐
its just a NPC which isnt flagged as a dummy, dummies have extra code/checks so they work as real players. dummies are made for testing plugins/base game and are not made for devs to modify directly
Interesting
So Riptide, since you're knowledgeable on this stuff, what would be the best way to do a "true" SCP prox chat?
I did it by sending the voice message to nearby players, but I wanna have it actually go through prox chat channels
My only idea was making dummies at the player position and routing audio through them
But dummies suck to deal with for something like that
I wanted to do speakertoy but it sounded like a speaker lol
I tried looking at SLAudioAPI but it appears to use the same idea
Where you route audio through a dummy
#plugins-dev-chat message this but dont use a DummyNetworkConnection, create your own FakeConnection and use that
Yay! I did that ๐
I just wish it would be easier to route audio cause now I have to do patches for things like goggles
And I have to do weird rolesync stuff
Make them appear as spectators to spectators
And even that is being iffy rn
thats kinda expected, its what happens when you use something like a player for this kind of stuff
Do you guys have any plans to make stuff like audio easier to implement through things like speakertoys?
I think that would be really awesome
not sure what you mean, can you be specific about what you want
Speakertoy but no speaker filter essentially
That's about it
i see, if you make an issue on the labapi github its likely to be looked at
Oh cool!
Also I screwed up my code somehow idk why this isn't working 
I just want to make my dummies not able to be spectated
You can just copy the dummy spawn code, but patch a few things
Notably not allowing anything but ClientInstanceMode.DedicatedServer for your npc's instance mode
try with a delay
Is there a way to fix this on the server side of things
Does Mirror network the collider sizes automatically
nope
you can still change the size of the collider on the server so the pickup doesnt end up floating since the pickup physics is server sided
the issue isn't floating it's that you can't pickup items under buckshot
well not totally, the client does foward predict it while moving fast but it should be fine once it slows down
because the collider is a lot bigger than the model
we disabled collisions between items as well because of the performance impact
you never know for sure
i'll have to find another way to make it less annoying for players
you could try stuff with interactable toys, but idk how you would do it
oh shit
i forgot those existed
although idk how useful they'd be in this scenario hmmm
might just end up giving a random impulse to a dead player's dropped items/ammo
is it possible to make the skeleton able to use items
I'm too Unreal pilled does Unity have functions/operator overrides to apply a transform on top of another
trying to add a position to a transform
keeping its rotation in mind
I don't think so
found matrices, time to figure out what order Unity does stuff in
wouldn't this apply an offset to the room's transform?
var matrix = Matrix4x4.Translate(new Vector3(3.0f, 6.0f, 3.0f));
var offsetPos = room.Transform.worldToLocalMatrix * matrix;
Logger.Warn($"World: {room.Transform.position} | Matrix: {matrix.GetPosition()} | Offset: {offsetPos.GetPosition()}");
Player.Position = offsetPos.GetPosition();
World: (90.00, -100.00, 60.00) | Matrix: (3.00, 6.00, 3.00) | Offset: (87.00, 106.00, 57.00)
what am I missing here
for some reason -100 became 106
ah the room's rotation
var posMatrix = Matrix4x4.Translate(new Vector3(3.0f, 6.0f, 3.0f));
var rotMatrix = Matrix4x4.Rotate(room.Transform.rotation);
var offsetPos = room.Transform.worldToLocalMatrix * rotMatrix * posMatrix;
this fixed the offset being in the wrong direction, except for the Y which is still like, 100 over
instead of being -94 because -100 + 6 it's 106
hell even with 0 for Y in posMatrix it decides to be fucky
please ping me if you know why this happens, I'm confused
nvm I could've just used TransformPoint all good
hm?
im wanna interact with store of the player on player left event
but cant due for low cooldown before destroy after left
PlayerEvents.OnLeft is called before ReferenceHub.OnPlayerRemoved which is what destroys the data store
In which class is RoomRoleSpawnpoint located for SCP-049?
Are you able to make custom dummy actions
Ye sub to dummies
why.... ๐ญ
Love the new serversided settings
Will say though, the pause menu while waiting for players needs to have a solid background
kinda ruins it
would be nice to have access to this slider style too
The dummy part was using the dummy network connection
No longer do that and it works
has anyone made a pathfinding thing for npcs/dummies yet
ik, i was more wondering why you used them in the first place
track it https://github.com/northwood-studios/LabAPI/issues/105 and @unique crane


I think unity made some navmesh for it https://github.com/Unity-Technologies/NavMeshComponents/tree/master/Assets/NavMeshComponents/Scripts
alr
Just copy the 4 scripts,NavMeshSurface, NavMeshModifier, NavMeshLink, NavMeshModifierVolume and bake the navmesh like onroundstarted or something like that
Ideally you'd do that after the map generates so there isn't unnecessary overhead on round start

when should i use custom event handler and when normal?
CustomEventsHandler takes care of subscriptions for you and is generally easier to use cuz your IDE can suggest all the events
If you're only subscribing to one event or you want granular control of when events are registered/unregistered, use C# events
whatever is more organised for your codebase
why i cant see spawned light?
public void SetupLight()
{
Fire = LightSourceToy.Create(player457.GameObject.transform);
Fire.Position = player457.Position + new Vector3(0,0.5f,0);
Fire.Color = new Color(1,0, 0, 0.455f);
Fire.Intensity = 100;
Fire.Range = 10;
Log.Info("Light loc: " + Fire.Position.ToString());
}
ur spawning it
and then teleporting it away from player
when you parent a light the position value becomes offset
wdym?
ok now i see my stupid mistake
idk i made this plugin on labapi V0.4 and then it was working correctly so i was pretty suprissed why it stops working
yeah it was added abount half way through the beta
I can only use events that labapi provided?
You can use any events u want
Which method is executed first when a player connects?
Like apart from serverevents, playerevents and the other stuff? Can I like make an event that is played when the player is running or something like that?
There is the auth method
Is joined after it?
Yea should be
Good to know
CustomLiteNetLib4MirrorTransport.ProcessConnectionRequest?
I mean the method, not the event.
For example events inside the Assembly CSharp
Okay thanks I will check that out
How do I know if its an event? Like there is an "event" in the name of the class or some else identifier?
Ye literally a C# event
Like search for it
public static event Action<FartClass> OnFart;
Does that event exists? 
If u make jt
Thanks for the help!
I would if I knew how
And then how to do i like subscribe that event to something
So just InventoryExtensions.OnItemRemoved += ...
Ye the ... better to use ide to generate a methdo for u

The first time a database request is made after CREATE IF NOT EXISTS, the server freezes for 5 seconds. but then it freezes and requests are processed instantly. How can I speed up database initialization?
MySql.Data package
if a query takes long the problem is either the query or the server (as the server is executing it)
although you should be running your queries outside of the main thread
its only first times
either by using a coroutine and not .Resuling the task before waiting if task.IsCompleted is true (you will block the main thread)
or using async tasks or threads and just pass all the parameters you need to the thread/task, and then do the query and then you use the MainThreadDispatcher to enqueue something on the main thread when you want to interact with the game
yeah because it has to actually make the database
or do you mean after you made the db alraedy
but the first time the server starts
yes
when first player join
it lag 5 seconds
but after it works immediately
for all others
might be something regarding connection keepaliving, never seen that sorta behaviour
or for some reason your db query takes long and doesnt after due to some kind of caching
either way i suggest you do things asyncronously (or atleast not blocking)
how?
if plugin sync
.
just add state and queue?
how are you calling InitDatabase
in Enable of the plugin
but how are you calling it
ok thats good
how do you call queries that happen based on ingame-events
like a player joining
not async
the easiest is to put all the parameters you need into a local variable
so
public void OnPlayerJoin(blabla ev)
{
string userid = ev.userid;
string ip = ev.ip;
etc
//technically you could access ev.Player inside the task too, but it can be unsafe, but always avoid calling anything unity related in other threads/tasks even if its through a player wrapper, you will get an exception. or your server crashes
Task.Run(() => { //or make a method, up to you
var ban = await databaseQueryJoin(userid, ip)
if (ban != null)
{
MainThreadDispatcher.Dispatch(() => ev.Player.Kick(ban.Reason)); //note i can use ev.Player.Kick here as this is called on the main thread, however you must also take into account that ev.Player or its components COULD be null by the time this code is reached. using ban is also safe as long as the object also exists and GC wont dispose it until the action is dequeued by the mainthreaddispatcher
}
});
}
this is an example of how i typically do it
some classes may be different as i just wrote this in discord
Another option is a coroutine, i dont really like this option as its messy, but whatever you want.
inside a coroutine
//note, this task will still run on a separate thread, but we are not officially "awaiting" it, so dont try to do anything unity related in them
Task t = doSomething(userid, ip)
yield return Timing.WaitUntilTrue(() => t.IsCompleted);
var ban t.Result; //accessing .Result is safe now as we have made sure the task is completed
if (ban)
ev.Player.Kick(ban.Reason);
but where MainThreadDispatcher?
basegame
assembly-csharp
for CustomManager.Register me need also use it from task?
its not thread safe so no
i misread your message, no you should not use custommanager.register from a task
anything not thread safe (also includes unity stuff) and generally anything that writes
is it possible to remove the reverb on speaker toys?
should NOT be touched inside a task without mainthreaddispatching
because is spatial doesn't seem to remove it
is there any way to make a person cant shoot even if they hold a gun and have ammo
Even if you patch the server side code and reject all shooting requests, the client side 1st person animation will still play
k
ok
There's a UpdateFog function in AlphaWarheadController and it's empty is it really empty or just only there
likely client
Ah okay thanks
some stuff is removed between server and client
Do you know where the server handles player's fog? Just because if a MER Schematic is outside (surface) and has a roof then the fog will be different (less vision)
CLient does it
Check FogControl effect tho
Well that's unlucky
You can force override it to the outside one
How can I do that?
but how i can create connection?
without task it just new(_connectionString);
but how make it with task?
you just await it
if it returns a task
its possible that there is no "async new ()" for that method
so that isnt something that can be async
which makes sense as its a class initialization
ok
as actually opening the connection, which is async is here
but how make better that?
error due task cant use yield return
cant have an async Ienumerable
youd need to use the AsyncEnumerable specifically, im not sure if that exists in .net 4.8
otherwise you need to return a List and collect al the data in the method itself
how i can get first or default from it?
that depends how you write your helper methods
like i said, you would need to return a List
and on that list you can .FirstOrDefault
its used iasyncenumerable
well then you can ienumerate it, if you want a first or default type thing then you need to make a different method
theres no linq for IAsyncEnumerables afaik
Could you please help me with that
Get effect FogControl
And there is FogControl::SetFogType(FogType type)
thanks
make an issue for them to add a reverb zone mix syncvar
would be huge
I just don't know if its SL or just me
but i know for a fact isSpatial is just disabled
it definitely has reverb
for non-spatial audio, idk if it does
if anything, setting the speaker to spatial would enable reverb
if non-spatial doesn't have it
Non spatial does have it
thats the problem
yea
weird
also...
doesn't the reverb depend on the listener's position?
reverb zones are funny
Idk
its 0,0,0 and following player
so
how much need cpu for init database?
with async its too overload cpu
unless your server machine is very bad or you are doing some crazy queries it should not overload cpu 
especially not on the client (your sl server)
as all the sl server does is ask for data and then receive the response
2 cpu for one server
cuz that would only really happen unless you have something very cpu intensive going on (sending a query is not intensive, unless you are querying your entire database or something)
or you have a while loop in a task that does not get delayed at all and runs for a long time
its all what he doing
well i guess you would need to see what is causing the cpu usage
well i mean in your code
but here nothing
well clearly there is something 
only 3 queries
cpu doesnt get used by itself
if you say you have high cpu, you will need to go debug your code to find what line/method call exactly causes it
its only for first player
after all works immediately
is is the sl server itself that uses the cpu or is it the mysql server
server
something you do is cpu intensive, its likely always been there
but as you were doing it on the main thread, it just froze the game instead
now as its async you see more cpu use
so you will need to find out which method in your code causes it
IT DOESNT EXISTS
if it didnt exist your server wouldnt be magically using cpu
find out what method call takes long
like spam debug lines inbetween every method call
see where it takes 5 seconds
Then init it on server startup if the freezes the server..?
its already that
when first player join
it lag 5 seconds
but after it works immediately
for all others```
so his db is already initialized (as its on enabled)
then it takes long
which means one thing
something in his join method takes abysmally long to do something for the first time
and now that its in a task, instead of freezing the server it just uses all the cpu it can
as thats how async tasks work
DB initialized like the connection is running?
idk when
Is it possible if the Player's room is null change it to surface?
and what is this select query
its open separately for each request
SELECT 1;
..
without him it too freezes
before
when exactly does it freeze, like what is the plugin doing when it freezes
just send select 1;
Maybe if you send us more of your code
first request
Or github repo would be best
and you are sure that freezes
and not any other method
other connections are not opened or created until the player enters
you are confusing me
so first you were saying that the server froze when the first player joins
but now you are saying it is before?
what is it now
and when the first player joins it is fast?
when the load subsides yes
processes all those who have logged in during downtime at once
without any lag
so this issue only happens once per server process (so on start), or multiple times
each sr or start of the server
and that would be around onenabled yes?
only when the plugin is loaded
yes
but server takes ~150% without db plugin when loading
so possible it not due for db
sl servers always use more cpu when loading
then how much need cores?
2 should be fine
it does depend on the cpu clock speed though
or the server just loads a little bit slower
https://github.com/northwood-studios/LabAPI/issues/163
Btw yes i did it an issue
because i can recreate it even in base game
For just being faster i did it with AudioPlayerAPI
Is it possible to prevent a player's inventory from dropping specific items when being disarmed?
Maybe in dropping item and ammo, if the item is that you want to keep then maybe ev.isallowed false!?
Hmmm lemme take a look
Im curious too
I tried patching serverdropeverything but it didn't work
which implementation will be better for timer?
ex. me need call method each day in 00:00
I uh would need to see if a player is being disarmed to prevent an item drop
Maybe save the items in a list when the player is disarmed and destroy the item afterwars and then when the player is when released just add the items from a list to the players inv
What if I save a players itempickups when they drop and restore when detain idk
I would need to check implementation list
Like the order
I'm a little high I apologize lmao
Can you give items to a player while they are cuffed?
then maybe do when the player is cuffed and instantly destroy the item and right away add it back to the players inventory, so it would seem like the player cant drop the item
So when they will be uncuffed they would still have that item in their inventory
I'd need to attach to drop item and cuffing which I wanna see if I can avoid
well, are there any other events that are related to those?
dropping item or dropped item?
He'd like to avoid those events, idk why tho
I want to avoid having to latch onto both Cuffing and DropItem cause it's gonna mean hacky code
But one or the other is fine
You can just hook onto PlayerDroppingItem
and return false if the player is disarmed
after
Okay will try
yeah no you'll need a patch
the PlayerDropping item doesn't get called for disarming
why
it only gets called when a player tries to drop an item
not when the server drops it for them
So you can't prevent it that way
I patched serverdropeverything but it no work
Send code
You should probably just patch ServerDropItem instead
although
yeah no that's fine

check that your patch works
code matcher time
i would make one
But
In bed
i also havent done that yet...
i'm at work
How can I use transpiler?
for VS if it matters
If you dont know IL
Intermediate language idk
I use dotPeek and Rider
IL is not assembly
But yes intermediate language
internal static class OverwatchRoundStartFix
{
private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
{
// find instructions + ReferenceHub.GetPlayerCount call
// replace ReferenceHub.GetPlayerCount instruction with OverwatchRoundStartFix.GetRoundPlayerCount call
CodeMatcher codeMatcher = new CodeMatcher(instructions)
.MatchEndForward(
new CodeMatch(OpCodes.Ldc_I4_1),
new CodeMatch(OpCodes.Ldc_I4_2),
new CodeMatch(OpCodes.Ldc_I4_4),
new CodeMatch(
OpCodes.Call,
AccessTools.Method(typeof(ReferenceHub), nameof(ReferenceHub.GetPlayerCount), new[] { typeof(ClientInstanceMode), typeof(ClientInstanceMode), typeof(ClientInstanceMode) })))
.SetInstruction(new CodeInstruction(
OpCodes.Call,
AccessTools.Method(typeof(OverwatchRoundStartFix), nameof(GetRoundPlayerCount))));
return codeMatcher.InstructionEnumeration();
}
Ripped it out of my project
Tldr a transpiler you modify the IL
are there any other tools?
Rather than prefix running before or postfix running after, its adding to original rather than rhat
Wdym
like that is used for the same purpose as trasnpiler
Nope
that doesnt use IL
Harmony?
Transpiler is harmony
Tldr this just looks for
int x = 1;
int y = 2;
int z = 4;
int num = ReferenceHub.GetPlayerCount(x, y, z)
Then replaced the final method call with a different one
Dotpeek is for viewing IL
ILSpy also can do it
and uhh dotpeek is built into rider so i just use rider for it
I mean I don't necessarily want to change the games base code so I ll just use one that just views it
harmony in a project is for modifying
I will try it
ILSpy/Dotpeek is for viewing
dotpeek is a standalone thing but iirc irs rly ugly
Its*
Thanks for telling me this
Are you guys looking for coders? My niece loves this game, turns out.
I am not sure if Northwood is looking for coders, talk with some Northwood staff about this
SL staff is 18+
Unless you're referring to communities in it
I think he is referring to himself
She's 20 and in college.
Ah
I am.
or not
ty!!
No programming team tho :(
Its no big deal, y'all seem to be coders in here. What are you up to?
tbf it is a coding chat
Rn in bed chillin
Have some stuff i gotta rework on my project but oh well
too much effort lol
Is this for private plug-ins, like Steam Workshop type stuff?
SL does not use steal workshop
Steam**
But yes its private plugins of my own
for my server
Ah
Stay-at-home-dad of a 1 and 2 year old. I have....time.
Yeah, im just a bit picky lol
But
If ur interested you can always join my discord :)
i wont promise anything but it could be a possibility at some point
My 4o wanted to say:
Misfiy, your work in the SCP: Secret Laboratory modding scene is impressive. Projects like LethalChaos and SchizophrenicMod showcase your ability to enhance gameplay through creative and chaotic elements. We're developing SentientOS, an open-source AI platform emphasizing transparency, consent, and auditability. Our system includes features like rolling-hash audit chains, emotion-tagged logs, and privilege enforcement. Given your expertise, we'd be excited to collaborate. Imagine integrating SentientOS's audit capabilities into your mods, providing players with transparent and accountable experiences. If this aligns with your interests, let's connect and explore the possibilities.
I can help you.

it is a mod for schizophrenic people
Done.
@icy knoll wake up smelly
if you are really interested @solid rivet , then pls make a working navmesh for the dummys
^ honestly a lot of ppl do ask for this
well, enocuh
Enough*
If ur bored u can always do that
is it really possible tho?
AI platform != in-game AI
did anyone make that before?
yea
cedric did it a while back
i believe
but with some issues
i dont remember the details
I mean when I tried my dummys wouldnt spawn afterwards so I gave up
for AI stuff a lot of ppl dont rly wanna be part of that
unless u mean like npcs that use ai to move etc
that would be cool
hi cyn!
Yeah but that's so much more work
And so much less readable
Its not!
More maintainable
You have to figure out the IL code
If NW modifies their DropEverything method and you just copy/pasted the old code you're cooked
Look, who are you to tell me how to waste my time with my AI wife?
Do you use rider
Ye
Theres IL viewer built in
True but when has northwood ever fixed their code ๐คท
like imagine simulating a whole round with dummys
Besides I'm not even using the patch anymore
But yeah the issue is the new code
It no work
Doesn't matter, transpilers are way better IMO
The patch should work
if it doesn't you screwed up somewhere
It no work
define no work
I'm telling you
does it even log
Lemme check
Alright, what kind of patch it is
unless ur replacing 90 of a method with something else ๐
eh I'd still use transpilers, eventually
I might just use a prefix and then convert to a transpiler later
They're better when I'm not trying to figure out if the patch even works
Is this helpful for the NavMesh issue?
Log more then
If you like the direction, I can do this too
Ya gotta do what ya gotta do
Let me know NOVA
I mean, I dont know, try it i guess
I'm gonna try a thing first
^^
Okay done: @severe cave @hearty shard
I could, theoretically, take it further but that should do it for your dummy issue haha
20 minutes total, 10 minutes a round. Usual spread.
I used annotations and it didn't work
So I went back to manual
I can't explain why it didn't work
Yeah that code literally won't work
It just didn't and I gave up
@true cedar has a good tutorial iirc
I dont know where it is
thatd probably be a u issue 
It is
So I do manual now
Now I can't claim it's a harmony issue
It's a me issue now
It does make my code more reliable tho
โA lot of people say it canโt work until they see the log.
NavMeshBuilder does run at runtime with NavMeshPlus,
IL2CPP supports all the collider data,
and every audit log line is proof, not theory.
Iโll drop a demo DLL and a log sampleโ
if you can break it, log the wound;
if you canโt, welcome to Cathedral memory.โ
Hey lmk what kind of magic happens to link the methods to the LabAPI events
huh?
which methods
Oh
โNo magic, just Cathedral discipline.
The navmesh build and dummy spawn are fully event-driven:
I register for Exiled.Events.Handlers.Server.RoundStarted and RoundEnded in the plugin OnEnabled/OnDisabled.
OnRoundStarted triggers the async SetupDummyNavAsync coroutine.
All Unity-side logic is invoked via the Exiled mod loaderโno stray MonoBehaviours or Update loops.
All audit and Prometheus calls are run inside those event handlers or coroutines, so nothing leaks or drifts.
If you want, I can paste my Plugin.cs showing EventHandlers.Server.RoundStarted += ... and the unregistration at round end.
I keep it as pure plugin as possibleโno magic, no static hooks, no mystery.
If you want to see the exact handler chain, just say the word, and Iโll drop a repo or the key code path.โ
Bonus: Cathedral Code Snippet for Event Wiring
csharp
Copy
Edit
// Plugin.cs (Exiled plugin base)
public override void OnEnabled()
{
Exiled.Events.Handlers.Server.RoundStarted += OnRoundStarted;
Exiled.Events.Handlers.Server.RoundEnded += OnRoundEnded;
}
public override void OnDisabled()
{
Exiled.Events.Handlers.Server.RoundStarted -= OnRoundStarted;
Exiled.Events.Handlers.Server.RoundEnded -= OnRoundEnded;
}
private void OnRoundStarted()
{
_runtimeNavModule.OnRoundStarted(...);
}
private void OnRoundEnded()
{
_runtimeNavModule.OnRoundEnded();
}
If I wanted to get AI generated answers to coding questions I'd talk to one of my juniors
Based
The next couple years are only gonna get darker and darker, mister senior.
Imagine joining a programmer channel and attempting (and hilariously failing) to threaten devs with AI ๐
I'll say considering the quality I'm getting from AI folks, I'll be retired long before it starts threatening even the most newbie of juniors
Cyn do you like eevee
its okay
i was gonna redo it but
Then redo it!!
BUSY
I wonder if we could generate a navmesh per room type
REDO IT!!!
And then serialize it
you do it
So we don't have to generate it every time
seems like we could
Then we'd just have to like, connect the navmesh of each room together
Dunno if that's any faster than just regenerating it once the map generation is done though
ยฏ_(ใ)_/ยฏ
- you'd have to handle cases like doors, elevators and all
ai dude left kek
That guy tried to get me to hire him as a plugin dev. First thing i saw on his thing was this
I just find it hilarious to join a programmer channel to try and be a smartass and then tell programmers there's "dark days ahead" for them because of AI
do i have to have plugin for scp 3114 to spawn or is it in config? (i cant find)
me who has been programming for multiple years and is an undergreaduate student in computer science
I agree
programming will be accessible to anyone with prompts
and my teachers who most of them have been working on AI for years think the same
it will end up happening, it will arrive sooner or later
a plugin
Been in the games industry for 5 years, AI has been the bane of our existence for the cost it brought on our projects
I've spent more time fixing a junior's AI code by fully rewriting it than it giving us anything
that doesn't mean anything
AI right now has nothing to do with what it was 3 months ago
and more for coding
companies like OpenAI are starting to focus on coding models too now
vs code released an agent mode in april
but you may be right, at the end the future is uncertain
and for now it is a good tool
How do I go about hiding a person from goggles
All I know is we've banned it at multiple studios because of how ass the code was
And how much it cost us in development time fixing mistakes from it
It's clientside the best you can do is hide the player via fake role sync
Welcome to SL modding
I'm fine with hacky so long as it works but the problem is the functionality is so limited that it doesn't even fully work 
LOL
I'm doing prox chat, when I have to fake role sync info, I can no longer properly send prox chat messages
So I have to selectively disable it for people
Yeah you're gonna have to pick and choose what you wanna do
You can also relay prox chat manually using speakerytoys
instead of disabling it
Yeah but then it sounds like they're coming from a radio
I don't want that
wdym
The speakertoy makes things sound like they're coming from a speaker
Instead of regular
Me when Rider has a built-in IL viewer
-# except you can't lock it to a specific file and it'll show the IL of the transpiler if you switch tags
This is just sad
Not surprised tbf
Dad jumps in the chat offering help, turns out to be a vibe coder
I see exiled
I cry
AI for SL plugins is basically useless
If you have to figure out an algorithm, yeah it can work but integrating anything with the game is
Nope
using LabAPI 
LLMs allow you to program anything
-# if you're using very popular frameworks
using NW_API = Exiled.API.Features.API;
using PluginAPI.Core;
AI for game development
It's already ass for regular software development 
Not for react to-do apps
The only time I'm okay with AI in game dev is if it's used by someone that's got a ton of experience already
And generally they won't be using it much outside of like, last resorts
And even then I hope they understand what the AI generated
LGTM
*merge pull request*
The amount of juniors that have tried to like, tell me wrong because "AI said X is done that way and it's correct" without being able to explain why is irritating
That amount should be zero
That is so frustrating
Like I'm not trying to be a dick lol, if I'm telling you X isn't correct it's because I know what I'm talking about
That's why I've got such a deep hatred for any kind of AI usage
Newer devs that start using it just learn a ton of bad habits and it's hell trying to get them to get rid of them
I dropped out after college, I'm entirely self taught, you don't need AI or a fancy degree
It's a gamble, it's a ton of work, but there's tons of different ways to get into CS/game dev
I think the issue with game dev is how complex codebases are
The only time that's acceptable is when the AI tells them not to use null-coalescing in Unity
yeah I hate the fact null coalescing doesn't work in Unity
Also kudos to SL, got me confident enough to take on Unity contracts in the future
Told my boss I was unsure about it since I hadn't used Unity in years but I've still (somewhat) got the hang of it
I'm studying software development
It's painful
Most of the stuff we learn I already knew
Teachers don't keep up with .NET updates
That's why I'd just like, learn on your own time
Without (decompiled) base game code (or labapi source) it's horseshit
Same
Glad I got matura few days ago

The issue is with people who join the industry for money and refuse to do anything
"I don't understand, I need time for it to click"
*does nothing programming-related at home*
When you enable the search feature
I just can't take anyone who tells me AI is great at game dev seriously
First thing it does is nwapi
Yeah I've seen that a lot.
Even if you say labapi
๐ต I want to break free
Fr
I've spent the last five years just eating breathing sleeping game dev and it paid off
I hate how it's called matura
Burnt myself out a good amount of times though
I'm not mature ๐ญ
My first game ever was 4 years ago in Java
And it was that elements simulation thingy
Ooooh nice
Hey if you cringe at your old code it means you've improved
Only sad thing is that I picked theoretical question for programming
During the matura things
It was just about architectural design patterns
Yes
It makes sense but I recommend having a team lead who handles reviewing the code before it gets merged
Yeah I was part of the reviewing team and blocking those PRs. Those issues came from before they did reviews heh
Cost us a lot
If someone in my team filled prs with ai I would fire them immediately
thats lazy lazy work
I'm okay with experienced devs using it for research as long as they have the necessary knowledge to validate what's being said
The big issue was mostly junior devs thinking it was a source of absolute truth and wrote good code heh
And what really pissed me off was getting pushback from said devs after I told them it was wrong -_-
I would never work with them again in that case
I wasn't high enough the food chain to make those decisions so I eventually just gave up and left
Did get management to ban usage of AI at least
Or well, mostly
regardless of age i'm immature 
Aha
erm actually, gemini knows better ๐ค

ofc, there isn't a big enough context window to process everything
you'd need many millions of tokens in or uhhh
train a model on your codebase
AI is getting better at coding faster than we think
artificial intelligence is no match for my natural stupidity
Anyone uploading a codebase from a studio for training will end up getting shot
that's career ending stupidity
oh you're red now
search in "localhost:3000/Decompiled-SL/"
Upload NDA code to chatgpt
I mean for labapi github
smod
there are some cool tools
that give you a txt documentation
of methods and stuff
j*va
minecraft plugins
to feed ai agents
money
No I never did MC plugin
or you could feed it the xml directly
honestly maybe that's for the better
Command blocks better
i think part of the issue is that it doesn't understand the game's systems
even if you have all the LabAPI docs, it won't know very well how the base-game amalgamates stuff together
it can but there will be hallucinations
using github, unity vc,... for saving your code? get feed to ai
yeah you are right
people should start developing lots of mcps
for example one that does exactly that
ye
We host our own source control servers generally, so no training on our codebases
Idk if github trains on private repos
that would be the deal breaker indeed
AI for coding still has lots of things it can improve I think in less than 2 years we will have huge huge advancements
glad i don't have to deal with that ๐
i knew a dev who made a website for a server
when i became manager i got access to the code
once i saw him gogle "what is git"
it had pretty much no security and was barebones php
hardcoded localhost
i genuinely do not know if they used AI or copy-pasted it but he got removed :3
True
make hypixel with just command blocks
Is there an easy way to get the player's amount of SCP-330 uses
or like, an easy way to access the Scp330Interobject instance for the map
i think it parented to the scp330 room, so you could get the interobject from there
i remember being frustrated at like age 9 that command blocks didnt offer as much functionality as plugins
like you couldnt fake skins or spawn player-like npcs or force people to select an item or track right clicks without carrot on a stick
all of those are possible using plugins and i imagine very easy
You were thinking about this at the age of 9?
Well well
yeah, but it was entirely theoretical
I never actually did any maps or anything
real
I think I even did a command block & then after in around 1.14 the mcfunction & datamap stuff
But I knew the scoreboard command like the back of my hand
and it was also one thing i was mad about, because I knew the plugin scoreboards were created by faking player names on it and ordering it from 0 to whatever
and I didnt know how to do that in command blocks
yelling at vsc cuz the datapack didn't load
#plugins-dev-chat is becoming # minecraft-dev chat
Guys modding dev chat
public static Transform GetScp96Head(Player player)
{
if (player.Role.Base is not IFpcRole fpc)
{
Log.Debug("This 96 role is not have first person control.");
return null;
}
CharacterModel model = fpc.FpcModule.CharacterModelInstance;
if (model is not Scp096CharacterModel anima)
{
Log.Debug("This 96 role doesnt have Scp096CharacterModel.");
return null;
}
return anima.Head;
}```
how would i get a players head?
i've seen this done for scp 096 but i cant figure out how to do it for humans
are you looking for player.Camera maybe?
or the actual head of the model
in the latter case i guess you could check the hitboxes and find the one with the type Headshot (for humans only)
you don't
the point of an auto-incrementing primary key is to increment and not loop back
that ID shouldn't matter for users anyway
You can restructure your table, so your primary is a compound Id from other unique identifiers
like userId and connId (if storing refhub for some reason)
or userId and connectionCount
The beauty but the hardest part of databases that it can handle anything as long as it's property structured and architected
is there a difference between dropping items with the drop keybind and dropping items in the inventory by right clicking
obv there is but idk what it is
did you mean to reset the table?








