#plugins-dev-chat
1 messages ยท Page 62 of 1
Surface GONE
i mean i don't wanna teleport people to the tower
are you actually not able to define your own?
for just a split second
i'm not sure if there's a way really
other than staying in the bounds of surface
bru
probably not
Effect Sky or else FogControl
c# did it in such a stupid fucking way
shame
do the span alternate lookups consider the IEqualityomparer?
like if i have it ignore case
i mean also prob not
rather than having a like TryGetValueUsing<T>(T value) where T : IAlternateLookup<string>, allows ref struct
ig hashing is a problem but like
idk
im of the opinion they need to fire the entire net standard library design team
bruh
the awful awful decisions they've made to preserve "backwards compatibility "
like
IList<T> doesn't inherit from IReadOnlyList<T>
and the fact that IReadOnlyList is even called that
and the fact that ReadOnlyCollection inherits from IList
and the fact that the non generic collections still exist for some god awful reason
real
turns out to fix my issue with no custom loader... just make a dependency only with that class in :3
put it in dependencies folder
and it wont run the abstract plugin
just inherit that instead
simple solution for now lol

Is there a way to change a zombie's spawnpoint without a patch?
PlayerSpawning doesn't trigger
iirc zombies dont actually have a spawnpoint
they just spawn at the current location of the referencehub
(yes when you die you still have a location, and it uses that)
I know my location is persistent
you can use ChangedRole
and check for spawnpoint flag
and then set ev.Player.Position
Yeah, I put it into ChangedRole and it works. It's just that I have a generic PlayerSpawning handler that handles CustomSCP spawnpoints, but zombies aren't included ๐ญ
hello, how to disable auto spawn ntf/ci?
subscribe to the spawn events and cancel them
also, for you harmony people, how do I prefix a constructor? Like I've got the HarmonyPatch attribute setup... but idk how to set the values I want in the prefix, is __instance available?
nevermind i just transpiled instead, was like 10x harder but whatever ๐ญ
hii chat
hi cat
b
I dont think so
FIREWALL AND PORT
You just have to be in that area
SL has UnPnP
In order for other players to connect to your server, you must open a specific port on your router....
What is this?
no i mean the website
i know what port forwarding is
never seen it before
๐No Accesss
ServerHost Suggestions
i suggest learning how to operate a server

ok bro i know how
r u sur
yes im sure
before sl i did alot of other stuff for games etc... so i know pretty well how this stuff works
just too boring for me
i prefer doing code
can we just have skybox as a separate effect
would be poggies
git push origin davidwishlist
lmao so RTFM?
nah sometimes you need to get creative
Doom Dark Ages
the new one
im rn in chapter 12/13 i forgot
you know its sooo fun to tear up demons apart
after a long day of coding
real
skybox effect would be so fire
does anyone know how to make the yaml parser not parse everything without me making my own wrapper classes? like im putting the class in and yaml.net just decided to parse the whole thing... which is slightly annoying...
wdym exactly?
like
look at all the unused things there
i wanna know if it's possible to not parse those ๐ญ
[YamlIgnore]
me when i don't have access to the class
huhhhhh
it's part of a dependency
then ur cooked
๐ญ
okie so then if i make my own wrapper class, how do i make stuff only show if the default has that option set?
or is that not possible...
it's in YamlDotNet
i know
but the class that i have as the type i dont have access to
it's not mine
it's a dependency
OHHHHH
right
in the serializer, is there an option to not write default values
?
the serializerbuilder
yamldotnet
well
ill take a look
yes
you can do
SerializerBuilder::ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitDefaults)
i get that there may be issues with it in some places... but ๐ญ
maybe patch to add my own custom serializer? ๐ญ
wait i cant because the only place that id be able to get plugin information from is in a generic class... blegh
wait just looked into it more... emitting defaults should be default... wtf ๐ญ
huhhh
Get this man a beer

Get this man a 78% alcohol
Something 190-proof bro
What
190-proof
Like Everclear
It's 95% alcohol
Well by volume it is
Proof is just 2x ABV but it's one of the more colloquial terms used when talking about the alcohol
pov death
So like
I thought only room.list had stale references
Apparently ragdoll does too
Heart breaking
patch Room.List to ignore rooms that have IsDestroyed = true
Like i said its ragdolls too
And probably lockers
patch that too
And probably everything
SL modding in a nutshell
Nw moment
or at least i remember an error about it but i havent been checking logs lately
Snake spams exceptions if someone plays it for too long
I love useless gimmicks spamming logs
Lmao

ik
Honestly, with how prevalent round-stalling was and these kinds of issues, I straight up disabled snake on our server lmao
If you try to play snake it drops your keycard on the floor
Lmao real we complaints but ignored them
And people got over it
I mean bro it's not that deep it's snake
ยฏ_(ใ)_/ยฏ
Community voted to keep it, we're not removing it
I'm mostly annoyed at NW for having a gimmick like this affect servers, come on

That's insane to me
eh
current map layouts suck for spawn waves
We have to spawn most of them in the facility or they get stuck at surface with instant death if they go down
you spawn people in the facility now?
Mini waves spawn in the facility, regular waves have 40% of them spawn in the facility
We have to or otherwise it becomes a game of camp the elevators that can sometimes generate right next to each other
Does help a bit
Worked on a huge update heh
thats
Had fun rebalancing every SCP
like what
Needed a few more patches afterwards but it's a lot better than it was
096/106/939 were useless
Well
106 was either ass on low pop, or ungodly OP on high pop
so he got a full remake
what does he do now
this isnt mayhem?
oh yeah i'm talking Mayhem only
096 has the funny change
also nerfed 173's hume shield
500 HS reduction base
so 250 -> 1000 HS depending on its current health amount
and the HS amount only increases when 173's health starts going lower than base game HP
it ignores the real max hp since that can be 10k HP
Puppet got heavy nerfs because it was just bs OP
Was hard to get the community's approval for that one, but surprisingly they ended up voting mostly in favour
this one was the best one I could come up with
will deleting snake.dll from game files brick the server or just disable snake?
wild its hardcoded like that.
It's an assembly reference if you delete it the server won't start
But yeah should've at least given us a way to easily disable it
epic...
can u like
slowly increase its height as it rages
lmfao u can do that?
Yup
Just lerp it to the regular height on tick while enraging
Over the time it takes to enrage
oh ik that part
With some additional checks to make sure 096 doesn't grow into geometry
oh
goddamn
it
every single fun thing was added after i stopped doing fun plugin stuff
It's stupidly broken
Had to patch a lot to get it stable without killing the server
But it works ig
yea but still
Lol that's fun
I just using VisionInformation to trigger shy guy rage for when you see any part of his body
hi plugin devs!!!
wow trespassing
No NW staff is welcome here smh my head
womp
That's also a good idea
lumi is an exception
I suppose
):
Ok so
When 3114, 127 events
CASSIE, call the Ghostbusters
mobile task force unit mu 13
@upper vapor how is that plugin loader pr coming along :3
Lost in Action
i haven't committed it yet
Check for abstract plugin class too
i've done that already
Do you have unloading?
unloading what
Unloading the plugins on demand
unloading = disabling
you can't unload assemblies
No
you can unload an entire AppDomain but not a single assembly
Disable is absolutely not equal to unloading
Hmmmm
how i can get ammo limits? by enumerable
No, you create a new appdomain
so you can unload the assembly on demand
I mean you can, can't you
since everything is bootstrapped via events
and instantiated
you need to load the whole game another time into the new appdomain
and then communicate with it somehow from the "main" appdomain
you lose direct access to the game
Hmm I guess Harmony patches would break cause it would trys to patch the ones in the AppDomain
yes
but the event ones would not break
I suspect all Static class also break cause would reference the one in the AppDomain
everything would break
there are completely new assemblies loaded
the main appdomain calls an event, but that doesn't magically get invoked in a separate domain
Server.AmmoLimits
you can just check how it works
me need enumerable list
it?
what
have you tried using a decompiler
Oh I completely forgot that, ye AppDomain with that just sucks i guess

Have you tried using your brain 
i haven't
Can we ban this user
Who r u
pls
early bird catches the worm

skibidi skibidi skibidi
you should buy the all new Owร profile decoration
best song
/wran @hearty shard she said the sb word
you can buy me them
thanks
F no more wran
i'm broke
isn't it !wran
!wran
!wran @restive turret bitch
Yes it is

Syntax: !wran <member_0> <text_final>
Created via the CustomCom cog. See !customcom for more details.
member_0
!wran @hearty shard she said the sbd word
!wran sjelm bad
Member "sjelm" not found.
!wran obevelyn said the s word
Mispelling
why is there an extra v
Oh cassie is broken
obv
!wran ovbevelyn said the s brainrot word
Member "ovbevelyn" not found.
obviously evelyn


The joke command is making a fool out of you
!wran axwabo smelly
@hearty shard has wranned axwabo Reason: smelly
!wran obvevelyn said the s rot word
There you go.
there is no way
!!!
!wran obvevelyn said the s rot word
@restive turret has wranned obvevelyn Reason: said the s rot word


!wran 590224743542554630 Skibid
@random scaffold has wranned theverifieddickhead Reason: Skibid
I think ur bad
no need to think
Ok bruh you are on your own
?
read this message

average everage activity
guh
just classic eve

Ofc it's from that kind of server
!wran 1180466630191501363 Strange emojies
@random scaffold has wranned obvevelyn Reason: Strange emojies
i dont even know what servers im in
i see emoji i click i join
half my servers are emoji servers
please help me how can I check the role of a player on a spectator using if??
whar
check for RoleTypeId.Spectator
You have the references?
Guessing they haven't included them
You got the first part right in the previous
Also import RoleTypeId
Also please learn C# first, or your journey will be hard ๐
ev.Player.IsDead also works (but counts filmmaker and Overwatch)
but yeah reference the game assemblies
what specific reference game assemblies do I need?
Assembly-CSharp
added but the error did not disappear
good point
Can we pin this?
?
fix the destroyed being in lists!!
Make a coroutine that remove from that
Skill issue
thanks
Does anyone know how to check if the person is dying because they are leaving?
idk if there is like a damage handler for that specifically
check the damage handler text
or you can patch it
and create custom damage handler
which dmg handler tho? normal one? or Universal and check the translation?
i dont see a translation or anything
i mean check the actual string text of the damage handler
Not translation id
ServerLogsText or smth
Dunno which handler
And idek if it works
then begin logging
so now ima have to log the event to grab it smh
changingrole to destroyed
im using the dying event
unless the dmg handler tells me what role their changing to
oof
Spectator 
me when no :3
ChangingRole has no damage handler

There's a death reason
but there's a type destroyed that actually tells you if someone left
im using dying as i need the players role before they died, and the event doesn't give a new role or anything
Gives you the DamangeHandler?
ye ofc
CustomNetworkManager::OnServerDisconnect translation is "Unknown cause of death." checked by the server
so check for that
in the standard dmg handler or?
UniversalDamageHandler
that might be other causes of death like admin, not sure if you wanna count that
well, TranslationsById doesn't contain that translation
check for ev.DamageHandler.DeathScreenText.Contains(DeathTranslations.Unknown.DeathscreenTranslation)
i think this is actually the best way to do it
okie
i guess
set a bool saying the player is leaving
you could take that apporch
unset it in the dying event
rather not patch if i dont have to
why ๐ญ
how do we not have a way to check if the player died due to leaving
i guess you can check for the Unknown translation id
Me when over 500 issues on gitlab
probably not the most reliable

eh i have my own converter method that changes dmg handlers into readable text for logging stuff... im just gunna check during the suicide check if the reason is unknown and skip
easiest way really ๐ญ
Moni
huhhhh
smh
I dont do it for money tbh xd
paid 3 cents for each solution you find
like i think at max for finding labapi solution you aren't getting paid that much
idk but i don't think the pay is like super crazy
thinking how nw small is
There a way to set the amount of ammo in a gun?
Firearm MagazineModule
depending on the firearm
Possible to modify the max ammount?
Probably not be shown in client side
Its synced with the client
Is there a better way sto see if the object that a raycast hit is a specific object?
Is it possible to modify the shown name of players on radio audio?
In my head this sounds possible because the audio is probably routed through the server, and the server tells the clients who sent it, which includes their name. But no idea if its this straightforward
Check how radio works i guess.
Maybe client side one isnt shown for you so idk
@unique crane i know sorry for the lovely ping but has anyone touched primitives and colors because im now seeing that unsafe colors so like over the 1 are getting sanitized
nop

im pretty sure the server tells the clients the net ID of the player who sent it
meaning the client solves for everything else itself
only way to do that is to send a fake nickname var to everyone with a radio equipped
Voicechat communications use the same system, they're just separated by channels
Different channels have different properties on the client, but a majority of the leg-work is handled client-side
So stuff like modifying names would require temporarily spoofing the name of the player sending the message for the player receiving the message
Which would likely also incur unintended side effects
At least all that is afaik
What's your ultimate goal?
Make radios be tied to players
Someone steals their radio -> Their name shows up when speaking on it
you could modify the VoiceMessage to have the hub of the original
or, if they're no longer online, spawn a dummy
ohhhh left players would cause issues? darn
or just perm disable the radio
okay you can cancel the sending voice event if they're using a radio, replace the hub on the voicemessage and send it
That's smart
no ref
publicize labapi 
that's not the issue
the field should be a ref field
rn it makes a copy of the message in the constructor
You could just attach to PlayerSending, cancel it, and then send your own
Instead of going into receiving

I already do this shit to do ScpProxChat 
it looks to the developer that they're getting access to the real message but it's not actually a reference to the original

all sounds complicated
well it cant be a ref field cause its not a ref struct
though it is odd they made it take ref in the parameter
rly ?
you have to specify the struct definition itself ?
i mean the class isnt a ref struct
It'll just be something like
public override void OnPlayerSendingVoiceMessage(SendingMessageArgs ev)
{
if (ev.Message.Channel != VoiceChatChannel.Radio) return;
ev.IsAllowed = false;
ev.Message.Hub = ... //(dummy or player reference hub);
foreach(Player player in Player.GetAll(PlayerSearchFlags.AuthenticatedPlayers))
{
// Send message
}
}```
The send message would require a little parsing that does the same shit radios do
use that on Sending not receiving 
๐คซ didn't happen
gj !!!
Fake news
I had just talked about this too ๐ญ
In my defense I'm actively brushing my teeth while writing this getting ready to go to my dentist apt
guh?!!!!?!!?!
eve doesnt brush her teeth
Average SL dev
how old r u
I'm a minor
That's crazy
"How old are you"
responses with a word
Can I call you unc
if ur below the age of 14
Shit
i think im a boomer to all of u basically
Man it's so tough out here being 17 I can't even make fun of people for being old anymore 
I'll just go to the local senior center and laugh at the elders to feel better about myself
if 17 is old to u
I can't make fun of @hearty shard 
why can't you ref a not ref struct
what
.
the class that the field is in is not a ref struct
yes and you can only have them in ref structs
HAHA
UR OLD
are you fr rn
otherwise
I'll kill you
why does everyone in this chat have delusions about how C#, SL or Unity works
Because idk how any of it works
...
yea
i mean it makes sense
if you could store something at a ref field
I'm just making this shit up
reference mscorlib.dll
one sec
should give u more
NAH
okay mb
but then why did NW make it seem like you have a reference to the original struct
public class X {
public ref int Y;
}
if you do
int y = 5;
X.Y = y:
and X lives longer than Y, suddenly X.Y now points to invalid data
aka segfault time !
event args really should be ref structs but
0 alloc labapi
Okay yo
Question before I leave in like 10 minutes
Is it possible to record a player's perspective and save it to a file
As if you were spectating them
nuh uh . never happening
technically yea afaik practically no not really
Damn 
How would one
Go about such a feat
Theoretically
you can record it and replay it on a dummy
such a feet
aka like
track timestamps of a round into an event of what the player did
and then simulate it
it wont be pretty
ZLabApi
Yeah that was my only thought on what I could do
me when reinventing the wheel the 3rd time
youll have to make it in a way ping wont affect it as much
-# noone will make an open-source solution
u do it
I have ideas to implement but the only way to safeguard it is by recording player actions
then i steal it like im the british discovering a new place
imma make it AGPL

I'll just use AI 
Lmao
That'll solve every problem ever
Actually peak
let's see how much i can break things
i don't understand why tf everything needs to inherit from EventArgs
i can kind of understand event arg inheritance
since it can make it easier to work with like
because c# using that for most places
how many times has a similar solution been made?
certainly couldnt be that much
yours, Cyn's
what solution
MINE IS OPEN SOURCE
rahhh
oh
ah
but mine is not likely as advanced or usable as cyn's
i found a good way to record audio, but no way to read it...
and as for selecting items
my dummies can do it, but they cant use it properly, and when they select guns, i couldnt find a way to save and apply attachments
here

cyn's will be closed source
i might be putting a bit much on my plate but i do want to at least see this project through
although the demos have been a little bit player-centric as of late.
wdym
ohhhhh
right cuz it relies on player actions
i wanna experiment with replaying network messages but those would probably go uh
not very well
also i need to work on other stuff
but this demo system is pretty good for smaller replays
fairly easy to implement new features
can you skip ahead/back in the replay?
like i havent added any big map or server events like cassie or warhead
the one i sent?
ye
yeah i tried to make it modular and add potential for modding
but i realized that would mess up the encryption, but i still left it the way it was
one weird bug i encountered was that experiencing recoil caused the dummies to look straight up sometimes
Wat
Why!
cuz i'm using it
and i can't release the plugin if your SSSS wrappers isn't stable
which functionality r u using
yeye

i onlyhave 2 settings lmao
have you finalized the new wrapper model?
if yea i might do a prerelease
It's what Unreal Engine does but I doubt you can do it with plugins and patching
That requires so much more integration than we can do
Considering the amount of man hours I've been putting into it and how complex it is, I'm not sad about that heh
- it'll integrate with our backend anyway so it won't be suited for other servers
you can put a lot of effort into something and still make it open source lol
thats what im doing with ruei
(well I'm also not permitted heh)
yeah
All of Bright's in house stuff is private
its a server project
public source is good imo
i'll probably make some projects like that
no issues accepted, only PRs
ppl can use your code but are not allowed to complain
Looking at your demo stuff you've done it a lot different than what i'm doing
well ik
I also didn't go with a memory stream at all
Turns out it's useless
FileStream will buffer data and flush to the file when the buffer is filled
So there's no point in going with just a memory stream afaik
I see voice packets being saved 
on the topic, does anyone know how to read wav files (or write ogg files?)
NAudio
Are you gonna be recording voice

Because if so, don't
Since we unfortunately don't have clientside mods, let alone custom UI, you can't ask for explicit consent
SSSS
youll have to make people agree with written consent practically
Yeah that doesn't pass
๐ญ
You can't do popups
what qualifies then
Not a lawyer but at the very least I'd have a privacy notice popup with a button you explicitely have to press ok
Which you can't do and probably never will be able to do
There shouldnt be more breaking changes to settings
you have the hold thingy for buttons or whatever
If thats ur question
Eh I'm not gonna start playing with fire
The fact kids even play SL makes it a thousand times worse if you do it wrong
make them solve some captcha in SSSS 
true
the lack of clientside mods suck
but oh well
The next SCP game better have some

@teal junco no delta snapshots?
You record full snapshots every frame?
side effect: randomaccess
hmmm
More like big demo file sizes for no reason
My system's full on delta states

Demo starts with recording the initial state of the world and then you just apply delta state over delta state
Saves space, and makes it super easy to fast forward to a position in the demo
You just grab the initial state and apply deltas until you reach the desired time
then you apply that new compiled state to the world
Fast
wdym
like
yoou'd skip 1 minute ahead in the replay
and you'd get all the network messages in order
at once
With that kind of setup, and mine, you always have to start at the initial state of the demo and apply the delta states/network packets
You can't go back because you can't undo packets
if you wanna go back, you restart the demo and then fast forward to the time you want
ryeah
Mine's probably the best way to do it for SL? With what control we have at least
Not to stroke my ego but damn there was a lot of thought put into it
It even supports versioning, I can change the demo file format and you'd still be able to replay older demos
The only thing that would break that is NW doing something that affects map gen
In that scenario all demos of older SL versions would break
because you'd see players go through walls and all heh
i never got around to adding that, but it is a planned feature
i just never got hit in the face with it because i dont have a consistent method of causing tps spikes
what is a delta state
like a diff
oh okay
The term delta refers to the difference between two values or states
a = ฮv/ฮt
so it only records the difference between the last position and the new position, just for example?
yes
the one i have saves only when there is a difference but otherwise saves the full position
one feature i suppose i will miss out on is being able to displace the actors
ยฏ_(ใ)_/ยฏ
I keep the previous demo frame available
So when recording a delta state it can check the previous one and ignore anything that's similar
can you give an example for how it would handle player movement
I'd just check if the position changed
I'll have a bitfield with flags for what the delta contains for the player
position, rotation, role, probably held item, health, etc
Well, will be once I get to that
respect
I'm barely done with the boilerplate for demo files but I'm finally getting started on recording events
didnt get to read all this, interesting info
im not a very high-level coder so i barely really planned anything out beyond the basic ideas
your solution is really good, though
i like the bitfield
You'll get there
I'm used to keeping things as lightweight as possible bandwidth wise and the same applies to this
oh yea youre like a networking guy
this kind of stuff does vaguely remind me of networking and stuff
im always looking to improve!
aye
I'll also compress the demo files
when writing them to the permanent file
since while recording they're written to a temporary file first
then a header is encoded into the permanent file, followed by the data in the temporary file
Although we'll see if it's required
if you ever get a chance i would like to know how big a demo file is uncompressed (in practice)

There's no way broadly storing player activity is gonna be okay under European guidelines
As a server though I know a lot of them store small clips of people who break the rules so they have evidence of wrongdoing
I doubt you'll get in trouble for that ยฏ_(ใ)_/ยฏ
automate it though and that's a whole new thing
Exactly
I mean afaik most regulations apply to storing "identifying" data as in things like IP addresses and otherwise without getting informed consent so my general understanding is small clips of things like people breaking the rules shouldn't flag
Yeah I just mean like so long as you're not storing sensitive data or storing data without proper cause you should be fine
Storing mass player data without cause isn't fine but storing small amounts of select data for the purpose of evidence against offending players likely wouldn't break any regulations
you can do popups, not direct interactable but i dont think there is a super strict legal definition of popup that excludes a hint that covers your screen and prompts you to type a command to accept or deny
and it doesnt go away and cripples your player character until you make a choice
Yeah I wouldn't wanna make players leave the server because of it either
hey, is there really not an event for arming/disarming the warhead (toggling the switch in the facility)?
doing manual polling on Warhead.LeverStatus is ugly...
Did you guys know that Pocket Dimension kills give a null ev.Attacker and don't give 106 as the attacker?
it feels obvious in retrospect but that makes my life more difficult
I'll have to figure out a good way to work around that
Check the death translation id
Well yeah I know how to check for a pocket dimension kill
I already check for things like Tesla and Pit Death using translation ID
It's moreso just that I have things like Kill Trackers, Damage Trackers, and Custom Items that use ev.Attacker broadly, and it would be a lot better if ev.Attacker wasn't null for pocket dimension deaths
Patch it in 
That's what I'm thinking I'll do
I'll have to patch functions DyingEvent calls and HurtingEvent calls
we copy the results back on the base game side so changes arnt lost
ref structs would be nice, not sure if you can use them with .net framework?
or atleast you wont be able to use interfaces with them
By-ref-like generics aren't supported, so you can't use ref structs with generics, only regular ones
it can be pretty useful, e.g.
void CancelForJuggernaut<T>(T ev) where T : IPlayerEvent, ICancelableEvent
{
if(juggernaunts.Contains(ev.Player.UserId))
ev.IsAllowed = false;
}
you can use that for any event you want to cancel with that player
fuck

Yeah C# 13 lets you use interfaces on ref structs
i see
This is what happens if you only recompile labapi with struct events
Why not just take in a Player or a string directly in this scenario though
oh wait
I see
you can do that too, its just that its abit cleaner
Multi member access
Nah I get what's being done here, although I feel like wrapping that in a method is a little useless
But it's neat
depends how many times you use it
What if you wanna cancel 10 events for the juggernaut
Yep
if you need todo it with like 10 events its worth
When do you ever get 10 events
i
will get coffee
my brain is lagging behind
ignore my rambling
like all denying interaction ones
yeeee makes sense
i'm banging my head at work trying to get dedicated servers to run through SDR and they. just. don't. want. to
everything's green
shows up on Steam's master server
SDR says OK
but can't connect
Aw






