Introduced by Kulltero in PR #55, drag & drop allows us to mark a panel as draggable & listening to its movements when dragged by the player, opening up a whole new way of player interaction.
Introduced by 0xF in PR #69 (nice), you're now able to rotate any UI elements you're creating.
Introduced by Jake Rich in commit, in Protobuf format you're now able to add entirely custom player vital elements with very high customisation, allowing you to change the following:
public Color backgroundColor;
public Color leftTextColor;
public Color rightTextColor;
public Color iconColor;
public string leftText;
public string rightText;
public string icon;
public bool active;
public int timeLeft;
WARNING
Be sure to manage the list of CustomVitalInfo
and CustomVitals
instance properly by using Facepunch.Pool.Get
and Free
as they are pooled objects.
To use TimeLeft
, you must also assign rightText
with a similar format such as the following: "{timeleft:ss}"
. When the countdown reaches zero, nothing will happen, it's just a client-side visual countdown.
The icon
field is a string but it actually takes in a FileStorage
CRC value.
You can now change the scale of entities. And it's fairly easy too, as well as optimal on the network. The scale only gets networked if the BaseEntity.networkEntityScale
is set to true
. To actually update and sync the change, you just update the transform.localScale
and run entity.SendNetworkUpdate()
.
INFO
You can also use ent scale <value>
to rescale an entity. Use ent scale 1
to revert back to the original size.
You can now assign custom item icons by using item.itemImageId
which is a FileStorage
CRC uint
value. Make sure to mark the item dirty with item.MarkDirty()
to see it update immediately.
There are a few modding-related supported changes, such as the following:
While you're still able to use the WebControlPanel using Rust's default WebRCon with one defined password granting the ability to execute owner-level commands, we're introducing Accounts with this brand new update!
INFO
Due to browser limitations, if you're using the WebControlPanel tool with secured connection, aka https://
mode, you're required to set up a SSL certificate on your Rust WebRCon connection. To use an insecure connection (bypass the certificate), switch to http://
.
A new mode will be available on the panel, named Bridge. Once configured on your server, it will start a new RCon-like TCP connection which is entirely buffer-based (relative to Rust's WebRCon JSON-based communication) running under Carbon's Bridge system.
As the name might tell, with the introduction of the brand new Bridge connection, you're now able to have multiple passwords for the Bridge connection, which grant the people with access different permissions, opposite to granting them the rights to execute any owner-level commands.
The location of the brand new WebPanel config is at <root>/carbon/config.webpanel.json
by default. Depending on the viewing permissions, once accounts log in, they will only see and access the tabs that they have permission to.
The config can be reloaded on the fly as well as the Bridge server connection and port can be changed when reloading the config. Here're the available relevant commands:
c.webpanel.loadcfg
: Reloads the config, (re)starting the connection.c.webpanel.savecfg
: Saves the config in case any changes haven't saved.c.webpanel.setenabled
: Changes on-the-fly the status of the server if was previously configured to be enabled.c.webpanel.clients
: Prints a table list of all connected web clients.c.webpanel.connected
: Is a readonly Carbon variable which lets you know if the Bridge server is broadcasting.INFO
Whenever the config gets reloaded and new permission changes apply, all currently connected web clients will be disconnected, requiring them to reconnect with fresh account permissions.
{
"Enabled": true,
"BridgeServer": {
"Ip": "localhost",
"Port": 28608
},
"WebAccounts": [
{
"Name": "owner",
"Password": "BMjgFMH",
"Permissions": {
"console_view": true,
"console_input": true,
"chat_view": true,
"chat_input": true,
"players_view": true,
"players_ip": true,
"players_inventory": true,
"entities_view": true,
"entities_edit": true,
"permissions_view": true,
"permissions_edit": true
}
},
{
"Name": "guest",
"Password": "guest",
"Permissions": {
"console_view": false,
"console_input": false,
"chat_view": true,
"chat_input": true,
"players_view": true,
"players_ip": false,
"players_inventory": false,
"entities_view": false,
"entities_edit": false,
"permissions_view": false,
"permissions_edit": false
}
}
]
}