#plugins-dev-chat
1 messages · Page 23 of 1
searching stuff inside the decompiled unity project
NetworkClient.RegisterPrefab
idk ask david but the prefabs should have NetIndentity
errrrrr
i dont know
i just realized
how is this gonna differentiate different door types
💔
like lcz vs hcz
errrr
i might lose my mind
or hardcode the prefab ids
all i have is a generic MonoBehaviour
skill issue
damn
get
{
if (savedPrefab)
return savedPrefab;
foreach (GameObject gameObject in NetworkClient.prefabs.Values.Concat(RagdollManager.AllRagdollPrefabs.Select(r => r.gameObject)))
{
if (gameObject.TryGetComponent(out savedPrefab))
return savedPrefab!;
}
return null!;
}
Turns out
what
Vector3.sub?
tf is vector3 sub
im angy
oh
unity issue
weird


So if you replace it with this
Vector3 res;
res.x = v1.x - v2.x;
res.y = v1.y - v2.y;
res.z = v1.z - v2.z;
return res;
It gets much more performant lol
Because it aint calling new
damn
Crazy
David
Like for 1 call its nothing
do i just have PrefabStore for most but stuff like doors i could have their own prefab stuff
idfk
but after calls
or i completely go back to my old idea
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vector3 operator -(Vector3 a, Vector3 b)
{
return new Vector3(a.x - b.x, a.y - b.y, a.z - b.z);
}
LMAO
while (true)
{
foreach (var pl in Player.List) { pl.Ban("Because" }
}
better
it's vector3 but submissive
whaa
!wran millerjr huuuh
@restive turret has wranned millerjr Reason: huuuh
no worries i gotchu
KeycardItem has it
KeycardItem.CreateCustomKeycardMetal(
player,
ItemName,
GetHolderName(player),
CardLabel,
KeycardPermissions,
PermissionsColor,
KeycardColor,
LabelColor,
WearLevel,
SerialLabel)!;
wha
I might do like overload with some custom struct instead of all arguments
er
this is what i made
its
not great
but it probably works
Yeah like that
idk what im gonna do w my prefabs
do i just have seperate classes for handling door vs ragdoll vs other prefabs?
hm
burn it
no!
please tell me there is a way to turn off debug for labAPI
latest ver fixes it
🙏
Thank u for giving us 7 hours of time to prepare 
totally wasnt 20 hours
or yk 2 weeks
i mean i only had 11 errors
nah it came right here! its only 7 hour!
troll

new KeycardLevels(1, 2, 3)
errrr
Visual dirtiness
its wear level!
you can change that/!?!??!?!
Yea
now thats customization
You dont really notice it
Or at least I never did
Like you have to look for it
but it is visible
k thanks
if you disable clamp it can make kc as 5, 5, 5
Y'all is there a way to make cassie broadcasts only audible to players within a certain zone?
i believe its possible to fake sync it to only x players
^
How would I do that (I'm pretty new to plugins but I kinda know C# and stuff)
you need to get into mirror syncing
;-; I have a bad feeling about this
its not too difficult
I hope so, I'll look into it shortly
Is that really how you do it?
Like web exploiting lol
Not that for certain
[ClientRpc]
[OriginalAttributes(MethodAttributes.Private)]
public void RpcCassieAnnouncement(
string words,
bool makeHold,
bool makeNoise,
bool customAnnouncement,
string customSubtitles)
{
NetworkWriterPooled writer = NetworkWriterPool.Get();
writer.WriteString(words);
writer.WriteBool(makeHold);
writer.WriteBool(makeNoise);
writer.WriteBool(customAnnouncement);
writer.WriteString(customSubtitles);
this.SendRPCInternal("System.Void Respawning.RespawnEffectsController::RpcCassieAnnouncement(System.String,System.Boolean,System.Boolean,System.Boolean,System.String)", -31296712, (NetworkWriter) writer, 0, true);
NetworkWriterPool.Return(writer);
}
thats it
speakerSource
what
ah nvm ye
ye basicly you can do thati think
yeah but what if the rpc changes
i wanna make it nicer
just slightly
theres RpcMessage
ye
i just need to replicate that
SendRPCInternal is just rpcmessage
yeah
hm
how do i do it without
string functionFullName,
int functionHashCode
ok the first isnt needed
its just logging
so what i need is the hash code
idk how u get the hashid btw
(ushort)Mirror.Extensions.GetStableHashCode(functionName)
method.FullName
@hearty shard can u check if
(ushort)(nameof(RespawnEffectsController.RpcCassieAnnouncement),GetStableHashCode() & 0xFFFF)
returns -31296712 ?
interesting to call a JetBrains IDE your girlfriend 
i havent closed it
but i am in call w her watching stuff
make a new networking solution
also this wouldnt work
bc the name should be loke this:
System.Void Respawning.RespawnEffectsController::RpcCassieAnnouncement(System.String,System.Boolean,System.Boolean,System.Boolean,System.String)
gl
yea im already sad
i want to be able to get the function has based of Type and string of the rpc method name
have fun
u have to get the System.Void Respawning.RespawnEffectsController::RpcCassieAnnouncement(System.String,System.Boolean,System.Boolean,System.Boolean,System.String)
yeah i have to store them
somehow
reflection time!!
private static Dictionary<string, ushort>? typeMethodToHash;
public static Dictionary<string, ushort> TypeMethodToHash
{
get
{
const BindingFlags methodFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
if (typeMethodToHash == null)
{
typeMethodToHash = new Dictionary<string, ushort>();
foreach (Type type in typeof(RoleTypeId).Assembly.GetTypes())
{
foreach (MethodInfo method in type.GetMethods(methodFlags))
{
typeMethodToHash.Add($"{type.Name}.{ method.Name}", 0);
}
}
}
return typeMethodToHash;
}
}
surely
smth like this
idk wtf im doing
😭
can you show the line
no, find it thats part of the fun
public static string GenerateMethodName(string initialPrefix, MethodDefinition md)
{
initialPrefix += md.Name;
for (int i = 0; i < md.Parameters.Count; ++i)
{
// with __ so it's more obvious that this is the parameter suffix.
// otherwise RpcTest(int) => RpcTestInt(int) which is not obvious.
initialPrefix += $"__{md.Parameters[i].ParameterType.Name}";
}
return initialPrefix;
}
also the link contains the line
prefix is "InvokeUserCode_"
yeah uh
that doesnt seem right
[ClientRpc]
[OriginalAttributes(MethodAttributes.Private)]
public void RpcCassieAnnouncement(
string words,
bool makeHold,
bool makeNoise,
bool customAnnouncement,
string customSubtitles)
{
NetworkWriterPooled writer = NetworkWriterPool.Get();
writer.WriteString(words);
writer.WriteBool(makeHold);
writer.WriteBool(makeNoise);
writer.WriteBool(customAnnouncement);
writer.WriteString(customSubtitles);
this.SendRPCInternal("System.Void Respawning.RespawnEffectsController::RpcCassieAnnouncement(System.String,System.Boolean,System.Boolean,System.Boolean,System.String)", -31296712, (NetworkWriter) writer, 0, true);
NetworkWriterPool.Return(writer);
}
InvokeUserCode_ aint there
what about
$"{methodInfo.ReturnType.FullName} {methodInfo.DeclaringType.FullName}::{methodInfo.Name}({string.Join(",", methodInfo.GetParameters().Select(e => e.FullName)})"
public static string GetLongFuncName(Type type, MethodInfo method)
{
return $"{method.ReturnType.FullName} {type.FullName}::{method.Name}({string.Join(", ", method.GetParameters().Select(x => x.ParameterType.FullName))})";
}
you need the parameter type's full name
.
RPC should never be static so
NetworkWriterPool isnt desposable
i hate having to typeof(RespawnEffectsController).GetMethod(nameof(RespawnEffectsController.RpcCassieAnnouncement))!
liar
well
Pool isnt
Pooled is
public class NetworkWriterPooled : NetworkWriter, IDisposable
which is what pool returns
@restive turret did u test ur thing btw
i also wanna get rid of the GetMethod requirement here
idk how id do that
AccessTools.Method
well
tested the thing
should work
MY EEYES
ty
I have a strange question i was checking the serialization for primitives, and i saw it doesn't work and requires last 4 bytes but there's no mention by the stack trace i figured it out its an UINT but what is that? because in other toys this seems to have a role but on the primitives it doesn't
you have the write the dirty bits again for derived classes (every toy)
after the static bit
Wait what?
yea?
doesn't apply for initial spawn
1 doesn't do anything
0
doesn't
0 works for primitives
for other toys it doesn't
the parent ID isn't a syncvar
1,2 neither
Im just wondering what it is
because mirror is asking a last 4 bytes
that are a uint
oh wait it is written after the...
but not on initial spawn
you have to invoke the rpc to set the parent
Like its not mentioned anywhere
SerializeSyncVars
Oh
it does set the parent on initial state
OH
LOL
I UNDERSTOOD
But that doesn't explain
why toys don't spawn
and only primitives do
also why don't you use the named overloads instead of generics
im just testing around
but this should work i think
this is your spawn message payload, right?
add Compression.CompressVarUInt(writer, 255) at the start
cuz you need to write all dirty bits on initial send
that'll be the missing 4 bytes
255 the value you syncing
if you know how many thigns u write you set the 255 to that
255 is the dirty bits in this case
can anyone tell what changes from 14.0 so it's not working anymore?
contest: trying to do voice to player, with role, that cant speak normally.
foreach (var pl in Player.List.Where(r => ev.Player != r && r.IsAlive && Vector3.Distance(ev.Player.Position, r.Position) <= Plugin.Instance.Config.VoiceChatDistance))
{
LabApi.Features.Console.Logger.Info(pl.Nickname); // write the nickname of the other human
foreach (var ply in pl.CurrentSpectators)
{
ply.Connection.Send(ev.Message);
}
pl.Connection.Send(ev.Message);
}
but for everything is possible or just for primitives?
check their dirty bits
yea so i think example capybara is 32UL? or like how do you know
i decompiled it
Ok crazy i didn't know about that
but still i think there's something on the client thats not allowing them to spawn?
if you get some no spawn or smth check yo Player.log
for primitives you have to write the syncbits 2 times
Players.log are fine
they work fine even with one
well reverse how mirror does it then
I just think its a client side stuff
because it doesn't explain on why
it doesn't make any sense if i send spawn message on the Primtive it works but on capybara example it doesn't
so its really strange
i dont know who to tag but
Latest has Logger.Debug("Invoking event " + eventHandler.FormatToString(), true);
which should not
@unique crane I guess you are the right one
U sure u on experimental?
im on public
oh oki
Problem solved!
Uhhh guys
Why is EXILED not working anymore
I updated the server and EXILED isn't starting up
Along with all of the plugins
I'm gonna cry vro
huh
public bool IsEnabled => Base.SyncIsB;
this returns false
Oh
wait
nvm
im stupid
MY BAD
i know
has this been made aware?
[WARN] [LabApi] Missing DoorName enum value for door name tag HID_LAB
What's the hotfix for
Locker locker = Locker.List.GetRandomValue();
return UseChamber ? locker.Chambers.GetRandomValue().Base.Spawnpoint.position : locker.Position;
why does this return null sometimes
either locker isnt findable or a locker doesnt have a chamber
but its done on round start so i dont see why there'd be 0 lockers around
How can i send a player an RA-Console message?
Did you change the exiled loader to LabApi folder
[2025-05-18 21:07:45.371 +02:00] [STDOUT] ArgumentException: An item with the same key has already been added. Key: ReferenceHub (Name='Player [connId=43]', NetID='5502', PlayerID='28')
[2025-05-18 21:07:45.371 +02:00] [STDOUT] at System.Collections.Generic.Dictionary`2[TKey,TValue].TryInsert (TKey key, TValue value, System.Collections.Generic.InsertionBehavior behavior) [0x0015a] in <069d7b80a3914a08b6825aa362b07f5e>:0
[2025-05-18 21:07:45.371 +02:00] [STDOUT] at System.Collections.Generic.Dictionary`2[TKey,TValue].Add (TKey key, TValue value) [0x00000] in <069d7b80a3914a08b6825aa362b07f5e>:0
[2025-05-18 21:07:45.371 +02:00] [STDOUT] at LabApi.Features.Wrappers.Player..ctor (ReferenceHub referenceHub) [0x0000b] in <bea7f403b90e4786abd99fa819db9853>:0
[2025-05-18 21:07:45.371 +02:00] [STDOUT] at LabApi.Features.Wrappers.Player.AddPlayer (ReferenceHub referenceHub) [0x00008] in <bea7f403b90e4786abd99fa819db9853>:0
[2025-05-18 21:07:45.371 +02:00] [STDOUT] at (wrapper delegate-invoke) System.Action`1[ReferenceHub].invoke_void_T(ReferenceHub)
[2025-05-18 21:07:45.371 +02:00] [STDOUT] at ReferenceHub.Start () [0x00009] in <8db1ca0fe9a6484084cda320b139932c>:0
[2025-05-18 21:07:16.187 +02:00] [STDOUT] Exception in Subcontroller RPC handler for SubcontrollerRpcMessage (PlayerID=6 Role=Scp3114 Length=1 Payload=[01 @ 1/1])
[2025-05-18 21:07:16.188 +02:00] [STDOUT] IndexOutOfRangeException: Index was outside the bounds of the array.
[2025-05-18 21:07:16.188 +02:00] [STDOUT] at PlayerRoles.FirstPersonControl.Thirdperson.Subcontrollers.SubcontrollerRpcHandler+SubcontrollerRpcMessage.ProcessRpc () [0x0004d] in <8db1ca0fe9a6484084cda320b139932c>:0
[2025-05-18 21:07:16.188 +02:00] [STDOUT] at PlayerRoles.FirstPersonControl.Thirdperson.Subcontrollers.SubcontrollerRpcHandler.ClientProcessMessage (PlayerRoles.FirstPersonControl.Thirdperson.Subcontrollers.SubcontrollerRpcHandler+SubcontrollerRpcMessage msg) [0x00000] in <8db1ca0fe9a6484084cda320b139932c>:0
[2025-05-18 21:07:16.188 +02:00] [STDOUT] UnityEngine.DebugLogHandler:Internal_LogException_Injected(Exception, IntPtr)
[2025-05-18 21:07:16.188 +02:00] [STDOUT] UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object)
[2025-05-18 21:07:16.188 +02:00] [STDOUT] UnityEngine.DebugLogHandler:LogException(Exception, Object)
[2025-05-18 21:07:16.188 +02:00] [STDOUT] UnityEngine.Logger:LogException(Exception, Object)
[2025-05-18 21:07:16.188 +02:00] [STDOUT] UnityEngine.Debug:LogException(Exception)
me when
@harsh thorn sry for ping ur TransportReceivePatch is in the exception
[2025-05-18 21:07:16.184 +02:00] [STDOUT] Mirror.<>c__DisplayClass56_0`1:<ReplaceHandler>b__0(NetworkConnection, SubcontrollerRpcMessage)
[2025-05-18 21:07:16.185 +02:00] [STDOUT] Mirror.<>c__DisplayClass9_0`2:<WrapHandler>g__Wrapped|0(NetworkConnection, SubcontrollerRpcMessage, Int32)
[2025-05-18 21:07:16.185 +02:00] [STDOUT] Mirror.<>c__DisplayClass8_0`2:<WrapHandler>b__0(NetworkConnection, NetworkReader, Int32)
[2025-05-18 21:07:16.185 +02:00] [STDOUT] Mirror.NetworkClient:UnpackAndInvoke(NetworkReader, Int32)
[2025-05-18 21:07:16.185 +02:00] [STDOUT] CedMod.Patches.TransportReceivePatch:Prefix(ArraySegment`1, Int32)

also my game is completely borked
yes, folder LabAPI-Beta => LabAPI
Getting this as well in 14.1
As well as players not dying in gunfights, although that might be us, anyone else got that?
me when i need to wrap this in a try catch
cuz get_gameObject returns null ref internally on unitys end 😭
does AudioAPI work for 14.1?
InventoryExtensions.OnItemRemoved
This trigger but the ItemBase is null ALWAYS
thanks to removed in the DestroyItemInstance code
why even is the out if the item alread being destroyed
huh
which one are you talking about?
🙏🏻thanks
just use SpeakerToy
audioplayerapi is a lot easier then making it so .ogg files work for speakertoys natively
audioplayerapi makes that crap easy
so no, they shouldn’t just use speaker toy
:3
:3
me when I even tested and now nothing works
someone knows how do lights be spawned and what they do after spawning them with just spawnmessage doesn't even work
Show code
NetworkWriterPooled writer = NetworkWriterPool.Get();
writer.Write<byte>(1); // Flag for 1 NetworkIdentity
writer.Write<byte>(94); // Size of Syncvar
writer.Write<Vector3>(position); // Position
writer.Write<Quaternion>(rotation); // Rotation
writer.Write<Vector3>(scale); // Scale
writer.Write<byte>(0); // Movement Smoothing
writer.Write<bool>(false); // Static
writer.Write<float>(LightIntensity);
writer.Write<float>(LightRange);
writer.Write<Color>(LightColor);
writer.Write<LightShadows>(ShadowType);
writer.Write<float>(ShadowStrength);
writer.Write<LightType>(LightType);
writer.Write<LightShape>(LightShape);
writer.Write<float>(SpotAngle);
writer.Write<float>(InnerSpotAngle);
writer.Write<uint>(0); // client parent
it works fine for mirror
No the code for creating it
Unless ur not creating it server side
this is the code for creating it
wth happened to dummies 🥀
they cause like errors no matter what
they work but always cause issues
Show
Cant see
[2025-05-18 20:11:10.789 +00:00] Exception while handling encrypted message on channel RemoteAdmin (server, running a handler). Exception: Object reference not set to an instance of an object
[2025-05-18 20:11:10.799 +00:00] at PlayerRoles.PlayerRoleManager.PopulateDummyActions (System.Action1[T] actionAdder, System.Action1[T] categoryAdder) [0x00019] in <8db1ca0fe9a6484084cda320b139932c>:0
at NetworkManagerUtils.Dummies.DummyActionCollector+CachedActions.UpdateCache () [0x00016] in <8db1ca0fe9a6484084cda320b139932c>:0
at NetworkManagerUtils.Dummies.DummyActionCollector+CachedActions.get_Actions () [0x00008] in <8db1ca0fe9a6484084cda320b139932c>:0
at NetworkManagerUtils.Dummies.DummyActionCollector.ServerGetActions (ReferenceHub hub) [0x00006] in <8db1ca0fe9a6484084cda320b139932c>:0
at
RemoteAdmin.Communication.RaDummyActions.AppendDummy (ReferenceHub dummy) [0x0001e] in <8db1ca0fe9a6484084cda320b139932c>:0
at RemoteAdmin.Communication.RaDummyActions.GatherData () [0x0003a] in <8db1ca0fe9a6484084cda320b139932c>:0
at RemoteAdmin.Communication.RaClientDataRequest.ReceiveData (CommandSender sender, System.String data) [0x00032] in <8db1ca0fe9a6484084cda320b139932c>:0
at RemoteAdmin.Communication.RaDummyActions.ReceiveData (CommandSender sender, System.String data) [0x00095] in <8db1ca0fe9a6484084cda320b139932c>:0
at (wrapper dynamic-method) RemoteAdmin.CommandProcessor.RemoteAdmin.CommandProcessor.ProcessQuery_Patch1(string,CommandSender)
at RemoteAdmin.QueryProcessor.ServerHandleCommandFromClient (ReferenceHub hub, EncryptedChannelManager+EncryptedMessage content, EncryptedChannelManager+SecurityLevel securityLevel) [0x0002d] in <8db1ca0fe9a6484084cda320b139932c>:0
at (wrapper delegate-invoke) <Module>.invoke_void_ReferenceHub_EncryptedChannelManager/EncryptedMessage_EncryptedChannelManager/SecurityLevel(ReferenceHub,EncryptedChannelManager/EncryptedMessage,EncryptedChannelManager/SecurityLevel)
at EncryptedChannelManager.ServerReceivePackedMessage (Mirror.NetworkConnection conn, EncryptedChannelManager+EncryptedMessageOutside packed) [0x00071] in <8db1ca0fe9a6484084cda320b139932c>:0
Happens when you spawn a dummy before the round starts right?
that's when it was happening to me
round has started
what did you do for it?
so i could add it to my plugin 😭
[HarmonyPatch(typeof(PlayerRoleManager), nameof(PlayerRoleManager.PopulateDummyActions))]
public static class NWRADummySpawningPatch
{
public static bool Prefix(PlayerRoleManager __instance, Action<DummyAction> actionAdder, Action<string> categoryAdder)
{
if (__instance._dummyProviders == null)
{
return false;
}
var isStillDirty = false;
foreach (IRootDummyActionProvider dummyProvider in __instance._dummyProviders)
{
if (dummyProvider != null)
{
try
{
dummyProvider.PopulateDummyActions(actionAdder, categoryAdder);
}
catch (Exception)
{
isStillDirty = true;
}
}
}
__instance.DummyActionsDirty = isStillDirty;
return false;
}
}
Ye its known, reported on labapi repo
still broken 🥀
[2025-05-18 20:52:47.826 +00:00] Exception while handling encrypted message on channel RemoteAdmin (server, running a handler). Exception: Field PlayerRoles.PlayerRoleManager:_dummyProviders' is inaccessible from method Site16Essentials.Patches.FuckYouNorthwood:Prefix (PlayerRoles.PlayerRoleManager,System.Action1<NetworkManagerUtils.Dummies.DummyAction>,System.Action1<string>)'
[2025-05-18 20:52:47.836 +00:00] at (wrapper dynamic-method) PlayerRoles.PlayerRoleManager.PlayerRoles.PlayerRoleManager.PopulateDummyActions_Patch1(PlayerRoles.PlayerRoleManager,System.Action1<NetworkManagerUtils.Dummies.DummyAction>,System.Action1<string>)
dont ask why i called it FuckYouNorthwood 😭
i dont like it when major releases contain easy bugss to find
Ye this 14.1 is so rushed will need 14.1.1 to fix it
😭
tick the allow unsafe code checkbox in the project settings
It seems that when using primitives that r above ur character and below you your player room position is set to "unknown"
Room.TryGetRoomAtPosition
this method returns false and warhead kills you
@ashen hornet confirms
😭
Does anyone know how to translate a VoiceMessage into something that can be sent over a speakertoy?
there is only byte[] for the stuff
I believe so yea
pretty much ye
Hey david
yoink the data bytes and length and put it in an AudioMessage
there is no float[]
Data
send an AudioMessage with the speaker's controller ID and the data bytes from the voice message
i'd rather just use .Play rather than make an audio message lol
why would you waste time & resources decoding and re-encoding
this is my current code
yea
this method converts it from the byte[] to float[]
Thats in voice module
but you can just create new one I guess?
OPr maybe
SpeakerToy has one?
OpusDecoder
SpeakerToy has a .Play feature but it doesn't take in the data and parse it for us 😭
that's pretty inefficient if you can just yeet back the data from the client
@unique crane
Issue on
InventoryExtension.OnItemRemoved.
When this is called the ItemBase is always null no matter what since you destroy the item inside the (DestroyItemInstance) function.
Can you somehow make a change that call that even BEFORE the ItemBase being destroyed? i would really appreciate that 
that's AudioMessage?
and that doesn't help with playing the audio through speakertoy 😭
that's a void function?
Thats in SpeakerToyPlaybackBase
ok and i dont have an audio message
for the client to use
yeah, the issue is that primitives block both raycasts
just take the voicemessage and send an audiomessage 🙏
no need to waste resources on encoding
that involves me putting in the controller id tho no?
also, that doesn't seem to send the data?
why should i do that when labapi also has the speaker? seems a bit bogus to me 😭
oh uh
new AudioMessage
{
ControllerId = toy.Id,
Data = voiceMessage.Data,
DataLength = voiceMessage.DataLength
}.SendToAuthenticated();
or something like that
i know that
i dont want to do that though, i want to do it directly through labapi itself as it has a speaker toy component
okay so
you subscribe to the voice module's OnSamplesReceived event
add it to the buffer
and then re-encode it (labapi does that)
you also need to make sure you unregister the event properly when the toy gets destroyed
or you pong back the message
unless you legit cant with the component then what??????
why have Play methods if neither can be used 😭
this... isn't what i need
but you need to decode the data from the client
aren't you trying to "relay" a player's voice through a speaker?
this code works fine, but I want to make it smaller, no way it needs to be this big
so i dont even need the OpusHandler stuff?
Send deez
nope
ok
what you did is nothing on a next level 
and use the VoiceMessage.Data
done

now is there a way to eliminate .SendToAuthenticated or do I need to cope and seethe?
patch the constructor 
or create an extension method named S that invokes SendToAuthenticated
or
create a struct that creates the audio message and sends it
so you get the illusion of new()
yeah that says nothing to me david
Readonly classes
also, did an event for labapi get added for when an item is given is given to a player via RA?
Theyre different from classes
But they are readonly no?
just gave the quickest thing i could for her
@upper vapor Patch Vector3 math operations to remove the constructor call 
ItemAdded
ItemAddReason
It will make the server run faster a bit
okie
Struct doesnt pass a ref back it passes the values right
If you declare it readonly yes
Not necessary
Oh
I always thought it was readonly
Damn
Oh
structs can help you avoid memory allocations where applicable
if you create one in a method and don't box, there will be no GC time
(boxing is like casting to object, an interface; or storing it in a class)
when you pass in a struct to a method, it gets copied
you can modify non-readonly structs in the scope you're currently in
but if you invoke a method with that struct, it won't modify the "original" unless you pass it by reference ref
how do you want me to achieve that 😭
me when i need code examples not a wall of text 
Wait then what is the diff between a Struct and an Interface?
Is it that Struct allows member declaration and free back-casting?
void A()
{
var vec = new Vector3(1,2,3);
B(vec);
vec.a; // still 1
}
void B(Vector3 vector)
{
vector.a = 2;
}
Interface provides required stuff
an interface just defines what members a type must have
Wouldn't that apply for Structs as well?
structs are "final"
you can't implement or inherit structs
Interface cannot store anything
It is purely a requirements list
Interfaces really just define some behavior
Struct you can new()
which you can implement
OH okay, yeah
Interface is purely for inheirrit
If you have a method that calls with this you can have every player event call into that
(I'm coming from Java/Kotlin background, so it was kind of strange that wall of text
)
java interfaces are
interesting
SL has some really nice examples for interfaces
in java everything is a suggestion 
Labapi too
though I love Java's ENUM more than C#'s
In java we trust
yes let's allocate memory every time you wanna call a method with some state
i cant rememeber that
though it is just a glorified static private class
Enum

That one Java feature that is better than in C#
i dont rly have a need for it mostly
Imagine a private constructor static class with static named fields defined with appropriate constructors
-list ends here-
also it's weird being red here
Smh
Change color
bump because i see no event
yeah uh let me just send 100000 more messages
Yea
I do not want to lose green ;-;
ye :3
Too late
dam
I like this bluish one
Im gonna paint you blue
Kotlin is j*va done right
Yk what i love?
you could say
you're blue, da ba dee
Moment
Guh
gaydients
I love Discord's fucked up A/B rollout bullshit
I wonder how cursed would it be to write a plugin interpret platform so you could write LabAPI plugins in Kotlin
just rewrite the server in Kotlin
would be easier to just write a Kotlin -> C# transpiler lol
Awh getting my msgs auto deleted
opensource SCPSL servers 
that would be too easy
💀
you gotta figure out how unity works, how mirror works, how SL works
pretty good weekend throwaway project 
Pretty good one year project
i mean if you work on it consistently, yea
David!!
Eve!!
do NOT look at CustomLiteNetLib4MirrorTransport.cs 
did u miss me
Misc.cs
dam it's tomorrow now
you would love to make PRs, wouldn't you?
gn
She could make how many PRs she want
but updating the labapi dll because some other labapi PR got merged is truly something special :3
Noo
Build the base game locally...
i would hate to work for nw
Get the assembly c sharp
Compile labapi dll
Put new one back in
push
funny ~20 minutes adventure
what r u on about
Oh
You mean you make a change basegame
Then you need to wait for a compile to get labapi refs
Yea thats why i will never become labapi maintainer
At least Unity 6 server builds takes like 5 mins
💀
whats the old build time on unity 5
Dont ask
Like 30
Oh.
r u happy to no longer spend an hour w a single line change
Oh
That is not hard lol
Yall have that
wait, are there ingame unit test framework?
imagine
oh slavery
Actually
Do yall just trust each other
To not break build
Well not have a broken build pushed by accident
has bullet targets
has primitve objects
has dummies
looks inside
unit tests are QA slaved
i love this game
well itd be caught at some point
Real
Wdym by broken build
Like
A missing semi colon
Breaks C# build
itd be caught at some point
i usually have git actions to test it tho
anyway old chat leak of exiled
thunder takes his love confession back (typo?)
do you just push uncompilable code all the time?
my docs worked on my machine earlier but then when git actions caught it complained
secret api moment
?!?!
worked on my machine
Yes!
copium
D:\a\SecretAPI\SecretAPI\SecretAPI\Features\PrefabStore.cs(18,33): error CS1723: XML comment has cref attribute 'TPrefab' that refers to a type parameter [D:\a\SecretAPI\SecretAPI\SecretAPI\SecretAPI.csproj]
It was this
i love it when NW releases broken releases
already you have to patch smthn to make dummies not have errors
🥀
lots of other things
wdym
the dummy actions thing?
uh
have fun
:3
Yeah the pipeline fails
I didnt know unity had that
No that's gitlab
Um no
):
unity is so generous that it compiles your syntax error infested code
real !
i meant gitlab having unity tests
Yeah it prompts chatgpt to fix it
i mean it makes sense
youd have to build the game somehow 
And then compiles
unity tests
Im gonna murder you
please do
What unity tests?
:33333
Noooo don't kill axwabo
i'll go die then (temporarily)
i wonder how many issues i'll get with the 2 plugin releases
have fun with the unity tests
byeeee
i wanna redo mer, cedmod and ruei myself at some point
But
Errrrr
Nuh ug
Nuh ug
💔
Gn
void Prefix(Vector3 a, Vector3 b, Vector3 __result)
{
a.X += b.X;
a.Y += b.Y;
a.Z += b.Y;
__result = a;
}
any way to view these comment docs in a searchable format? using Rider
im spoiled by javadocs, very new to c#
If you use the labapi nuget might be
But you only get doc for labapi and no basegame
Refactored tooltips system to properly re-adjust their position based on the side of the screen they are on. This should result in support for every resolution.
is about hint?
Hubert should leak basegame docs
Im very mad it doesnt have docs
Y'know what would be funny if LabApi comes with auto patching
Should I propose this change or nah? I mean it no longer need Harmony as 3rd party dependency but will be in server
It's for the RA I believe
No
RA & respawn ui

and
Is this deliberate?https://github.com/northwood-studios/LabAPI/blob/9e6f8f78344924194749e42f095426a88549f731/LabApi/Features/Wrappers/Facility/Respawning/Waves/RespawnWave.cs#L79C18-L79C39
I noticed that it has not been "fixed" so
And wait until 14.2
I've done that https://github.com/northwood-studios/LabAPI/pull/69
Lel
Hey who ever have plugin Roleplay Names on LabAPI?
The hell is wrong with you?
im wanna make interesting event

what?
Why do you want to be the guy who's singlehandily responsible for getting the VSR changed
This is a PG-13 game
Not an R rated one
Or 16+ technically (according to GeForce NOW at least)
Your gonna do that once and your gone
If you want stuff that is NSFW on your server, your server needs to be on whitelist and you need to do your own age checks
and that's according to the VSR
Don't tell them how to get away with it
it's more hassle then it is worth
lol
make sure to read up on the vsr to make sure that is true
!vsr
I hate people
¯_(ツ)_/¯
if you just give everyone the whitelist tho, yeah uhhh not good :3
Honestly
I'm not a femboy and I don't work for NW
First statement is a lie 100%
I'm a furry
i wanna get on the api team but the apps haven't been open for 10 years!
(free maid outfit)
Wenamechainsama
No I'm not gonna work during the summer 😭
Hell nawb
I despise NSFW though I can't prevent you from doing that if the VSR allows you if you meet the requirements
You better make a proper age verification system then
yeah NSFW isn't fun
Deutsche Bahn is calling
ah don't worry about DB, they are always late anyway

Same shit in czechia
never in time
hours of delays
This isn't MÁV's fault this time
Thanks CFR
-# 3h delay
I don't think many railway companies are known.for being punctual
me when japan exists
According to the Romanian railway agency, the EuroCity train Dacia (EC 346) from Bucharest to Vienna is arriving at the border station and departs for Budapest with a 170-180 minute delay.
😭
Just 180 min delay? that is the usual 
MÁV
even if it is not their fault, it is
I would love talk about the "leader" of it but uhhhh
No
:3
How do you know
I would've loved to record what Kati has to say about it but school said nuh uh
-# Kati is one of the announcers
CASSIE KATIE
Kollektive Audio Table of Informational Elements
It would be very fun to have her as a translated CASSIE announcements
intresting
Fixing nw bugs 
You also need unity knowledge btw, so better up wait MILLIONS OF HOURS because this beautiful engine recompile your changes every single time
[ERROR] [LabApi] [LOADER] Couldn't load the dependency inside '/home/container/.config/SCP Secret Laboratory/LabAPI/dependencies/global/Mono.Posix.dll'
is this known? 😭
do i just delete it since it says file in memory or smthn?
??
shut down server
delete file
use older exiled release, grab the same file, and put in there
alr
i fixed the issue, the mono.posix is like borked so someone found one that works
@unique crane what are the door prefabs called
do they just have Lcz and Hcz in theem
LCZ Breakable Door, HCZ -----, EZ -----



