Extended Networking
adds RpcX-attributed RPCs for s&box with explicit who receives (RpcTarget) and who may call (RpcSender). Both are flags: you can combine several targets (e.g. host and owner) and several allowed senders (e.g. host or owner) in one attribute. That keeps sensitive logic off arbitrary clients and supports security and anti-cheat: rules are checked when sending and again on receive; bad method identity, target, caller, or arguments are rejected, and in non-DEBUG builds invalid callers are kicked. AdminSystem adds an admin list (host is always admin) for RpcTarget.Admin / RpcSender.Admin.

Admin-scoped targets integrate with AdminSystem (SteamId-based admin set, host treated as admin). Admin list can be synced to joining clients and persisted via storage helpers in that system.

Limitation:
RpcX is always reliable
Limitation: RpcX does not support generic methods yet — use non-generic RPCs only.

Future Updates: Add async Rpcs and Sync attribute

Recipient filters:
RpcX.FilterInclude / RpcX.FilterExclude 

Admin commands (
AdminSystem)
add_admin <steamId> | Add a player to the admin set.
remove_admin <steamId> | Remove from the admin set.
clear_admins | Clear all admins (host still counts as admin).
is_admin <steamId> | Log whether that Steam ID is in the admin set.
list_admins | Log all stored admin Steam IDs.
save_admins | Persist admins to storage (admins.json).
load_admins | Load admins from storage.
auto_load_admins [bool] | Read or set auto_load_admins: when enabled, admins load when the system starts.

Usage sketch
[RpcX.Broadcast(RpcSender.Host | RpcSender.Owner)]
public void HostOrOwnerMayCallEveryoneHears()
{
}

[RpcX.Broadcast(RpcSender.Admin)]
public void AdminOrHostMayCallEveryoneHears()
{
}


[RpcX(RpcTarget.Host | RpcTarget.Owner, RpcSender.Owner)]
public void OwnerCallsHostAndOwnerReceive()
{
}

using (RpcX.FilterExclude(Connection.Local))
    SomeBroadcastRpc();