#plugins-dev-chat
1 messages · Page 166 of 1
Alright, thanks
Can confirm
You can give yourself things like evil candy but the effects no longer work
This is intentional to give Devs extra candies to use for custom effects
Hi
guess what!!!
That's dope
Fr
No
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
Which is your favorite MTF group?
November-17
Initial time doesn't get readed
There is already a labAPI issue about it
.
Is there a way to get the current item's that the player is holding position?
Not the player's
the item's
um
player.CurrentItem?.GameObject.transform.position
or smth
why?
It's always 0, 3500, 0
ah
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
Could you just get the player position and apply an offset maybe?
I haven't touched plugins since it was NW API lol
Probably
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
Depending on what you need , you could create a new transform, parent it to the player, set its local position, and then unity would automatically rotate it appropriately
position of the item in hand

Are we deadass dude
What the hell
https://github.com/northwood-studios/LabAPI/issues/111
Why was this closed as completed if it wasn't completed
?
there may not have been a comment made but the point stands
It was closed in September
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
it may be implemented at some point
-# whether that's in the future or the past, surprise :3
So I'm not the only one who find this pipeline weird
It's odd
Also why close the issue, why not leave it open and mark it as resolved when you resolve it internally?
make a bot that sync gitlab issues with github issues 
It already exists, but that literally does 1:1 snying
and I assume you do not want the full thing to sync
That's also a "you guys" thing not an "us" thing
that's how the system currently is
i guess we could add a "viewed" or something label
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
let's not get that involved again
I don't care to argue about it though it's already been discussed
I think this whole thing is already beating a rotting horse 
Trying to see things get done at NW is like trying to squeeze water from a stone
you should be happy we take suggestions in the first place 
The SL community is propped up a large amount by plugins and the plugin dev community
It's a smart business move to take suggestions and help the devs
It's less about what is lucky for us and more about what is best for you guys
I'm pretty sure this was a joke
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
you would be correct
That's why I said my bad lol
at the end of the day, it's the end of the day
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
Yes, its in i certainly can confirm
Fire thank you man
Whats the matter?
It's not a big deal I'm just frustrated
About what
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
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
Yeah that's the part I hate
Jesus hasn't been active bc his personal stuff as far as i know
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
Yes, the things are slower when it comes to adding new features
Yeah so I'm just gonna leave it there cause none of you guys can change it and neither can I
I did asked some stuff that changed this, but postponed a little but
So it's a moot point
I appreciate that :)
yeah, and slejm has summed it up pretty well
do you want us to do FFA in both codebases 
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)
-# make sure to factor in unity loading times
Combine that with base game MRs and it gets messy a lot
Base game changes often do not take LabAPI into account
I just mean like if things are taking so long there's surely a better way to do it
The thing is that we are not in a office 8 hours a day
100%
We are not employees
I'm not paid for what I do either
But I do it cause I like coding and I like helping people
Most of dev team studying on some university
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
but you don't have 10+ active people to work with
it's mostly you commanding what you do
so yeah, that's the system we have to face
That's why I'm not criticizing you guys as individuals
you can do whatever, whenever basically
It's the system you work under
Is syncing cooldowns really that easy?
-# easy
TimedGrenadeProjectile.SpawnActive
One line
Wdym?
It's a one-line fix to a bug that I still haven't seen implemented
Likely because it remains unapproved
Well then I wouldn't know 
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
Looks easy from the outside yea
Then you get in, and you realise its not that simple
apply the next time positions open up 
I had the same vision before I joined NW
You guys aren't the problem
It's a problem with the hurdles you have to jump through to get one thing done
*insert scrum master speech here*
Is there a way to get the pickups position? Cuz' everytime I try it's 0, 3500, 0
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
Where are you getting it from
that should not be the case
Show code
i would also love to work a lot more if i got the approval for bigger tasks, or if unity didn't demotivate me half of the time i tried to open it
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
They have tied me to a stake; I cannot fly
I love creating proof of concept and stuff, also like to introduce many changes into the game, which would break any existing stuff, also like to experiment and stuff (for example the mirror interest manager i would like to try it)
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)
I skipped over "time" 
Sometimes I have pc open for like 15 hour and didn't do shit
This is very real
https://i.e-z.host/🐀/13y74h4h.png
now that i made the hubert cone can we have triangles?
at hubert
Is there a way to make any weapon invisible?
This guy gets it
Wait this guy gets it so much. He is truly just like me
“I’m gonna get some shit done today” - opens anno 1800
And this is why I do things later at night usually
Ye but everyones sleep schedule isnt the same as mine
Others have to wake up early
I do as well but I just deal with it
Well there is 4 people in this house excluding me so
slej codes with such passion everytime he mispells a variable or something is underlines red he rages like a CS:GO clip
He doesn't even notice until he's pushed the commit(s)
so like cookies
does OnServerDisconnect also get called if a player gets timeouted or something else?
It should
is it possible to disallow changing or changing the mode of the particle disruptor serverside or is it completly clientsided?
patch DisruptorModeSelector
the server doesn't store the state but you can override it
How can I get a role's color? (not hex, named color)
Get the group
That should contain the badge color
is there a way to cancel the Interaction with an InteractableToy but while it was in progress ?
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
I'll have a look for you soon™
But you can probably just set IsLocked to true
How would I randomize a status effect?
wdym
I wanna give the player a random status effect
player.ReferenceHub.playerEffectsController
get all the effects
then pick a random one from that list
Sound interesting
Why can teslas strike faster then usual?
Yes, I mean the time between the activation is smaller
interesting
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
How do I disable stamina usage for a player?
Patch it
Server restart fixed it
patch or custom effect
sobbing
Anybody know how to use the waypoint toy?
yes
For some fucking reason I cannot detect collision with an invisible primitive, can someone tell me how to make it work ???
you should get it to work by changing the primitive flag to invisible and collidable?
But it is collidable !
interesting
could you test by adding box collider on the primitive?
private void OnCollisionEnter(Collision collision) this isn't called for some reason.
I did :
behaviour._collider.gameObject.AddComponent<BoxCollider>();
Wouldn't I get a NRE if it was ?
try catch it
No error.
_collider afaik is overwritten
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
here lemme share some code I have
it might be terrible, but it works 
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
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
Create one
Set the bounds
Move it for players and pickups to get dragged along
They can
You just need to set the trigger state after Start
Or after you change the primitive type
aoh brother 😭
lowkey im not the smartest for this one
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
Does LabApi have an event for 173 placing a tantrum?

Guess I didn't look that hard
How do I spawn and explode a grenade?
So that it doesn't damage SCP's?
like, visually?
Functionally
oh, well
I want to deal damage
you can set the footprint to have a team of SCPs
so if FF is not on, it won't damage them
How do I do that?
otherwise, just track the damage handler with a set or list, and set IsAllowed to false in Hurting
the latter is probably easier
How do I track the damage handler?
Yea but where to I get it from?
do you wanna instantly explode the grenade or have it tick down
Instantly explode
then create a footprint, store it in a list, and call ExplosionGrenade.Explode with the footprint
hashset works as well
How do I create a footprint?
Do I need the give it a referencehub?
ye
Ok
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
InventoryItemLoader.TryGetItem
give it the type of grenade, T is ThrowableItem
get its Projectile and cast it
Which grenade type?
I can't seem to find the grenadehe class
I promise I'm not being stupid on purpose
ItemType.GrenadeHE
ThrowableItem
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
If your not using a hint framework, it's really just Unity rich text.
use RueI

Good idea
-# you can check the code
Anyway what is the damage handler I should use to get 207 damage?
How do I get that?
DeathTranslations
Awesome, thanks
np
Should I consider using Exiled or Lab API for good pluginz?
Depends
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)
it mostly comes down to preference and the feature set
LabAPI plugins work when EXILED is installed, but you can't use EXILED plugins if it's not installed
check out some examples in each framework
as eve said, LabAPI is updated to be compatible with game releases, because it's official
The thing is, Exiled has a whole documentation but I can't find a documentation that explains everything for Lab API.
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
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. 🥴
there is sometimes times where exiled has the most efficient implementation, but other times where it is slow and that's when people improvise
Yeah that's fair.
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);
uhmmm idk but maybe add the element via show before setting visible? iek
show makes set visible not needed afaik
although
i havent done much sl recently so i cant remember
Yeah it does but im just guessing the order of operations messes it up..
Itd be needed if you were to hide it
idk tho
I doubt it really
But
It should work
anyway i go bai
nah, didnt work
Yeah i really dunno sorry haha. I dont see anything wrong with that code
I literally tried more combinations than there are atoms in the observable universe bruv
and to be clear other plugins using ruei work fine?
Well, I am not really sure about that
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
Simple hint meaning SendHint(string)?
Yes and duration and all kind of stuff
Wait, just tell me how is it supposed to be installed and I wont answer so that you wouldnt know if I was an idiot the whole time
Well you put RUEI into the plugins folder
unlike the old one, its a plugin
not a dependency
Based (furry)
No need for yapping
crazy
🥴
Based Furry
@celest thorn Did you ever figure out extracting animations from existing MER schematics?
no
because the unity docs says its impossible
idk how tf they store them
but they store in a way

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
this is empty
Yeah this is probably the most accurate thing you can do
TRUEING
so do the smart idea
Omg
AnimationClip[] clips = bundle.LoadAllAssets<AnimationClip>();
Genius
and you check which one has the same name
🧠 i know im a smart girl :3
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
so did it work?
I can't try it, I'm not at home
Gordon when half life 3
Tell the fucking gman to give you another job
Gordon freeman i..i...haa...ve...Found a job opportunity for...ahh..mmm..you... #1266667711573000212
Fuck nw
I hope
Crazy
go get your hands on source 2 source code
Nah im not
S&Box looks so promising
you can't fork it tho
Source 2 engine is kind of goated and the S&Box platform seems epic
the engine is open source just to allow people to add their stuff to it
true
i wish i could fork it so i can build my game there instead of fuck ass uni teh
"uni dih"😭
I love that s&box uses c#
wait they seprated the editor as well
so true
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
It's coming at some point
it doesn't have the unreal engine jank of course the engine is very customizable
peak
It really seems like it's set up to become one of the premier engines
Just needs more time to cook
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
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
i hope that facepunch doesn't accept the slop games like how roblox does
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
U just have to pay for 100 euro and can release game
You're the one who turned me on to S&Box and I'm forever grateful
I'm so optimistic for it
Sbox is great but i haven't used it myself
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
The fact that they actually sandboxing (restricting) c# is great
yeah that's fine
damn very clean UI ngl
sphere
already looks better then unity 😂
What the fuck
LET'S GO
Poggers
Piggies
Poggies
W
Based
And it's not decades* behind
-# *dramatic exaggeration
Unity uses a C# version that's like half a decade out of date
And it doesn't even include all features from the version
😭
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
exactly
Ngl its scaring me that none is in my uni class and its just me
I mean i check school website and everything
There should be class
But none is in uni
Like i’ve seen 4/5 people
In total
I have one
That is prohibited to share
Like shame on me lol
I got screamed lol
The professor is missing but no announcement
woah
wtf

Yea…
i love how i been looking for this option since i started using unity until now i managed to find it
Bad piggies
yea, but
And if i don’t
NetworkServer.Destroy will cause some strange problems, and I am still troubleshooting
How
Like how
Its like saying my brain shuts off
You destroyed the client maybe?
Instead of the dummy
unlikely, I'll try again...
100% not client
💀
I know now...
0.1f causes half of the asynchronous problems...
1f is completely solved
wHy?
wait a second...
ok...
If my delete Dummy when spawning players, it may cause the out-of-sync issue...

out-of-out-of-sync
ummmmmm
what
XDD
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?
Holiday effects are disabled client side
if only discord loaded the video
so no
oh yea the holiday effects cannot be enabled
only during holidays
copycat
That sucks
Some of the effects are really funny so would have loved to see how they reacted
Is it possible to move text horizontally in RueI? If not, are there any easy solutions?
sweet
askin
Why do you set the position again
Also that's not how arguments work
position idk just incase the first one didnt work 
You need to set the TextFormat which is like a string to pass to string.Format
idk abt arguments but i got it to work with that ye
The arguments list will be passed to string.Format on the client
So like
TextFormat = "Among {0}"
Arguments.Add("us")
Will be "Among us"
-# holy fucking shit
Stole that gif
Egy amókus 
🐿️
My server specific settings appears to be crashing me immediately upon connecting
Is this a known issue ?
show LA logs
also, i'd recommend using SecretAPI for SSSS
wait, does it crash the client fully, or just (soft) disconnects?
Yeah dc sorry
filepath?
AppData\Roaming\SCP Secret Laboratory\LocalAdminLogs
and your server port
If you are running the server locally / on a windows server
Got it
SSS is easy to disconnect under inappropriate code, it's true
Anything that the server deems problematic, it'll just DC the client silently
just for me, reading logs, improving code abilities
yea
Okay gimme 5 I'm in a round
That completly depends on what you are doing. This is not a generic SSS issue, but it is an essential problem of what you are doing with the SSS
The error is usually in your code and not in SSS (or other areas) when you are getting silent client DC issues
Check if the player exists
It might get invoked before full auth
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;
}
what's in the logs?
this is not the issue, OnSettingChanged will probably have something to check
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]}");
}```
Sender does not appear to be null
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)
I think there is the value property with what you dont need to do the options[idx]
@plush glade
Try that
SyncSelectionText
Yes that
we gotta rewrite SSSS
but I guess it doesnt copy the options
👍
nice
what the flip
be quiet
is there a plugin that allows you to display status effects on the bottom left for LabAPI?
only found one for Exiled
nah but its not that hard to make
do you know how to code?
I think @warped prairie has one but idk if public
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
Yeah, but I was already busy with my twitch integration and don’t really have time for another side project 😭
I have like 9 side projects
None
i got 23 middle projects on the go. 12 Upward projects
we're going down with this one 
i got 30 down projects on the way dont worry
how about diagonal
i got a vector3 (1,0.5,1) project on the way
lmfao
I am writing this for the people who understand RueI! How can I make the text move horizontally?
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
No, sry I meant far right
are u closing ur tags
But pos doesnt have a closing one or atleast doesnt need one?! I reckon
The align one yes
Yes
set ResolutionBasedAlign to true
Alr
And after that only using the align tag should be enough?
yea
At least it works!
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)
100 dummies all alive in the same room not moving:
Avg. 20 TPS
After FpcServerPositionDistributor optimization:
Avg. 41 TPS
me after i completly delte FpcServerPositionDistributor
real...
What optimization did you do
magic
also that may be slightly inaccurate
im doing some testing
i don't believe in magic
the true hotspot for server performance loss at 100 players:
FpcServerPositionDistributor
CharacterController.Move()
CullingSubcontroller.LateUpdate()
what did you change
a magician never reveals his secrets
except in this case its a hot mess
so i dont really want to bother explaining
literally facts
the issue is im actually unsure if my boasting is even valid
so like
if im optimizing specifically for a 100 player event
there are a lot of changes i can make
There's a big one I've shared a while ago for 100 players
delete the map
By removing half of the game?
Cuts the movement networking cost by half (or more depending on how many dummies you have as well)
Try patch the connecting and return false (they will not able to connect)
When
which
why
What
lemme check im up to date
remember the good ol days when the player list was a static array of GameObject[]
2018 days
💀
Hubert now being a skilled programmer
Cooks up new system
refuses to elaborate further
isn't hashset iteration slower than a list
or rewriters his old ones
or am I missing something
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 💀
its so small its negligible
considering it's iterated more often than additions/removals, I feel like it should be a list anyway
Depends on the number
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
guys this is the real winner if it can be optimized just sayin
idk just feels more logical for it to be a list, or a static array tbh
heavily modded server (Bright's) #plugins-dev-chat message
Idk what hashset your specifically talking anyways
ReferenceHub.AllHubs
So it depends on how is it being used
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

If you spread out too much you'll add lots of jitter
^
And with the way hitreg is right now it'll just be unplayable
i only do % 3
20/s
Too much at high speeds
% 256
the way i do it, it doesnt matter the player count
it will use the playerid to spread values
I'd just do odd/even like I did
1 tick is ~16ms remember (60 tps)
Works perfectly fine on a heavily modded server where players sometimes reach 255% movement speed
thats enough for hitreg to be hit or miss
Could be better but I'm restricted by SL's... less than ideal movement networking heh
elaborate the issue
im curious what bottleneck you are hitting
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
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
"Upgrading held pin pulled grenade disconnects netid 0"
i loved making that issue
crash any server easy
Except when an exception occurs clientside that soft disconnects a player, can't fix that one
Couldn't crash Bright's 
We make it impossible to disconnect the host player
Start the game ,host gets disconnected
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
@wheat flower
The hotspot on the position distributor is determining which waypoint you are on
also made it skip dummies because idk why dummies would need that data
Soooooo if you can optimize that
If only there was a way to get rid of waypoints
Perhaps some quadtree orr something
I'm sure someone here has a lot of ideas that they could send to NW
with full explanations on how it would work

no its actually getvisiblerole currently
Sours?
Mine is that I run the profiler in unity xd
waypoints are a huge performance hog
that's why I've been begging NW to get rid of them
maybe it changes depending on who profiles it
schrodingers profiler
lul
its based on total cpu time
source: im lying
most of the cpu time is spent in that method
that method can be optimized
i mean you call it for player * player
this
total cpu time bud
its what matters
Vector3.Distance is the same speed as the non sqrt variant
it's not the biggest performance hog though
that has been proved on unity forum xd
CharacterController.Move() is true bottleneck
can we just delete noclip checking pls
it will save cpu time

You can't do much about character movement though
it's needed heh
you know what's not needed?
waypoints
I gave up on expecting performance in the game anyway ¯_(ツ)_/¯
it's tiring for modders to be expected to fix everything
it animates the players
yoinks like a shit load of cpu time
Well yea
afaik it's used for hitreg
Why are we running animations on the server
For hitreg
hitreg
Why does that need animations
Even tho they are out of sync 
that's another thing I gave my 2 cents on: why though, it's not an esports title
just do a simple capsule/bounds check
easy fix on cpu: just update animations 1 time a second
miss 9 out of 10 shots
oh my god the game hitreg sucks

the bounds would encapsulate better than whatever animation the server has (since, as you said, it's out of sync)
Average "hitreg sucks" video
95% of hits are the main body and head which barely even fucking move anyways lmao
Wait do hands for holstered guns actually have hitboxes??
Whar
You dont see holstered weapons
Since you said hitreg for animations
No, you cant hit someones weapon
The main point of discussion is the player's head, which does move depending on where you look
I mean
And given a good amount of players do aim at the head, it can be a problem
Having it done on clients only wouldn't be that bad probably
It is, we have received enough complaints about hit reg in the past
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
Sorry, let me correct myself
We still, to this day, receive enough complaints about hitreg
Not going to add one more issue to that list
guys the real bottleneck is player movement
and since you're not looking for pinpoint accuracy adding some leniency would solve most issues
if its replaced with basic collision validation instead, it would be faster
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
Move() is so expensive
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
btw i did look into the part about that which we discussed on the meeting
and it is per light
a truly optimized 100 player event would be peak
Like, yeah, of course it'd be lol
so we can't use it for lights that cast shadows on the player
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
i did that already
Well then
it affects it quite significantly
There is nothing you can do
???
do more*
nah i think you misunderstand
than that
which one are you referencing
FpcMotor is the one that uses charactercontroller.Move()
You can spread out animation across frames too
that reduces load significantly
Or maybe update them only on frames where someone fires?
ive opted for like maybe 2 updates per second per player
not that it would matter lol
So you update them on demand
nah just alternating frames based on playerid like before
just replace serverside validation with a bigger capsule
wait this is actually better
Hold on you are cooking
doesn't matter, you're not an esports shooter
only do the capsule check if a client says they hit someone
i mean it'd only really benefit cheats
Valorant does this, updates all players in the direction of the shot (via a cylinder sweep)
this!
but still: esports level stuff, which SL isn't
you're really overengineering this heh
its not hard to implement in unity if you ask me
well
people might honstly cheat more in SL 

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
I mean cheats are obvious in pretty much all cases
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





