#plugins-dev-chat
1 messages · Page 15 of 1
alrighty
When I'm on a server, is there a way I can spawn tickets in?
or do I just cope and shoot dummies
I think I'm going to look at this later
for the sake of my brain
but I've got something that's compiled
so.. maybe it'll work you never know
I think there's been some cooking in this project, but for next time I need to test if it truly works, and then I'll need to find out if 1. I want to split it between both sides or just for both sides 1 set of configs, 2. how to get the actual values into the patch
eh that last one will probably be quite easy
Should be a way through remote admin
last I checked the tickets and whatnot screen was just like
full of text or something
looked mostly like this
Try using the textline RA
like the command one, if so what kinds of commands would I need to look for
because I used the help command and there's just
so god damn much on the screen
Why does this keep coming up?
Anything to be concerned about
yeah saw it pop up earlier too
Ignore it
Its every round since micro spawns every round
What if I was doing something with the door in HID
Uh
it's an intentional warning, you can ignore it
skill issue
what is com15 called
GunCOM15 i believe
Try getting the list of milestones per faction and modifying the "Threshold" (or similar) field of the milestone
why does throwing only call Dropping
The beautiful language of Hungarian 
What do you mean?
Not an issue, just missing entry for Get() door by name
when you do isallowed = false in dropping throwing does not get called
You can only spawn a custom keycard
Its not possible to change it afterwards
thats shitty
Does this also allow me to alter the amount of milestones?
Yeah
I'm not sure I understand
If you drop the item, it doesn't get thrown like the yeet action
alright good to know, if I can do that I might not have to use Harmony then that'd be nice. I'll check it out laters.
public void dropping(PlayerDroppingItemEventArgs ev)
{
if (ev.Item.Type == ItemType.Coin)
{
ev.IsAllowed = false;
}
}
public void Throwing(PlayerThrowingItemEventArgs ev)
{
Logger.Info("called");
}
if i throw coin it will be denied and throwing wont be called
but anyother item i throw will have throwing called
theres no way to check if the item was throwed in dropping so if you want both you cant use both if dropping uses isallowed = false
Does AvailableRespawnsLeft go up if a respawn token is aquired by a team?
I noticed on default settings, both teams get 1 token and there's 3 respawns in total
I wonder if that additional respawn accounts for token obtaining.
what is it with the C# compiler wanting me to throw var everywhere
I like sticking with my clearly defined typing thank you very much
Just change your settings on Rider to use explicit types everywhere
Oh I get it now
Give me a bit
oh right that's probably a good idea
Istg
Like why would i want to make my code less clear
🤷♂️ I mean I like working in python but even then I make sure to do my type declarations
idk maybe convenience
sometimes people like being lazy I guess
But Rider is telling to actively put in more work to make it less clear
Seems like I was wrong with what I said earlier, the dropping item method has a throwing parameter
LabApi doesn't call the correct event though
I'd suggest opening an issue because ThrowingItem gives you a pickup and it only prevents the velocity change
It would be good to have a property in the DroppingEvent to determine if it's a throw action instead of a simple drop
Just change it
It's not that difficult
If you don't like the default code style, change the configuration
It's less work to type out var than figuring out and specifying what exactly it is
I guess but the config to change it is super easy to find:
Settings > Editor > Code Style > C# > Syntax Style > top 3 options.
Arguably it helps to make types as concrete as possible without the dev having to type it out
Like IEnumerator of a List has a public specific implementation, typing IEnumerator<T> allocates memory (boxing) while List<T>.Enumerator does not (it's a struct)
honestly so far if I haven't known the type correctly Rider can correct me.
Yeah you can type var and us3 the quick fix
Kind of a contradiction but Rider could suggest to use the most concrete type when using explicit types
Although many people outright ignore more obvious warnings let alone hints or suggestions
Well i do not care about the English correction
Not just typo hints but also code quality suggestions
It's still in the game files but the mono font has been removed from TMPro assets
wtf i didnt get a ping for this
you can use Player.ReadList if you want all real players and dummies
ahh, i forgot already
Riptide making public the rpcparent was his fatal that will hunt him here
Make it obsolete and #pragma warning it out maybe
Won't stop from compiling but hopefully devs won't use it
Yknow that compiled stuff wont show #pragma warning
I know
Or comments like
// Please dont use it, forgot to make it private
Thats the point
It would be obsolete but NW needs #pragma to make the compiler shut up for internal usage
If only people read the docs and source code
Well making it private will resolve it
Not if people publicize the assembly
Since whoever want to use it cant
Bruh
@unique crane i found the issue
What was it
scale
of
Mhm
I guess its fine server-side but the spawn message resets some stuff client-side I guess
maybe
(because i prevent tiny custom role ppl fromreplacing scps and being small too)
this is why we need built in scale
R u sure the local scale for normal 3114 is one?
It works until they disguise
then it breaks permanently
Well ye i will disable on my end too idk what will be broken
Does fake scale work?
Like setting to idk 1.5 to others and you set back to default
Setting scale (respawning player object) breaks many things
David where's our scale message
it didnt use to break 3114
Well they made it so 
yep
New player models
do be like that
the thing i dont understand is
why does it say disguised as None
because of scale?
like
what
😭
well
But because mirror resets the object
maybe
so ig it resets the Identity thing
and it gets desynced
wait
wouldnt that mean client can cheat and make 3114 invisible ?
or maybe itd only be for the cheater
dunno anymore
Only the server can affect network objects
Or the client for itself locally
Yeah it maybe resets that
Is there any SCP proximity chat lab API plugin?
¯_(ツ)_/¯
i think scp proxy chat had a nwapi version
It could now be done with speaker toys rather easily
or just swap the Current Channel
Yeah but that's not that immersive
well thats easier
that's a shitass solution that was only used because speakertoys didnt exist
so it should have a port.
you think every old plugin has a day0 solution for labapi
Something existing on NWAPI doesn't mean it'll automatically have a LabApi port
It means the dev is interested in offering dual support
But I dont think it actually did have NwAPI version.
No it doesn't
There is an SCP Proximity Chat plugin for NWAPI
It was created much before LabApi was officially announced
Nevertheless, developing a plugin for one framework doesn't mean you will port it to another at all costs
Does LabAPI have any popular custom item/custom role plugins?
Okay well I will definitely be aware about yours
I wanted to make a api so LabAPI plugins can use certain EXILED plugins' features without requiring exiled to be loaded. I dont think its gonna have any practical uses (no reason not to just use exiled atp) but it can be a fun project to try.
well something i would really like at basegame is command for tp to exact coords, getting my own coords
listing item ids in the inv too
Is there a way to prevent the snake game or replace it with another scene?
That should be basegame anyways. Is that an exiled feature?
its client i believe.
inspecting deny? i guess
Inspecting has event args?
prob not exiled made one ¯_(ツ)_/¯
idk
damn
I need to play bad apple in server-side
I mean like an Api with soft dependencies on EXILED and EXILED plugins. I could implement a basic wrapper for Exiled CustomRole, CustomItem, and UncomplicatedCustomRole, and maybe have an additional wrapper over both of those. For LabAPI
With reflection.
well you can use SnakeDisplay.SetDisplay i guess
tbh easier to either remake it or soemthing
yeeeeah
family friendly ofc
The entire point is offering the exact exiled functionality without needing to reference the assembly or crashing if it doesnt load.

well, idk how would you want that but have fun

but have issue with rotation but it so easily for fix
Well actually there is one reason I would like to have this, even if it wont be used for that reason
Becsusr ProjectMER wont allow custom item spawns because its no longer exiled
But if theres a wrapper or something that soft-relies on it, then it could.
one thing i am afraid of is that michal will update SL customobjects to be a dropdown with only the existing itemtypes
instead of having a field somewhere to put a string.
Does anyone have an example for how to network GameObject hierarchy?
what
ModeratorTools
Release soon
Pinventory
You don't
You just set the transform parent
That's all I need to do?
Yup
amazing
It'll sync automatically
HitboxIdentities arent networkidentities right?
The parent transform does have to have a networkIdentity though
Nope AFAIK but you can test it i guess
It should
sadge
Oh well yeah
I mean its fair because the client is held responsible for animating characters
I wish I could 0 ms parent objects to player bones though
Nah NW is cringe and obfuscated their dll
I'll test later today
greetings nerds
wdym
like would that allow the client to parent stuff to the hitbox?
i mean if you parent to the model
sorry can you explain what you mean?
the model is not networked, right? the bones / hitboxes arent networked either
how should I parent something to the hitbox in that case?
RoleBase.FpcModule.CharacterModelInstance
and you instanciate your custom primitve toys, you add the Collider to your object (I guess?)
you then parent your primitive to the model, then as last you add the hitbox as component to the primitive
you also need to add your own hitbox to the model too
You can't "just add" network identities to game objects
A prefab has to be spawned
hitbox isnt a net idnetity one
Even then how would it work
with power of magic and friendship
😭
But if there's no net identity and you add a hitbox identity...
the primitive has netid
you add hitbox to primitive
then reparent beforoe adding primitive to model
No we need perfect cosmetics NOW
idk if would work or not
I just read how it done ingame
and inside the decompiled server
OHHHHH
It’s not gonna work
We can’t do that to clients
But I'm not sure that's what icedchai wanted
add a network identiry thats parented to a non network identity that isnt already spawned as netnidentity
it would be simpler to tell me I cannot achieve what I want
Which is an acceptable answer
Correct
You wanted to add a primitive to a specific hitbox of a player, like an arm, right?
read how the game works guh
Yeah, on client side
i just reading how and what its doing
if the hitboxidentity isnt a network identity there isnt anything I can do.
That's not possible unfortunately
Slejm wanted it the other way, like you'd create a primitive and attach a hitbox identity to it
Not the same thing lol
wait why would I put a hitboxidentity on a primitive?
wdym client side
To extend the player's hitbox?
ye?
parenting a gameobject to a player's bone on the client side
there will be no client side
it will only visible to the server
if you didnt do it a right way
Do pickups despawn when thrown into the void or an unreachable location? Or what happens? because I want to track items that are thrown in unreachable locations
they stay
take it there is no event for tracking items getting into those locations then
damn
if they despawned i could have patched the method but blegh
iirc "void" locations have triggers which add the pitdeath effect
you could add a component with OnTriggerEnter and try get the pickup from the collider
how would I go about getting those void locations
GetComponentsInChildren<Collider> on the room identifier
and check if they're triggers
there aren't many rooms that have voids so you can limit the rooms to search through
106 room
true
i think nuke room has some places you can throw items into without being able to get them back
or behind 914
for those scenarios you need to create the triggers relative to the room yourself
would the component have to be monobehaviour or networkbehaviour?
ok thanks
will all triggers be the void or nah?
i dont know how to check in unity so 😭
give me about 20 minutes lel
okie
List<Room> rooms = new()
{
Room.Get(RoomType.Hcz106),
Room.Get(RoomType.HczCrossRoomWater),
Room.Get(RoomType.HczTestRoom),
Room.Get(RoomType.HczArmory)
};
foreach (Room room in rooms)
{
if (room == null) continue;
foreach (Collider componentsInChild in room.GameObject.GetComponentsInChildren<Collider>())
{
if (componentsInChild.isTrigger) componentsInChild.gameObject.AddComponent<CheckVoid>();
}
}```
this is current code
i mean if you have nullable off it's fine ig
why did i think you were using nullable
yeah i do
getting a friend to test now
hopefully it's not all triggers tho
@upper vapor do i need to send the component updates to every client or? im adding the components when map is generated and nothing is logging
whar
ye
component
which dependencies do i need to start writing plugins cuz the documentation doesn't really say and if there are any, where do I get them from?
use typescript instead, my brain doesnt get fried
anyway
no output still
school
{
Log.Info($"Pit Name: {pit.name}");
pit.gameObject.AddComponent<CheckVoid>();
}```
it does log the pit name, just no logs when item thrown
{
public void OnTriggerEnter(Collider other)
{
Pickup pickup = Pickup.Get(other.gameObject);
Log.Info($"Pickup {pickup.Type} has been dropped into the void");
}
}```
Assembly-CSharp, LabApi and UnityEngine.CoreModule are necessary, your IDE should yell at you if you use something that idn't fererenced
you need to download the SCP:SL Dedicated Server either through Steam, SteamCMD (or DepotDownloader)
the assemblies can be found in the SCPSL_Data/Managed directory
i bet you're getting NREs with that
nothing
if you threw multiple items and neither of those could be mapped to a pickup
throw urself in it
make sure to check for null
also, use the root of the collider's transform, maybe that'll solve it

yea
setting scale on 3114 will cause the identity to have a spasm
it like breaks it and all ragdolls are considered none
yay...n't
dam
why does it only log to localadminlogs
ugh
what is the method for sending logs as Log.Info from exiled does not log to LA console nor LocalAdminLogs here
no
Log.Info from exiled
will Logger.Info from LabAPI actually log here or no?
it should log to the server console
but if you have an exception in a unity method then it'll go to stdout (therefore, LA logs)
no exceptions so
Average Tuesday tbh
hi david
when role wrappers
when player scale
when more admin toy wrappers
uh i ran out of things
🙏
i would make a PR but they're probably already working on them
Logger.Info is not working either
what the hell
the trigger enter was being called because there was NREs
from this code you don't get a log statement anyway cuz pickup.Type can throw
that's why you need the null check
{
if (other.gameObject == null) return;
Pickup pickup = Pickup.Get(other.gameObject);
if (pickup == null) return;
Logger.Info("Pickup Found");
pickup.PreviousOwner.ShowHint("You dropped your item in the void");
}```
this is my new code
let's see

do you mean at the start of the OnTriggerEnter method?
any way to modify?
like pit.GetComponent<Collider>?
i dont see excludeLayers or includeLayers
do you have UnityEngine.PhysicsModule referenced?
seems that there are no included or excluded layers specified so that isn't the issue
pain and suffering
Maybe someone explain why when i use display hint, I'm not included on Player.List
Code:
{
Logger.Info($"Player {player.Nickname} is on team {player.RoleBase.Team} and has role {player.RoleBase.RoleName}");
}```
Console:
```Player Dedicated Server is on team Dead and has role None
Player Vretu is on team ClassD and has role Class-D Personnel```
Code:
```foreach (var player in Player.List)
{
Logger.Info($"Player {player.Nickname} is on team {player.RoleBase.Team} and has role {player.RoleBase.RoleName}");
player.SendHint($"Just a Hint");
}```
Console:
```Player Dedicated Server is on team Dead and has role None```
Sending a hint to the Dedicated server may be breaking it
Since its not a real player
NW moment 
if(player == Server.Host) return :3
does anyone know the layer that a pickup is under?
I'm still working on this PitKiller thing for items and I want to see if selecting layers works
whar
has a Capsule Collider
why is there a Pickup tag then
it should have one
wdym there is no Pickup tag
oh wait i might be on labapi 2 version not latest
i need labapi version
hmm
now to figure out how to add stuff to the allowed layers
I can't figure it out other than doing a coroutine to check which id rather not do
those are the layers
ye
how do yall even get the project on unity what
AssetRipper
hmm
:3
im getting frustrated about why no pickups are triggering
cuz ur banned
oh ye it has the Pickup as a tag
i just blind af
ima install unity and see what the fuck is happening
magic
hello squad
That would involve RespawnTokenManager.TryGetNextThreshold?
I can't find anything that brings me any further
Also how would I go about adding comments to my autogenerated config file, and is the order the things are listed inside of the class what it uses to determine the order of the items in the config file?
If its like Exiled you just add
[Description("")]
Alright I'll give that a shot, thanks
okay yeah that works thanks
Does anyone know that if I change the initial value of both side's respawn tokens, do I also need to update the AvailableRespawnsLeft or does it do that on it's own
And lastly before I go sleep; how do I spawn in Tickets because I don't know anything about remote admin except click button in UI make thing go brrt
they are done internally
well fuck
F for custom waves as would be in the game
wait then why does it show in the game in RA panel as custom wave
how the hell do you do a custom wave bruh
"SCP IS ARRIVING!!"
TF2 MUSIC
i think
cus trying to get an index of it but it doesnt exists?
prob not exists in client side
Maybe
i mean thats what the error says
Its strange what RA trying to find new waves
ye i dont even know how RA panel got it
Maybe RA try to add more indexes
Cuz it gets created only on server xd
But why client side
You still need some client-side code
like for anims
and such
They do need the wave instance for that
Which doesn't exists on client
ye, but when it updates it dc me
Huh
with the error msg about indexes not found
whcih is here
ofc not exists cus in client it never willl
i even patched the Wave on labapi cus it would just return true
I have to try it so actually works
LMAO
okay, it spawned them
in nowhere
Mega spawnwave
lol
Thats actually cool
didn't know it possible
But hey, you can make full-auto shotgun with just 2-3 properties set
uh how the subtitles works?
Why is NewRole PlayerRoleBase now
because its already gain a role
So true
if you want to get the old things subscribe this
PlayerRoleManager.OnServerRoleSet
or
PlayerRoleManager.OnRoleChanged
Ah no it's fine, thanks
It was just throwing errors as I updated the server files
also because it already initialized and set things to it
well this done except the milestones
yea but it only accepts RoleTypeId as a spawn queue
💔
dont use spawned maybe idk
it depends
wait actually
nvm
you can
i just know spawned was changed from exiled to only be called when setting a pos (so only fpc roles 💔 )
had to change my stuff to changedrole
smh
i need one for OnPointsModified for able to get custom milestones
yeah I'd personally love to implement Serpents if possible, just like how I would make it compatible with what I'm currently writing.
I have an idea or two I'd like to try to figure ou t
but for now I'm just trying to type out stuff
because I'm typing poorly
me when red lines
and green lines
clueless done

If u want I can release the thing
I wanna support custom milestones so thats what I need too
how to spawn locker, because it is invisible ? Am I miss something ?
var lockerStructure = Object.Instantiate(NetworkClient.prefabs.Values.First(x => x.name == "LargeGunLockerStructure"));
lockerStructure.transform.position = surface.transform.TransformPoint(offset);
lockerStructure.transform.rotation = surface.transform.rotation;
NetworkServer.Spawn(lockerStructure.gameObject);
looks fine, maybe log the lockerStructure.transform.position after you set it? could be not where you think
lockerStructure.transform.position = (62.80, 290.71, -51.60)
yeah I'm trying to figure out custom milestones now too
I think I have something but I don't know if I can test it
like I'd need to be able to give a team tokens but I can't find anything on that using an admin command
either that or I have my things set up incorrectly
but so far what I have iterates over every spawn wave and can customisably set the starting tokens of each wave depending on their team alignment
so it is actually on surface, but all items in air
Most custom team plugins piggy back off existing team spawns
the only things I need to be finished with this is 1. know what event is called to update the DMS as I want to add a feature send out a notification if it would have triggered but was disabled, as well as actually changing the milestones because I think I have a working patch right now.
UCT does, serpents and UIU does, omni does
you should this is very interesting
hmm maybe try this
var locker = Locker.Get(lockerStructure.GetComponent<MapGeneration.Distributors.Locker>());
locker.Position = surface.transform.TransformPoint(offset);
locker.Rotation = surface.transform.rotation;
NetworkServer.Spawn(lockerStructure.gameObject);
thank you, working
more correct code
var lockerStructure = Object.Instantiate(NetworkClient.prefabs.Values.First(x => x.name == "LargeGunLockerStructure"));
Log.Debug($"lockerStructure name : {lockerStructure.name}");
lockerStructure.transform.position = surface.transform.TransformPoint(offset);
lockerStructure.transform.rotation = surface.transform.rotation;
LabApi.Features.Wrappers.Locker locker = LabApi.Features.Wrappers.Locker.Get(lockerStructure.GetComponent<Locker>());
locker.Position = surface.transform.TransformPoint(offset);
locker.RotationY = surface.transform.rotation.y;```
ahh i see
i think you should be able to omit these lines, but idk
lockerStructure.transform.position = surface.transform.TransformPoint(offset);
lockerStructure.transform.rotation = surface.transform.rotation;
hm... need to check
Do the lockers appear if you spawn them after the round starts? It appears to me that lockers spawned while the player was connected don't render to that player
I spawn manually after round started.
this code works
var lockerStructure = Object.Instantiate(NetworkClient.prefabs.Values.First(x => x.name == "LargeGunLockerStructure"));
LabApi.Features.Wrappers.Locker locker = LabApi.Features.Wrappers.Locker.Get(lockerStructure.GetComponent<Locker>());
locker.Position = surface.transform.TransformPoint(offset);
locker.RotationY = surface.transform.rotation.y;
NetworkServer.Spawn(lockerStructure.gameObject);
Now I am trying to understand how to call FillChambers with Items I want
you should see the locker if you use the locker wrapper to set the posistion and rotation
There is some batching done with structures during map gen
That might be why
!vsr
(which they dont)
oh
cool
i still wish we had tools to remove them easily when clicking N
They only fuck up Steam player count
cuz they shouldnt there
fix ?!
I press shift + tab in game and I see steam friend being in a lobby
yeahhh
437 players
dedicated server counts too
it stinks
there will always be +1 when looking on steam
Mhm
I dont think that the client knows whats a player and whats npc
Or well...
dont know
it might not but still
bool IsNpc sync 
rn
well
that would still count dedicated server
i dont believe it is
wv set wavename Tokens value
Will do when back home
I tried this yesterday and it did not recognise wv as a command in the admin console
wave
has to be in remote admin not the client console
am I doing something wrong then? oops
😭
U trying at client console not RA Console
look man I never said I knew what I was doing
😭 cut me a bit of slack okay
I thought console = console
Ah well
here I go doing something stupid again clueless
I've been home all day today
doing some stuff I'm supposed to be doing
and tinkering a little bit with what I'm doing here
I think the harmony patch works
Do you now the command for tickets too? I'm stopid
i just memorized bc i used like 4 times today
ID_Dummy says it all
hm
this is annoying but it is what it is
Then become trans
moment
Monkey see, monkey do 
That's how you make Devin do its job
"Monke together stronk. Monke make code good. Monke push code."
*still refuses to push to master*
RAHHHHHHHHHHHHHH
greetings nerds
hi
@restive turret if you figure out how to edit Milestones can you lmk? I'd love to look further into it but I can't find anything and I have a couple uni things I need to do for a little while so I don't have enough time to look into it for the time being
I might spend some time on it soon but you were working on changing them for your custom wave too rgith
does anyone here know any good invisible strings i can put into custominfo?
\uE080
what does this translate to
Idk
A square
Hey! New to SL plugin development, had a quick question about async/await. Is it supported by SL's version of Unity, and is it possible to use for plugins?
Use MEC instead
Asking because of a TCP socket's async APIs
I could potentially use MEC to poll but it's... not ideal
Depends what you want to do
you can just create a thread
that might be more fitting in a Unity context
make sure not to access Unity stuff from another thread though
y es
but
as stated above
do NOT interact with unity within another thread
you will kill the server
I know how that part works don't worry ^-^ If anything I'll probably just have the background thread read from a threadsafe queue and just push to it on the main thread
oh you're a networking specialist
i might see why you're doing TCP :3
i wanted to say that 😭
are you making some (crazy) custom protocol?
^
Yep exactly that
No just comms between servers
Task#Run() will just run it on the threadpool so it should work as well as a thread
Assuming .NET Fx 4.8 is still that way, haven't touched that framework in years
yeah it should be like that
if you ever need to run stuff on Unity's main thread though, just use MainThreadDispatcher.Dispatch();, it's actually pretty simple ngl
Oh sweet, can just use that instead of polling
custom milestone works i guess
oh that's so real
@white matrix https://github.com/SlejmUr/CustomRespawnWaves
buh it empty sobbers
cus i uploading rn
LabApiOut is where the dlls
alrighty
have fun or smth
I'll definitely take a good look at it
I going to get my pizza
have a nice meal
and go to sleep
cus I woke up at 20:50-ish
(~1h nap time was since I last sent a dm to u)
aye alright
I might ask a couple questions in dms laters
but I think I have a rough understanding of what you're doing here
the transpiler me too
u can send it and will andser tmr
you guessed it correctly
i just chatgptd some of it
Basically only the part I did was checking what to do and the exact sequence
If you read some of the c# il codes you can usually guess what do what
OpCodes. Brtrue_S, label | This is same as the original except its a different label (I removed the original code that does the same! Except if its Not Null go to Label
OpCodes. Ret | same code doesnt changed
OpCodes. Ldloc_S, 0 | Load value from stack index 0.
OpCodes. Ldarg_1 | Load argument at index 1
OpCodes. Call | Call the method
OpCodes. Brfalse_S label | If return value is false just go into specified label
Otherwise will exit
Basically
..
// Code from above
if (ilimitedwave == null)
return;
// Here is what we want to add
if (CustomWaveSet(spawnableWaveBase, newValue)
return;
// Running original code here
why not just Ldloc_0?
What if code changes, but ye good one
I will do
It was fast rls since I made it work
The order of RoleChange is
- ChangingRole & Changed
- ReceivingLoadout
- Spawning & Spawned
??
ChangingRole
Spawning
Spawned
ReceivingLoadout
ReceivedLoadout
ChangedRole
thxxx
Where was Timing.CallDelayed again?
in what file
because I don't have it included and I forgot
right thanks
Is there a list of things CASSIE can say or do I just wing it using the ingame tool
What's the ideal Cassie announcement function to call (is it RespawnEffectsController.PlayCassieAnnouncement?) and what dependencies does it have because it no build.
I'm just getting this build error, and that's a referenced file
0>CustomEventLoader.cs(51,34): Error CS0012 : The type 'NetworkBehaviour' is defined in an assembly that is not referenced. You must add a reference to assembly 'Mirror, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
0>------- Finished building project: RespawnTokenOverhaul. Succeeded: False. Errors: 1. Warnings: 0
RespawnEffectsController.PlayCassieAnnouncement("SURVIVE . FOR THERE IS ONLY YOU LEFT", true, false, true);
I'm also kind of wondering what the CustomSubtitle parameter does, it probably just overwrites the displayed text however
oh wait I cannot read
it says right there it needs mirror
Tehehe
😭 I'm running on such little sleep but it's so close to being done
istg
awesome it built
Now build your path to the bed
:( I wish
I gotta change the ip adress type of my server from static to dynamic because I typed in the wrong command
and they've only got time in about an hour
so I'll be awake for a bit longer
also why I'll have to test it tomorrow
because I'd rather not leave my pc on whilst I'm asleep; costs energy which is money
I have static IP
But i don't wanna verify it cus probably against the rules having the RA password as 123
And have a great description
Which mine would be "Testing and abusing any players who join this hell hole"
lmao
mine is much more tame
but the server name is Dipshit's Cave.. which if that's too much I'll change it
that's just the name of the Discord I host it for so why not
'host' I play with, it's not exactly permanently up
alright time to write a readme I guess.
Oh ye it needs rules
What are rules
1, use common sense
2, search what it is really
3, use legendary sense
4, there is no gameplay rules
5, don't be dumb or something that usually be not great
6, please be over 13, otherwise reporting your steam account
Huh you can line break
Like with pastebin
idk how else to add more text in there
Enter?
What did TemporaryData get replaced with since it's deprecated
huh
Was this a nwapi feature ?
seems to be gone
above
Was it a nwapi feature
And what specifically did you use it for
seems it was, and just storing arbitrary data on players
This ?
ty
yeah looks like new TStore(player) would work
cool
Might need the new() constraint on GetOrAdd, but im not even sure you would since it has the CustomDataStore constraint
generic methods
Huh
internal static void Destroy<TStore>(Player player)
Generic method
I feel like this could be changed to not use reflection but idk

I'll add that to my datastore performance pr in a bit
woo!
Hi, I wanted to bring this suggestion back to light. Right now players have to set up the same SS-settings on multiple servers that come from one server host which for them is really confusing. Is there maybe a workaround for this problem?
#serverhost-suggestions message
anything else? https://github.com/northwood-studios/LabAPI/pull/77
Looks fine
was just wanting the reflection gone
yeah I agree
async await works as intended, no need for task.run for IO bound
also you can call unity related apis from them dont listen to eve
Need Task#Run() to run in a background thread mostly

since when
i swear it wasnt like that
Unity6?
with async await you can
no not unity6
its the unity syncronization context that allows you todo it
Oh uh
it always brings you back to the main thread after an await
if you task.run then you are doing somthing else entierly
okay
why can you say it and why others cannot
are you using magic?
task.run and async await are different concepts
async await is asynchrouns programming (which has nothing todo with threads), and the other task.run is about starting up a thread and running your code there
i mean async await is the same thread right
they are different and have nothing todo with eachother is what im saying
it doesnt block, thats the point of it

it awaits

i have things i need to relearn
oh its task delay i was thinking of
that blocks
😭
or is it
if you await something on the main thread it will block the main thread though
Unless Unity's doing some weird voodoo
when ever i refer to async await im refering to TAP or Task-based Asynchronous Pattern i suggest you read into it
the unity synchronisation context has that convered
oh i think your referring to what todo when calling async code, you can just fire the async code without an await like this _ = DoAsync() and it will run asynchrously on the main thread without blocking
oh
Even outside of the Unity editor? That sounds crazy weird
What if my background thread awaits an async method
i recommend doing something like this to capture exceptions #serverhost-cat message
Don't have access
copied message:
You can make an extension like this
/// <summary>
/// Log exceptions for any async task.
/// One of LogExceptions or IgnoreExceptions must always be used.
/// </summary>
/// <param name="task">The task to make the continue with.</param>
/// <returns>The resulting task.</returns>
public static Task LogExceptions(this Task task)
{
task.ContinueWith(c =>
{
Log.Error(c.Exception.ToString());
}, TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.ExecuteSynchronously);
return task;
}
so you can do this instead everywhere
[PluginEvent(ServerEventType.PlayerReport)]
public void PlayerReport(PlayerReportEvent ev)
{
Plugin.Instance.ReportPlayer(ev).LogExceptions();
}
any particular reason you are returning a Dictionary<Player, CustomDataStore> instead of i.e IEnumerable<(Player Player, TStore Store)>
Fair, but everything's all fine if I await functions in a background thread right?
Unity's not going to start messing with my background stuff if I don't touch resources on its main thread
serverhost chat, idk how to get the role
I think !link or !discord in sl server console
or !role
one of them lol
!serverhost in your console if i remeber correctly
!hostrole
Do it in your servers console, Most I will do is laugh at you
after the first await i believe you end back on the main thread even if you started on a new thread(which makes what you are doing kinda pointless)
lmao I could have listed 20 more and would've still been wrong
Now I remember why I've stopped using Unity all these years ago
lol
I'll check if that's actually the case just to be sure but holy moly that's a pain in the ass
Real
Yeah it appears that's the case
Hope I can override that behaviour because that is stupid
I get why you'd want it but like, idk don't make it the default for everyone
thanks Unity
i believe you can create your own synchronization context and set it before you await(?) i dont know since i have never done it myself
Might be able to tell it off by doing await MyFuncAsync().ConfigureAwait(false);
I'll have to try
could work
yeah that's what it does
my cassie generator is now half obsolete 😭
you have to use Awaitables though
Unless documented otherwise, all Awaitable instances returned by Unity APIs, as well as any user defined async Awaitable returning methods, have the following continuation scheduling behaviour:
If the method is called from the main thread, it resumes on the main frame.
Otherwise it resumes on a .NET ThreadPool thread.
using Tasks won't guarantee which thread you end up on, and you most likely won't end up on the main thread
and never use async void
async void is fine for fire and forget behaviour, like event handlers, but that's pretty much it
no
if you have an unhandled exception, the whole program crashes
did some dumb testing to check what Unity does to my await calls and it seems okay?
sure, but if you don't, it's fine. But it's really only for fire and forget event handlers. There's really no other reason to use it.
Yep
[2025-04-30 22:57:03.128 -07:00] [WARN] [SLTestPlugin] NULL THREAD
[2025-04-30 22:57:03.142 -07:00] [WARN] [SLTestPlugin] NULL THREAD
[2025-04-30 22:57:03.238 -07:00] [WARN] [SLTestPlugin] Before: Thread Pool Worker.
[2025-04-30 22:57:03.910 -07:00] [WARN] [SLTestPlugin] After: Thread Pool Worker.
so I should pretty much be fine with what i'm doing
as long as I don't await anything from the main thread itself
Oh yeah I never said I'd use async void haha
you might wanna check out awaitables though
i haven't used them yet but they are pretty cool
Yeah I took a look at them and idk if what I'm doing warrants using them
I'm really only going to start a connection in a background task, and then start another background task for outgoing messages inside it, using the first task for incoming messages
eh, fair
thats what this was for #serverhost-cat message
it "observes" the error so doesnt crash the app
No reason I think, probably because the data is Dic so I did the same
no akess
btw @upper vapor after getting some help elsewhere, turns out the pitdeath collider was on a layer that couldnt interact with pickups at all. so i just changed the layer to something that would. sorted.
bruh
xd
also found the actual cause of skeleton being invis
this is WITH scale code i had before
just ReadyList instead of List
foreach (Player target in Player.ReadyList)
ohhhh




