#plugins-dev-chat
1 messages · Page 63 of 1

I'd still have to write a plugin to make it work with Unreal
Especially the steam datagram relay stuff
Huh how
Because I have to use Steam's network sockets stuff in Unreal for that to work
Besides Unreal has online subsystem interfaces you're meant to implement for your online service
Would be stupid to go around that
Ye and? Unreal has interface or some shit for it
Please read the steamsdk docs 🙏
Half of devs suck at even using steam network
Do you use Unreal
Thank you
Hell fucking no
Not to be pissy but like
Telling me to read docs when I know what i'm talking about is a little rude
It's fine
I'm just pissed at that plugin hahaha
it's getting me irritated
No harm done
I was trying to say be careful how you trying to do but if the plugin itself suck you can't really do much
yeeeeee
Because I seen like dev not really implementing a proper steam networking
It works, it's just such a pain to follow
And it's made for Blueprints
And I have to use it because it's at work
It implements a lot of the steam api which is sweet but it's a pain
I'd rather make my own plugin from scratch, tailor made for C++ usage, and stop fighting third party plugins I have no control over
The big spider web inside would go crazy in the bp
Isnt that open source?
Yes
It's paid, and yeah I have access to source code but it's still ass
Oh well uh, I only had exp seeing the official one
I wanted to do it in C++ but now I'm forced to write blueprint code to setup the dedicated server
Just asking why not using the one created by Epic
It doesn't implement every part of the steam sdk
And work needs stuff it doesn't have
OnlineSteamSubsystem or whoever they call it
It's just bare minimum and Epic doesn't really care about getting it up to spec
It works great yeah but eh
Of fuckin course :D
If I write my plugin I'll probably just copy/paste Epic's implementation and refactor it, then add all of the stuff that's missing
Does their eos sdk even actually implement everything
A lot
But devs mostly use another third party plugin that's actually S tier
I own it and it's sweet
You can use it for Steam too, it uses it as an auth provider for EOS
Name of it? [Not like i will buy it or build game in unreal but i can check]
RedpointEOS
Oh i heard that
Makes everything pain free, and you can do cross platform easily with it
Some games used that
Well, if you're okay with players getting an Epic Games popup to create an account
Actually the eos sdk itself contains stufd to connect with steam
But you can use Steam as an auth provider so players don't have to make an epic games account
They'll only need to make an epic games account if you enable cross platform
I was tempted to use EOS
You get free access to Easy Anti Cheat which is cool
And you can still use Steam as always, so players are none the wiser
Ye I seen it and tried to use it (some sort)
dunno why NW didn't just use EAC
They ain't wanna deal with EOS outage or eac incompetence
Right, their anticheat is leagues better than anything on the market

Besides, central servers go down more often than EOS
Tbh I dont really play those games
That has eac
I quit siege that had BE, filled with cheaters
But thats be
Considering the little funding NW gets for SL, I just don't know why they bother with their own anticheat
Mr BEDaisy
Especially with how inefficient it is
Server only mods, anticheat can just ignore afaik
But that requires using eos for it
afaik they'd only need to replace the low level transport
to connect to EOS/route through EOS
Mirror itself wouldn't be an issue
Idk what transport currently sl use tbh
The only reason I don't use EOS for EAC on my projects is because you can't use Steam Relay with it afaik
Just some low level transport lib Mirror comes with
iirc
And there is no "FakeIP"
yo btw i compleated doom, and i can say the boss battle (the first one, last one was easy) i cried the parries were crazy
im talking 5 perries at the time
I playing Doom Eternal and fighting with the Marauder is hell

And what would Steam Relay would give you than the eos p2p one?
afaik it doesn't expose your ip
It goes tru their thing
You need some sort of lobby too
As in steam's one if i remember correctly
Waiting on a response on the steamworks group
I wanna see if it's possible to enable relay for dedicated servers but force players to expose their ip
Never seen like that
would be cool
You can use fakeip iirc for it
Yeah but I'm wondering if you can use a fake IP while also rejecting relayed connections
free ddos protection for servers, and you still get access to player ips for vpn detection, geoblocking and the sort
I'm not that into SteamRelay/P2P
Nvm
I was gonna say send some auth stuff into it
But remembered you have to connect first not just send packet
eh i'll find out when I write my plugin
Ah you can use a string or bytes for NetworkingIdentity
Idk if the m_eType is a flag or not
Nvm it's probably not
Man i read this doc like months ago
yep, LiteNetLib4Mirror
@restive turret I'm mostly trying to see if I can have the dedicated server request a fake IP via ISteamNetworkingSockets#BeginAsyncRequestFakeIP but also reject relayed connections
like
it sounds possible in practice
but idk if the relays would just refuse connections if I try that
Lemme check that thing
Fuck forgot work pc doesn't have my filed
Me when I cant find a single fuckin repo using that
Nvm this runs a callback
I disabled the relay on my end
I can connect to the game server, it's relayed but my ip was shared
although logs don't show it i assume I can retrieve it anyway
Yeah

Force what
Ye if not using fakeip i guess
the server is using a fake ip
and since it's possible to connect to the server's fake ip without being relayed locally
i'm trying to see if the server can force the player to share their ip
Yeah but it'll be a fake relayed IP if steam relay is enabled for them
i'm trying to force them to use their actual IP
wdym
KeyValuePair<string, string> Data { get; }Get all data for this lobby
SteamId Id { get; } int MaxMembers { get; set; }Max members able to join this lobby. Cannot be over 250.
Can only be set by the owner
int MemberCount { get; }returns..
No i mean just can you get it on the server?
I'll still need to force the client to connect with its public ip
Otherwise I'll just get some fake relay IP for the client
That's the hard part
can be spoofed
(not steam ticket)
Well you can still fake it even in sl
SL's... SL
If I can force the player to expose their IP I can just snatch it from the socket
that's easy
the forcing part is hard
Did you ask steam support team or smth
You can't ask them that stuff
They only accept tickets for steam api bugs
I sent a message on the steamworks group but no answer so far
Ah fuck
Btw I don't think anyone can use steams relay because it has your steamid (or other auth info in them)
Check SteamNetConnectionInfo
wdym
What u use for creating a server
:?
I don't get it
either way seems like AllowP2PPacketRelay doesn't do what I want
oh well
Well I dont even know what you want and how you doing it rn
I wanna force the player to connect to a relayed dedicated server, with their public ip
simple
What u using rn to start & connect
Unreal stuff
Sobbing
Hurting will be called if player has spawn protection effect?
Probably
You moment
You issue
Not my issue
said slejm
Skill issue
Set intensity to 1
its already
Are you sure sour module instance config doesnt throw errors?
Read my message again
ev.Player.EnableEffect<SpawnProtected>(1, 3); it too dont works
Try logging thr Conifg.Durtion before the enable effect
idk then ¯_(ツ)_/¯
nw moment
You moment
no nw
Works on my end
try with npc by the plugin
Spawn protected has its own logic
Check the logic inside it
public override void OnPlayerSpawned(PlayerSpawnedEventArgs ev)
{
if (Module.Instance is null || !Module.Instance.CurrentState) return;
ev.Player.EnableEffect<SpawnProtected>(1, duration: Module.Instance.Config.Duration);
}
id use changed role btw
different?
Spawned has a specific condition i cant remember
Spawned is called after changed role on a specific condition
I dont remember the exacts
but its calling for npcs too
it doesn't get called xd
huh
i'd used an outdated reference

i believe theres 2 relay types
one that leaks your ip
one that doesnt
however the one that does is the "old and legacy" one
cuz that was also used for p2p...

Yipee am back home
Hi back home
Heyo just double checking something quickly
Does the wildcard permission stuff work properly with subgroups for permissions? So if I had the permissions below, would myplugin.mygroup.* grant blackout and tdm, but not coolcommand?
myplugin.coolcommand
myplugin.events.blackout
myplugin.events.tdm
Is there a better way sto see if the object that a raycast hit is a specific object?
unless you want to cache all the colliders beforehand for each object of interest, no you cant avoid doing a getcomponentinparent
Yes
Otherwise if you wanted all groups and inner groups, then you would need ** but that is not supported
so fi you want every permission listed here in wildcard, you need
myplugin.*
myplugin.events.*
Any objection to cs hit.Value.collider.transform.IsChildOf(go.transform)
i mean if it works
Aight bet
hey, is it possible to set firearm's current ammo count when when it's a pickup? because this seems to work only when a player has the firearm inside of their inventory
private void ServerEventsOnMapGenerated(MapGeneratedEventArgs ev)
{
var room = Room.Get(RoomName.LczGlassroom).First();
var pickup = Pickup.Create(ItemType.GunRevolver, room.Position + Vector3.up * 1.5f) as FirearmPickup;
_serial = pickup?.Serial ?? 0;
if (_serial == 0)
{
BetterLog.Error("Failed to create custom revolver pickup.");
}
else
{
BetterLog.Info($"Created custom revolver pickup with serial {_serial} at {pickup!.Position}.");
var revolver = pickup.Base.Template;
revolver.TryGetModule<CylinderAmmoModule>(out var ammoModule);
ammoModule.ServerModifyAmmo(1);
pickup.Spawn();
}
}
this is what i did for UCI to get the item from a pickup
firearmpickup.Base.Info.ItemId.TryGetTemplate<Firearm>(out Firearm firearm);
firearm.ItemSerial = firearm.Serial;
You need to set the firearm's template serial temporary to the one your editing
as CylinderAmmoModule does not have modify method with specified serial
why not give an item to the host and drop the item
ah alright, huge thanks
smh
like actually
I mean on death you drop your whole inventory, no?
this shit causing so much fucking issue
ye with ServerRemoveItem
but
ofc the item being got destoyed and i want it to drop not like destroy destroy
Does ServerRemoveItem actually drops the item, huh
isn'T that just removes the item completly?
That is ServerDropItem
that is why I was confused 
Tbf i give up
If I end up allowing relays, servers can just make the player send them a network message with their IP

but how?
you cannot modify the client
so
Oh yeah wasn't talking SL for that discussion
Hah yeah fair
else i was interested
I wish SL had SDR support
but still cool
But it don't rip
For a project
SCPSL remade in Unreal? 
SCPSL in fortnite
please seek mental help
If I were to make an SCP game I wouldn't just remake SL
I know
Although an Unreal Engine version of Breach (the Garry's Mod gamemode that inspired SL) was how I got my first game dev job
It wasn't a full working prototype, nor was it really Breach/SL, but they liked it enough to hire me
Containment breach is peak
Breach isn't the same as CB
It was the name of a Garry's Mod gamemode that played like SL does
SL is inspired from it
But yeah, Containment Breach got me into SCP as a teen
CB was for me the introduction
crazy game i love it
I got into sl bc idk watched yt and this game popped up
I tried like years ago
~2018ish
this uh
is not very secure
tbh i made my own relay system for a game
but it requires hosting it yourself (as in the game dev hosting the relay)
Oh I know, I'm half memeing
And the whole idea was not to host anything myself
One for lack of funds, two I'd rather use Steam's rather robust infrastructure
The servers would be community servers anyway
They can use clientside mods to get that info from players, or make the players send an http request somewhere, idk
Not my problem, just something I kinda hoped SDR would allow for
Not a game breaker of any sort anyway
what
so
why picking a UsableItem then using it doesnt run PlayerUsedItem
oh nvm might be my problem
nvm i doesnt do anything with the item
im just
cant
i have zero clue how and why
it doesnt even do anything that changes the item, nor pikcup, nor anything
even if something doesnt work it should run the first line
Is the handler registered
yes
it runs OnUsing
so i assume
nw now apparanetly works
???
didnt do shit
recompiled 
SL mods be like
i wonder if theres any other games with a modding scene quite like sl
where theres like 500 developers in total and its fully server side and maps are built literally using the primitive 3d objects as if its a map built for someones first unity project
Probably
Yes thats minecraft
Minecraft plugins are like the worst but best thing ever
And the use of texture packs makes it alot possible to do some stugg
im so confused why this isnt working
there's no errors or anything just... doesn't show anything
idk what u want
minecraft plugins do have a lot of control over the client that secret lab plugins lack
Nope
Packets and packets
Nothing else
The packets most of the time crash the client
In some aspects minecraft is good but once you do stuff on your own client crashes daily
Its unstable
its a bit more of a complex game than scp sl in some ways and has more support for modding in general (in vanilla i mean)
entity attributes come to mind.
im not a minecradt developer though
to be clear
Entity attributes is like sl classes
Just made them with commands
Because internally they are treated like that
Entity if i remember correctly extends attributes
So yea thats why same thing with sl with referencehub
bc of the lenght?
No because its not the behavior that they expect
Some of them are combined
So like 1 and then another
If i remember moving offhand is connected to moving in inventory and so on
Like the system is complicated and most of the crashes in the client are net.minecraft.client.packets.NameOfThePacket.ab().c() crashed
So imagine how hard it is because of just obfuscation
i dont want to make a Hint and send that and everything because its unnecessary but idk if i have a choice
my guess is that im not doing the OnSend thing but idek
i love finding errors with my plugin when i try deploy to production and find out that cedmod is breaking it 😭
pushed a pr tho to fix so yippie
just kinda silly that cedmod broke my plugin from loading... it didnt even reference the thing that was breaking...
Minecraft devs can at least add their own textures, entities, and other programs lmao
We can't add our own classes and entities and items
Can't add new textures or things like that
me when writer.WriteString
also you forgot the using keyword
c*dm*d strikes again
quad: 
this is just sample code
i used writebytes cause thats more like what im doing and idk i did kinda forget writestring existed
either way thats not why its not working
well
like
it sends correctly
pack writes the id
the serializer class writes the hint id
the displayobject class writes the duration
hint writes the effect array (-1) and the parameter array (-1)
texthint writes text
um
wtf
Well this doesn't help much sorry. Will see it tmr
i might have figured it out
nevermind!
i got it working
How
they cooked
I don't wanna be cooked
Are there events for a player changing the attachments to their gun?
gm chat
hi
how are you doing?
nice :3
Morning david, what are we breaking today?
dead chat
@icy knoll howd u actually get away with parenting the text toyto a player
for ur text chat

cuz it just follows the rotation of that player
cant avoid that
there is either going to be slight desync from player movement or massive desync from player movement
massive desync would involve me syncing the text with player position
then no rotation desync
but massive movement desync
but there is little rotation desync from the method i currently got and no movement desync
so, yeah
works fine tho to me
and then immediately gets overwritten by unity 
just don't spin 720° per second
yeah
the thing is
lol
not for me on my server
uhhh
ive heard no complaints about it not syncing correctly
foreach (Player observer in Player.ReadyList)
{
if (observer == _owner)
continue;
Vector3 pos = observer.GetActivePosition();
Vector3 direction = pos - _textToy!.Position;
direction.y = 0;
Quaternion rotation = Quaternion.LookRotation(-direction);
_textToy.Rotation = rotation;
observer.SendFakeSyncVar(_textToy.Base, 2, _textToy.Transform.localRotation);
}
oh ur making ur own...
yes....
wow
why? 😭
just use mine
i said why
like
50 times
😭
only use ruei, mer & cedmod cuz theyre too difficult to create myself
well, im not gunna support you recreating my entire plugin, im sorry 😭
yay i love reinventing everything cuz everything has to be fully compatible with every other plugin
i dont trust lumi to keep plugin permanently up
standalone plugins that don't interact with other things? nuh uhhhh

me when yesterday i legit had to debug cedmod to make sure my plugin works because cedmod broke it
eve
you have your answer
it's cedmod again
text chat is my best plugin to date, ill maintain it
why would i not maintain smth im so happy about
i wont rely on your word 
ok then, but i will maintain it if i see issues
but i dont see a single issue
like ive been maintaining all my plugins, even my oldest ones, til this day
if they break, ill fix them
like cmon, why would i abandon this stuff 😭
eve...have you considered
forking the plugin
all id say is just use my plugin rather than make ur own, it's more hassle then it is worth based on a hypothetical
i like having stuff in 1 plugin to maintain 
me when she will have to open source her version
i know :3
:3
do you have one single csproj?
i love AGPL v3 and how it works
ofc
she loves hassle
¯_(ツ)_/¯
what
but anyway yeah im not helping someone recreate my entire plugin, ill only help when they are using my plugin 😭
i can add configs
comment out 
rly quickly
"everything will work"
bru
yea
but
do you add an if check pretty much everywhere where it's needed?
i can also just
make default config
so it disables itself without need to handle it in the module itself

tbh i don't like these singular-project-everything-amalgamted approach
me either, i may seperate my server's plugin to fix this issue
do you have patch groups or whatever you called it in secretapi
yes
completely ignore licensing and stop caring
yeah that makes things muich better
me when i will send a DMCA letter
and im not joking
with what proof
goodluck getting it taken down when its on her desktop
then it has to be open source
she will find her
and she will kill her
thats not what zenlet asked
lisences dont matter if you cant read anyway

dam
me when i just go after the server /shrug
that violates CSG
i did
how do you get proof of stolen code
you cant attack other communities
what
if no code is posted
report: 🤯
dont think csg covers plugins like that?
even then you still need evidence
which you cant get cause its on desktop
idk, go read it
as long as its not published to git or whatever then its fine
again, you have to prove they've stolen your code
AGPL explicitly states that you have to open source your fork if you're using it when hosting on a network
ah
:3
just vibin
valid
If the license requires the source to be handled in a specific way, then no matter how you use it, should be used that way
"erm but if they don't know"
*proceeds to yap about it on discord*
me when legal document in mail box 
I'm pretty sure discord would not be a legal ground for DMCA, but requires actual validable proof
eh
a court would disagree
but that entirely depends if the case is taken to court ofc
csg doesnt seem to unless im blind
so server wouldnt get taken down either on SL
most people just cave in after a DMCA as it is too expensive to persue in court
I don't think so. Since a Discord message is not evidence
correct
people can get reported and arrested over discord messages, so
anyway
i need to go
That is another thing lol
That is for hate speech no?
Like in Germany or America for certain phrases
Then the message itself is the evidence
think so
hate speech and terrorism
and other stuff
is "anyád" hate speech?
No, that is common hungarian
Common hate speech
o.o
now its tilted
😭
wait a minute
so it does send the rotation
but then uses that as an offset rather than position itself maybe?
oh
that was easy
@restive turret ok buddy
i need help now
i need help figuring out
fake syncing
of sync var
Wdym
i have rpc
i could see what was needed there
Lmao
but i cant find it for dirty bits
sync vars 
its EntityStateMessage
i just
dont know the payload
Decompile Nerwork on object there is dirty bit value
Or u can just copy mine
Idc at this point
which one
2 files iirc.
FakeSyncVar
FakeSyncCore
what repo
KadavasKingdom/LabApiExtensions
you're making literally the same thing as Lumi... dam
can you like change the format 😭
morning
hi cyn
how goes it
idk why people want text chat in this game .-.
same reason why people have huds
accessibility
QOL
dumb that the game doesn't have it tbh
Way to force a player to spectate another one?
not rly
Okay, plan B
teleport everyone else to the player
Does anyone have the name of this room in LabAPI?
https://github.com/Axwabo/SCPSL-Helpers/blob/main/Axwabo.Helpers/Config/RoomType.cs
there may not be a base-game RoomName for all rooms
Too late, plan B is in place
Yeah there is no room name for that
Its T shaped room in EZ
you will have to filter rooms for that
🫡
just me
as Axwabe said
Found an alternative fix: if (player.Room.Shape == RoomShape.TShape && player.Room.Zone == FacilityZone.Entrance)
Yeah that works
@unique crane is there any way to parent an object but prevent rotation updates
you can stop the updates server side and fake sync
but client when parent will override
You have to either set the absolute rotation every frame too
Or
fake the parent and send the positions
she wont help
me when i already told her i wont assist her in remaking my plugin lol
atp just use it icl 😭
disable the gameobject
err
yes that does it server side
but what about client side
so it still updates position
honestly
just parent and update position manually
horrible experience 
😭
just turn off the client
ye
just dont play the game
YES
legit so much hassle for the hypothetical that i wont maintain the plugin 😭
perioooooooddd
Yeah no worries, you can always count on me
hi miller

hiii
Why
?
what plugin
text chat
oh
just a text toy above a players head
is that not open source
Ah forgot you are in other part i was like "why are you saying hi at 23?"
it is
the rotation is constantly faked to face the player i believe
if that helps
doesnt work when parented for me
really
Most attempts at parenting stuff for us have also failed
So I end up just setting the pos/rot every frame
¯_(ツ)_/¯
have you tried copying the code and seeing if it works, and then checking what difference between yours and her code
"ill dmca"
client side parenting has been both a blessing and a curse
so ill just leave it be
same
i dont parent here
not even comparing the code?
cuz i need rotation per player
she seems like she'd get mad so
i used a bit of hers to test originally, didnt work
What's the license on the repo
Skill issue
so i just moved on to fully doing my own
Dont remember
Agpl ? Or idk what she said
But honestly if she's gonna be that mad ill just do it myself somehow
probably all rights reserved if she has that attitude? i would hope so.
what the fuck
GNU AFFERO GENERAL PUBLIC LICENSE
version 3
Crazy change
now its unique
yes
and its all yours
well its literally just
colored 💬 icon
me when you can modify that in the plugin config…
and..?
if im doing custom and youll get mad at me for stealing
Skill issue
You already stole many stuff
its the best fitting icon for it


we have the stealer here
license says you can take the code
Bets fitting icon is my ass 🧌
eve i’m not even tryna be mean but like why don’t you just use my plugin rather than try rip it off, other than the fact you’re worried i’ll stop maintaining…
just gotta make the plugin available under the same license
Wrong troll emote
I like to use my own
again
You chose the license though
and open source
and yea id rather have my own stuff so i can make changes to my own project without open sourcing it
Yeah that's what same license means
no justification required
I use mit since dont really care
sure, fair enough, i just don’t think it’s worth the hassle tbh
and yeah its open source idea
i use cc0 since its based
i use freeware in alot of my repos
thats NEXT level of not caring
i use MIT
and even then i had the idea before text toys were added
it looks solid to me
i dont remember but there is a "do whatever the fuck you want with it"
License
(but obviously doing it with primitives sounded terrible so nothing happened til recently)
Yes that one
anyway i’m going to sleep now so goodnight yall
is called freeware
me when I choose a license that makes nobody use my stuff
gpl is like a worm
lmao
it spreads
anyways, i think fake parenting thru updates is fine, the player recieves other player positions at the same time that they recieve other object positions
i dont include a licence
top 10 things i will never do
i hate parenting
Probably good idea
and none can change my mind
Just didnt find what was best
i tried using it
Unity parenting makes it work weird
it broke my client schematics so badly
i left it to be always 0
even tho in the server they are parented correctly
A tear for your kids
?
Oh you mean object
I mean toys
their parenting system is ASS (not for nw fault, but for how shitty unity is)
Unity being unity
tbh toys not parenting properly is probably on NW
cause otherwise no games would work
i saw entire schematics being destroyed for parenting them, even if i parent them on the server they are fine
i just don't understand the logic
errr
idk
they just call unity parenting
SetParent call
so it should just use unity
unless the msg doesnt send / receive
Send
Deez
Do you have friends
Sometimes
Interesting
Wdym
idk maybe it doesn't work right now
U suck
Anyway good luck with parenting
Remember it has to have network identity
No im not
Was parenting a toy to a player
so it should work
Wdym both one of it must be because you parenting with itself
player.GameObject.transform ?
i think so
Im high
jk
just make sure its not .Camera
Hi high I'm SlejmUr
wasn't camera
@unique crane why OnServerCommandExecuting(CommandExecutingEventArgs ev) dont have ev.Respond or something
i think i found a good use for my demo system
if i can figure out how to write scripts for blender, i can write a demo reader for blender that ports games to a blender animation
although idk if thatd be very optimized
Can the server receive a suggested keybind from the client?
the server provides the suggested keybind, so i think so
unless it’s not saved
decompile the class to check
Wdym server receive suggested keybind
You mean applied keybind? No
The keybind chosen by the client
yeah you can’t figure that out
if you’re putting the keybind in hints though you can use the SSKeybindHintParameter
david ur so slow smh
Phone typing
Go test my QA request smh smh
hiii
halo
how are you doing?
Something like this?
Player::SendHint("Press {0} to suicide", [new SSKeybindHintParameter(id)]);
yes
oh my god
now i’m not testing ur QA tests ever smh
/j
everything good?
LOL

Insane.
We need 14.1.2!!
i’ll qa test when ax sends in their pr to labapi so i get my abstract plugin classes!! :3
ax said to let them do the pr, i was gunna do it myself
i dont think he ever finishes that
I'm telling supervisor!!
Tell QA Hr
lumi
paws
whta do you even do in nw
I GET ASKED THIS QUESTION EVERY DAY
its a good question
So uh did you ever answered it?
The better question should be.
Do you ask that even yourself?
ic
Nice so when i need something in wiki I can tag you for it 
i don’t have access
wiki staff do
patreon portal and some other internal stuff is under our jurisdiction
skill issue? there's a really simple solution to the rotation problem btw
just look more :3
ev.Sender.RaReply
i got time now so






