Advertisement
TwentyEight

w3r3w01f

Jul 14th, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 33.87 KB | None | 0 0
  1. package com.github.koko;
  2.  
  3. import org.javacord.api.DiscordApi;
  4. import org.javacord.api.DiscordApiBuilder;
  5. import org.javacord.api.entity.channel.ServerTextChannel;
  6. import org.javacord.api.event.message.MessageCreateEvent;
  7. import org.javacord.api.entity.user.*;
  8. import org.javacord.api.entity.server.*;
  9.  
  10. import java.io.*;
  11. import java.util.*;
  12.  
  13.  
  14. public class Werewolf {
  15.  
  16.     public static void main(String[] args) {
  17.         String token = "NDYzOTcyNTk1ODIyMzYyNjI0.DoEOpg.xKnZbPIjyRhvgl-TsOsgejnkTuc";
  18.         DiscordApi api = new DiscordApiBuilder().setToken(token).login().join();
  19.  
  20.         api.addMessageCreateListener(Werewolf::onMessageCreate);
  21.  
  22.         // Print the invite url of your bot
  23.         System.out.println("You can invite the bot by using the following url: " + api.createBotInvite());
  24.  
  25.     }
  26.  
  27.     private static void onMessageCreate(MessageCreateEvent event) {
  28.         String message = event.getMessage().getContent();
  29.  
  30.         if (message.startsWith("!ww")) {
  31.             String prompt = message.substring(3);
  32.             if (prompt.equals(" join")) {
  33.                 newPlayer(event);
  34.             } else if (prompt.equals(" play")) {
  35.                 //if (event.getMessage().getAuthor().isBotOwner()) {
  36.                     if (getPhase() == 0) {
  37.                         setPhase(1);
  38.                         int x = allocateRoles();
  39.                         if (x == -1) {
  40.                             event.getChannel().sendMessage("There are not enough players to start a werewolf game.");
  41.                         } else if (x == -2) {
  42.                             event.getChannel().sendMessage("There are too many players to start a werewolf game.");
  43.                             resetGame();
  44.                             event.getChannel().sendMessage("The werewolf game has been reset.");
  45.                         } else {
  46.                             sendNight(x, event);
  47.                             setPhase(2);
  48.                             int nww = sendRoles(event);
  49.                             messageWolf(nww, event);
  50.                         }
  51.  
  52.                     } else {
  53.                         event.getChannel().sendMessage("There is a werewolf game in progress.");
  54.                     }
  55.                 /*} else {
  56.                     event.getChannel().sendMessage("Only the bot owner can start a werewolf game.");
  57.                 }*/
  58.             } else if (prompt.equals(" reset")) {
  59.                 //if (event.getMessage().getAuthor().isBotOwner()) {
  60.                     resetGame();
  61.                     event.getChannel().sendMessage("The werewolf game has been reset.");
  62.                 /*} else {
  63.                     event.getChannel().sendMessage("Only the bot owner can reset a werewolf game.");
  64.                 }*/
  65.             } else if (prompt.startsWith(" act ")) {
  66.                 if (getPhase() == 2) {
  67.                     prompt = prompt.substring(5);
  68.                     applyAction(prompt, event);
  69.                 } else {
  70.                     event.getChannel().sendMessage("The werewolf game is not in the night phase.");
  71.                 }
  72.             } else if (prompt.equals(" reveal")) {
  73.                 //if (event.getMessage().getAuthor().isBotOwner()) {
  74.                     revealRoles(event);
  75.                     resetGame();
  76.                 /*} else {
  77.                     event.getChannel().sendMessage("Only the bot owner can end a werewolf game.");
  78.                 }*/
  79.             } else if (prompt.equals(" rules")) {
  80.                 sendRulesH(event);
  81.             } else if (prompt.equals(" roles")) {
  82.                 sendRolesH(event);
  83.             } else if (prompt.equals(" help")) {
  84.                 sendHelp(event, "");
  85.             } else if (prompt.startsWith(" help ")) {
  86.                 prompt = prompt.substring(6);
  87.                 sendHelp(event, prompt);
  88.             } else if (prompt.equals("")) {
  89.                 sendIntro(event);
  90.             } else {
  91.                 event.getChannel().sendMessage("Invalid command.\n" +
  92.                         "Please type '!ww help' for the list of commands.");
  93.             }
  94.         }
  95.  
  96.     }
  97.  
  98.     private static void newPlayer(MessageCreateEvent event) {
  99.         String player = event.getMessage().getAuthor().getDiscriminatedName();
  100.         String name = getDisplayName(player);
  101.         if (getPhase() != 0) {
  102.             event.getChannel().sendMessage("There is a werewolf game in progress.");
  103.             return;
  104.         }
  105.         Scanner playerFile = scanFile("game.txt");
  106.  
  107.         int nPlayers = playerFile.nextInt();
  108.         playerFile.nextLine();
  109.  
  110.         int isNew = isNewPlayer(playerFile, player, nPlayers);
  111.  
  112.         if (isNew == 1) {
  113.             nPlayers++;
  114.             event.getChannel().sendMessage(name + " has joined.");
  115.             addNewPlayer(player, nPlayers);
  116.         } else {
  117.             event.getChannel().sendMessage(name + " has already joined.");
  118.         }
  119.         event.getChannel().sendMessage("Total: " + nPlayers);
  120.     }
  121.  
  122.     private static String getDisplayName(String discriminatedName) {
  123.         return discriminatedName.substring(0, discriminatedName.length()-5);
  124.     }
  125.  
  126.     private static int isNewPlayer(Scanner playerFile, String player, int n) {
  127.         String aPlayer;
  128.         for (int i=0; i<n; i++) {
  129.             aPlayer = playerFile.nextLine();
  130.             if (aPlayer.equals(player)) {
  131.                 return 0;
  132.             }
  133.             playerFile.nextLine();
  134.         }
  135.         playerFile.close();
  136.         return 1;
  137.     }
  138.  
  139.     private static Scanner scanFile(String fileName) {
  140.         Scanner theFile = null;
  141.         try {
  142.             theFile = new Scanner( new FileInputStream(fileName));
  143.         } catch (FileNotFoundException e) {
  144.             System.out.println("Broken 1.");
  145.         }
  146.         return theFile;
  147.     }
  148.  
  149.     private static PrintWriter writeFile(String fileName) {
  150.         PrintWriter theFile = null;
  151.         try {
  152.             theFile = new PrintWriter( new FileOutputStream(fileName));
  153.         } catch (FileNotFoundException e) {
  154.             System.out.println("Broken 2.");
  155.         }
  156.         return theFile;
  157.     }
  158.  
  159.     private static void addNewPlayer(String player, int nPlayers) {
  160.         Scanner playerFileIn = scanFile("game.txt");
  161.         PrintWriter playerFileOut = writeFile("tmp.txt");
  162.         String fileLine;
  163.  
  164.         playerFileIn.nextLine();
  165.         playerFileOut.println(nPlayers);
  166.         for (int i=0; i<nPlayers-1; i++) {
  167.             fileLine = playerFileIn.nextLine();
  168.             playerFileIn.nextLine();
  169.  
  170.             playerFileOut.println(fileLine);
  171.             playerFileOut.println("0 0");
  172.         }
  173.         playerFileOut.println(player);
  174.         playerFileOut.println("0 0");
  175.  
  176.         playerFileIn.close();
  177.         playerFileOut.close();
  178.  
  179.         renameFile("tmp.txt", "game.txt");
  180.     }
  181.  
  182.     private static void renameFile(String oldName, String newName) {
  183.         File tmp = new File(oldName);
  184.         File game = new File(newName);
  185.         tmp.renameTo(game);
  186.     }
  187.  
  188.     private static int getPhase() {
  189.         Scanner phaseFile = scanFile("phase.txt");
  190.         int i = phaseFile.nextInt();
  191.         phaseFile.close();
  192.         return i;
  193.     }
  194.  
  195.     private static void setPhase(int n) {
  196.         PrintWriter phaseFile = writeFile("phase.txt");
  197.         phaseFile.println(n);
  198.         phaseFile.close();
  199.     }
  200.  
  201.     private static void resetGame() {
  202.         setPhase(0);
  203.         PrintWriter playerFile = writeFile("game.txt");
  204.         playerFile.println(0);
  205.         playerFile.close();
  206.         int[] p = {0,0,0};
  207.         writePile(p);
  208.         PrintWriter actFile = writeFile("toAct.txt");
  209.         actFile.close();
  210.     }
  211.  
  212.     private static int allocateRoles() {
  213.         Scanner playerFileIn = scanFile("game.txt");
  214.         int nPlayers = playerFileIn.nextInt();
  215.         playerFileIn.nextLine();
  216.  
  217.         Scanner setupFile = scanFile("setup.txt");
  218.         int nMin = setupFile.nextInt();
  219.         if (nPlayers < nMin) {
  220.             setupFile.close();
  221.             resetGame();
  222.             return -1;
  223.         }
  224.         int nMax = setupFile.nextInt();
  225.         if (nPlayers > nMax) {
  226.             setupFile.close();
  227.             resetGame();
  228.             return -2;
  229.         }
  230.         setupFile.close();
  231.  
  232.         int[] roles = getSetup(nPlayers);
  233.  
  234.         int[] r = new Random().ints(0, nPlayers+3).distinct().limit(nPlayers+3).toArray();
  235.  
  236.         PrintWriter playerFileOut = writeFile("tmp.txt");
  237.         playerFileOut.println(nPlayers);
  238.         String s;
  239.         int i;
  240.  
  241.         for (i=0; i<nPlayers; i++) {
  242.             s = playerFileIn.nextLine();
  243.             playerFileIn.nextLine();
  244.  
  245.             playerFileOut.println(s);
  246.             s = String.format("%d %d", roles[r[i]], roles[r[i]]);
  247.             playerFileOut.println(s);
  248.         }
  249.  
  250.         playerFileIn.close();
  251.         playerFileOut.close();
  252.  
  253.         int[] p = {roles[r[i++]], roles[r[i++]], roles[r[i]]};
  254.         writePile(p);
  255.  
  256.         renameFile("tmp.txt", "game.txt");
  257.  
  258.         return nPlayers;
  259.     }
  260.  
  261.     private static int[] getSetup(int n) {
  262.         Scanner setupFile = scanFile("setup.txt");
  263.         int nMin = setupFile.nextInt();
  264.         setupFile.nextLine();
  265.  
  266.         while (n > nMin) {
  267.             setupFile.nextLine();
  268.             nMin++;
  269.         }
  270.  
  271.         int[] roles = new int[n+3];
  272.         for (int i=0; i<n+3; i++) {
  273.             roles[i] = setupFile.nextInt();
  274.         }
  275.         setupFile.close();
  276.  
  277.         return roles;
  278.     }
  279.  
  280.     private static void sendNight(int n, MessageCreateEvent event) {
  281.         int roles[] = getSetup(n);
  282.         String message = "Roles: " + getRole(roles[0]);
  283.         for (int i=1; i<n+2; i++) {
  284.             message += ", " + getRole(roles[i]);
  285.         }
  286.         message += " and " + getRole(roles[n+2]);
  287.         event.getChannel().sendMessage(message);
  288.         message = "@here NIGHT phase has begun.";
  289.         event.getChannel().sendMessage(message);
  290.         setPhase(2);
  291.     }
  292.  
  293.     private static void writePile(int[] p) {
  294.         String s = String.format("%d %d %d", p[0], p[1], p[2]);
  295.         PrintWriter pileFile = writeFile("pile.txt");
  296.         pileFile.println(s);
  297.         pileFile.close();
  298.     }
  299.  
  300.     private static User getUserFromName(String player, Server s) {
  301.         User thePlayer;
  302.         thePlayer = s.getMemberByDiscriminatedName(player).get();
  303.         return thePlayer;
  304.     }
  305.  
  306.     private static int sendRoles(MessageCreateEvent event) {
  307.         Server server = event.getServer().get();
  308.         String playerS, name, s;
  309.         User thePlayer;
  310.         int role;
  311.         int nww = 0;
  312.         Scanner playerFile = scanFile("game.txt");
  313.         int nPlayers = playerFile.nextInt();
  314.         playerFile.nextLine();
  315.  
  316.         for (int i=0; i<nPlayers; i++) {
  317.             playerS = playerFile.nextLine();
  318.             name = getDisplayName(playerS);
  319.             thePlayer = getUserFromName(playerS, server);
  320.  
  321.             role = playerFile.nextInt();
  322.             playerFile.nextLine();
  323.             s = String.format("%s%s", name, roleMessage(role));
  324.             thePlayer.sendMessage(s);
  325.             if (role == 1) {
  326.                 nww++;
  327.             }
  328.         }
  329.         playerFile.close();
  330.         return nww; // return number of werewolves
  331.     }
  332.  
  333.     private static String roleMessage(int n) {
  334.         String m = String.format(", your role is %s.", getRole(n));
  335.         if (n == 2||n == 3||n == 6) {
  336.             m+= "\nYou have no night action.";
  337.         } else {
  338.             m += "\n Please wait for a prompt before completing your night action.";
  339.         }
  340.         return m;
  341.     }
  342.  
  343.     private static String getRole(int n) {
  344.         if (n == 1) {
  345.             return "WEREWOLF";
  346.         } else if (n == 2) {
  347.             return "MINION";
  348.         } else if (n == 3) {
  349.             return "VILLAGER";
  350.         } else if (n == 6) {
  351.             return "INSOMNIAC";
  352.         } else if (n == 7) {
  353.             return "DRUNK";
  354.         } else if (n == 8) {
  355.             return "TROUBLEMAKER";
  356.         } else if (n == 9) {
  357.             return "ROBBER";
  358.         } else if (n == 10) {
  359.             return "SEER";
  360.         }
  361.         return "";
  362.     }
  363.  
  364.     private static void messageWolf(int n, MessageCreateEvent event) {
  365.         if (n==0) {
  366.             messageMinion(event);
  367.             try {
  368.                 Thread.sleep(5000);
  369.             } catch (InterruptedException e) {
  370.                 e.printStackTrace();
  371.             }
  372.             messageSeer(event.getServer().get());
  373.             return;
  374.         }
  375.         int nPlayers, role;
  376.         User u;
  377.         Scanner playerFile = scanFile("game.txt");
  378.         nPlayers = playerFile.nextInt();
  379.         playerFile.nextLine();
  380.  
  381.         if (n==1) {
  382.             String ww = "";
  383.             for (int i=0; i<nPlayers; i++) {
  384.                 ww = playerFile.nextLine();
  385.                 role = playerFile.nextInt();
  386.                 playerFile.nextLine();
  387.                 if (role == 1) {
  388.                     break;
  389.                 }
  390.             }
  391.             u  = getUserFromName(ww, event.getServer().get());
  392.             u.sendMessage("You are the lone wolf.");
  393.             u.sendMessage("You may now view one card (of three) from the centre pile.");
  394.             u.sendMessage("1: left          2: middle          3: right");
  395.             u.sendMessage("Command: !ww act #");
  396.  
  397.             setToAct(ww, 1);
  398.             messageMinion(event, ww);
  399.  
  400.         } else if (n==2) {
  401.  
  402.             String[] ww = new String[2], name = new String[2];
  403.             int j = 0;
  404.             for (int i=0; i<nPlayers; i++) {
  405.                 ww[j] = playerFile.nextLine();
  406.                 role = playerFile.nextInt();
  407.                 playerFile.nextLine();
  408.                 if (role == 1) {
  409.                     if (j == 1) {
  410.                         break;
  411.                     }
  412.                     j++;
  413.                 }
  414.             }
  415.  
  416.             u = getUserFromName(ww[0], event.getServer().get());
  417.             u.sendMessage("You have no night action.");
  418.             name[1] = getDisplayName(ww[1]);
  419.             u.sendMessage("The other WEREWOLF is " + name[1] + ".");
  420.  
  421.             u = getUserFromName(ww[1], event.getServer().get());
  422.             u.sendMessage("You have no night action.");
  423.             name[0] = getDisplayName(ww[0]);
  424.             u.sendMessage("The other WEREWOLF is " + name[0] + ".");
  425.  
  426.             messageMinion(event, name[0], name[1]);
  427.             messageSeer(event.getServer().get());
  428.         }
  429.  
  430.         playerFile.close();
  431.     }
  432.  
  433.     private static void setToAct(String s, int n) {
  434.         PrintWriter actFile = writeFile("toAct.txt");
  435.         actFile.println(s);
  436.         actFile.println(n);
  437.         actFile.close();
  438.     }
  439.  
  440.     private static void applyAction(String prompt, MessageCreateEvent event) {
  441.         String player = event.getMessage().getAuthor().getDiscriminatedName();
  442.         Scanner actFile = scanFile("toAct.txt");
  443.         String actor = actFile.nextLine();
  444.         if (player.equals(actor)) {
  445.             int role = actFile.nextInt();
  446.             if (role == 1 || role == 9 || role == 7) {
  447.                 int i;
  448.                 try {
  449.                     i = Integer.parseInt(prompt);
  450.                 } catch (Exception e) {
  451.                     event.getChannel().sendMessage("Invalid command or person.");
  452.                     actFile.close();
  453.                     return;
  454.                 }
  455.                 if (role == 1) {
  456.                     applyWolf(i, event.getMessage().getAuthor().asUser().get());
  457.                 } else if (role == 9) {
  458.                     applyRobber(i, event.getMessage().getAuthor().asUser().get());
  459.                 } else if (role == 7) {
  460.                     applyDrunk(i, event.getMessage().getAuthor().asUser().get());
  461.                 }
  462.             } if (role == 10 || role == 8) {
  463.                 int i1, i2;
  464.                 try {
  465.                     i1 = Integer.parseInt(prompt.substring(0,1));
  466.                     i2 = Integer.parseInt(prompt.substring(2,3));
  467.                 } catch (Exception e) {
  468.                     event.getChannel().sendMessage("Invalid command or person.");
  469.                     actFile.close();
  470.                     return;
  471.                 }
  472.                 if (role == 10) {
  473.                     applySeer(i1, i2, event.getMessage().getAuthor().asUser().get());
  474.                 } else if (role == 8) {
  475.                     applyTroubleMaker(i1, i2, event.getMessage().getAuthor().asUser().get());
  476.                 }
  477.             }
  478.         } else {
  479.             event.getChannel().sendMessage("Invalid command or person.");
  480.         }
  481.         actFile.close();
  482.     }
  483.  
  484.     private static void applyWolf(int n, User u) {
  485.         if (n<1||n>3) {
  486.             u.sendMessage("Invalid command or person.");
  487.             return;
  488.         }
  489.         pickPile(n, u);
  490.         Server server[] = u.getMutualServers().toArray(new Server[0]);
  491.         messageSeer(server[0]);
  492.     }
  493.  
  494.     private static void pickPile(int n, User u) {
  495.         String pos = getPos(n);
  496.  
  497.         int[] x = getPile();
  498.  
  499.         String role = getRole(x[n-1]);
  500.         String message = String.format("The role of the %s card is %s.", pos, role);
  501.         u.sendMessage(message);
  502.     }
  503.  
  504.     private static String getPos(int n) {
  505.         String pos;
  506.         if (n == 1) {
  507.             pos = "LEFT";
  508.         } else if (n == 2) {
  509.             pos = "MIDDLE";
  510.         } else {
  511.             pos = "RIGHT";
  512.         }
  513.         return pos;
  514.     }
  515.  
  516.     private static int[] getPile() {
  517.         Scanner pileFile = scanFile("pile.txt");
  518.         int[] p = new int[3];
  519.         for (int i=0; i<3; i++) {
  520.             p[i] = pileFile.nextInt();
  521.         }
  522.         pileFile.close();
  523.         return p;
  524.     }
  525.  
  526.     private static void messageMinion(MessageCreateEvent event, String... ww) {
  527.         String player = getPlayerFromRole(2);
  528.         if (player == null) {
  529.             return;
  530.         }
  531.  
  532.         String message;
  533.  
  534.         if (ww.length ==  0) {
  535.             message = "There are no werewolves.";
  536.         } else if (ww.length == 1) {
  537.             message = String.format("The WEREWOLF is %s.", ww[0]);
  538.         } else {
  539.             message = String.format("The WEREWOLVES are %s and %s.", ww[0], ww[1]);
  540.         }
  541.  
  542.         User u = getUserFromName(player, event.getServer().get());
  543.         u.sendMessage(message);
  544.     }
  545.  
  546.     private static String getPlayerFromRole(int n) {
  547.         Scanner playerFile = scanFile("game.txt");
  548.         String player;
  549.         int x, nPlayers = playerFile.nextInt();
  550.         playerFile.nextLine();
  551.  
  552.         for (int i=0; i<nPlayers; i++) {
  553.             player = playerFile.nextLine();
  554.             x = playerFile.nextInt();
  555.             if (x == n) {
  556.                 playerFile.close();
  557.                 return player;
  558.             }
  559.             playerFile.nextLine();
  560.         }
  561.  
  562.         playerFile.close();
  563.         return null;
  564.     }
  565.  
  566.     private static void messageSeer(Server s) {
  567.         String player = getPlayerFromRole(10);
  568.         if (player == null) {
  569.             try {
  570.                 Thread.sleep(5000);
  571.             } catch (InterruptedException e) {
  572.                 e.printStackTrace();
  573.             }
  574.             messageRobber(s);
  575.             return;
  576.         }
  577.         User u = getUserFromName(player, s);
  578.         u.sendMessage("You may now view two cards (of three) from the centre pile.");
  579.         u.sendMessage("1: left          2: middle          3: right");
  580.         u.sendMessage("Command: !ww act # #");
  581.  
  582.         setToAct(player, 10);
  583.     }
  584.  
  585.     private static void applySeer(int n1, int n2, User u) {
  586.         if (n1<1||n2<1||n1>3||n2>3||n1==n2) {
  587.             u.sendMessage("Invalid command or person.");
  588.             return;
  589.         }
  590.         pickPile(n1, u);
  591.         pickPile(n2, u);
  592.  
  593.         Server[] server = u.getMutualServers().toArray(new Server[0]);
  594.         messageRobber(server[0]);
  595.     }
  596.  
  597.     private static void messageRobber(Server s) {
  598.         String player = getPlayerFromRole(9);
  599.         if (player == null) {
  600.             try {
  601.                 Thread.sleep(5000);
  602.             } catch (InterruptedException e) {
  603.                 e.printStackTrace();
  604.             }
  605.             messageTroublemaker(s);
  606.             return;
  607.         }
  608.  
  609.         User u = getUserFromName(player, s);
  610.         u.sendMessage("You may now rob another player and look at your new role.");
  611.  
  612.         Scanner playerFile = scanFile("game.txt"); //to "game2.txt" if testing
  613.         listOtherPlayers(playerFile, player, u);
  614.         playerFile.close();
  615.         u.sendMessage("Command: !ww act #");
  616.  
  617.         setToAct(player, 9);
  618.     }
  619.  
  620.     private static void listOtherPlayers(Scanner playerFile, String p, User u) {
  621.         String name;
  622.         int nPlayers = playerFile.nextInt();
  623.         playerFile.nextLine();
  624.  
  625.         for (int i = 1; i < nPlayers; i++) {
  626.             name = playerFile.nextLine();
  627.             playerFile.nextLine();
  628.             if (name.equals(p)) {
  629.                 i--;
  630.                 continue;
  631.             }
  632.             name = getDisplayName(name);
  633.             u.sendMessage(String.format("%d. %s", i, name));
  634.         }
  635.     }
  636.  
  637.     private static void applyRobber(int n, User u) {
  638.         String fileName = "game.txt";
  639.         Scanner playerFileIn = scanFile(fileName); //to "game2.txt" for testing
  640.         int nP = playerFileIn.nextInt();
  641.         if (n<1||n>=nP) {
  642.             u.sendMessage("Invalid command or person.");
  643.             return;
  644.         }
  645.  
  646.         String[] players = new String[nP];
  647.         int[][] roles = new int[nP][2];
  648.  
  649.         playerFileIn.nextLine();
  650.         for (int i=0; i<nP; i++) {
  651.             players[i] = playerFileIn.nextLine();
  652.             roles[i][0] = playerFileIn.nextInt();
  653.             roles[i][1] = playerFileIn.nextInt();
  654.             playerFileIn.nextLine();
  655.         }
  656.         playerFileIn.close();
  657.  
  658.         Server[] server = u.getMutualServers().toArray(new Server[0]);
  659.         String robber = u.getDiscriminatedName();
  660.         int nR = getPlayerIndex(players, robber);
  661.         if (n <= nR) {
  662.             n--;
  663.         }
  664.         int tmp = roles[n][1];
  665.         roles[n][1] = roles[nR][1];
  666.         roles[nR][1] = tmp;
  667.  
  668.         PrintWriter playerFileOut = writeFile(fileName);
  669.         playerFileOut.println(nP);
  670.         for (int i=0; i<nP; i++) {
  671.             playerFileOut.println(players[i]);
  672.             playerFileOut.println(String.format("%d %d", roles[i][0], roles[i][1]));
  673.         }
  674.         playerFileOut.close();
  675.  
  676.         String message = "You robbed " + getDisplayName(players[n]) + ".";
  677.         u.sendMessage(message);
  678.  
  679.         message = getDisplayName(robber) + ", your new role is ";
  680.         if (tmp == 9) {
  681.             message += "still ";
  682.         }
  683.         message += getRole(tmp) + ".";
  684.         u.sendMessage(message);
  685.  
  686.         messageTroublemaker(server[0]);
  687.     }
  688.  
  689.     private static void writeGame(String[] P, int[][] R) {
  690.         PrintWriter playerFileOut = writeFile("game.txt");
  691.         int nP = P.length;
  692.         playerFileOut.println(nP);
  693.         for (int i=0; i<nP; i++) {
  694.             playerFileOut.println(P[i]);
  695.             playerFileOut.println(String.format("%d %d", R[i][0], R[i][1]));
  696.         }
  697.         playerFileOut.close();
  698.     }
  699.  
  700.     private static int getPlayerIndex(String[] players, String p) {
  701.         int n = 0;
  702.         for (String s : players) {
  703.             if (s.equals(p)) {
  704.                 return n;
  705.             }
  706.             n++;
  707.         }
  708.         return -1;
  709.     }
  710.  
  711.     private static void messageTroublemaker(Server s) {
  712.         String player = getPlayerFromRole(8);
  713.         if (player == null) {
  714.             try {
  715.                 Thread.sleep(5000);
  716.             } catch (InterruptedException e) {
  717.                 e.printStackTrace();
  718.             }
  719.             messageDrunk(s);
  720.             return;
  721.         }
  722.  
  723.         User u = getUserFromName(player, s);
  724.         u.sendMessage("You may now switch the roles of two other players.");
  725.  
  726.         Scanner playerFile = scanFile("game.txt"); // to "game3.txt" for testing
  727.         listOtherPlayers(playerFile, player, u);
  728.         playerFile.close();
  729.         u.sendMessage("Command: !ww act # #");
  730.  
  731.         setToAct(player, 8);
  732.     }
  733.  
  734.     private static void applyTroubleMaker(int n1, int n2, User u) {
  735.         String fileName = "game.txt";
  736.         Scanner playerFileIn = scanFile(fileName); // to "game3.txt" if testing
  737.         int nP = playerFileIn.nextInt();
  738.         if (n1<1||n2<1||n1>=nP||n2>nP||n1==n2) {
  739.             u.sendMessage("Invalid command or person.");
  740.             return;
  741.         }
  742.  
  743.         String[] players = new String[nP];
  744.         int[][] roles = new int[nP][2];
  745.  
  746.         playerFileIn.nextLine();
  747.         for (int i=0; i<nP; i++) {
  748.             players[i] = playerFileIn.nextLine();
  749.             roles[i][0] = playerFileIn.nextInt();
  750.             roles[i][1] = playerFileIn.nextInt();
  751.             playerFileIn.nextLine();
  752.         }
  753.         playerFileIn.close();
  754.  
  755.         Server[] server = u.getMutualServers().toArray(new Server[0]);
  756.         String tm = u.getDiscriminatedName();
  757.         int nTM = getPlayerIndex(players, tm);
  758.         if (n1 <= nTM) {
  759.             n1--;
  760.         }
  761.         if (n2 <= nTM) {
  762.             n2--;
  763.         }
  764.  
  765.         int tmp = roles[n1][1];
  766.         roles[n1][1] = roles[n2][1];
  767.         roles[n2][1] = tmp;
  768.  
  769.         PrintWriter playerFileOut = writeFile(fileName);
  770.         playerFileOut.println(nP);
  771.         for (int i=0; i<nP; i++) {
  772.             playerFileOut.println(players[i]);
  773.             playerFileOut.println(String.format("%d %d", roles[i][0], roles[i][1]));
  774.         }
  775.         playerFileOut.close();
  776.  
  777.         String message = "You switched the roles of " + getDisplayName(players[n1]) + " and " + getDisplayName(players[n2]) + ".";
  778.         u.sendMessage(message);
  779.         messageDrunk(server[0]);
  780.     }
  781.  
  782.     private static void messageDrunk(Server s) {
  783.         String player = getPlayerFromRole(7);
  784.         if (player == null) {
  785.             try {
  786.                 Thread.sleep(5000);
  787.             } catch (InterruptedException e) {
  788.                 e.printStackTrace();
  789.             }
  790.             messageInsomniac(s);
  791.             return;
  792.         }
  793.  
  794.         User u = getUserFromName(player, s);
  795.         u.sendMessage("You do not remember your role. Exchange your role card for a card in the centre pile.");
  796.         u.sendMessage("1: left          2: middle          3: right");
  797.         u.sendMessage("Command: !ww act #");
  798.  
  799.         setToAct(player, 7);
  800.     }
  801.  
  802.     private static void applyDrunk(int n, User u) {
  803.         if (n<1||n>3) {
  804.             u.sendMessage("Invalid command or person.");
  805.             return;
  806.         }
  807.  
  808.         int[] pile = getPile();
  809.  
  810.         Scanner playerFileIn = scanFile("game.txt");
  811.         int nP = playerFileIn.nextInt();
  812.  
  813.         String[] players = new String[nP];
  814.         int[][] roles = new int[nP][2];
  815.  
  816.         playerFileIn.nextLine();
  817.         for (int i=0; i<nP; i++) {
  818.             players[i] = playerFileIn.nextLine();
  819.             roles[i][0] = playerFileIn.nextInt();
  820.             roles[i][1] = playerFileIn.nextInt();
  821.             playerFileIn.nextLine();
  822.         }
  823.         playerFileIn.close();
  824.  
  825.         Server[] server = u.getMutualServers().toArray(new Server[0]);
  826.         String d = u.getDiscriminatedName();
  827.         int nD = getPlayerIndex(players, d);
  828.  
  829.         int tmp = roles[nD][1];
  830.         roles[nD][1] = pile[n-1];
  831.         pile[n-1] = tmp;
  832.  
  833.         writeGame(players, roles);
  834.         writePile(pile);
  835.  
  836.         String pos = getPos(n);
  837.         String message = "You exchanged your card with the " + pos + " card.";
  838.         u.sendMessage(message);
  839.  
  840.         messageInsomniac(server[0]);
  841.     }
  842.  
  843.     private static void messageInsomniac(Server s) {
  844.         String player = getPlayerFromRole(6);
  845.         if (player == null) {
  846.             try {
  847.                 Thread.sleep(5000);
  848.             } catch (InterruptedException e) {
  849.                 e.printStackTrace();
  850.             }
  851.             sendDay(s);
  852.             return;
  853.         }
  854.  
  855.         Scanner playerFileIn = scanFile("game.txt");
  856.         int nP = playerFileIn.nextInt();
  857.  
  858.         String p, message = getDisplayName(player) + ", your new role is ";
  859.         int r = 0;
  860.  
  861.         playerFileIn.nextLine();
  862.         for (int i=0; i<nP; i++) {
  863.             p = playerFileIn.nextLine();
  864.             if (p.equals(player)) {
  865.                 playerFileIn.nextInt();
  866.                 r = playerFileIn.nextInt();
  867.                 break;
  868.             }
  869.             playerFileIn.nextLine();
  870.         }
  871.         playerFileIn.close();
  872.  
  873.         User u = getUserFromName(player, s);
  874.         if (r == 6) {
  875.             message += "still INSOMNIAC.";
  876.         } else {
  877.             message += getRole(r) + ".";
  878.         }
  879.         u.sendMessage(message);
  880.  
  881.         sendDay(s);
  882.     }
  883.  
  884.     private static void revealRoles(MessageCreateEvent event) {
  885.         Scanner playerFileIn = scanFile("game.txt");
  886.         int nP = playerFileIn.nextInt();
  887.  
  888.         String message, player;
  889.         int role;
  890.  
  891.         playerFileIn.nextLine();
  892.         for (int i=0; i<nP; i++) {
  893.             player = playerFileIn.nextLine();
  894.             playerFileIn.nextInt();
  895.             role = playerFileIn.nextInt();
  896.             playerFileIn.nextLine();
  897.             message = getDisplayName(player) + ":     " + getRole(role);
  898.             event.getChannel().sendMessage(message);
  899.         }
  900.         playerFileIn.close();
  901.     }
  902.  
  903.     private static void sendDay(Server s) {
  904.         String message = "@here DAY phase has begun.";
  905.         s.getTextChannels().get(0).sendMessage(message);
  906.         setPhase(3);
  907.     }
  908.  
  909.     private static void sendRulesH(MessageCreateEvent event) {
  910.         String sep = "- - - - - - - - - -";
  911.         String message = "In Werewolf, each player takes on the role of a Villager, a Werewolf, or a special character. ";
  912.         message += "It’s your job to figure out who the Werewolves are and to kill at least one of them in order to win...  ";
  913.         message += "unless you’ve become a Werewolf yourself!";
  914.         message += "\n" + sep + "\n";
  915.         message += "Each player initially knows their role. ";
  916.         message += "Three additional role cards are placed in the centre pile.";
  917.         message += "\n" + sep + "\n";
  918.         message += "NIGHT: several roles are called on at night to perform a night action\n";
  919.         message += "DAY: players discuss amongst themselves who they believe the Werewolves are";
  920.         message += "\n" + sep + "\n";
  921.         message += "After the night phase, your role is the card that is currently in front of you, which may be different than your original role. ";
  922.         message += "No one may look at any cards after the night phase.";
  923.         message += "\n" + sep + "\n";
  924.         message += "Players then vote. The player(s) with the most votes die.\n";
  925.         message += "The village team wins if at least one Werewolf dies or if no one is a Werewolf and no one dies.";
  926.         message += "\n" + sep + "\n";
  927.         message += "Type '!ww roles' for role descriptions.";
  928.  
  929.         event.getChannel().sendMessage(message);
  930.     }
  931.  
  932.     private static void sendRolesH(MessageCreateEvent event) {
  933.         String sep = "- - - - - - - - - -";
  934.         String message = "Werewolf team\n";
  935.         message += "WEREWOLF: knows the other werewolves, may view one centre card if no other werewolf\n";
  936.         message += "MINION: knows who the werewolves are";
  937.         message += "\n" + sep + "\n";
  938.         message += "Villager team\n";
  939.         message += "SEER: looks at two of the centre cards\n";
  940.         message += "ROBBER: robs a card from another player and looks at their new role\n";
  941.         message += "TROUBLEMAKER: switches the role cards of two other players\n";
  942.         message += "DRUNK: exchanges their role card for a card in the centre without looking at it\n";
  943.         message += "INSOMNIAC: wakes up and look at their role card\n";
  944.         message += "VILLAGER: has no special ability";
  945.         message += "\n" + sep + "\n";
  946.         message += "Type '!ww rules' for the rules of the game.";
  947.  
  948.         event.getChannel().sendMessage(message);
  949.     }
  950.  
  951.     private static void sendHelp(MessageCreateEvent event, String s) {
  952.         String message;
  953.         switch (s) {
  954.             case "":
  955.                 message = "Type '!ww help command' for further help.\n";
  956.                 message += "Commands: help rules roles join play act reveal reset";
  957.                 break;
  958.             case "help":
  959.                 message = "Syntax: '!ww help'\n";
  960.                 message += "Sends the list of commands.";
  961.                 break;
  962.             case "rules":
  963.                 message = "Syntax: '!ww rules'\nSends the rules of the werewolf game.";
  964.                 break;
  965.             case "roles":
  966.                 message = "Syntax: '!ww roles'\nSends a description of each role.";
  967.                 break;
  968.             case "join":
  969.                 message = "Syntax: '!ww join'\nJoins a new game if there is no on-going game.";
  970.                 break;
  971.             case "play":
  972.                 message = "Syntax: '!ww play'\nInitiates a werewolf game.";
  973.                 break;
  974.             case "act":
  975.                 message = "Syntax: '!ww act # [#]'\nPerforms a night action depending on role.";
  976.                 break;
  977.             case "reveal":
  978.                 message = "Syntax: '!ww reveal'\nEnds the werewolf game and reveals everyone's role.";
  979.                 break;
  980.             case "reset":
  981.                 message = "Syntax: '!ww reset'\nResets the werewolf game.";
  982.                 break;
  983.             default:
  984.                 message = "Invalid command.\nPlease type '!ww help' for the list of commands.";
  985.                 break;
  986.         }
  987.         event.getChannel().sendMessage(message);
  988.     }
  989.  
  990.     private static void sendIntro(MessageCreateEvent event) {
  991.         String message = "Hi, I am the werewolf bot. ";
  992.         message += "Please type '!ww help' for the list of commands and '!ww rules' for the rules of the game.";
  993.         event.getChannel().sendMessage(message);
  994.     }
  995. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement