Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.90 KB | None | 0 0
  1. package server.game.content.lottery;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.text.NumberFormat;
  7. import java.util.HashMap;
  8.  
  9. import server.event.CycleEvent;
  10. import server.event.CycleEventContainer;
  11. import server.event.CycleEventHandler;
  12. import server.game.entity.players.Client;
  13. import server.game.entity.players.Player;
  14. import server.game.entity.players.PlayerHandler;
  15. import server.util.Misc;
  16.  
  17. /**
  18. * The main class that processes lottery actions
  19. * @author Karma
  20. *
  21. */
  22. public class Lottery extends LotteryConfig {
  23.  
  24. /**
  25. * A map containing lottery numbers and their owners
  26. */
  27. public static HashMap<Integer, String> ticketEntrance = new HashMap<Integer, String>();
  28.  
  29. /**
  30. * Processes a lottery number
  31. * @param client
  32. * the player buying a lottery number
  33. * @param number
  34. * the lottery number
  35. */
  36. public static void enterLottery(final Client client, int number) {
  37. if (PlayerHandler.updateRunning) {
  38. client.sendMessage("You can't buy a lottery number during an update.");
  39. return;
  40. }
  41. if (canStart) {
  42. client.sendMessage("You can't enter the lottery while numbers are being drawn.");
  43. return;
  44. }
  45. if (!client.getItems().playerHasItem(995, TICKET_COST)) {
  46. client.sendMessage("You need to have "+TICKET_COST+"gp to buy a lottery number.");
  47. return;
  48. }
  49. if (ticketEntrance.containsValue(client.playerName.toLowerCase())) {
  50. client.sendMessage("You've already entered this lottery draw.");
  51. return;
  52. }
  53. if (ticketEntrance.containsKey(number)) {
  54. client.sendMessage("Someone's already bought this number, choose another.");
  55. return;
  56. }
  57. if (number > LOTTERY_DRAW_MAX) {
  58. client.sendMessage("Your ticket number must be from 0 to 50.");
  59. return;
  60. }
  61. if (client.getItems().playerHasItem(995, TICKET_COST)) {
  62. client.getItems().deleteItem2(995, TICKET_COST);
  63. pot += (TICKET_COST - TICKET_TAX);
  64. ticketEntrance.put(number, client.playerName.toLowerCase());
  65. LotteryIO.saveNumber(number, client.playerName.toLowerCase());
  66. LotteryIO.saveConfig();
  67. ticketsBought ++;
  68. client.sendMessage("You've entered the lottery and bought the number: "+number+".");
  69. Client.sendGlobalMessage("[Lottery] "+Misc.ucFirst(client.playerName)+" has entered the lottery!");
  70. if (!announcing && pot > 9000000) {
  71. announcing = true;
  72. }
  73. if (announcing) {
  74. announceLottery();
  75. }
  76. if (pot > START_DRAW_RANGE && !canStart) {
  77. CycleEventHandler.getSingleton().addEvent(null, new CycleEvent() {
  78.  
  79. @Override
  80. public void execute(CycleEventContainer container) {
  81. Client.sendGlobalMessage("[Lottery] Lottery Drawing will now commence!");
  82. canStart = true;
  83. container.stop();
  84. }
  85.  
  86. @Override
  87. public void stop() {
  88. startDraw();
  89. }
  90.  
  91. }, 5);
  92. }
  93. }
  94. }
  95.  
  96. /**
  97. * Starts the announcing of a lottery jackpot
  98. */
  99. public static void announceLottery() {
  100. CycleEventHandler.getSingleton().addEvent(null, new CycleEvent() {
  101.  
  102. @Override
  103. public void execute(CycleEventContainer container) {
  104. if (canStart || !announcing) {
  105. container.stop();
  106. return;
  107. }
  108. Client.sendGlobalMessage("[Lottery] The Lottery JackPot is currently at "+NumberFormat.getInstance().format(pot)+"gp!");
  109. }
  110.  
  111. @Override
  112. public void stop() {
  113. // TODO Auto-generated method stub
  114.  
  115. }
  116.  
  117. }, 500);
  118. }
  119.  
  120. /**
  121. * Starts the drawing of a lottery number and rewards the winner
  122. */
  123. public static void startDraw() {
  124. CycleEventHandler.getSingleton().addEvent(null, new CycleEvent() {
  125.  
  126. @Override
  127. public void execute(CycleEventContainer container) {
  128. if (canStart) {
  129. lotteryRolled = (int) (Math.random() * (LOTTERY_DRAW_MAX + ticketsBought));
  130. try {
  131. BufferedReader reader = new BufferedReader(new FileReader(LotteryIO.LOTTERY_NUMBERS));
  132. String line = null;
  133. try {
  134. while ((line = reader.readLine()) != null) {
  135. String[] valuesArray = line.split("\t");
  136. int number = Integer.parseInt(valuesArray[0]);
  137. if (!ticketEntrance.containsKey(lotteryRolled)) {
  138. Client.sendGlobalMessage("[Lottery] No lucky winners won the Lottery JackPot.");
  139. Client.sendGlobalMessage("[Lottery] BETTER LUCK NEXT TIME!");
  140. container.stop();
  141. return;
  142. }
  143.  
  144. if (number == lotteryRolled) {
  145. String name = valuesArray[1];
  146. checkWinner(name, pot);
  147. Client.sendGlobalMessage("[Lottery] "+Misc.ucFirst(name)+" has won the lottery!");
  148. container.stop();
  149. break;
  150. }
  151. }
  152. } finally {
  153. reader.close();
  154. }
  155. } catch (IOException e) {
  156. e.printStackTrace();
  157. }
  158. }
  159. }
  160.  
  161. @Override
  162. public void stop() {
  163. canStart = false;
  164. ticketEntrance.clear();
  165. announcing = false;
  166. ticketEntrance.clear();
  167. LotteryIO.deleteNumbersFromFile();
  168. ticketsBought = 0;
  169. }
  170.  
  171. }, 20);
  172. }
  173.  
  174. /**
  175. * Checks if a player is online or offline
  176. * @param name
  177. * the player checking for
  178. * @return
  179. * online/offline
  180. */
  181. private static Client getClient(String name) {
  182. for (Player player : PlayerHandler.players) {
  183. if (player != null && player.playerName.toLowerCase().equalsIgnoreCase(name.toLowerCase())) {
  184. return (Client) player;
  185. }
  186. }
  187. return null;
  188. }
  189.  
  190. /**
  191. * Checks to see if the lottery winner is online
  192. * if offline, saves user and jackpot to an external file
  193. * @param winner
  194. * the winner's name
  195. * @param pot
  196. * the jackpot amount
  197. */
  198. public static void checkWinner(String winner, int pot) {
  199. Client client = getClient(winner);
  200. if (client == null) {
  201. LotteryIO.saveWinners(winner.toLowerCase(), pot);
  202. } else {
  203. client.getItems().addItemToBank(995, pot);
  204. client.sendMessage("You've collected "+pot+" from winning the lottery!");
  205. client.sendMessage("Its been deposited to your bank.");
  206. }
  207. LotteryConfig.pot = 0;
  208. LotteryIO.saveConfig();
  209. }
  210.  
  211. /**
  212. * Checks to see if a player's won a previous lottery jackpot
  213. * @param client
  214. * the player
  215. */
  216. public static void checkWinners(Client client) {
  217. try {
  218. BufferedReader reader = new BufferedReader(new FileReader("./data/lottery/unclaimedwinners.txt"));
  219. String line = null;
  220. try {
  221. while ((line = reader.readLine()) != null) {
  222. String[] valuesArray = line.split("\t");
  223. String playerName = valuesArray[0];
  224. int pot = Integer.valueOf(valuesArray[1]);
  225. if (playerName.equalsIgnoreCase(client.playerName.toLowerCase())) {
  226. client.getItems().addItemToBank(995, pot);
  227. client.sendMessage("You've collected "+pot+" from winning the lottery!");
  228. client.sendMessage("Its been deposited to your bank.");
  229. LotteryIO.deleteWinnerFromFile(playerName, pot);
  230. break;
  231. }
  232. }
  233. } finally {
  234. reader.close();
  235. }
  236. } catch (IOException e) {
  237. e.printStackTrace();
  238. }
  239. }
  240.  
  241. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement