#plugins-dev-chat

1 messages · Page 58 of 1

slate flume
unique crane
#

use this

#

@slate flume

restive turret
#

IDummyActionProvider

unique crane
#

And then AddEntry

restive turret
unique crane
#

Thats what the code does

slate flume
#

Oh shit

unique crane
slate flume
#

So I need to go under the uh IDummyActionProvider and look at Inheritors

#

And find code

#

?

#

I'm bad at C#

restive turret
# unique crane

And now you can check what the AddEntry is doing here, or what are rhe _registeredAction

slate flume
#

Oh I see

restive turret
#

Probably easier to find something that not complex

unique crane
restive turret
#

Like looking in fpc

unique crane
#

This is per item

#

so you go

slate flume
#

That's all done

#

I did that ages ago

unique crane
#

Firearm.DummyEmulator.AddEntry(...)

slate flume
#

Bet

#

@unique crane I love you

restive turret
unique crane
#

wdym

restive turret
#

Oh nvm this guy using it

unique crane
#

The AddEntry is just

#

the function that gets called when you click the button in RA

restive turret
#

I through he wants to get rid of those unnecessary calls for the cache

unique crane
#

Well thats what you do

#

If you do this

#

YOu just call the function that is supposed to call when you click the RA button

restive turret
#

Or just call do whats inside those calls

slate flume
restive turret
#

You can code some extension for yourself

slate flume
#

I don't

#

Know what code is in those actions

restive turret
#

Parse the dummy to a class , and you can just call smth like.

DummyClass dum = new(dummy.ReferenceHub);
dum.Select(0);
dum.Fire();

slate flume
#

I feel so stupid rn

slate flume
#

I just

#

Am lost

restive turret
#

Hi lost

#

Have you found the Look Vertical thing?

#

Easier to search that

slate flume
#

I don't need to

#

I already do movement using the motor and shit

restive turret
#

then go into motor and study how it populates the action

slate flume
restive turret
#

Or in MouseLook, or in FpcModule

#

Congratulations, now you can see and go to other place where kind of the same getting called

#

For example items

#

Like medkit

slate flume
#

But

#

There's no PopulateDummyAction

#

Nor is there one under consumable

restive turret
#

Then inside consumable

#

Then inside the base?

#

Search until you find that

slate flume
#

UsableItem!

#

Baller

#

Let me try for guns

#

Okay this one isn't going as well

restive turret
#

Congratulations, now you doesn't need to call that action, but you have to somewhat make your own one with calling
UsableItemContiller.Sevreremulatemesssge stuff with the right data, also, as you see it must be equiped so you have to do additional checks

slate flume
#

Ofc ofc

restive turret
slate flume
#

Firearm has nothing so I checked ModularAutosyncItem which also has nothing so I checked AutosyncItem which has

#

Which gets from this

#

Dummy key emulator has this

#

So I need to find

#

The actionadder

#

But idk where it is

restive turret
#

Check inside the registeredlistener

slate flume
#

That's just

restive turret
#

Search where its populated

#

Basically where its called.Add or .AddRange

slate flume
#

So

slate flume
restive turret
#

Finally
Yey

#

ServerSelectItem

#

And check others probably somehwee exists

slate flume
#

I won't lie I'm very lost as to where I can ascertain the shoot action

restive turret
#

Search "Shoot" as a string

#

Or just as an "All type" in dnspy

slate flume
#

I am

#

Working in dnspy

#

I've never actually done this before lmao

restive turret
#

I am waiting for my dinner

restive turret
slate flume
#

I searched for Shoot as a number/string in Assembly-CSharp and got 4 hits

#

None of which are actually useful

#

At least for these purposes

#

Which sucks because the only thing I use dummy actions for is Shoot/ADS/firearm BS

spare zodiac
#

hey, how can I get this action through code, so I can access it directly then using commands?

Server.ExecuteCommand($"/dummy action {npc.Id}. Motor Walk_forward_1.5m");
restive turret
slate flume
#

If you're trying to get a dummy to move you can just

spare zodiac
slate flume
#

This code kind of sucks ass

#

But it works

#

The basis is this

slate flume
#

I'm flabbergasted

spare zodiac
restive turret
#

Huh

restive turret
slate flume
# spare zodiac is this the meta?

If you want to adjust the dummy right relative to the dummy's look rotation I believe you'll need to adjust the Vector3.right to be relative the camera

#

Otherwise you've got it

spare zodiac
restive turret
slate flume
#

1000%

#

Shoot is what I use

restive turret
#

Then search hold

slate flume
#

👍🏼

restive turret
#

Can be in fireaem module

#

*could

slate flume
#

Brings me back to DummyKeyAction

restive turret
#

Registered listeners

#

Usage

#

Used by or idk

slate flume
#

It's populated in GetAction()

#

From earlier

restive turret
#

Your mom

slate flume
#

GetAction is used here

restive turret
#

Check the enum

slate flume
#

What one

restive turret
#

ActionName

slate flume
restive turret
#

Action 0 is shoot nice

#

So check where actionname used

slate flume
#

There's more down though

restive turret
#

Finally

#

Then now go into what should be the shoot

slate flume
#

Well the only relevant one is ToggleableReloaderModule

#

Which has this

restive turret
#

Look inside then

slate flume
#

Using this

restive turret
#

Nope

#

That's not it

upper vapor
#

look at the implementaitns if IDummyActionProvider

slate flume
#

The Inheritors?

restive turret
#

I guess

slate flume
#

Firearm : ModularAutosyncItem : AutosyncItem : IDummyActionProvider

restive turret
#

Some modules might have them

restive turret
slate flume
#

Firearm nor ModularAutosyncItem has dummyaction shit but Autosyncitem does

#

It's just not what we're looking for

#

This is all very confusing

restive turret
#

Just search where you would call .Fire or .Shoot in module

slate flume
#

Wdym

upper vapor
#

click the method

#

right click, go to -> implementations

slate flume
upper vapor
#

the decompliled one

#

the editor

slate flume
restive turret
upper vapor
slate flume
upper vapor
slate flume
restive turret
#

Use dnspy rather then rider for decomp

#

!!

slate flume
restive turret
#

Ah

upper vapor
#

not much faster shrug

#

i press ctrl+t and boom

restive turret
#

Atleast i know what to say to search

upper vapor
#

that's all we have

upper vapor
slate flume
restive turret
#

I don't use rider

slate flume
#

This is why I just called the dummyaction instead of pinpointing where the hell the shoot code is

#

I have no fucking clue where this BS is

slate flume
restive turret
#

Check for exiled shooting?

#

Wait

#

Lapabi has a shooting event

#

Or shot

#

Search where used

upper vapor
#

bruhhhhhh

#

nvm

#

same shit essentially

#

ItemSerializedDummyAction uses UnityEvent...

#

not surprised

slate flume
#

I have no idea how to search for where LabAPI events are called

upper vapor
#

constructor

#

find usages

restive turret
upper vapor
#

or go in PlayerEvents, ServerEvents and see where the method is called

restive turret
#

Inside playerevents

#

Search for OnPlayerShooting

#

Or idk the exact naming

#

And search where it's being used

#

Either vis rider or dnspy

slate flume
#

Bet

#

Oh it sucks ass

restive turret
#

Nice now well

slate flume
#

So hypothetically speaking

#

I just call UpdateServer()

#

On the AutomaticActionModule

#

That I can get from the firearm

#

But wait I need queue

restive turret
#

AAM has some sort of method for shooting

#

Isnt it

slate flume
#

Oh

#

ServerShoot

#

Lmao

restive turret
#

Mf

slate flume
restive turret
#

So search where that being used

slate flume
#

Only used in ServerUpdate

restive turret
#

Or smth search isnide that module where a dummy stuff would be

#

Im gonna crash out tbh

slate flume
#

Me too bro

#

I'm taking a break to get breakfast

#

I'll be back in a few

restive turret
#

I be home at 17

hearty shard
#

@unique crane david

#

do you have example on getting the frames for AudioTransmitter

upper vapor
#

wdym

hearty shard
upper vapor
#

"getting the frames"

hearty shard
#

yk what i mean!!!!

upper vapor
#

i don't

hearty shard
#

samples

upper vapor
#

"getting" as in monitoring the output?

hearty shard
#

for AudioTransmitter to pla y

upper vapor
#

bruh

#

this finally makes sense

hearty shard
#

alright copy paste time

upper vapor
#

please don't tell me you're gonna put that in secretapi

upper vapor
#

okay

upper vapor
#

or does your use case not fit it?

hearty shard
#

i dont like relying on others to maintain stuff for me

upper vapor
#

SecretAPI toomuchtrolling

hearty shard
#

i dont use secretapi

#

lol

upper vapor
#

but people have to rely on you to maintain it

hearty shard
#

true

upper vapor
#

also AudioPlayerApi probably won't break

hearty shard
#

it do be like that for libraries unfortunately

upper vapor
#

the reading part at least

#

i guess you can get inspired

icy knoll
#

only time audioplayerapi will break is if you didn't read the very simple readme or northwood breaks the speaker toy

upper vapor
#

they're not gonna break the wrapper, right? right..?

upper vapor
upper vapor
#

it's just... weird

#

you don't want to use other people's stuff but you advertise yours to others
don't get me wrong, SecretAPI is good, this just catches my eye

hearty shard
#

im not relying on SecretAPI
thus my "i dont want to rely on others" is still working fine

hearty shard
hearty shard
#

i will replace all 3 at some point

upper vapor
#

okay, fair

slate flume
#

I have two dependencies currently

hearty shard
#

if i can avoid relying on someone else by using my own knowledge, isnt that better?

upper vapor
#

for audoi reading, no biggie

#

but reinventing cedmod MonkaS

#

kinda a good idea actually

hearty shard
#

and wouldnt be public probably

upper vapor
#

dam

slate flume
hearty shard
#

or am i schizo

slate flume
hearty shard
#

uh oh

slate flume
#

But I have enough passable knowledge to do the things I need to do

upper vapor
#

half of servers reinventing cedmod...

upper vapor
hearty shard
#

or steam

upper vapor
#

true

#

but

hearty shard
#

a lot of servers just prefer handling their stuff themselves

upper vapor
#

handling the users in your db is still a thing

upper vapor
#

not a good reason but

icy knoll
#

im planning on doing a 100% public version of cedmod eventually

slate flume
upper vapor
#

probably bc they self host it

icy knoll
#

fully open source

#

i just need the time

#

plugin will probably take the least time, website will take the most

#

database structures too...

slate flume
# hearty shard werent u a beginner

I mean I have enough knowledge to do things like make my own custom items and interface with local files in order to store a database to keep stuff persistent between rounds

upper vapor
#

time for a relational database

slate flume
#

I just don't have a lot of experience with NW code

icy knoll
#

which is very good

upper vapor
icy knoll
#

does auth

upper vapor
#

are you gonna provide on-premises solutions so hosts that are really concerned with privacy can host the lumimod on their own?

icy knoll
#

database

#

and stuff

spare zodiac
slate flume
#

I'll show you my code

icy knoll
#

ax you assume that i dont make my stuff easy to host

spare zodiac
slate flume
#

@spare zodiac

icy knoll
#

i like people having freedom with my AGPL-v3 license :3

upper vapor
slate flume
#

It essentially just checks through the strings until it finds what you're looking for

#

If you need to invoke an action, find the name in the RA panel and throw it in there and it'll do it

#

You don't need the commented BS that was just old testing

#

I added the parent argument so that if you need to invoke an action on a specific item, you can put the item in first and it'll invoke the action for that item

icy knoll
# icy knoll i like people having freedom with my AGPL-v3 license :3

the license choice is very ironic here because it means that if ur fork is going to be used online at all, your fork must also be open source, and i do this for all my stuff, especially sl plugins because that means all forks of my sl plugins need to be open source as they are all technically online because players can use them :3

slate flume
icy knoll
#

ill give you the option to either link ur instance to the main website or be able to host ur own main website if you like that idea

icy knoll
slate flume
#

I get errors in the console every day lol

upper vapor
#

i use LGPL cuz uhhhhh

#

that's what i decided

icy knoll
#

fair

#

well

upper vapor
#

i'm fine with the project being used in proprietary (scary word) systems in its original form
also, it turned out that LabAPI is LGPL so another plus

icy knoll
#

if anyone wants to help me with this in any way and help motivate me to get started, ill heavily accept it. i really just need a name for the project...

upper vapor
#

now i'm trying to figure out how to give proper attribution to the MIT-licensed libraries i use 😭

icy knoll
#

me when cedric will have legal grounds to sue me 😭

upper vapor
#

then

#

Lumid

icy knoll
#

right

#

that's it

#

ax

#

to the void you go

hearty shard
#

mid

upper vapor
#

i'm already in the void

spare zodiac
icy knoll
#

eve why did you put ax in the void

upper vapor
#

LuminousI

unique crane
#

Me when Lumi's server suddenly disappear after she releases Lumod

hearty shard
#

me when david vanishes

icy knoll
#

me when

slate flume
#

If you need any other help just lmk

spare zodiac
slate flume
spare zodiac
#

Server.ExecuteCommand($"/dummy action {npc.Id}. {npc.CurrentItem.Type}_(ANY) Shoot->Hold");
TryInvokeDummyAction(npc.ReferenceHub, "Shoot->Hold");

restive turret
#

When i be home I gonna make a dummy extension for you

slate flume
#

TryInvokeDummyAction(npc.ReferenceHub, "Shoot->Hold", $"{npc.CurrentItem.Type}");

restive turret
#

so you all be happy

spare zodiac
slate flume
slate flume
#

So when the game lists actions it does it like
"Item1"
"Action1"
"Action2"
...
"Item2"
"Action1"
"Action2"
...

#

Without a parent argument it grabs the first action matching the action you specify

#

With the parent argument it first matches for the item eg. "Item1" and then finds the action

spare zodiac
slate flume
#

I would make it an extension method if I used it outside of one non-static class

spare zodiac
#

I would not get it working without @slate flume

slate flume
#

Happy to help haha

#

As a note @spare zodiac , I made it TryInvoke in case the action doesn't exist
That way you can use it as part of an if statement

#

So like in my code I have my dummy stop shooting, and if he can and it works, he also stops zooming, and starts a small delay

slate flume
#

That works :)

spare zodiac
#

but it seems the thing isn't working

slate flume
#

Interesting

#

So it doesn't work to stop shooting?

#

If you're trying to start shooting you wanna do

spare zodiac
#

My whole thing basically works like this

slate flume
#

Let me take a look at something rq

covert flame
#

Is there a way to shoot a raycast and then get the position of the pooint it collided with something?

spare zodiac
slate flume
#

Parent only makes it so you get to specify which weapon

slate flume
#

I don't use it in my code because my dummies never have more than one gun

#

And also you have to have a gun equipped in order to have the shoot action for it iirc

covert flame
slate flume
#

So it doesn't really require you to have a parent because you'll be firing the current item anyways

spare zodiac
#

yeah it equips the gun automatically so I don't really have to specify, do I?

restive turret
#

So can I say y'all will be my dummy?Fear

slate flume
#

Then you just get the hit.point

spare zodiac
# covert flame Is there a way to shoot a raycast and then get the position of the pooint it col...

Raycast

public static bool TryGetRaycastHit(this UltimatePlayer player, float maxDistance, out RaycastHit? hit)
    {
        hit = null;
        if (!Physics.Raycast(player.LabApi.Camera.position, player.Exiled.CameraTransform.forward, out var raycastHit,
                maxDistance, ~(1 << 1 | 1 << 13 | 1 << 16 | 1 << 28)))
        {
            // Out of range
            return false;
        }

        hit = raycastHit;
        return true;
    }

then hit.Point will get what you need

restive turret
#

Raying on my cast

spare zodiac
slate flume
#

Haha

spare zodiac
#

btw did you work with navmesh?

slate flume
#

I have not as of yet

upper vapor
slate flume
#

Haven't had a need for full-fledged NPCs

spare zodiac
#

alr, trying to find a way to make navmesh work in HCZ, because it's fucked up for some reason

upper vapor
# covert flame Could I have a bit more than that??

use Physics.Raycast, give it an origin and the direction (also a max distance)
you get an out RaycastHit hit which contains all information about the hit, including the hit point, collider, normal vector

restive turret
slate flume
#

My code works

#

Unless you mean a dummy extension method for something other than invoking actions?

spare zodiac
#

I would love more extensions that I can ctrl+c, ctrl+v Trolley

restive turret
#

Still invoking Invoking dummy action

slate flume
restive turret
#

You still invoking the dummy action instead of calling the actual action

slate flume
#

And the ADS action

restive turret
#

That's what my plans are

slate flume
#

And the reload action

restive turret
#

When im home

spare zodiac
#

yeah I tried finding shoot action 2 days ago and didn't find anything

slate flume
#

^

#

Sucks ass

restive turret
#

1 hour (and ~30m) then i be heading home

slate flume
#

Sucks major butt

spare zodiac
#

like 40 minutes spent until someone told me to just use commands

slate flume
#

Yeah I spent like an hour combing through code before I just decided to go with the existing BS

restive turret
#

Use deez nuts

slate flume
spare zodiac
#

yeah also @ me

slate flume
#

So @spare zodiac how are you doing navmeshes rn? I'm thinking about doing my own and I'm a little curious

spare zodiac
slate flume
#

Interesting

#

I'll be taking a look

upper vapor
#

[SerializeField]
int m_Area;
public int area
you can do

[field: SerializeField]
public int Area { get; set; }
restive turret
#

Skill issue

spare zodiac
#

also the coroutine (author: ChatGPT):

public static IEnumerator<float> WalkNpcViaMotorNoRotate(Npc npc, Vector3 target)
        {
            // Grab their FPC so we can use the motor
            if (!npc.Role.Is(out FpcRole fpcRole))
                yield break;

            // Compute the NavMesh corners
            var path = new NavMeshPath();
            if (!NavMesh.CalculatePath(npc.Position, target, NavMesh.AllAreas, path) ||
                path.status != NavMeshPathStatus.PathComplete)
                yield break;

            const float stoppingDistance = 0.2f;
            const float stepDistance = 3f * 0.05f; // speed (3m/s) * tick (0.05s)

            int cornerIndex = 0;

            while (cornerIndex < path.corners.Length)
            {
                // keep same Y so we don’t try to fly
                Vector3 corner = path.corners[cornerIndex];
                corner.y = npc.Position.y;

                // step toward this corner until within stoppingDistance
                while (Vector3.Distance(npc.Position, corner) > stoppingDistance)
                {
                    Vector3 dir = (corner - npc.Position).normalized;
                    Vector3 nextPos = npc.Position + dir * stepDistance;

                    // feed that into the motor
                    fpcRole.FirstPersonController
                           .FpcModule
                           .Motor
                           .ReceivedPosition = new RelativePosition(nextPos);

                    yield return Timing.WaitForSeconds(0.05f);
                }

                cornerIndex++;
            }
        }
upper vapor
#

m_ and s_ is such a weird naming convention

#

you don't even need explicit backing fields

#

i guess the backing field is good to know what the serialized field name will be

#

but for non-unity properties..

#

at least it's consistent, so that's good

hearty shard
#

or maybe it was C

#

i dont remember

upper vapor
#

C++

#

also, hungarian notation ClassD_Hollow

spare zodiac
slate flume
upper vapor
#

when
new RelativePosition(npc.Transform.TransformPoint(dir.normalized * distance))

slate flume
upper vapor
#

i know

#

it uses the gameobject's transform

#

which is only rotated on the Y axis

#

(left and right)

#

and it accounts for scale, which may or may not be what you want

#

bigger npc = faster

slate flume
#

That's why it's like that

upper vapor
#

oh that's nw code

slate flume
#

Yep

upper vapor
#

fair

slate flume
#

If it works for them, it works for me -type shit

unique crane
#

Player is simply moved towards the received position on the server

#

Shouldnt matter that much if its few meters difference on Y level

upper vapor
#

at that point can't you just set position directly?

#

seems to be a bit of a waste to create a relativeposition for that

unique crane
#

Well ReceivedPosition is what the server will move you towards

#

with your walkspeed

upper vapor
#

oh

restive turret
#

30ish min and going home to sleep for 2 hours and do nothing

random scaffold
#

slejm moment

restive turret
#

NICE so this thing just not how it supposed to work in normal understanding

#

@slate flume
Basicly.
What this thing do is when the game checks if the "Shoot" is pressed it will check if its a dummy, if yes it checks inside the DummyKeyEmulator where, basicly just runs the event that make it shoot.

so.
Game check if shoot pressed
In DummyKeyEmulator checks if the action is in the Queue.

How to run action:
the ActionCommand (Or inside the DummyActionCollector) runs the desired action you wanna run.
Basicly if you want firearm to shoot:
firearm.DummyEmulator.AddEntry(ActionName.Shoot, true); // Shooting 1 bullet (Shoot->Click)

restive turret
#

so complicated for nothing 😭

spare zodiac
restive turret
#

its private

restive turret
unique crane
restive turret
#

so complicated for nothing

unique crane
#

This is done on top of system

restive turret
#

could just populate it with "this.Shoot"

unique crane
#

that wasnt designed for it

spare zodiac
#

why is so many things privated anyway?

restive turret
#

¯_(ツ)_/¯

#

dont ask me

#

but DummyEmulator should be public tbh

spare zodiac
restive turret
#

nvm everything in there is mostly private too

#

😭

unique crane
#

Make git issue about for adding wrapper for this

restive turret
#

wdym?

#

wrapper to dummies?

unique crane
#

Yeah for these actions I guess

restive turret
#

I guess

#

if you wanna work on it mayhaps

unique crane
#

no

restive turret
#

wdym no

#

you work there

spare zodiac
restive turret
#

create a pr ClassDTroll1

spare zodiac
unique crane
#

There surely are more fun things to do

restive turret
#

ye like?

unique crane
#

Mmmmmmm

restive turret
#

adding more events

unique crane
#

better firearm modding

#

Thats fun

spare zodiac
#

system for basegame textures on primitives

restive turret
#

ye cant wait to get a Rifle Bipod so can i add it into my revolver

random scaffold
#

how i can check

#

the player can revivable or not

#

by scp049

unique crane
random scaffold
unique crane
#

?

random scaffold
#

yes at the moment of rebirth, or yes always if can revive by 049

unique crane
#

Its checked the same way when you try to revive someone as 049

#

So true if:

  • Player is dead
  • Corpse is not expired
  • Role can be revived
  • Player hasn't been revived too many times
restive turret
#

@slate flume @spare zodiac

    public bool TryRunAction(ActionName actionName, bool hold)
    {
        if (ReferenceHub.inventory.CurInstance is not AutosyncItem autosyncItem)
            return false;
        return TryRunAction(autosyncItem, actionName, hold);
    }

    public bool TryRunAction(AutosyncItem item, ActionName actionName, bool hold)
    {
        if (item == null) return false;
        if (ReferenceHub.inventory.CurInstance != item)
            return false;
        item.DummyEmulator.AddEntry(actionName, hold);
        return true;
    }

    public bool TryStopAction(AutosyncItem item, ActionName actionName)
    {
        if (item == null) return false;
        if (ReferenceHub.inventory.CurInstance != item)
            return false;
        item.DummyEmulator.RemoveEntry(actionName);
        return true;
    }

    public bool TryRunAction(SubroutineBase subroutine, ActionName actionName, bool hold)
    {
        if (subroutine == null) return false;
        subroutine.DummyEmulator.AddEntry(actionName, hold);
        return true;
    }

    public bool TryStopAction(SubroutineBase subroutine, ActionName actionName)
    {
        if (subroutine == null) return false;
        subroutine.DummyEmulator.RemoveEntry(actionName);
        return true;
    }

    public bool TryRunAction<T>(T subroutine, ActionName actionName, bool hold) where T : SubroutineBase
    {
        if (subroutine == null) return false;
        subroutine.DummyEmulator.AddEntry(actionName, hold);
        return true;
    }

    public bool TryStopAction<T>(T subroutine, ActionName actionName) where T : SubroutineBase
    {
        if (subroutine == null) return false;
        subroutine.DummyEmulator.RemoveEntry(actionName);
        return true;
    }
#

aint really good

unique crane
#

Seems pretty fine

restive turret
#

well ye

unique crane
#

But enter the return false

#

😭

#

if(subroutine == null)
return false;

restive turret
#

it should need more check like

#

if the refhub has that submodule

unique crane
#

TryGetSubroutine

restive turret
#

wait nvm I can make these static

#

since even if i have the submodulebase i can just invoke the thing

#

david you want this as some sort of Extension?

#

wait nvm

#

you cant since it requires publicize of DummyEmulator and AddEntry, RemoveEntry

unique crane
#

Mhm

restive turret
#

can you publicize those?

#

i mean obv what we will have will be on later versions but

#

would be cool

slate flume
#

What about holding the shoot button

#

Should I just repeatedly call the function?

restive turret
#

no, bool to be true

slate flume
#

GOTCHA

#

Okay

#

Hell yeah

restive turret
#

🔥

#

also works on subroutinebase's

#

basicly role controller stuff

slate flume
#

Will I have to worry about cleanup?

restive turret
#

wdym?

slate flume
#

If I shoot once, do I need to remove that entry?

restive turret
#

no

slate flume
#

🔥

restive turret
#

like you do is
Shoot->Hold AddEntry(Shoot, true)
Shoot->Release RemoveEntry(shoot)

slate flume
#

Yeah

restive turret
#

if you do is just
Shoot->Click AddEntry(Shoot, false)
it doesnt need removeEntry

slate flume
#

Bet

#

And that won't cause issues, right?

restive turret
#

dont think so

#

thats what NW code do

#

LabApiExtensions gonna be 🔥

#

(when i finish documentation) [Never]

slate flume
#

Why is isClick = hold?

#

I thought it'd be the other way around

restive turret
#

ah ye

#

my bad

slate flume
#

Haha alright sick

#

I love you Slejm

#

The GOAT

spare zodiac
#

fr

restive turret
#

ye I didnt know what david refered to me with these DummyKey stuff

#

before I checked manually

slate flume
#

This is much cleaner

#

Parsing strings for dummy actions felt so jank

teal junco
#

how do i write to an ogg file?

#

like is there a library to create ogg files?

#

i couldnt find such functionality in nvorbis but i might just be tripping

teal junco
# teal junco how do i write to an ogg file?

sorry, i want to write voice chat to a file. maybe i should use a wav instead? anyhow im just wondering how to achieve this. i have an opus decoder already set up so i can get the samples

unique crane
#

This thingy seems to do what you want

humble haven
#

How to override range of ultra radio range?

#

Patch?

upper vapor
unique crane
#

Or you can just set it

#

actually

humble haven
#

Thank you

plain gazelle
#

Does PathManager.Plugins.FullName lead to
SCP Secret Laboratory/LabAPI/plugins
or
SCP Secret Laboratory/LabAPI/plugins/{server port}
?

severe cave
#

Dont blame me if im wrong

plain gazelle
#

I will blame you if its wrong

celest thorn
#

when ruei v3

#

probably when half life 3 will drop out

icy knoll
slate flume
#

Isn't rue gone off of the SL discord servers?

slate flume
celest thorn
slate flume
#

Huh

icy knoll
celest thorn
icy knoll
#

im sorry but the dev doesn't even know how to do a changelog also

celest thorn
icy knoll
#

probably is better

#

their release note is always "backup configs"

#

legit

#

no information

celest thorn
icy knoll
#

they will also say "breaking change"

#

but then not say what broke

celest thorn
#

this is one of the update i did for my plugin

icy knoll
#

like cmon

#

ruei v3 will be peak

#

cant wait

celest thorn
slate flume
#

Rue got banned from the Plugin API discord

icy knoll
#

she unbanned from here...

#

lol

#

idek why she would be banned from pluginapi

true cedar
#

lol

icy knoll
#

they live!

true cedar
#

i wanna avoid it

celest thorn
true cedar
#

oh

#

figures

celest thorn
#

each player i think opens a thread

#

and unity shit itself

#

if i just try to get a vector

icy knoll
#

this is why i refuse to use HSM

celest thorn
#

so i need to minimize the unity calls

true cedar
#

i odnt know how fast ruei will be but it wont use threads so

celest thorn
#

YIPPE

#

i can finally achieve perfect 60/60 tps

#

for hsm i throwed so much time

#

to actually do that

true cedar
#

v3

celest thorn
#

Oh my god

#

so its real

true cedar
#

everything is subject to change

celest thorn
slate flume
true cedar
#

i didnt?

slate flume
upper vapor
celest thorn
#

i don't know what this dude had in mind

#

lol

#

but i know

#

soon enough

upper vapor
#

Let's concat strings on another thread or what 😭

upper vapor
true cedar
celest thorn
true cedar
#

im psure im left

#

idk what i would've gotten banned for

#

being too awesome

upper vapor
upper vapor
true cedar
#

TRUEEE

upper vapor
#

The urge to post beans Fear

true cedar
#

whats stopping u

upper vapor
#

Uh

#

Me

true cedar
#

u are ur own worst critic

slender lynx
#

i remember sm shit abt "art" being posted

upper vapor
#

I'll just... not do that lol

upper vapor
true cedar
slender lynx
true cedar
#

i have no idea who ur talking about but

slender lynx
#

they banned ts 🥀

true cedar
#

LMFAOOOO

slender lynx
#

banished to art showcase

#

but im talking about astral starzer

true cedar
#

1984

upper vapor
#

Banned 🫘 smh

slender lynx
#

im not gonna get into him here

#

but he did some BAD stuff

#

shit was 2 years ago tho so it dosent matter much anymore

plain gazelle
#

PlayerEvents.ThrowingItem still holds a Pickup and not an Item, so probably still cannot ev.IsAllowed = false it :(

upper vapor
#

NW:

true cedar
slender lynx
upper vapor
true cedar
#

so like animated values (in tags too!!)

slender lynx
#

it used to be really bad back in the day

#

every post was a furry femboy

#

its still technically allowed but only in art

#

the internet is not a safe place FancyTroller

upper vapor
#

I (>99% of the time) keep the furry things, emoji, stickers to furry DMs or servers

plain gazelle
#

I cannot test it for a while but does anyone know if doing ev.IsAllowed = false on ThrowingItem still drops it? Because its already a pickup?

slender lynx
upper vapor
upper vapor
#

-# it's not a banned word (yet), shocking

true cedar
#

if they ban :3

celest thorn
#

lol

celest thorn
plain gazelle
upper vapor
#

All Northwood HQs

upper vapor
#

Tbh

#

Imagine consistency

hearty shard
upper vapor
#

IsAllowed

#

Throw

hearty shard
#

when you right click in inventory

#

its not a throw

celest thorn
hearty shard
#

just a drop

celest thorn
upper vapor
hearty shard
upper vapor
#

Consistency, please 😭

hearty shard
#

u gotta imagine it

upper vapor
#

Right

#

throw instead of Throw toomuchtrolling

true cedar
#

why is eve here

#

bleh!!

hearty shard
#

ew pai

celest thorn
upper vapor
#

Does that mean she'll drop Secret api support

celest thorn
#

i tried

#

but no features i cared

#

so no api

upper vapor
hearty shard
hearty shard
#

like SSMenu

upper vapor
icy knoll
#

SSMenuSystem v2

#

hopefully no lagging this time around

hearty shard
#

i made per player settings

celest thorn
true cedar
#

why did u provide a setter

icy knoll
#

tbh i could introduce a menu setting in SecretAPI

hearty shard
#

i realized after making it it doesnt work

#

are you looking at master branch

icy knoll
#

I just gotta figure out how to give the server settings that the user can not actually see

hearty shard
true cedar
#

2.0.0 already

hearty shard
plain gazelle
upper vapor
hearty shard
#

i wanted to BREAK YOU

true cedar
hearty shard
#

xd

upper vapor
true cedar
#

problem is that like

celest thorn
true cedar
#

if i were to just increment it so the next beraking release would be 4.0.0

upper vapor
true cedar
#

that would be confusing

hearty shard
upper vapor
#

Semver is confusing

upper vapor
true cedar
#

its not confusing i just didn't follow it and so

hearty shard
#

yeah no

#

probably

celest thorn
hearty shard
#

eh

upper vapor
hearty shard
#

my dad and i make fun of each other

#

its fun

upper vapor
#

Opinion accepted

celest thorn
#

honestly crazy

true cedar
#

people without a father figure don't deserve an opinion???

upper vapor
#

I never said that

hearty shard
#

i love my parents

#

theyre great

upper vapor
celest thorn
true cedar
#

u call it x

upper vapor
#

Okay

true cedar
#

yea okay so u dont deserve an opinion

upper vapor
#

Fairer

#

I don't use it anyway

upper vapor
true cedar
#

i do unfortunately

upper vapor
#

Get off the internet (impossible despair)

celest thorn
#

Everyone deserves an opinion

#

so

true cedar
celest thorn
#

yea

#

everyone

hearty shard
upper vapor
celest thorn
upper vapor
#

-# twittuh

upper vapor
#

Opinions and facts aren't the same; opinions aren't right or wrong

true cedar
upper vapor
celest thorn
hearty shard
true cedar
celest thorn
#

ok no thats bad

#

i need it

#

i forgot i don't have nitro

upper vapor
celest thorn
#

i can pay with other stuff for example idk plugins

#

I know biggest exchange

upper vapor
#

MeowEditor core for RueI v3

true cedar
#

i dont need money or plugins or anything

celest thorn
true cedar
#

i need eve to SUFFER.

hearty shard
#

paws

upper vapor
hearty shard
#

this doesnt work

#

cuz ill always win

celest thorn
true cedar
#

win the dumb award?

hearty shard
#

nah id just win

upper vapor
hearty shard
#

you cant make me suffer

celest thorn
#

Honestly after i read that book everytime i see suffer i just reply with this picture

#

lol

slender lynx
#

@celest thorn no break

hearty shard
#

WHAT THE HELL

slender lynx
#

back to work

true cedar
#

idr

hearty shard
#

also i dont like math

celest thorn
hearty shard
true cedar
celest thorn
upper vapor
celest thorn
#

because magic sauce

slender lynx
celest thorn
true cedar
#

i played around with hints for a while until i found a formula that works

#

and all 3 versions of ruei rely on it

celest thorn
#

my formula is ||Why are you looking||

slender lynx
#

its not public because its too standalone

upper vapor
upper vapor
#

I made my own MER when I didn't know it existed

#

It's still not at that level but it's simpler

celest thorn
#

lol

upper vapor
#

Oh

#

So it's not standalone

celest thorn
#

its kinda...

#

but not really much you can do with the standalone only spawning

#

schematics

#

for just one client

slender lynx
#

nah i just worded it really wrong

#

its too basic for full functionality

#

and needs the plugin to interact with it for the cool stuff

celest thorn
#

not totally tho

#

animations still work

slender lynx
#

yeah but like thats it

celest thorn
#

and it just was never thinked to be alone

slender lynx
#

exactly my point

#

yeah

celest thorn
#

so most of the feature are base but not really work that much

#

i could make them work like mer

#

i would need like a day

slender lynx
#

no reason tho

celest thorn
#

but its not in the scope

slender lynx
#

mer already exists

celest thorn
slender lynx
#

for general stuff mer is still better

#

for more specialized we have to use this

upper vapor
#

I mean, MapForge exists, too

slender lynx
#

right

#

the assetbundles are good

celest thorn
#

assetsbundle i love them

#

even tho they are deprectated

slender lynx
#

im just saying mer bc even like random ass players know mer

celest thorn
#

in newer version

#

but WHO CARES

slender lynx
celest thorn
#

Oh wait they aren't

slender lynx
#

600mb json file to 500kb assetbundle

celest thorn
#

MARO

#

MARO

slender lynx
#

hi

#

thats me

celest thorn
#

OH MY GOD

#

i wanna introduce

#

something

slender lynx
#

what

#

ok

celest thorn
#

Dms

#

now

upper vapor
slender lynx
#

well

celest thorn
slender lynx
#

i guess im goin

upper vapor
#

Got me pooping my pants

true cedar
#

what if there was mer

#

but for hints

icy knoll
#

ruei!

true cedar
#

okay but i was thinking more the editor part

icy knoll
#

unity exists

true cedar
#

thats true

celest thorn
#

than i thought thats stupid

#

and left the idea

upper vapor
celest thorn
#

we just use unity

#

and done

unique crane
#

Real

true cedar
#

yea

celest thorn
#

but honestly its so cool

plain gazelle
#

Exiled has
PlayerHandlers.ItemRemoved
which also gets called if an item is cleared via RA
Does LabAPI have an equivalent?

celest thorn
#

that you could use a website

upper vapor
upper vapor
#

Hint editor reborn

slender lynx
#

wild

severe cave
slender lynx
#

thats wild

upper vapor
true cedar
#

um

slender lynx
upper vapor
#

Also she's not black, she's #000

upper vapor
severe cave
true cedar
celest thorn
slender lynx
#

technically not wrong

celest thorn
#

i mean you look like milk

#

lol

slender lynx
#

ok fucker

celest thorn
#

ahahahhahaha

restive turret
#

These server hosts smh