C#:
///Скачано с дискорд сервера Rust Edit [PRO+]
///discord.gg/9vyTXsJyKR
using System.Collections.Generic;
using Oxide.Core;
using System;
using Oxide.Core.Plugins;
using Newtonsoft.Json;
using Oxide.Game.Rust.Cui;
using UnityEngine;
namespace Oxide.Plugins {
[Info("AutoTeleport", "discord.gg/9vyTXsJyKR", "1.0.1")]
[Description("Auto teleport for Rust Team and Clan")]
class AutoTeleport : RustPlugin {
[PluginReference]
private Plugin NTeleportation, Clans;
private bool clansLoaded = false;
private const string autoTeleportUI = "auto_teleport_ui";
private const string fileName = "AutoTeleport";
private const string permUse = "autoteleport.use";
private const string blurMaterial = "assets/content/ui/uibackgroundblur.mat";
private const string color1 = "0.549 0.784 0.235 0.6";
private const string color2 = "0.804 0.275 0.196 0.6";
private Dictionary<string, PlayerData> playerData = new Dictionary<string, PlayerData>();
private Configuration config;
private void Init() {
permission.RegisterPermission(permUse, this);
LoadData();
}
private void OnServerInitialized() {
if (NTeleportation == null || !NTeleportation.IsLoaded) {
PrintWarning("NTeleportation plugin not installed or loaded! Please install https://umod.org/plugins/nteleportation");
PrintWarning("NTeleportation plugin not installed or loaded! Please install https://umod.org/plugins/nteleportation");
PrintWarning("NTeleportation plugin not installed or loaded! Please install https://umod.org/plugins/nteleportation");
timer.In(0.1f, () => {
Interface.Oxide.UnloadPlugin(Name);
}
);
return;
}
if (config.enabledClans && (Clans == null || !Clans.IsLoaded)) {
clansLoaded = false;
PrintWarning("Clans plugin not installed or loaded but option is enabled!");
PrintWarning("Clans plugin not installed or loaded but option is enabled!");
PrintWarning("Clans plugin not installed or loaded but option is enabled!");
}
else if (config.enabledClans) {
clansLoaded = true;
}
foreach (var command in config.chatCommands) cmd.AddChatCommand(command, this, nameof(cmdAutoTeleport));
foreach (var player in BasePlayer.activePlayerList) OnPlayerConnected(player);
}
private void OnPlayerConnected(BasePlayer player) {
if (!playerData.ContainsKey(player.UserIDString)) playerData.Add(player.UserIDString, new PlayerData {
clanEnabled = true, teamEnabled = true
}
);
}
private void OnPlayerDeath(BasePlayer player, HitInfo info) {
if (player == null || player.IsNpc) return;
DestroyUI(player);
}
private void Unload() {
foreach (var player in BasePlayer.activePlayerList) DestroyUI(player);
SaveData();
}
private void OnTeleportRequested(BasePlayer target, BasePlayer player) {
if (!permission.UserHasPermission(player.UserIDString, permUse)) return;
if (ClansTeleport(target, player) || TeamTeleport(target, player)) TeleportPlayer(player, target);
}
private bool TeamTeleport(BasePlayer target, BasePlayer player) {
if (!config.enabledTeams) return false;
if (player.currentTeam == 0ul) return false;
var data = playerData[target.UserIDString];
if (!data.teamEnabled) return false;
var teamID = player.currentTeam;
var team = RelationshipManager.ServerInstance.FindTeam(teamID);
if (team == null) return false;
if (!team.members.Contains(target.userID)) return false;
return true;
}
private bool ClansTeleport(BasePlayer target, BasePlayer player) {
if (!config.enabledClans) return false;
if (!clansLoaded) return false;
var data = playerData[target.UserIDString];
if (!data.clanEnabled) return false;
bool isMember = (bool)Clans?.Call("IsClanMember", player.UserIDString, target.UserIDString);
if (!isMember) return false;
return true;
}
private void TeleportPlayer(BasePlayer player, BasePlayer target) {
player.SendConsoleCommand($"gametip.showtoast 0 \"{GetLang("AcceptMessage", player.UserIDString)}\"");
target.SendConsoleCommand($"gametip.showtoast 0 \"{GetLang("AcceptMessage", target.UserIDString)}\"");
target.SendConsoleCommand("chat.say", "/tpa");
}
private void EnableTeam(BasePlayer player) {
var data = playerData[player.UserIDString];
if (data.teamEnabled) {
data.teamEnabled = false;
SendMessage(player, GetLang("DisabledTeam", player.UserIDString));
}
else {
data.teamEnabled = true;
SendMessage(player, GetLang("EnabledTeam", player.UserIDString));
}
}
private void EnableClan(BasePlayer player) {
var data = playerData[player.UserIDString];
if (data.clanEnabled) {
data.clanEnabled = false;
SendMessage(player, GetLang("DisabledClan", player.UserIDString));
}
else {
data.clanEnabled = true;
SendMessage(player, GetLang("EnabledClan", player.UserIDString));
}
}
private void SendMessage(BasePlayer player, string msg) => Player.Message(player, msg, config.chatIcon);
private void cmdAutoTeleport(BasePlayer player, string command, string[] args) {
if (!permission.UserHasPermission(player.UserIDString, permUse)) {
SendMessage(player, GetLang("NotAllowed", player.UserIDString));
return;
}
var value = args.Length > 0 ? args[0].ToLower() : "null";
switch (value) {
case "clan" : case "clans" : {
if (!config.enabledClans || !clansLoaded) {
SendMessage(player, GetLang("ClansAllowed", player.UserIDString));
return;
}
EnableClan(player);
break;
}
case "team" : case "teams" : {
if (!config.enabledTeams) {
SendMessage(player, GetLang("TeamsAllowed", player.UserIDString));
return;
}
EnableTeam(player);
break;
}
default : {
CreateUI(player);
break;
}
}
}
[ConsoleCommand("autoteleport")]
private void consoleCmdShopBuyItem(ConsoleSystem.Arg args) {
BasePlayer player = args.Connection.player as BasePlayer;
if (player == null) return;
var cmd = args.GetString(0);
if (string.IsNullOrEmpty(cmd)) return;
switch (cmd) {
case "team" : EnableTeam(player);
CreateUI(player);
break;
case "clan" : EnableClan(player);
CreateUI(player);
break;
case "close" : DestroyUI(player);
break;
}
}
private class Configuration {
[JsonProperty(PropertyName = "Chat Icon")]
public ulong chatIcon;
[JsonProperty(PropertyName = "Chat Commands")]
public string[] chatCommands;
[JsonProperty(PropertyName = "Enabled for Teams")]
public bool enabledTeams;
[JsonProperty(PropertyName = "Enabled for Clans")]
public bool enabledClans;
public VersionNumber version;
}
private class PlayerData {
public bool teamEnabled;
public bool clanEnabled;
}
private void SaveData() => Interface.Oxide.DataFileSystem.WriteObject(fileName, playerData);
private void LoadData() {
try {
playerData = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, PlayerData>>(fileName);
}
catch (Exception e) {
PrintWarning(e.Message);
}
SaveData();
}
private Configuration GetDefaultConfig() {
return new Configuration {
chatIcon = 0, chatCommands = new string[] {
"atp", "autoteleport"
}
, enabledTeams = true, enabledClans = true, version = this.Version
}
;
}
protected override void LoadDefaultConfig() {
config = GetDefaultConfig();
Puts("Generating new configuration file........");
}
protected override void SaveConfig() => Config.WriteObject(config);
protected override void LoadConfig() {
base.LoadConfig();
try {
config = Config.ReadObject<Configuration>();
if (config == null) LoadDefaultConfig();
if (config.version < Version) UpdateConfig();
}
catch {
PrintError("######### Configuration file is not valid! #########");
return;
}
SaveConfig();
}
private void UpdateConfig() {
Puts("Updating configuration values.....");
config.version = Version;
Puts("Configuration updated");
}
private string GetLang(string key, string playerID) => string.Format(lang.GetMessage(key, this, playerID));
protected override void LoadDefaultMessages() {
lang.RegisterMessages(new Dictionary<string, string> {
{
"Disabled", "Auto Teleport for Clan and Team is Disabled"
}
, {
"EnabledClan", "Auto Teleport for Clan is Enabled"
}
, {
"DisabledClan", "Auto Teleport for Clan is Disabled"
}
, {
"EnabledTeam", "Auto Teleport for Team is Enabled"
}
, {
"DisabledTeam", "Auto Teleport for Team is Disabled"
}
, {
"AcceptMessage", "Teleport was accepted by Auto teleport"
}
, {
"NotAllowed", "You don't have permissions"
}
, {
"ClansAllowed", "Auto Teleport for Clan is not allowed"
}
, {
"TeamsAllowed", "Auto Teleport for Team is not allowed"
}
}
, this);
}
private void CreateUI(BasePlayer player) {
var data = playerData[player.UserIDString];
var CUI = UI.CreateElementContainer(autoTeleportUI, "0 0 0 0.7", blurMaterial, "0.4 0.4", "0.6 0.6", true);
UI.CreateButton(ref CUI, autoTeleportUI, "0 0 0 0", "X", 15, "0.9 0.85", "0.98 0.98", "autoteleport close");
if (config.enabledTeams) UI.CreateButton(ref CUI, autoTeleportUI, data.teamEnabled ? color1 : color2, "TEAM", 25, "0.1 0.53", "0.9 0.85", "autoteleport team");
if (config.enabledClans) UI.CreateButton(ref CUI, autoTeleportUI, data.clanEnabled ? color1 : color2, "CLAN", 25, "0.1 0.15", "0.9 0.47", "autoteleport clan");
CuiHelper.DestroyUi(player, autoTeleportUI);
CuiHelper.AddUi(player, CUI);
}
private void DestroyUI(BasePlayer player) {
CuiHelper.DestroyUi(player, autoTeleportUI);
}
public class UI {
static public CuiElementContainer CreateElementContainer(string panelName, string color, string material, string aMin, string aMax, bool useCursor = false, string parent = "Overlay") {
var element = new CuiElementContainer() {
{
new CuiPanel {
Image = {
Color = color, Material = material
}
, RectTransform = {
AnchorMin = aMin, AnchorMax = aMax
}
, CursorEnabled = useCursor
}
, new CuiElement().Parent = parent, panelName
}
}
;
return element;
}
static public void CreateButton(ref CuiElementContainer container, string panel, string color, string text, int size, string aMin, string aMax, string command, TextAnchor align = TextAnchor.MiddleCenter) {
container.Add(new CuiButton {
Button = {
Color = color, Command = command
}
, RectTransform = {
AnchorMin = aMin, AnchorMax = aMax
}
, Text = {
Text = text, FontSize = size, Align = align
}
}
, panel);
}
}
}
}