package Earthdawn; import Shadowrun.db_connect; import Shadowrun.help; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.channel.ChannelType; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import java.awt.*; import java.lang.reflect.Array; import java.security.SecureRandom; import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; public class dice extends ListenerAdapter { private String prefixSr; private String prefixIni; private language langDe = new language("de"); private language langEn = new language("en"); private help helpDe = new help("de"); private help helpEn = new help("En"); private language activLang; private help activHelp; private db_connect db; private Map channelList = new HashMap<>(); private step dieRoll = new step(); public dice() { this.prefixSr = "/ed"; //this.prefixIni = "/ini"; helpDe.add("Alle Befehle können in einen Channel geschrieben werden oder per Direkt Nachricht gesendet"); helpDe.add(this.prefixSr + "Zahl", "Würfelt Zahl x W6. Gewürfelte 5. und 6. Werden als Erfolge gezählt, 1. als Misserfolge.\n" + "Erreicht oder übersteigt die Anzhal der 1. die hälfte der gewürfelten Würfel, zählt dies als ein Patzer. Gibt es mind. 1 Erfolg wird die Markierung der Ausgabe Gelb." + "wird aber kein Erfolg gewürfelt zählt dies als Kritischer Patzer und die Markierung wird Rot **Wichtig: Vor- und Nachteile die Einfluss auf die Patzer Changse haben werden nicht berücksichtigt"); helpDe.add(this.prefixSr + "+ Zahl", "Gleich wie bei " + this.prefixSr + "Zahl. Mit dem Unterschied dass alle gewürfelten 6. ein zuzätlichen Würfel generien."); helpDe.add(this.prefixSr + " Zahl_1 + Zahl_2", "Würfelt Zahl_2 x W6 und addiert Zahl_1 hinzu, um die Initative zu bestimmen"); //helpDe.add(this.prefixIni + " Zahl_1 + Zahl_2", "Synonym für " + this.prefixSr + " Zahl_1 + Zahl_2"); this.db = new db_connect(); } @Override public void onMessageReceived(MessageReceivedEvent event) { if ((!event.getMessage().getContentRaw().startsWith(this.prefixSr)) || (event.getChannelType() != ChannelType.TEXT && event.getChannelType() != ChannelType.PRIVATE)) { return; } if(!channelList.containsKey(event.getChannel().getId())) { Map Einstellungen = db.getChannelSettings(event.getChannel().getId()); channelList.put(event.getChannel().getId(), Einstellungen.get("lang").toString()); } switch (channelList.get(event.getChannel().getId())) { case "de": activLang = langDe; break; case "en": activLang = langEn; break; default: activLang = langDe; } User author = event.getAuthor(); if (!author.isBot() || true) { if (event.getMessage().getContentRaw().startsWith(this.prefixSr)) this.srroll(event); } } /** * rolltest * * @param event JDA Event */ private void rollTest(MessageReceivedEvent event) { EmbedBuilder test = new EmbedBuilder(); test.setTitle("Das ist ein Test"); test.setColor(Color.red); test.setDescription("Text " + getAsMention(event)); int[] verteilung = new int[6]; int[] verteilung2 = new int[6]; int[] verteilung3 = new int[6]; int dice1, dice2, dice3; try { String[] MsgParts_exl_Mention = event.getMessage().getContentRaw().split(" "); int rounds = Integer.parseInt(MsgParts_exl_Mention[1]); if(rounds <= 0) { event.getChannel().sendMessage("Nope").queue(); return; } for(int i = 0; i < rounds; i++) { dice1 = new Random().nextInt(6); dice2 = new SecureRandom().nextInt(6); //dice3 = new ThreadLocalRandom().current().nextInt(6); dice3 = ThreadLocalRandom.current().nextInt(0, 6); verteilung[dice1]++; verteilung2[dice2]++; verteilung3[dice3]++; } for(int i = 0; i < 6; i++) { float pro = verteilung[i]*100f/rounds; test.addField(Integer.toString(i+1), Integer.toString(verteilung[i]) + " - " + String.format("%.2f", pro) + "%", true); } test.addBlankField(false); for(int i = 0; i < 6; i++) { float pro = verteilung2[i]*100f/rounds; test.addField(Integer.toString(i+1), Integer.toString(verteilung2[i]) + " - " + String.format("%.2f", pro) + "%", true); } test.addBlankField(false); for(int i = 0; i < 6; i++) { float pro = verteilung3[i]*100f/rounds; test.addField(Integer.toString(i+1), Integer.toString(verteilung3[i]) + " - " + String.format("%.2f", pro) + "%", true); } event.getChannel().sendMessage(test.build().toString()).queue(); } catch (NumberFormatException e) { event.getChannel().sendMessage("Nope").queue(); } catch (Exception e) { System.out.println("problem: " + e.getMessage()); } } /** * rolltest * * @param event JDA Event */ private void srroll(MessageReceivedEvent event) { EmbedBuilder outputBox = new EmbedBuilder(); int[] verteilung = new int[6]; int dice1; int numberOfDice = 1; int diceart = 6; StringBuilder result = new StringBuilder(""); int hits = 0; boolean glitches = false; boolean karma = false; boolean doppelkarma = false; boolean weiheJunger = false; boolean doppelweiheJunger = false; boolean weiheAnheanger = false; boolean doppelweiheAnheanger = false; boolean weiheVorbild = false; boolean doppelweiheVorbild = false; int stufe = 0; int modifier = 1; try { dieRoll.reset(); // Alte Erkennung für Karma ect // Prüfen ob Karma wurf if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"+") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" +")) { karma = true; } if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"++") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" ++")) { doppelkarma = true; } // Prüfen ob weihepunkte wurf if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"j") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" j")) { weiheJunger = true; } if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"jj") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" jj")) { doppelweiheJunger = true; } if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"a") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" a")) { weiheAnheanger = true; } if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"aa") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" aa")) { doppelweiheAnheanger = true; } if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"v") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" v")) { weiheVorbild = true; } if(event.getMessage().getContentRaw().startsWith(this.prefixSr+"vv") || event.getMessage().getContentRaw().startsWith(this.prefixSr+" vv")) { doppelweiheVorbild = true; } // korrikiert Karama eingabe von /ed + zu /ed+ String ContentRaw = event.getMessage().getContentRaw(); if(event.getMessage().getContentRaw().startsWith(this.prefixSr+" +")) { ContentRaw = ContentRaw.replace(this.prefixSr+" +", this.prefixSr+"+ ").replace(" ", " "); } if(event.getMessage().getContentRaw().startsWith(this.prefixSr+" j")) { ContentRaw = ContentRaw.replace(this.prefixSr+" j", this.prefixSr+"j ").replace(" ", " "); } if(event.getMessage().getContentRaw().startsWith(this.prefixSr+" a")) { ContentRaw = ContentRaw.replace(this.prefixSr+" a", this.prefixSr+"a ").replace(" ", " "); } if(event.getMessage().getContentRaw().startsWith(this.prefixSr+" v")) { ContentRaw = ContentRaw.replace(this.prefixSr+" v", this.prefixSr+"v ").replace(" ", " "); } String[] MsgParts = ContentRaw.split(" ", 2); if(MsgParts.length < 2) { // Leerer Befehl String message = activLang.emptyCommand; message = message.replace("%command%", this.prefixSr); event.getChannel().sendMessage(getAsMention(event) + message).queue(); return; } String DicePart = MsgParts[1].trim().toLowerCase(); if(MsgParts[1].trim().matches(".*[^0-9].*")) { // es wurden andere zeichen als Zahlen gefunden if(DicePart.equals("de")) { activLang = langDe; channelList.put(event.getChannel().getId(), "de"); event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); return; } else if(DicePart.equals("en")) { activLang = langEn; channelList.put(event.getChannel().getId(), "en"); event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue(); return; } for (int i = 0; i < DicePart.length(); i++) { if (DicePart.charAt(i) == 'k') { dieRoll.addKarma(1); } else if (DicePart.charAt(i) == 'j') { dieRoll.addWeiheA(1); } else if (DicePart.charAt(i) == 'a') { dieRoll.addWeiheJ(1); } else if (DicePart.charAt(i) == 'v') { dieRoll.addWeiheV(1); } } DicePart = DicePart.replace("k", ""); DicePart = DicePart.replace("j", ""); DicePart = DicePart.replace("a", ""); DicePart = DicePart.replace("v", ""); String[] iniParts = DicePart.split("[\\+\\-]", 2); messageInterpreter mI = new messageInterpreter(event, activLang); rollStufe(Integer.parseInt(iniParts[0].replaceAll("[^0-9]", ""))); if(iniParts.length > 1) { // Nachricht hat kein + Zeichen rollStufe(Integer.parseInt(iniParts[0].replaceAll("[^0-9]", ""))); if(DicePart.matches("\\-")) // Prüft auf Negativen Modifizier wenn Ja modifier = -1; dieRoll.addModifier(Integer.parseInt(iniParts[1].trim())*modifier); } } else { try { rollStufe(Integer.parseInt(DicePart)); } catch (NumberFormatException e) { String message = activLang.error; message = message.replace("%command%", MsgParts[1].trim()); event.getChannel().sendMessage(getAsMention(event) + message).queue(); return; } } if(karma) dieRoll.addKarma(1); if(doppelkarma) dieRoll.addKarma(1); if(weiheAnheanger) dieRoll.addWeiheA(1); if(doppelweiheAnheanger) dieRoll.addWeiheA(1); if(weiheJunger) dieRoll.addWeiheJ(1); if(doppelweiheJunger) dieRoll.addWeiheJ(1); if(weiheVorbild) dieRoll.addWeiheV(1); if(doppelweiheVorbild) dieRoll.addWeiheV(1); dieRoll.roll(); if(dieRoll.isGlitches()) { // Patzer outputBox.setColor(Color.red); } else { // Erfolg outputBox.setColor(Color.green); } String message = activLang.resultText; message = "%rolls%: %hits%"; message = message.replace("%rolls%", dieRoll.getDiceStructur()).replace("%hits%", String.valueOf(dieRoll.getResultInt())); outputBox.setTitle(getEffectiveName(event) + message); outputBox.setDescription("(" + dieRoll.getResultStructur() + ")"); event.getChannel().sendMessageEmbeds(outputBox.build()).queue(); } catch (NumberFormatException e) { event.getChannel().sendMessage("Nope").queue(); } catch (Exception e) { System.out.println("problem: " + e.getMessage()); } } private String getEffectiveName(MessageReceivedEvent event) { if(event.getMember() == null) { return ""; } return event.getMember().getEffectiveName() + " "; } private String getAsMention(MessageReceivedEvent event) { if(event.getMember() == null) { return ""; } return event.getMember().getAsMention() + " "; } private void rollStufe(int stufe) { switch (stufe) { case 1: dieRoll.setW4(1).setModifier(-2); break; case 2: dieRoll.setW4(1).setModifier(-1); break; case 3: dieRoll.setW4(1); break; case 4: dieRoll.setW6(1); break; case 5: dieRoll.setW8(1); break; case 6: dieRoll.setW10(1); break; case 7: dieRoll.setW12(1); break; case 8: dieRoll.setW6(2); break; case 9: dieRoll.setW8(1).setW6(1); break; case 10: dieRoll.setW8(2); break; case 11: dieRoll.setW10(1).setW8(1); break; case 12: dieRoll.setW10(2); case 13: dieRoll.setW12(1).setW10(1); break; case 14: dieRoll.setW12(2); break; case 15: dieRoll.setW12(1).setW6(2); break; case 16: dieRoll.setW12(1).setW8(1).setW6(1); break; case 17: dieRoll.setW12(1).setW8(2); break; case 18: dieRoll.setW12(1).setW10(1).setW8(1); break; default: int w20 = 0; w20 = (int) ((stufe-8)/11); switch ((stufe-8)%11) { case 0: dieRoll.setW20(w20).setW6(2); break; case 1: dieRoll.setW20(w20).setW8(1).setW6(1); break; case 2: dieRoll.setW20(w20).setW8(2); break; case 3: dieRoll.setW20(w20).setW10(1).setW8(1); break; case 4: dieRoll.setW20(w20).setW10(2); break; case 5: dieRoll.setW20(w20).setW12(1).setW10(1); break; case 6: dieRoll.setW20(w20).setW12(2); break; case 7: dieRoll.setW20(w20).setW12(1).setW6(2); break; case 8: dieRoll.setW20(w20).setW12(1).setW8(1).setW6(1); break; case 9: dieRoll.setW20(w20).setW12(1).setW8(2); break; case 10: dieRoll.setW20(w20).setW12(1).setW10(1).setW8(1); break; } } /* diceList[30] = "2W20+2W6"; diceList[31] = "2W20+W8+W6"; diceList[32] = "2W20+2W8"; diceList[33] = "2W20+W10+W8"; diceList[34] = "2W20+2W10"; diceList[35] = "2W20+W12+W10"; diceList[36] = "2W20+2W12"; diceList[37] = "2W20+W12+2W6"; diceList[38] = "2W20+W12+W8+W6"; diceList[39] = "2W20+W12+2W8"; diceList[40] = "2W20+W12+W10+W8"; */ } }