Advertisement
Guest User

Untitled

a guest
Jun 27th, 2016
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.67 KB | None | 0 0
  1. // Reference: MySql.Data
  2.  
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using MySql.Data;
  8. using MySql.Data.MySqlClient;
  9. using MySql.Data.Common;
  10. using Oxide.Core.Plugins;
  11. using UnityEngine;
  12.  
  13.  
  14. namespace Oxide.Plugins
  15. {
  16. [Info("PoliticalSurvival", "Jonty", 0.2)]
  17. [Description("Political Survival - Become the President, tax your subjects and keep them in line!")]
  18. class PoliticalSurvival : RustPlugin
  19. {
  20. static void Main(string[] args) { }
  21.  
  22. public class StrayPlayer
  23. {
  24. public ulong SteamId;
  25. public bool IsSettingTaxChest;
  26.  
  27. public StrayPlayer(ulong pSteamId)
  28. {
  29. this.SteamId = pSteamId;
  30. this.IsSettingTaxChest = false;
  31. }
  32. }
  33.  
  34. Dictionary<BasePlayer, StrayPlayer> OnlinePlayers;
  35. Dictionary<string, string> ServerMessages;
  36.  
  37. MySqlConnection Database;
  38.  
  39.  
  40. string DatabaseHost = "";
  41. string DatabasePort = "";
  42. string DatabaseUsername = "";
  43. string DatabasePassword = "";
  44. string DatabaseName = "";
  45.  
  46. ulong President = 0;
  47. double TaxLevel = 20.0;
  48. string RealmName = "";
  49.  
  50. float TaxChestX = 0;
  51. float TaxChestY = 0;
  52. float TaxChestZ = 0;
  53.  
  54. StorageContainer TaxContainer = null;
  55.  
  56. private void LoadDefaultConfig()
  57. {
  58. CreateConfigEntry("Database", "Host", "127.0.0.1");
  59. CreateConfigEntry("Database", "Port", "3306");
  60. CreateConfigEntry("Database", "Username", "root");
  61. CreateConfigEntry("Database", "Password", "lol123");
  62. CreateConfigEntry("Database", "Name", "rust");
  63.  
  64. SaveConfig();
  65. }
  66.  
  67. void Init()
  68. {
  69. DatabaseHost = Config["Database", "Host"].ToString();
  70. DatabasePort = Config["Database", "Port"].ToString();
  71. DatabaseUsername = Config["Database", "Username"].ToString();
  72. DatabasePassword = Config["Database", "Password"].ToString();
  73. DatabaseName = Config["Database", "Name"].ToString();
  74. RealmName = lang.GetMessage("DefaultRealm", this);
  75.  
  76. Puts("Political Survival is starting...");
  77.  
  78. OnlinePlayers = new Dictionary<BasePlayer, StrayPlayer>();
  79. LoadServerMessages();
  80.  
  81. try
  82. {
  83. Database = new MySqlConnection();
  84. Database.ConnectionString = "server=" + DatabaseHost + ";port=" + DatabasePort + ";uid=" + DatabaseUsername + ";pwd=" + DatabasePassword + ";database=" + DatabaseName + ";";
  85. Database.Open();
  86.  
  87. MySqlCommand GetSettings = new MySqlCommand("SELECT president,tax_level,realm_name,tax_chest FROM settings LIMIT 1", Database);
  88. MySqlDataReader SettingsReader = GetSettings.ExecuteReader();
  89.  
  90. while (SettingsReader.Read())
  91. {
  92. President = SettingsReader.GetUInt64(0);
  93. TaxLevel = SettingsReader.GetInt32(1);
  94. RealmName = SettingsReader.GetString(2);
  95.  
  96. string[] TaxCoordinates = SettingsReader.GetString(3).Split(';');
  97. TaxChestX = Convert.ToSingle(TaxCoordinates[0]);
  98. TaxChestY = Convert.ToSingle(TaxCoordinates[1]);
  99. TaxChestZ = Convert.ToSingle(TaxCoordinates[2]);
  100. }
  101.  
  102. SettingsReader.Dispose();
  103. GetSettings.Dispose();
  104. }
  105. catch (Exception e)
  106. {
  107. PrintToConsole(e.ToString());
  108. PrintToConsole("If this is the first time running the plugin, please edit the configuration!");
  109. }
  110.  
  111. Puts("Realm name is " + RealmName);
  112. Puts("Tax level is " + TaxLevel);
  113. Puts("President is " + President);
  114.  
  115. LoadTaxContainer();
  116.  
  117. if (BasePlayer.activePlayerList.Count >= 1)
  118. {
  119. foreach (BasePlayer iPlayer in BasePlayer.activePlayerList)
  120. {
  121. AddPlayer(iPlayer);
  122. }
  123.  
  124. Puts(OnlinePlayers.Count + " players cached.");
  125. }
  126.  
  127. Puts("Political Survival: Started");
  128. }
  129.  
  130. void OnPlayerInit(BasePlayer Player)
  131. {
  132. PrintToChat(Player.displayName + " " + lang.GetMessage("PlayerConnected", this, Player.UserIDString) + " " + RealmName);
  133. AddPlayer(Player);
  134. }
  135. timer.Repeat(5f, 0, () =>
  136. {
  137. rust.BroadcastChat("producing"));
  138. });
  139.  
  140.  
  141.  
  142. void OnPlayerDisconnected(BasePlayer Player, string Reason)
  143. {
  144. PrintToChat(Player.displayName + " " + lang.GetMessage("PlayerDisconnected", this, Player.UserIDString) + " " + RealmName);
  145. RemovePlayer(Player);
  146. }
  147.  
  148. void OnDispenserGather(ResourceDispenser Dispenser, BaseEntity Entity, Item Item)
  149. {
  150. if (TaxLevel > 0 && President > 0)
  151. {
  152. int Tax = Convert.ToInt32(Math.Round((Item.amount * TaxLevel) / 100));
  153. Item.amount = Item.amount - Tax;
  154.  
  155. if (TaxContainer == null)
  156. {
  157. TaxChestX = 0;
  158. TaxChestY = 0;
  159. TaxChestZ = 0;
  160. SaveTaxContainer();
  161. LoadTaxContainer();
  162. return;
  163. }
  164.  
  165. if (!TaxContainer.inventory.IsFull())
  166. {
  167. ItemDefinition ToAdd = ItemManager.FindItemDefinition(Item.info.itemid);
  168.  
  169. if (ToAdd != null)
  170. {
  171. TaxContainer.inventory.AddItem(ToAdd, Tax);
  172. }
  173. }
  174. }
  175. }
  176.  
  177. void OnPlantGather(PlantEntity Plant, Item Item, BasePlayer Player)
  178. {
  179. int Tax = Convert.ToInt32(Math.Round((Item.amount * TaxLevel) / 100));
  180. Item.amount = Item.amount - Tax;
  181. }
  182.  
  183. void OnEntityDeath(BaseCombatEntity Entity, HitInfo Info)
  184. {
  185. BasePlayer Player = Entity.ToPlayer();
  186.  
  187. if (Player != null)
  188. {
  189. if (IsPresident(Player.userID))
  190. {
  191. BasePlayer Killer = null;
  192.  
  193. if (Info != null)
  194. Killer = Info.Initiator.ToPlayer();
  195.  
  196. if (Killer != null && Killer.userID != Player.userID)
  197. {
  198. SetPresident(Killer.userID);
  199. PrintToChat(string.Format(lang.GetMessage("PresidentMurdered", this), Killer.displayName));
  200. }
  201. else
  202. {
  203. SetPresident(0);
  204. PrintToChat(string.Format(lang.GetMessage("PresidentDied", this)));
  205. }
  206. }
  207. }
  208. }
  209.  
  210. void OnPlayerAttack(BasePlayer Attacker, HitInfo Info)
  211. {
  212. BasePlayer Defender = Info.HitEntity.ToPlayer();
  213.  
  214. if (Defender != null)
  215. {
  216. // Is a person
  217. }
  218. else
  219. {
  220. uint EntityId = Info.HitEntity.prefabID;
  221.  
  222. if (EntityId == 2014947887 || EntityId == 3439001196)
  223. {
  224. StrayPlayer Stray = OnlinePlayers[Attacker.ToPlayer()];
  225.  
  226. if (Stray == null)
  227. return;
  228.  
  229. if (Stray.IsSettingTaxChest)
  230. {
  231. Vector3 BoxPosition = Info.HitEntity.transform.position;
  232. float x = BoxPosition.x;
  233. float y = BoxPosition.y;
  234. float z = BoxPosition.z;
  235.  
  236. SendReply(Attacker.ToPlayer(), lang.GetMessage("SetNewTaxChest", this, Attacker.ToPlayer().UserIDString));
  237.  
  238. TaxChestX = x;
  239. TaxChestY = y;
  240. TaxChestZ = z;
  241.  
  242. SaveTaxContainer();
  243. LoadTaxContainer();
  244.  
  245. Stray.IsSettingTaxChest = false;
  246. }
  247. }
  248. }
  249. }
  250.  
  251. [ChatCommand("settaxchest")]
  252. void SetTaxChestCommand(BasePlayer Player, string Command, string[] Arguments)
  253. {
  254. if (!IsPresident(Player.userID))
  255. {
  256. SendReply(Player, lang.GetMessage("PresidentError", this, Player.UserIDString));
  257. return;
  258. }
  259.  
  260. StrayPlayer Stray = OnlinePlayers[Player];
  261.  
  262. if (Stray.IsSettingTaxChest)
  263. {
  264. Stray.IsSettingTaxChest = false;
  265. SendReply(Player, lang.GetMessage("NotSettingNewTaxChest", this, Player.UserIDString));
  266. }
  267. else
  268. {
  269. Stray.IsSettingTaxChest = true;
  270. SendReply(Player, lang.GetMessage("SettingNewTaxChest", this, Player.UserIDString));
  271. }
  272. }
  273.  
  274. [ChatCommand("info")]
  275. void InfoCommand(BasePlayer Player, string Command, string[] Arguments)
  276. {
  277. string PresidentName = "";
  278.  
  279. if (President > 0)
  280. {
  281. BasePlayer BasePresident = BasePlayer.FindByID(President);
  282.  
  283. if (BasePresident != null)
  284. {
  285. PresidentName = BasePresident.displayName;
  286. }
  287. else
  288. {
  289. BasePlayer SleepingPresident = BasePlayer.FindSleeping(President);
  290.  
  291. if (SleepingPresident != null)
  292. {
  293. PresidentName = SleepingPresident.displayName;
  294. }
  295. else
  296. {
  297. PresidentName = lang.GetMessage("ClaimPresident", this, Player.UserIDString);
  298. President = 0;
  299. }
  300. }
  301. }
  302. else
  303. PresidentName = lang.GetMessage("ClaimPresident", this, Player.UserIDString);
  304.  
  305. SendReply(Player, lang.GetMessage("InfoPresident", this, Player.UserIDString) + ": " + PresidentName);
  306. SendReply(Player, lang.GetMessage("InfoRealmName", this, Player.UserIDString) + ": " + RealmName);
  307. SendReply(Player, lang.GetMessage("InfoTaxLevel", this, Player.UserIDString) + ": " + TaxLevel + "%");
  308. }
  309.  
  310. [ChatCommand("claimpresident")]
  311. void ClaimPresident(BasePlayer Player, string Command, string[] Arguments)
  312. {
  313. if (President < 1)
  314. {
  315. PrintToChat("<color=#008080ff><b>" + Player.displayName + "</b></color> " + lang.GetMessage("IsNowPresident", this));
  316. SetPresident(Player.userID);
  317. }
  318. }
  319.  
  320. [ChatCommand("settax")]
  321. void SetTaxCommand(BasePlayer Player, string Command, string[] Arguments)
  322. {
  323. if (IsPresident(Player.userID))
  324. {
  325. double NewTaxLevel = Convert.ToDouble(MergeParams(Arguments, 0));
  326.  
  327. if (NewTaxLevel > 25.0)
  328. NewTaxLevel = 25.0;
  329.  
  330. if (NewTaxLevel == TaxLevel)
  331. return;
  332.  
  333. if (NewTaxLevel < 1)
  334. NewTaxLevel = 0;
  335.  
  336. SetTaxLevel(NewTaxLevel);
  337.  
  338. PrintToChat(string.Format(lang.GetMessage("UpdateTaxMessage", this), Player.displayName, NewTaxLevel));
  339. }
  340. else
  341. SendReply(Player, lang.GetMessage("PresidentError", this, Player.UserIDString));
  342. }
  343.  
  344. [ChatCommand("realmname")]
  345. void RealmNameCommand(BasePlayer Player, string Command, string[] Arguments)
  346. {
  347. if (IsPresident(Player.userID))
  348. {
  349. string NewName = MergeParams(Arguments, 0);
  350.  
  351. if (!String.IsNullOrEmpty(NewName))
  352. {
  353. SetRealmName(NewName);
  354. }
  355. }
  356. else
  357. SendReply(Player, lang.GetMessage("PresidentError", this, Player.UserIDString));
  358. }
  359.  
  360. [ChatCommand("pm")]
  361. void PrivateMessage(BasePlayer Player, string Command, string[] Arguments)
  362. {
  363. string Name = Arguments[0];
  364. string Message = MergeParams(Arguments, 1);
  365.  
  366. if (IsPlayerOnline(Name))
  367. {
  368. BasePlayer Reciever = GetPlayer(Name);
  369. SendReply(Reciever, "<color=#ffff00ff>" + lang.GetMessage("PrivateFrom", this, Reciever.UserIDString) + " " + Player.displayName + "</color>: " + Message);
  370. SendReply(Player, "<color=#ffff00ff>" + lang.GetMessage("PrivateTo", this, Reciever.UserIDString) + " " + Reciever.displayName + "</color>: " + Message);
  371. }
  372. else
  373. SendReply(Player, Name + lang.GetMessage("PrivateError", this));
  374. }
  375.  
  376. [ChatCommand("players")]
  377. void PlayersCommand(BasePlayer Player, string Command, string[] Arguments)
  378. {
  379. StringBuilder Builder = new StringBuilder();
  380. int PlayerCount = BasePlayer.activePlayerList.Count;
  381. int Cycle = 1;
  382.  
  383. Builder.Append(string.Format(lang.GetMessage("OnlinePlayers", this), PlayerCount) + " ");
  384.  
  385. foreach (BasePlayer iPlayer in BasePlayer.activePlayerList)
  386. {
  387. Builder.Append(iPlayer.displayName);
  388.  
  389. if (Cycle < PlayerCount)
  390. Builder.Append(", ");
  391.  
  392. Cycle++;
  393. }
  394.  
  395. SendReply(Player, Builder.ToString());
  396. }
  397.  
  398. void AddPlayer(BasePlayer Player)
  399. {
  400. GetPlayerFromDatabase(Player);
  401. }
  402.  
  403. void RemovePlayer(BasePlayer Player)
  404. {
  405. OnlinePlayers.Remove(Player);
  406. }
  407.  
  408. StrayPlayer GetStrayPlayer(string Username)
  409. {
  410. return OnlinePlayers[BasePlayer.Find(Username)];
  411. }
  412.  
  413. bool IsPlayerOnline(string Username)
  414. {
  415. if (BasePlayer.Find(Username) != null)
  416. return true;
  417.  
  418. return false;
  419. }
  420.  
  421. BasePlayer GetPlayer(string Username)
  422. {
  423. return BasePlayer.Find(Username);
  424. }
  425.  
  426. string MergeParams(string[] Params, int Start)
  427. {
  428. var Merged = new StringBuilder();
  429. for (int i = Start; i < Params.Length; i++)
  430. {
  431. if (i > Start)
  432. Merged.Append(" ");
  433. Merged.Append(Params[i]);
  434. }
  435.  
  436. return Merged.ToString();
  437. }
  438.  
  439. bool IsPresident(ulong SteamId)
  440. {
  441. if (President == SteamId)
  442. return true;
  443.  
  444. return false;
  445. }
  446.  
  447. void SetPresident(ulong SteamId)
  448. {
  449. President = SteamId;
  450. RealmName = lang.GetMessage("DefaultRealm", this);
  451. TaxLevel = 0.0;
  452.  
  453. string PresidentText = "UPDATE settings SET tax_level = " + TaxLevel + ", realm_name = '" + RealmName + "', president = " + President;
  454.  
  455. MySqlCommand UpdatePresident = new MySqlCommand(PresidentText, Database);
  456. UpdatePresident.ExecuteNonQuery();
  457. UpdatePresident.Dispose();
  458. }
  459.  
  460. void SetTaxLevel(double NewTaxLevel)
  461. {
  462. TaxLevel = NewTaxLevel;
  463.  
  464. string TaxText = "UPDATE settings SET tax_level = " + NewTaxLevel;
  465.  
  466. MySqlCommand UpdateTax = new MySqlCommand(TaxText, Database);
  467. UpdateTax.ExecuteNonQuery();
  468. UpdateTax.Dispose();
  469. }
  470.  
  471. void SetRealmName(string NewName)
  472. {
  473. if (NewName.Length > 36)
  474. NewName = NewName.Substring(0, 36);
  475.  
  476. RealmName = NewName;
  477. PrintToChat(string.Format(lang.GetMessage("RealmRenamed", this), NewName));
  478.  
  479. string RealmText = "UPDATE settings SET realm_name = '" + RealmName + "'";
  480.  
  481. MySqlCommand RealmCommand = new MySqlCommand(RealmText, Database);
  482. RealmCommand.ExecuteNonQuery();
  483. RealmCommand.Dispose();
  484. }
  485.  
  486. void GetPlayerFromDatabase(BasePlayer Player)
  487. {
  488. StrayPlayer IPlayer = null;
  489.  
  490. string CommandText = "SELECT id FROM players WHERE steam_id = " + Player.userID;
  491. MySqlCommand Command = new MySqlCommand(CommandText, Database);
  492. bool Exists = Command.ExecuteScalar() != null ? true : false;
  493. Command.Dispose();
  494.  
  495. if (!Exists)
  496. {
  497. string InsertText = "INSERT INTO players (steam_id) VALUES ('" + Player.userID + "')";
  498. MySqlCommand InsertCommand = new MySqlCommand(InsertText, Database);
  499. InsertCommand.ExecuteNonQuery();
  500. InsertCommand.Dispose();
  501. }
  502.  
  503. string InfoText = "SELECT * FROM players WHERE steam_id = " + Player.userID;
  504. MySqlCommand InfoCommand = new MySqlCommand(InfoText, Database);
  505. MySqlDataReader InfoReader = InfoCommand.ExecuteReader();
  506.  
  507. while (InfoReader.Read())
  508. {
  509. IPlayer = new StrayPlayer(Player.userID);
  510. }
  511.  
  512. InfoReader.Dispose();
  513. InfoCommand.Dispose();
  514.  
  515. OnlinePlayers.Add(Player, IPlayer);
  516. }
  517.  
  518. void LoadTaxContainer()
  519. {
  520. foreach (StorageContainer Cont in StorageContainer.FindObjectsOfType<StorageContainer>())
  521. {
  522. Vector3 ContPosition = Cont.transform.position;
  523. if (ContPosition.x == TaxChestX && ContPosition.y == TaxChestY && ContPosition.z == TaxChestZ)
  524. {
  525. Puts("Tax Container instance found: " + Cont.GetEntity().GetInstanceID());
  526. TaxContainer = Cont;
  527. }
  528. }
  529. }
  530.  
  531. void SaveTaxContainer()
  532. {
  533. string TaxCommandText = "UPDATE settings SET tax_chest = '" + TaxChestX + ";" + TaxChestY + ";" + TaxChestZ + "'";
  534. MySqlCommand TaxCommand = new MySqlCommand(TaxCommandText, Database);
  535. TaxCommand.ExecuteNonQuery();
  536. TaxCommand.Dispose();
  537. }
  538.  
  539. private void CreateConfigEntry(string Key, string SubKey, string Value)
  540. {
  541. if (Config[Key, SubKey] != null)
  542. return;
  543.  
  544. Config[Key, SubKey] = Value;
  545. }
  546.  
  547. private void LoadServerMessages()
  548. {
  549. ServerMessages = new Dictionary<string, string>();
  550.  
  551. ServerMessages.Add("StartingInformation", "<color=yellow>Welcome to {0}</color>. If you are new, we run a custom plugin where you can become the server President, tax players, and control the economy. Type /info for more information.");
  552. ServerMessages.Add("PlayerConnected", "sehirdencikti");
  553. ServerMessages.Add("PlayerDisconnected", "sehirden cikti");
  554. ServerMessages.Add("PresidentDied", "<color=#ff0000ff>Kral Oldu!</color>");
  555. ServerMessages.Add("PresidentMurdered", "<color=#ff0000ff>Kralı olduren {0}, yeni kral secildi.</color>");
  556. ServerMessages.Add("RealmRenamed", "Sehrin yeni adi: <color=#008080ff>{0}</color>");
  557. ServerMessages.Add("DefaultRealm", "The land of the Free");
  558. ServerMessages.Add("OnlinePlayers", "Aktif Oyuncular ({0}):");
  559. ServerMessages.Add("PrivateError", "is either offline or you typed the name wrong.");
  560. ServerMessages.Add("PrivateFrom", "PM from");
  561. ServerMessages.Add("PrivateTo", "PM sent to");
  562. ServerMessages.Add("PresidentError", "Kral olmadan bunu yapamazsin");
  563. ServerMessages.Add("SettingNewTaxChest", "Vergi Sandigini ayarlamak için eline bir meşale al ve sandiga vur.");
  564. ServerMessages.Add("NotSettingNewTaxChest", "Vergi Sandigi ayarı kapatildi.");
  565. ServerMessages.Add("SetNewTaxChest", "Vergi sandigi ayarlandi");
  566. ServerMessages.Add("ClaimPresident", "Kimse kral degil! /claimpresident yazarak kral ol");
  567. ServerMessages.Add("IsNowPresident", "is now the President!");
  568. ServerMessages.Add("InfoPresident", "President");
  569. ServerMessages.Add("InfoRealmName", "Realm Name");
  570. ServerMessages.Add("InfoTaxLevel", "Tax level");
  571. ServerMessages.Add("UpdateTaxMessage", "President {0} has set Tax to {1}%");
  572.  
  573. lang.RegisterMessages(ServerMessages, this);
  574. }
  575. }
  576. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement