#plugins-dev-chat
1 messages · Page 133 of 1
death
wdym
End of life
then do 32 bytes
Joining the world
I would've alt+f4'd during world generation
lol
corrupted files
If I wanted to prioritize a WaypointToy to be used for a particular player (not all players) how would I accomplish this? Is there an event / method that's called every time the player moves? It's hard to tell where the best place to put a prefix / postfix would be considering there's also the movement tracer thing that's supposed to limit player movements (to stop cheaters) and idek how that incorporates into it all
You're going to nuke your server performance
But the FpcPositionDistributor should handle that
in theory
SL but every player model is wet
ok give me a sec
i mean it already looks that way lmao
rip
do clients have authority over which waypoint they're under or no? If so, why is priority networked, cuz I think if I faked the priority value my idea would work
No clue
I don't work for northwood and haven't checked the clientside code

new player exceptions
priority is networked because client does it too
afaik
client finds where it needs to go since yk... its seeing itself
and server checks if thats correct and ofc places it correct for everyone else
well
i dont think client tells server
do u ever see something and ur shocked it works
its more of just it SHOULD always be the same
thats me rn
well client sends a RelativePosition which contains a waypointId
yea, I felt that when I was prototyping ASS, cuz I was doing a lot more mirror shenanigans than I should 😭
I also felt it recently but I cant elaborate further for an event concerning the server I develop for
dunno if this would cause a disconnect
but the player's complaining about randomly being soft disconnected from the server
no other player is getting this
yea thats where it claims to be
i hate it i actualy hate it
server checks if its able to be there
but also places it on the waypoint itself
so then if I fake a waypoints priority to be super high, only that client will want to be on that waypoint?
Watch Untitled by rr1111 and millions of other SCP Secret Laboratory videos on Medal. Tags: #scpsecretlaboratory
probably
but server might disagree with it
rn it doesn't support two animated positions at once (i don't even know how possible that is ngl) but
i think this is a good start
@swift nexus apologies for the ping, have you seen something like this before?
It's the only thing this player has and generally around the time they get disconnected
The logs don't say anything about a disconnect though, and they're the only player to report this ever, nobody else has had this
If I were to destroy a NetworkIdentity with other NIs parented to the first, would the children get destroyed as well?
likely yes
destroying a primitive with text toys parented to it
Then destoy the primitive itself
ye
Not the netid object
but I'm expecting the text toys to be destroyed as well without me having to deal with it
NetworkServer.Destroy(yeet)
@hearty shard look
die
isnt that just the animation curve hint parameter inside a TMP tag?
well yea but like
it integrates with ruei's vertical positioning system
u can see how it doesn't disrupt the position of the other elements
that's pretty neat
I could prolly rig HSM to do the same if I ever implemented the one idea I had for hint parameters for HSM
it was very tedious to do
the parameters or the vertical positioning?
the vertical positioning
justworkplease()
https://github.com/northwood-studios/LabAPI/issues/281 guys is this suggestion good?
well
there is an option for restart on empty in the server config?
like restarting the round
idk why but sometimes in my server ppl disconnects and the round stays there with no people, and i checked that round lock is not enabled
check if ur config has end round on one player disabled
Gameplay config same as the rest
Although this is for 1 player not 0
it is
turn it on
i dont think itll fix it but yk it will fix it if only 1 person is there
Idk what else you could have other than a plugin preventing round end
it may work
last time i joined the round time was 1560:56
eve
Thats me
i added hints replicating to spectators help me test it
maybe the constructors should be internal
im pretty sure, if you just sent the same parameter each time it will remain in sync, as its network.time synced by default
r u sure
yes
how does it know which parameter to store the time for
can i see, i only skimmed over the chat
for one i need different parameters to have different offsets
since u might add elements at different times
and also u said it uses NetworkTime.time, but the issue is that
say you show a hint with a parameter and then send the hint again
its gonna reset
thats like "{0} {1}", [param1, param2] yeah?
no as in
your refereing to voffset/pos?
offsets as in time offsets
element in this context basically is just like
a hint in ruei
each element can have its own animated parameters, ruei combines all the elements into one
if you need to send a hint, and dont want the animation curve to reset, keep the offset(the one in the animation curve) the same as the last time you sent it
huh
I'd say just use Time.networkTime in offset and send the same animation curve, but have the curve generated use Time.networkTime in it
so like the curve starts with when the parameter was created, and Time.networkTime is some value x
then when you're forced to send another hint, you send the same parameter, but now Time.networkTime is x + d
and d is just how much time has passed since it was created
so in theory it should match I think
yeah that wont work
sorry NetworkTime.time, not Time.networkTime
?
dont change the offset between sends
because thats how it works
im so fucking confused
but then you'd just send a new animation curve and reset it
what offset does in the animationCurveHintParam is determine the starting time of the animation
yes i know thats the point
if you want it to always be in sync, keep the starting time the same between sends and it will just work
alright ill explain it another way
oh btw I think this is ping btw paws
the animation curve has no state, its just taking the NetworkTime.time of the client taking of the offset and samping the curve. so if you think about it, to keep it from reseting you need to send the same data and todo that you need to keep the offset the same
actually I think this is intended cast, idrk mirror tbh
rrt is ping yeah
he's not wrong, the update method does use NetworkTime.time
so in theory the curve only updates when the server and client update their times
ohhh
UpdateState is called everyframe iirc, thats what samples the curve to animate it on the client
I didn't even know how this parameter even worked so sorry if I said anything stupid
well shit now i need to get rid of all the code that saves it
I mean, wouldn't this have been obvious if you had to set offset to NetworkTime.time to even get the curve to play 😭
otherwise it would've just started really far into the curve right? NetworkTime.time is probably massive
it loops
well then wouldn't the curve have always started in a random position then?
¯_(ツ)_/¯
hope you can fix you problem or whatever now lol
yea
ig thats why they have offset
Yeah I'm using Luau it's awesome
Solves a few problems I had with the previous Lua plugin, downside is there is no Luau plugin for Unreal so I'll have to make my own
iirc it has no jit tho, right?
also heard that its embedding api sucks more
It has optional JIT support nowadays for x64 and arm64
Having said that, Luau has been updated to include an optional JIT component for x64 and arm64 platforms. This component can compile a selected set of functions, including limiting compilation to functions or modules marked explicitly by the user. While functions can be compiled at any time, automated JIT compilation decisions based on statistics/tracing are not performed. Luau JIT takes into account the type annotations present in the source code to specialize code paths and at this time, doesn’t include runtime analysis of the types/values flowing through the program.
But they pushed performance without it anyway
How so?
So far I've seen it as a lot of pros over Lua for what I'm doing
don't know much myself but have a friend that tried embedding it in his own engine but then went back to normal lua and said the embedding side of luau was a total pain
huh
Guess I'll find out
If anything I like the idea of integrating it into Unreal, sounds fun
he liked the language changes though
where
yeah
I also like the fact they get rid of dangerous functions in the Lua library by default
less work for me
not a lot but still
the one thing I'm gonna miss is modern lua having 64-bit integer support
especially for steamids heh
would make them easy to manipulate for mods
Lua implemented them recently enough, as a different type than number
php integers are really stupid btw lol
i mean it's an ID technically, not a number
it being stored as a number is just an optimization
yeah that would've been easier
for context
php has a single integer type
that's equivalent to c# nint
you can guess how much pain that was while making centrals talk with the game 
also
the apis are made by literal lunatics
they have like
3 different methods
that do the same thing
and there's 0 difference between them
remake it in rust

youre giving me 2nd year uni ptsd
Remove hsm from existence
Publicizer: 
maintaining a monopoly is too much work tho
Hii everyone
Its probably the only monopoly i support aside from the gambling & cigarettes monopoly in italy
Xd
now to spend a week finding a name for my plugin
what does the plugin do?
right i forgot to specify
Implementing Luau for Unreal
not SL related
all of my SL plugins are private for Bright's heh
Same and no
like past plugins i've done were public or done for other people
and now almost 99% of them private
ULuau is boring
UnrealU
UnLuau is too similar to Tencent's UnLua
that has no connection to Luau
LuauEngine
Luanreal
that'd be USL heh
OH yea
A plugin who got reincarnated in an unreal engine realm, who finds that can be used inside fortnite.
time to look up the word Moon in other languages until something nice pops up
do you like this title?
I don't think the engine will accept a module called A plugin who got reincarnated in an unreal engine realm, who finds that can be used inside fortnite core
People who create isekais can
so you can
The only isekai i've ever watched was a dude who got transformed into a girl and thats it
and that was probably the last one i've ever watched (if we don't count Dragon Ball) but thats a religion
What are you waffling about
here
this is the last anime i've ever watched
without counting dragon ball
why is finding a name for things so hard
just do like me find a prefix and make it descriptive
like
MeowEditor, MeowDebugger, MeowMenuSystem
Um
Ask gippity 
mods make Axwabo stub his toe
Just smash the keyboard
Kijuse
There you go a name for you
jompie
Job
fersop
thats a good name
acrylic
Caelum sounds nice
Calcium
you're fired from the naming committee
;(
let me go in my corner, im not crying ;(
I do wonder how tf you created your nickname
Roekoyy
Something like this
ewvoipediogvodshve7
and came out Axwabo?
sounds nice
A bit more complicated but it was random
Lunaris it is
Tsuki?
fits Lua(u)
wat
Moon in another language
i hate everything
makes sense
Hold
tbh it has nice stuff
its lua but safer lol
Lua Unluad
That's what it stands for
Indeed
lol
I agree
CatU, MeowLua
im good with Lunaris
You like cats, don't you
The prison?
has a nice ring to it, is unused in an Unreal context
im alergic to them
Cyna 
im blowing you up with my mind right now
Nvm that was Lunar Max
so technically i think i should hate them but i just cannot i feel bad
The forbidden animal
This guy
but cats do kill me faster
*dies of death*
If you provoke them
dog its only when they loose their fur
Tim Apple reference?
cats is almost daily
MIB reference
Malwarebyte
AdwCleaner
CCleaner
Pet the car and die
Nah its more if a cat stays near me
DeadBraincellCleaner
yea
my dad wants to rescue the kittens
but i die
if he does
he did it and kept it hidden from me for a night
and i started dying
so i knew there was a cat or something near me
dust was out of the way, im too clean
They have a forcefield
for what i understood is like their sweat or something
that provokes it
Unfortunate skill points you spawned with
like the only good thing i had in RNG was "Spawning in Italy", but still sucks ass
like idk why alot of people think italy is just what they see from pictures
if i step in a road probably that same road like 20m people died in a war or even just lived their lives
or burned a witch
Don't judge a book by its cover
trust me its not any difference
scams in rome are the same that politicians do at the EU
Pffffftttt
"Ez a projekt EU-s források felhasználásával valósult meg"
-# this project was made possible using funds from the EU
A stadium next to the prime minister house
1 million huf
Addition; 2 cars
Xddd
Cars or carriages
I still do wonder why tf he built a stadium next to his house
like if you wanna sleep?
You know, 1 mil huf for 2 cars is not that bad of a deal
Why would you do that if you get to watch football matches
Soccer
Ofc cus it was from the other 3 million they got
crazy
im not either
I'm so happy that I don't care sport events
same
i know people who do and they like attack each others
like brothers and cousins between each others
Common in all places
An escalator breaks down because there are so many people going to watch ppl kick some leather
lol
Let just say they escalated it wrongly

Bruh
They did
Maintenance was "yeah good enough, we don't need the safety mechanism"
Someone has their messenger notifications on rapid fire
"safety? That's we drink or eat?"
XDDDD
Safety sounds yummy :3
Ofc bc saf'e tea
No
this are dad jokes
💀
My mind saying things that shouldn't be send here
dms?
lol
nowadays my dms are all strange and my website still people find way to bypass
Oh i immediately have like atleast 3 reply with that
if you wanna send them in dms do
idc
i've seen alot
It flashed in my mind and just vanished
More content coming in hot!
Like, Subscribe and Peace
this is how it went
yea i said it
sadly
Awww
Idk if its intended i was taking the ReferenceHub and using playerstats killing the player with KillPlayer but that one doesn't trigger the effect
Read the docs 
Hello guys, does anyone experienced an issue with the interactable toy when it moves through the waypoint toy? I've attached an interactable to a waypoint, everything is fine, but the interactable doesnt work after it was moved with the waypoint
Probably use a gameobject inside
thats better
instead of making 1 gameobject with both
Yes, that’s what I’m using, and everything works, the waypoint toy moves correctly, and the same goes for the interactable toy. At first, before it starts moving, the interactable works fine, but once it starts moving, it doesn’t anymore.
Ig it could be an issue with interactable toys
Yep, that's why i'm here >< I asked if anyone encountered this issue or if I just made a mistake

is it an interactable with duration?
No answer crazy
Nope
how did you attach the interactable to the waypoint?
With parenting, but the interactable is moved correctly
if you parent a cube to the interactable, does it follow the waypoint correctly?
Yep
when you interact, are you inside the waypoint or outside
Inside and outside, its the same
how fast is the waypoint moving, does it still break even when moving very slowly?
The real question is:
Please attach a video 
interactable doesnt have a visualizer so its kinda hard to tell what went wrong
are you not fake syncing the position of the interactible?
Smooth is set to 100 and the movement is not too fast i would say, i will try to slow down
I don't think so, but the interactable doesn’t work even if i'll try interacting with it at its start position
I can do that.
nope
it works only before the waypoint start moving
if you log out the world position of the interactable toy does it change when its moved?
anything in the player log or local admin log?
like an error ?
nothing in the local admin log
is EXILED installed
hmm yes but i don't use it for the waypoint
sometimes EXILED can interfere due to the patches it does
are you able to try without EXILED
i can't :/
are you able to try, parenting the interactable to a primitive and moving the primitive to see if that workss
without waypoint ?
all im able to say, is that parenting to a primitive and moving works fine(because i use it) so it follows that it should work for waypoints to
hmm very weird, i just did transform.localPosition += new Vector3(0, 5, 0); and now the interactable doesn't work at the new position, and at the old position, so even if I remove waypoint, it doesn't work
very odd*
:/
can you try this without EXILED?
at this moment i can't because our project works sadly with exiled (and labapi)
exiled is a mess
How to achieve infinite jailbird (won't broke)
I tried
public override void OnPlayerProcessingJailbirdMessage(PlayerProcessingJailbirdMessageEventArgs ev)
{
if (ev.Message == JailbirdMessageType.Broken)
ev.IsAllowed = false;
}
[HarmonyPrefix]
public static bool PrefixRecheckUsage(JailbirdDeteriorationTracker __instance)
{
var jailbird = __instance._jailbird;
if (jailbird?.Owner != null && HasInfiniteJailbird(jailbird.Owner))
{
JailbirdDeteriorationTracker.ReceivedStates[jailbird.ItemSerial] = JailbirdWearState.Healthy;
NetworkWriter writer;
using (new AutosyncRpc(jailbird.ItemId, out writer))
{
writer.WriteByte((byte)0);
writer.WriteByte((byte)JailbirdWearState.Healthy);
}
return false;
}
return true;
}```
this is called when client sends a message
client doesnt control jailbird being broken
I see
we love it
Does LabApi have a ChangeAppearance method like Exiled?
no
labapi doesnt handle that rn (and it wouldnt be done the same as exiled)
exiled fake syncs, labapi wont fake sync
it's worked
or at least not the way mirror does it might do it in a more basegame route like the scale changes
thank you bro

okay, that's not exiled. i don't know why, and it's really weird, BUT when I change the parent of the toy, right after that, the toy (which is at the right position), stops work. 🤔 💀
thanks anyway for your help
so the higher the value the more movement smoothing there is
Because movement is smoother the higher it is?
isnt it already like that
oh fuck you just wrote it
no
no
so lower in basegame is higher? but labapi makes it the opposite?
it teleports
if you want it smooth asf you make it higher
or what
if you want it snappy lower
0 = teleport, 1 is smoothed but will move the fastest, 255 is the smoothest but has alot of delay
Make curve
well
ill leave it, just looked weird
someone forgot to do the todo
or maybe its in an internal pr waiting for review or merge who knows
you can pr it if you want
already doing so
doing some other additions
actually
riptide
please publicize :)
i did this for now (even though its duplicate code)
uhh, just keep in mind that adding other stuff will cause it to be delayed especially if it requires a base game MR or introduces a breaking change
yea im not doing basegame changes or breaking
just some additions
like JailbirdItem::Reset() being added or some more RoleTypeId extensions
this
does IsSpectatable = false hide that person from the server list? havent had time to check...
it was my impression it wasnt from player count / player list, but just spectatable list
looks good
also would add ability to change the damage and stuff from wrapper and without publicizng assembly
ill see if theres any extra thats missing, but that was the primary things i saw
should only be the spectator list, not the server list
but yea this require basegame changes to be possible unfortunately
yum
recursion my beloved
is it calling the new or the base
its calling itself
base is PickupPhysicsModule, but wrapper wants to return PickupStandardPhysics
ic
scp018 is required to be PickupStandardPhysics right
cuz then i can just cast to it
i could prob cast to that then yea
although
thats not what its doing
it makes a standard not 018 specific one
but it does do this too
yeah it changes physics module based on if its activated or not
so you need to have both module types, and both should be nullable
private void SetupModule()
{
this._activationTime = NetworkTime.time;
this._damagedPlayersSinceLastBounce = new HashSet<uint>();
this.PhysicsModule.DestroyModule();
this.PhysicsModule = (PickupPhysicsModule) new Scp018Physics(this, this._trail, this._radius, this._maximumVelocity, this._onBounceVelocityAddition);
}
ok so
on collission, if its NOT 018 physics
it will set itself as 018 physics
i might just leave it, cuz i think this is smth for yall not me
itd also prob be a breaking change sooo ya
cant you just do this?
public new PickupStandardPhysics? PhysicsModule => base.PhysicsModule as PickupStandardPhysics;
public Scp018Physics? Scp018PhysicsModule => base.PhysicsModule as Scp018Physics;
breaking change making it nullable
i could do another pr for it
ill do that then
doesnt seem to be
is it not?
i cant find info about it breaking existing compiled code
i would assume making something nullable would be breaking since its int -> int?
eg
i could see that
for reference types, i wouldnt expect it to break tho
can you call base or no
base doesnt have the rigidbody
it uses the physics module
which could be either PickupStandardPhysics or Scp018Physics
only the first actually has rigidbody i think
yep
maybe this
if there is away to get the velocity from Scp018Physics you could use that
this would actually only work for when first thrown
and only before it lands
so idk!
How to destroy an item that a player is holding?
Not for reference types
Nullability is only a hint for the compiler
oh okay
If the user doesn't null check then shit
good to know!
It's technically a behavioral breaking change because now you make it nullable
But it could've been null either way 
gmmmmmm
Good morning morning morning morning morning morning
Put that in Google translate and make a beat
good good morning good good good morning
Anyone know how I can get a GameObject to parent its position to an elevator?
if it's inside one
o.transform.parent = elevatorChamber.transform
How to change a player's voice channel?
for example, change someone's channel to an SCP channel
PlayerSendingVoiceMessageEvent
but I can't let a specific human hear SCP speak
this only allows the specified human's words to be heard by SCP, but does not allow SCP's words to be heard by the specified human
you need to send it to the human
WE NEED OnPlayerReceivingVoiceMessage EVENT
my bad, it does have it already

how?
player.Connection.Send(ev.Message)
tks
Np
hmm, anyone know why this wouldn't be working?
areaPrimitive = PrimitiveObjectToy.Create(null, false);
areaPrimitive.Type = PrimitiveType.Cylinder;
areaPrimitive.Parent = triggerGameObject.transform;
areaPrimitive.Position = Vector3.zero;
areaPrimitive.Scale = new Vector3(10f, 0.1f, 10f);
areaPrimitive.Flags = AdminToys.PrimitiveFlags.Visible;
areaPrimitive.Spawn();
areaPrimitive.Color = new Color(1f, 0f, 0f, 0.1f);
CL.Info($"Fire area created @ {position}, {areaPrimitive.Transform.position}, {triggerReference.transform.position}");
The trigger works just fine, whenever I try to parent the primitive to the trigger it doesn't show up
The colour works fine. If I don't have the parenting there, and just set the position to triggerGameObject.transform.position, it works fine
it just doesn't sync with it for like moving in elevators
Uuhhhh
nah
I mean I got the elevator stuff working for the trigger
it's just parenting the primitive to the trigger
Item::DropItem().Destroy()
✅
Dosent exist in the item class
Why tf can you access that
Did you publicize labapi?
Publicized
outdated labapi then or smth, because for me it exists
Hollow emoji
Crazy
grab the item you have with the serial and add it instead of creating with a specific serial
why r u doing that
Because i want duplicate Items with the same serial
uhhh
what for....
Too much to explain
@hearty shard are u ever gonna make that smart command framework
if i can make it work nicely
and can be bothered
i kinda wanna try my hand at it
go ahead
if u need inspiration or ideas theres my pr always
Or just look how ax made it
gross
helo
where !
oh my idea was like
a lot more focused on parsing arguments
so you'd be able to do
public CommandResponse Execute(
[Sender]
Player sender,
Player target,
[Length(1, 20)]
ReadOnlySpan<char> nickname;
)
Just copy some code over from C# Discord libs
¯_(ツ)_/¯
No need to reinvent the wheel
rather than taking in a giant ArraySegment<string> of arguments
Still no idea what you wish in the input or whatever that is
you can instead have it automatically parse what you want
If you grab the parsing stuff, not really?
You're just parsing text
Doesn't matter if it's in SL or a Discord message
It's generic enough that you can just get rid of the Discord entity parsing and replace it with SL related stuff
How do i send a RA-Console message to a specific player again?
Sorry i no longer on pc can't check :(
I will try this
I should just make this shit an extension already
Why does LabAPI not have it :v
PR it
!remindme 14h Add RA message send in LabApi
I will remind you of that in 14 hours (<t:1759059768:f>).
Why?
Make it send the stuff on command
why not
Because im executing lots of methods in other classes and scripts and instead of all of them having out string responses i would prefer to have an easy way to send RA messages ._.
you know i was wondering why I had a ping here
whats triggerGameObject in this
I fixed it, my triggerGameObjects position was way different from it's local position
So I just made the primitives parent the elevator game object, which Is what I should've done in the first place anyway 😛
ahh makes sense
is there any way to lock a door created in a map of MER in a plugin?
i mean a code that locks a door from MER
are you able to loop over the objects in a MER map?
MapUtils.LoadMap("puerta939");
var data = MapUtils.GetMapData("puerta939");
foreach (var kv in data.Doors)
{
var id = kv.Key;
var door = kv.Value;
Logger.Info($"Door {id}: Locked={door.IsLocked}, Open={door.IsOpen}");
door.IsLocked = true;
}
Did this for locking it but it looks buggy and i cant interact with it
whats the type of door here
ProjectMER.Features.Serializable.SerializableDoor
maybe try spawning the map then locking the doors using the labapi wrapper
You're locking serializable doors, i'm not sure if thats going to be effective
wait
let me check
yeah you arent gonna be locking any in-game doors
i have made the most important plugin ever made
im a hero i know
Trying and failing to find out if/how Testroom and/or 330 room is deletable
Ive seen posts about this posted in the past but have yet to see anyones code on how they did it
I FOUND IT
THE FIRST CHILD
I just have to kill the first child
^love sentences like these
this guys EVIL
I am willing to sacrifice any amount of children to be able to modify the generated map however i want to

most normal sl plugin dev
Can you even delete rooms
is there a way to make primitives materials emissive?
Good luck passing spans with reflection xd
my other idea was to use custom il generation to call it
would be pretty fast and still support spans
Weavers 
:3
Not worth it
also look at this
its the best plugin ever made
dafuq as in
if idle mode isnt it on it disables the method so it doesnt get called every frame
esp important since it uses a potentially locking method i think
Can we make this in base game??
have colors that exceed 1.0 (like an rgb value of 10.0, 10.0, 10.0) and an alpha slightly below 1.0, and it will reflect lots of light
almost appears to emit light
@unique crane you assigned this to yourself, has there a fix been implemented?
it's also slightly an issue how the cassie clear rpc does nothing on the server
so the client clears its queue but the server doesn't
Not merged most likely
i'm asking if the solution is already present with base-game changes
or simply the called method was changed (in labapi)
Uhhh idk
i'd guess that the first method in the screenshot should not be #ifdef'd
I remember it changing to what cassie clear cmd does
how is this only called on map gen if i access it in my plugin enable method
okay seems like typeof is not enough to call the static constructor
Does the idle mode kill all coroutines? Because i noticed that my coroutine doesnt continue after the Server has entered the idle mode. log message
no but it slows them down significantly
afaik at least
if you want a coroutine to run in real time you have to set it as that
And how do I do that?
Timing.RunCoroutine(Update(), Segment.RealtimeUpdate);
thx
this chat is dead
yea hes right here

i cant belive 2014 was 40 years ago :(
I noticed something with the serverside thing and dunno if I'M just not seeing it or actually this is a uuh moment
(and no, I won't use a framework)
If you have 3 plugins, all 3 tries to add conditional ServerSideSetting, you are essentially fucked
eve
whats ServerSideSetting refering too
check this out NOW https://discord.com/channels/330432627649544202/1421674802468360284
i already saw
damn
huh
I'm tallking about UserSettings.ServerSpecific.ServerSpecificSettingsSync
also if any plugin just overrides DefinedSettings or does SendToPlayer you are done
plugins should append instead of overriding the eniter array
should but I suspect this is not always the case
ya
Also doesn't help that you need to add everything in there, but you do not want everything to be shown, in that case it'll be very interesting to handle
Hey guys, how do you control the lights in the whole facility? When there's a power cut event, an overcharge etc?
look at how the overcharge command works
will probably add away to specify a predicate on serverSpecificSettings so that they can be supported properly across plugins
I feel like a subscribe service would be a way more structural OOP approach, like how CustomEventsHandler is done
The whole impl feels very strange
single plugin approach-esque
cause when I have a mono plugin setup, it works great, but if you have separate plugins, you are kinda screwed
especially if you do not controll all the installed plugins
not sure how that would work tbh
squbi have you seen the leaked dll
nop
"leaked"
me when a nw dev sends a concept :
it wouldn't have been dramatic
keep in mind that its not at all final, infact alot of it has changed since it was posted
yeah the SSSS system should be rewritten cuz this is just a wrapper
Basically you create a new SettingSync class, something like CustomServerSpecificSettingsSyncHandler (we java now)
There you can implement the send to player, receive data, definions etc.
Internally this would be handled as different definitons and abtracted away, meaning all events and options only sent to the respective handlers
i think serverside settings system should be made in rust
wha
i will not take questions
you will not take questions in the grave, correct
rust is the best programming language ever made
what makes it overengineered
oh yeah
This does not fix my problem at all
you are still fucked if there is a plugin that fucks all
wont be the case if it gets integrated into the LabAPI
theres likely to be base game changes along side it
You are still modifying a globally available list of options
and not isolated to the plugin itself where it cannot even think of interracting with the others
there's a lot of things
3 generic parameters is a lot 
dunno about consumer experience, the examples you showed are simple
i think the system could be simplified though, given that base-game changes are made
This is a good direction, don't get me wrong, but I still think a complete isloation could be made
if theres a plugin that crashes the server instantly that fucks up all other plugins
How to not get my point, thanks
btw im sharing it just because it was mentioned, it wasnt going to fix your issue
might as well Runtime.exec("rm", ["-rf"]) at that point
but the issue your mentioning, is something that im working on as apart of that project. but the details of that are to come later
Yeah I know, and I'M grateful that there is an active effort ongoing on making the DevEX much better
I assume there is no ETA or other timeframe where these improvements will be live
the generic versions are purely for implementation classes. which is why they are in Internal folders. i would like to hide them completely(without expanding the details into each derived class
) but couldnt figure out a way
yeah that's fair
Will this full abstract away the current way of implementation, so you are forced to use this?
the goal was to make an API that handled the most common cases with the simplest code, stuff that was less common could be abit more complex, but it had to be possible i couldnt cut features out otherwise you would be forced to use the base game system which would lock you out completely from the higher level APIs(since the higher level API completely abtracted away the lower one)
That is good to hear, as it would lock out other plugins as well from the higher API 
you can use the base game system still, so your not forced to use it. so you can still use other SSSS systems(or your own one) if you choose so
But then my original problem still exists 
base game changes are required to fix that
btw in the ComposableSerttings system you can still delete other plugins settings, its just harder by default todo it
I mean you intentionally have to go out of your way as I can see, which goes into the malicious territory
But still ways better than the current SSSS as I literally deleted my own keybinds
DefinedSettings ??= []
DefinedSettings = [..DefinedSettings, othersetting]
SendToPlayer 
oh well
All plugins require conditional SendToPlayer
so need to do the pro gamer move and create the 17th competitive standard
yea
with every update c# becomes more and more like javascript
okay rust user
wouldnt say malicious since there could be a genuine reason todo such a thing. e.g. if you needed to hide all other plugin settings(temporarily or permanently). which is why i dont try to restrict the APIs reach, and allow this kind of stuff
The thing is, how do you restore it then?
I see the vision of making like a paging system, but if there are two plugins that does this, it would go up in flames no?
if you deleted it, i doubt it's recoverable. you know for next time ig?
you can store the instances in your plugin, then returning them back later will work fine
it really is that simple
-# what happens if another plugin modifies the settings while you have them hidden
your refering to two different paging system(in that case base game changes are required)
Yeah, but you have 3 plugins that do this, every plugin can store the appropriate config I guess, but hmmm
depends on the modification, if its inside they pages, it will work. but if they are modifuing the root settings through ServerSettings then it will be added to the wrong place
i thought about it, and maybe supporting a override page in the ServerSettings would be a better way to go about it
as then Settings added to the root through ServerSettings will go to the correct place even if a plugin is currently overriding the settings
Has anyone encountered the issue where using ev.IsAllowed = false; when OnPlayerPickingUpItem is triggered causes the item to never be pickable by anyone?
there isn't even a progress bar appearing when trying to pick it up
do you have code to show for that?
afaik its locked
youll have to manually unlock it (its a bug)
a game bug or an api bug?
ah i could probably pr a fix for that rq
you cant
its a api bug
but the api call is in the game
but you need to use the api to cause it
oh, yeah, that's what i meant
a terrible bug
api as in on the api itself or not
its 1 line fix
very cool
unfortunate gg go next
be quiet
ev.Pickup.IsLocked = false
shhh
This is pretty cool!
I feel like a lot of these interfaces were necessary and you guys really limited yourselves by working with base game without trying rewrite it or anything. I feel like this was a lot of wasted potential because you guys are really holding yourselves down with all the requirements you guys probably gave yourselves (using base game and no harmony)
The generics are cool and all, but it makes everything impossible to read at a glance, an average dev shouldn't have to spend 5 minutes looking at all the generics in a class to understand how something works. And I'm also worried about performance with high player count and high settings count.
I really appreciate you guys implementing a lot of the features I made for ASS (I don't know if you guys even ever took a look at it though 😅 ) like global keybinds and grouping settings (although your guys way is really... unique?) and then visibility for each setting. It would've been nice if you guys implemented some of the other things I had (IgnoreNextResponse in the setting base class and the minimization logic I had for sending settings) but I can see why you probably didn't want to add anything like that.
I'm kinda sad you guys grouped the server-only settings into the setting models, I feel like that's gonna confuse a lot of people, but once again I can see why you didn't add it (you had to follow base game)
There's a lot of really cool features in this, it just might be too much for typical LabAPI usage, and then it's also not even fully customizable in some situations (See Keycard Creator in ASS.Example, which I dont think is possible in a reasonable way with this addition)
I feel like you guys really hit a niche really well, but just kind of forgot about everything else. 10/10 code, you guys did a great! job, but I'll never use it because my usages of SSS are typically more complex, and this is like a hydrogen bomb vs its intended use case
I'd say the best use case for this is replacing SecretAPI 
PackageReference Include="Northwood.LabAPI" Version="1.1.3"
-# github release has not been made
-# i've noticed
i somehow managed to freeze the server with a very basic plugin 🙏
troll
while (true) ;



