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] ...