Eardanw Modul hinzugefügt

This commit is contained in:
Ocame
2021-06-06 01:19:47 +02:00
parent 187fe7eb67
commit eeec2af955
4 changed files with 967 additions and 0 deletions

View File

@ -0,0 +1,462 @@
package Earthdawn;
import Shadowrun.db_connect;
import Shadowrun.help;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.ChannelType;
import net.dv8tion.jda.api.entities.User;
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<String, String> 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 gesender werden");
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<String, String> 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()).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 {
if(event.getMessage().getContentRaw().matches(".*[ \\+jav].*")) { // es wurden andere zeichen als Zahlen gefunden
}
// 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.prefixIni);
event.getChannel().sendMessage(getAsMention(event) + message).queue();
return;
}
if(MsgParts[1].trim().matches(".*[^0-9].*")) { // es wurden andere zeichen als Zahlen gefunden
if(MsgParts[1].trim().toLowerCase().equals("de")) {
activLang = langDe;
channelList.put(event.getChannel().getId(), "de");
event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue();
return;
}
else if(MsgParts[1].trim().toLowerCase().equals("en")) {
activLang = langEn;
channelList.put(event.getChannel().getId(), "en");
event.getChannel().sendMessage(getAsMention(event) + activLang.language).queue();
return;
}
String[] iniParts = MsgParts[1].trim().toLowerCase().split("[\\+\\-]", 2);
messageInterpreter mI = new messageInterpreter(event, activLang);
rollStufe(Integer.parseInt(iniParts[0]));
if(iniParts.length > 1) { // Nachricht hat kein + Zeichen
rollStufe(Integer.parseInt(iniParts[0]));
if(MsgParts[1].trim().toLowerCase().matches("\\-")) // Prüft auf Negativen Modifizier wenn Ja
modifier = -1;
dieRoll.addModifier(Integer.parseInt(iniParts[1].trim())*modifier);
}
}
else {
try {
rollStufe(Integer.parseInt(MsgParts[1].trim().toLowerCase()));
}
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().sendMessage(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) {
dieRoll.reset();
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;
case 19:
dieRoll.setW20(1).setW6(2);
break;
case 20:
dieRoll.setW20(1).setW8(1).setW6(1);
break;
case 21:
dieRoll.setW20(1).setW8(2);
break;
case 22:
dieRoll.setW20(1).setW10(1).setW8(1);
break;
case 23:
dieRoll.setW20(1).setW10(2);
break;
case 24:
dieRoll.setW20(1).setW12(1).setW10(1);
break;
case 25:
dieRoll.setW20(1).setW12(2);
break;
case 26:
dieRoll.setW20(1).setW12(1).setW6(2);
break;
case 27:
dieRoll.setW20(1).setW12(1).setW8(1).setW6(1);
break;
case 28:
dieRoll.setW20(1).setW12(1).setW8(2);
break;
case 29:
dieRoll.setW20(1).setW12(1).setW10(1).setW8(1);
break;
case 30:
dieRoll.setW20(2).setW6(1);
break;
case 31:
dieRoll.setW20(2).setW8(1).setW6(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";
*/
}
}