Advertisement
Guest User

Untitled

a guest
Dec 14th, 2016
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.16 KB | None | 0 0
  1. // Reference: Oxide.Core.MySql
  2.  
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. using Oxide.Core.Database;
  7. using Oxide.Core.Libraries.Covalence;
  8.  
  9. namespace Oxide.Plugins
  10. {
  11. [Info("DonationClaim", "Wulf/lukespragg", "1.0.2", ResourceId = 1923)]
  12. [Description("Players can claim rewards for automatic PayPal donations")]
  13.  
  14. class DonationClaim : CovalencePlugin
  15. {
  16. readonly Core.MySql.Libraries.MySql mySql = new Core.MySql.Libraries.MySql();
  17. Connection connection;
  18. DefaultConfig config;
  19.  
  20. #region Configuration
  21.  
  22. class DefaultConfig
  23. {
  24. readonly List<string> exampleCommands = new List<string>();
  25. public readonly Dictionary<string, List<string>> Packages = new Dictionary<string, List<string>>();
  26.  
  27. public DefaultConfig()
  28. {
  29. exampleCommands.Add("grant user {0} some.permission");
  30. exampleCommands.Add("grant user {0} another.permission");
  31. Packages.Add("Example", exampleCommands);
  32. Packages.Add("VIP", exampleCommands);
  33. }
  34.  
  35. public string DatabaseHost = "localhost";
  36. public int DatabasePort = 3306;
  37. public string DatabaseName = "oxide";
  38. public string DatabaseUser = "root";
  39. public string DatabasePassword = "changeme";
  40. }
  41.  
  42. protected override void LoadDefaultConfig()
  43. {
  44. PrintWarning("Creating a new configuration file");
  45. Config.Clear();
  46. config = new DefaultConfig();
  47. Config.WriteObject(config, true);
  48. SaveConfig();
  49. }
  50.  
  51. #endregion
  52.  
  53. #region Localization
  54.  
  55. void LoadDefaultMessages()
  56. {
  57. // English
  58. lang.RegisterMessages(new Dictionary<string, string>
  59. {
  60. ["Claimed"] = "You claimed the {0} donation package. Thank you for your donation!",
  61. ["NoPackage"] = "Package {0} could not be found! Please notify an admin",
  62. ["NoUnclaimed"] = "No unclaimed rewards available for email address: {0}"
  63. }, this);
  64. }
  65.  
  66. #endregion
  67.  
  68. void Init()
  69. {
  70. try
  71. {
  72. config = Config.ReadObject<DefaultConfig>();
  73. }
  74. catch
  75. {
  76. PrintWarning("Could not read config, creating new default config");
  77. LoadDefaultConfig();
  78. }
  79.  
  80. LoadDefaultMessages();
  81. }
  82.  
  83. [Command("claim", "claimdonation", "claimreward")]
  84. void ChatCommand(IPlayer player, string command, string[] args)
  85. {
  86. var playerEmail = string.Join("", args).Replace("@", "@@");
  87. string packageClaimed;
  88.  
  89. connection = mySql.OpenDb(config.DatabaseHost, config.DatabasePort, config.DatabaseName, config.DatabaseUser, config.DatabasePassword, this);
  90. var sql = Sql.Builder.Append($"call {config.DatabaseName}.claim_donation('" + playerEmail + "');");
  91. mySql.Query(sql, connection, list =>
  92. {
  93. var sb = new StringBuilder();
  94. foreach (var entry in list)
  95. {
  96. sb.AppendFormat("{0}", entry["item_name"]);
  97. sb.AppendLine();
  98. }
  99.  
  100. packageClaimed = sb.ToString();
  101. var packageKey = GetPackageKey(packageClaimed, config.Packages);
  102.  
  103. if (packageClaimed.Length < 3)
  104. {
  105. player.Reply(Lang("NoUnclaimed", player.Id, playerEmail));
  106. }
  107. else
  108. {
  109. List<string> consoleCommands;
  110. if (config.Packages.TryGetValue(packageKey, out consoleCommands))
  111. {
  112. RunConsoleCommands(consoleCommands, player.Id);
  113. player.Reply(Lang("Claimed", player.Id, packageClaimed));
  114. Puts($"{player} has claimed donation package {packageClaimed}");
  115. }
  116. else
  117. {
  118. player.Reply(Lang("NoPackage", player.Id, packageClaimed));
  119. Puts($"{player} tried to claim {packageClaimed}, but the package could not be found in the config!");
  120. }
  121. }
  122. });
  123. }
  124.  
  125. static string GetPackageKey(string packageName, Dictionary<string, List<string>> packages)
  126. {
  127. foreach (var entry in packages)
  128. if (packageName.Contains(entry.Key)) return entry.Key;
  129. return "";
  130. }
  131.  
  132. void RunConsoleCommands(List<string> commandsList, string playerName)
  133. {
  134. foreach (var command in commandsList) server.Command(string.Format(command, playerName));
  135. }
  136.  
  137. T GetConfig<T>(string name, T value) => Config[name] == null ? value : (T)Convert.ChangeType(Config[name], typeof(T));
  138.  
  139. string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);
  140. }
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement