Advertisement
Guest User

Untitled

a guest
Oct 19th, 2013
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.00 KB | None | 0 0
  1. using System;
  2. using System.ComponentModel;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections.Generic;
  6. using System.Reflection;
  7. using System.IO;
  8. using System.Threading;
  9. using Terraria;
  10. using TerrariaApi.Server;
  11. using TShockAPI;
  12. using TShockAPI.DB;
  13.  
  14. namespace PluginTemplate
  15. {
  16. [ApiVersion(1, 14)]
  17. public class WarpplatePlugin : TerrariaPlugin
  18. {
  19. public static List<Player> Players = new List<Player>();
  20. public static WarpplateManager Warpplates;
  21.  
  22. public override string Name
  23. {
  24. get { return "Warpplate"; }
  25. }
  26. public override string Author
  27. {
  28. get { return "Created by DarkunderdoG, modified by 2.0"; }
  29. }
  30. public override string Description
  31. {
  32. get { return "Warpplate"; }
  33. }
  34. public override Version Version
  35. {
  36. get { return Assembly.GetExecutingAssembly().GetName().Version; }
  37. }
  38.  
  39. public override void Initialize()
  40. {
  41.  
  42. Warpplates = new WarpplateManager(TShock.DB);
  43. var Hook = ServerApi.Hooks;
  44.  
  45. Hook.GamePostInitialize.Register(this, (args) => { OnPostInit(); });
  46. Hook.GameInitialize.Register(this, (args) => { OnInitialize(); });
  47. Hook.GameUpdate.Register(this, (args) => { OnUpdate(); });
  48. Hook.NetGreetPlayer.Register(this, OnGreetPlayer);
  49. Hook.ServerLeave.Register(this, OnLeave);
  50.  
  51. }
  52.  
  53. protected override void Dispose(bool disposing)
  54. {
  55. if (disposing)
  56. {
  57. var Hook = ServerApi.Hooks;
  58.  
  59. Hook.GamePostInitialize.Deregister(this, (args) => { OnPostInit(); });
  60. Hook.GameInitialize.Deregister(this, (args) => { OnInitialize(); });
  61. Hook.GameUpdate.Deregister(this, (args) => { OnUpdate(); });
  62. Hook.NetGreetPlayer.Deregister(this, OnGreetPlayer);
  63. Hook.ServerLeave.Deregister(this, OnLeave);
  64. }
  65.  
  66. base.Dispose(disposing);
  67. }
  68.  
  69. private void OnPostInit()
  70. {
  71. Warpplates.ReloadAllWarpplates();
  72. }
  73.  
  74. public WarpplatePlugin(Main game)
  75. : base(game)
  76. {
  77. Order = 1;
  78. }
  79.  
  80. public void OnInitialize()
  81. {
  82. Commands.ChatCommands.Add(new Command("setwarpplate", setwarpplate, "swp"));
  83. Commands.ChatCommands.Add(new Command("setwarpplate", delwarpplate, "dwp"));
  84. Commands.ChatCommands.Add(new Command("setwarpplate", warpplatedest, "swpd"));
  85. Commands.ChatCommands.Add(new Command("setwarpplate", removeplatedest, "rwpd"));
  86. Commands.ChatCommands.Add(new Command("setwarpplate", wpi, "wpi"));
  87. Commands.ChatCommands.Add(new Command("setwarpplate", warpallow, "wpallow"));
  88. Commands.ChatCommands.Add(new Command("setwarpplate", reloadwarp, "reloadwarp"));
  89. Commands.ChatCommands.Add(new Command("setwarpplate", setwarpplatedelay, "swpdl"));
  90. Commands.ChatCommands.Add(new Command("setwarpplate", setwarpplatewidth, "swpw"));
  91. Commands.ChatCommands.Add(new Command("setwarpplate", setwarpplateheight, "swph"));
  92. Commands.ChatCommands.Add(new Command("setwarpplate", setwarpplatesize, "swps"));
  93. Commands.ChatCommands.Add(new Command("setwarpplate", setwarpplatelabel, "swpl"));
  94. }
  95.  
  96. public void OnGreetPlayer(GreetPlayerEventArgs args)
  97. {
  98. lock (Players)
  99. Players.Add(new Player(args.Who));
  100. }
  101.  
  102. public class Player
  103. {
  104. public int Index { get; set; }
  105. public TSPlayer TSPlayer { get { return TShock.Players[Index]; } }
  106. public int warpplatetime { get; set; }
  107. public bool warpplateuse { get; set; }
  108. public bool warped { get; set; }
  109. public int warpcooldown { get; set; }
  110. public Player(int index)
  111. {
  112. Index = index;
  113. warpplatetime = 0;
  114. warpplateuse = true;
  115. warped = false;
  116. warpcooldown = 0;
  117. }
  118. }
  119.  
  120. private DateTime LastCheck = DateTime.UtcNow;
  121.  
  122. private void OnUpdate()
  123. {
  124. if ((DateTime.UtcNow - LastCheck).TotalSeconds >= 1)
  125. {
  126. LastCheck = DateTime.UtcNow;
  127. lock (Players)
  128. foreach (Player player in Players)
  129. {
  130. if (player != null && player.TSPlayer != null)
  131. {
  132. if (player.TSPlayer.Group.HasPermission("warpplate") && player.warpplateuse)
  133. {
  134. if (player.warpcooldown != 0)
  135. {
  136. player.warpcooldown--;
  137. continue;
  138. }
  139. string region = Warpplates.InAreaWarpplateName(player.TSPlayer.TileX, player.TSPlayer.TileY);
  140. if (region == null || region == "")
  141. {
  142. player.warpplatetime = 0;
  143. player.warped = false;
  144. }
  145. else
  146. {
  147. if (player.warped)
  148. continue;
  149. var warpplateinfo = Warpplates.FindWarpplate(region);
  150. var warp = Warpplates.FindWarpplate(warpplateinfo.WarpDest);
  151. if (warp != null)
  152. {
  153. player.warpplatetime++;
  154. if ((warpplateinfo.Delay - player.warpplatetime) > 0)
  155. player.TSPlayer.SendMessage("You Will Be Warped To " + Warpplates.GetLabel(warpplateinfo.WarpDest) + " in " + (warpplateinfo.Delay - player.warpplatetime) + " Seconds");
  156. else
  157. {
  158. if (player.TSPlayer.Teleport((int)(warp.WarpplatePos.X * 16)+32, (int)(warp.WarpplatePos.Y * 16) + 0))
  159. player.TSPlayer.SendMessage("You Have Been Warped To " + Warpplates.GetLabel(warpplateinfo.WarpDest) + " via a Warpplate");
  160. player.warpplatetime = 0;
  161. player.warped = true;
  162. player.warpcooldown = 3;
  163. }
  164. }
  165. }
  166. }
  167. }
  168. }
  169. }
  170. }
  171.  
  172. private void OnLeave(LeaveEventArgs args)
  173. {
  174. lock (Players)
  175. {
  176. Players.RemoveAll(p => p.Index == args.Who);
  177. }
  178. }
  179.  
  180. private static int GetPlayerIndex(int ply)
  181. {
  182. lock (Players)
  183. {
  184. int index = -1;
  185. for (int i = 0; i < Players.Count; i++)
  186. {
  187. if (Players[i].Index == ply)
  188. index = i;
  189. }
  190. return index;
  191. }
  192. }
  193.  
  194. private static void setwarpplatedelay(CommandArgs args)
  195. {
  196. string region = "";
  197. if (args.Parameters.Count == 2)
  198. region = args.Parameters[0];
  199. else if (args.Parameters.Count == 1)
  200. region = Warpplates.InAreaWarpplateName(args.Player.TileX, args.Player.TileY);
  201. else {
  202. args.Player.SendMessage("Invalid syntax! Proper syntax: /swpd [<warpplate name>] <delay in seconds>", Color.Red);
  203. args.Player.SendMessage("Set 0 for immediate warp", Color.Red);
  204. return;
  205. }
  206. Warpplate wp = Warpplates.FindWarpplate(region);
  207. if (wp == null)
  208. {
  209. args.Player.SendMessage("No such warpplate", Color.Red);
  210. return;
  211. }
  212. int Delay;
  213. if (Int32.TryParse(args.Parameters[args.Parameters.Count - 1], out Delay))
  214. {
  215. wp.Delay = Delay + 1;
  216. if (Warpplates.UpdateWarpplate(wp.Name))
  217. args.Player.SendMessage(String.Format("Set delay of {0} to {1} seconds", wp.Name, Delay), Color.Green);
  218. else
  219. args.Player.SendMessage("Something went wrong", Color.Red);
  220. }
  221. else
  222. args.Player.SendMessage("Bad number specified", Color.Red);
  223. }
  224.  
  225. private static void setwarpplatewidth(CommandArgs args)
  226. {
  227. string region = "";
  228. if (args.Parameters.Count == 2)
  229. region = args.Parameters[0];
  230. else if (args.Parameters.Count == 1)
  231. region = Warpplates.InAreaWarpplateName(args.Player.TileX, args.Player.TileY);
  232. else
  233. {
  234. args.Player.SendMessage("Invalid syntax! Proper syntax: /swpw [<warpplate name>] <width in blocks>", Color.Red);
  235. return;
  236. }
  237. Warpplate wp = Warpplates.FindWarpplate(region);
  238. if (wp == null)
  239. {
  240. args.Player.SendMessage("No such warpplate", Color.Red);
  241. return;
  242. }
  243. int Width;
  244. if (Int32.TryParse(args.Parameters[args.Parameters.Count - 1], out Width))
  245. {
  246. Rectangle r;
  247. r = wp.Area;
  248. r.Width = Width;
  249. wp.Area = r;
  250. if (Warpplates.UpdateWarpplate(wp.Name))
  251. args.Player.SendMessage(String.Format("Set width of {0} to {1} blocks", wp.Name, Width), Color.Green);
  252. else
  253. args.Player.SendMessage("Something went wrong", Color.Red);
  254. }
  255. else
  256. args.Player.SendMessage("Bad number specified", Color.Red);
  257. }
  258.  
  259. private static void setwarpplatelabel(CommandArgs args)
  260. {
  261. string region = "";
  262. if (args.Parameters.Count == 2)
  263. region = args.Parameters[0];
  264. else if (args.Parameters.Count == 1)
  265. region = Warpplates.InAreaWarpplateName(args.Player.TileX, args.Player.TileY);
  266. else
  267. {
  268. args.Player.SendMessage("Invalid syntax! Proper syntax: /swpl [<warpplate name>] <label>", Color.Red);
  269. args.Player.SendMessage("Type /swpl [<warpplate name>] \"\" to set label to default (warpplate name)", Color.Red);
  270. return;
  271. }
  272. Warpplate wp = Warpplates.FindWarpplate(region);
  273. if (wp == null)
  274. {
  275. args.Player.SendMessage("No such warpplate", Color.Red);
  276. return;
  277. }
  278. string label = args.Parameters[args.Parameters.Count - 1];
  279. wp.Label = label;
  280. if (Warpplates.UpdateWarpplate(wp.Name))
  281. args.Player.SendMessage(String.Format("Set label of {0} to {1}", wp.Name, D(wp)), Color.Green);
  282. else
  283. args.Player.SendMessage("Something went wrong", Color.Red);
  284. }
  285.  
  286. private static void setwarpplateheight(CommandArgs args)
  287. {
  288. string region = "";
  289. if (args.Parameters.Count == 2)
  290. region = args.Parameters[0];
  291. else if (args.Parameters.Count == 1)
  292. region = Warpplates.InAreaWarpplateName(args.Player.TileX, args.Player.TileY);
  293. else
  294. {
  295. args.Player.SendMessage("Invalid syntax! Proper syntax: /swph [<warpplate name>] <height in blocks>", Color.Red);
  296. return;
  297. }
  298. Warpplate wp = Warpplates.FindWarpplate(region);
  299. if (wp == null)
  300. {
  301. args.Player.SendMessage("No such warpplate", Color.Red);
  302. return;
  303. }
  304. int Height;
  305. if (Int32.TryParse(args.Parameters[args.Parameters.Count - 1], out Height))
  306. {
  307. Rectangle r;
  308. r = wp.Area;
  309. r.Height = Height;
  310. wp.Area = r;
  311. Warpplates.UpdateWarpplate(wp.Name);
  312. if (Warpplates.UpdateWarpplate(wp.Name))
  313. args.Player.SendMessage(String.Format("Set height of {0} to {1} blocks", wp.Name, Height), Color.Green);
  314. else
  315. args.Player.SendMessage("Something went wrong", Color.Red);
  316. }
  317. else
  318. args.Player.SendMessage("Bad number specified", Color.Red);
  319. }
  320.  
  321. private static void setwarpplatesize(CommandArgs args)
  322. {
  323. string region = "";
  324. if (args.Parameters.Count == 3)
  325. region = args.Parameters[0];
  326. else if (args.Parameters.Count == 2)
  327. region = Warpplates.InAreaWarpplateName(args.Player.TileX, args.Player.TileY);
  328. else
  329. {
  330. args.Player.SendMessage("Invalid syntax! Proper syntax: /swps [<warpplate name>] <width> <height>", Color.Red);
  331. return;
  332. }
  333. Warpplate wp = Warpplates.FindWarpplate(region);
  334. if (wp == null)
  335. {
  336. args.Player.SendMessage("No such warpplate", Color.Red);
  337. return;
  338. }
  339. int Width, Height;
  340. if (Int32.TryParse(args.Parameters[args.Parameters.Count - 2], out Width) &&
  341. Int32.TryParse(args.Parameters[args.Parameters.Count - 1], out Height))
  342. {
  343. Rectangle r;
  344. r = wp.Area;
  345. r.Width = Width;
  346. r.Height = Height;
  347. wp.Area = r;
  348. Warpplates.UpdateWarpplate(wp.Name);
  349. if (Warpplates.UpdateWarpplate(wp.Name))
  350. args.Player.SendMessage(String.Format("Set size of {0} to {1}x{2}", wp.Name, Width, Height), Color.Green);
  351. else
  352. args.Player.SendMessage("Something went wrong", Color.Red);
  353. }
  354. else
  355. args.Player.SendMessage("Bad number specified", Color.Red);
  356. }
  357.  
  358. private static void setwarpplate(CommandArgs args)
  359. {
  360. if (args.Parameters.Count < 1)
  361. {
  362. args.Player.SendMessage("Invalid syntax! Proper syntax: /swp <warpplate name>", Color.Red);
  363. return;
  364. }
  365. if (Warpplates.InAreaWarpplateName(args.Player.TileX, args.Player.TileY) != null)
  366. {
  367. args.Player.SendMessage("There Is Already A Warpplate Located Here. Find A New Place", Color.Red);
  368. return;
  369. }
  370. string regionName = String.Join(" ", args.Parameters);
  371. var x = ((((int)args.Player.X) / 16) - 1);
  372. var y = (((int)args.Player.Y) / 16);
  373. var width = 2;
  374. var height = 3;
  375. if (Warpplates.AddWarpplate(x, y, width, height, regionName, "", Main.worldID.ToString()))
  376. {
  377. args.Player.SendMessage("Warpplate Created: " + regionName, Color.Yellow);
  378. //args.Player.SendMessage("Now Set The Warpplate Destination By Using /swpd", Color.Yellow);
  379. Warpplates.ReloadAllWarpplates();
  380. }
  381. else
  382. {
  383. args.Player.SendMessage("Warpplate Already Created: " + regionName + " already exists", Color.Red);
  384. }
  385. }
  386.  
  387. private static void delwarpplate(CommandArgs args)
  388. {
  389. if (args.Parameters.Count < 1)
  390. {
  391. args.Player.SendMessage("Invalid syntax! Proper syntax: /dwp <warpplate name>", Color.Red);
  392. return;
  393. }
  394. string regionName = String.Join(" ", args.Parameters);
  395. if (Warpplates.DeleteWarpplate(regionName))
  396. {
  397. args.Player.SendMessage("Deleted Warpplate: " + regionName, Color.Yellow);
  398. Warpplates.ReloadAllWarpplates();
  399. }
  400. else
  401. args.Player.SendMessage("Could not find specified Warpplate", Color.Red);
  402. }
  403.  
  404. private static void warpplatedest(CommandArgs args)
  405. {
  406. if (args.Parameters.Count < 2)
  407. {
  408. args.Player.SendMessage("Invalid syntax! Proper syntax: /swpd <Warpplate Name> <Name Of Destination Warpplate>", Color.Red);
  409. return;
  410. }
  411. if (Warpplates.adddestination(args.Parameters[0], args.Parameters[1]))
  412. {
  413. args.Player.SendMessage("Destination " + args.Parameters[1] + " Added To Warpplate " + args.Parameters[0], Color.Yellow);
  414. Warpplates.ReloadAllWarpplates();
  415. }
  416. else
  417. args.Player.SendMessage("Could not find specified Warpplate or destination", Color.Red);
  418. }
  419.  
  420. private static void removeplatedest(CommandArgs args)
  421. {
  422. if (args.Parameters.Count < 1)
  423. {
  424. args.Player.SendMessage("Invalid syntax! Proper syntax: /rwpd <Warpplate Name>", Color.Red);
  425. return;
  426. }
  427. if (Warpplates.removedestination(args.Parameters[0]))
  428. {
  429. args.Player.SendMessage("Removed Destination From Warpplate " + args.Parameters[0], Color.Yellow);
  430. Warpplates.ReloadAllWarpplates();
  431. }
  432. else
  433. args.Player.SendMessage("Could not find specified Warpplate or destination", Color.Red);
  434. }
  435.  
  436. private static string S(string s)
  437. {
  438. return String.IsNullOrEmpty(s) ? "(none)" : s;
  439. }
  440.  
  441. private static string D(Warpplate wp)
  442. {
  443. return String.IsNullOrEmpty(wp.Label) ? wp.Name + " (default)" : wp.Label;
  444. }
  445.  
  446. private static void wpi(CommandArgs args)
  447. {
  448. string region = "";
  449. if (args.Parameters.Count > 0)
  450. region = String.Join(" ", args.Parameters);
  451. else
  452. region = Warpplates.InAreaWarpplateName(args.Player.TileX, args.Player.TileY);
  453. var warpplateinfo = Warpplates.FindWarpplate(region);
  454. if (warpplateinfo == null)
  455. args.Player.SendMessage("No Such Warpplate", Color.Red);
  456. else
  457. {
  458. args.Player.SendMessage("Name: " + warpplateinfo.Name + "; Label: " + D(warpplateinfo)
  459. + "Destination: " + S(warpplateinfo.WarpDest) + ";", Color.HotPink);
  460. args.Player.SendMessage("X: " + warpplateinfo.WarpplatePos.X + "; Y: " + warpplateinfo.WarpplatePos.Y +
  461. "; W: " + warpplateinfo.Area.Width + "; H: " + warpplateinfo.Area.Height + "; Delay: " + (warpplateinfo.Delay - 1), Color.HotPink);
  462. }
  463. }
  464.  
  465. private static void reloadwarp(CommandArgs args)
  466. {
  467. Warpplates.ReloadAllWarpplates();
  468. }
  469.  
  470. private static void warpallow(CommandArgs args)
  471. {
  472. if (!Players[GetPlayerIndex(args.Player.Index)].warpplateuse)
  473. args.Player.SendMessage("Warpplates Are Now Turned On For You");
  474. if (Players[GetPlayerIndex(args.Player.Index)].warpplateuse)
  475. args.Player.SendMessage("Warpplates Are Now Turned Off For You");
  476. Players[GetPlayerIndex(args.Player.Index)].warpplateuse = !Players[GetPlayerIndex(args.Player.Index)].warpplateuse;
  477. }
  478.  
  479. }
  480. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement