PageRenderTime 47ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/MCQuai/Commands/Mod/CmdReview.cs

https://bitbucket.org/realquaisaq/mcrevive
C# | 194 lines | 181 code | 13 blank | 0 comment | 58 complexity | 79dc3082910f6f87d430eb103acf5609 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace MCRevive
  6. {
  7. public class CmdReview : Command
  8. {
  9. public override string name { get { return "review"; } }
  10. public override string shortcut { get { return ""; } }
  11. public override string type { get { return "mod"; } }
  12. public override int defaultRank { get { return LevelPermission.Guest; } }
  13. public CmdReview() { }
  14. public override void Use(Player p, string message)
  15. {
  16. if (message != "" && p.group.Permission < LevelPermission.Operator) { Help(p); return; }
  17. else if (message != "") message = " " + message;
  18. if (message.Split(' ').Length == 2)
  19. {
  20. message = message.Remove(0, 1);
  21. Player who = Player.FindExact(message);
  22. string reviews = System.IO.File.ReadAllText("memory/reviews.txt");
  23. int i = 0;
  24. for (; i < Server.reviews.Count; i++)
  25. {
  26. try
  27. {
  28. if (Server.reviews.ToArray()[i].Split('&')[0].ToLower() == message.ToLower())
  29. break;
  30. }
  31. catch { break; }
  32. }
  33. if (reviews.Contains('&') && Server.reviews.ToArray()[i].Split('&')[0].ToLower() == message.ToLower())
  34. {
  35. foreach (string review in reviews.Split('&'))
  36. {
  37. if (review.Split(' ')[0].ToLower() == message.ToLower())
  38. {
  39. Level level = Level.FindExact(review.Split(' ')[1]);
  40. ushort x = ushort.Parse(review.Split(' ')[2].Split(',')[0]);
  41. ushort y = ushort.Parse(review.Split(' ')[2].Split(',')[1]);
  42. ushort z = ushort.Parse(review.Split(' ')[2].Split(',')[2]);
  43. bool done = false;
  44. if (level == null)
  45. {
  46. Command.all.Find("load").Use(p, review.Split(' ')[1]);
  47. level = Level.FindExact(review.Split(' ')[1]);
  48. if (level == null) return;
  49. }
  50. if (level.GetTile(x, y, z) == Block.air && (level.GetTile(x, (ushort)(y + 1), z) == Block.air || level.GetTile(x, (ushort)(y - 1), z) == Block.air))
  51. {
  52. if (p.level.name != level.name)
  53. Command.all.Find("goto").Use(p, level.name);
  54. while (p.Loading) { }
  55. Command.all.Find("move").Use(p, x + " " + y + " " + z);
  56. done = true;
  57. }
  58. else
  59. {
  60. for (byte xx = 0; xx < 16; xx++)
  61. {
  62. if (done) break;
  63. for (byte yy = 0; yy < 4; yy++)
  64. {
  65. for (byte zz = 0; zz < 16; zz++)
  66. {
  67. if (level.GetTile((ushort)(xx + x - 8), (ushort)(yy + y), (ushort)(zz + z - 8)) == Block.air)
  68. {
  69. if (level.GetTile((ushort)(xx + x - 8), (ushort)(yy + y + 1), (ushort)(zz + z - 8)) == Block.air ||
  70. level.GetTile((ushort)(xx + x - 8), (ushort)(yy + y - 1), (ushort)(zz + z - 8)) == Block.air)
  71. {
  72. if (p.level.name != level.name)
  73. Command.all.Find("goto").Use(p, level.name);
  74. while (p.Loading) { }
  75. Command.all.Find("move").Use(p, (xx + x - 8) + " " + (yy + y) + " " + (z + zz - 8));
  76. done = true;
  77. }
  78. }
  79. if (done)
  80. break;
  81. }
  82. if (done)
  83. break;
  84. }
  85. }
  86. }
  87. if (!done)
  88. {
  89. Player.SendMessage(p, "There was not found any positions where you could stand.");
  90. Player.SendMessage(p, "Its possible this was a scam.");
  91. }
  92. }
  93. }
  94. }
  95. else
  96. {
  97. Player.SendMessage(p, "That player has requested no reviews");
  98. return;
  99. }
  100. System.IO.File.WriteAllText("memory/reviews.txt", reviews.Remove(reviews.IndexOf(message.ToLower()),
  101. reviews.Substring(reviews.IndexOf(message.ToLower())).IndexOf('&') + 1));
  102. reviews = System.IO.File.ReadAllText("memory/reviews.txt");
  103. for (int ii = 0; ii < Server.reviews.Count; ii++)
  104. {
  105. if (DateTime.Parse(Server.reviews[ii].Split('&')[1]).AddDays(2) < DateTime.Now)
  106. {
  107. System.IO.File.WriteAllText("memory/reviews.txt", reviews.Remove(reviews.IndexOf(Server.reviews[ii].Split('&')[0].ToLower()),
  108. reviews.Substring(reviews.IndexOf(Server.reviews[ii].Split('&')[0].ToLower())).IndexOf('&') + 1));
  109. Server.reviews.RemoveAt(ii);
  110. }
  111. if (Server.reviews[ii].Split('&')[0].ToLower() == message.ToLower()) Server.reviews.RemoveAt(ii);
  112. }
  113. try { who.needsReview = false; }
  114. catch { }
  115. if (Server.reviews.Count > 0)
  116. {
  117. Player.SendMessage(p, Group.findPlayerGroup(Server.reviews[0].Split('&')[0]).color + Server.reviews[0].Split('&')[0]
  118. + Server.DefaultColor + " wants an op to review their creation.");
  119. Player.SendMessage(p, "Use \"/review " + Server.reviews[0].Split('&')[0] + "\" to go there.");
  120. }
  121. }
  122. else
  123. {
  124. if (!p.needsReview)
  125. {
  126. int i = 0;
  127. foreach (Player all in Player.players)
  128. if (all.group.Permission >= LevelPermission.Operator && !Server.afkset.Contains(all.name)) i++;
  129. p.needsReview = true;
  130. if (i > 0)
  131. {
  132. Player.SendMessage(p, "Your request has been sent to operators, They should be on their way.");
  133. Player.GlobalMessageOps(p.color + p.name + Server.DefaultColor + " requests a review of their creation.");
  134. }
  135. else
  136. {
  137. Player.SendMessage(p, "Unforginently there is no operators online right now.");
  138. Player.SendMessage(p, "Forginently your name has been added to a list of things");
  139. Player.SendMessage(p, "that should be reviewed, and that is why we need you to select");
  140. Player.SendMessage(p, "a block right beside your creation, so we know which one it is");
  141. Player.SendMessage(p, "&aPlace a block to show what creation is yours.");
  142. p.ClearBlockchange();
  143. p.Blockchange += new Player.BlockchangeEventHandler(Blockchange);
  144. }
  145. }
  146. else
  147. Player.SendMessage(p, "You already have 1 request waiting, wait for that one to be answered!");
  148. }
  149. }
  150. public override void Help(Player p)
  151. {
  152. Player.SendMessage(p, "/review - Sends a request to Op's to come and view your building");
  153. try
  154. {
  155. if (p == null || p.group.Permission >= LevelPermission.Operator)
  156. {
  157. Player.SendMessage(p, "/review <fullname> - teleports you to the creation that <fullname> has made");
  158. }
  159. }
  160. catch { }
  161. }
  162. public override string[] Example(Player p)
  163. {
  164. return new string[]
  165. {
  166. ""
  167. };
  168. }
  169. public void Blockchange(Player p, ushort x, ushort y, ushort z, ushort type, byte action)
  170. {
  171. p.ClearBlockchange();
  172. ushort b = p.level.GetTile(x, y, z);
  173. if (b == Block.Zero) { Player.SendMessage(p, "Invalid Block(" + x + "," + y + "," + z + ")!"); return; }
  174. p.SendBlockchange(x, y, z, b);
  175. System.IO.File.AppendAllText("memory/reviews.txt", p.name.ToLower() + " " + p.level.name.ToLower() + " " + x + "," + y + "," + z + " "
  176. + DateTime.Now.ToString().Replace(' ', '@') + "&");
  177. Server.reviews.Add(p.name + "&" + DateTime.Now);
  178. Player.SendMessage(p, "Thank you");
  179. }
  180. }
  181. }