Here's the current code for !fruit, in case anyone is curious. I thought it might be worth putting out there, since many people over the years have claimed it's somehow rigged. Not the easiest for a non-programmer to read, but it's also not that difficult or long.
Easier to read format: https://hastebin.com/gugazalefe.java
Pasted:
Easier to read format: https://hastebin.com/gugazalefe.java
Pasted:
Code:
/** Handles the !fruit command. (Anyone) <p> Pulls the handle of the one-armed bandit (aka fruit machine) in an ill-fated attempt to earn more money. @param sender Sender of the command. @param command Amount to throw away */ String doCmdFruit(String sender, String command, boolean nonCommandPlay) { int bet = 0; int iterations = 1; int winnings = 0; if (!nonCommandPlay && context.getPubChallenge().isDueling(sender)) { m_botAction.sendSmartPrivateMessage(sender, "You cannot gamble while duelling."); return "ERROR"; } if (command.contains(":")) { String[] parsed = command.split(":"); if (parsed.length != 2) { m_botAction.sendPrivateMessage(sender, "Format: !fruit 10:5 (Bet 10 x5 times) or !fruit 50 (Bet 50)"); return "ERROR"; } try { bet = Integer.parseInt(parsed[0]); iterations = Integer.parseInt(parsed[1]); } catch(Exception e) { m_botAction.sendPrivateMessage(sender, "Format: !fruit 10:5 (Bet 10 x5 times) or !fruit 50 (Bet 50)"); return "ERROR"; } } else { try { bet = Integer.parseInt(command); } catch(Exception e) { m_botAction.sendPrivateMessage(sender, "Provide a # to use the fruit machine (between 10 and 1500). E.g., !fruit 50, or !fruit 50:5 to play 5 times for 50."); return "ERROR"; } } if (bet < 10 || bet > 1500) { m_botAction.sendPrivateMessage(sender, "Provide an amount between 10 and 1500. (To bet larger amounts, use !fruit amt:times, e.g., !fruit 100:10 to bet 100 for 10 total pulls of the fruit machine)"); return "ERROR"; } if (iterations > 10 || iterations < 1) { m_botAction.sendPrivateMessage(sender, "Bot only accepts 10 bets at a time maximum (and, of course, 1 minimum)."); return "ERROR"; } PubPlayer pp = playerManager.getPlayer(sender, false); if (pp == null ) { m_botAction.sendPrivateMessage(sender, "Can't locate you. Try entering pub."); return "ERROR"; } if (!nonCommandPlay && pp.getMoney() < (bet * iterations)) { m_botAction.sendSmartPrivateMessage(sender, "You don't have $" + bet + " to bet."); return "ERROR"; } for (int j = 0; j < iterations; j++) { Random r = new Random(); int[] slots = new int[3]; for (int i = 0; i < 3; i++) slots[i] = r.nextInt(10); int winFactor = 0; String winMsg = ""; if (slots[0] == slots[1] && slots[1] == slots[2]) { switch (slots[0]) { case 0: winFactor = 5; winMsg = "YOU'RE BEING WATCHED JACKPOT!"; break; case 1: winFactor = 20; winMsg = "> WARBIRD JACKPOT! <"; break; case 2: winFactor = 75; winMsg = ">>>> !!! JAVELIN JACKPOT !!! <<<"; break; case 3: winFactor = 45; winMsg = ">> SPIDER JACKPOT!! <<"; break; case 4: winFactor = 200; winMsg = ">>>>>>>>> !!!! OMGOMGOMG .. YES!! LEVIATHAN JACKPOT !!!!! <<<<<<<<"; break; case 5: winFactor = 60; winMsg = ">>> !!!TERRIER JACKPOT!!! <<<"; break; case 6: winFactor = 10; winMsg = "WEASEL JACKPOT!!"; break; case 7: winFactor = 30; winMsg = ">> LANCASTER JACKPOT!! <<"; break; case 8: winFactor = 15; winMsg = "SHARK JACKPOT!"; break; case 9: winFactor = 100; winMsg = ">>>>>>> !!!! YEAHHHHHH!! NIGHTWASP JACKPOT !!!! <<<<<<"; break; } } else { int[] hits = new int[10]; for (int i = 0; i < 10; i++) { for (int y = 0; y < 3; y++) if (slots[y] == i) hits[i]++; } if (hits[1] == 1 && hits[3] == 1 && hits[7] == 1) { winFactor = 5; winMsg = "All Fighter Matchup!"; } else if (hits[3] + hits[7] == 3) { winFactor = 3; winMsg = "Basefighter Matchup!"; } else if (hits[5] == 1 && hits[3] == 1 && hits[8] == 1) { winFactor = 7; winMsg = "Basing Team Matchup!"; } else if (hits[5] == 1 && hits[7] == 1 && hits[8] == 1) { winFactor = 6; winMsg = "Alt. Basing Matchup!"; } else if (hits[2] == 1 && hits[4] == 1 && hits[9] == 1) { winFactor = 5; winMsg = "Bombing Run Matchup!"; } else if (hits[4] == 1 && hits[6] == 1 && hits[8] == 1) { winFactor = 4; winMsg = "Sneaky Team Matchup!"; } else if (hits[4] == 2 && hits[5] == 1 ) { winFactor = 3; winMsg = "Double LeviTerr Matchup!"; } else if (hits[4] == 1 && hits[5] >= 1 ) { winFactor = 2; winMsg = "LeviTerr Matchup!"; } else if (hits[5] >= 1) { // Each Terr has a 25% chance of giving a free play for (int k = 0; k < hits[5]; k++) if (r.nextInt(4) == 0) winFactor = 1; } } String rollmsg = "[" + Tools.centerString( getShipNameSpecial(slots[0]), 8 ).toUpperCase() + "] " + "[" + Tools.centerString( getShipNameSpecial(slots[1]), 8 ).toUpperCase() + "] " + "[" + Tools.centerString( getShipNameSpecial(slots[2]), 8 ).toUpperCase() + "] "; if (winFactor > 0) { if (winFactor > 1) { if (winFactor >= 5) { Player p = m_botAction.getPlayer( pp.getPlayerName() ); if (p != null && p.getShipType() != Tools.Ship.SPECTATOR && ( pp.getLastDeath() + (Tools.TimeInMillis.MINUTE * 1) > System.currentTimeMillis() )) { winFactor++; } } rollmsg += " $$ " + (bet * winFactor) + " $$"; // //[ SPID ] [ SPID ] [ LANC ] m_botAction.sendPrivateMessage(sender, Tools.centerString( "WIN! " + winMsg + " WIN!", 50 ), Tools.Sound.VICTORY_BELL ); winnings += ((bet * winFactor) - bet); fruitStats[0] += ((bet * winFactor) - bet); } else { if (!nonCommandPlay) rollmsg += "(free play)"; //m_botAction.sendPrivateMessage(sender, "A Terr has ported you to safety; you keep your bet." ); } } else { rollmsg += "(no win)"; if (!nonCommandPlay) { winnings -= bet; fruitStats[1] += bet; } } if (nonCommandPlay) { if (winnings > 0) pp.setMoney( pp.getMoney() + winnings ); return rollmsg; // Non-!fruit plays are single plays only } m_botAction.sendPrivateMessage(sender, rollmsg); } pp.setMoney( pp.getMoney() + winnings ); return ""; }
Comment