Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Reference: Oxide.Ext.MySql
- using System;
- using System.Linq;
- using System.Collections.Generic;
- using UnityEngine;
- using Rust;
- using Oxide.Game.Rust.Cui;
- using Oxide.Core.Plugins;
- using Oxide.Core;
- using MySql.Data.MySqlClient;
- namespace Oxide.Plugins
- {
- [Info("AutomaticDonations", "OwnProx", 0.1, ResourceId = 324234)]
- [Description("AutomaticDonations.")]
- public class AutomaticDonations : RustPlugin
- {
- #region VARIBLES
- private System.Timers.Timer timer;
- private static readonly Ext.MySql.Libraries.MySql _mySql = Interface.GetMod().GetLibrary<Ext.MySql.Libraries.MySql>();
- private static Ext.MySql.Connection Connection;
- string[] MyGroups = {"donator", "supporter", "contributor", "patron", "philanthropist", "benefactor"};
- #endregion
- #region CLASSES
- private class PI : MonoBehaviour
- {
- public string Colour = "", Tag = "";
- public bool isDonator = false, ColourToggle = false, TagToggle = false;
- }
- #endregion
- #region Hooks
- [HookMethod("Loaded")
- private void Loaded()
- {
- Connection = _mySql.OpenDb("192.185.41.225", 3306, "pbpredat_donations", "pbpredat_pbpred", "airwalk1", this);
- timer = new System.Timers.Timer();
- timer.Interval = 30000;
- timer.Elapsed += new System.Timers.ElapsedEventHandler(EveryThirtySeconds);
- timer.Start();
- foreach (BasePlayer player in BasePlayer.activePlayerList)
- if (player.gameObject.GetComponent<PI>() == null) OnPlayerLogin(player);
- }
- [HookMethod("OnPlayerInit")]
- private void OnPlayerInit(BasePlayer player)
- {
- if(player != null) OnPlayerLogin(player);
- }
- [HookMethod("OnPlayerDisconnected")]
- private void OnPlayerDisconnected(BasePlayer player)
- {
- if(player != null) OnPlayerLoggout(player);
- }
- [HookMethod("Unload")]
- private void Unload()
- {
- _mySql.CloseDb(Connection);
- timer.Stop();
- timer.Dispose();
- }
- private PI CHATPLAYER;
- [HookMethod("OnPlayerChat")]
- private object OnPlayerChat(ConsoleSystem.Arg arg)
- {
- if(arg != null)
- {
- string playerChat = arg.GetString(0, "text");
- BasePlayer player = arg.connection.player as BasePlayer;
- if (player != null && playerChat != null && (CHATPLAYER = player.gameObject.GetComponent<PI>()) != null)
- {
- if(CHATPLAYER.ColourToggle) PrintToChat(string.Format("<color={0}>{1}{2}: {3}</color>", CHATPLAYER.Colour, CHATPLAYER.TagToggle ? CHATPLAYER.Tag : "", player.displayName, playerChat));
- else if (permission.UserHasPermission(player.UserIDString, "original")) PrintToChat(string.Format("<color=#CE422B>{0}{1}: {2}</color>", CHATPLAYER.TagToggle ? CHATPLAYER.Tag : "", player.displayName, playerChat));
- else PrintToChat(string.Format("{0}{1}: {2}", CHATPLAYER.TagToggle ? CHATPLAYER.Tag : "", player.displayName, playerChat));
- }
- }
- return "handled";
- }
- #endregion
- #region FUNCTIONS
- private void AddGroupToUser(int Amount, BasePlayer p)
- {
- PI pi;
- if(p.gameObject != null && (pi = p.gameObject.GetComponent<PI>()) != null)
- {
- switch(Amount)
- {
- case 5:
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} donator", p.displayName));
- pi.Tag = "[Donator]";
- break;
- case 15:
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} supporter", p.displayName));
- pi.Tag = "[Supporter]";
- break;
- case 30:
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} contributor", p.displayName));
- pi.Tag = "[Contributor]";
- break;
- case 50:
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} patron", p.displayName));
- pi.Tag = "[Patron]";
- break;
- case 100:
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} philanthropist", p.displayName));
- pi.Tag = "[Philanthropist]";
- break;
- case 150:
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} benefactor", p.displayName));
- pi.Tag = "[Benefactor]";
- break;
- }
- ConsoleSystem.Run.Server.Quiet("server.writecfg",true);
- pi.Colour = "#ffd700";
- pi.isDonator = true;
- pi.ColourToggle = true;
- pi.TagToggle = true;
- }
- }
- private void RemoveFromAll(BasePlayer p)
- {
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} donator", p.displayName));
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} supporter", p.displayName));
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} contributor", p.displayName));
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} patron", p.displayName));
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} philanthropist", p.displayName));
- ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} benefactor", p.displayName));
- ConsoleSystem.Run.Server.Quiet("server.writecfg",true);
- PI pi;
- if(p.gameObject != null && (pi = p.gameObject.GetComponent<PI>()) != null)
- {
- pi.isDonator = false;
- pi.Colour = "";
- pi.ColourToggle = false;
- pi.TagToggle = false;
- }
- }
- private void OnPlayerLoggout(BasePlayer p)
- {
- PI pi;
- if((pi = p.gameObject.GetComponent<PI>()) != null)
- _mySql.Update(Ext.MySql.Sql.Builder.Append("UPDATE `accounts` set `ColourToggle` = @0, `TagToggle` = @1, `Colour` = @2, `isDonator` = @3 WHERE `SteamID` = @4", (pi.ColourToggle ? 1 : 0), (pi.TagToggle ? 1 : 0), pi.Colour, pi.isDonator, p.userID), Connection);
- GameObject.Destroy(pi);
- }
- private void OnPlayerLogin(BasePlayer p)
- {
- PI Out = new PI();
- _mySql.Query(Ext.MySql.Sql.Builder.Append("SELECT `Colour`, `Tag`, `ColourToggle`, `TagToggle`, `isDonator` FROM `accounts` WHERE `SteamID` = @0 LIMIT 1", p.userID), Connection, list =>
- {
- Out = p.gameObject.AddComponent<PI>();
- if(list != null && list.Count == 1)
- {
- Out.Colour = (string)list[0]["Colour"];
- Out.Tag = (string)list[0]["Tag"];
- Out.isDonator = (int)list[0]["isDonator"] == 1;
- Out.ColourToggle = (int)list[0]["ColourToggle"] == 1;
- Out.TagToggle = (int)list[0]["TagToggle"] == 1;
- }
- else
- {
- _mySql.Insert(Ext.MySql.Sql.Builder.Append("INSERT INTO `accounts` (`SteamID`, `Name`) VALUES (@0, @1);", p.userID, cleansql(p.displayName)), Connection);
- Out.Colour = "#ffffff";
- Out.Tag = "";
- Out.isDonator = false;
- Out.ColourToggle = false;
- Out.TagToggle = false;
- }
- });
- if(Out.isDonator==false)
- {
- for(int i = 0; i < MyGroups.Length; i++)
- {
- if(permission.UserHasPermission(p.UserIDString, MyGroups[i]))
- {
- Out.Tag = "[" + MyGroups[i] + "]";
- Out.Colour = "#ffffff";
- Out.isDonator = true;
- Out.ColourToggle = true;
- Out.TagToggle = true;
- }
- }
- }
- CheckDonationOnLogin(p);
- }
- private void CheckDonationOnLogin(BasePlayer p)
- {
- _mySql.Query(Ext.MySql.Sql.Builder.Append("SELECT `ID`, `SteamID`, `Amount`, `Refund`, `IncreasedAmount` FROM `donationadder` WHERE `SteamID` = @0 LIMIT 1", p.userID), Connection, list =>
- {
- if(list != null && list.Count == 1)
- {
- if((int)list[0]["Refund"] == 0)
- {
- AddGroupToUser((int)list[0]["Amount"], p);
- ConsoleSystem.Run.Server.Quiet(string.Format("say <color=cyan>" + p.displayName + " Has just donated " + (int)list[0]["IncreasedAmount"] + "$, and " + (int)list[0]["Amount"] +"$ in total!</color>"));
- } else RemoveFromAll(p);
- _mySql.Update(Ext.MySql.Sql.Builder.Append("DELETE FROM `donationadder` WHERE `ID` = @0", (int)list[0]["ID"]), Connection);
- }
- });
- }
- private void EveryThirtySeconds(object sender, System.Timers.ElapsedEventArgs e)
- {
- _mySql.Query(Ext.MySql.Sql.Builder.Append("SELECT `ID`, `SteamID`, `Amount`, `Refund`, `IncreasedAmount` FROM `donationadder` WHERE `Offline` = 0 LIMIT 1"), Connection, list =>
- {
- if(list != null && list.Count == 1)
- {
- BasePlayer p;
- ulong SteamID = (ulong)(long)list[0]["SteamID"];
- if((p = BasePlayer.activePlayerList.Find(x => x.userID == SteamID)) != null)
- {
- if((int)list[0]["Refund"] == 0)
- {
- AddGroupToUser((int)list[0]["Amount"], p);
- ConsoleSystem.Run.Server.Quiet(string.Format("say <color=cyan>" + p.displayName + " Has just donated " + (int)list[0]["IncreasedAmount"] + "$, and " + (int)list[0]["Amount"] +"$ in total!</color>"));
- } else RemoveFromAll(p);
- _mySql.Update(Ext.MySql.Sql.Builder.Append("DELETE FROM `donationadder` WHERE `ID` = @0", (int)list[0]["ID"]), Connection);
- }
- else _mySql.Update(Ext.MySql.Sql.Builder.Append("UPDATE `donationadder` set `Offline` = 1 WHERE `ID` = @0", (int)list[0]["ID"]), Connection);
- }
- });
- }
- private string cleansql(string sql)
- {
- return sql.Replace("'", "");
- }
- #endregion
- #region COMMANDS
- [ChatCommand("color")]
- private void cmdToggleColour(BasePlayer player, string command, string[] args)
- {
- PI pi;
- if(player != null && player.gameObject != null && (pi = player.gameObject.GetComponent<PI>()) != null && pi.isDonator)
- {
- pi.ColourToggle = !pi.ColourToggle;
- SendReply(player, "Color: " + (pi.ColourToggle ? "Enabled" : "Disabled"));
- } else SendReply(player, "You are not a donator!");
- }
- [ChatCommand("tag")]
- private void cmdToggleTag(BasePlayer player, string command, string[] args)
- {
- PI pi;
- if(player != null && player.gameObject != null && (pi = player.gameObject.GetComponent<PI>()) != null && pi.isDonator)
- {
- pi.TagToggle = !pi.TagToggle;
- SendReply(player, "Tag: " + (pi.TagToggle ? "Enabled" : "Disabled"));
- } else SendReply(player, "You are not a donator!");
- }
- #endregion
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement