#plugins-dev-chat

1 messages ยท Page 62 of 1

upper vapor
#

oh i rember, i didn't make a PR last time cuz the changes hadn't been merged

#

stay on surface Smart

celest thorn
upper vapor
#

paws

#

alternate lookups

#

you know them

celest thorn
#

i mean i don't wanna teleport people to the tower

upper vapor
#

are you actually not able to define your own?

celest thorn
#

for just a split second

upper vapor
celest thorn
#

i just hope there is

#

the infinite black void

#

looks shit

upper vapor
#

new effect

#

Sky

celest thorn
#

or else i make a skybox with a ball

#

lol

#

quad ball

upper vapor
celest thorn
#

i guess i will wait for david

#

else new suggestion

true cedar
celest thorn
#

Effect Sky or else FogControl

true cedar
#

c# did it in such a stupid fucking way

upper vapor
#

do the span alternate lookups consider the IEqualityomparer?

#

like if i have it ignore case

true cedar
#

i mean also prob not

true cedar
upper vapor
#

oh so you need to define your alternate equality comparer

#

yay

#

so great

true cedar
#

idk

#

im of the opinion they need to fire the entire net standard library design team

upper vapor
#

bruh

true cedar
#

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

icy knoll
#

turns out to fix my issue with no custom loader... just make a dependency only with that class in :3

upper vapor
#

what

#

oh

#

OHHHHHH

#

okay

icy knoll
#

put it in dependencies folder

#

and it wont run the abstract plugin

#

just inherit that instead

#

simple solution for now lol

upper vapor
tulip kiln
#

Is there a way to change a zombie's spawnpoint without a patch?

#

PlayerSpawning doesn't trigger

harsh thorn
#

they just spawn at the current location of the referencehub

#

(yes when you die you still have a location, and it uses that)

tulip kiln
#

I know my location is persistent

hearty shard
#

you can use ChangedRole

#

and check for spawnpoint flag

#

and then set ev.Player.Position

tulip kiln
#

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 ๐Ÿ˜ญ

hard flume
#

hello, how to disable auto spawn ntf/ci?

icy knoll
#

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?

icy knoll
#

nevermind i just transpiled instead, was like 10x harder but whatever ๐Ÿ˜ญ

carmine prawn
celest thorn
#

hii chat

restive turret
#

hi cat

still thistle
#

a

#

Bruh

carmine prawn
#

b

still thistle
#

My server

#

Get error

#

Not verifying

#

Because

unique crane
#

I dont think so

still thistle
unique crane
#

You just have to be in that area

celest thorn
#

new suggestion

#

hoping this will be added Trolley

upper vapor
celest thorn
upper vapor
upper vapor
#

info about port forwarding

#

-# how to google it

celest thorn
#

i know what port forwarding is

upper vapor
#

the SL wiki shrug

#

tech wiki

celest thorn
#

never seen it before

celest thorn
restive turret
#

i suggest learning how to operate a server

celest thorn
restive turret
celest thorn
restive turret
#

r u sur

celest thorn
#

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

upper vapor
#

would be poggies

#

git push origin davidwishlist

celest thorn
#

@upper vapor join vc

#

so we wait for hubert again

#

lol

#

IM KIDDING

#

lol

royal mica
celest thorn
restive turret
#

@celest thorn what u playin

#

Doom TDA?

celest thorn
#

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

restive turret
#

real

teal junco
icy knoll
#

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...

upper vapor
#

wdym exactly?

icy knoll
#

like

#

look at all the unused things there

#

i wanna know if it's possible to not parse those ๐Ÿ˜ญ

upper vapor
#

[YamlIgnore]

icy knoll
#

me when i don't have access to the class

upper vapor
#

huhhhhh

icy knoll
#

it's part of a dependency

hearty shard
#

then ur cooked

icy knoll
#

๐Ÿ˜ญ

#

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...

upper vapor
icy knoll
#

but the class that i have as the type i dont have access to

#

it's not mine

#

it's a dependency

upper vapor
#

OHHHHH

#

right

#

in the serializer, is there an option to not write default values

#

?

#

the serializerbuilder

icy knoll
upper vapor
#

yamldotnet

icy knoll
#

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 ๐Ÿ˜ญ

grand flower
#

another day of SL modding yay

#

i need coffee for this

icy knoll
#

yup

#

but ig smth in the parser removes that

slate flume
grand flower
#

Nah I'm good, I rarely drink and beer doesn't do me well

upper vapor
restive turret
slate flume
restive turret
#

What

slate flume
#

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

upper vapor
hearty shard
#

So like

#

I thought only room.list had stale references

#

Apparently ragdoll does too

#

Heart breaking

grand flower
#

patch Room.List to ignore rooms that have IsDestroyed = true

hearty shard
#

And probably lockers

grand flower
#

patch that too

hearty shard
#

And probably everything

grand flower
#

SL modding in a nutshell

hearty shard
#

Nw moment

hearty shard
grand flower
#

Snake spams exceptions if someone plays it for too long

#

I love useless gimmicks spamming logs

hearty shard
#

Lmao

grand flower
grand flower
#

ik

slate flume
#

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

grand flower
#

community won't allow us to heh

#

i'll just disable networking of snake later

slate flume
#

And people got over it

#

I mean bro it's not that deep it's snake

grand flower
#

ยฏ_(ใƒ„)_/ยฏ

#

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

slate flume
grand flower
#

Some people like snakes, some don't

#

So they vote

#

Votes said to keep snake

slate flume
#

I mean I get that

#

But it's wild to me that people like snake that much

grand flower
#

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

true cedar
grand flower
#

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

true cedar
#

thats

grand flower
#

Had fun rebalancing every SCP

true cedar
#

like what

grand flower
#

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

true cedar
#

what does he do now

grand flower
true cedar
#

this isnt mayhem?

grand flower
#

oh yeah i'm talking Mayhem only

true cedar
#

oh okay

#

that explains it

grand flower
#

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

warped prairie
#

will deleting snake.dll from game files brick the server or just disable snake?

grand flower
#

You'll break the game

#

You're better off patching it out somehow

#

On the server

warped prairie
#

wild its hardcoded like that.

grand flower
#

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

warped prairie
#

epic...

true cedar
#

slowly increase its height as it rages

true cedar
#

lmfao u can do that?

grand flower
#

Yup

true cedar
#

how

#

genuinely curious

grand flower
#

Just lerp it to the regular height on tick while enraging

#

Over the time it takes to enrage

true cedar
#

oh ik that part

grand flower
#

With some additional checks to make sure 096 doesn't grow into geometry

true cedar
#

but i thought changign height required a new spawn message?

#

and everything

grand flower
#

No 14.1.1's new scale feature

#

Player.Scale

true cedar
#

oh

#

goddamn

#

it

#

every single fun thing was added after i stopped doing fun plugin stuff

grand flower
#

It's stupidly broken

#

Had to patch a lot to get it stable without killing the server

#

But it works ig

true cedar
#

yea but still

slate flume
#

I just using VisionInformation to trigger shy guy rage for when you see any part of his body

edgy shuttle
#

hi plugin devs!!!

true cedar
#

wow trespassing

grand flower
edgy shuttle
#

womp

true cedar
grand flower
#

I suppose

unique crane
#

):

grand flower
#

You're okay too david

#

14.1.2 when

unique crane
#

Idk

#

Don't have access to release plans

restive turret
#

Ok so

teal junco
#

hi

#

sup

#

whatr u gonna say

restive turret
#

When 3114, 127 events

restive turret
#

Ghostbusters!

solid mica
#

CASSIE, call the GhostbustersScientistClearly

teal junco
restive turret
#

mu like cow?

#

Moo 13

#

05, the cows are inside the facility

icy knoll
#

@upper vapor how is that plugin loader pr coming along :3

restive turret
#

Lost in Action

upper vapor
#

i haven't committed it yet

restive turret
upper vapor
#

i've done that already

royal mica
#

Do you have unloading?

upper vapor
#

unloading what

royal mica
#

Unloading the plugins on demand

upper vapor
#

whar

#

you can .Disable()

royal mica
#

Yes, but that just Disable. I meant Unloading

#

full on evict from the Environment

icy knoll
#

unloading = disabling

upper vapor
#

you can't unload assemblies

royal mica
upper vapor
#

you can unload an entire AppDomain but not a single assembly

royal mica
#

Disable is absolutely not equal to unloading

royal mica
random scaffold
#

how i can get ammo limits? by enumerable

royal mica
#

Would AppDomin approach work? THONK

upper vapor
#

yes just unload the entire runtime

royal mica
#

No, you create a new appdomain

upper vapor
#

yeah but why would you do that

#

then you can't interact with the game

royal mica
#

so you can unload the assembly on demand

#

I mean you can, can't you

#

since everything is bootstrapped via events

#

and instantiated

upper vapor
#

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

royal mica
#

Hmm I guess Harmony patches would break cause it would trys to patch the ones in the AppDomain

upper vapor
#

yes

royal mica
#

but the event ones would not break

#

I suspect all Static class also break cause would reference the one in the AppDomain

upper vapor
upper vapor
random scaffold
upper vapor
#

you can just check how it works

random scaffold
#

me need enumerable list

upper vapor
icy knoll
#

i dont think there is enough pointers

#

i cant see what ur pointing at

upper vapor
#

mb

#

should've added a shook

random scaffold
royal mica
#

what

upper vapor
#

have you tried using a decompiler

restive turret
restive turret
upper vapor
#

i haven't

restive turret
#

Me neither

#

I just ball with it until I'm raged

hearty shard
#

Skibidi

#

Alright gm chat

restive turret
hearty shard
upper vapor
restive turret
#

She said the forbidden word

#

Should put into trial

upper vapor
hearty shard
random scaffold
#

skibidi skibidi skibidi

upper vapor
random scaffold
#

best song

restive turret
#

/wran @hearty shard she said the sb word

hearty shard
#

thanks

restive turret
#

F no more wran

upper vapor
#

i'm broke

restive turret
#

Or is it !

#

Ido

upper vapor
restive turret
#

!wran

hearty shard
#

!wran @restive turret bitch

restive turret
#

Yes it is

hearty shard
#

damn.

#

is it not a ping

idle depot
hearty shard
#

!wran

regal lakeBOT
# hearty shard !wran
! | C.A.S.S.I.E. Help Menu
Syntax: !wran <member_0> <text_final>
Custom command.

Created via the CustomCom cog. See !customcom for more details.

hearty shard
#

member_0

restive turret
#

!wran @hearty shard she said the sbd word

hearty shard
#

!wran sjelm bad

regal lakeBOT
#

Member "sjelm" not found.

upper vapor
#

!wran obevelyn said the s word

hearty shard
#

Mispelling

upper vapor
#

why is there an extra v

restive turret
#

Oh cassie is broken

hearty shard
upper vapor
#

!wran ovbevelyn said the s brainrot word

regal lakeBOT
#

Member "ovbevelyn" not found.

hearty shard
#

obviously evelyn

upper vapor
restive turret
idle depot
#

The joke command is making a fool out of you

hearty shard
#

!wran axwabo smelly

regal lakeBOT
#

@hearty shard has wranned axwabo Reason: smelly

upper vapor
#

!wran obvevelyn said the s rot word

idle depot
#

There you go.

upper vapor
#

there is no way

hearty shard
#

!!!

upper vapor
#

SHE'S IMMUNE

#

NO

restive turret
#

!wran obvevelyn said the s rot word

regal lakeBOT
#

@restive turret has wranned obvevelyn Reason: said the s rot word

upper vapor
random scaffold
#

!wran 590224743542554630 Skibid

regal lakeBOT
#

@random scaffold has wranned theverifieddickhead Reason: Skibid

hearty shard
upper vapor
restive turret
random scaffold
random scaffold
restive turret
hearty shard
upper vapor
hearty shard
#

guh

upper vapor
#

just classic eve

hearty shard
restive turret
#

Ofc it's from that kind of server

random scaffold
#

!wran 1180466630191501363 Strange emojies

regal lakeBOT
#

@random scaffold has wranned obvevelyn Reason: Strange emojies

hearty shard
#

i dont even know what servers im in

#

i see emoji i click i join

#

half my servers are emoji servers

rare jewel
#

please help me how can I check the role of a player on a spectator using if??

rare jewel
upper vapor
#

check for RoleTypeId.Spectator

rare jewel
#

@upper vapor

solid mica
#

You have the references?

grand flower
#

Guessing they haven't included them

royal mica
# rare jewel ?

You got the first part right in the previous
Also import RoleTypeId

#

Also please learn C# first, or your journey will be hard ๐Ÿ˜„

hearty shard
# rare jewel

ev.Player.IsDead also works (but counts filmmaker and Overwatch)

#

but yeah reference the game assemblies

rare jewel
#

ok

#

thanks

rare jewel
unique crane
#

Assembly-CSharp

rare jewel
unique crane
#

You need to import the namespace

#

I suggest learning C# first

hearty shard
#

Btw

#

David

#

Whys there stale references in Ragdoll, Room & Locker list ?

hearty shard
#

good point

restive turret
unique crane
hearty shard
restive turret
#

Make a coroutine that remove from that

hearty shard
#

rah

#

ill have to make a patch for every list smh

restive turret
#

Skill issue

unique crane
#

Ah yes

#

There is pr for it

#

And it may have been merged

#

Idk haven't looked

rare jewel
unique crane
#

Use player.Role

rare jewel
icy knoll
#

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

hearty shard
#

check the damage handler text

#

or you can patch it

#

and create custom damage handler

icy knoll
#

i dont see a translation or anything

hearty shard
#

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

icy knoll
#

oh yeah normal handler has it

#

just uh

#

idk the text

hearty shard
#

then begin logging

icy knoll
#

so now ima have to log the event to grab it smh

upper vapor
icy knoll
#

unless the dmg handler tells me what role their changing to

upper vapor
#

oof

icy knoll
hearty shard
#

ChangingRole has no damage handler

icy knoll
#

im using dying

#

bruh

#

not changing role

hearty shard
#

is what that was a reply to :3

icy knoll
#

im tracking deaths

#

huh

hearty shard
celest thorn
#

but there's a type destroyed that actually tells you if someone left

icy knoll
celest thorn
icy knoll
#

ye ofc

celest thorn
# icy knoll ye ofc

CustomNetworkManager::OnServerDisconnect translation is "Unknown cause of death." checked by the server

#

so check for that

celest thorn
upper vapor
#

that might be other causes of death like admin, not sure if you wanna count that

icy knoll
#

well, TranslationsById doesn't contain that translation

celest thorn
#

check for ev.DamageHandler.DeathScreenText.Contains(DeathTranslations.Unknown.DeathscreenTranslation)

#

i think this is actually the best way to do it

icy knoll
#

okie

upper vapor
#

at that point

#

patch OnServerDisconnect

#

prefix

celest thorn
#

i guess

upper vapor
#

set a bool saying the player is leaving

celest thorn
#

you could take that apporch

upper vapor
#

unset it in the dying event

icy knoll
#

rather not patch if i dont have to

upper vapor
#

imma crash out

#

norhtwood

icy knoll
#

why ๐Ÿ˜ญ

upper vapor
#

how do we not have a way to check if the player died due to leaving

icy knoll
#

another gh issue for the labapi team then

#

they now have 100+ ๐Ÿ˜ญ

upper vapor
#

i guess you can check for the Unknown translation id

unique crane
#

Me when over 500 issues on gitlab

upper vapor
#

probably not the most reliable

upper vapor
icy knoll
#

easiest way really ๐Ÿ˜ญ

unique crane
icy knoll
unique crane
#

You see 100 issues

#

I see

icy knoll
#

smh

unique crane
#

I dont do it for money tbh xd

celest thorn
unique crane
#

Hm,

#

?

celest thorn
#

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

covert flame
#

There a way to set the amount of ammo in a gun?

unique crane
#

depending on the firearm

covert flame
#

Possible to modify the max ammount?

restive turret
#

Probably not be shown in client side

static meteor
#

Its synced with the client

restive turret
#

Like changing the guns max ammo count

covert flame
#

Is there a better way sto see if the object that a raycast hit is a specific object?

plain gazelle
#

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

restive turret
#

Check how radio works i guess.
Maybe client side one isnt shown for you so idk

celest thorn
#

@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

slender lynx
#

glow not glowing

unique crane
#

nop

celest thorn
#

strange

#

it auto fixed itself

#

lol

unique crane
teal junco
#

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

slate flume
#

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?

plain gazelle
upper vapor
#

you could modify the VoiceMessage to have the hub of the original

#

or, if they're no longer online, spawn a dummy

plain gazelle
#

ohhhh left players would cause issues? darn

upper vapor
#

i'm not sure if you can modify the VoiceMessage in the receiving event KEKW

#

omg

icy knoll
#

or just perm disable the radio

upper vapor
#

okay you can cancel the sending voice event if they're using a radio, replace the hub on the voicemessage and send it

upper vapor
#

no ref

icy knoll
upper vapor
#

that's not the issue

#

the field should be a ref field

#

rn it makes a copy of the message in the constructor

slate flume
#

You could just attach to PlayerSending, cancel it, and then send your own

#

Instead of going into receiving

slate flume
#

Listen

#

I'm

#

Stupid

upper vapor
#

CAN THIS APP WORK FOR ONCE

slate flume
#

I already do this shit to do ScpProxChat SunglassesThumbsUp

upper vapor
plain gazelle
#

firEyes
all sounds complicated

true cedar
#

though it is odd they made it take ref in the parameter

hearty shard
#

you have to specify the struct definition itself ?

true cedar
#

i mean the class isnt a ref struct

slate flume
# plain gazelle <:firEyes:785674652755689492> all sounds complicated

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

hearty shard
slate flume
hearty shard
#

gj !!!

slate flume
#

Fake news

slate flume
#

In my defense I'm actively brushing my teeth while writing this getting ready to go to my dentist apt

hearty shard
#

guh?!!!!?!!?!

true cedar
#

eve doesnt brush her teeth

hearty shard
#

but

slate flume
hearty shard
#

typing while brushing?

#

nuh uh

slate flume
#

Keep up boomer

hearty shard
#

how old r u

slate flume
hearty shard
#

i am too

#

so no calling me a boomer

slate flume
#

That's crazy

hearty shard
#

unless ur below 14

#

then sure go ahead

unique crane
#

"How old are you"

responses with a word

slate flume
#

Can I call you unc

hearty shard
#

if ur below the age of 14

slate flume
#

Shit

true cedar
#

i think im a boomer to all of u basically

hearty shard
#

good

#

ur 50

#

shhh

slate flume
#

Man it's so tough out here being 17 I can't even make fun of people for being old anymore ore_sad

#

I'll just go to the local senior center and laugh at the elders to feel better about myself

true cedar
#

if 17 is old to u

slate flume
upper vapor
unique crane
#

what

true cedar
upper vapor
#

ref struct only means that it can't be allocated on the heap

#

are you delulu

true cedar
#

the class that the field is in is not a ref struct

upper vapor
#

?????

#

ref fields exist

true cedar
#

yes and you can only have them in ref structs

upper vapor
hearty shard
#

anyway

#

!!!

true cedar
#

otherwise

slate flume
hearty shard
#

why does everyone in this chat have delusions about how C#, SL or Unity works

slate flume
upper vapor
true cedar
#

i mean it makes sense

#

if you could store something at a ref field

slate flume
#

I'm just making this shit up

hearty shard
true cedar
#

one sec

hearty shard
#

should give u more

upper vapor
#

NAH

#

okay mb

#

but then why did NW make it seem like you have a reference to the original struct

true cedar
#
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

upper vapor
#

yea

#

true

true cedar
#

aka segfault time !

upper vapor
#

should've had ref struct events the whole time smh

true cedar
#

event args really should be ref structs but

slate flume
#

:)

unique crane
#

0 alloc labapi

true cedar
#

5 billion events a seconf

#

second

slate flume
#

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

restive turret
true cedar
slate flume
#

How would one

#

Go about such a feat

#

Theoretically

hearty shard
#

you can record it and replay it on a dummy

restive turret
#

such a feet

hearty shard
#

and then record the dummy yourself using obs

slate flume
#

๐Ÿ”ฅ

#

Love that

hearty shard
#

track timestamps of a round into an event of what the player did

#

and then simulate it

#

it wont be pretty

upper vapor
slate flume
upper vapor
hearty shard
#

youll have to make it in a way ping wont affect it as much

upper vapor
#

-# noone will make an open-source solution

hearty shard
upper vapor
#

you know what

#

i will

#

some time

hearty shard
#

good

#

ez

slate flume
hearty shard
#

then i steal it like im the british discovering a new place

upper vapor
slate flume
#

Lmao

#

That'll solve every problem ever

upper vapor
#

yeah

#

using NWAPI = Exiled.Features;

#

peak ai

slate flume
#

Actually peak

upper vapor
#

i don't understand why tf everything needs to inherit from EventArgs

true cedar
#

i can kind of understand event arg inheritance

#

since it can make it easier to work with like

restive turret
teal junco
#

certainly couldnt be that much

upper vapor
#

yours, Cyn's

restive turret
#

what solution

upper vapor
#

at least we'll be able to count further than valve

teal junco
upper vapor
#

basically

teal junco
#

rahhh

upper vapor
#

oh

restive turret
#

ah

teal junco
#

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

teal junco
#

here

upper vapor
teal junco
#

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.

upper vapor
#

okay so don't change classes to structs

#

just in labapi

upper vapor
#

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?

hearty shard
#

Secret api

upper vapor
#

yeah

#

v2 stable pls soontm

#

actually you have all week

teal junco
teal junco
upper vapor
#

ye

teal junco
#

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

hearty shard
hearty shard
hearty shard
upper vapor
#

cuz i'm using it

hearty shard
#

og

#

Oh

#

why r u on v2

upper vapor
#

and i can't release the plugin if your SSSS wrappers isn't stable

hearty shard
#

which functionality r u using

upper vapor
#

yeye

hearty shard
#

Yum

#

if you are testing it

#

Theb maybe i can release it sooner rather than later

upper vapor
#

i onlyhave 2 settings lmao

#

have you finalized the new wrapper model?

#

if yea i might do a prerelease

grand flower
#

That requires so much more integration than we can do

grand flower
#
  • it'll integrate with our backend anyway so it won't be suited for other servers
true cedar
#

you can put a lot of effort into something and still make it open source lol

#

thats what im doing with ruei

grand flower
#

(well I'm also not permitted heh)

teal junco
#

yeah

grand flower
#

All of Bright's in house stuff is private

teal junco
#

its a server project

upper vapor
grand flower
#

Looking at your demo stuff you've done it a lot different than what i'm doing

true cedar
grand flower
#

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 mmLul

teal junco
#

on the topic, does anyone know how to read wav files (or write ogg files?)

upper vapor
#

NAudio

grand flower
#

Are you gonna be recording voice

upper vapor
grand flower
#

Because if so, don't

upper vapor
grand flower
#

Doesn't break CSG anymore

#

However you'll get murdered by privacy laws

upper vapor
#

yep

#

"do not use for public" still stands though

grand flower
#

Since we unfortunately don't have clientside mods, let alone custom UI, you can't ask for explicit consent

icy knoll
#

youll have to make people agree with written consent practically

grand flower
upper vapor
#

๐Ÿ˜ญ

grand flower
#

You can't do popups

upper vapor
#

what qualifies then

grand flower
#

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

hearty shard
upper vapor
#

you have the hold thingy for buttons or whatever

hearty shard
#

If thats ur question

grand flower
#

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

upper vapor
#

make them solve some captcha in SSSS toomuchtrolling

grand flower
#

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?

upper vapor
hearty shard
#

hmmm

grand flower
#

My system's full on delta states

upper vapor
grand flower
#

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

upper vapor
#

fair

#

imagine that with messages though toomuchtrolling

#

"skip 1 minute"

grand flower
#

wdym

upper vapor
#

like

#

yoou'd skip 1 minute ahead in the replay

#

and you'd get all the network messages in order

#

at once

grand flower
#

They'd just be applied while fast forwarding

#

you wouldn't get them all at once

upper vapor
#

ff how fast

#

i want it NOW

grand flower
#

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

upper vapor
#

ryeah

grand flower
#

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

grand flower
#

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

teal junco
#

i just never got hit in the face with it because i dont have a consistent method of causing tps spikes

upper vapor
#

like a diff

teal junco
#

oh okay

grand flower
#

The term delta refers to the difference between two values or states

upper vapor
#

a = ฮ”v/ฮ”t

teal junco
#

so it only records the difference between the last position and the new position, just for example?

grand flower
#

yes

teal junco
#

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

grand flower
#

ยฏ_(ใƒ„)_/ยฏ

#

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

teal junco
#

can you give an example for how it would handle player movement

grand flower
#

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

teal junco
#

Ohh

#

I think i understand

#

yeah yours is probably pretty good

grand flower
#

Well, will be once I get to that

teal junco
#

respect

grand flower
#

I'm barely done with the boilerplate for demo files but I'm finally getting started on recording events

teal junco
teal junco
#

your solution is really good, though

#

i like the bitfield

grand flower
#

You'll get there

#

I'm used to keeping things as lightweight as possible bandwidth wise and the same applies to this

teal junco
#

oh yea youre like a networking guy

#

this kind of stuff does vaguely remind me of networking and stuff

teal junco
grand flower
#

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

teal junco
#

if you ever get a chance i would like to know how big a demo file is uncompressed (in practice)

grand flower
#

I'm expecting a few megabytes per round

#

but yeah sure

slate flume
grand flower
#

I doubt you'll get in trouble for that ยฏ_(ใƒ„)_/ยฏ

#

automate it though and that's a whole new thing

slate flume
#

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

grand flower
#

Depends on what you do

#

IP addresses can be fine

#

Most already do

slate flume
#

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

teal junco
#

and it doesnt go away and cripples your player character until you make a choice

grand flower
#

Yeah I wouldn't wanna make players leave the server because of it either

teal junco
#

yeah lol

#

not gonna be super attractive

midnight laurel
#

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...

grand flower
#

Nope

#

Patch it in yourself

slate flume
#

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

grand flower
slate flume
#

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

grand flower
#

Patch it in mmLul

slate flume
#

That's what I'm thinking I'll do

#

I'll have to patch functions DyingEvent calls and HurtingEvent calls

worthy rune
upper vapor
#

Ohhh

#

Okay that makes sense

worthy rune
#

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

upper vapor
#

You can

#

C# 13

#

Not sure why we need things like IPlayerEvent though

upper vapor
worthy rune
#

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

upper vapor
#

Yeah C# 13 lets you use interfaces on ref structs

worthy rune
#

i see

upper vapor
grand flower
#

oh wait

#

I see

upper vapor
#

Cuz you can
Yeah

#

Xd

worthy rune
#

you can do that too, its just that its abit cleaner

upper vapor
#

Multi member access

grand flower
#

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

worthy rune
#

depends how many times you use it

upper vapor
#

What if you wanna cancel 10 events for the juggernaut

upper vapor
worthy rune
#

if you need todo it with like 10 events its worth

grand flower
#

When do you ever get 10 events

#

i

#

will get coffee

#

my brain is lagging behind

#

ignore my rambling

worthy rune
#

like all denying interaction ones

grand flower
#

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

unique crane
#

Aw

grand flower
#

oh, server's receiving my requests, finally

#

auth is uh, not working, but oh well, i'll disable it for now

#

I hate steam plugins for Unreal they all suck ass equally

#

Gonna end up writing my own once and for all