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

FREE PlayerEffects : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
/*
 ########### README ####################################################
                                                                             
  !!! DON'T EDIT THIS FILE !!!
                                                                     
 ########### CHANGES ###################################################

 1.0.0
    - Plugin release

 #######################################################################
*/

using System.Collections.Generic;
using UnityEngine;
using Oxide.Game.Rust.Libraries;
using VLB;

namespace Oxide.Plugins
{
    [Info("Player Effects", "paulsimik", "1.0.0")]
    [Description("Adds Effect to the Player")]
    class PlayerEffects : RustPlugin
    {
        private bool DEBUG = false;

        #region [Fields]

        private const string permUse = "playereffects.use";
        private const string MISSING_EFFECT = "assets/bundled/prefabs/fx/missing.prefab";
        private const string BARRICADE_EFFECT = "assets/bundled/prefabs/fx/door/barricade_spawn.prefab";
        private const string FIRE2_EFFECT = "assets/bundled/prefabs/fx/fire/fire_v2.prefab";
        private const string STASH_EFFECT = "assets/bundled/prefabs/fx/dig_effect.prefab";
        private const string STONE_EFFECT = "assets/bundled/prefabs/fx/bucket_drop_debris.prefab";
        private const string GLASS_EFFECT = "assets/bundled/prefabs/fx/impacts/blunt/glass/glass1.prefab";
        private const string WATER_EFFECT = "assets/bundled/prefabs/fx/impacts/blunt/water/water.prefab";
        private const string WATERS_EFFECT = "assets/bundled/prefabs/fx/impacts/footstep/barefoot/water/boot_footstep_water.prefab";
        private const string STEP_EFFECT = "assets/bundled/prefabs/fx/impacts/jump-land/barefoot/snow/jump-land-snow.prefab";
        private const string DOG_EFFECT = "assets/bundled/prefabs/fx/player/howl.prefab";
        private const string SHO_EFFECT = "assets/bundled/prefabs/fx/water/midair_splash.prefab";
        private const string SHA_EFFECT = "assets/bundled/prefabs/fx/water/playerjumpinwater.prefab";
        private const string BLUE_EFFECT = "assets/content/effects/crossbreed/pfx crossbreed blue.prefab";
        private const string YE_EFFECT = "assets/content/effects/crossbreed/pfx crossbreed yellow.prefab";
        private const string BOOM_EFFECT = "assets/prefabs/weapons/satchelcharge/effects/satchel-charge-explosion.prefab";
        private const string BMP_EFFECT = "assets/prefabs/deployable/chinooklockedcrate/effects/landing.prefab";
        private const string CM_EFFECT = "assets/prefabs/deployable/reactive target/effects/bullseye.prefab";
        private const string CMS_EFFECT = "assets/prefabs/deployable/reactive target/effects/tire_smokepuff.prefab";
        private const string AP_EFFECT = "assets/prefabs/misc/casino/slotmachine/effects/payout_jackpot.prefab";
        private const string FR_EFFECT = "assets/prefabs/misc/chinesenewyear/throwablefirecrackers/firecracker_crack.prefab";
        private const string EG_EFFECT = "assets/prefabs/misc/easter/easter basket/effects/eggexplosion.prefab";
        private const string EGA_EFFECT = "assets/prefabs/misc/easter/painted eggs/effects/eggpickup.prefab";
        private const string EGW_EFFECT = "assets/prefabs/misc/easter/painted eggs/effects/gold_open.prefab";
        private const string ES_EFFECT = "assets/prefabs/misc/halloween/candies/candypickup.prefab";
        private const string EA_EFFECT = "assets/prefabs/misc/halloween/skull_door_knocker/effects/door_knock_fx.prefab";
        private const string EAS_EFFECT = "assets/prefabs/misc/halloween/skull_door_knocker/effects/skull_door_knock_fx.prefab";
        private const string FS_EFFECT = "assets/prefabs/misc/orebonus/effects/bonus_hit.prefab";
		private const string FSA_EFFECT = "assets/prefabs/misc/orebonus/effects/hotspot_death.prefab";
		private const string FSQ_EFFECT = "assets/prefabs/misc/summer_dlc/boogie_board/effects/pfx_boogieboard_base.prefab";
		private const string FSE_EFFECT = "assets/prefabs/misc/xmas/advent_calendar/effects/open_advent.prefab";
		private const string SIF_EFFECT = "assets/prefabs/tools/c4/effects/c4_explosion.prefab";

        #endregion

        #region [Oxide Hooks]

        private void Init() => permission.RegisterPermission(permUse, this);

        private void Unload()
        {
            foreach (var player in BasePlayer.activePlayerList)
                DestroyPlayerComponent(player);
        }

        private void OnPlayerDisconnected(BasePlayer player) => DestroyPlayerComponent(player);

        #endregion

        #region [Hooks]   

        private PlayerEffect GetPlayer(BasePlayer player)
        {
            if (player == null)
                return null;

            var playerEffect = player.GetComponent<PlayerEffect>();
            if (playerEffect == null)
                return null;

            return playerEffect;
        }

        private void DestroyPlayerComponent(BasePlayer player)
        {
            PlayerEffect playerEffect = GetPlayer(player);
            if (playerEffect == null)
                return;

            UnityEngine.Object.Destroy(playerEffect);
        }

        private void AddEffect(PlayerEffect playerEffect, string typeEffect)
        {
            switch (typeEffect)
            {
                case "0":
                case "disable":
                case "disabled":
                    {
                        playerEffect.DestroyTimer();
                        SendReply(playerEffect.player, GetLang("Disable", playerEffect.player.UserIDString));                 
                        return;
                    }
                case "1":
                case "particles":
                    {
                        playerEffect.effect = MISSING_EFFECT;
                        playerEffect.effectPosition = Vector3.zero;
                        playerEffect.time = 1f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect1", playerEffect.player.UserIDString));
                        return;
                    }
                case "2":
                case "smoke":
                    {
                        playerEffect.effect = BARRICADE_EFFECT;
                        playerEffect.effectPosition = Vector3.zero;
                        playerEffect.time = 0.2f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect2", playerEffect.player.UserIDString));
                        return;
                    }
                case "3":
                case "fire":
                    {
                        playerEffect.effect = FIRE2_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, -1);
                        playerEffect.time = 8f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect3", playerEffect.player.UserIDString));
                        return;
                    }
                case "4":
                case "stash":
                    {
                        playerEffect.effect = STASH_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.7f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect4", playerEffect.player.UserIDString));
                        return;
                    }
                case "5":
                case "stone":
                    {
                        playerEffect.effect = STONE_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.8f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect5", playerEffect.player.UserIDString));
                        return;
                    }
                case "6":
                case "glass":
                    {
                        playerEffect.effect = GLASS_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.5f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect6", playerEffect.player.UserIDString));
                        return;
                    }
                case "7":
                case "water":
                    {
                        playerEffect.effect = WATER_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.4f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect7", playerEffect.player.UserIDString));
                        return;
                    }
                case "8":
                case "waters":
                    {
                        playerEffect.effect = WATERS_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.1f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect8", playerEffect.player.UserIDString));
                        return;
                    }
                case "9":
                case "step":
                    {
                        playerEffect.effect = STEP_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.3f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect9", playerEffect.player.UserIDString));
                        return;
                    }
                case "10":
                case "dog":
                    {
                        playerEffect.effect = DOG_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, -1);
                        playerEffect.time = 2.0f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect10", playerEffect.player.UserIDString));
                        return;
                    }
                case "11":
                case "sho":
                    {
                        playerEffect.effect = SHO_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.3f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect11", playerEffect.player.UserIDString));
                        return;
                    }
                case "12":
                case "sha":
                    {
                        playerEffect.effect = SHA_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.3f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect12", playerEffect.player.UserIDString));
                        return;
                    }
                case "13":
                case "blue":
                    {
                        playerEffect.effect = BLUE_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.5f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect13", playerEffect.player.UserIDString));
                        return;
                    }
                case "14":
                case "ye":
                    {
                        playerEffect.effect = YE_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.5f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect14", playerEffect.player.UserIDString));
                        return;
                    }
                case "15":
                case "boom":
                    {
                        playerEffect.effect = BOOM_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.5f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect15", playerEffect.player.UserIDString));
                        return;
                    }
                case "16":
                case "bmp":
                    {
                        playerEffect.effect = BMP_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 1.0f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect16", playerEffect.player.UserIDString));
                        return;
                    }
                case "17":
                case "cm":
                    {
                        playerEffect.effect = CM_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.5f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect17", playerEffect.player.UserIDString));
                        return;
                    }
                case "18":
                case "cms":
                    {
                        playerEffect.effect = CMS_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.1f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect18", playerEffect.player.UserIDString));
                        return;
                    }
                case "19":
                case "ap":
                    {
                        playerEffect.effect = AP_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 2.0f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect19", playerEffect.player.UserIDString));
                        return;
                    }
                case "20":
                case "fr":
                    {
                        playerEffect.effect = FR_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.1f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect20", playerEffect.player.UserIDString));
                        return;
                    }
                case "21":
                case "eg":
                    {
                        playerEffect.effect = EG_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.3f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect21", playerEffect.player.UserIDString));
                        return;
                    }
                case "22":
                case "ega":
                    {
                        playerEffect.effect = EGA_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.2f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect22", playerEffect.player.UserIDString));
                        return;
                    }
                case "23":
                case "egw":
                    {
                        playerEffect.effect = EGW_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.5f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect23", playerEffect.player.UserIDString));
                        return;
                    }
                case "24":
                case "es":
                    {
                        playerEffect.effect = ES_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.1f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect24", playerEffect.player.UserIDString));
                        return;
                    }
                case "25":
                case "ea":
                    {
                        playerEffect.effect = EA_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, -1);
                        playerEffect.time = 0.5f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect25", playerEffect.player.UserIDString));
                        return;
                    }
                case "26":
                case "eas":
                    {
                        playerEffect.effect = EAS_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, -1);
                        playerEffect.time = 0.5f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect26", playerEffect.player.UserIDString));
                        return;
                    }
                case "27":
                case "fs":
                    {
                        playerEffect.effect = FS_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, -1);
                        playerEffect.time = 0.5f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect27", playerEffect.player.UserIDString));
                        return;
                    }
                case "28":
                case "fsa":
                    {
                        playerEffect.effect = FSA_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, -1);
                        playerEffect.time = 0.5f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect28", playerEffect.player.UserIDString));
                        return;
                    }
                case "29":
                case "fsq":
                    {
                        playerEffect.effect = FSQ_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.2f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect29", playerEffect.player.UserIDString));
                        return;
                    }
                case "30":
                case "fse":
                    {
                        playerEffect.effect = FSE_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.2f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect30", playerEffect.player.UserIDString));
                        return;
                    }
                case "31":
                case "sif":
                    {
                        playerEffect.effect = SIF_EFFECT;
                        playerEffect.effectPosition = new Vector3(0, 0, 0);
                        playerEffect.time = 0.5f;
                        playerEffect.DestroyTimer();
                        playerEffect.RunTimer();
                        SendReply(playerEffect.player, GetLang("Effect31", playerEffect.player.UserIDString));
                        return;
                    }
                case "help":
                    {
                        SendReply(playerEffect.player, GetLang("Help", playerEffect.player.UserIDString));
                        return;
                    }
                default:
                    SendReply(playerEffect.player, GetLang("Invalid", playerEffect.player.UserIDString));
                    return;
            }
        }

        #endregion

        #region [Chat Commands]

        [ChatCommand("pe")]
        private void cmdPlayerEffect(BasePlayer player, string command, string[] args)
        {
            if (!HasPermission(player))
            {
                SendReply(player, GetLang("NoPerm", player.UserIDString));
                return;
            }

            PlayerEffect playerEffect = player.gameObject.GetOrAddComponent<PlayerEffect>();
            if (playerEffect == null)
                return;

            var type = args.Length > 0 ? args[0] : null;
            AddEffect(playerEffect, type);
        }

        #endregion

        #region [Classes]

        public class PlayerEffect : MonoBehaviour
        {
            public BasePlayer player;
            public string effect;
            public Vector3 effectPosition;
            public float time;

            private void Awake()
            {
                player = GetComponent<BasePlayer>();
                effect = string.Empty;
                effectPosition = Vector3.zero;
                time = 1f;
            }

            public void RunTimer() => InvokeRepeating("RunEffect", 0.2f, time);

            public void DestroyTimer() => CancelInvoke("RunEffect");

            private void RunEffect()
            {
                if (string.IsNullOrEmpty(effect) || player == null)
                    return;

                Effect.server.Run(effect, player, 0, effectPosition, new Vector3(0, 0, 0), null, true);
            }

            private void OnDestroy()
            {
                DestroyTimer();
                Destroy(this); 
            }
        }

        #endregion

        #region [Localization]

        private string GetLang(string key, string playerID) => lang.GetMessage(key, this, playerID);

        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                { "NoPerm", "You don't have permissions" },
                { "Invalid", "Invalid syntax!\nType /pe help" },
                { "Disable", "Effect has been disabled" },
                { "Effect1", "Effect <color=#a8a6a6>'particles'</color> has been activated" },
                { "Effect2", "Effect <color=#a8a6a6>'smoke'</color> has been activated" },
                { "Effect3", "Effect <color=#a8a6a6>'fire'</color> has been activated" },
                { "Help", "<size=16><color=#3498db>Player Effects</color></size>" +
                "\n<color=#a8a6a6>/pe 0 or disable</color> - disable effect" +
                "\n<color=#a8a6a6>/pe 1 or particles</color> - particles effect" +
                "\n<color=#a8a6a6>/pe 2 or smoke</color> - smoke effect" +
                "\n<color=#a8a6a6>/pe 3 or fire</color> - fire effect" }

            }, this);
        }

        #endregion

        #region [Helpers]

        private bool HasPermission(BasePlayer player)
        {
            return permission.UserHasPermission(player.UserIDString, permUse);
        }

        private void SendMessage(BasePlayer player, string msg) => Player.Message(player, msg);

        private void PrintDebug(object message)
        {
            if (!DEBUG)
                return;

            Debug.Log($"{this.Name} Debug: {message}");
        }

        #endregion
    }
}

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