#plugins-dev-chat

1 messages · Page 170 of 1

restive turret
#

Ye updoot it

#

Make sure you are ready to update your plugins too

south socket
#

Uhhh... Worshiping capybaras should help.

restive turret
#

I worship cats

slate flume
#

Am I crazy

#

Why was all my Cassie shit broken in the experimental branch but not in the new update

#

I'm getting no errors

#

My leading theory is that my server didn't update properly

#

Ts gonna make me crash out

#

I know it's not up to date

#

Oh I need to use the experimental branch for the dedicated server still don't I

mild ice
#

The correct server build should be on the live branch

slate flume
#

It's telling me it's already up to date for the early-server-build and the non-beta build

mild ice
#

If it doesn't want to update I'd try changing the branch name from public to none or vice versa

#

Usually gets it working for me

slate flume
#

Lemme try that

slate flume
#

Public beta branch worked

#

Time to fix all the shit that broke 💪🏼

mild ice
glad pagoda
#

since thats supposed to force steam to look for new updates

slate flume
#

Every time I update my server I use a new instance so it doesn't really matter

glad pagoda
#

no idea how steamcmd works exactly but it does work in normal steam client

slate flume
#

To actually update you still need to run app_update

#

I still would've ran into the same issue if I used app_info_update because I was looking at the wrong branch

glad pagoda
slate flume
#

Gotcha

#

I thought you were saying to use it for updates lol

#

I shouldn't have to worry about it in the future cause when you launch a new SteamCMD instance it does that automatically

#

It has to establish a new connection each time you run

glad pagoda
#

like apt on debian/ubuntu does

#

where you have to update before upgrade

slate flume
#

I don't leave steamcmd open

glad pagoda
#

not app updates?

slate flume
#

After that when you run app_update it runs a check for updates anyways

#

The local cache is updated during the login step

#

Which happens whenever I run an update check

glad pagoda
#

No idea, I assume there must be some cases where it doesn't refresh since they added the command

slate flume
#

Logins are more intensive than updating the cache so people may keep it up and update rather than logging in every time if they're working with some app or something

#

Well

#

It's time to find out if SCP friendly fire terminations are still broken

slate flume
#

Epic GoodOne

#

At least it doesn't break the client anymore

glad pagoda
#

did you report it to QA?

slate flume
#

I'm just gonna fix it myself

#

It's what I did last time

upper vapor
#

That would probably be MethodNotFoundException

#

Yeah sooo
We love base-game namespaces having the same name as the labapi wrapper class

upper vapor
#

It's actually cooked

slate flume
upper vapor
#

Programmers try not to break labapi challenge (impossible)

upper pike
#

Plugin development going well

upper vapor
#

when did they add an audit log

static meteor
#

Since when was https://plugins.scpslgame.com/ festive?

upper vapor
upper vapor
#

you gotta type LabApi.Features.Wrappers.Cassie every time

south socket
upper vapor
#

what new cassie

south socket
upper vapor
#

base-game cassie has been rewritten and the labapi wrapper is compatible

#

so

south socket
#

uh the Wrapper is using RespawnEffectsController but yeah its gone

upper vapor
#

yeah we don't have the new version on nuget yet

#

but the dll should be updated in the server's files

south socket
#

Oh yeah I only looked on github so yeah that makes sense

upper vapor
next mirage
#

so how can i use cassie in plugin,I still dont get it

icy knoll
#

you can use the base game

upper vapor
carmine prawn
#

it appears there is a namespace conflict

upper vapor
#

Because

#

It happened like that

#

And no you can't omit it, not even using aliases

#

I mean

upper vapor
upper vapor
#

True

slate flume
slate flume
boreal snow
upper vapor
boreal snow
#

I can manage with it though.

#

¯_(ツ)_/¯

upper vapor
#

Yeah it's more versatile but people who used the Cassie wrapper now have their source code broken

slate flume
#

Okay so is it possible to make your own SubtitleParts?

#

Like if I want to make a custom ScpTerminationMessage to get the same prioritization stuff, how do I convert whatever custom subtitles I have to SubtitleParts

true cedar
#

what have the damn liberals done to cassie

upper vapor
#

Not sure if you can mix-and-match translated and custom elements

#

I'll check in a sec

slate flume
upper vapor
#

huh

slate flume
#

It's exactly as it sounds

#

If one SCP kills another, the termination message will not play

upper vapor
#

which ones

slate flume
#

I'm not sure

upper vapor
#

ummmm

slate flume
#

Most of them in my experience

#

That's why the SubtitleParts ends up as null in the first place

#

My worry was that null checking was going to be a band-aid fix, instead of the underlying problem being solved

#

And I was correct

#

So here we are

#

And I'm patching it again

#

To run the same BS

upper vapor
#

i'm looking at the scp damage handlers but none of them have null subtitle parts

#

oh wait

#

nevermind

slate flume
#

😁

upper vapor
#

new CassieAnnouncement() != CassieAnnouncement.Default

#

soooooo

#

yeah

#

do you know what you need to patch?

slate flume
#

Decently simple fix actually

#

But I want the new message I make to register as an SCP Termination Message instead of a regular message

#
public class CassieScpFriendlyFire : CustomEventsHandler
{
    public override void OnPlayerDeath(PlayerDeathEventArgs ev)
    {
        if (ev.OldRole.GetTeam() != Team.SCPs || ev.Attacker is not { Team: Team.SCPs } attacker)
            return;
        string scp1 = Resources.GetFirstNumberGroup(ev.OldRole.ToString());
        string scp2 = Resources.GetFirstNumberGroup(attacker.Role.ToString());
        // TO-DO, make this an SCP termination message instead
        LabApi.Features.Wrappers.Cassie.Message($"SCP {Resources.SpaceNumbers(scp1)} terminated by SCP {Resources.SpaceNumbers(scp2)}", $"SCP-{scp1} terminated by SCP-{scp2}.");
    }

    public override void OnServerCassieQueuingScpTermination(CassieQueuingScpTerminationEventArgs ev)
    {
        if (ev.DamageHandler is AttackerDamageHandler dh && dh.Attacker.Role.GetTeam() == Team.SCPs)
            ev.IsAllowed = false;
    }
}
upper vapor
#

oh btw

slate flume
upper vapor
#

if the announcement is queued and another scp is terminated with the same subtitles, the labapi event won't becalled

slate flume
upper vapor
#

just create them

slate flume
true cedar
#

but like is this cassie update a new thing that i wasnt aware of at all

slate flume
#

I don't know the structure, or how they're parsed, or how to make them

slate flume
upper vapor
upper vapor
slate flume
upper vapor
#

if the answer is no, then the answer is yes

upper vapor
#

idk how the release cycle works though

#

might not be out before christmas

true cedar
upper vapor
upper vapor
slate flume
upper vapor
true cedar
#

if

#

ic

upper vapor
#

or uhh

true cedar
#

i didnt even realize there was like

upper vapor
#

hold on

true cedar
#

an update

spare zodiac
boreal snow
spare zodiac
#

when Ruei for Cassie subtitles? trollface

boreal snow
slate flume
upper vapor
#

or uhh

slate flume
spare zodiac
upper vapor
#

yeah so SubtitleController is stripped for some reason

slate flume
#

I just want to make SCP termination messages work :'(

upper vapor
#

idk how stripping works ngl
there's no preprocessor so probably some unity magic

#

i'm looking though

#

okay so

#

seems like you can't

slate flume
#

Nice!

upper vapor
#

it's not possible to combine translated and custom parts

#

it just quits if it finds a non-translatable subtitle type skullbutreal

slate flume
#

So I have no way of properly fixing SCP termination messages being broken?

upper vapor
#

hold on

#

so what's broken exactly?

slate flume
#

The SubtitleParts on most SCP DamageHandlers is null

#

Meaning that if an SCP kills another, it doesn't send a termination message

#

It used to disconnect the client, but then a null check was added

#

It doesn't solve the underlying problem, but it prevents the problem from being more severe

upper vapor
#

maybe patch ScpDamageHandlerBase and Scp049DamageHandler and Scp096DamageHandler

#

-# yes, the latter two override the former and do the same thing

#

you can return CassieAnnouncement.Default

#

in whatever property that is

slate flume
upper vapor
#

that one too

slate flume
upper vapor
#

but other scps use ScpDamageHandler, no?
or the universal one

upper vapor
#

termination cause unspecified

#

oh since when do we have SilentDamageHandler

#

dam

slate flume
upper vapor
unique crane
#

Thats only for 079 and tesla gates no?

#

Cant think of any other way for scp to kill another scp

#

or well if you give the other scp a gun

upper vapor
#

939 too with FF nvm

slate flume
unique crane
#

Those who remember when 049-2 had visible equipped item

#

glued to their hand

slate flume
upper vapor
#

well

#

make it then

#

SubtitleType.TerminatedBySCP

#

look at how AttackerDamageHandler creates announcements

slate flume
#

Is there a point to having it overriden in the first place?

upper vapor
#

i mean yeah you can

#

idk

#

just call the method in ADH (works with transpilers only)

slate flume
#

I have like 15 of them atp

upper vapor
#

W

slate flume
#

I keep having to patch NW code 😭

upper vapor
#

what else do you wanna patch?

#

the world?

slate flume
#

This is one of my favorites

upper vapor
#

crazy

slate flume
#

I have longer and more complicated ones

#

I made one to fix custom keycard collisions

#

I actually quite like that one

upper vapor
#

the comments

#

are hurting my eyes

slate flume
#

It was actually a little easier to do a transpiler than use a helper method because I inserted it in the middle of a bunch of if conditionals

slate flume
#

I transpile to that part right there

#

I have parts that go to the normal execution path and parts that do an early return so this was the more optimized way to do it and a bit simpler for me to figure out

mint panther
#

yo how do i make a custom item

upper vapor
mint panther
#

which one tho

upper vapor
#

pick one that suits your use case
if you really feel like it, try each one

tiny oar
#
[2025-12-16 20:43:34.445 +08:00] [STDOUT] Parameter name: index
[2025-12-16 20:43:34.445 +08:00] [STDOUT]   at System.Collections.Generic.List`1[T].get_Item (System.Int32 index) [0x00009] in <069d7b80a3914a08b6825aa362b07f5e>:0
[2025-12-16 20:43:34.445 +08:00] [STDOUT]   at RandomElement.RandomItem[T] (System.Collections.Generic.List`1[T] list) [0x0000d] in <97f73857ad8f4e28bfb2a0949c9a9509>:0
[2025-12-16 20:43:34.445 +08:00] [STDOUT]   at MapGeneration.Scenarios.DistributorScenario.SelectProcessors () [0x0003a] in <97f73857ad8f4e28bfb2a0949c9a9509>:0
[2025-12-16 20:43:34.445 +08:00] [STDOUT]   at MapGeneration.Distributors.ItemDistributor.PlaceSpawnables () [0x00021] in <97f73857ad8f4e28bfb2a0949c9a9509>:0
[2025-12-16 20:43:34.445 +08:00] [STDOUT]   at MapGeneration.Distributors.SpawnablesDistributorBase.Update () [0x0004e] in <97f73857ad8f4e28bfb2a0949c9a9509>:0```
After the game update, my server occasionally has an issue where items on the map don’t naturally spawn (SCP locker items spawn normally). After checking the logs, I found this
#

Totally no idea how to fix it atm

slate flume
#

Now the thing is, the only way this can happen is if PlaceSpawnables is firing before the map is generated

#

At least as far as I can tell from my cursory glance

tiny oar
#

My plugin doesn’t deal with that at all. I don’t even know what scenario processors are☠️

#

I thought it might be a game bug at first, but it looks like only my server has this problem, and I couldn’t reproduce itNekohot

slate flume
slate flume
#

If it doesn't work lmk

#

My interest is piqued

restive turret
# tiny oar ```[2025-12-16 20:43:34.445 +08:00] [STDOUT] ArgumentOutOfRangeException: Index ...

had the same

seed: 1022878331
[2025-12-15 20:56:13.078 +00:00] [STDOUT] ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
[2025-12-15 20:56:13.078 +00:00] [STDOUT] Parameter name: index
[2025-12-15 20:56:13.078 +00:00] [STDOUT]   at System.Collections.Generic.List`1[T].get_Item (System.Int32 index) [0x00009] in <069d7b80a3914a08b6825aa362b07f5e>:0
[2025-12-15 20:56:13.078 +00:00] [STDOUT]   at RandomElement.RandomItem[T] (System.Collections.Generic.List`1[T] list) [0x0000d] in <97f73857ad8f4e28bfb2a0949c9a9509>:0
[2025-12-15 20:56:13.078 +00:00] [STDOUT]   at MapGeneration.Scenarios.DistributorScenario.SelectProcessors () [0x0003a] in <97f73857ad8f4e28bfb2a0949c9a9509>:0
[2025-12-15 20:56:13.078 +00:00] [STDOUT]   at MapGeneration.Distributors.ItemDistributor.PlaceSpawnables () [0x00021] in <97f73857ad8f4e28bfb2a0949c9a9509>:0
[2025-12-15 20:56:13.078 +00:00] [STDOUT]   at MapGeneration.Distributors.SpawnablesDistributorBase.Update () [0x0004e] in <97f73857ad8f4e28bfb2a0949c9a9509>:0
restive turret
#

i didnt

#

i just ignored it

tiny oar
#

Or it's a game issue💀

restive turret
#

I didnt touch anything with mapgen

tiny oar
#

yea same

#

no idea why this happened

restive turret
#

must be the wind

mint panther
restive turret
#

Tbh I care the little as possible which one you use

#

Have fun writing one if you doing it

#

(bc i had fun doing it)

unique crane
#

Billions must create their "universal" solution trolling

mint panther
#

nah its not for the public just for me to suit my specific needs

slate flume
mint panther
#

its not a "universal" solution

unique crane
slate flume
unique crane
slate flume
#

It's a dope combination of instance and static

#

Each member is inherited from the base custom item, and they're all kept in a registry, but they also have static elements I can access

upper vapor
#

i made the weirdest one trust
-# only i know about it

slate flume
#

Like the serials

#

I can access the serials for each custom item as a static member, so I don't need to find the instance in the registry

#

And they're all separate

restive turret
#

It made my thing slow down if I tried to make into a every instance

#

So instead of "manager" one for each item instance it would be slown down like many many times

warped prairie
#

slej custom items stuff is lowkey the best

#

ill glaze this guy to the ends of the earth hes a very smart indavidual

slate flume
restive turret
restive turret
#

*a new ci object

slate flume
#

Weird

restive turret
#

I through you doing the same thing

slate flume
#

Nah

#

I store the item serials in a dictionary

restive turret
#

It worked pre 14

slate flume
#

Then check it in LabAPI events

restive turret
#

After 14 it just slowed down significantly

restive turret
slate flume
#

Essentially all the data I need for my custom items is a dictionary of serials, the associated pickup lightsourcetoy, and then the events that run based off the serials

upper vapor
#

SL?

restive turret
#

14 century's ago

slate flume
#

Then a generic class deriving from it

#

The benefit of the generic class is this

restive turret
#

I basically added an ILightObject to it

slate flume
#

Incredibly useful for harmony patches

restive turret
#

I handle light stuff in other places

slate flume
#

I didn't really need to go that far

#

The benefit of making your own API is you can choose how much you need

restive turret
#

And I didnt liked the idea of serials inside the custom item

#

I added the events already on it (virtual all) [by hand] and when I need it override it

slate flume
#

You're insane for that

#

In a cool way

restive turret
#

I added a way to override specific stuff to

#

For example jb damage

#

Charge stuff

slate flume
#

For that stuff I tend to just override the give or spawn functions

restive turret
#

I have to check how the new MeleeAutoItemSync work and probably make internal pr (mayhaps) so those can be overridable

#

Also wanted to add Rarity system too but I think was too much

#

Cus I would end up doing what Factorio did

#

Common
Uncommon
Rare
Legendary
Custom
..
Byte.MaxValue

upper vapor
slate flume
#

I did it to do random spawning mechanics

#

Some of the custom items are obviously more powerful than others

restive turret
#

ie:
I replaced the micro

slate flume
#

They just randomly spawn around the facility currently

restive turret
#

For us its either spawned by other plugin or replaced by scp 500

upper vapor
slate flume
#

Based as hell

#

I gave up on plugin dev stuff for a few weeks cause I burnt out

upper vapor
#

moral of the story: don't spend 54h a week working on a unity project

restive turret
#

I playing GoWR since fridays

slate flume
restive turret
slate flume
#

I know the patreon proceeds are fueling hubert's crack addiction

slate flume
#

I've been playing borderlands

restive turret
#

Which version

#

BL2

slate flume
#

1 and 2

restive turret
#

1 isn't really good but rhe 2nd is gold

slate flume
#

I did 1 GOTY Enhanced, then 2, and got most of the achievements in 2

restive turret
#

Sadly BL2 fucked up LAN play

upper vapor
slate flume
restive turret
#

We tried it but wasnt working cus fucking gearbox

slate flume
#

I'm onto the pre-sequel next

upper vapor
slate flume
#

After that I might have 3? But I wanna play some Tales from the Borderlands

#

Apparently the first one is peak

#

And the second is abysmal dogshit

restive turret
#

You can probably only play "lan" if you connected to "shift" system which requires internet but in lan play we dont usually have that

upper vapor
restive turret
#

We play games without outside internet access

#

So we can always simulate (and scream to whoever fucked up) the offline lan play

loud condor
#

why is steamcmd installing an older server?

upper vapor
#

specific the branch public

slate flume
#

Exactly what fixed it for me

upper vapor
#

sooo

#

some people have issues even with that

#

xd

slate flume
#

Just put

steamcmd.exe +login anonymous +app_update 996560 -beta public +app_update 996560 -beta public validate +quit
pause
upper vapor
#

cinema

slate flume
#

In a .bat file

#

Then whenever you run it it updates to the latest public beta

#

I have three bat files for different branches

upper vapor
#

i might just be stupid actually

#

i told them to do -branch public and not -beta public

#

-# well, i didn't tell them specifically, but i said yes it looks good

slate flume
loud condor
#

is this right command?

upper vapor
#

it should be -beta public

#

not -branch public

#

it'll work 1000000%

teal junco
#

Quick question, I cant check cus im out

#

whats the name of the new cassie class

static meteor
#

Cassie

loud condor
upper vapor
#

np

upper vapor
upper vapor
teal junco
#

Thanks

upper vapor
#

np

halcyon kite
#

Hello!

#

How to get server host role?

static meteor
#

With your discord id or you can email S&C

halcyon kite
worn gull
#

Hi

#
  public static Team GetTeam(this RoleTypeId role)
  {
    PlayerRoleBase result;
    return !PlayerRoleLoader.TryGetRoleTemplate<PlayerRoleBase>(role, out result) ? Team.OtherAlive : result.Team;
  }```
How can I get refHub here
I want to patch it and I need RefHub of the player
icy knoll
#

what

worn gull
#

And the code is up there

#

I need to get the refHub

icy knoll
#

you... can't

worn gull
#

Oh

#

That's a problem

#

Alr thanks

icy knoll
#

just make an extension method for Player and call it get team

#

and use that

#

or smth

worn gull
slate flume
# worn gull That's a problem

Well this GetTeam is an extension method that only takes in the RoleTypeId
I could define
var role = RoleTypeId.ClassD and then do role.GetTeam() on it because it's not dependent on a ReferenceHub

#

There is a GetTeam in the part above it that uses a ReferenceHub, and is probably what you should use for your case

worn gull
#

But

slate flume
#

If you're instead looking to fake the team a player is on, you should patch the PlayerRoleBase

worn gull
#

I already managed to fake the team

#

But

#

This is not faked

slate flume
#

You can fake team and fake RoleTypeId too

#

That's what I did to fake some players as dead

#

What's your use case?

worn gull
#

And patched playerrolemanager.currentrole

slate flume
#

That fixes your problem

worn gull
#

Thanks

#

xd

slate flume
#

Haha ofc

terse bone
#

I was wondering why my code was throwing exceptions when using drawablelines, but now i see the issue
Here it uses connectionToServer (As a server) instead of connectionToClient, and since it's null on the server, it throws NRE when it tries to send the message

restive turret
#

Huh

unique crane
#

Report it as base game bug please

terse bone
#

okay

worn gull
#

Can somebody please explain to me what is Pooled/IPoolSpawnable in FpcStandardRoleBase?

restive turret
#

Ye. (My perception)
Pooling is a definition of if not used anymore go in storage instead of destroying it.
Role stuff is pooled (and have basic X amount of stuff available to it) so when spawning and changing roles you dont have to wait X time to unity spawn models and the actual role related stuffs

static meteor
#

95% of this time was used for development

worn gull
#

Me too XD

snow pulsar
#

Hmm...

boreal snow
#

Does anyone have a copy of the NWAPI? I'm trying to remake a plugin here on LabApi, but I'm not understanding what this method is trying to find 😭

#

specifically 13.1.2 if possible

#

nvrm ill jst try and look through 12.0.0

#

wait

#

I can jst compile 13.1.2 on my own

#

I'm stupid

magic gate
upper vapor
#

You're gonna need to patch the call sites

upper vapor
upper vapor
slate flume
#

I did something really similar actually

upper vapor
#

Similar

#

What similar

#

-# I've had the solution since 12.0

slate flume
#

I wanted the game to think a player was dead when they weren't

#

Including full access to things like respawn mechanics

#

Solution? Fake the PlayerRoleBase

#

Return Team.Dead and RoleTypeId.Spectator

#

Oh fuck you

#

Why are some of the SCP DamageHandlers not ScpDamageHandler 😭

#

Bffr

upper vapor
#

Because

upper vapor
#

Dictionary lookup?

slate flume
upper vapor
#

Okay

slate flume
#

You just make sure that CurrentRole returns your fake RoleBase

#

Bing bang boom

upper vapor
#

That really is fake Kek

slate flume
#

It works tho

upper vapor
#

Does it work for non-spectator roles?

slate flume
#

No clue

upper vapor
#

Probably not

slate flume
#

I only did it like that because some places in the code check if RoleBase is SpectatorRole

#

Pain in my fucking ass

#

You can problem get away with just patching Team and RoleTypeId for non-spectator roles

restive turret
#

Lel prob requires some stuff from specrole

slate flume
#

You'd think so

#

But no :)

#

At least half the cases don't

#

Some of them might?

#

But there's a lot of

restive turret
#

How would i know, i don't know every code from my mind

slate flume
#

If you haven't memorized the entire codebase you're a disgrace to your kind

restive turret
#

I barely even know what i ate yesterday

upper vapor
slate flume
# upper vapor just call the method in ADH (works with transpilers only)
[HarmonyPatch]
public class CassieScpFriendlyFire : CustomEventsHandler
{
    public static IEnumerable<MethodBase> TargetMethods()
    {
        yield return typeof(ScpDamageHandler).PropertyGetter(nameof(ScpDamageHandler.CassieDeathAnnouncement));
        yield return typeof(Scp049DamageHandler).PropertyGetter(nameof(Scp049DamageHandler.CassieDeathAnnouncement));
        yield return typeof(Scp096DamageHandler).PropertyGetter(nameof(Scp096DamageHandler.CassieDeathAnnouncement));
        yield return typeof(Scp3114DamageHandler).PropertyGetter(nameof(Scp3114DamageHandler.CassieDeathAnnouncement));
    }
    public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) => [
        CodeInstruction.LoadArgument(0),
        new CodeInstruction(OpCodes.Call, typeof(AttackerDamageHandler).PropertyGetter(nameof(AttackerDamageHandler.CassieDeathAnnouncement))),
        new CodeInstruction(OpCodes.Ret)
    ];
}

It's fixed now GoodOne

slate flume
#

I did not want to have to deal with the alternative

upper vapor
upper vapor
#

me when i just type Return (static using)

#

imagine a source generator that translates modified C# code into a transpiler

#

-# oh the edge cases

icy knoll
#

ax you think too much

#

im putting you in the cryotherapy chamber

restive turret
#

Good luck on source generators I hate them

#

*writing it

#

I kinda more better writing a weaver than scr gen

icy knoll
#

i understand the point of source generators right, but do i want to willingly submit to torture? fuck no

restive turret
#

I wrote one for generating ini file parser

upper vapor
upper vapor
restive turret
#

Searched 5 forums, asked AI to tell me what the actual fuck is that shit, had 2 headache when looking at it

upper vapor
#

ngl the source generator code i've written is absolute dogshit

#

i really wanted to force tokenized generation on myself

#

instead of using string templates

restive turret
#

Stringbuilder

icy knoll
#

StringBuilder is the goat

upper vapor
#

absolutely not

restive turret
#

Then what

upper vapor
#

i'm talking typed tokens

restive turret
#

Bro i never touched that how would i know what u mean

upper vapor
#

let me show

restive turret
#

Do i have a magic power to know what u think Fear

#

(that would be great and not great at the same time)

upper vapor
#

this just to generate { get; }

icy knoll
upper vapor
#

this is what the compiler sees when it looks at your code

icy knoll
#

hmm

restive turret
#

Wtf is that

#

Looks soo overcomplicated

upper vapor
upper vapor
#

this turns [Aliases(whatever here)] into public string[] Aliases { get; } = whatever there;

#

if whatever here is null or empty, it'll be public string[] Aliases => Array.Empty<string>();

upper vapor
# upper vapor

@slate flume what do you think of the expressiveness of this xd

hearty shard
#

one day ill do source generation

restive turret
#

Nah

hearty shard
#

i mean

#

i could do this for the uhhh

#

secretapi command tool

#

extender?

#

whatever

#

many words

true cedar
hearty shard
true cedar
#

im stating the truth

hearty shard
#

nuh uh

hollow pewter
#

any idea why destroying a dummy through mirror doesn't remove them from the player list?

#

it works that way base game

upper vapor
hollow pewter
#

basically a creeper

#

there might be a more efficient way to handle it but i'll probably rewrite it later

#

wait i might know, i forgot to remove something

#

mayhaps

#

okay that was it

#

it just spawned two dummies

upper vapor
#

Lmao

#

Double trouble

hearty shard
#

guh

unique crane
hearty shard
cyan crown
#

anyone here got the memory leak from unity 6.2

cursive cypress
#

is the plugin repo down?

#
#

wrong channel oops

unique crane
upper vapor
#

Idk if I've had a memory leak but I've definitely had a shit ton of crashes

#

Maybe 2 memory leaks in the past few weeks

#

But >=10 crashes every day

cyan crown
#

Yeah same i had like 3 crashes recently

#

I might move to unity 6.3

upper vapor
cyan crown
#

I saw they upgraded some bloom filters

cyan crown
upper vapor
#

They have ai now

upper vapor
#

6.2 is no longer supported btw

cyan crown
#

I haven't read all the changelogs for it i only saw bloom changes

upper vapor
#

It's cooked

#

I'd move to a different engine if I could

cyan crown
#

Yeah im looking into flax engine or something else in the time being i might stick to unity

#

I checked the changes there is no mention of AI for 6.3

#

Its only some other stuff like multiplayer and 2D stuff and now you can disable physX sdk as well

cyan crown
#

I should've bought the 128gb ddr5 rams earlier :"(

upper vapor
#

Blud thinks he's cyn

cyan crown
#

that shit is worth like a house rn

upper vapor
cyan crown
#

Yeah im still broke

#

This will probably affect server hosting in long term

#

Or even game development

upper vapor
#

The car is crazy

cyan crown
#

Yeah Cyn is rich now

#

Congrats

#

Having rams is like bitcoin now

upper vapor
#

I'd also be rich had I not eaten it all

static meteor
#

Huh you can edit the csproj in VS 2026

grand flower
#

You couldn't before?

static meteor
#

I swear you couldn't before

upper vapor
#

You always could

#

You just had to click edit or something

upper vapor
grand flower
#

wouldn't know haven't used VS in like 4 years

upper vapor
#

Relatable

#

Relay table

terse bone
# static meteor I swear you couldn't before

VS doesn't allow direct editing of .csproj when the build system is MSBuild - you have to unload the project before editing (idk if it's still the case in VS 2026)
Here you use NET.Sdk and it can be editied directly

#

Just read that it's the style of project that changes, not the build system

upper vapor
#

How are so many people still using it

#

(Both VS and old framework-style projects)

restive turret
tribal dagger
#

before i discovered that rider had the same feature

#

now im ridermaxxing

upper vapor
tribal dagger
#

why doesnt a text toy in front of another always block the one behind?

#

under some angles the one in front seems to be behind

#

i assume it has something to do with rotation

#

but these dont rotate on their own

#

depth buffer fuckup?

upper vapor
#

move one forward

tribal dagger
#

.1 of separation for anyone curious

upper vapor
#

oh

#

umm

#

probably some tmpro bs

tribal dagger
#

lovely

upper vapor
#

i know it gets very wonky after like 10k units but not at 300

tribal dagger
#

i assume smth like this is happening

upper vapor
#

ah yes, depth sorting

lone harness
#

i maked this : LabApi.Features.Wrappers.Cassie.Message("customcassie mtf", playBackground: false);

#

how to disable subtiles and glitch effect

upper vapor
#

isSubtitles: false

lone harness
upper vapor
#

also, what do you mean by glitch effect?

lone harness
upper vapor
lone harness
#

wait

#

1s

upper vapor
#

what's the cassie message you're sending

#

if you have .g1 and stuff like that then remove those

lone harness
#

have not .g1... .g2 ect

#

its only a anounce : "customcassie mtf"

upper vapor
#

describe "crick"

#

i don't see a playBackground parameter in Cassie.Message

lone harness
#

u puted this : LabApi.Features.Wrappers.Cassie.Message("customcassie mtf", "", isSubtitles: false,);

#

and he said : expretion term ) not valid

lone harness
upper vapor
upper vapor
lone harness
#

send u a reacord with the crick

upper vapor
#

i don't understand what that means

lone harness
#

when the cassie anounce is here there is like electrical sound

#

like zip

#

zip

upper vapor
#

can you record it for me?

lone harness
#

soon

upper vapor
#

aight, be sure to ping me

lone harness
#

@upper vapor

upper vapor
#

why not cancel the announcement

lone harness
upper vapor
lone harness
#

cause i'm using exiled

#

and exiled have labapi. (ect..)

#

just help me with LabApi.Features.Wrappers.Cassie.Message

Cause i need it for mor than 40+ anouncement

upper vapor
#

well, Cassie.Message shouldn't add any glitches

#

soooo

#

ummmm

#

soooo

#

set glitchScale to 0

#

that should fix it

lone harness
#

and for subtiles

#

cause issubtiles make an error

upper vapor
#

customSubtitles = null

#

perhaps

lone harness
#

so why he doing an error at ) ?

upper vapor
#

read the error

lone harness
#

so the problem is the ","

#

thanks for help

upper vapor
#

yes

#

np

lone harness
#

im going to see if it work :p

#

+rep @upper vapor

upper vapor
#

it should (99.9999%)

lone harness
#

no +rep TvT

upper vapor
#

dunno why the glitch scale was set to 1 by default, i'm pretty sure it just used to send the message as it is

#

breaking changes SteamHappy

lone harness
#

@upper vapor

#

continue d'ont work

upper vapor
#

huh

lone harness
#

LabApi.Features.Wrappers.Cassie.Message("customcassie mtf", glitchScale: 0, customSubtitles: null);

upper vapor
#

um

lone harness
#

also sound continue

upper vapor
#

hold on let me test

lone harness
#

ok

hearty shard
#

also

#

apparently nvidia is gonna pull the plug on a lot of GPUs

hearty shard
#

what

lone harness
#

play at wii U

upper vapor
#

what the fuck did i get back to

#

-# i was taking a dump

lone harness
#

Think if he d'ont work its a bug

upper vapor
#

okay

#

so

#

new CassieTtsPayload(message, false, false)

lone harness
#

due to last scp:sl version

lone harness
hearty shard
upper vapor
#

then you don't need customSubtitles

upper vapor
upper vapor
#

same

lone harness
#

i d'int find anithing about CassieTtsPayload

hearty shard
#

can u give me

#

the source of your source generator thing

#

Teehee

upper vapor
hearty shard
#

:c

upper vapor
hearty shard
upper vapor
#

Lazy

hearty shard
#

damn

lone harness
#

just i add using ?

#

just i put this ? : new CassieTtsPayload("message", false, false);

upper vapor
hearty shard
#

ax ive done SOMETHING

#

um

#

i dont wanna talk about the code behind it

upper vapor
#

Crazy

hearty shard
#

how does one check for partial

#

hmmm

true cedar
hearty shard
true cedar
#

by comparing to YOU

lone harness
upper vapor
lone harness
#

^p^

upper vapor
#

The compiler will yell at the user

hearty shard
#

i see

upper vapor
hearty shard
#

hooray!!

#

i dont wanna talk about the code for it

upper vapor
#

You probably shouldn't specify the accessibility modifier in the generated code

upper vapor
#

The user will set it themselves

hearty shard
#

ur so right

upper vapor
#

You shouldn't cause a conflict

hearty shard
#

whoops

hearty shard
#

um

upper vapor
#

"private public class"

hearty shard
#

didnt realize

#

i never use partial classes 😭

upper vapor
#

Lmao

hearty shard
#

i dont even wanna commit this code

#

hmmm

true cedar
hearty shard
#

be quiet

#

@upper vapor do you like

#

the top

#

ignore the bottom...

true cedar
#

i think we ought to exsanguinate eve

hearty shard
#

ur literally bald

lone harness
#

didnt undrstand for the announce TvT @upper vapor ;-;

true cedar
unique crane
#

Yeah can we like deport Eve

hearty shard
#

guh...

unique crane
#

Ive been asking for that for at least a year now

true cedar
#

all in favor of killing eve

#

say i

#

i

#

@unique crane

upper vapor
unique crane
#

Nah don't kill her

#

Just deport to some report island

#

In middle of pacific

upper vapor
#

Atlantis

#

Under the sea

hearty shard
upper vapor
hearty shard
#

idk what im doin

unique crane
#

Idk what that word means either

upper vapor
true cedar
upper vapor
#

Bruh

unique crane
#

But defenestration is surely better

upper vapor
#

Ok furry

hearty shard
#

woah...

upper vapor
true cedar
#

exsanguinate means to drain someone of their blood

unique crane
upper vapor
upper vapor
hearty shard
unique crane
#

Oki :3

true cedar
#

well i was thinking we could do like

#

bloodletting

upper vapor
true cedar
#

BUT ALSO WTF DOES ME BEING A FURRY HAVE TO DO WITH KILLING WVE

#

EVE

upper vapor
#

Not sure if it's any better ngl

unique crane
upper vapor
hearty shard
#

sort of?

#

but

#

i think the current one is fine

#

its just writing the code itself thats the problem

upper vapor
#

Yeah uh

#

Hah

#

Yeah

hearty shard
#

which is why i asked for your code lel

upper vapor
#

Why not use string format

upper vapor
hearty shard
#

yea well im building this for the case of like

#

if i need to add to it

#

its easy to

#

rather than like all of it in 1 string format 😭

true cedar
upper vapor
#

It's hundreds of lines

#

For 1 command

upper vapor
unique crane
hearty shard
#

its why i ask lel

true cedar
upper vapor
true cedar
#

oh is this ur command framework?

upper vapor
#

Nah

#

It was for testing

#

A new one

#

But I scraped it cuz it's genuinely horrible to look at

true cedar
#

i wanna make my own

#

it would be so awesome

upper vapor
#

It's nice and ugly af

true cedar
#

the greatest command framework ever imagined perhaps

true cedar
#

it would abuse the shit out of attributes

upper vapor
#

Mhm

true cedar
#

unfortunately i am very busy and also i dont wanna use c#

upper vapor
#

You have a skill issue

true cedar
#

you have a

upper vapor
#

It's right here

#

Isn't that nice?

upper vapor
#

most likely

true cedar
# royal mica

wrong because mine will be so unbelievably amazing in every way

restive turret
hearty shard
tribal dagger
#

UsableItemsController.GetHandler(plr).ResetAll();
why doesnt this remove the 268 coolown?

restive turret
#

prob because it also using GlobalItemCooldowns?

hearty shard
#

@upper vapor teehee

#

this is the worst shit ever

upper vapor
#

why do you have a separated method

#

you can just make execute abstract

#

it has literally the same signature

hearty shard
#

thats me being stupid lel

upper vapor
#

no subtitles, no background noise, no glitches

#

thouhg, why do you need a cassie announcement if you have it fully custom?

hearty shard
#

i regret doing what im doing

hearty shard
#

i dont think doing this in the string way is good way

#

😭

#

i genuinely think your way is better, if not a simpler version

upper vapor
#

how many lines for your command generation

hearty shard
#

i mean

#

this is all it does rn

upper vapor
#

i meant the source gen code

hearty shard
#

118 lines of extension for the writing

#

95 for the source gen file itself

#

the generate method is a lot smaller tho

upper vapor
#

mine is 78 + 221 + 137 lines

hearty shard
#

guh

upper vapor
#

for properties and execute

#

property generator + execute generator + extensions

hearty shard
#

yea ngl i wouldnt be opposed to doing smth similiar 😭

upper vapor
#

arguably it has more features

hearty shard
#

well

#

not because i wanted the exact, but if ik how u do it, i can probably do it in a cleaner way...

upper vapor
#

i have attributes that specify properties so you don't have to override

#

then the execute method

hearty shard
#

gulp

upper vapor
#

and it builds tokens instead of stringbuilder or whatever

hearty shard
#

how does tokens actually work

hearty shard
#

thats it

upper vapor
#

use this to see tokens

hearty shard
#

guh

upper vapor
hearty shard
#

but i like it!

warped prairie
onyx solstice
#

How turn off the noise while the cassie is broadcasting?

upper vapor
onyx solstice
#

?

upper vapor
#

you don't have the bools outside of the string

onyx solstice
#

nothing.,..

upper vapor
#

right, you're probably using it from nuget (which hasn't been updated)

upper vapor
#

you can either switch to directly referencing labapi or using Message("whatever", isNoisy: false)

onyx solstice
upper vapor
#

it's where the other references are

#

dedicated server
SCPSL_Data/Managed folder

tulip kiln
#

Did anyone find a workaround for the VC issue where people going up an elevator are not heard anymore?

#

Or like, when using radios too.

swift nexus
#

at least when using radios

tulip kiln
#

I am aware of that

#

Was just wondering if anyone knew of a workaround which could lessen its impact

boreal snow
# hearty shard

could have jst done throw new NotImplementedException(); but that works too.

unique crane
boreal snow
#

I mean... if it works, it works. ¯_(ツ)_/¯

boreal snow
#

The amount of errors.......

#

I regret even attempting to compile NWAPI

carmine prawn
#

omg nwapi

lone harness
#

how to disable mtf entrance and chaos entrance anouncement

slate flume
#

More time, but generally better quality

upper vapor
#

^^^^

slate flume
#

Sometimes it takes less time to just make it yourself because you're now dumping your time and energy into un-obsoleting an obsolete plugin framework 😭

#

You have to question if this is genuinely the best route here man

#

Trying to save yourself time and effort may just be having the effect of costing more time and effort

upper vapor
slate flume
#

Having to read the docs~

#

🤮

upper vapor
#

you don't need to read the docs if there are noneshrug