Иконка ресурса

FREE TheRedButton : 2.0.7 2.0.7

Нет прав для скачивания
C#:
// Requires: SignArtist
using UnityEngine;
using System.Collections.Generic;
using Oxide.Core.Plugins;
using System.Linq;
using System;
using Oxide.Core.Configuration;
using Oxide.Core;
using System.Collections;
using Oxide.Game.Rust.Cui;
using Pool = Facepunch.Pool;
using Physics = UnityEngine.Physics;
using Oxide.Game.Rust.Libraries;
using VLB;
using UnityEngine.Networking;
using Newtonsoft.Json;
using System.Text.RegularExpressions;
using System.Reflection;
using ConVar;
namespace Oxide.Plugins {
    [Info("The Red Button", "NooBlet", "2.0.7")]
    [Description("Just a small plugin with a button to troll your players with A fun game.with some punishments on button press")]
    public class TheRedButton : RustPlugin {
        [PluginReference]
        private readonly Plugin SignArtist, Payback, Payback2, BombVest;
#region Vars
        private DynamicConfigFile Button_Data = Interface.Oxide.DataFileSystem.GetDatafile("Button_Data");
        private DynamicConfigFile PlayerButton_Data = Interface.Oxide.DataFileSystem.GetDatafile("PlayerButton_Data");
        private Dictionary<ulong, ButtonInfo> cachedButtons = new Dictionary<ulong, ButtonInfo>();
        private static List<string> cachedpunishmentcooldown = new List<string>();
        BTData btData;
        private static PluginConfig Settings;
        private Dictionary<ulong, DateTime> buttonPressCooldownData = new Dictionary<ulong, DateTime>();
        private const string MLRSRocketPrefab = "assets/content/vehicles/mlrs/rocket_mlrs.prefab";
        private const string scrapheli = "assets/content/vehicles/scrap heli carrier/scraptransporthelicopter.prefab";
        private const string cactus = "assets/bundled/prefabs/autospawn/resource/v3_arid_cactus/cactus-2.prefab";
        private const string button = "assets/prefabs/deployable/playerioents/button/button.prefab";
        private const string sign = "assets/prefabs/deployable/signs/sign.post.double.prefab";
        private const string c4 = "assets/prefabs/tools/c4/explosive.timed.deployed.prefab";
        private const string landmine = "assets/prefabs/deployable/landmine/landmine.prefab";
        private const string scientist = "assets/rust.ai/agents/npcplayer/humannpc/scientist/scientistnpc_roam.prefab";
        private const string scarecrow = "assets/prefabs/npc/scarecrow/scarecrow.prefab";
        private const string bear = "assets/rust.ai/agents/bear/bear.prefab";
        private const string msign = "assets/prefabs/deployable/signs/sign.medium.wood.prefab";
        private const string LightPrefab = "assets/prefabs/deployable/playerioents/lights/sirenlight/electric.sirenlight.deployed.prefab";
        private const string toiletPrefab = "assets/bundled/prefabs/static/toilet_b.static.prefab";
        private const string effect = "assets/bundled/prefabs/fx/explosions/explosion_03.prefab";
        public const string sound_scream = "assets/bundled/prefabs/fx/player/beartrap_scream.prefab";
        public const string effect_onfire = "assets/bundled/prefabs/fx/player/onfire.prefab";
        public const string fireball = "assets/bundled/prefabs/static/campfire_static.prefab";
        MonumentInfo PVELordMonument = new MonumentInfo();
        MonumentInfo ScrapYard = new MonumentInfo();
        CargoShip cargo;
        private static TimedExplosive mlrsRocketTimedExplosive;
        private const ulong skinIDButton = 2893627061;
        private const string permUse = "TheRedButton.use";
        private const string permAdmin = "TheRedButton.admin";
        Signage SignBoard;
        MonumentInfo mon;
        private System.Random rand = new System.Random();
        private Dictionary<string, int> Punishments = new Dictionary<string, int>();
        private Vector3 SwimLocation = new Vector3(0, 0, 0);
        private string UIBGImage = "";
        Vector3 loc = new Vector3(0, 0, 0);
        private static int? _embedColor;
        private string PunName;
#endregion Vars
#region Hooks
        private void OnServerInitialized() {
            permission.RegisterPermission(permUse, this);
            permission.RegisterPermission(permAdmin, this);
            LoadConfig();
            LoadPuns();
            LoadData();
            var buttonlist = cachedButtons.ToList();
            foreach (var b in buttonlist) {
                var playerid = b.Value.OwningPlayer;
                if (playerid != 0) {
                    timer.Once(1f, () => {
                        SpawnButton(playerid, b.Value.Location, b.Value.Rotation);
                        cachedButtons.Remove(b.Key);
                    }
                    );
                }
                else {
                    continue;
                }
            }
            SwimLocation = FindSwimLocation(SwimLocation);
            foreach(var p in BasePlayer.activePlayerList) {
                var e = p.gameObject.GetComponent<PlayerEffect>();
                if(e==null) continue;
                e.DestroyTimer();
                UnityEngine.Object.Destroy(e);
                DestroyPlayerComponent(p);
            }
        }
        void Unload() {
            DestroySettingsUI();
            foreach (var p in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(p, "buttonmenu_panel");
                CuiHelper.DestroyUi(p, "selectedmenu_panel");
            }
            SaveData();
            foreach (var player in BasePlayer.activePlayerList) DestroyPlayerComponent(player);
        }
        void OnNewSave(string filename) {
            cachedButtons.Clear();
            Button_Data.Clear();
            Button_Data.Save();
            PlayerButton_Data.Clear();
            PlayerButton_Data.Clear();
        }
        void OnEntitySpawned(CargoShip ship) {
            cargo = ship;
        }
        void OnEntityKill(CargoShip ship) {
            cargo = null;
        }
        //object OnItemPickup(Item item, BasePlayer player)
        //{
        //    if(player == null) { return null; }
        //    if(item.GetWorldEntity()._name == "buttonpoop")
        //    {
        //        item.RemoveFromContainer();
        //        return false;
        //    }
        //    return null;
        //}
        private object OnPlayerViolation(BasePlayer player, AntiHackType type) {
            if (type == AntiHackType.FlyHack && player._name =="flyhackstop") return false;
            return null;
        }
        private void OnEntityBuilt(Planner plan, GameObject go) {
            if (go == null) {
                return;
            }
            RunChecks(plan.GetOwnerPlayer(), go.ToBaseEntity());
        }
        object CanPickupEntity(BasePlayer player, BaseEntity entity) {
            if(entity._name == "0304") {
                return false;
            }
            return null;
        }
        private void RunChecks(BasePlayer player, BaseEntity baseEntity) {
            CheckDeployButton(player, baseEntity);
        }
        object OnEntityTakeDamage(Signage entity, HitInfo info) {
            if (entity == null) {
                return null;
            }
            if (info == null) {
                return null;
            }
            if (entity._name == "0304") {
                return false;
            }
            return null;
        }
        object OnEntityTakeDamage(PressButton entity, HitInfo info) {
            if (entity == null) {
                return null;
            }
            if (info == null) {
                return null;
            }
            if (entity._name == "0304") {
                return false;
            }
            return null;
        }
        object OnEntityTakeDamage(SirenLight entity, HitInfo info) {
            if (entity == null) {
                return null;
            }
            if (info == null) {
                return null;
            }
            if (entity._name == "0304") {
                return false;
            }
            return null;
        }
        void OnEntityKill(Signage entity) {
            KillButtons(entity);
        }
        object OnMessagePlayer(string message, BasePlayer player) {
            if (message.Contains("succesfully loaded to the sign!")) return false;
            return null;
        }
        void OnPlayerSleep(BasePlayer player) {
            int count = 0;
            var playerInventoryAllItems = new List<Item>();
            player.inventory.GetAllItems(playerInventoryAllItems);
            foreach (var i in playerInventoryAllItems) {
                if (i.skin == skinIDButton) {
                    PlayerButton_Data[player.UserIDString] = count+ i.amount;
                    i.Remove();
                }
                PlayerButton_Data.Save();
            }
        }
        private void OnPlayerSleepEnded(BasePlayer player) {
            if (PlayerButton_Data[player.UserIDString] != null) {
                for (int i = 0; i < Convert.ToInt32(PlayerButton_Data[player.UserIDString]);
                i++) {
                    var button = ItemManager.CreateByName("sign.post.double", 1);
                    button.name = "The Red Button";
                    button.skin = skinIDButton;
                    player.GiveItem(button);
                }
            }
            PlayerButton_Data.Remove(player.UserIDString);
            PlayerButton_Data.Save();
            foreach (var b in cachedButtons) {
                if(b.Value.OwningPlayer == player.userID) {
                    NetworkableId buttonid = new NetworkableId(ulong.Parse(b.Key.ToString()));
                    var board = Signage.serverEntities.Find(buttonid) as Signage;
                    if(board == null) {
                        continue;
                    }
                    SignArtist.CallHook("API_SkinSign", player, board, Settings.buttonSettings.PictureURL);
                }
            }
        }
        object OnButtonPress(PressButton button, BasePlayer player) {
            if (button._name == "0304") {
                if (CheckisCooldown(player.userID)) {
                    player.ChatMessage(GetLang("ButtonCooldownMessage", player));
                    return false;
                }
                var punishment = RandomPunishment(player, button.transform.position);
                var msg = $"<color=green><size={Settings.buttonSettings.broadcastFontSize}>{player.displayName} Pressed The </color><color=red>RED</color><color=green> Button and {punishment}</color></size>";
                Interface.CallHook("RedButtonPressed", player, punishment);
                if (Settings.buttonSettings.broadcastButtonAction) {
                    Server.Broadcast(msg);
                }
                if (!buttonPressCooldownData.ContainsKey(player.userID)) {
                    buttonPressCooldownData.Add(player.userID, DateTime.Now.AddMinutes(Settings.buttonSettings.buttonCooldown));
                }
                else {
                    buttonPressCooldownData[player.userID] = DateTime.Now.AddMinutes(Settings.buttonSettings.buttonCooldown);
                }
            }
            return null;
        }
        void RedButtonPressed(BasePlayer player, string punishment) {
            if (punishment.Contains("custom")) {
                _embedColor = FromHex("#1fa735");
            }
            else {
                _embedColor = FromHex("#8f212e");
            }
            if (Settings.buttonSettings.sendDiscord) {
                //uint crc = r.mugshotCrc;
                //var encodedPng = FileStorage.server.Get(crc, FileStorage.Type.png, player.net.ID);
                //if (encodedPng == null) return;
                timer.Once(0.2f, () => {
                    SendDiscordEmbed( /*encodedPng,*/
                    player, punishment);
                }
                );
            }
        }
        private void DestroyPlayerComponent(BasePlayer player) {
            PlayerEffect playerEffect = GetPlayer(player);
            if (playerEffect == null) return;
            UnityEngine.Object.Destroy(playerEffect);
        }
        private PlayerEffect GetPlayer(BasePlayer player) {
            if (player == null) return null;
            var playerEffect = player.GetComponent<PlayerEffect>();
            if (playerEffect == null) return null;
            return playerEffect;
        }
#endregion Hooks
#region Core
        private void FindOldButtonsAndKill(Vector3 vec) {
            foreach(var b in PressButton.serverEntities) {
                if(b!=null && b is PressButton) {
                    var button = b as PressButton;
                    if(button.GetEntity()._name == "0304") {
                        button.Kill();
                    }
                }
            }
        }
        private static void KillButtons(Signage entity) {
            if (entity._name == "0304") {
                var buttons = Pool.Get<List<PressButton>>();
                Vis.Entities(entity.transform.position, 0.5f, buttons);
                foreach (var b in buttons) {
                    if (b.OwnerID == entity.OwnerID) {
                        b.Kill();
                    }
                }
                Pool.FreeUnmanaged(ref buttons);
            }
        }
        private void Teleport(BasePlayer player, Vector3 target) {
            float currenthealth = player.health;
            string tp = player._name;
            player._name = "flyhackstop";
            player.health = 10000f;
            player.Teleport(target);
            timer.Once(20f, () => {
                player._name = tp;
                player.health = currenthealth;
            }
            );
        }
        private string getTimeRemain(BasePlayer player) {
            if (!buttonPressCooldownData.ContainsKey(player.userID)) {
                return "00:00";
            }
            TimeSpan ts = buttonPressCooldownData[player.userID] - DateTime.Now;
            var time = $"{ts:mm}:{ts:ss}";
            return time;
        }
        private bool CheckisCooldown(ulong userID) {
            if (!buttonPressCooldownData.ContainsKey(userID)) {
                return false;
            }
            if (buttonPressCooldownData[userID] > DateTime.Now) {
                return true;
            }
            return false;
        }
        private void CheckDeployButton(BasePlayer player, BaseEntity entity) {
            if (entity == null) {
                return;
            }
            if (!IsButton(entity.skinID)) {
                return;
            }
            var transform = entity.transform;
            SpawnButton(player.userID, transform.position, transform.rotation, 0304);
            entity.transform.position -= new Vector3(0, 3, 0);
            entity.SendNetworkUpdate();
            NextTick(() => {
                entity?.Kill();
            }
            );
        }
        private bool IsButton(ulong skin) {
            return skin == skinIDButton;
        }
        private void SpawnButton(ulong playerid, Vector3 position, Quaternion rotation = default(Quaternion), ulong ownerID = 0, bool light=true) {
            var signpost = GameManager.server.CreateEntity(sign, position, rotation);
            if (signpost == null) return;
            var sp = signpost?.GetComponent<BaseCombatEntity>();
            sp._maxHealth = 99999999f;
            sp._health = 99999999f;
            signpost.OwnerID = playerid;
            signpost.GetEntity()._name = "0304";
            signpost.Spawn();
            var signboard = GameManager.server.CreateEntity(msign) as Signage;
            if (signboard == null) return;
            signboard.SetParent(signpost);
            signboard.pickup.enabled = false;
            signboard.transform.localPosition = new Vector3(0f, 1.57f, 0.03f);
            RemoveColliderProtection(signboard);
            signboard._maxHealth = 99999999f;
            signboard._health = 99999999f;
            signboard.OwnerID = playerid;
            signboard.GetEntity()._name = "0304";
            signboard.Spawn();
            SignBoard = signboard;
            var player = findPlayer(playerid.ToString());
            if(player!= null) {
                SignArtist.CallHook("API_SkinSign", player, signboard, Settings.buttonSettings.PictureURL);
            }
            signboard.SetFlag(Signage.Flags.Locked, true);
            var signbutton = GameManager.server.CreateEntity(button, position, rotation) as PressButton;
            if (signbutton == null) return;
            signbutton.pickup.enabled = false;
            var correction = new Vector3(0f, 1.4f, 0.01f);
            signbutton.transform.position = position + signpost.transform.rotation * correction;
            signbutton.OwnerID = playerid;
            signbutton.GetEntity()._name = "0304";
            RemoveColliderProtection(signbutton);
            signbutton._maxHealth = 99999999f;
            signbutton._health = 99999999f;
            signbutton.Spawn();
            signbutton.SendNetworkUpdateImmediate();
            if (light) {
                SirenLight backLights = GameManager.server.CreateEntity(LightPrefab) as SirenLight;
                if (backLights == null) return;
                backLights._maxHealth = 99999999f;
                backLights._health = 99999999f;
                backLights.OwnerID = playerid;
                backLights.GetEntity()._name = "0304";
                RemoveColliderProtection(backLights);
                backLights.SetFlag(BaseEntity.Flags.On, true);
                backLights.SetParent(signpost);
                backLights.transform.localPosition = new Vector3(0, 2.6f, 0f);
                backLights.transform.localRotation = Quaternion.Euler(new Vector3(0, 0, 0));
                backLights.Spawn();
                backLights.UpdateHasPower(10, 1);
                backLights.SendNetworkUpdateImmediate();
            }
            SaveButton(signpost, playerid, signboard);
        }
        string GetPunishment() {
            string Result = string.Empty;
            var ValidPunishments = (from Punishment in Punishments join cachedpunishment in cachedpunishmentcooldown on Punishment.Key equals cachedpunishment into PunJoin from PJ in PunJoin.DefaultIfEmpty() where PJ == null select Punishment).ToDictionary(x => x.Key, x => x.Value);
            if (ValidPunishments == null || ValidPunishments.Count == 0) {
                ValidPunishments = Punishments;
                cachedpunishmentcooldown.Clear();
            }
            int nRand = rand.Next(Int32.MaxValue);
            int Total = ValidPunishments.Sum(x => x.Value);
            nRand = nRand % Total;
            int nCurrent = 0;
            foreach (var KVP in ValidPunishments.Where(x => x.Value > 0).OrderBy(x => x.Value)) {
                int nNext = nCurrent + KVP.Value;
                if (nRand >= nCurrent && nRand < nNext) {
                    StartPunishcooldownLogic(KVP.Key);
                    return KVP.Key;
                }
                nCurrent = nNext;
            }
            return Result;
        }
        private void StartPunishcooldownLogic(string result) {
            cachedpunishmentcooldown.Add(result);
            Puts($"added {result} to cooldown");
            timer.Once(60f, () => {
                if(cachedpunishmentcooldown.Contains(result)) {
                    cachedpunishmentcooldown.Remove(result);
                    Puts($"removed {result} to cooldown");
                }
            }
            );
        }
        private static BaseEntity GetLookEntity(BasePlayer basePlayer, float maxDistance = 20) {
            RaycastHit hit;
            return Physics.Raycast(basePlayer.eyes.HeadRay(), out hit, maxDistance, Physics.DefaultRaycastLayers, QueryTriggerInteraction.Ignore) ? hit.GetEntity() : null;
        }
        string RandomPunishment(BasePlayer player, Vector3 startloc) {
            string pun = "";
            var random = GetPunishment();
            PunName = random;
            Puts($"Red Button Punish {player.displayName} with : {random}");
            Vector3 loc;
            switch (random) {
                case "guntrap" : int raycasts = Mathf.CeilToInt(360 / 5 * 0.1375f);
                var PlayerPositions = GetCircumferencePositions(player.transform.position, 4, raycasts, 0f, true);
                int nUsed = 0;
                foreach (var p in PlayerPositions) {
                    Vector3 position = PlayerPositions.Skip(nUsed).First();
                    nUsed++;
                    Vector3 relativePos = player.transform.position - position;
                    Quaternion rotation = Quaternion.LookRotation(relativePos, Vector3.up);
                    var trap = GameManager.server.CreateEntity("assets/prefabs/deployable/single shot trap/guntrap.deployed.prefab", position, rotation);
                    trap.Spawn();
                    var container = trap.GetComponent<StorageContainer>();
                    var item = ItemManager.CreateByItemID(588596902, 10);
                    if (item == null) {
                        return "";
                    }
                    timer.Once(0.4f, () => {
                        item.MoveToContainer(container.inventory);
                    }
                    );
                    timer.Once(4f, () => {
                        if (Vector3.Distance(player.transform.position, position) < 10 && player.IsAlive()) {
                            player.Die();
                        }
                        if (trap) {
                            trap.Kill();
                        }
                    }
                    );
                }
                return GetLang("GuntrapMessage", player);
                case "bombvest" : BombVest.CallHook("CuffPlayer", player);
                return GetLang("BombVestMessage", player);
                case "explosivediarrhea" : StartDiaria(player);
                return GetLang("DiarrheaMessage", player);
                case "fireball" : Fireball(player);
                return GetLang("FireBallMessage", player);
                case "shredder" : if (GetJunkYardMonument()) {
                    var correct = new Vector3(10f, 20f, 5f);
                    var transform = ScrapYard.transform;
                    var rot = transform.rotation;
                    loc = transform.position + rot * correct;
                    Teleport(player, loc);
                    return GetLang("ShredderMessage", player);
                }
                return "";
                case "pvelord" : if (cargo != null) {
                    Puts("cargo is out");
                    var correct = new Vector3(1f, 2f, 1f);
                    var transform = cargo.transform;
                    var rot = transform.rotation;
                    loc = transform.position + rot * correct;
                    Teleport(player, loc);
                    return GetLang("PVELordMessageCargo", player);
                }
                if (!GetPVEMonument()) {
                    player.Hurt(190f);
                    return "Died";
                }
                if (PVELordMonument.name == "OilrigAI2") {
                    var correct = new Vector3(-8f, 38f, 9f);
                    var transform = PVELordMonument.transform;
                    var rot = transform.rotation;
                    loc = transform.position + rot * correct;
                    SendPlayerToPVE(player, loc);
                    return GetLang("PVELordMessageLargeOil", player);
                }
                if (PVELordMonument.name == "OilrigAI") {
                    var correct = new Vector3(14f, 29f, -14f);
                    var transform = PVELordMonument.transform;
                    var rot = transform.rotation;
                    loc = transform.position + rot * correct;
                    SendPlayerToPVE(player, loc);
                    return GetLang("PVELordMessageSmallOil", player);
                }
                return "";
                case "landmine" : var l = GameManager.server.CreateEntity(landmine, player.transform.position) as Landmine;
                if (l == null) return null;
                var l2 = GameManager.server.CreateEntity(landmine, player.transform.position) as Landmine;
                if (l2 == null) return null;
                l._name = "buttonmine";
                l.Spawn();
                l.Arm();
                l.Explode();
                l2._name = "buttonmine";
                l2.Spawn();
                l2.Arm();
                l2.Explode();
                player?.Die();
                return GetLang("LandmineMessage", player);
                case "slap" : player.Hurt(200f);
                string[] effects = new[]  // TODO: Move to configuration
                {
                    "headshot", "headshot_2d", "impacts/slash/clothflesh/clothflesh1", "impacts/stab/clothflesh/clothflesh1"
                }
                ;
                string effect = effects.GetRandom();
                Effect.server.Run($"assets/bundled/prefabs/fx/{effect}.prefab", player.transform.position, UnityEngine.Vector3.zero);
                if (!player.IsDead()) {
                    player?.Die();
                }
                return GetLang("SlapMessage", player);
                case "mlrs" : timer.Repeat(0.6f, 3, () => {
                    ExecuteFireOperation(player, player.transform.position);
                }
                );
                return GetLang("MlrsMessage", player);
                case "scrapheli" : Vector3 finalpos = GetPosFromButton(player, startloc, 10);
                player.Teleport(finalpos);
                //loc = new Vector3(player.transform.position.x+6,player.transform.position.y + 5,player.transform.position.z+6);
                //player.Teleport(loc);
                var loc2 = new Vector3(finalpos.x, finalpos.y + 3, finalpos.z);
                var heli = GameManager.server.CreateEntity(scrapheli, loc2);
                timer.Once(0.5f, () => {
                    heli.Spawn();
                    timer.Once(10f, () => {
                        heli.Kill();
                    }
                    );
                }
                );
                return GetLang("ScrapheliMessage", player);
                case "cactus" : player.SetHealth(0.5f);
                var cac = GameManager.server.CreateEntity(cactus, player.transform.position);
                cac.Spawn();
                timer.Once(10f, () => {
                    cac.Kill();
                }
                );
                return GetLang("CactusMessage", player);
                case "fall" : loc = new Vector3(player.transform.position.x, player.transform.position.y + 50, player.transform.position.z);
                string tp = player._name;
                player._name = "flyhackstop";
                player.Teleport(loc);
                timer.Once(10f, () => {
                    player._name = tp;
                }
                );
                return GetLang("FallMessage", player);
                case "swim" : if (Settings.buttonSettings.locSwimRandom) {
                    loc = TerrainMeta.RandomPointOffshore();
                }
                else {
                    loc = SetupLabPos();
                }
                player.Teleport(loc);
                SimpleShark shark;
                string sharkPrefab = "assets/rust.ai/agents/fish/simpleshark.prefab";
                BaseEntity entity = GameManager.server.CreateEntity(sharkPrefab, player.transform.position + new Vector3(-2, -2, -2));
                BaseEntity entity2 = GameManager.server.CreateEntity(sharkPrefab, player.transform.position + new Vector3(-2, -2, -2));
                BaseEntity entity3 = GameManager.server.CreateEntity(sharkPrefab, player.transform.position + new Vector3(-2, -2, -2));
                shark = entity as SimpleShark;
                entity.Spawn();
                entity2.Spawn();
                entity3.Spawn();
                timer.Once(60f, () => {
                    if (entity) {
                        entity.Kill();
                    }
                    if (entity2) {
                        entity2.Kill();
                    }
                    if (entity3) {
                        entity3.Kill();
                    }
                }
                );
                return GetLang("SwimMessage", player);
                case "bear" : loc = new Vector3(player.transform.position.x + 1, player.transform.position.y, player.transform.position.z + 1);
                var b = GameManager.server.CreateEntity(bear, loc, default(Quaternion)) as Bear;
                var b2 = GameManager.server.CreateEntity(bear, loc, default(Quaternion)) as Bear;
                var b3 = GameManager.server.CreateEntity(bear, loc, default(Quaternion)) as Bear;
                if (b == null) return null;
                if (b2 == null) return null;
                if (b3 == null) return null;
                b.Spawn();
                b2.Spawn();
                b3.Spawn();
                b.StartAttacking(player);
                b2.StartAttacking(player);
                b3.StartAttacking(player);
                timer.Once(20f, () => {
                    b3.Kill();
                    b2.Kill();
                    b.Kill();
                }
                );
                return GetLang("BearMessage", player);
                case "scientist" : loc = new Vector3(player.transform.position.x + 2, player.transform.position.y, player.transform.position.z + 2);
                var s = GameManager.server.CreateEntity(scientist, loc);
                if (s == null) return null;
                s.Spawn();
                timer.Once(20f, () => {
                    s.Kill();
                }
                );
                return GetLang("ScientistMessage", player);
                case "c4" : var c = GameManager.server.CreateEntity(c4, player.transform.position) as TimedExplosive;
                if (c == null) return null;
                c.SetParent(player);
                RemoveColliderProtection(c);
                c.transform.localPosition = new Vector3(0f, 1f, 0.1f);
                c._name = "0304";
                c.Spawn();
                c.SetCollisionEnabled(false);
                c.SetMotionEnabled(false);
                if (!Settings.buttonSettings.c4Timed) {
                    c.SetFuse(0.1f);
                }
                return GetLang("C4Message", player);
                case "radiation" : player.metabolism.radiation_poison.Add(500f);
                player.UpdateRadiation(500f);
                player.SetHealth(5f);
                return GetLang("RadiationMessage", player);
                case "scarecrow" : loc = new Vector3(player.transform.position.x + 2, player.transform.position.y, player.transform.position.z + 2);
                var sc = GameManager.server.CreateEntity(scarecrow, loc);
                var sc2 = GameManager.server.CreateEntity(scarecrow, loc);
                var sc3 = GameManager.server.CreateEntity(scarecrow, loc);
                if (sc == null) return null;
                if (sc2 == null) return null;
                if (sc3 == null) return null;
                sc.Spawn();
                sc2.Spawn();
                sc3.Spawn();
                timer.Once(20f, () => {
                    sc.Kill();
                    sc2.Kill();
                    sc3.Kill();
                }
                );
                return GetLang("ScarecrowMessage", player);
                case "customcommand1" : string playeroffset = $"{player.transform.position.x + 2},{player.transform.position.y},{player.transform.position.z+1}" ;
                string consolecommand = Settings.customCommands.CustomCommand1.Command.Replace("{playername}", player.displayName).Replace("{playerid}", player.UserIDString).Replace("{playerlocation}", playeroffset);
                Server.Command(consolecommand);
                return Settings.customCommands.CustomCommand1.Message;
                case "customcommand2" : string playeroffset2 = $"{player.transform.position.x + 2},{player.transform.position.y},{player.transform.position.z + 1}";
                string consolecommand2 = Settings.customCommands.CustomCommand2.Command.Replace("{playername}", player.displayName).Replace("{playerid}", player.UserIDString).Replace("{playerlocation}", playeroffset2);
                Server.Command(consolecommand2);
                return Settings.customCommands.CustomCommand2.Message;
                case "customcommand3" : string playeroffset3 = $"{player.transform.position.x + 2},{player.transform.position.y},{player.transform.position.z + 1}";
                string consolecommand3 = Settings.customCommands.CustomCommand3.Command.Replace("{playername}", player.displayName).Replace("{playerid}", player.UserIDString).Replace("{playerlocation}", playeroffset3);
                Server.Command(consolecommand3);
                return Settings.customCommands.CustomCommand3.Message;
                case "customcommand4" : string playeroffset4 = $"{player.transform.position.x + 2},{player.transform.position.y},{player.transform.position.z + 1}";
                string consolecommand4 = Settings.customCommands.CustomCommand4.Command.Replace("{playername}", player.displayName).Replace("{playerid}", player.UserIDString).Replace("{playerlocation}", playeroffset4);
                Server.Command(consolecommand4);
                return Settings.customCommands.CustomCommand4.Message;
                case "customcommand5" : string playeroffset5 = $"{player.transform.position.x + 2},{player.transform.position.y},{player.transform.position.z + 1}";
                string consolecommand5 = Settings.customCommands.CustomCommand5.Command.Replace("{playername}", player.displayName).Replace("{playerid}", player.UserIDString).Replace("{playerlocation}", playeroffset5);
                Server.Command(consolecommand5);
                return Settings.customCommands.CustomCommand5.Message;
                case "customcommand6" : string playeroffset6 = $"{player.transform.position.x + 2},{player.transform.position.y},{player.transform.position.z + 1}";
                string consolecommand6 = Settings.customCommands.CustomCommand6.Command.Replace("{playername}", player.displayName).Replace("{playerid}", player.UserIDString).Replace("{playerlocation}", playeroffset6);
                Server.Command(consolecommand6);
                return Settings.customCommands.CustomCommand6.Message;
                case "customcommand7" : string playeroffset7 = $"{player.transform.position.x + 2},{player.transform.position.y},{player.transform.position.z + 1}";
                string consolecommand7 = Settings.customCommands.CustomCommand7.Command.Replace("{playername}", player.displayName).Replace("{playerid}", player.UserIDString).Replace("{playerlocation}", playeroffset7);
                Server.Command(consolecommand7);
                return Settings.customCommands.CustomCommand7.Message;
                case "customcommand8" : string playeroffset8 = $"{player.transform.position.x + 2},{player.transform.position.y},{player.transform.position.z + 1}";
                string consolecommand8 = Settings.customCommands.CustomCommand8.Command.Replace("{playername}", player.displayName).Replace("{playerid}", player.UserIDString).Replace("{playerlocation}", playeroffset8);
                Server.Command(consolecommand8);
                return Settings.customCommands.CustomCommand8.Message;
                case "customcommand9" : string playeroffset9 = $"{player.transform.position.x + 2},{player.transform.position.y},{player.transform.position.z + 1}";
                string consolecommand9= Settings.customCommands.CustomCommand9.Command.Replace("{playername}", player.displayName).Replace("{playerid}", player.UserIDString).Replace("{playerlocation}", playeroffset9);
                Server.Command(consolecommand9);
                return Settings.customCommands.CustomCommand9.Message;
                case "customcommandA" : string playeroffsetA = $"{player.transform.position.x + 2},{player.transform.position.y},{player.transform.position.z + 1}";
                string consolecommandA = Settings.customCommands.CustomCommandA.Command.Replace("{playername}", player.displayName).Replace("{playerid}", player.UserIDString).Replace("{playerlocation}", playeroffsetA);
                Server.Command(consolecommandA);
                return Settings.customCommands.CustomCommandA.Message;
                // Payback Commands
                case "rocketman" : string rocketmancommand = "rm {playerid}".Replace("{playerid}", player.UserIDString);
                Server.Command(rocketmancommand);
                return GetLang("Payback:RocketManMessage", player);
                case "shark" : string sharkcommand = "jaws {playerid}".Replace("{playerid}", player.UserIDString);
                Server.Command(sharkcommand);
                return GetLang("Payback:SharkMessage", player);
                case "shocker" : player.SetHealth(10f);
                string shockercommand = "sh {playerid}".Replace("{playerid}", player.UserIDString);
                Server.Command(shockercommand);
                timer.Once(5f, () => {
                    Server.Command(shockercommand);
                }
                );
                return GetLang("Payback:ShockerMessage", player);
                case "naked" : string nakedcommand = "nk {playerid}".Replace("{playerid}", player.UserIDString);
                Server.Command(nakedcommand);
                return GetLang("Payback:NakedMessage", player);
                case "chickens" : string[] args = {
                    "",
                }
                ;
                Vector3 pos = GetPosFromButton(player, startloc, 3);
                Payback.Call("SpawnChickens", player, pos, args);
                return GetLang("Payback:ChickensMessage", player);
                //Payback2 commands
                case "train" : PlayerLookDown(player);
                BlockMovement(player);
                Payback2.Call("DoTrain", player, player, null);
                return GetLang("Payback2:TrainMessage", player);
                case "f15" : string[] args2 = {
                    "",
                }
                ;
                Payback2.Call("DoAirstrike", player, player, args2);
                return GetLang("Payback2:F15Message", player);
            }
            return pun;
        }
        string DoPunishment(BasePlayer player, Vector3 startloc, string random) {
            int playertotargerdis = (int)Vector3.Distance(startloc, player.transform.position);
            string pun = "";
            Puts($"Red Button Punish {player.displayName} with : {random}");
            Vector3 loc;
            switch (random) {
                case "guntrap" : int raycasts = Mathf.CeilToInt(360 / 5 * 0.1375f);
                var PlayerPositions = GetCircumferencePositions(player.transform.position, 4, raycasts, 0f, true);
                int nUsed = 0;
                foreach (var p in PlayerPositions) {
                    Vector3 position = PlayerPositions.Skip(nUsed).First();
                    nUsed++;
                    Vector3 relativePos = player.transform.position - position;
                    Quaternion rotation = Quaternion.LookRotation(relativePos, Vector3.up);
                    var trap = GameManager.server.CreateEntity("assets/prefabs/deployable/single shot trap/guntrap.deployed.prefab", position, rotation);
                    trap.Spawn();
                    var container = trap.GetComponent<StorageContainer>();
                    var item = ItemManager.CreateByItemID(588596902, 10);
                    if (item == null) {
                        return "";
                    }
                    timer.Once(0.4f, () => {
                        item.MoveToContainer(container.inventory);
                    }
                    );
                    timer.Once(4f, () => {
                        if (Vector3.Distance(player.transform.position, position) < 10 && player.IsAlive()) {
                            player.Die();
                        }
                        if (trap) {
                            trap.Kill();
                        }
                    }
                    );
                }
                return GetLang("GuntrapMessage", player);
                case "bombvest" : BombVest.CallHook("CuffPlayer", player);
                return GetLang("BombVestMessage", player);
                case "explosivediarrhea" : StartDiaria(player);
                return GetLang("DiarrheaMessage", player);
                case "fireball" : Fireball(player);
                return GetLang("FireBallMessage", player);
                case "shredder" : if (GetJunkYardMonument()) {
                    var correct = new Vector3(10f, 20f, 5f);
                    var transform = ScrapYard.transform;
                    var rot = transform.rotation;
                    loc = transform.position + rot * correct;
                    Teleport(player, loc);
                    return GetLang("ShredderMessage", player);
                }
                return "";
                case "pvelord" : if (cargo != null) {
                    Puts("cargo is out");
                    var correct = new Vector3(1f, 2f, 1f);
                    var transform = cargo.transform;
                    var rot = transform.rotation;
                    loc = transform.position + rot * correct;
                    Teleport(player, loc);
                    return GetLang("PVELordMessageCargo", player);
                }
                if (!GetPVEMonument()) {
                    player.Hurt(190f);
                    return "Died";
                }
                if (PVELordMonument.name == "OilrigAI2") {
                    var correct = new Vector3(-8f, 38f, 9f);
                    var transform = PVELordMonument.transform;
                    var rot = transform.rotation;
                    loc = transform.position + rot * correct;
                    SendPlayerToPVE(player, loc);
                    return GetLang("PVELordMessageLargeOil", player);
                }
                if (PVELordMonument.name == "OilrigAI") {
                    var correct = new Vector3(14f, 29f, -14f);
                    var transform = PVELordMonument.transform;
                    var rot = transform.rotation;
                    loc = transform.position + rot * correct;
                    SendPlayerToPVE(player, loc);
                    return GetLang("PVELordMessageSmallOil", player);
                }
                return "";
                case "landmine" : var l = GameManager.server.CreateEntity(landmine, player.transform.position) as Landmine;
                if (l == null) return null;
                var l2 = GameManager.server.CreateEntity(landmine, player.transform.position) as Landmine;
                if (l2 == null) return null;
                l._name = "buttonmine";
                l.Spawn();
                l.Arm();
                l.Explode();
                l2._name = "buttonmine";
                l2.Spawn();
                l2.Arm();
                l2.Explode();
                player?.Die();
                return GetLang("LandmineMessage", player);
                case "slap" : player.Hurt(200f);
                string[] effects = new[]  // TODO: Move to configuration
                {
                    "headshot", "headshot_2d", "impacts/slash/clothflesh/clothflesh1", "impacts/stab/clothflesh/clothflesh1"
                }
                ;
                string effect = effects.GetRandom();
                Effect.server.Run($"assets/bundled/prefabs/fx/{effect}.prefab", player.transform.position, UnityEngine.Vector3.zero);
                if (!player.IsDead()) {
                    player?.Die();
                }
                return GetLang("SlapMessage", player);
                case "mlrs" : timer.Repeat(0.6f, 3, () => {
                    ExecuteFireOperation(player, player.transform.position);
                }
                );
                return GetLang("MlrsMessage", player);
                case "scrapheli" : Vector3 finalpos = GetPosFromButton(player, startloc, 10);
                player.Teleport(finalpos);
                //loc = new Vector3(player.transform.position.x+6,player.transform.position.y + 5,player.transform.position.z+6);
                //player.Teleport(loc);
                var loc2 = new Vector3(finalpos.x, finalpos.y + 3, finalpos.z);
                var heli = GameManager.server.CreateEntity(scrapheli, loc2);
                timer.Once(0.5f, () => {
                    heli.Spawn();
                    timer.Once(10f, () => {
                        heli.Kill();
                    }
                    );
                }
                );
                return GetLang("ScrapheliMessage", player);
                case "cactus" : player.SetHealth(0.5f);
                var cac = GameManager.server.CreateEntity(cactus, player.transform.position);
                cac.Spawn();
                timer.Once(10f, () => {
                    cac.Kill();
                }
                );
                return GetLang("CactusMessage", player);
                case "fall" : loc = new Vector3(player.transform.position.x, player.transform.position.y + 50, player.transform.position.z);
                string tp = player._name;
                player._name = "flyhackstop";
                player.Teleport(loc);
                timer.Once(10f, () => {
                    player._name = tp;
                }
                );
                return GetLang("FallMessage", player);
                case "swim" : if (Settings.buttonSettings.locSwimRandom) {
                    loc = TerrainMeta.RandomPointOffshore();
                }
                else {
                    loc = SetupLabPos();
                }
                player.Teleport(loc);
                SimpleShark shark;
                string sharkPrefab = "assets/rust.ai/agents/fish/simpleshark.prefab";
                BaseEntity entity = GameManager.server.CreateEntity(sharkPrefab, player.transform.position + new Vector3(-2, -2, -2));
                BaseEntity entity2 = GameManager.server.CreateEntity(sharkPrefab, player.transform.position + new Vector3(-2, -2, -2));
                BaseEntity entity3 = GameManager.server.CreateEntity(sharkPrefab, player.transform.position + new Vector3(-2, -2, -2));
                shark = entity as SimpleShark;
                entity.Spawn();
                entity2.Spawn();
                entity3.Spawn();
                timer.Once(60f, () => {
                    if (entity) {
                        entity.Kill();
                    }
                    if (entity2) {
                        entity2.Kill();
                    }
            
// ... [Code preview truncated due to length. Full source in attached file] ...

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху