Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package server.game.content.lottery;
- import java.io.BufferedReader;
- import java.io.FileReader;
- import java.io.IOException;
- import java.text.NumberFormat;
- import java.util.HashMap;
- import server.event.CycleEvent;
- import server.event.CycleEventContainer;
- import server.event.CycleEventHandler;
- import server.game.entity.players.Client;
- import server.game.entity.players.Player;
- import server.game.entity.players.PlayerHandler;
- import server.util.Misc;
- /**
- * The main class that processes lottery actions
- * @author Karma
- *
- */
- public class Lottery extends LotteryConfig {
- /**
- * A map containing lottery numbers and their owners
- */
- public static HashMap<Integer, String> ticketEntrance = new HashMap<Integer, String>();
- /**
- * Processes a lottery number
- * @param client
- * the player buying a lottery number
- * @param number
- * the lottery number
- */
- public static void enterLottery(final Client client, int number) {
- if (PlayerHandler.updateRunning) {
- client.sendMessage("You can't buy a lottery number during an update.");
- return;
- }
- if (canStart) {
- client.sendMessage("You can't enter the lottery while numbers are being drawn.");
- return;
- }
- if (!client.getItems().playerHasItem(995, TICKET_COST)) {
- client.sendMessage("You need to have "+TICKET_COST+"gp to buy a lottery number.");
- return;
- }
- if (ticketEntrance.containsValue(client.playerName.toLowerCase())) {
- client.sendMessage("You've already entered this lottery draw.");
- return;
- }
- if (ticketEntrance.containsKey(number)) {
- client.sendMessage("Someone's already bought this number, choose another.");
- return;
- }
- if (number > LOTTERY_DRAW_MAX) {
- client.sendMessage("Your ticket number must be from 0 to 50.");
- return;
- }
- if (client.getItems().playerHasItem(995, TICKET_COST)) {
- client.getItems().deleteItem2(995, TICKET_COST);
- pot += (TICKET_COST - TICKET_TAX);
- ticketEntrance.put(number, client.playerName.toLowerCase());
- LotteryIO.saveNumber(number, client.playerName.toLowerCase());
- LotteryIO.saveConfig();
- ticketsBought ++;
- client.sendMessage("You've entered the lottery and bought the number: "+number+".");
- Client.sendGlobalMessage("[Lottery] "+Misc.ucFirst(client.playerName)+" has entered the lottery!");
- if (!announcing && pot > 9000000) {
- announcing = true;
- }
- if (announcing) {
- announceLottery();
- }
- if (pot > START_DRAW_RANGE && !canStart) {
- CycleEventHandler.getSingleton().addEvent(null, new CycleEvent() {
- @Override
- public void execute(CycleEventContainer container) {
- Client.sendGlobalMessage("[Lottery] Lottery Drawing will now commence!");
- canStart = true;
- container.stop();
- }
- @Override
- public void stop() {
- startDraw();
- }
- }, 5);
- }
- }
- }
- /**
- * Starts the announcing of a lottery jackpot
- */
- public static void announceLottery() {
- CycleEventHandler.getSingleton().addEvent(null, new CycleEvent() {
- @Override
- public void execute(CycleEventContainer container) {
- if (canStart || !announcing) {
- container.stop();
- return;
- }
- Client.sendGlobalMessage("[Lottery] The Lottery JackPot is currently at "+NumberFormat.getInstance().format(pot)+"gp!");
- }
- @Override
- public void stop() {
- // TODO Auto-generated method stub
- }
- }, 500);
- }
- /**
- * Starts the drawing of a lottery number and rewards the winner
- */
- public static void startDraw() {
- CycleEventHandler.getSingleton().addEvent(null, new CycleEvent() {
- @Override
- public void execute(CycleEventContainer container) {
- if (canStart) {
- lotteryRolled = (int) (Math.random() * (LOTTERY_DRAW_MAX + ticketsBought));
- try {
- BufferedReader reader = new BufferedReader(new FileReader(LotteryIO.LOTTERY_NUMBERS));
- String line = null;
- try {
- while ((line = reader.readLine()) != null) {
- String[] valuesArray = line.split("\t");
- int number = Integer.parseInt(valuesArray[0]);
- if (!ticketEntrance.containsKey(lotteryRolled)) {
- Client.sendGlobalMessage("[Lottery] No lucky winners won the Lottery JackPot.");
- Client.sendGlobalMessage("[Lottery] BETTER LUCK NEXT TIME!");
- container.stop();
- return;
- }
- if (number == lotteryRolled) {
- String name = valuesArray[1];
- checkWinner(name, pot);
- Client.sendGlobalMessage("[Lottery] "+Misc.ucFirst(name)+" has won the lottery!");
- container.stop();
- break;
- }
- }
- } finally {
- reader.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- @Override
- public void stop() {
- canStart = false;
- ticketEntrance.clear();
- announcing = false;
- ticketEntrance.clear();
- LotteryIO.deleteNumbersFromFile();
- ticketsBought = 0;
- }
- }, 20);
- }
- /**
- * Checks if a player is online or offline
- * @param name
- * the player checking for
- * @return
- * online/offline
- */
- private static Client getClient(String name) {
- for (Player player : PlayerHandler.players) {
- if (player != null && player.playerName.toLowerCase().equalsIgnoreCase(name.toLowerCase())) {
- return (Client) player;
- }
- }
- return null;
- }
- /**
- * Checks to see if the lottery winner is online
- * if offline, saves user and jackpot to an external file
- * @param winner
- * the winner's name
- * @param pot
- * the jackpot amount
- */
- public static void checkWinner(String winner, int pot) {
- Client client = getClient(winner);
- if (client == null) {
- LotteryIO.saveWinners(winner.toLowerCase(), pot);
- } else {
- client.getItems().addItemToBank(995, pot);
- client.sendMessage("You've collected "+pot+" from winning the lottery!");
- client.sendMessage("Its been deposited to your bank.");
- }
- LotteryConfig.pot = 0;
- LotteryIO.saveConfig();
- }
- /**
- * Checks to see if a player's won a previous lottery jackpot
- * @param client
- * the player
- */
- public static void checkWinners(Client client) {
- try {
- BufferedReader reader = new BufferedReader(new FileReader("./data/lottery/unclaimedwinners.txt"));
- String line = null;
- try {
- while ((line = reader.readLine()) != null) {
- String[] valuesArray = line.split("\t");
- String playerName = valuesArray[0];
- int pot = Integer.valueOf(valuesArray[1]);
- if (playerName.equalsIgnoreCase(client.playerName.toLowerCase())) {
- client.getItems().addItemToBank(995, pot);
- client.sendMessage("You've collected "+pot+" from winning the lottery!");
- client.sendMessage("Its been deposited to your bank.");
- LotteryIO.deleteWinnerFromFile(playerName, pot);
- break;
- }
- }
- } finally {
- reader.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement