Advertisement
Guest User

Untitled

a guest
Dec 7th, 2015
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.81 KB | None | 0 0
  1. // Reference: Oxide.Ext.MySql
  2. using System;
  3. using System.Linq;
  4. using System.Collections.Generic;
  5. using UnityEngine;
  6. using Rust;
  7. using Oxide.Game.Rust.Cui;
  8. using Oxide.Core.Plugins;
  9. using Oxide.Core;
  10. using MySql.Data.MySqlClient;
  11.  
  12. namespace Oxide.Plugins
  13. {
  14.     [Info("AutomaticDonations", "OwnProx", 0.1, ResourceId = 324234)]
  15.     [Description("AutomaticDonations.")]
  16.     public class AutomaticDonations : RustPlugin
  17.     {  
  18.     #region VARIBLES
  19.         private System.Timers.Timer timer;
  20.         private static readonly Ext.MySql.Libraries.MySql _mySql = Interface.GetMod().GetLibrary<Ext.MySql.Libraries.MySql>();
  21.         private static Ext.MySql.Connection Connection;
  22.         string[] MyGroups = {"donator", "supporter", "contributor", "patron", "philanthropist", "benefactor"};
  23.     #endregion
  24.     #region CLASSES
  25.         private class PI : MonoBehaviour
  26.         {
  27.             public string Colour = "", Tag = "";
  28.             public bool isDonator = false, ColourToggle = false, TagToggle = false;
  29.         }
  30.     #endregion
  31.     #region Hooks      
  32.         [HookMethod("Loaded")
  33.         private void Loaded()
  34.         {
  35.             Connection = _mySql.OpenDb("192.185.41.225", 3306, "pbpredat_donations", "pbpredat_pbpred", "airwalk1", this);
  36.             timer = new System.Timers.Timer();
  37.             timer.Interval = 30000;
  38.             timer.Elapsed += new System.Timers.ElapsedEventHandler(EveryThirtySeconds);
  39.             timer.Start();
  40.             foreach (BasePlayer player in BasePlayer.activePlayerList)  
  41.             if (player.gameObject.GetComponent<PI>() == null) OnPlayerLogin(player);
  42.         }
  43.        
  44.         [HookMethod("OnPlayerInit")]
  45.         private void OnPlayerInit(BasePlayer player)
  46.         {
  47.             if(player != null) OnPlayerLogin(player);
  48.         }
  49.        
  50.         [HookMethod("OnPlayerDisconnected")]
  51.         private void OnPlayerDisconnected(BasePlayer player)
  52.         {
  53.             if(player != null) OnPlayerLoggout(player);
  54.         }
  55.        
  56.         [HookMethod("Unload")]
  57.         private void Unload()
  58.         {
  59.             _mySql.CloseDb(Connection);
  60.             timer.Stop();
  61.             timer.Dispose();
  62.         }
  63.        
  64.         private PI CHATPLAYER;
  65.         [HookMethod("OnPlayerChat")]
  66.         private object OnPlayerChat(ConsoleSystem.Arg arg)
  67.         {
  68.             if(arg != null)
  69.             {
  70.                 string playerChat = arg.GetString(0, "text");
  71.                 BasePlayer player = arg.connection.player as BasePlayer;
  72.                 if (player != null && playerChat != null && (CHATPLAYER = player.gameObject.GetComponent<PI>()) != null)
  73.                 {
  74.                    
  75.                     if(CHATPLAYER.ColourToggle) PrintToChat(string.Format("<color={0}>{1}{2}: {3}</color>", CHATPLAYER.Colour, CHATPLAYER.TagToggle ? CHATPLAYER.Tag : "", player.displayName, playerChat));
  76.                     else if (permission.UserHasPermission(player.UserIDString, "original")) PrintToChat(string.Format("<color=#CE422B>{0}{1}: {2}</color>", CHATPLAYER.TagToggle ? CHATPLAYER.Tag : "", player.displayName, playerChat));
  77.                     else PrintToChat(string.Format("{0}{1}: {2}", CHATPLAYER.TagToggle ? CHATPLAYER.Tag : "", player.displayName, playerChat));
  78.                 }
  79.             }
  80.             return "handled";
  81.         }
  82.     #endregion
  83.     #region FUNCTIONS
  84.         private void AddGroupToUser(int Amount, BasePlayer p)
  85.         {
  86.             PI pi;
  87.             if(p.gameObject != null && (pi = p.gameObject.GetComponent<PI>()) != null)
  88.             {
  89.                 switch(Amount)
  90.                 {
  91.                     case 5:
  92.                         ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} donator", p.displayName));
  93.                         pi.Tag = "[Donator]";
  94.                     break;
  95.                     case 15:
  96.                         ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} supporter", p.displayName));
  97.                         pi.Tag = "[Supporter]";
  98.                     break;
  99.                     case 30:
  100.                         ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} contributor", p.displayName));
  101.                         pi.Tag = "[Contributor]";
  102.                     break;
  103.                     case 50:
  104.                         ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} patron", p.displayName));
  105.                         pi.Tag = "[Patron]";
  106.                     break;
  107.                     case 100:
  108.                         ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} philanthropist", p.displayName));
  109.                         pi.Tag = "[Philanthropist]";
  110.                     break;
  111.                     case 150:
  112.                         ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup add {0} benefactor", p.displayName));
  113.                         pi.Tag = "[Benefactor]";
  114.                     break;
  115.                 }
  116.                 ConsoleSystem.Run.Server.Quiet("server.writecfg",true);
  117.                 pi.Colour = "#ffd700";
  118.                 pi.isDonator = true;
  119.                 pi.ColourToggle = true;
  120.                 pi.TagToggle = true;
  121.             }
  122.         }
  123.        
  124.         private void RemoveFromAll(BasePlayer p)
  125.         {
  126.             ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} donator", p.displayName));
  127.             ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} supporter", p.displayName));
  128.             ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} contributor", p.displayName));
  129.             ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} patron", p.displayName));
  130.             ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} philanthropist", p.displayName));
  131.             ConsoleSystem.Run.Server.Quiet(string.Format("oxide.usergroup remove {0} benefactor", p.displayName));
  132.             ConsoleSystem.Run.Server.Quiet("server.writecfg",true);
  133.             PI pi;
  134.             if(p.gameObject != null && (pi = p.gameObject.GetComponent<PI>()) != null)
  135.             {              
  136.                 pi.isDonator = false;
  137.                 pi.Colour = "";
  138.                 pi.ColourToggle = false;
  139.                 pi.TagToggle = false;
  140.             }
  141.         }
  142.        
  143.         private void OnPlayerLoggout(BasePlayer p)
  144.         {
  145.             PI pi;
  146.             if((pi = p.gameObject.GetComponent<PI>()) != null)
  147.                 _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);
  148.             GameObject.Destroy(pi);
  149.         }
  150.        
  151.         private void OnPlayerLogin(BasePlayer p)
  152.         {
  153.             PI Out = new PI();
  154.             _mySql.Query(Ext.MySql.Sql.Builder.Append("SELECT `Colour`, `Tag`, `ColourToggle`, `TagToggle`, `isDonator` FROM `accounts` WHERE `SteamID` = @0 LIMIT 1", p.userID), Connection, list =>
  155.             {
  156.                 Out = p.gameObject.AddComponent<PI>();
  157.                 if(list != null && list.Count == 1)
  158.                 {
  159.                     Out.Colour = (string)list[0]["Colour"];
  160.                     Out.Tag = (string)list[0]["Tag"];
  161.                     Out.isDonator = (int)list[0]["isDonator"] == 1;
  162.                     Out.ColourToggle = (int)list[0]["ColourToggle"] == 1;
  163.                     Out.TagToggle = (int)list[0]["TagToggle"] == 1;
  164.                 }
  165.                 else
  166.                 {
  167.                     _mySql.Insert(Ext.MySql.Sql.Builder.Append("INSERT INTO `accounts` (`SteamID`, `Name`) VALUES (@0, @1);", p.userID, cleansql(p.displayName)), Connection);
  168.                     Out.Colour = "#ffffff";
  169.                     Out.Tag = "";
  170.                     Out.isDonator = false;
  171.                     Out.ColourToggle = false;
  172.                     Out.TagToggle = false;
  173.                 }
  174.             });
  175.             if(Out.isDonator==false)
  176.             {
  177.                 for(int i = 0; i < MyGroups.Length; i++)
  178.                 {
  179.                     if(permission.UserHasPermission(p.UserIDString, MyGroups[i]))
  180.                     {
  181.                         Out.Tag = "[" + MyGroups[i] + "]";
  182.                         Out.Colour = "#ffffff";
  183.                         Out.isDonator = true;
  184.                         Out.ColourToggle = true;
  185.                         Out.TagToggle = true;
  186.                     }
  187.                 }
  188.             }
  189.             CheckDonationOnLogin(p);
  190.         }
  191.        
  192.         private void CheckDonationOnLogin(BasePlayer p)
  193.         {
  194.             _mySql.Query(Ext.MySql.Sql.Builder.Append("SELECT `ID`, `SteamID`, `Amount`, `Refund`, `IncreasedAmount` FROM `donationadder` WHERE `SteamID` = @0 LIMIT 1", p.userID), Connection, list =>
  195.             {
  196.                 if(list != null && list.Count == 1)
  197.                 {
  198.                     if((int)list[0]["Refund"] == 0)
  199.                     {
  200.                         AddGroupToUser((int)list[0]["Amount"], p);                     
  201.                         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>"));
  202.                     } else RemoveFromAll(p);
  203.                     _mySql.Update(Ext.MySql.Sql.Builder.Append("DELETE FROM `donationadder` WHERE `ID` = @0", (int)list[0]["ID"]), Connection);
  204.                 }
  205.             });
  206.         }
  207.        
  208.         private void EveryThirtySeconds(object sender, System.Timers.ElapsedEventArgs e)
  209.         {
  210.             _mySql.Query(Ext.MySql.Sql.Builder.Append("SELECT `ID`, `SteamID`, `Amount`, `Refund`, `IncreasedAmount` FROM `donationadder` WHERE `Offline` = 0 LIMIT 1"), Connection, list =>
  211.             {
  212.                 if(list != null && list.Count == 1)
  213.                 {  
  214.                     BasePlayer p;
  215.                     ulong SteamID = (ulong)(long)list[0]["SteamID"];                       
  216.                     if((p = BasePlayer.activePlayerList.Find(x => x.userID == SteamID)) != null)
  217.                     {                          
  218.                         if((int)list[0]["Refund"] == 0)
  219.                         {
  220.                             AddGroupToUser((int)list[0]["Amount"], p);
  221.                             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>"));
  222.                         } else RemoveFromAll(p);
  223.                         _mySql.Update(Ext.MySql.Sql.Builder.Append("DELETE FROM `donationadder` WHERE `ID` = @0", (int)list[0]["ID"]), Connection);
  224.                     }
  225.                     else _mySql.Update(Ext.MySql.Sql.Builder.Append("UPDATE `donationadder` set `Offline` = 1 WHERE `ID` = @0", (int)list[0]["ID"]), Connection);
  226.                 }
  227.             });
  228.         }
  229.        
  230.         private string cleansql(string sql)
  231.         {
  232.             return sql.Replace("'", "");
  233.         }
  234.     #endregion
  235.     #region COMMANDS
  236.         [ChatCommand("color")]
  237.         private void cmdToggleColour(BasePlayer player, string command, string[] args)
  238.         {
  239.             PI pi;
  240.             if(player != null && player.gameObject != null && (pi = player.gameObject.GetComponent<PI>()) != null && pi.isDonator)
  241.             {
  242.                 pi.ColourToggle = !pi.ColourToggle;
  243.                 SendReply(player, "Color: " + (pi.ColourToggle ? "Enabled" : "Disabled"));
  244.             } else SendReply(player, "You are not a donator!");
  245.         }
  246.        
  247.         [ChatCommand("tag")]
  248.         private void cmdToggleTag(BasePlayer player, string command, string[] args)
  249.         {
  250.             PI pi;
  251.             if(player != null && player.gameObject != null && (pi = player.gameObject.GetComponent<PI>()) != null && pi.isDonator)
  252.             {
  253.                 pi.TagToggle = !pi.TagToggle;
  254.                 SendReply(player, "Tag: " + (pi.TagToggle ? "Enabled" : "Disabled"));
  255.             } else SendReply(player, "You are not a donator!");
  256.         }  
  257.     #endregion
  258.     }
  259. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement