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

FREE ATMSystem : 1.8.3 1.8.3

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using Oxide.Core.Configuration;
using Oxide.Core.Libraries.Covalence;
using UnityEngine;
namespace Oxide.Plugins {
    [Info("ATM System", "David", "1.8.3")]
    [Description("A dynamic and comprehensive ATM System")]
    class ATMSystem : CovalencePlugin {
#region References
        [PluginReference]
        private Plugin Economics;
        [PluginReference]
        private Plugin ZoneManager;
        [PluginReference]
        private Plugin MarkerManager;
#endregion
#region Initialize
        private List<IPlayer> _hasError = new List<IPlayer>();
        PluginConfig _config;
        private void Init() {
            _config = Config.ReadObject<PluginConfig>();
            RegisterPermissions();
            AddCovalenceCommand("spawncardreader", "CreateReader");
            AddCovalenceCommand("setplace", "CreateReader");
            AddCovalenceCommand("setatmzone", "CreateReader");
            AddCovalenceCommand("vmspawn", "CreateReader");
        }
        private void OnServerInitialized() {
            SetUpAuth();
            LoadData();
            if (_config._vendingSettings._vendingOwner) preSetMachines();
            timer.Once(240f, () => {
                if (_config._vendingSettings._vendingOwner) preSetMachines();
            }
            );
        }
        private static System.Random _random = new System.Random();
        private Dictionary<string, string> _depositWithdrawStore = new Dictionary<string, string>();
        private List<string> _atms = new List<string>();
        List<BaseEntity> _entities = new List<BaseEntity>();
        private void RegisterPermissions() {
            permission.RegisterPermission($"{Name}.admin", this);
        }
#endregion
#region Config
        private DynamicConfigFile data;
        protected override void LoadDefaultConfig() => _config = LoadBaseConfig();
        protected override void SaveConfig() => Config.WriteObject(_config, true);
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                _config = Config.ReadObject<PluginConfig>();
                if (_config == null) throw new JsonException();
                if (_config.Version < Version || _config.Version > Version) {
                    LogWarning(GetLang("_configUpdated"));
                    LoadDefaultConfig();
                }
                SaveConfig();
            }
            catch {
                LoadDefaultConfig();
                LogWarning(GetLang("_confCorrupt"));
                SaveConfig();
            }
        }
        private void SaveData() {
            if (_atms != null) Interface.Oxide.DataFileSystem.WriteObject($"{Name}/ATMSystemData", _atms);
        }
        private void LoadData() {
            data = Interface.Oxide.DataFileSystem.GetFile($"{Name}/ATMSystemData");
            try {
                _atms = data.ReadObject<List<string>>();
            }
            catch {
                LogError(GetLang("_ccantLoadData"));
            }
        }
        private PluginConfig LoadBaseConfig() {
            return new PluginConfig {
                _generalSettings = new ATMSystem.PluginConfig.GeneralSettings {
                    _isEnabled = true, _canAnnounce = true, _requireCard = false, _useButton = false, _titleText = "<color=#ce422b>RUST</color> ATM", _defaultInfo = "This panel serves to inform player about functions of ATM machines and ingame currencies.It can be customized inside config file, including font styling", _logWarnings = true,
                }
                , _currSettings = new ATMSystem.PluginConfig.CurrencySettings {
                    _atmCurrencyId = "-1779183908", _atmCurrencySkin = "2420097877", _atmCurrencyName = "Dollar", _maxDepoLimit = 150000,
                }
                , _vendingSettings = new ATMSystem.PluginConfig.VendingSettings {
                    _vendSkinid = "2441271366", _vendingOwner = false, _createMarkers = false, _markerColor = "7DD800", _markerSize = 0.2f,
                }
                , _cardSettings = new ATMSystem.PluginConfig.CardSettings {
                    _atmCardSkin = "2410672337", _cardOnPlayerSpawn = false,
                }
                , _chatSettings = new ATMSystem.PluginConfig.ChatSettings {
                    _enableChatTag = true, _chatTagColor = "4A95CC", _chatMessageColor = "FFFFFFFF", _enableChatAnnounce = true,
                }
                , Version = Version
            }
            ;
        }
        class PluginConfig {
            [JsonProperty(PropertyName = "General Settings")]
            public GeneralSettings _generalSettings {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Chat Settings")]
            public ChatSettings _chatSettings {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Vending Machine Settings")]
            public VendingSettings _vendingSettings {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Currency Settings")]
            public CurrencySettings _currSettings {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Credit Card Settings")]
            public CardSettings _cardSettings {
                get;
                set;
            }
            public class GeneralSettings {
                [JsonProperty("Is Enabled: ")]
                public bool _isEnabled {
                    get;
                    set;
                }
                [JsonProperty("Can Announce: ")]
                public bool _canAnnounce {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Auth Key")]
                public int _commAuthKey = 0;
                [JsonProperty("Require Card: ")]
                public bool _requireCard {
                    get;
                    set;
                }
                [JsonProperty("Use Button: ")]
                public bool _useButton {
                    get;
                    set;
                }
                [JsonProperty("Title Text: ")]
                public string _titleText {
                    get;
                    set;
                }
                [JsonProperty("Default Bank Information: ")]
                public string _defaultInfo {
                    get;
                    set;
                }
                [JsonProperty("Log Warnings: ")]
                public bool _logWarnings {
                    get;
                    set;
                }
            }
            public class ChatSettings {
                [JsonProperty("Messages Enabled: ")]
                public bool _enableChatAnnounce {
                    get;
                    set;
                }
                [JsonProperty("Chat Tag Enabled ")]
                public bool _enableChatTag {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Chat Tag Color: ")]
                public string _chatTagColor {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Chat Message Color: ")]
                public string _chatMessageColor {
                    get;
                    set;
                }
            }
            public class VendingSettings {
                [JsonProperty(PropertyName = "Vending Machine Skin")]
                public string _vendSkinid {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Spawned Vending Machines as ATM")]
                public bool _vendingOwner {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "MarkerManager - Create markers at spawned vending machines")]
                public bool _createMarkers {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Marker Outline Color")]
                public string _markerColor {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Marker Outline Size")]
                public float _markerSize {
                    get;
                    set;
                }
            }
            public class CurrencySettings {
                [JsonProperty(PropertyName = "Currency Item ID")]
                public string _atmCurrencyId {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Currency Skin ID")]
                public string _atmCurrencySkin {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Currency Name")]
                public string _atmCurrencyName {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Maximum balance for accounts")]
                public int _maxDepoLimit {
                    get;
                    set;
                }
            }
            public class CardSettings {
                [JsonProperty(PropertyName = "Card Skin ID")]
                public string _atmCardSkin {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Card On Player Spawn")]
                public bool _cardOnPlayerSpawn {
                    get;
                    set;
                }
            }
            [JsonProperty(PropertyName = "Version: ")]
            public Oxide.Core.VersionNumber Version {
                get;
                set;
            }
        }
#endregion
#region Commands
        private void CreateReader(IPlayer _iplayer, string command, string[] args) {
            var player = BasePlayer.FindByID(Convert.ToUInt64(_iplayer.Id));
            if (!_iplayer.IsAdmin) {
                PrivateMessage(_iplayer, GetLang("_noPerm"));
                return;
            }
            switch (command) {
                case "spawncardreader" : if (args.Length > 0) {
                    PrivateMessage(_iplayer, GetLang("_invalidUsage"));
                    return;
                }
                Vector3 _position = player.transform.position + player.eyes.transform.forward * 1.5f;
                var _reader = GameManager.server.CreateEntity("assets/prefabs/io/electric/switches/cardreader.prefab", _position, Quaternion.Euler(0, 0, 0));
                var _readerReady = _reader.gameObject.AddComponent<MoveController>();
                _reader.gameObject.SetActive(true);
                CardReader _cardReader = null;
                if (_reader is CardReader) _cardReader = _reader as CardReader;
                if (_cardReader != null) _cardReader.accessLevel = 2;
                _reader.name = "ATM";
                _reader.Spawn();
                _reader.SetFlag(BaseEntity.Flags.Reserved8, true, false, true);
                _entities.Add(_reader);
                _atms.Add(_reader.net.ID.ToString());
                _reader.UpdateNetworkGroup();
                _reader.SendNetworkUpdateImmediate();
                var _getComp = _reader.GetComponent<MoveController>();
                if (_getComp != null) {
                    _getComp._player = player;
                    _getComp._distance = 1.4f;
                }
                SaveData();
                return;
                case "setplace" : if (args.Length > 0) {
                    PrivateMessage(_iplayer, GetLang("_invalidUsage"));
                    return;
                }
                int _counter = 0;
                List<BaseEntity> _clones = new List<BaseEntity>();
                foreach (BaseEntity _entity in _entities) {
                    var _component = _entity.GetComponent<MoveController>();
                    if (_component != null) {
                        if (_component._player == player) {
                            _component.Deactivate();
                            PrivateMessage(_iplayer, GetLang("_readerPlaced"));
                            _clones.Add(_entity);
                            _counter++;
                            if (_entity.GetComponent<VendingMachine>() && _config._vendingSettings._vendSkinid != "") {
                                string _SkinIDString = _config._vendingSettings._vendSkinid;
                                ulong _SkinID = Convert.ToUInt64(_SkinIDString);
                                _entity.skinID = _SkinID;
                                _entity.UpdateNetworkGroup();
                                _entity.SendNetworkUpdateImmediate();
                            }
                        }
                    }
                }
                if (_counter > 0) {
                    foreach (BaseEntity _ent in _clones) {
                        if (_ent != null) if (_entities.Contains(_ent)) _entities.Remove(_ent);
                    }
                    return;
                }
                PrivateMessage(_iplayer, GetLang("_noReaderToPlace"));
                return;
                case "setatmzone" : if (args.Length < 1) {
                    PrivateMessage(_iplayer, GetLang("_invalidZoneName"));
                    return;
                }
                string _spawnItem = args[0];
                RaycastHit _eyehit;
                if (Physics.Raycast(player.eyes.HeadRay(), out _eyehit, 10.0f)) {
                    string[] _arenaSettings = {
                        "name", _spawnItem, "eject", "false", "radius", "7"
                    }
                    ;
                    if (_atms.Contains(_spawnItem)) {
                        PrivateMessage(_iplayer, GetLang("_zoneAlreadyExists"));
                        return;
                    }
                    if ((bool)ZoneManager.CallHook("CreateOrUpdateZone", _spawnItem, _arenaSettings, _eyehit.point)) {
                        _atms.Add(_spawnItem);
                        SaveData();
                        PrivateMessage(_iplayer, GetLang("_zoneCreated"));
                        return;
                    }
                }
                else {
                    PrivateMessage(_iplayer, GetLang("_aimCloser"));
                }
                break;
                case "vmspawn" : if (args.Length > 0) {
                    PrivateMessage(_iplayer, GetLang("_invalidUsage"));
                    return;
                }
                Vector3 _boxposition = player.transform.position + player.eyes.transform.forward * 1.5f;
                var _machine = GameManager.server.CreateEntity("assets/prefabs/deployable/vendingmachine/vendingmachine.deployed.prefab", _boxposition, Quaternion.Euler(0, 0, 0));
                var _machineReady = _machine.gameObject.AddComponent<MoveController>();
                VendingMachine _vending = null;
                if (_machine is VendingMachine) _vending = _machine as VendingMachine;
                _vending.SendNetworkUpdate();
                _machine.Spawn();
                var _moveComp = _machine.GetComponent<MoveController>();
                if (_moveComp != null) {
                    _moveComp._player = player;
                }
                _entities.Add(_machine);
                _atms.Add(_vending.net.ID.ToString());
                SaveData();
                return;
                default : PrivateMessage(_iplayer, GetLang("_invalidUsage"));
                return;
            }
        }
        [Command("openbank")]
        private void OpenBank(IPlayer _iplayer, string command, string[] args) {
            if (!_iplayer.IsAdmin) {
                PrivateMessage(_iplayer, GetLang("_noPerm"));
                return;
            }
            var _player = BasePlayer.FindByID(Convert.ToUInt64(_iplayer.Id));
            ATMCUI(_player);
        }
        [Command("setvendingskins")]
        private void setskins(IPlayer _iplayer) {
            if (!_iplayer.IsAdmin) {
                PrivateMessage(_iplayer, GetLang("_noPerm"));
                return;
            }
            preSetMachines();
        }
        private void preSetMachines() {
            if (MarkerManager != null) {
                MarkerManager.CallHook("API_RemoveMarker", "ATM");
            }
            foreach (VendingMachine machine in GameObject.FindObjectsOfType(typeof(VendingMachine))) {
                if (machine.OwnerID == 0) {
                    if (machine is NPCVendingMachine) {
                        return;
                    }
                    string _SkinIDString = _config._vendingSettings._vendSkinid;
                    ulong _SkinID = Convert.ToUInt64(_SkinIDString);
                    machine.skinID = _SkinID;
                    machine.shopName = "ATM";
                    machine.SendNetworkUpdate();
                    if (MarkerManager != null) {
                        if (_config._vendingSettings._createMarkers) {
                            machine.SetFlag(BaseEntity.Flags.Reserved4, false, false);
                            machine.SendNetworkUpdate();
                            var transform = machine.transform;
                            var pos = transform.position;
                            MarkerManager.CallHook("API_CreateMarker", pos, "ATM", 0, 3f, _config._vendingSettings._markerSize, "ATM", _config._vendingSettings._markerColor, "000000");
                        }
                    }
                }
            }
        }
        //MarkerManager.CallHook("API_RemoveMarker", "ATM");
        [Command("atm.withdraw")]
        private void ATMWithdraw(IPlayer player, string command, string[] args) {
            if (player == null) return;
            var _player = BasePlayer.FindByID(Convert.ToUInt64(player.Id));
            if (args.Length < 1) {
                return;
            }
            string _getAuth = _config._generalSettings._commAuthKey.ToString();
            if (args[0] != _getAuth) return;
            if (!_depositWithdrawStore.ContainsKey(_player.UserIDString)) {
                return;
            }
            int _amount = 0;
            if (!int.TryParse(_depositWithdrawStore[_player.UserIDString], out _amount)) return;
            double _amountDouble = Convert.ToDouble(_amount);
            double _balance = Economics.Call<double>("Balance", _player.UserIDString);
            if (_amountDouble > _balance) {
                Effect.server.Run("assets/prefabs/locks/keypad/effects/lock.code.denied.prefab", (BaseEntity)_player, 0U, Vector3.zero, Vector3.zero);
                if (!_hasError.Contains(player)) ATMPOPUP(player, GetLang("_insuffBalance"));
                return;
            }
            int _currId = int.Parse(_config._currSettings._atmCurrencyId);
            string _SkinIDString = _config._currSettings._atmCurrencySkin;
            ulong _SkinID = Convert.ToUInt64(_SkinIDString);
            var _currency = ItemManager.CreateByItemID(_currId, _amount, _SkinID);
            _currency.name = _config._currSettings._atmCurrencyName;
            _currency.MarkDirty();
            if (!_player.inventory.GiveItem(_currency)) {
                _currency.Remove(0);
                if (!_hasError.Contains(player)) ATMPOPUP(player, GetLang("_noSpace"));
                return;
            }
            if (Economics.CallHook("Withdraw", _player.UserIDString, _amountDouble) != null) {
                Effect.server.Run("assets/prefabs/locks/keypad/effects/lock.code.updated.prefab", (BaseEntity)_player, 0U, Vector3.zero, Vector3.zero);
                double _finalplayerBalance = Economics.Call<double>("Balance", _player.UserIDString);
                int _finalAmount = _player.inventory.GetAmount(_currId);
                var _element = new CuiElementContainer();
                CuiHelper.DestroyUi(_player, "_balance");
                CuiHelper.DestroyUi(_player, "_cash");
                CUIClass.CreateText(ref _element, "_balance", "_balanceBox", _uiColors["fadedWhite"], $"${_finalplayerBalance.ToString()}", 16, "0.04 0", "1 1", TextAnchor.MiddleCenter);
                CUIClass.CreateText(ref _element, "_cash", "_cashBox", _uiColors["fadedWhite"], $"${_finalAmount.ToString()}", 16, "0.04 0", "1 1", TextAnchor.MiddleCenter);
                CuiHelper.AddUi(_player, _element);
                return;
            }
            return;
        }
        [Command("atm.deposit")]
        private void ATMDeposit(IPlayer iPlayer, string command, string[] args) {
            if (args.Length < 1) {
                return;
            }
            string _getAuth = _config._generalSettings._commAuthKey.ToString();
            var player = BasePlayer.FindByID(Convert.ToUInt64(iPlayer.Id));
            if (args[0] != _getAuth) {
                return;
            }
            if (!_depositWithdrawStore.ContainsKey(player.UserIDString)) {
                return;
            }
            int _cost;
            if (!int.TryParse(_depositWithdrawStore[player.UserIDString], out _cost)) return;
            if (_cost > _config._currSettings._maxDepoLimit) {
                ATMPOPUP(iPlayer, GetLang("_maxDepoValue"));
                return;
            }
            double _playerAccount = Economics.Call<double>("Balance", player.UserIDString);
            int _playerBalanceInt = Convert.ToInt32(_playerAccount);
            int _accountLimit = _config._currSettings._maxDepoLimit - _playerBalanceInt;
            if (_cost > _accountLimit) {
                ATMPOPUP(iPlayer, GetLang("_maxDepoValue"));
                return;
            }
            Puts($"{_accountLimit}");
            double _costDouble = Convert.ToDouble(_cost);
            int _itemId = int.Parse(_config._currSettings._atmCurrencyId);
            int _onHand = player.inventory.GetAmount(_itemId);
            int _final = _onHand - _cost;
            if (_final < 0) {
                if (!_hasError.Contains(iPlayer)) ATMPOPUP(iPlayer, GetLang("_insuffCash"));
                return;
            }
            if (CanTake(player, _itemId, _cost)) {
                Economics.CallHook("Deposit", player.UserIDString, _costDouble);
                Effect.server.Run("assets/prefabs/locks/keypad/effects/lock.code.unlock.prefab", (BaseEntity)player, 0U, Vector3.zero, Vector3.zero);
                double _playerBalance = Economics.Call<double>("Balance", player.UserIDString);
                int amount = player.inventory.GetAmount(_itemId);
                var _element = new CuiElementContainer();
                CuiHelper.DestroyUi(player, "_balance");
                CuiHelper.DestroyUi(player, "_cash");
                CUIClass.CreateText(ref _element, "_balance", "_balanceBox", _uiColors["fadedWhite"], $"${_playerBalance.ToString()}", 16, "0.04 0", "1 1", TextAnchor.MiddleCenter);
                CUIClass.CreateText(ref _element, "_cash", "_cashBox", _uiColors["fadedWhite"], $"${amount.ToString()}", 16, "0.04 0", "1 1", TextAnchor.MiddleCenter);
                CuiHelper.AddUi(player, _element);
                return;
            }
            return;
        }
        [Command("atmui.close")]
        private void ATMUIClose(IPlayer player, string command, string[] args) {
            if (args.Length == 0 || args.Length > 1) return;
            string _getAuth = _config._generalSettings._commAuthKey.ToString();
            if (args[0] != _getAuth) {
                PrivateMessage(player, GetLang("_invalidAuth"));
                return;
            }
            var _bPlayer = BasePlayer.FindByID(Convert.ToUInt64(player.Id));
            ATMKILLCUI(_bPlayer);
        }
        [Command("processtransaction.input")]
        private void ProcessInput(IPlayer iPlayer, string command, string[] args) {
            if (args.Length == 0) return;
            var _player = BasePlayer.FindByID(Convert.ToUInt64(iPlayer.Id));
            if (args[0] != _config._generalSettings._commAuthKey.ToString()) return;
            if (args.Length == 1 || args.Length > 2) {
                if (_depositWithdrawStore.ContainsKey(_player.UserIDString)) _depositWithdrawStore.Remove(_player.UserIDString);
                return;
            }
            int _amount = 0;
            if (!int.TryParse(args[1], out _amount)) {
                return;
            }
            if (_amount == 0) {
                return;
            }
            if (_depositWithdrawStore.ContainsKey(_player.UserIDString)) {
                _depositWithdrawStore[_player.UserIDString] = _amount.ToString();
            }
            else {
                _depositWithdrawStore.Add(_player.UserIDString, _amount.ToString());
            }
        }
#endregion
#region Helpers
        private void SendAnnouncement(string _message) {
            if (_message == null) {
                LogWarning(GetLang("_pmNull"));
                return;
            }
            foreach (IPlayer _player in players.Connected) {
                PrivateMessage(_player, _message);
            }
        }
        private void PrivateMessage(IPlayer _player, string _message) {
            if (_message == null) {
                LogWarning(GetLang("_pmNull"));
                return;
            }
            foreach (IPlayer _conplayer in players.Connected) {
                if (_player.Id == _conplayer.Id) {
                    string _tagColor = _config._chatSettings._chatTagColor;
                    string _msgColor = _config._chatSettings._chatMessageColor;
                    string _finalMessage = $"<color=#{_msgColor}>{_message}</color>";
                    if (_config._chatSettings._enableChatTag) {
                        _finalMessage = $"<color=#{_tagColor}>[ATMSystem]</color> <color=#{_msgColor}>{_message}</color>";
                    }
                    _player.Reply(_finalMessage);
                    return;
                }
            }
            return;
        }
        private string GetLang(string _message) => lang.GetMessage(_message, this);
        private bool CanTake(BasePlayer _player, int _itemId, int _amount) {
            if (_player.inventory.Take(null, _itemId, _amount) != 0) {
                return true;
            }
            return false;
        }
        private void SetUpAuth() {
            if (_config._generalSettings._commAuthKey == 0) {
                _config._generalSettings._commAuthKey = _random.Next();
                SaveConfig();
            }
        }
        private void GiveCard(BasePlayer _player) {
            string _id = "-484206264";
            Item item = ItemManager.Create(FindItem(_id));
            if (item == null || _player == null || !_player.IsConnected) {
                LogError(GetLang("_itemNullBase"));
                return;
            }
            ItemContainer itemContainer = null;
            itemContainer = _player.inventory.containerMain;
            item.amount = 1;
            if (!item.MoveToContainer(itemContainer) && !_player.inventory.GiveItem(item)) {
                item.Remove();
                return;
            }
            ulong skin = Convert.ToUInt64(_config._cardSettings._atmCardSkin);
            item.skin = skin;
            item.name = $"{_player.displayName}'s Bank Card";
            item.MarkDirty();
        }
        private ItemDefinition FindItem(string _idOrName) {
            ItemDefinition _itemDef = ItemManager.FindItemDefinition(_idOrName.ToLower());
            if (_itemDef == null) {
                int _itemId;
                if (int.TryParse(_idOrName, out _itemId)) {
                    _itemDef = ItemManager.FindItemDefinition(_itemId);
                }
            }
            return _itemDef;
        }
#endregion
#region Hooks
        private void OnEntityTakeDamage(VendingMachine entity, HitInfo info) {
            if (_atms.Contains(entity.net.ID.ToString())) {
                info.damageTypes.ScaleAll(0);
            }
            if (_config._vendingSettings._vendingOwner) {
                if (entity.OwnerID == 0) {
                    info.damageTypes.ScaleAll(0);
                }
            }
        }
        private object OnRotateVendingMachine(VendingMachine machine, BasePlayer player) {
            if (_atms.Contains(machine.net.ID.ToString())) {
                return false;
            }
            if (_config._vendingSettings._vendingOwner) {
                if (machine.OwnerID == 0) {
                    if (machine is NPCVendingMachine) {
                        return null;
                    }
                    return false;
                }
                return null;
            }
            return null;
        }
        private object CanAdministerVending(IPlayer player, VendingMachine machine) {
            if (!player.IsAdmin) return false;
            return true;
        }
        /*
        void OnPlayerInput(BasePlayer player, InputState input)
        {   
            if (input.WasJustPressed(BUTTON.DUCK))
            {
                ATMKILLCUI(player);
                //player.SetPlayerFlag(BasePlayer.PlayerFlags.Spectating, false);
            }
            //var _bPlayer = BasePlayer.FindByID(Convert.ToUInt64(player.Id));
            //_bPlayer.SetPlayerFlag(BasePlayer.PlayerFlags.Spectating, false);
        }
        */
        private object CanUseVending(BasePlayer player, VendingMachine vending) {
            var _comp = vending.gameObject.GetComponent<MoveController>();
            if (_comp) {
                if (_comp._holding) return false;
            }
            if (_atms.Contains(vending.net.ID.ToString())) {
                if (_config._generalSettings._requireCard || _config._generalSettings._useButton) return false;
                ATMKILLCUI(player);
                ATMCUI(player);
                return false;
            }
            if (_config._vendingSettings._vendingOwner) {
                if (vending.OwnerID == 0) {
                    if (vending is NPCVendingMachine) {
                        return null;
                    }
                    ATMKILLCUI(player);
                    ATMCUI(player);
                    return false;
                }
                return null;
            }
            return null;
        }
        object OnCardSwipe(CardReader cardReader, Keycard _card, BasePlayer player) {
            var _comp = cardReader.gameObject.GetComponent<MoveController>();
            if (_comp) {
                if (_comp._holding) return false;
            }
            Item _carditem = _card.GetItem();
            if (_config._generalSettings._requireCard) {
                if (_atms.Contains(cardReader.net.ID.ToString())) {
                    if (_carditem != null) {
                        if (_carditem.skin != 0) {
                            string _skinString = _config._cardSettings._atmCardSkin;
                            ulong _skin = Convert.ToUInt64(_skinString);
                            if (_carditem.skin == _skin) {
                                ATMCUI(player);
                                return false;
                            }
                        }
                    }
                }
                if (_carditem != null) {
                    if (_carditem.skin != 0) {
                        foreach (var _items in _atms) {
                            if (ZoneManager.Call<bool>("IsPlayerInZone", _items.ToString(), player)) {
                                ATMCUI(player);
                                return false;
                            }
                        }
                    }
                }
            }
            if (_carditem != null) {
                if (_carditem.skin != 0) {
                    string _skinString = _config._cardSettings._atmCardSkin;
                    ulong _skin = Convert.ToUInt64(_skinString);
                    if (_carditem.skin == _skin) {
                        return false;
                    }
                }
            }
            return null;
        }
        void OnUserRespawned(IPlayer player) {
            var _bPlayer = BasePlayer.FindByID(Convert.ToUInt64(player.Id));
            if (_config._cardSettings._cardOnPlayerSpawn) {
                if (!_config._generalSettings._requireCard && _config._generalSettings._logWarnings) LogError(GetLang("_spawningOnNoCardRequired"));
                GiveCard(_bPlayer);
                return;
            }
            return;
        }
        object OnButtonPress(PressButton button, BasePlayer player) {
            if (_config._generalSettings._useButton) {
                foreach (var _items in _atms) {
                    if (ZoneManager.Call<bool>("IsPlayerInZone", _items.ToString(), player)) {
                        ATMCUI(player);
                        return false;
                    }
                }
                return null;
            }
            return null;
        }
        void Loaded() {
            if (Economics == null) {
                LogError(GetLang("_noEconomics"));
            }
            if (ZoneManager == null) {
                LogError(GetLang("_noZoneManager"));
            }
        }
        void OnServerSave() {
            timer.Once(3f, () => {
                SaveData();
            }
            );
        }
        void Unload() {
            foreach (BaseEntity _entity in _entities) {
                var _component = _entity?.GetComponent<MoveController>();
                if (_component) {
                    if (_component._holding) {
                        _component.Deactivate();
                        UnityEngine.Object.Destroy(_entity);
                    }
                    _component.Deactivate();
                }
                _entities.Clear();
            }
            SaveData();
            if (MarkerManager != null) {
                MarkerManager.CallHook("API_RemoveMarker", "ATM");
            }
        }
#endregion
#region CUI
        private Dictionary<string, string> _uiColors = new Dictionary<string, string> {
            {
                "green", "0.337 0.424 0.196 1"
            }
            , {
                "blueButt", "0.2 0.322 0.4 1"
            }
            , {
                "blueButtText", "0.271 0.647 0.914 1"
            }
            , {
                "red", "0.631 0.282 0.22 1"
            }
            , {
                "black", "0.14 0.14 0.14 0.8"
            }
            , {
                "fadedWhite", "0.843 0.816 0.78 1"
            }
            , {
                "white", "1 1 1 1"
            }
            , {
                "greyBlack", "0.14 0.14 0.14 0.95"
            }
            , {
                "grey", "0.25 0.25 0.25 1"
            }
            ,
        }
        ;
        private void ATMCUI(BasePlayer player) {
            //player.SetPlayerFlag(BasePlayer.PlayerFlags.Spectating, true);
            string _displayName = player.displayName;
            if (_displayName.Length > 16) _displayName = player.displayName.Substring(0, 15);
            double _finalplayerBalance = Economics.Call<double>("Balance", player.UserIDString);
            int _itemId = int.Parse(_config._currSettings._atmCurrencyId);
            int _finalAmount = player.inventory.GetAmount(_itemId);
            var _element = CUIClass.CreateOverlay("ATM", "0, 0, 0, 0.7", "0 0", "1 1", true);
            //Main
            CUIClass.CreatePanel(ref _element, "ATMBack", "ATM", "0.14 0.14 0.14 0.95", "0.3485 0.677", "0.641 0.7", false);
            CUIClass.CreateText(ref _element, "_information", "ATMBack", _uiColors["fadedWhite"], "INFORMATION:", 11, "0.01 0", "1 1", TextAnchor.MiddleLeft);
            CUIClass.CreatePanel(ref _element, "ATMBackInformationBox", "ATM", _uiColors["grey"], "0.35 0.6", "0.64 0.675", false);
            CUIClass.CreateText(ref _element, "_information", "ATMBackInformationBox", _uiColors["fadedWhite"], _config._generalSettings._defaultInfo, 11, "0.02 0", "0.81 1", TextAnchor.MiddleLeft);
            CUIClass.CreateImage(ref _element, "ATMBackInformationBox", "https://i.ibb.co/X7c0vFq/iconcash.png", "0.83 0.03", "0.99 0.97");
            CUIClass.CreateText(ref _element, "Title", "ATM", _uiColors["white"], $"{_config._generalSettings._titleText}", 70, "0.3485 0.690", "0.7 0.9", TextAnchor.LowerLeft);
            //Account
            CUIClass.CreatePanel(ref _element, "ATMAccountTop", "ATM", _uiColors["greyBlack"], "0.3485 0.57", "0.494 0.593", false);
            CUIClass.CreateText(ref _element, "_accountText", "ATMAccountTop", "0.843 0.816 0.78 1", "ACCOUNT", 11, "0.02 0", "1 1", TextAnchor.MiddleLeft);
            CUIClass.CreatePanel(ref _element, "ATMAccountBox", "ATM", _uiColors["grey"], "0.35 0.35", "0.493 0.57", false);
            //Holder
            CUIClass.CreateText(ref _element, "_holderText", "ATMAccountBox", _uiColors["fadedWhite"], "HOLDER:", 11, "0.08 0.85", "1 0.95", TextAnchor.MiddleLeft);
            CUIClass.CreatePanel(ref _element, "_holderBox", "ATMAccountBox", "0.14 0.14 0.14 0.5", "0.075 0.68", "0.92 0.87", false);
            CUIClass.CreateText(ref _element, "_holderName", "_holderBox", _uiColors["white"], $"{_displayName}", 16, "0 0", "1 1", TextAnchor.MiddleCenter);
            //Balance
            CUIClass.CreateText(ref _element, "_balanceText", "ATMAccountBox", _uiColors["fadedWhite"], "BALANCE:", 11, "0.08 0.57", "1 0.67", TextAnchor.MiddleLeft);
            CUIClass.CreatePanel(ref _element, "_balanceBox", "ATMAccountBox", "0.14 0.14 0.14 0.5", "0.075 0.4", "0.92 0.59", false);
            CUIClass.CreateText(ref _element, "_balance", "_balanceBox", _uiColors["white"], $"${_finalplayerBalance.ToString()}", 16, "0 0", "1 1", TextAnchor.MiddleCenter);
            //Cash
            CUIClass.CreateText(ref _element, "_cashText", "ATMAccountBox", _uiColors["fadedWhite"], "CASH:", 11, "0.08 0.29", "1 0.39", TextAnchor.MiddleLeft);
            CUIClass.CreatePanel(ref _element, "_cashBox", "ATMAccountBox", "0.14 0.14 0.14 0.5", "0.075 0.12", "0.92 0.31", false);
            CUIClass.CreateText(ref _element, "_cash", "_cashBox", _uiColors["white"], $"${_finalAmount.ToString()}", 16, "0 0", "1 1", TextAnchor.MiddleCenter);
            //Withdraw And Deposit
            CUIClass.CreatePanel(ref _element, "WithAndDepoTop", "ATM", _uiColors["greyBlack"], "0.4965 0.57", "0.641 0.593", false);
            CUIClass.CreateText(ref _element, "_withanddepoText", "WithAndDepoTop", "0.843 0.816 0.78 1", "WITHDRAW AND DEPOSIT", 11, "0.03 0", "1 1", TextAnchor.MiddleLeft);
            CUIClass.CreatePanel(ref _element, "WithAndDepoBox", "ATM", _uiColors["grey"], "0.498 0.35", "0.64 0.57", false);
            //Input
            CUIClass.CreateText(ref _element, "_enterAmountText", "WithAndDepoBox", _uiColors["fadedWhite"], "ENTER AMOUNT:", 11, "0.08 0.85", "1 0.95", TextAnchor.MiddleLeft);
            CUIClass.CreatePanel(ref _element, "_amountBox", "WithAndDepoBox", "0.14 0.14 0.14 0.5", "0.08 0.68", "0.92 0.87", false);
            CUIClass.CreateText(ref _element, "_enterAmountText", "_amountBox", _uiColors["fadedWhite"], "$", 14, "0.03 0.03", "1 0.95", TextAnchor.MiddleLeft);
            CUIClass.CreateInput(ref _element, "_ammountInput", "_amountBox", _uiColors["fadedWhite"], 12, "0.1 0", "1 1", "robotocondensed-bold.ttf", $"processtransaction.input {_config._generalSettings._commAuthKey}", TextAnchor.MiddleLeft);
            //Function
            CUIClass.CreateButton(ref _element, "_withdrawButton", "WithAndDepoBox", _uiColors["green"], "WITHDRAW", 16, "0.08 0.37", "0.92 0.59", $"atm.withdraw {_config._generalSettings._commAuthKey}", "", _uiColors["fadedWhite"]);
            CUIClass.CreateButton(ref _element, "_depositButton", "WithAndDepoBox", _uiColors["blueButt"], "DEPOSIT", 16, "0.08 0.12", "0.92 0.33", $"atm.deposit {_config._generalSettings._commAuthKey}", "", _uiColors["blueButtText"]);
            CUIClass.CreateButton(ref _element, "_closeButton", "ATMBack", _uiColors["red"], "X", 9, "0.955 0.1", "0.994 0.86", $"atmui.close {_config._generalSettings._commAuthKey}", "", _uiColors["white"]);
            CuiHelper.AddUi(player, _element);
        }
        private void ATMKILLCUI(BasePlayer player) {
            //player.SetPlayerFlag(BasePlayer.PlayerFlags.Spectating, false);
            CuiHelper.DestroyUi(player, "ATM");
        }
        private void ATMPOPUP(IPlayer _player, string _msg) {
            _hasError.Add(_player);
            var _bPlayer = BasePlayer.FindByID(Convert.ToUInt64(_player.Id));
            var _element = new CuiElementContainer();
            CuiHelper.DestroyUi(_bPlayer, "_notifButton");
            CUIClass.CreateButton(ref _element, "_notifButton", "Overlay", _uiColors["red"], _msg, 20, "0.35 0.29", "0.64 0.34", "", "_notifButton", _uiColors["white"]);
            CUIClass.CreateImage(ref _element, "_notifButton", "http://333017_web.fakaheda.eu/warning.png", "0 0", "0.8 1");
            CuiHelper.AddUi(_bPlayer, _element);
            timer.Once(3f, () => {
                CuiHelper.DestroyUi(_bPlayer, "_notifButton");
                _hasError.Remove(_player);
            }
            );
        }
        public class CUIClass {
            public static CuiElementContainer CreateOverlay(string _name, string _color, string _anchorMin, string _anchorMax, bool _cursorOn = false, float _fade = 1f) {
                var _element = new CuiElementContainer() {
                    {
                        new CuiPanel {
                            Image = {
                                Color = _color, Material = "assets/content/ui/uibackgroundblur.mat", FadeIn = _fade
                            }
                            , RectTransform = {
                                AnchorMin = _anchorMin, AnchorMax = _anchorMax
                            }
                            , CursorEnabled = _cursorOn
                        }
                        , new CuiElement().Parent = "Overlay", _name
                    }
                }
                ;
                return _element;
            }
            public static void CreatePanel(ref CuiElementContainer _container, string _name, string _parent, string _color, string _anchorMin, string _anchorMax, bool _cursorOn = false, float _fade = 1f) {
                _container.Add(new CuiPanel {
                    Image = {
                        Color = _color, Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat", FadeIn = _fade
                    }
                    , RectTransform = {
                        AnchorMin = _anchorMin, AnchorMax = _anchorMax
                    }
                    , CursorEnabled = _cursorOn
                }
                , _parent, _name);
            }
            public static void CreateImage(ref CuiElementContainer _container, string _parent, string _image, string _anchorMin, string _anchorMax, float _fade = 1f) {
                if (_image.StartsWith("http") || _image.StartsWith("www")) {
                    _container.Add(new CuiElement {
                        Parent = _parent, Components = {
                            new CuiRawImageComponent {
                                Url = _image, Sprite = "assets/content/textures/generic/fulltransparent.tga", FadeIn = _fade
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = _anchorMin, AnchorMax = _anchorMax
                            }
                        }
                    }
                    );
                }
                else {
                    _container.Add(new CuiElement {
                        Parent = _parent, Components = {
                            new CuiRawImageComponent {
                                Png = _image, Sprite = "assets/content/textures/generic/fulltransparent.tga", FadeIn = _fade
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = _anchorMin, AnchorMax = _anchorMax
                            }
                        }
                    }
                    );
                }
            }
            public static void CreateInput(ref CuiElementContainer _container, string _name, string _parent, string _color, int _size, string _anchorMin, string _anchorMax, string _font = "robotocondensed-bold.ttf", string _command = "command.processinput", TextAnchor _align = TextAnchor.MiddleCenter) {
                _container.Add(new CuiElement {
                    Parent = _parent, Name = _name, Components = {
                        new CuiInputFieldComponent {
                            Text = "0", CharsLimit = 11, Color = _color, IsPassword = false, Command = _command, Font = _font, FontSize = _size, Align = _align
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = _anchorMin, AnchorMax = _anchorMax
                        }
                    }
                    ,
                }
                );
            }
            public static void CreateText(ref CuiElementContainer _container, string _name, string _parent, string _color, string _text, int _size, string _anchorMin, string _anchorMax, TextAnchor _align = TextAnchor.MiddleCenter, string _font = "robotocondensed-bold.ttf") {
                _container.Add(new CuiElement {
                    Parent = _parent, Name = _name, Components = {
                        new CuiTextComponent {
                            Text = _text, FontSize = _size, Font = _font, Align = _align, Color = _color, FadeIn = 1f,
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = _anchorMin, AnchorMax = _anchorMax
                        }
                    }
                    ,
                }
                );
            }
            public static void CreateButton(ref CuiElementContainer _container, string _name, string _parent, string _color, string _text, int _size, string _anchorMin, string _anchorMax, string _command = "", string _close = "", string _textColor = "0.843 0.816 0.78 1", TextAnchor _align = TextAnchor.MiddleCenter) {
                _container.Add(new CuiButton {
                    Button = {
                        Close = _close, Command = _command, Color = _color, FadeIn = 1f
                    }
                    , RectTransform = {
                        AnchorMin = _anchorMin, AnchorMax = _anchorMax
                    }
                    , Text = {
                        T
// ... [Code preview truncated due to length. Full source in attached file] ...

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