#plugins-dev-chat
1 messages · Page 58 of 1
IDummyActionProvider
And then AddEntry

Thats what the code does
Oh shit
So I need to go under the uh IDummyActionProvider and look at Inheritors
And find code
?
I'm bad at C#
And now you can check what the AddEntry is doing here, or what are rhe _registeredAction
Ye kinda
Oh I see
Probably easier to find something that not complex
Like looking in fpc
I already don't use dummy actions for movement
That's all done
I did that ages ago
Firearm.DummyEmulator.AddEntry(...)
Why, if you not using DummyActionCollector😭
wdym
Oh nvm this guy using it
I through he wants to get rid of those unnecessary calls for the cache
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
Or just call do whats inside those calls
This is what I'm looking to do because I already have code calling the dummyactions
You can code some extension for yourself
Parse the dummy to a class , and you can just call smth like.
DummyClass dum = new(dummy.ReferenceHub);
dum.Select(0);
dum.Fire();
I feel so stupid rn
This would be heat
I just
Am lost
then go into motor and study how it populates the action
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
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
Ofc ofc
Well I guess firearms more well, different
Firearm has nothing so I checked ModularAutosyncItem which also has nothing so I checked AutosyncItem which has
This
Which gets from this
Dummy key emulator has this
So I need to find
The actionadder
But idk where it is
Check inside the registeredlistener
That's just
I checked ownerinventory because it was used here to make the dummyemulator that populates the actions
I won't lie I'm very lost as to where I can ascertain the shoot action
:D
I am waiting for my dinner
💀
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
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");
Then select all type or smth
If you're trying to get a dummy to move you can just
received position?
On god, not a single relevant result
I'm flabbergasted
is this the meta?
Huh
Search idk what
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
and the target position is it where the dummy will just go to? Like can I use this for navmesh type of thing?

Are you sure the call action is shoot
100%
1000%
Shoot is what I use
Then search hold
👍🏼
Brings me back to DummyKeyAction
Your mom
GetAction is used here
Check the enum
What one
ActionName
There's more down though
Look inside then
Using this
look at the implementaitns if IDummyActionProvider
The Inheritors?
I guess
Firearm : ModularAutosyncItem : AutosyncItem : IDummyActionProvider
Some modules might have them
I'm gonna bust you
Firearm nor ModularAutosyncItem has dummyaction shit but Autosyncitem does
It's just not what we're looking for
This is all very confusing
Just search where you would call .Fire or .Shoot in module
Wdym
go to the interface in Rider
click the method
right click, go to -> implementations
Go tru each module and see if had some sort of fire or shoot
"Inheritors" 
This was already checked
ai actions 
What are you on about bro 😭
Ah
Atleast i know what to say to search
that's all we have
double shift in Rider 

I don't use rider
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
I did and found nothing 😭
Check for exiled shooting?
Wait
Lapabi has a shooting event
Or shot
Search where used
bruhhhhhh
nvm
same shit essentially
ItemSerializedDummyAction uses UnityEvent...
not surprised
I will be honest
I have no idea how to search for where LabAPI events are called
Im sobbing crying and shitting with this answer
or go in PlayerEvents, ServerEvents and see where the method is called
xd
Inside playerevents
Search for OnPlayerShooting
Or idk the exact naming
And search where it's being used
Either vis rider or dnspy
Nice now well
So hypothetically speaking
I just call UpdateServer()
On the AutomaticActionModule
That I can get from the firearm
But wait I need queue
Mf
So search where that being used
Only used in ServerUpdate
Or smth search isnide that module where a dummy stuff would be
Im gonna crash out tbh
I be home at 17
wdym
audio frames 
"getting the frames"
yk what i mean!!!!
i don't
samples
"getting" as in monitoring the output?
alright copy paste time
no
okay
at that point you might as well use the library
or does your use case not fit it?
i dont like relying on others to maintain stuff for me
SecretAPI 
but people have to rely on you to maintain it
true
also AudioPlayerApi probably won't break
it do be like that for libraries unfortunately
only time audioplayerapi will break is if you didn't read the very simple readme or northwood breaks the speaker toy
they're not gonna break the wrapper, right? right..?
"i don't like relying on other to maintain stuff for me"
*has her own library that she has to maintain cuz she knows that people use it*

yes?
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
im not relying on SecretAPI
thus my "i dont want to rely on others" is still working fine
i use PMER, Cedmod & RueI because rn theyre too difficult for me
Real
i will replace all 3 at some point
okay, fair
if i can avoid relying on someone else by using my own knowledge, isnt that better?
it's good that you can build the stuff you would otherwise rely on, but now you're forgetting convenience
for audoi reading, no biggie
but reinventing cedmod 
kinda a good idea actually
tbf thats in like multiple years
and wouldnt be public probably
dam
^
Once I finish my current backlog I'm looking into doing my own CedMod
werent u a beginner
or am i schizo
Yes 100%
uh oh
But I have enough passable knowledge to do the things I need to do
half of servers reinventing cedmod...
good luck with auth :3
a lot of servers just prefer handling their stuff themselves
handling the users in your db is still a thing
yeah cuz cedmod is cedmod..?
not a good reason but
im planning on doing a 100% public version of cedmod eventually
There are a ton of great resources out there for handling authentication
probably bc they self host it
fully open source
i just need the time
plugin will probably take the least time, website will take the most
database structures too...
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
time for a relational database
I just don't have a lot of experience with NW code
im planning on using supabase which is postgresql
which is very good
never heard of it yeah it yeah, idk much about it though
i haven't worked with databases enough to be able to compare them, though postres being popular is great
are you gonna provide on-premises solutions so hosts that are really concerned with privacy can host the lumimod on their own?
Where do I find "TryInvokeDummyAction"?
I made that
I'll show you my code
it will be super easy to deploy your own instances yes
ax you assume that i dont make my stuff easy to host
let's go
you're legend
@spare zodiac
i like people having freedom with my AGPL-v3 license :3
i just don't want a restrictive, strictly centralized cedmod competitor
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
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
ofc not lol
Haven't had to use it yet but if you're working with multiple firearms, for instance, you can specify which one and invoke the action under that firearm
yeah i noticed that 😭
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
hey i like protecting my work :3
I just want to create a locally hosted one so I can avoid CedMod issues
I get errors in the console every day lol
for this project it's absolutely good
i use LGPL cuz uhhhhh
that's what i decided
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
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...
now i'm trying to figure out how to give proper attribution to the MIT-licensed libraries i use 😭
Lumod
me when cedric will have legal grounds to sue me 😭
mid
i'm already in the void
thank you
eve why did you put ax in the void
LuminousI
Me when Lumi's server suddenly disappear after she releases Lumod
me when david vanishes
me when
you have also {npc.CurrentItem.Type}_(ANY) how do you implement that into there?
One sec let me launch my game
Server.ExecuteCommand($"/dummy action {npc.Id}. {npc.CurrentItem.Type}_(ANY) Shoot->Hold");
TryInvokeDummyAction(npc.ReferenceHub, "Shoot->Hold");
When i be home I gonna make a dummy extension for you
TryInvokeDummyAction(npc.ReferenceHub, "Shoot->Hold", $"{npc.CurrentItem.Type}");
so you all be happy
you are using the parent for that?
I appreciate that but I've got it lol
Yeah!
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
that would be lovely
I would make it an extension method if I used it outside of one non-static class
that was my process with Navmesh + ChatGPT
I would not get it working without @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
mine looks like this
That works :)
but it seems the thing isn't working
Interesting
So it doesn't work to stop shooting?
If you're trying to start shooting you wanna do
My whole thing basically works like this
Let me take a look at something rq
Is there a way to shoot a raycast and then get the position of the pooint it collided with something?
does it work without the parent?
Yes
It does
Parent only makes it so you get to specify which weapon
hit.point
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
Could I have a bit more than that??
So it doesn't really require you to have a parent because you'll be firing the current item anyways
yeah it equips the gun automatically so I don't really have to specify, do I?
So can I say y'all will be my dummy?
That's my understanding
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
Raying on my cast
yep the guy absulutely blasted the shit out of me, it works
Hell yeah!
Haha
btw did you work with navmesh?
I have not as of yet
i didn't know you had an accident
Haven't had a need for full-fledged NPCs
alr, trying to find a way to make navmesh work in HCZ, because it's fucked up for some reason
Haha real shit
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
Dont think so
Why's that
My code works
Unless you mean a dummy extension method for something other than invoking actions?
I would love more extensions that I can ctrl+c, ctrl+v 
Still invoking Invoking dummy action
Wdym
You still invoking the dummy action instead of calling the actual action
If you can find the shooting action you'd be my hero
And the ADS action
That's what my plans are
And the reload action
When im home
yeah I tried finding shoot action 2 days ago and didn't find anything
1 hour (and ~30m) then i be heading home
Sucks major butt
like 40 minutes spent until someone told me to just use commands
Yeah I spent like an hour combing through code before I just decided to go with the existing BS
Use deez nuts
@ me when you figure it out cause I'd love to know how you found it and where it is
yeah also @ me
So @spare zodiac how are you doing navmeshes rn? I'm thinking about doing my own and I'm a little curious
basically copied existing things from swifty that had it under MIT, using it to calculate path and then coroutine with the relative position walking for NPCs
everything you need:
[SerializeField]
int m_Area;
public int area
you can do
[field: SerializeField]
public int Area { get; set; }
Skill issue
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++;
}
}
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
C++ nerds
or maybe it was C
i dont remember

🔥
when
new RelativePosition(npc.Transform.TransformPoint(dir.normalized * distance))
This doesn't use the camera reference
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
I just do it this way because NW does it this way
That's why it's like that
oh that's nw code
Yep
fair
If it works for them, it works for me -type shit
Player is simply moved towards the received position on the server
Shouldnt matter that much if its few meters difference on Y level
at that point can't you just set position directly?
seems to be a bit of a waste to create a relativeposition for that
oh
slejm moment
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)
@spare zodiac
so complicated for nothing 😭
I told you that
I haven't found firearm.DummyEmulator
its private
I HATE IT
Publicized assembly required
so complicated for nothing
This is done on top of system
could just populate it with "this.Shoot"
that wasnt designed for it
why is so many things privated anyway?
yeah that is what I am thinking
Make git issue about for adding wrapper for this
Yeah for these actions I guess
no
why add wrapper? #makeItPublic
create a pr 
XDD
There surely are more fun things to do
ye like?
Mmmmmmm
adding more events
system for basegame textures on primitives
ye cant wait to get a Rifle Bipod so can i add it into my revolver
thats also would be fire
or do smth like this
Ragdoll::IsRevivableBy(Player scp049)
it can or not or it state?
?
yes at the moment of rebirth, or yes always if can revive by 049
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
@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
Seems pretty fine
well ye
TryGetSubroutine
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
Mhm
can you publicize those?
i mean obv what we will have will be on later versions but
would be cool
So uh
What about holding the shoot button
Should I just repeatedly call the function?
no, bool to be true
Will I have to worry about cleanup?
wdym?
If I shoot once, do I need to remove that entry?
no
🔥
like you do is
Shoot->Hold AddEntry(Shoot, true)
Shoot->Release RemoveEntry(shoot)
Yeah
So true
if you do is just
Shoot->Click AddEntry(Shoot, false)
it doesnt need removeEntry
dont think so
thats what NW code do
LabApiExtensions gonna be 🔥
(when i finish documentation) [Never]
Wait wait wait
Why is isClick = hold?
I thought it'd be the other way around
ye I didnt know what david refered to me with these DummyKey stuff
before I checked manually
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
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
This thingy seems to do what you want
Just make sure it's on an offline server
You can't store player voice
RadioRangeMode::CheckRange(Vector3 lhs, Vector3 rhs, out float sqrMag) patch yea
Or you can just set it
actually
Thank you
Does PathManager.Plugins.FullName lead to
SCP Secret Laboratory/LabAPI/plugins
or
SCP Secret Laboratory/LabAPI/plugins/{server port}
?
Not sure but i think the 1st one
Dont blame me if im wrong
I will blame you if its wrong
paw said it will be a home straight after the parser is complete
Isn't rue gone off of the SL discord servers?
huh?
Honestly im waiting because i have proof my server is lagging for HSM
Huh
i always knew it was unoptimised in some form or another dude
Idk if im schizo
im sorry but the dev doesn't even know how to do a changelog also
Have you seen mine?
probably is better
their release note is always "backup configs"
legit
no information
lol
this is one of the update i did for my plugin
half life 3 type level
they live!
can i ask whats causing the lag
i wanna avoid it
Threads...
each player i think opens a thread
and unity shit itself
if i just try to get a vector
this is why i refuse to use HSM
so i need to minimize the unity calls
i odnt know how fast ruei will be but it wont use threads so
YIPPE
i can finally achieve perfect 60/60 tps
for hsm i throwed so much time
to actually do that
u can look at it rn if u want https://github.com/pawslee/RueI/tree/v3
v3
everything is subject to change
Why did you get banned lol
i didnt?
Why...
you are asking me??
i don't know what this dude had in mind
lol
but i know
soon enough
Let's concat strings on another thread or what 😭
RueI v3 is real
nwapi?
fr
Hi left psure, I'm right 
*pawesome
TRUEEE
The urge to post beans 
whats stopping u
u are ur own worst critic
didnt they make some rule abt that last year
i remember sm shit abt "art" being posted
did they
back when that one certain person was a discord admin
i have no idea who ur talking about but
LMFAOOOO
1984
Banned 🫘 smh
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
PlayerEvents.ThrowingItem still holds a Pickup and not an Item, so probably still cannot ev.IsAllowed = false it :(
"Furries and femboys are banned"
NW:
also im super proud of this so i will yap about it but ruei also supports hint parameters
the discord has been clean though
so like animated values (in tags too!!)
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 
Gay furs trying not to post furry stuff everywhere:
I (>99% of the time) keep the furry things, emoji, stickers to furry DMs or servers
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?

it used to be an epidemic
I think they added an isthrow or something property to dropping item, might be hallucinating tho
PathOwOgen 
-# it's not a banned word (yet), shocking
if they ban :3
Where at nw central HQ?
Ah they added a bool called "Throw"
very descriptive ._.
All Northwood HQs
No NuGet? 
Tbh
Imagine consistency
when you click T in game you throw
crazy
just a drop
Hiii nameless
There's no Is
yeahhh
Consistency, please 😭
u gotta imagine it
ew pai
yea fr we should ban her
Does that mean she'll drop Secret api support
i don't use it
i tried
but no features i cared
so no api
SSSS
they need a menu system
like SSMenu
Just make it 
eh
i made per player settings
i made it myself
tbh i could introduce a menu setting in SecretAPI
I just gotta figure out how to give the server settings that the user can not actually see
2.0.0 already
i wanted breaking changes
I just meant that the name of the variable could have been like the one in the constructor. "IsThrowing"
Because to me, "ev.Throw" doesnt read like a true/false variable
Now that's something to say
i wanted to BREAK YOU
i need to get better at following semver
Hey
I'm already broken
problem is that like
why everytime i comeback you get angry at someone
if i were to just increment it so the next beraking release would be 4.0.0
Delete semver
that would be confusing
online personality
Semver is confusing
Oh so you're like uh
its not confusing i just didn't follow it and so
I think you are like this irl too, just you hide it and in here you show your true colors lol
eh
Like weird
Father figure detected
Opinion accepted
honestly crazy
people without a father figure don't deserve an opinion???
I never said that
Blud thinks we're on X
AAHAAHHAAHAHAH
u call it x
Okay
yea okay so u dont deserve an opinion
Opinions on Twitter more like rage bait in the eyes of some people
i do unfortunately
Yeah that might be the problem
Get off the internet (impossible
)
including eve?
get out
But not everyone deserves to be right 
Thats you deciding if you want to follow someone opinion
-# twittuh
Yeah
Opinions and facts aren't the same; opinions aren't right or wrong
no ruei for u then.
Are you gonna blacklist her
That would make it faster
free labor will solve this
no i just wont release it
💳
MeowEditor core for RueI v3
i dont need money or plugins or anything
Lol
i need eve to SUFFER.
paws
Do you need water
...
win the dumb award?
nah id just win
Make your own RueI as you've said
Honestly after i read that book everytime i see suffer i just reply with this picture
lol
@celest thorn no break
i use ruei cuz i HATE HINTS
WHAT THE HELL
back to work
also i dont like math
?
MER but bad
ruei has like. one math thing
Its a private editor i made that actually works better than base game primitives
Me when TextToy HUD (except there's no parenting to the camera)
because magic sauce
d1 hater
fr
i played around with hints for a while until i found a formula that works
and all 3 versions of ruei rely on it
my formula is ||Why are you looking||
its not public because its too standalone
What
Hey
I made my own MER when I didn't know it existed
It's still not at that level but it's simpler
its kinda...
but not really much you can do with the standalone only spawning
schematics
for just one client
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
yeah but like thats it
and it just was never thinked to be alone
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
no reason tho
but its not in the scope
mer already exists
yea
fr
assetsbundle i love them
even tho they are deprectated
im just saying mer bc even like random ass players know mer
still good though
Oh wait they aren't
600mb json file to 500kb assetbundle
Tf you mean...
well
i saw one time they were
i guess im goin
Got me pooping my pants
ruei!
okay but i was thinking more the editor part
thats true
i wanted to do online web editor
than i thought thats stupid
and left the idea
Yes
Real
yea
but honestly its so cool
Exiled has
PlayerHandlers.ItemRemoved
which also gets called if an item is cleared via RA
Does LabAPI have an equivalent?
that you could use a website
Inventory.OnItemRemoved maybe?
Not sure if there's a lab event
wild
why are you black?
thats wild
She's redacted
um
nope
Also she's not black, she's #000
Nvm

thats
she is #ffff
ok fucker
ahahahhahaha
BRO THATS CRAZY






