#plugins-dev-chat

1 messages · Page 166 of 1

unique crane
#

you can mimic them via plugins

pallid summit
#

Alright, thanks

slate flume
#

Can confirm

#

You can give yourself things like evil candy but the effects no longer work

mild ice
hearty shard
#

LUVID

#

LUCID

mild ice
#

Hi

hearty shard
#

guess what!!!

mild ice
slate flume
#

Also how do I get ability cooldowns to sync better

#

I want to change the cooldown as it's active by adjusting nextuse and initialtime but it's misbehaving

#

I know I'm setting nextuse and initialtime correctly, I'm just having troubles syncing it

#

Like I'll be at time 96.3, set initial time to 93.9, set nextuse to 101.9, but then when I send a new subroutinemessage to sync the cooldown, it instantly completes

#

Any tips would be greatly appreciated

hearty shard
#

hater

clever heron
#

Which is your favorite MTF group?

restive turret
#

November-17

restive turret
#

There is already a labAPI issue about it

tame badger
#

.

slender depot
#

Is there a way to get the current item's that the player is holding position?

#

Not the player's

#

the item's

hearty shard
#

player.CurrentItem?.GameObject.transform.position

#

or smth

#

why?

slender depot
hearty shard
#

right

#

wait rly

#

i thought itd be at the player

#

i suppose its cuz of server not updating it

#

cuz server doesnt rly care on if the item is in your hand or on your head

mild ice
#

Could you just get the player position and apply an offset maybe?

#

I haven't touched plugins since it was NW API lol

hearty shard
#

would have to be based on rotation though

#

of player

#

and idk how accurate you can rly get it since yk

#

server doesnt rly care on it afaik

plush glade
hearty shard
slate flume
#

What the hell

#

?

upper vapor
#

there may not have been a comment made but the point stands

slate flume
#

Are you sure it's on the internal tracker?

#

Because migration happened early October

#

At least that's how it was with the ideas I had posted

upper vapor
#

it may be implemented at some point
-# whether that's in the future or the past, surprise :3

royal mica
slate flume
#

Also why close the issue, why not leave it open and mark it as resolved when you resolve it internally?

upper vapor
#

make a bot that sync gitlab issues with github issues shrug

royal mica
royal mica
#

and I assume you do not want the full thing to sync

slate flume
#

That's also a "you guys" thing not an "us" thing

upper vapor
slate flume
#

The problem isn't the system we made for issues, it's the system you guys made for issues

#

But it's honestly a minor problem in comparison to how long some of these things take

upper vapor
#

let's not get that involved again

slate flume
#

I don't care to argue about it though it's already been discussed

royal mica
#

I think this whole thing is already beating a rotting horse dogkek

slate flume
#

Trying to see things get done at NW is like trying to squeeze water from a stone

upper vapor
#

you should be happy we take suggestions in the first place toomuchtrolling

slate flume
#

It's less about what is lucky for us and more about what is best for you guys

slate flume
#

In fairness, you guys do just enough improvements to prevent people from giving up, but you don't do enough to prevent people from getting frustrated

upper vapor
slate flume
#

Well my bad on that

#

I'm just frustrated

upper vapor
slate flume
#

That's why I said my bad lol

upper vapor
#

at the end of the day, it's the end of the day

slate flume
#

I'm just upset cause I want to do basic stuff with abilities and yet I can't even do that because a suggestion made half a year ago still hasn't seen any progress

#

I mean I still just don't understand why it takes months to change a few lines of code

restive turret
slate flume
slate flume
unique crane
#

About what

slate flume
#

Cause I wanted to change ability cooldown InitialTime to do stuff with the progress bar on cooldowns but I can't cause it's not synced

#

I found out an issue opened about it 6 months ago was closed in September with no explanation so I was confused

#

Turned out it got moved to internals and it just hasn't been resolved yet

#

That's about it

restive turret
#

Ye its slow cus even I want to do many changes and I have to ask team leads and everyone involved in that can be done

restive turret
#

Jesus hasn't been active bc his personal stuff as far as i know

slate flume
#

I want to be able to do more for the people in my community but half the time I can't figure something out it's because of an unresolved issue or suggestion made a long time ago

#

And it gets frustrating dealing with that a lot

#

I have to tell people no on a lot of ideas because the code associated with it has nothing synced

#

I appreciate the work you guys do as individuals it's just the system you guys work under is so slow

unique crane
slate flume
#

Yeah so I'm just gonna leave it there cause none of you guys can change it and neither can I

restive turret
slate flume
#

So it's a moot point

upper vapor
unique crane
#

It simply has to go through approval. Its not mine, ax's or slejm's game to modify it however we want

#

And then development (possibly fastest)

#

QA

#

And then it sits there until the next update(s)

upper vapor
unique crane
#

Combine that with base game MRs and it gets messy a lot

#

Base game changes often do not take LabAPI into account

slate flume
unique crane
unique crane
#

We are not employees

slate flume
#

I'm not paid for what I do either

#

But I do it cause I like coding and I like helping people

unique crane
#

Most of dev team studying on some university

slate flume
#

Yeah I'm not expecting you guys as individuals to slave away all day

#

I just think 6 months for a few lines of code is a little extreme

upper vapor
slate flume
upper vapor
#

you can do whatever, whenever basically

slate flume
#

It's the system you work under

unique crane
upper vapor
#

-# easy

slate flume
#

One line

unique crane
#

Wdym?

slate flume
#

It's a one-line fix to a bug that I still haven't seen implemented

#

Likely because it remains unapproved

unique crane
#

Bugfixes does not need approval

#

thats obvious

slate flume
#

Well then I wouldn't know shrug

#

I don't know what you guys work under I just think with how many people you have things should be moving faster

#

So the fault is with whatever system you have to work with

unique crane
#

Looks easy from the outside yea

#

Then you get in, and you realise its not that simple

upper vapor
unique crane
#

I had the same vision before I joined NW

slate flume
#

It's a problem with the hurdles you have to jump through to get one thing done

upper vapor
#

*insert scrum master speech here*

slender depot
#

Is there a way to get the pickups position? Cuz' everytime I try it's 0, 3500, 0

slate flume
#

Like SlejmUr is obviously excited to try to get changes implemented but he can't because he needs approval on everything that he hasn't gotten

#

Or similar issues with the implementation pipeline

unique crane
upper vapor
slate flume
#

Exactly

#

The fault isn't on you guys

#

That's why I didn't wanna complain about it for so long

#

My complaints don't change anything

upper vapor
slate flume
#

They have tied me to a stake; I cannot fly

restive turret
slate flume
#

Word up

#

I love seeing positive change

#

I support people who advocate for change

restive turret
#

But again i have to learn many stuff how it works and according to make changes that would be the best for everyone

#

Sadly time management isn't my best

#

(every good idea and burst of energy comes at night)

slate flume
#

I feel ya there

upper vapor
restive turret
#

Sometimes I have pc open for like 15 hour and didn't do shit

upper vapor
celest thorn
restive turret
#

Ping hubert and ask ClassDTroll

#

(for obvious reasons this is a joke)

celest thorn
cyan crown
#

lmao unity spot light moment

#

😭

slender depot
#

Is there a way to make any weapon invisible?

warped prairie
warped prairie
#

“I’m gonna get some shit done today” - opens anno 1800

snow pulsar
restive turret
#

Ye but everyones sleep schedule isnt the same as mine

#

Others have to wake up early

snow pulsar
#

I do as well but I just deal with it

restive turret
#

Well there is 4 people in this house excluding me so

warped prairie
#

slej codes with such passion everytime he mispells a variable or something is underlines red he rages like a CS:GO clip

upper vapor
pulsar locust
late shoal
#

does OnServerDisconnect also get called if a player gets timeouted or something else?

south socket
#

is it possible to disallow changing or changing the mode of the particle disruptor serverside or is it completly clientsided?

upper vapor
#

the server doesn't store the state but you can override it

worn gull
#

How can I get a role's color? (not hex, named color)

upper vapor
#

Get the group
That should contain the badge color

obtuse spruce
#

is there a way to cancel the Interaction with an InteractableToy but while it was in progress ?

pulsar locust
#

It should be possible to disallow the event but I've noticed it showing that the interaction is no longer happening is very hit or miss and it might just go the entire way and be like "wait this was cancelled"

#

Last time I messed with interactions was ages ago so that might have changed lmao

upper vapor
#

But you can probably just set IsLocked to true

barren pasture
#

How would I randomize a status effect?

hearty shard
barren pasture
#

I wanna give the player a random status effect

hearty shard
#

get all the effects

#

then pick a random one from that list

obtuse spruce
worn gull
#

Why can teslas strike faster then usual?

hearty shard
#

and wdym

worn gull
hearty shard
#

interesting

worn gull
hearty shard
#

is that entirely vanilla

#

cuz that sure is interesting

worn gull
# hearty shard is that entirely vanilla

VPNGuard, a DiscordRole Sync plugin, Axwabo.Command, ModeratorTools and stats system, but these plugins are in the other (modded) server and there it's normal

barren pasture
#

How do I disable stamina usage for a player?

worn gull
worn gull
hearty shard
upper vapor
frosty mesa
#

Anybody know how to use the waypoint toy?

soft depot
#

yes

icy wraith
#

For some fucking reason I cannot detect collision with an invisible primitive, can someone tell me how to make it work ???

spare zodiac
spare zodiac
#

could you test by adding box collider on the primitive?

icy wraith
#

private void OnCollisionEnter(Collision collision) this isn't called for some reason.

icy wraith
spare zodiac
#

wait

#

are u sure the problem is not in accessing _collider?

icy wraith
spare zodiac
icy wraith
hearty shard
#

based on stuff

#

and also ur adding a collider to a collider idk

#

You could use GameObject.CreatePrimitive to create a servers side primitive and handle it through that

#

If u so wish

icy wraith
#

It is a primitive.

#

_collider is a Primitive.

hearty shard
#

Oh i see

#

I thought it was a Collider

#

Ok my bad

soft depot
#

here lemme share some code I have

#

it might be terrible, but it works Trolley

#

first you add this:

            SphereCollider collider = player.GameObject.AddComponent<SphereCollider>();

            collider.isTrigger = true;
            collider.radius = (int)Distance.Medium;
            collider.includeLayers = LayerMask.GetMask("Ignore Raycast");
            collider.excludeLayers = ~LayerMask.GetMask("Ignore Raycast");

then, on another component on the player, use OnTriggerEnter and OnTriggerExit

teal junco
#

primitive admintoys cant be used as triggers afaik

#

not exactly sure why

#

it aint a big deal to attach a new game object to them anyway

upper vapor
upper vapor
teal junco
#

never worked for me

#

ksill issue ig

upper vapor
#

You just need to set the trigger state after Start

#

Or after you change the primitive type

teal junco
#

lowkey im not the smartest for this one

upper vapor
#

Add your own behavior to the collider's game object

#

Not sure if that's the case but I did this for sloc cuz adding the component to the root wouldn't work

barren pasture
#

Does LabApi have an event for 173 placing a tantrum?

upper vapor
#

yes

#

Scp173CreatedTantrumEventArgs

#

or -ing

spare zodiac
alpine glade
#

@hearty shard

#

hi

barren pasture
#

How do I spawn and explode a grenade?

#

So that it doesn't damage SCP's?

upper vapor
barren pasture
#

Functionally

upper vapor
#

oh, well

barren pasture
#

I want to deal damage

upper vapor
#

you can set the footprint to have a team of SCPs

#

so if FF is not on, it won't damage them

barren pasture
#

How do I do that?

upper vapor
#

otherwise, just track the damage handler with a set or list, and set IsAllowed to false in Hurting

#

the latter is probably easier

barren pasture
#

How do I track the damage handler?

upper vapor
#

make a hashset or a list

#

oh wait

barren pasture
#

Yea but where to I get it from?

upper vapor
#

do you wanna instantly explode the grenade or have it tick down

barren pasture
#

Instantly explode

upper vapor
#

then create a footprint, store it in a list, and call ExplosionGrenade.Explode with the footprint

#

hashset works as well

barren pasture
#

How do I create a footprint?

upper vapor
#

new Footprint

barren pasture
#

Do I need the give it a referencehub?

upper vapor
#

ye

barren pasture
#

Ok

upper vapor
#

host works, too

#

but then you gotta do some funky stuff

#

gimme a sec

#
var footprint = new Footprint(ReferenceHub._hostHub);
AccessTools.StructFieldRefAccess<Footprint, RoleTypeId>(ref footprint, nameof(Footprint.Role)) = RoleTypeId.Tutorial;
#

if you set the role to some SCP role, you can probably get away with not canceling the event

barren pasture
#

What do I do for settingsReference?

#

I feel like I'm being dense but oh well

upper vapor
#

InventoryItemLoader.TryGetItem

#

give it the type of grenade, T is ThrowableItem

#

get its Projectile and cast it

barren pasture
#

Which grenade type?

upper vapor
#

whichever you want

#

grenadehe or grenadeflash

#

or scp2176 even Kek

barren pasture
#

I can't seem to find the grenadehe class

#

I promise I'm not being stupid on purpose

upper vapor
#

ItemType.GrenadeHE

barren pasture
#

That's the enum

#

I need the class for TryGetItem

upper vapor
#

ThrowableItem

severe cave
#

Hey! I have a question. What is the default position of a hint, and what are the 4 main positions value, like bottom left, top left etc... And how could I change the position of a hint with ease? Thx

barren pasture
barren pasture
#

Good idea

upper vapor
#

-# you can check the code

barren pasture
#

Anyway what is the damage handler I should use to get 207 damage?

upper vapor
#

universal

#

with 207 translation id

barren pasture
upper vapor
#

DeathTranslations

barren pasture
#

Awesome, thanks

upper vapor
#

np

signal sorrel
#

Should I consider using Exiled or Lab API for good pluginz?

hearty shard
#

LabAPI is preinstalled
LabAPI works and is updated immediately with all releases

#

Exiled requires installation
Exiled has some extra stuff
Exiled might break stuff on update (tbf nw does this too)

upper vapor
#

as eve said, LabAPI is updated to be compatible with game releases, because it's official

signal sorrel
#

The thing is, Exiled has a whole documentation but I can't find a documentation that explains everything for Lab API.

upper vapor
#

the wiki is not very extensive but it gives you the foundation
everything in LabAPI has xml docs, so you can look at what things do by using the quick documentation feature in your IDE
just install the NuGet package and it should work
alternatively, you can look at the source code
but yeah, EXILED has a full documentation website that outlines members of each class without the code

west niche
# signal sorrel Should I consider using Exiled or Lab API for good pluginz?

Used EXILED before, switched to LabAPI. Honestly EXILED's code isn't always optimized and sometimes just breaks or works weird. Still useful as a reference though when you need to figure out how to implement something (I've seen a lot of LabAPI plugins just straight up use code from EXILED, either devs don't wanna reinvent the wheel or they think EXILED's implementation is the best, idk :D). But if you want clean code and don't wanna deal with random jank and workarounds, just go with LabAPI. 🥴

icy knoll
severe cave
#

Hi, I need some help with Ruel plugin because I am currently trying to use it but without any succes, the text somehow isnt being shown on the screen, idk why: ``` var element = new BasicElement(Plugin.Instance.Config.PositionY, message)
{
VerticalAlign = VerticalAlign.Down,
ShowToSpectators = false,
};
display.SetVisible(SpectatorTag, true);
display.Show(SpectatorTag, element);

teal junco
#

uhmmm idk but maybe add the element via show before setting visible? iek

hearty shard
#

although

#

i havent done much sl recently so i cant remember

teal junco
hearty shard
teal junco
#

idk tho

hearty shard
#

But

#

It should work

#

anyway i go bai

teal junco
#

Yeah i really dunno sorry haha. I dont see anything wrong with that code

severe cave
#

I literally tried more combinations than there are atoms in the observable universe bruv

teal junco
#

and to be clear other plugins using ruei work fine?

severe cave
#

But I tried putting a simple hint besides that ruei text element with the same text and everything and it was shown perfectly fine not like that ruei stuff

#

idk

teal junco
#

Yeah thats lowkey freaky i wont lie

#

My guess is ruei not installed correctly

teal junco
severe cave
severe cave
teal junco
#

unlike the old one, its a plugin

#

not a dependency

cyan crown
celest thorn
#

and then Based is alr

#

no need

upper vapor
#

No need for yapping

celest thorn
west niche
#

🥴

teal junco
#

Based Furry

upper vapor
#

@celest thorn Did you ever figure out extracting animations from existing MER schematics?

celest thorn
#

because the unity docs says its impossible

#

idk how tf they store them

#

but they store in a way

upper vapor
celest thorn
#

where the only possible thing is to re register them

#

again

#

but you don't know how long in lenght they are

#

or anything

#

its a bad system i swear

#

but if you want i can do research about it

#

maybe it changed ig

celest thorn
upper vapor
#

Right

celest thorn
celest thorn
#

which doesn't sound stupid

#

i took a thingy

upper vapor
celest thorn
#

that mer generate and ran it through

#

assets ripper

#

they have AnimationClips

upper vapor
#

TRUEING

celest thorn
#

so do the smart idea

upper vapor
#

Omg

celest thorn
#

AnimationClip[] clips = bundle.LoadAllAssets<AnimationClip>();

upper vapor
#

Genius

celest thorn
#

and you check which one has the same name

celest thorn
#

or if you don't find it then do this

#
RuntimeAnimatorController? controller = bundle.LoadAsset<RuntimeAnimatorController>("Schematic Or IDK");
AnimationClips[]? clips = controller?.animationClips;
#

Hope it helped you

celest thorn
upper vapor
#

I can't try it, I'm not at home

celest thorn
#

Tell the fucking gman to give you another job

cyan crown
celest thorn
#

Yes i know but I WANT HALF LIFE 3 GO AGAIN TO CITY 17 BOREALIS IS WAITING

#

BRO

cyan crown
#

I FUCKING HATE THIS SHIT ASS AD DUDE

#

wanna build games with godot...

celest thorn
#

I build my games with rats

#

And my skibidi toilet cpu

cyan crown
celest thorn
cyan crown
#

go get your hands on source 2 source code

celest thorn
slate flume
cyan crown
#

you can't fork it tho

slate flume
#

Source 2 engine is kind of goated and the S&Box platform seems epic

cyan crown
#

the engine is open source just to allow people to add their stuff to it

cyan crown
#

i wish i could fork it so i can build my game there instead of fuck ass uni teh

#

"uni dih"😭

slate flume
#

I love that s&box uses c#

cyan crown
slate flume
#

C# is actually so amazing to use

#

It just feels good

cyan crown
#

wait they seprated the editor as well

cyan crown
#

you can use editor directly now

#

imagine i could build the game and publish it on itch io or steam it self as a standalone game

#

lol

#

some games look really good at it

cyan crown
#

it doesn't have the unreal engine jank of course the engine is very customizable

cyan crown
slate flume
#

It really seems like it's set up to become one of the premier engines

#

Just needs more time to cook

cyan crown
#

i'll get into learning the engine tho i think its gonna be easy since its like Unity "UI wise"

#

yeah that's why its open source now

#

so people can help out with making it better

#

i like their water shader as well

slate flume
#

Source 2 is just so promising and I think it's dope we get the chance to work with it

#

Especially via such an easily accessible platform

#

Being able to publish to Steam through S&Box is crazy and I love that that's a planned feature

#

They're really making it so you just have to focus on making the game instead of the other junk

cyan crown
#

also i don't know why steam remove green lit it used to be a amazing feature but i guess people were able to bot their votes to get accepted

restive turret
#

U just have to pay for 100 euro and can release game

slate flume
#

I'm so optimistic for it

restive turret
slate flume
#

Neither have I cause I'm not planning on making a game atm but I'm really liking what it'll do for the industry if it takes off

restive turret
#

The fact that they actually sandboxing (restricting) c# is great

cyan crown
upper vapor
upper vapor
#

Poggers

#

Piggies

#

Poggies

#

W

#

Based

upper vapor
slate flume
#

And it doesn't even include all features from the version

cyan crown
#

fucking temu dude

#

they keep showing me the "you're the owner of temu you scam people" and each time they bring a new actor or actress to act as the owner

celest thorn
#

Ngl its scaring me that none is in my uni class and its just me

celest thorn
#

There should be class

#

But none is in uni

#

Like i’ve seen 4/5 people

#

In total

celest thorn
#

That is prohibited to share

#

Like shame on me lol

#

I got screamed lol

#

The professor is missing but no announcement

inner citrus
celest thorn
#

Girl

cyan crown
#

i love how i been looking for this option since i started using unity until now i managed to find it

restive turret
carmine prawn
#

how do I properly generate and destroy dummy?

upper vapor
#

DummyUtils.Spawn

#

NetworkServer.Destroy

carmine prawn
#

yea, but

celest thorn
carmine prawn
#

NetworkServer.Destroy will cause some strange problems, and I am still troubleshooting

celest thorn
#

Like how

#

Its like saying my brain shuts off

carmine prawn
#

client out-of-sync movement

#

sorry for my expression

celest thorn
#

Instead of the dummy

carmine prawn
#

unlikely, I'll try again...

#

100% not client

#

💀

#

I know now...

#

0.1f causes half of the asynchronous problems...

#

1f is completely solved

#

wHy?

icy knoll
#

use 0

#

calls next frame

#

unless ofc you wanna wait a second

upper vapor
#

wait a second...

carmine prawn
#

ok...

inner citrus
carmine prawn
#

If my delete Dummy when spawning players, it may cause the out-of-sync issue...

#

out-of-out-of-sync

upper vapor
#

ummmmmm

restive turret
#

what

spare zodiac
pallid summit
#

I Created a plugin for a buddy of mine that allows you to connect Streamer.bot to SCPSL so you can use channel point rewards to summon different effects (Right now I have a list of random buffs/debuffs and a grenade)

The holliday effects don't seem to activate tho, anything I can do to fix that?

hearty shard
unique crane
#

if only discord loaded the video

hearty shard
#

so no

unique crane
#

only during holidays

hearty shard
#

copycat

pallid summit
#

That sucks

#

Some of the effects are really funny so would have loved to see how they reacted

severe cave
#

Is it possible to move text horizontally in RueI? If not, are there any easy solutions?

minor shard
#

askin

warped prairie
#

is dis the right way to spawn a text toy

#

or am i big stupid

upper vapor
#

Also that's not how arguments work

warped prairie
#

position idk just incase the first one didnt work pepeLA

upper vapor
#

You need to set the TextFormat which is like a string to pass to string.Format

warped prairie
#

idk abt arguments but i got it to work with that ye

upper vapor
#

The arguments list will be passed to string.Format on the client

#

So like

#

TextFormat = "Among {0}"
Arguments.Add("us")
Will be "Among us"

warped prairie
#

i see ok.

#

appricate it!

upper vapor
#

Arguments are optional though

#

Np

upper vapor
#

🐿️

plush glade
#

My server specific settings appears to be crashing me immediately upon connecting

#

Is this a known issue ?

upper vapor
#

show LA logs

#

also, i'd recommend using SecretAPI for SSSS

#

wait, does it crash the client fully, or just (soft) disconnects?

icy knoll
#

probably a soft dc

#

if a crash, then you seriously fucked up somewhere lol

plush glade
#

Yeah dc sorry

plush glade
carmine prawn
#

and your server port

royal mica
#

If you are running the server locally / on a windows server

plush glade
#

Got it

carmine prawn
royal mica
#

Anything that the server deems problematic, it'll just DC the client silently

plush glade
#

Okay and is there a fix

#

Or just use secret api

icy knoll
#

code would be good tbh

#

and the logs

carmine prawn
#

yea

plush glade
#

Okay gimme 5 I'm in a round

royal mica
#

The error is usually in your code and not in SSS (or other areas) when you are getting silent client DC issues

upper vapor
#

It might get invoked before full auth

plush glade
#
        private readonly Dictionary<int, RoleTypeId> _subclassSettings = new();

        public void Activate()
        {
            List<ServerSpecificSettingBase> preferredSubclasses = [new SSGroupHeader("Preferred Subclass")];

            foreach (RoleTypeId roleType in Subclasses.Instance.Config.SubclassLoadouts.Keys)
            {
                var subclassNames = Subclasses.Instance.Config.SubclassLoadouts[roleType].Keys;

                var options = subclassNames.Prepend("Default").ToArray();

                var dropdown = new SSDropdownSetting(null, roleType.ToString(), options);

                preferredSubclasses.Add(dropdown);
                _subclassSettings.Add(dropdown.SettingId, roleType);
            }

            if (ServerSpecificSettingsSync.DefinedSettings == null)
            {
                ServerSpecificSettingsSync.DefinedSettings = preferredSubclasses.ToArray();
            }
            else
            {
                ServerSpecificSettingsSync.DefinedSettings = ServerSpecificSettingsSync.DefinedSettings.Concat(preferredSubclasses).ToArray();
            }

            foreach (var sssetting in preferredSubclasses)
            {
                if (sssetting is SSDropdownSetting dropdown)
                {
                    Logger.Debug($"Created SSDropdownSetting {dropdown?.ToString() ?? "NULL"}");
                }
            }

            ServerSpecificSettingsSync.SendToAll();
            ServerSpecificSettingsSync.ServerOnSettingValueReceived += OnSettingChanged;
        }
upper vapor
#

what's in the logs?

plush glade
#

Trying to send

upper vapor
plush glade
#
       private void OnSettingChanged(ReferenceHub sender, ServerSpecificSettingBase setting)
        {
            Logger.Debug($"OnSettingChanged invoked sender={sender} setting={setting}");

            if (!_subclassSettings.TryGetValue(setting.SettingId, out RoleTypeId role))
            {
                Logger.Debug("setting was not a Preferred Subclass setting");
                return;
            }

            if (setting is not SSDropdownSetting dropdown)
            {
                Logger.Error($"{nameof(OnSettingChanged)} setting is not SSDropdownSetting!");
                Logger.Error($"{nameof(OnSettingChanged)} setting = {setting}!");
                return;
            }

            var dict = Subclasses.Instance.PreferredSubclasses;

            if (!dict.ContainsKey(sender))
            {
                dict.Add(sender, new Dictionary<RoleTypeId, string>());
            }

            dict[sender][role] = dropdown.Options[dropdown.SyncSelectionIndexValidated];
            Logger.Debug($"Set preferred subclass for {sender} as {role} to {dict[sender][role]}");
        }```
upper vapor
#

dict[sender][role]

#

just return at the beginning of the method if sender == null

plush glade
#

Sender does not appear to be null

upper vapor
#

um

#

right

plush glade
#

At the start of the method I have Logger.Debug($"OnSettingChanged invoked sender={sender} setting={setting}"); and in logs I have [2025-11-27 21:45:09.617 +11:00] [DEBUG] [Subclasses-LabAPI] OnSettingChanged invoked sender=ReferenceHub (Name='Player [connId=2]', NetID='601', PlayerID='2') setting=SSDropdownSetting [ID: -1306496646] Value: 1 (Medic)

upper vapor
#

then the value is probably too high

#

wait

#

what

#

the f

#

this is actually crazy

unique crane
#

dropdown.Options[dropdown.SyncSelectionIndexValidated];

#

is probablz the cause

upper vapor
#

yeah

#

but how

#

😭

#

is the options array empty or something?

unique crane
#

I think there is the value property with what you dont need to do the options[idx]

#

@plush glade

#

Try that

upper vapor
#

SyncSelectionText

unique crane
#

Yes that

upper vapor
#

omg...

#

because it uses the one from the original definition

unique crane
#

Thats what I though

#

foreach player it creates a copy of the SSS setting

upper vapor
#

we gotta rewrite SSSS

unique crane
#

but I guess it doesnt copy the options

upper vapor
#

ye

#

😭

plush glade
#

Working as intended

unique crane
#

👍

upper vapor
#

nice

hearty shard
#

what the flip

true cedar
pallid summit
#

is there a plugin that allows you to display status effects on the bottom left for LabAPI?

#

only found one for Exiled

upper vapor
#

nevermind

#

i was about to link the exiled one as well 😭

hearty shard
#

do you know how to code?

restive turret
warped prairie
#

ye i have one, but its not made for public use.

#

its also Extremly poorly optimised i need to fix it and make it nice

true cedar
#

i was thinking about making one for ruei

#

but i am very lazy

pallid summit
restive turret
#

I have like 9 side projects

upper vapor
#

how many front projects

#

and how many back projects

halcyon folio
#

None

warped prairie
upper vapor
#

we're going down with this one Heartbreaking

warped prairie
upper vapor
#

how about diagonal

warped prairie
upper vapor
#

lmfao

severe cave
#

I am writing this for the people who understand RueI! How can I make the text move horizontally?

severe cave
# true cedar pos tag

Yeah, okay I have already tried it, but the problem was that it did not move all the way to the left, and I even used right align tag but still stayed there and didnt move an inch. It seemed like only the tag right align moved the text right but all the other tags just didnt do anything

true cedar
#

to the far left?

#

also make sure ur closing ur tags

severe cave
true cedar
#

are u closing ur tags

severe cave
severe cave
true cedar
#

align does

#

also are u trying to align it to the edge of the screen

true cedar
#

set ResolutionBasedAlign to true

severe cave
severe cave
true cedar
#

yea

pallid summit
#

don't ask for the code, I committed grave sins to get this to work (I never do any net coding so this is my first time working with post requests)

wheat flower
#

100 dummies all alive in the same room not moving:
Avg. 20 TPS

After FpcServerPositionDistributor optimization:
Avg. 41 TPS

restive turret
#

me after i completly delte FpcServerPositionDistributor

grand flower
wheat flower
#

also that may be slightly inaccurate

#

im doing some testing

grand flower
#

i don't believe in magic

wheat flower
#

the true hotspot for server performance loss at 100 players:
FpcServerPositionDistributor
CharacterController.Move()
CullingSubcontroller.LateUpdate()

grand flower
#

what did you change

wheat flower
#

a magician never reveals his secrets

#

except in this case its a hot mess

#

so i dont really want to bother explaining

grand flower
#

boasts optimizations
doesn't elaborate

#

I'll jsut check it out myself lol

wheat flower
#

the issue is im actually unsure if my boasting is even valid

#

so like

grand flower
#

ah

#

fair

wheat flower
#

if im optimizing specifically for a 100 player event

#

there are a lot of changes i can make

grand flower
#

There's a big one I've shared a while ago for 100 players

unique crane
#

delete the map

restive turret
#

By removing half of the game?

grand flower
#

Cuts the movement networking cost by half (or more depending on how many dummies you have as well)

restive turret
#

Try patch the connecting and return false (they will not able to connect)

grand flower
#

Also NW when the fuck are you making the reference hub set a list

#

(╯°□°)╯︵ ┻━┻

restive turret
#

What

grand flower
#

lemme check im up to date

wheat flower
#

remember the good ol days when the player list was a static array of GameObject[]

#

2018 days

#

💀

unique crane
#

Hubert now being a skilled programmer

#

Cooks up new system

#

refuses to elaborate further

grand flower
#

isn't hashset iteration slower than a list

unique crane
#

or rewriters his old ones

grand flower
#

or am I missing something

wheat flower
#

CharacterController.Move() is the real bottleneck of 100 players

100 players moving every frame -> 100 Move() calls -> thousands of physics calculations/s

why cant we just do simple collision checks 💀

wheat flower
grand flower
#

considering it's iterated more often than additions/removals, I feel like it should be a list anyway

unique crane
#

Hashset is constant time

#

Last linear

#

they are gonna meet at some point

#

But we talking thousands of items here

#

So yea hashset is gonna be slower in case of tens of items

wheat flower
unique crane
#

By how much?

#

so much it can be ignored xd

grand flower
#

idk just feels more logical for it to be a list, or a static array tbh

grand flower
unique crane
#

Idk what hashset your specifically talking anyways

grand flower
#

ReferenceHub.AllHubs

unique crane
#

So it depends on how is it being used

restive turret
#

Make it a Queue

#

FrozenList

wheat flower
#

here are some ideas i worked on for fpcserverpositiondistributor:

static FpcSyncData array of 128 * 128 for previously sent data
inline position message, using a static NetworkWriter
spread out position messages over PlayerId % frameCount rather than sending all info at once at a fixed rate

warped prairie
grand flower
#

If you spread out too much you'll add lots of jitter

unique crane
#

^

grand flower
#

And with the way hitreg is right now it'll just be unplayable

wheat flower
#

20/s

grand flower
#

Too much at high speeds

restive turret
#

% 256

grand flower
#

Especially at high player counts

#

Visible in the video I linked (second link)

wheat flower
#

it will use the playerid to spread values

grand flower
#

I'd just do odd/even like I did

unique crane
#

1 tick is ~16ms remember (60 tps)

grand flower
#

Works perfectly fine on a heavily modded server where players sometimes reach 255% movement speed

unique crane
#

thats enough for hitreg to be hit or miss

grand flower
#

Could be better but I'm restricted by SL's... less than ideal movement networking heh

wheat flower
#

im curious what bottleneck you are hitting

grand flower
#

Just the way it networks stuff, non standard and lacks stability when you miss enough movement updates

#

you'll see players jitter all over the place instead of smoothed movement

wheat flower
#

i love when the game breaks and everyone sits still

grand flower
#

that's the server disconnecting the server

#

dunno why NW doesn't just prevent that from happening lol

#

We patched that on Bright's so it doesn't happen anymore

wheat flower
#

"Upgrading held pin pulled grenade disconnects netid 0"

#

i loved making that issue

#

crash any server easy

grand flower
#

Except when an exception occurs clientside that soft disconnects a player, can't fix that one

#

Couldn't crash Bright's DogKek

#

We make it impossible to disconnect the host player

restive turret
#

Start the game ,host gets disconnected

grand flower
#

dunno why the server has a player or is even accessible tbf

#

Either way if you're making an event with 100 players in mind, here

#

Just don't starve the server of resources since it limits the gains from this technique

restive turret
#

Run 5 server of that server

#

Give the server a celeron and 1gb ram 🔥

grand flower
unique crane
#

The hotspot on the position distributor is determining which waypoint you are on

grand flower
#

also made it skip dummies because idk why dummies would need that data

unique crane
#

Soooooo if you can optimize that

grand flower
unique crane
#

Perhaps some quadtree orr something

grand flower
#

I'm sure someone here has a lot of ideas that they could send to NW

#

with full explanations on how it would work

unique crane
#

Mine is that I run the profiler in unity xd

grand flower
#

waypoints are a huge performance hog

#

that's why I've been begging NW to get rid of them

wheat flower
#

schrodingers profiler

#

lul

grand flower
unique crane
#

Your profiling is based off subtracting time between calls

#

doesnt it

wheat flower
#

its based on total cpu time

warped prairie
#

source: im lying

wheat flower
#

most of the cpu time is spent in that method

unique crane
#

not sure what would be the bottleneck here

wheat flower
#

that method can be optimized

grand flower
#

i mean you call it for player * player

wheat flower
#

remove sqrt

#

move some checks around

#

fast exits

wheat flower
#

total cpu time bud

#

its what matters

unique crane
grand flower
#

it's not the biggest performance hog though

unique crane
#

that has been proved on unity forum xd

wheat flower
#

CharacterController.Move() is true bottleneck

#

can we just delete noclip checking pls

#

it will save cpu time

grand flower
#

You can't do much about character movement though

#

it's needed heh

#

you know what's not needed?

#

waypoints

unique crane
#

Im not interested in commenting on that anymore

#

kinda tiring

wheat flower
#

oh yeah another thing

#

CullingSubcontroller

grand flower
#

I gave up on expecting performance in the game anyway ¯_(ツ)_/¯

#

it's tiring for modders to be expected to fix everything

unique crane
#

😭

wheat flower
unique crane
#

how tf does that get called on server

#

ah

#

yeah thats fine then

wheat flower
#

yoinks like a shit load of cpu time

unique crane
#

Well yea

grand flower
#

afaik it's used for hitreg

glad pagoda
#

Why are we running animations on the server

grand flower
#

looked into that before, can't get rid of it

#

head position for headshots afaik

unique crane
wheat flower
glad pagoda
#

Why does that need animations

unique crane
#

Even tho they are out of sync Kek

grand flower
#

that's another thing I gave my 2 cents on: why though, it's not an esports title

wheat flower
#

good point

#

why does it

grand flower
#

just do a simple capsule/bounds check

wheat flower
#

easy fix on cpu: just update animations 1 time a second

unique crane
#

miss 9 out of 10 shots
oh my god the game hitreg sucks

wheat flower
grand flower
#

the bounds would encapsulate better than whatever animation the server has (since, as you said, it's out of sync)

unique crane
#

Average "hitreg sucks" video

wheat flower
#

95% of hits are the main body and head which barely even fucking move anyways lmao

glad pagoda
#

Wait do hands for holstered guns actually have hitboxes??

unique crane
#

You dont see holstered weapons

glad pagoda
#

Since you said hitreg for animations

unique crane
#

Yeah for legs and arms

#

Yknow

glad pagoda
#

Wait not holstered

#

The other thing

unique crane
#

No, you cant hit someones weapon

marble cobalt
unique crane
#

Ohhhhhhhh right

#

Didnt realise

glad pagoda
#

I mean

marble cobalt
#

And given a good amount of players do aim at the head, it can be a problem

glad pagoda
#

Having it done on clients only wouldn't be that bad probably

marble cobalt
#

It is, we have received enough complaints about hit reg in the past

grand flower
#

I feel like calculating the approximate bounds of the head based on look angle wouldn't be hard

#

Without needing to animate on the server

marble cobalt
#

Sorry, let me correct myself

#

We still, to this day, receive enough complaints about hitreg

marble cobalt
#

Not going to add one more issue to that list

wheat flower
#

guys the real bottleneck is player movement

grand flower
wheat flower
#

if its replaced with basic collision validation instead, it would be faster

grand flower
#

if you're just trying to prevent obvious cheats, but in any case aimbots are still gonna get the head if they want to so

wheat flower
#

Move() is so expensive

grand flower
#

¯_(ツ)_/¯

#

most cheats i've seen aim for center point though

marble cobalt
#

There definitely is solutions, but as I always say, the scope of our community is too large for the budget that we have

#

We do want to give performance a proper look, there is ideas we want to explore with time, such as baked shadows

glad pagoda
#

and it is per light

wheat flower
#

a truly optimized 100 player event would be peak

marble cobalt
#

Like, yeah, of course it'd be lol

glad pagoda
wheat flower
#

the biggest factor ive ruled out is charactercontroller.move()

#

like if that can be surpassed, expect greatness

#

mostly everything else is negligible

#

or can be easily optimized

#

that is the only hurdle i cant really figure out

unique crane
#

You can disable the animations

#

and see how much it affects hitreg

wheat flower
#

i did that already

unique crane
#

Well then

wheat flower
#

it affects it quite significantly

unique crane
#

There is nothing you can do

wheat flower
#

???

unique crane
#

do more*

wheat flower
#

nah i think you misunderstand

unique crane
#

than that

wheat flower
#

which one are you referencing

unique crane
#

Nothing much than disabling them

wheat flower
#

FpcMotor is the one that uses charactercontroller.Move()

unique crane
#

Coming up with similar solution

#

But well yea

wheat flower
#

that reduces load significantly

unique crane
#

Or maybe update them only on frames where someone fires?

wheat flower
#

ive opted for like maybe 2 updates per second per player

#

not that it would matter lol

unique crane
#

So you update them on demand

wheat flower
#

nah just alternating frames based on playerid like before

glad pagoda
#

just replace serverside validation with a bigger capsule

unique crane
#

That one is possible too

#

But may be a bit too forgiving

wheat flower
#

Hold on you are cooking

grand flower
#

doesn't matter, you're not an esports shooter

#

only do the capsule check if a client says they hit someone

glad pagoda
wheat flower
#

only update animations when a player shoots...

#

i like this idea

grand flower
grand flower
#

but still: esports level stuff, which SL isn't

#

you're really overengineering this heh

wheat flower
#

its not hard to implement in unity if you ask me

unique crane
#

You wouldnt believe this but

#

some people sweat this game

glad pagoda
#

people might honstly cheat more in SL Kek

wheat flower
grand flower
#

just because someone people sweat this game doesn't make it an esports shooter

#

most cheats aim for the center position of the target

#

because ttk doesn't change much when you're hitting all body shots with the right gun anyway

unique crane
#

I mean cheats are obvious in pretty much all cases

grand flower
#

so I wouldn't worry about them that much compared to the performance gain of not doing everything you're currently doing on the server

unique crane
#

They dont hide them usually

#

Ive even met one cheater showing me his cheats in game Kek