#plugins-dev-chat

1 messages ยท Page 36 of 1

limber silo
#

it should

hearty shard
#

ced and david both say it doesnt

limber silo
#

the basegame code allows it

hearty shard
#

i mean ill keep using my code it works

#

doesnt show in RA but i dont rly need to

limber silo
#

should be because you weren't using the networked part

slate flume
#

@limber silo ๐Ÿคท๐Ÿผ

#

@hearty shard you're my hero

#

I could kiss you bro fr

hearty shard
#

๐Ÿ˜ญ

#

id prefer u didnt

slate flume
burnt hearth
#

dummy position was off

#

but it should be fixed

hearty shard
burnt hearth
#

wait

#

wrong channel

#

and server

#

lol

hearty shard
#

๐Ÿ˜ญ

#

go back to CT

harsh thorn
random scaffold
#

how i can hide real player from n list?

hearty shard
#

ObjectDestroyMessage

random scaffold
#

but then it break the server and client

hearty shard
#

yes

harsh thorn
#

destroy them and make sure no network messages get sent to the player who you desynced them from

hearty shard
#

yea ^

#

that

harsh thorn
#

otherwise you will have fun

hearty shard
#

thats the only way

random scaffold
hearty shard
#

until something is added for it

random scaffold
#

but he can play on the server

#

and interact with other humans

harsh thorn
random scaffold
#

(

limber silo
harsh thorn
limber silo
#

there is a hook

#

to the id syncvar

harsh thorn
#

once added it wont un-add

limber silo
#

oh

hearty shard
#

ced pls add msg to remove

#

thanks ced

harsh thorn
#

lmao

harsh thorn
#

the client already knows who exists

#

so it can make the list

hearty shard
#

didnt work

#

but maybe thats not enough

harsh thorn
#

you need to unspawn the mfirst

hearty shard
#

prob not

#

ok

#

well

#

i cba rn

harsh thorn
#

same way like you do for scaling

hearty shard
#

but

#

๐Ÿ˜ญ

harsh thorn
#

it might work, no guarantees

hearty shard
#

just NetworkServer.SendSpawnMessage

harsh thorn
#

oh

#

trolled

hearty shard
#

no destroy first

#

lol

limber silo
#

yeah

harsh thorn
#

maybe send a uh destroy message to the clients

#

and then send a spawn message

hearty shard
#

๐Ÿ˜ญ

random scaffold
limber silo
#

use the code I sent first

hearty shard
random scaffold
#

transpiller

hearty shard
harsh thorn
#

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

limber silo
#

you could patch the syncvar

#

there are like 3 different ways to do it

slate flume
brazen dune
#

how are public servers ordered if they have different ips but same everything else?

brazen dune
#

so ping moment?

hearty shard
#

its based on like

#

a few things

brazen dune
#

they are on same network

hearty shard
#

Official status, location by distance, port etc

#

same ip, but different port will go smaller ports -> bigger port

#

etc

brazen dune
#

different ips

hearty shard
#

yes but

brazen dune
#

we tried ip smaller and ip larger in terms of digits that other server

#

but it stays on top of search list

hearty shard
#

it is geo location

#

also

#

it also depends on server / account id

#

(which means newer servers are more down than older ones)

slate flume
#

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?

grand flower
#

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

slate flume
#

Oh I see

restive turret
slate flume
#

My king

grand flower
#

Hopefully we get a way to hide players from the spectator list in the future

#

Would make it a lot more reliable

slate flume
#

Please bro I need it

worthy rune
#

why are you using a dummy

slate flume
worthy rune
#

yes and why use a dummy?

#

they are not made for that

slate flume
worthy rune
#

you can spawn an NPC just by using the prefab mirror stores

slate flume
#

Wah

worthy rune
slate flume
#

I'm curious

#

I'm not familiar with the ins and outs yet

#

Sorry if it's a dumb question ๐Ÿ˜…

worthy rune
slate flume
#

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

worthy rune
slate flume
#

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

worthy rune
#

thats kinda expected, its what happens when you use something like a player for this kind of stuff

slate flume
#

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

worthy rune
#

not sure what you mean, can you be specific about what you want

slate flume
#

That's about it

worthy rune
#

i see, if you make an issue on the labapi github its likely to be looked at

slate flume
#

Oh cool!

#

Also I screwed up my code somehow idk why this isn't working ore_sad

#

I just want to make my dummies not able to be spectated

grand flower
#

Notably not allowing anything but ClientInstanceMode.DedicatedServer for your npc's instance mode

grand flower
#

Is there a way to fix this on the server side of things

#

Does Mirror network the collider sizes automatically

worthy rune
#

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

grand flower
#

the issue isn't floating it's that you can't pickup items under buckshot

worthy rune
#

well not totally, the client does foward predict it while moving fast but it should be fine once it slows down

grand flower
#

because the collider is a lot bigger than the model

#

we disabled collisions between items as well because of the performance impact

worthy rune
#

oh, i see

#

i dont think theres away to fix that

grand flower
#

unfortunate

#

guessing P5 makes that pretty much a won't fix

worthy rune
#

you never know for sure

grand flower
#

i'll have to find another way to make it less annoying for players

worthy rune
#

you could try stuff with interactable toys, but idk how you would do it

grand flower
#

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

buoyant oyster
#

is it possible to make the skeleton able to use items

grand flower
#

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

grand flower
grand flower
grand flower
#

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

grand flower
random scaffold
#

@stuck peak fix also it

#

data store become to destroyed before left event

stuck peak
random scaffold
#

but cant due for low cooldown before destroy after left

stuck peak
soft turtle
#

In which class is RoomRoleSpawnpoint located for SCP-049?

grand flower
#

Are you able to make custom dummy actions

restive turret
#

Ye sub to dummies

rustic bolt
#

why.... ๐Ÿ˜ญ

grand flower
#

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

hearty shard
#

No longer do that and it works

wispy dirge
#

has anyone made a pathfinding thing for npcs/dummies yet

worthy rune
unique crane
#

Fixed in one of my internal prs

#

Same for the single use keycard

carmine prawn
rustic bolt
severe cave
wispy dirge
#

alr

severe cave
# wispy dirge alr

Just copy the 4 scripts,NavMeshSurface, NavMeshModifier, NavMeshLink, NavMeshModifierVolume and bake the navmesh like onroundstarted or something like that

upper vapor
#

Ideally you'd do that after the map generates so there isn't unnecessary overhead on round start

sweet flax
#

when should i use custom event handler and when normal?

upper vapor
#

If you're only subscribing to one event or you want granular control of when events are registered/unregistered, use C# events

limber silo
#

whatever is more organised for your codebase

main zenith
#

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());
  }
hearty shard
#

and then teleporting it away from player

#

when you parent a light the position value becomes offset

main zenith
hearty shard
#

just set Position = new Vector3(0,0.5f,0)

#

instead of Player::Position + new

main zenith
#

idk i made this plugin on labapi V0.4 and then it was working correctly so i was pretty suprissed why it stops working

hearty shard
#

when parenting was added this was changed

#

to better fit it

worthy rune
#

yeah it was added abount half way through the beta

severe cave
#

I can only use events that labapi provided?

random scaffold
#

300-400 times per 10 second, ips - proxy

#

the connection buffer is being clogged

restive turret
soft turtle
#

Which method is executed first when a player connects?

severe cave
unique crane
severe cave
unique crane
#

Yea should be

severe cave
#

Good to know

soft turtle
unique crane
#

I was talking about events

#

I dont what does mirror run first

soft turtle
#

I mean the method, not the event.

random scaffold
restive turret
severe cave
restive turret
#

It's a C# event not something like labapi one

#

For example InventoryExt. Has

severe cave
restive turret
#

Ye literally a C# event

#

Like search for it

#

public static event Action<FartClass> OnFart;

severe cave
restive turret
#

If u make jt

severe cave
#

Thanks for the help!

restive turret
#

InventoryExtensions.OnItemRemoved

#

For example

severe cave
restive turret
#

Skull(s)

#

Should i say learn basic c# or ClassDTroll1

severe cave
#

And then how to do i like subscribe that event to something

restive turret
#

As other labapi ones

#

+= & -=

#

Sub & Un

severe cave
#

So just InventoryExtensions.OnItemRemoved += ...

restive turret
#

Ye the ... better to use ide to generate a methdo for u

restive turret
random scaffold
#

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

harsh thorn
random scaffold
#

its only first times

harsh thorn
harsh thorn
#

or do you mean after you made the db alraedy

#

but the first time the server starts

random scaffold
#

when first player join

#

it lag 5 seconds

#

but after it works immediately

#

for all others

harsh thorn
#

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)

random scaffold
#

just add state and queue?

harsh thorn
#

how are you calling InitDatabase

random scaffold
#

in Enable of the plugin

harsh thorn
#

but how are you calling it

random scaffold
harsh thorn
#

ok thats good

#

how do you call queries that happen based on ingame-events

#

like a player joining

harsh thorn
#

thats a problem

#

you should do it async

#

so

random scaffold
#

how?

#

always use Task.Run?

harsh thorn
# random scaffold always use Task.Run?

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);

random scaffold
#

but where MainThreadDispatcher?

hearty shard
harsh thorn
random scaffold
harsh thorn
#

its not thread safe so no

harsh thorn
#

anything not thread safe (also includes unity stuff) and generally anything that writes

celest thorn
#

is it possible to remove the reverb on speaker toys?

harsh thorn
celest thorn
#

because is spatial doesn't seem to remove it

ionic prawn
#

is there any way to make a person cant shoot even if they hold a gun and have ammo

unique crane
ionic prawn
#

k

unique crane
#

But

#

Depends on the gun

#

Some can be Uncocked

#

Especially automatic ones

ionic prawn
#

ok

worn gull
#

There's a UpdateFog function in AlphaWarheadController and it's empty is it really empty or just only there

worn gull
#

Ah okay thanks

hearty shard
#

some stuff is removed between server and client

worn gull
# hearty shard likely 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)

hearty shard
#

Check FogControl effect tho

worn gull
#

Well that's unlucky

unique crane
#

You can force override it to the outside one

worn gull
random scaffold
harsh thorn
#

like you would normally?

#

im not sure what you are trying to ask

random scaffold
#

but how make it with task?

harsh thorn
#

if it returns a task

#

its possible that there is no "async new ()" for that method

random scaffold
harsh thorn
#

so that isnt something that can be async

#

which makes sense as its a class initialization

random scaffold
#

ok

harsh thorn
#

as actually opening the connection, which is async is here

random scaffold
#

error due task cant use yield return

harsh thorn
#

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

random scaffold
harsh thorn
#

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

random scaffold
#

its used iasyncenumerable

harsh thorn
#

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

worn gull
unique crane
#

And there is FogControl::SetFogType(FogType type)

worn gull
#

thanks

upper vapor
#

would be huge

celest thorn
#

but i know for a fact isSpatial is just disabled

upper vapor
#

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

celest thorn
#

thats the problem

upper vapor
#

yea

#

weird

#

also...

#

doesn't the reverb depend on the listener's position?

#

reverb zones are funny

celest thorn
#

its 0,0,0 and following player

#

so

random scaffold
#

with async its too overload cpu

harsh thorn
#

unless your server machine is very bad or you are doing some crazy queries it should not overload cpu kek

#

especially not on the client (your sl server)

#

as all the sl server does is ask for data and then receive the response

harsh thorn
#

well you are probably doing something very wrong if it overloads cpu

random scaffold
#

but its not

#

only insert into

harsh thorn
random scaffold
#

its all what he doing

harsh thorn
#

well i guess you would need to see what is causing the cpu usage

random scaffold
#

only the plugin with db

#

bruh

harsh thorn
#

well i mean in your code

random scaffold
#

but here nothing

harsh thorn
#

well clearly there is something kek

random scaffold
harsh thorn
#

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

random scaffold
#

after all works immediately

harsh thorn
#

is is the sl server itself that uses the cpu or is it the mysql server

random scaffold
#

server

harsh thorn
#

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

random scaffold
#

IT DOESNT EXISTS

harsh thorn
#

if it didnt exist your server wouldnt be magically using cpu

random scaffold
#

but he using

#

because init mysql

harsh thorn
#

find out what method call takes long

#

like spam debug lines inbetween every method call

#

see where it takes 5 seconds

unique crane
random scaffold
#

its already that

harsh thorn
#

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

unique crane
#

DB initialized like the connection is running?

random scaffold
worn gull
#

Is it possible if the Player's room is null change it to surface?

random scaffold
#

lol

#

im just make select

#

query

#

when enable of the plugin

unique crane
#

Well do you open the connection when first query is run

#

Or on startup

harsh thorn
random scaffold
random scaffold
#

..

#

without him it too freezes

harsh thorn
#

and the cpu usage happens when a player joins

#

/freeze?

#

for the first time

random scaffold
#

before

harsh thorn
#

when exactly does it freeze, like what is the plugin doing when it freezes

unique crane
#

Maybe if you send us more of your code

random scaffold
#

first request

unique crane
#

Or github repo would be best

harsh thorn
#

and not any other method

random scaffold
#

other connections are not opened or created until the player enters

harsh thorn
#

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

random scaffold
#

when im added initdatabase

#

yes

harsh thorn
#

and when the first player joins it is fast?

random scaffold
#

when the load subsides yes

#

processes all those who have logged in during downtime at once

#

without any lag

harsh thorn
#

so this issue only happens once per server process (so on start), or multiple times

random scaffold
#

each sr or start of the server

harsh thorn
#

and that would be around onenabled yes?

random scaffold
#

only when the plugin is loaded

#

yes

#

but server takes ~150% without db plugin when loading

#

so possible it not due for db

harsh thorn
#

sl servers always use more cpu when loading

random scaffold
#

then how much need cores?

harsh thorn
#

2 should be fine

#

it does depend on the cpu clock speed though

#

or the server just loads a little bit slower

celest thorn
#

because i can recreate it even in base game

#

For just being faster i did it with AudioPlayerAPI

slate flume
#

Is it possible to prevent a player's inventory from dropping specific items when being disarmed?

severe cave
severe cave
slate flume
#

I tried patching serverdropeverything but it didn't work

random scaffold
#

which implementation will be better for timer?

#

ex. me need call method each day in 00:00

slate flume
#

I uh would need to see if a player is being disarmed to prevent an item drop

severe cave
slate flume
#

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

severe cave
#

Can you give items to a player while they are cuffed?

severe cave
#

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

slate flume
#

I'd need to attach to drop item and cuffing which I wanna see if I can avoid

severe cave
severe cave
slate flume
#

Oh there is no disarm event

#

Interesting

grand flower
#

there is iirc

#

it's called cuffing/cuffed

#

@slate flume

severe cave
slate flume
#

But one or the other is fine

grand flower
#

You can just hook onto PlayerDroppingItem

#

and return false if the player is disarmed

slate flume
#

Does dropping happen before or after

#

Is what I need to test

severe cave
#

after

grand flower
#

Happens on the next frame

#

From what I'm seeing in code

#

although

slate flume
#

Okay will try

grand flower
#

yeah no you'll need a patch

#

the PlayerDropping item doesn't get called for disarming

severe cave
grand flower
#

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

slate flume
grand flower
#

Send code

slate flume
#

I ripped the exact code

#

But changed one line

grand flower
#

You should probably just patch ServerDropItem instead

#

although

#

yeah no that's fine

slate flume
grand flower
#

check that your patch works

slate flume
#

Good point

#

I'll uh

#

Add a log

hearty shard
#

This is the time a transpiler would be awesome

grand flower
#

code matcher time

hearty shard
#

But

#

In bed

#

i also havent done that yet...

grand flower
#

i'm at work

severe cave
hearty shard
#

So like

#

Transpilers are confusing

severe cave
#

for VS if it matters

hearty shard
#

If you dont know IL

hearty shard
#

Its just IL

#

do you know IL?

severe cave
#

Intermediate language idk

grand flower
#

I use dotPeek and Rider

severe cave
#

correct me if Im wrong

hearty shard
#

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

severe cave
#

are there any other tools?

hearty shard
#

Rather than prefix running before or postfix running after, its adding to original rather than rhat

hearty shard
severe cave
#

like that is used for the same purpose as trasnpiler

severe cave
#

that doesnt use IL

hearty shard
#

Its not too difficult when you understand

#

(i dont either dw)

severe cave
hearty shard
#

Transpiler is harmony

severe cave
#

mb

#

I didnt know that

#

dotPeek that Cyn said!?

hearty shard
hearty shard
#

ILSpy also can do it

#

and uhh dotpeek is built into rider so i just use rider for it

severe cave
#

I mean I don't necessarily want to change the games base code so I ll just use one that just views it

hearty shard
#

harmony in a project is for modifying

severe cave
hearty shard
#

ILSpy/Dotpeek is for viewing

#

dotpeek is a standalone thing but iirc irs rly ugly

#

Its*

severe cave
#

Thanks for telling me this

solid rivet
#

Are you guys looking for coders? My niece loves this game, turns out.

severe cave
hearty shard
severe cave
solid rivet
#

She's 20 and in college.

hearty shard
solid rivet
#

I am.

severe cave
#

or not

hearty shard
#

Yea i still think SL positions are currently non existent

#

Job listings are therw

solid rivet
#

ty!!

hearty shard
#

No programming team tho :(

solid rivet
#

Its no big deal, y'all seem to be coders in here. What are you up to?

hearty shard
#

Rn in bed chillin

#

Have some stuff i gotta rework on my project but oh well

#

too much effort lol

solid rivet
#

Is this for private plug-ins, like Steam Workshop type stuff?

hearty shard
#

Steam**

#

But yes its private plugins of my own

#

for my server

solid rivet
#

I'm just looking to help code on the game, I don't care who for.

#

You get my drift?

hearty shard
solid rivet
#

Stay-at-home-dad of a 1 and 2 year old. I have....time.

hearty shard
#

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

solid rivet
#

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.

hearty shard
#

4o?

#

Wtf is schizophrenic mod lol i dont even remember

grand flower
severe cave
hearty shard
#

Oh

#

Its

#

What i named my exiled fork

hearty shard
#

@icy knoll wake up smelly

severe cave
#

if you are really interested @solid rivet , then pls make a working navmesh for the dummys

hearty shard
#

well, enocuh

#

Enough*

#

If ur bored u can always do that

severe cave
grand flower
#

AI platform != in-game AI

severe cave
#

did anyone make that before?

hearty shard
#

cedric did it a while back

#

i believe

#

but with some issues

#

i dont remember the details

solid rivet
#

My interest is AI API integration

#

Specifically.

severe cave
hearty shard
#

unless u mean like npcs that use ai to move etc

severe cave
hearty shard
#

hi cyn!

grand flower
#

Even then using that kind of AI for that would be a waste

#

hey

slate flume
#

And so much less readable

hearty shard
grand flower
#

More maintainable

slate flume
#

You have to figure out the IL code

grand flower
#

If NW modifies their DropEverything method and you just copy/pasted the old code you're cooked

solid rivet
hearty shard
slate flume
#

Ye

hearty shard
slate flume
severe cave
#

like imagine simulating a whole round with dummys

slate flume
#

Besides I'm not even using the patch anymore

hearty shard
#

But yeah the issue is the new code

slate flume
#

It no work

grand flower
#

Doesn't matter, transpilers are way better IMO

#

The patch should work

#

if it doesn't you screwed up somewhere

slate flume
#

It no work

grand flower
#

define no work

slate flume
#

I'm telling you

grand flower
#

does it even log

slate flume
#

Lemme check

grand flower
#

can't tell me it doesn't work and then tell me you don't even know if it logs

slate flume
#

It logs

#

It just doesn't keep goggles

grand flower
#

Alright, what kind of patch it is

hearty shard
grand flower
#

eh I'd still use transpilers, eventually

#

I might just use a prefix and then convert to a transpiler later

slate flume
hearty shard
#

Hm

slate flume
solid rivet
grand flower
#

Log more then

slate flume
#

Lmao

#

I kid

solid rivet
#

If you like the direction, I can do this too

grand flower
#

Ya gotta do what ya gotta do

severe cave
#

I mean, I dont know, try it i guess

slate flume
grand flower
#

gl

#

you should just use annotations to patch

#

instead of using reflection manually

hearty shard
#

Chat

#

Is this real

hearty shard
solid rivet
#

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.

slate flume
#

So uh

#

How tf do I transpiler

slate flume
#

So I went back to manual

#

I can't explain why it didn't work

grand flower
slate flume
#

It just didn't and I gave up

hearty shard
#

I dont know where it is

slate flume
#

Sick

#

I used to use annotations until harmony gave up on trying to detect them why

slate flume
#

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

solid rivet
# grand flower Yeah that code literally won't work

โ€œ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.โ€

grand flower
#

Hey lmk what kind of magic happens to link the methods to the LabAPI events

grand flower
hearty shard
#

Oh

solid rivet
#

โ€œ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();
}

hearty shard
#

Why exiled btw?

#

this isnt exiled server..

grand flower
#

If I wanted to get AI generated answers to coding questions I'd talk to one of my juniors

solid rivet
#

The next couple years are only gonna get darker and darker, mister senior.

grand flower
#

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

hearty shard
#

Cyn do you like eevee

grand flower
#

Eevee is cool

hearty shard
true cedar
#

i was gonna redo it but

hearty shard
#

Then redo it!!

true cedar
#

BUSY

grand flower
#

I wonder if we could generate a navmesh per room type

hearty shard
grand flower
#

And then serialize it

true cedar
#

you do it

grand flower
#

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

rugged laurel
#

That guy tried to get me to hire him as a plugin dev. First thing i saw on his thing was this

grand flower
#

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

light kayak
#

do i have to have plugin for scp 3114 to spawn or is it in config? (i cant find)

limber silo
#

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

grand flower
#

I've spent more time fixing a junior's AI code by fully rewriting it than it giving us anything

limber silo
#

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

slate flume
#

How do I go about hiding a person from goggles

grand flower
#

All I know is we've banned it at multiple studios because of how ass the code was

slate flume
#

Where should I patch

#

If anyone knows

grand flower
#

And how much it cost us in development time fixing mistakes from it

grand flower
slate flume
#

FUCK

#

Shit

#

Sorry

#

Pardon my french

#

This is so hacky

grand flower
#

Welcome to SL modding

slate flume
#

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 ore_sad

grand flower
#

Fake role sync will work for what you're doing

#

Using it fine here

grand flower
#

At least it's easy to root them out

#

ยฏ_(ใƒ„)_/ยฏ

slate flume
#

So I have to selectively disable it for people

grand flower
#

Yeah you're gonna have to pick and choose what you wanna do

grand flower
#

instead of disabling it

slate flume
#

I don't want that

grand flower
#

wdym

slate flume
#

The speakertoy makes things sound like they're coming from a speaker

#

Instead of regular

upper vapor
grand flower
#

wasnt sure if it was as good

#

as dotPeek

grand flower
#

they left after making a clown of themselves

#

ยฏ_(ใƒ„)_/ยฏ

upper vapor
#

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 toomuchtrolling

#

LLMs allow you to program anything
-# if you're using very popular frameworks

grand flower
#

It's already ass for regular software development DogKek

upper vapor
#

Kinda

grand flower
#

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

upper vapor
grand flower
#

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

grand flower
#

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

upper vapor
#

But at the same time...
CS majors when they have to learn about programming:

grand flower
#

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

unique crane
#

It can do python and js well

#

But for SL it's shit

grand flower
#

I think the issue with game dev is how complex codebases are

upper vapor
grand flower
#

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

upper vapor
grand flower
#

That's why I'd just like, learn on your own time

upper vapor
unique crane
#

Glad I got matura few days ago

upper vapor
unique crane
grand flower
#

I just can't take anyone who tells me AI is great at game dev seriously

unique crane
#

First thing it does is nwapi

unique crane
#

Even if you say labapi

upper vapor
unique crane
#

Fr

grand flower
#

I've spent the last five years just eating breathing sleeping game dev and it paid off

upper vapor
#

I hate how it's called matura

grand flower
#

Burnt myself out a good amount of times though

unique crane
#

Maturita

#

Matura

upper vapor
#

I'm not mature ๐Ÿ˜ญ

unique crane
#

Whatever

#

Well I'm 20

grand flower
#

When did you get into game dev

#

I feel old now

unique crane
#

My first game ever was 4 years ago in Java

grand flower
#

Damn

#

That used to be me, youngest at p much every studio I was at

#

๐Ÿ‘ด

unique crane
#

And it was that elements simulation thingy

grand flower
#

Ooooh nice

unique crane
#

I still have source code

#

bad

#

It was giant 2d array

grand flower
#

Hey if you cringe at your old code it means you've improved

unique crane
#

Only sad thing is that I picked theoretical question for programming

#

During the matura things

#

It was just about architectural design patterns

grand flower
#

I just stuck to networking for games

#

Always found it fascinating

unique crane
#

Yes

limber silo
grand flower
#

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

limber silo
#

If someone in my team filled prs with ai I would fire them immediately

#

thats lazy lazy work

grand flower
#

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 -_-

limber silo
#

I would never work with them again in that case

grand flower
#

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

upper vapor
unique crane
#

Aha

upper vapor
carmine prawn
#

ai always stupid

#

but more people are stupider than ai

upper vapor
limber silo
#

AI is getting better at coding faster than we think

upper vapor
grand flower
#

Anyone uploading a codebase from a studio for training will end up getting shot

#

that's career ending stupidity

upper vapor
#

oh you're red now

upper vapor
restive turret
unique crane
#

I mean for labapi github

upper vapor
#

xd

carmine prawn
#

smod

limber silo
#

that give you a txt documentation

#

of methods and stuff

upper vapor
limber silo
#

to feed ai agents

upper vapor
unique crane
#

No I never did MC plugin

limber silo
#

or you could feed it the xml directly

upper vapor
unique crane
#

Command blocks better

upper vapor
#

it can but there will be hallucinations

limber silo
limber silo
#

people should start developing lots of mcps

#

for example one that does exactly that

upper vapor
#

ye

limber silo
#

decompiles and reads dependencies

#

etc

grand flower
#

We host our own source control servers generally, so no training on our codebases

#

Idk if github trains on private repos

upper vapor
limber silo
#

AI for coding still has lots of things it can improve I think in less than 2 years we will have huge huge advancements

upper vapor
#

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

restive turret
upper vapor
#

make hypixel with just command blocks

grand flower
#

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

worthy rune
#

i think it parented to the scp330 room, so you could get the interobject from there

teal junco
#

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

severe cave
restive turret
#

Well well

teal junco
#

I never actually did any maps or anything

restive turret
#

I think I even did a command block & then after in around 1.14 the mcfunction & datamap stuff

teal junco
#

But I knew the scoreboard command like the back of my hand

restive turret
#

I modded the game too much

#

First modpack was probably regrowth

teal junco
#

and I didnt know how to do that in command blocks

upper vapor
ionic prawn
unique crane
#

There isnt any specification for which game the plugins are

celest thorn
#

Guys modding dev chat

upper vapor
wispy dirge
#
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

hearty shard
#

what class

#

also r u still using it

upper vapor
#

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)

random scaffold
#

how i can regenerate primary key?

#

3700 count, but 9972 id

#

its not normal

upper vapor
#

the point of an auto-incrementing primary key is to increment and not loop back

#

that ID shouldn't matter for users anyway

royal mica
#

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

buoyant oyster
#

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

random scaffold
#

exists sql query who fix it

#

but i lost him

upper vapor
#

did you mean to reset the table?

random scaffold
#

reset id

#

and regenerate for all exists data in table

upper vapor
#

right

#

okay

#

that makes sense