#plugins-dev-chat
1 messages · Page 75 of 1
HSM creates threads for every player
fr
not once did we have a conversation about how threads kill performance
and are unnecessary
5 players i was doing 50 tps with ruei im doing fine 60
i dont know what exactly causes primitives to take a toll on the tps, is it mostly sending messages?
for hints
HSM decides to make their whole thing async for no fucking reason… especially on unity…
Interesting
free will
if you can why not

partially that
also because of transform updates if the primitive isn't static
idk who decided to write ServerUpdate and ClientUpdate
but they get the transform in the same method repeatedly
luckily Hubert fixed it :3
Interesting
hope next update brings everything
im waiting on ruei v3 because i want it to have compat with base hints
that i've asked like santa clause
interesting
does it have basegame hint stuff
Yes
oh fire
But its all manually written rn
Its usable rn alot
For my use case it is
And its stable enough
No jitter, no real problems
(But the version on git rn its broken)
primitives are shit optimized but luckily you can take pretty basic steps to work it to a usable state if you really need to
20k prim 100 fps and server doing 60/60
so yea you can
i did with sloc (to some extent)
and i'm not doing insane stuff unlike Zero
yours doesnt really count
because it isnt basic steps
anyways
Im offended ;(

I don’t wanna imagine if that is just one of the problem
How much this game could be improved
ive seen primitive culling that doesnt tank tps, and if i make collisions ultra simplified and all other primitives non collidable or client side then itll be pretty good for 99% of use cases
Im telling you meow is like 100% what people want for optimization
I got dms of people wanting to buy it
Because its crazy good
i also raw dogged a mostly unoptimized map with like 70 fps and 60 tps with just MER. it is however pretty small so i dont have much data on anything bigger.
And for cases like normal server or other like roleplay this is perfect
MeowEditor (private editor i made)
Oh interesting
Mer was doing with a simpler map 3k 30tps in a ryzen 9 last gen 3D
So imagine
If Terry Davis was an SCP:SL dev would he be more sane or less sane?
More sane
how many primitives
the map i have is probably 2-3k+ prims
i dont have an exact number
I have it its the old hub and its 3945 primitives
that is horrible
i havent tested it with many players yet, i expect it to probably run worse
i have a thing in Unity with like 6k prims and IN THE EDITOR it runs kinda shit
-# i'm too lazy to blender
Like its not me bullying but meow was created for entirely atos
Nah for me runs fine
In unity 6
when you play it?
Oh dogshit
In that case yea
In the editor dogshit
When i test it
so i can just open source if i make it myself :33
once i replace my hint service with RUEI i'll be pretty confident it could run 60 tps consistently though
i used to join a server with a guy who made so many schematics with no optimization the server ran 30 fps
and i cant imagine the tps lol
Don’t worry that guy is normal
how many are we talking
this dude also bragged about his epic MER skills and he clowned on me for suggesting to delete small details which might build up to an fps increase
because i apparently had no experience in MER and my opinion therefore didnt matter
lolol
On the hub for my server rats have the their fingers and stuff
Why because i can
They are so cute :3
did he use vertex snap? cuz i see a lot of people who doesnt know about it and cant connect some primives properly
there's a medical area, a rec room, a security office, an elevator, and administrative areas
?
this has nothing to do with connecting primitives right
What even is that
oh gosh i hate that so much when people don't use snapping
Never used it and im fine
and manually do it alll
if you arent struggling to get 30 fps then youre free to put as many fingers as you want haha
its really useful
people
you can also type in the transform fields
Im doing 130 fps and on a rx500 80
So i guess everyone can run this server
0 static objects, lemme guess
you mean when people dont align their primitives with grids or transform
maybe, i really dont know
my favourite thing is you can do smth like /5*3+2 in those fields
yes
PEAK
dude
facts
🗣️🗣️🗣️🗣️
he also told me i clearly dont understand how primitives affect tps when i suggested deleting tiny cubes for marginal fps and tps gain. this was back when nocollide primitives were just negative scale lmao so it technically did
oh gosh
he constantly bragged about his technical and backend knowledge of SCP SL
PirateSoftware of Sl
back then i wasnt a plugin dev so technically he was the only one who could run the server (and i didnt know well enough to question him)
I bet he worked for blizzard
😭😭
but now i am and i exceed his knowledge in all fields related to scp sl within a year lol
his exiled config was combined
btw
EEWW
EWWW
this guy needs to be expelled from doing servers
he also said he knows too much about running a server to train any other admins or backend people
including RA, plugins, and MER
he thought that his admins were too stupid to understand these things and itd be pointless to teach em
Crazy
ikr
ctrl+shift
vertex snapping
deadass so condescending and disrespectful
i do it with v
and also he gave his AK47 a 1.2x damage multiplier and the A7 a 0.1x damage multiplier (to make them "harmless" even tho they gave burn effect still)
one day i was just searching snap/snapping on mer discord and found the gold
GOLD GOLD GOLD
and its better than changing my primitive position painstakingly manually
Can we make cs crates in sl
essentially kind of an incompetent idiot but since he was the only one posessing technical knowledge like this he was irreplacable
and btw usually when i dont know what im talking about i dont talk about that
if Northwood makes another game ever i pray they dont make the same mistakes they did in SL
SCP:SL 2
like no crouching
or admintoys being 100% unoptimized
leaving all optimization to plugins
will they ever make another game?
no.
or does northeood die with SL
it kinda sucks bro
if it was optimized (even just by distance) from the get go then i wouldnt have to play on the 30 fps MER maps from hell
triangle primitive when
i asked for a tri primitive in patreon and got voted no by someone lmao
make it yourself
but at that point they might as well add meshtoy
i met that guy and lightly joked at him for voting no on everything and then he got mad and started yapping for like 3 minutes about how im not funny
meshes are serializable
northwood should....
can we.....
i think....
Please
mesh toy :3
would that be better or worse
i think it would probably be overall better
idk though
the more freedom we give server owners the closer we get to gmod 45 minute mod downloads
the only good thing for me about primitives vs proper models is that even those who dont have 3d/blender skills can do stuff
if any of the scp sl modded servers were in gmod it would take forever to download the mods
and its not hard to teach someone to do it
so you think itd be good with no downsides
no
i think so but there must be some reason its not been added.
shouldve probably said the most important instead of the only
so what downsides are there for a hypothetical mesh toy
halo
How it would be downloaded? Would you have to wait for server to send you it in packets or download it via external link (management isnt keen on downloading anything external)
so many server owners would probably spawn yansim toothbrush if there was a meshtoy
performance and downloading
unpack an assetsbundle
(so we can put C#) 
uh nonono
Yeah thats not happening either xd
;(
isnt there a serializable mesh object
Idk
Yeah thats what would be needed to do
Send it from server to client in multiple messages
Or cap it to 65KB
1 message
imagine how slow that is
i'd put a limit on vertices and tris
5 verticies
Or it could be capped at 65KB and you would have to put them together
i think the serializablemesh already has a 65k tri (or vert i forgot) hard limir
as multiple meshes
wait no it has to be smaller
its in the name, i think i saw docs on it somewhere online
Can you get me the link
probably doesnt even exist anymore
cant find anything on it
sure
lemme see
i think most things i found are third party or outdated/useless for this
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
yeah that first one is useless
I mean this
its not what i remember lol
anyways its probably more complex than i could imagine to serialize and network a mesh
but if it was ever possible itd be very very cool
and would definitely be abused by server owners with no tech knowledge
Do gameObjects have texture property?
meshrenderer
couldn't that be used to change textures if NW would allow networking for it?
technically
if they only allow texture changes that is
if they allow material changes then people will find the most expensive material to render in the game and spam it everywhere possible
if we could fuck around with base game textures that would be epic
then let them fuck their own servers XD
i heard the ability to apply base game textures to primitives was on the table at one point
at one point??
do you mean it's not anymore
💀
no i just am not sure
I am begging NW from the start of start itself to add textures for primitives 🙏
idk if there is issue for it though
it indeed is
yes
anyone alive :3
Kinda
hiii how are you doing
Eh
still ye
Laying down in the bed
crazy
hiii how are you doing instead
Waiting to have a motivation to start doing something
let's say ok
nice atleast
i just finished off to migrate from Meow to RUEI and cleaned at the same time i was cleaning the house
so
multitasking i know
*multithreading 
nah i don't have smaller zer0two working for me the main thread
so
Zer0
?
can I read file from start and end at the same time?
wdym?
when you read a file you are reading from the start to the end
multithread reding of single file
Filestream, and you have to do flag to don't lock it
me on a way to use HSM for my plugin
And go to position you wanna go and read it i guess
File.OpenRead
you wanna read it backwards??
backwards, upwards, downroads all the roads and wards
what
You want to read it
me when people with big servers wont use ur plugin because of the performance
surely the players won't notice 
yeah surelyyyyyy

not planning to release it
hey question about coroutines.
If I have a list of instances like eg. players is it better to have 1 coroutine going through each or coroutine for every object in the list?
btw why did you go to Ruei**,** V3 ain't out yet?
having 1 coroutine would probably be faster, but that doesnt mean having multiple is bad, it just depends what exactly you are doing
I see
well for example you have a body object which all people have and have to evaluate multiple things
- bleeding
- effects
- should be unconsious
etc.
1 coroutine and foreach players
yeah
would there be any way to check the technicality of this eg. memory usage
The memory usage of MEC coroutine is minimal
And so is performance overhead
thats why we use them in first place
how about
More Effective Coroutines
monobehaviour my beloved
that could be used for my usecase?
idk what ur doing
i use it for afk detection

because i save info
per player
how do you do that?
you use the update in mono?
yes ?
well
i need to improve this eventually 
idk if i like that its done like that
per frame
wouldn't stopwatch be better in your usecase?
no
you're already allocating memory with the component, the stopwatch is unnecessary
and can I make monobehaviour for objects that are like not unity eg. creating my own body object
alr
what
yes
not rly
well you need a gameobject
to put monobehaviour on
you can just new GameObject() it tho
^
MEC may be simpler cuz you don't need to create a gameobject
but you have to end the coroutine at the right time (e.g. CancelWith(go) which needs a gameobject anyway)
MonoBehaviour automatically "stops" when the object is destroyed
I never used monobehaviour for this, but it sounds interesting, thank you!
np
wait
ur doing it on a player right
cuz then yeah you can just add it to the player and ur all good
yep, easy cuz if the player leaves, the component is destroyed and doesn't update anymore
ya
you can replicate this behavior by Timing.RunCoroutine(Coroutine().CancelWith(player.GameObject))
yea
Why can't I just have every small bit of somewhat useful knowledge implanted in my brain
My life would be like a million times easier
then you wouldn't be learning
This is true
ive learnt a lot from ax
and i bet ive still got more to learn with some upcoming projects
when i get round to having time...
Lately I feel like I'm finally doing some more intermediate programmer things
My first abstract class
Pretty hype
Well actually
My second :)
👍🏼
body stays even after death or when player leaves
the first class feel confusing, but next classes feel like the best thing you've ever done
Base constructor!
learn about implicit operators they are awesome
the player's gameobject gets destroyed
Sadly I haven't come across cases where I need to make implicit operators for my classes :/
that's right, creating new one instead of using player should be right choice
instead of get value
*method
what
Wdym
I want body to stay after player leaves so I create new gameobject and add it to player
implicit operators are very rare to have, but do exist in those rare cases and they will make ur job better
I use them everywhere
like in my own classes
looks better in my opinion
to not use get methods

that's gonna be insanely confusing
no casting to my class like from Item to MedkitController
I'll show some example in a min
what
I mean theoretically you could do it that way but I feel like that makes the code less readable
do you unparent it when the player leaves?
I create new gameobject and define logic there and make identifier for player or corpse
In my class I have PlayerNetworkId, ClassName, and Description
I could do an implicit operator for my PlayerNetworkId because it's the only uint I have stored but then I'd be doing something like networkIdList.Add(SodaPersonnelInstance[0]) rather than networkIdList.Add(SodaPersonnelInstance[0].PlayerNetworkId) which would get confusing when I also have something like SodaPersonnelInstances.Add(SodaPersonnelInstance[0])
I also wouldn't be able to use implicit operators for ClassName and Description because they're both strings
Which would mean I would be forced to break the convention for specific cases
Overall just a lot less clean
i don't really know how to define it but you shouldn't have implicit conversions for everything
does this make sense? probably
Enums would be better
I don't do it like this I usually make implicit cycles
enum cant replace Action
implicit cycles??
yes term created by me
my project is not letting me enter though fuck
thought for a second I might have had corrupted it that would not be nice at all
why did my whole project downgrade to C# 10 WTF
rider was gatekeeping my version for some reason, had to manually change it
you should use the implicit operator in the other implicit operators then
Can the audio played by SpeakerToy(like https://github.com/Killers0992/AudioPlayerApi) not be suppressed by other in-game sounds?
nope
@true cedar is there any way to make the max position higher on ruei
vertical position?
hsm goes all the way to the top but the max has like a 200 buffer from the top of a standard monitor
yeah
this is the max
based on the aspect ratio
anything past 1000 is the same
huh
and this is vertical position?
yeah
whats wierd is i can go below the monitor
unity moment?
we changed it so it dosent do that
oh
wll id like to know what causes it
its just standard with the plugin it seems
?
120 is the bottom of a 1920x1080 monitor
like i wanna know so i can fix it for ruei
StringBuilder sb = StringBuilderPool.Shared.Rent()
.SetIndent(Position.x)
.SetAlignment(Align)
.SetSize(Size);
OnRender(hub, sb);
sb.CloseIndent();
sb.CloseAlign();
sb.CloseSize();
return StringBuilderPool.Shared.ToStringReturn(sb);
and when creating it i use the VerticalAlign
VerticalAlign is down in all of the text
Align is Center
yea
ok
ig
120 is lowest
i prob need to scale it for the resolution then
when 0 should be
i thought i wouldnt have to but
ughhh
it fixes EVERYTHING
wdym everything
this
oh
is the down of the screen
rahhhh
Isn't it that hints are "naturally" offset by default?
i don't think so
Ugh
It's not centered
If you ShowHint("a") it won't be in the center of the screen vertically
you know how everything should be solved
with someone inpartial in all of this nw
adding the UI feature
Never™
Hey rue i saw a small problem, that elements in the UI move depending on other hints is it possible to disable that?
if its a slight adjustment thats a known bug and im working on fixing it
Like it goes up or down
and with dynamic hints like chat etc...
destroys everything else
huh
can u send the hint that causes that
i cant really help u if i dont have anything to work off of
yea i can send you a video
the hint is generated
show?
here
Holy hint flashing
public string OnInternalRender(ReferenceHub hub)
{
StringBuilder sb = StringBuilderPool.Shared.Rent()
.SetIndent(Position.x)
.SetVOffset(2, MeasurementUnit.Ems)
.SetAlignment(Align)
.SetSize(Size);
OnRender(hub, sb);
sb.CloseIndent();
sb.CloseVOffset();
sb.CloseAlign();
sb.CloseSize();
return StringBuilderPool.Shared.ToStringReturn(sb);
}
The file is what the class looks like
and the Internal is before it gets sent to RueI
everyt class has that
but this happens with everything
{PlayerName}: {Message}
and this is how its rendered
{Tip}\n{Message1}\n{Message2}\n{Message3}\n{Message4}\n{Message5}
yes
yea i've seen the messages, the only thing is that tho this one is the only that fixes 120 issue
so
try doing ```
.SetLineHeight(2, MeasurementUnit.Ems)
.AddLinebreak()
.CloseLinebreak()
let me test
like does the spacing issue still occur
why is the B in not uppercase
in "line break"
if its newline i can say linebreak
linebreak is way more valid than LineBreak
still does it
gotta love english
chatgpt and AI might be top 3 inventions
oh it does
they aren't static when they should be
if u can get me the entire hint as one string of text
yea let me do it when it sends it
have you considered using an apostrophe
and not a backtick
in the intro text or whatever
i dont think that would do much
lmao why he got a emoji in his url
she*
i fw it
its money
is the flashing a ruei issue
yes.
no its not
no other hints are in the server other than ruei
im using v3
and hsm didn't have this?
nope
hsm was fine
if u have the logs
slightly increase the duration scalar and boom
i need the debug logs so like
yea
duration is like 999999
getting you the text
bruh
wtf
i just logged
Logger.Debug($"Text: {offset + content}");
just logs one of the hints
where are you logging it
text?
are you using the AlphaEffect?
But this one is just one of the hints
-6.46576e
i think thats multiple hints
what's e
could u write to one file perhaps
here everything is displayed in the screen
?
Each one of them separated?
explodes
or all of them united?
the total combined hint into one file
ideally multiple of the total combined hints as separate files with the slight offset
i need to know whats going wrong
does this not have the chat?
gonna bash my head against a wall
im going to provide you with full
and none
Full UI (so 5/5 Chat)
Chat but without any element in chat
ugh
line 178 in ElementCombiner - try replacign
contentWriter.WriteStringNoSize("<size=0></mspace></cspace><line-height=0>.");
with
contentWriter.WriteStringNoSize("<scale=0></mspace></cspace><line-height=0>.");
and lmk if that works
yea im not removing the log
so i can send it to you in case
the other small problem is the offset
but ig thats easier to fix
where did you get the scale tag from
Nope still broken
But but i now the . is visible
its a secret tag :3
tmp doesn't list it
but it works
horizontal
without chat
if possible do u think u could try setting everything to the default size (34.7) and seeing if it works
can you just use 1em instead of magic number
i love magic numbers
public static StringBuilder Set1em(this StringBuilder builder) => builder.Append("<size=1em>");
i don't think that would fix it
it fixed jumping for me (texttoy though)
copium
yea so its a size issue
it WORKS
ugh
paws, your magic number isn't magic
size is so fucked
i thought i had a fix for it but
rahhh
and i tried looking at tmp source code but i dont fully understand wtf its doing
someone else do it for me thanks
im too stupid
where tmp source
i will try something
im testing something
i hope it works
no magic numbers anymore
if it works
im going to cry
hope my math maths
I fixed everything
from position
to everything
now it scales correctly everything
and is in the correct position
@upper vapor @true cedar
it moves a bit but thats because hints needs to be updated
/// <summary>
/// Gets the default line height for a given size.
/// </summary>
/// <param name="size">The size, in pixels.</param>
/// <returns>The default line height for that size, as a <see langword="float"/>.</returns>
internal static float GetLineHeight(float size) => (size / EmSize) * DefaultLineHeight;
this is my only change
oh wait nope it does still change position
but not like before
@upper vapor do think its fixed?
nevermind
yea
um
im trying something else
i might have found it
but idk
nope
because tmp is fucked
size tags can change the actual height of a line
adding the period at the end is supposed to fix that
tho the period is visible
.
from here the period is visible
it always annoys me when something's off(and for example not exactly in the center even a little when i want it to) so this was a lifesaver for me when i found out its possible in unity
exactly
i used snapping and manually typing stuff
this makes the precision perfect in some nicher cases
fais pas le fou avk moi rhoo0o
i spent a lot of time manually aligning primitives in my schematics
also its much more noticeable when u use glowing primitives cuz they glow when something is behind them
le epic development
@true cedar are you going to fix? because in case i will try
um
maybe
i mean i will but it might take a bit
more help would be appreciated tho
im trying
i found out that you had a TODO for the SizeStack
so im trying to see what i can do with that
it's something to do with different sizes producing an offset
yeah so
we have no idea how to fix that
i dont know
because hsm kills perf and is unusable
i didnt think that people would try and adopt a non-production-ready system lol
we thought v3 would be ready by like
2 months ago lol
so atp we're just gonna go with it
ive been really busy so its like
maybe try replacing
that with contentWriter.WriteStringNoSize("<line-height=0>\n<alpha=#00><scale=0>.");
ok yeah so we found the issue
if we get a working version ill lyk
whats the issue
?
mhm
from here it should be calculated the height
and not constant default line
so i will try to check how i can
yes thats affecting it
if you think about
@unique crane btwwww shouldnt this not be a null check
like => !Base || !GameObject;
idk
if with 34 it works fine and DefaultLineHeight is for 34 obv we should calculated for the correct
ok
because it forces a linebreak with that line height
even if the line height is technically incorrect
like thats the cause 100%
like if it computes the wrong line height, it still shouldn't create an accidental offset because it forces a linebreak with taht line height
It does make sense because its calculating each line and the lines have the problem by being different than the constant
that shouldn't be the case tho
it forces the line height
so even if the size is different
taht shouldn't matter
and thats why they shrink
gimme a sec
.
so then why it shrinks down
idk
and removign that fixes the issue
like i don't understand that
by removing it its fine (but in one line)
how tf does removing that
i have a hypothesis maybe
idk
actually nvm i realized unity also overrides == whoops
The implicit operator does a null check
i realized
read msg directly above urs

i totally gave up
same
v2 too complex for your tiny brain
v3 dont work
hsm drops tps to 10
zero this morning: "v3 is stable"
i have an idea to actually migrate
but idk
it is
zero this evening: "v3 is broken"
just fucking moving this shit
it is
yall showed flashing of hints
but i cannot fucking understand why this asshole of tmp decideds to move it
i think thats the last of the problems
like seriously
and honestly im gonna try again with v2
and try to figure it out
with auto elements
players can live with flashing hints
players cannot live with hints going to fuckin mystery land

no
let me test it rn
no guarantees
?
im at a point that i will try rewriting with v2
the only problem that i have with v2
is where to save the AutoElements / Elements
because i use an abstract
nope it didn't fix it 😭
@icy knoll because you are using RueI v2, for auto updating do i need to use AutoElements?
yeah, you then give it a timespan for how often to update
Ok but can i remove it for a specific player or add it?
or it adds in automatic
and cannot be removed
protected virtual void GiveTo(DisplayCore core)
protected virtual void RemoveFrom(DisplayCore core)
i will publicize it
and just do it myself
publicize ??!?!?!
me when
CustomAutoElement : AutoElement
{
protected override void GiveTo
}

...
public class UpdatableAutoElement : AutoElement
{
public UpdatableAutoElement(Roles roles, Func<DisplayCore, Element> creator) : base(roles, creator)
{
}
public UpdatableAutoElement(Roles roles, Element element) : base(roles, element)
{
}
public void GiveToPublic(DisplayCore core)
{
GiveTo(core);
}
public void RemoveFromPublic(DisplayCore core)
{
RemoveFrom(core);
}
}
ig this works
mfw just name them GiveTo and RemoveFrom and use base.GiveTo and base.RemoveFrom

its not that the problem i need to make them new
does this mean my idea is getting worked on? :o
looked at
might happen
might not
Lemme ask my 8ball
Let me go get my 10L copium canister
Yo does anyone know where the game is adding ammo to the player if I modify the ammo values?
I'm doing this
if (firearm.TryGetModule<MagazineModule>(out var magModule))
{
if (magazineModifier.DefaultCapacity != -1)
magModule._defaultCapacity = magazineModifier.DefaultCapacity;
magModule.MagazineInserted = magazineModifier.MagazineInserted;
magModule.AmmoStored = magazineModifier.AmmoStored + 1;
magModule.ServerResyncData();
}
which sets a Logicer's ammo to 1, but the player gets 99 ammo to their ammo storage.
@true cedar https://maro.tiananmensquare.asia/📸/q5jotpz9.png
so uh
we sorta fixed it
wtf
do you know why?
because i have NO idea
Element baseElement = isDynamic
? new DynamicElement(OnInternalRender, Position.y)
: new FixedElement(Position.y, Text);
like this is code
me either lol
StringBuilder sb = StringBuilderPool.Shared.Rent()
.SetIndent(Position.x)
.SetAlignment(Align)
.SetSize(Size);
OnRender(display.Hub, sb);
sb.CloseIndent();
sb.CloseAlign();
sb.CloseSize();
```
Rotate is never called
this is magic
Lmao
yes
try installing timers temporarily
see if timers also has the same shit
because if it does, smth is fucked on ur end
lol
Like i think its intendation?
idk
why
because they don't move from pos x
so i think its that and makes them rotate
its better like this tho
smh
idk
if we fixed it
im scared to think no
NAH
NAH
INDENTS ARE BROKEN
@icy knoll can you send me your ruei
please
so yeah apparently <indent> == <rotation>
latest?
I use the one in the repo
wtf is space
works the same
elon musk space rocket
makes a space
...
it’s what i use in timers
i don't think space works
