Update SR

This commit is contained in:
Ocame
2021-06-06 01:17:50 +02:00
parent 67dffe9c13
commit eae3bc233e
5 changed files with 221 additions and 37 deletions

View File

@ -29,14 +29,14 @@ public class db_connect extends DB.base {
close();
}
public void insertDice(String userName, String userId, String command, String result, String kanal) {
public void insertDice(String userName, String userId, String command, String result, String kanal, long MsgID, String wurfdaten) {
if(!isActive())
return;
open();
try {
conn = getConn();
String SQL_INSERT = "INSERT INTO shadowrun_log (benutzer, benutzerId, wurf, ergebnis, kanal) VALUES (?,?,?,?,?)";
String SQL_INSERT = "INSERT INTO shadowrun_log (benutzer, benutzerId, wurf, ergebnis, kanal, msgId, wurfdaten) VALUES (?,?,?,?,?,?,?)";
PreparedStatement preparedStatement = conn.prepareStatement(SQL_INSERT);
preparedStatement.setString(1, userName);
@ -44,6 +44,8 @@ public class db_connect extends DB.base {
preparedStatement.setString(3, command);
preparedStatement.setString(4, result);
preparedStatement.setString(5, kanal);
preparedStatement.setLong(6, MsgID);
preparedStatement.setString(7, wurfdaten);
preparedStatement.executeUpdate();
}
@ -131,6 +133,36 @@ public class db_connect extends DB.base {
close();
return;
}
public Map<String, String> getMesssage(Long MsgId) {
Map<String, String> result = new HashMap<>();
if(!isActive()) {
return result;
}
result.put("lang", "de");
open();
try {
conn = getConn();
String SQL_SELECT = "SELECT * FROM shadowrun_log where MsgID = ?";
PreparedStatement preparedStatement = conn.prepareStatement(SQL_SELECT);
preparedStatement.setLong(1, MsgId);
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
result.put("benutzerId", rs.getString("benutzerId"));
result.put("wurfdaten", rs.getString("wurfdaten"));
}
}
catch (SQLException e) {
e.printStackTrace();
}
close();
return result;
}
}
/*

View File

@ -1,10 +1,15 @@
package Shadowrun;
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.entities.ChannelType;
import net.dv8tion.jda.core.entities.User;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.ChannelType;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.MessageChannel;
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 net.dv8tion.jda.api.requests.restaction.MessageAction;
import java.awt.*;
@ -45,6 +50,7 @@ public class dice extends ListenerAdapter {
this.prefixZitat = "/zitat";
this.prefixCId = "/cid";
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." +
@ -89,9 +95,9 @@ public class dice extends ListenerAdapter {
}
User author = event.getAuthor();
if (!author.isBot()) {
if (event.getMessage().getContentRaw().startsWith(this.prefixSr))
this.roll(event);
this.srroll(event);
else if (event.getMessage().getContentRaw().startsWith(this.prefixIni))
this.ini(event);
else if (event.getMessage().getContentRaw().startsWith(this.prefixTest))
@ -100,9 +106,36 @@ public class dice extends ListenerAdapter {
this.zitat(event);
else if (event.getMessage().getContentRaw().startsWith(this.prefixCId))
this.cid(event);
}
}
/*@Override
public void onMessageReactionAdd(MessageReactionAddEvent event) {
User user = event.getUser();
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;
}
if (!user.isBot()) {
if(event.getReactionEmote().getId().equals("517528156014510111")) { // SR Reaktion - reroll
reaktionRerollEdge(event);
}
else if(event.getReactionEmote().getId().equals("517545127376322596")) { // ausgedehnte probe
extensionroll(event);
}
}
}*/
/**
* rolltest
*
@ -164,23 +197,17 @@ public class dice extends ListenerAdapter {
}
}
/**
* rolltest
*
* @param event JDA Event
*/
private void roll(MessageReceivedEvent 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 edge = false;
@ -232,7 +259,6 @@ public class dice extends ListenerAdapter {
try {
diceart = Integer.parseInt(diceInterpreter[1]);
numberOfDice = Integer.parseInt(diceInterpreter[0]);
verteilung = new int[diceart];
}
catch (NumberFormatException e) {
String message = activLang.error;
@ -260,14 +286,53 @@ public class dice extends ListenerAdapter {
}
}
srrollOut(numberOfDice, diceart, edge, event.getChannel(), event.getAuthor(), getEffectiveName(event), event.getMessage().getContentRaw(), -1, 0, event.getJDA());
}
catch (NumberFormatException e) {
event.getChannel().sendMessage("Nope").queue();
}
catch (Exception e) {
System.out.println("problem: " + e.getMessage());
}
}
/**
* srrollOut
*
* @param numberOfDice
* @param diceart
* @param edge
* @param channel
* @param user
* @param effectiveName
* @param inputMessage
* @param hitBasis
* @param type
*/
private void srrollOut(int numberOfDice, int diceart, boolean edge, MessageChannel channel, User user, String effectiveName, String inputMessage, int hitBasis, int type, JDA jda) {
EmbedBuilder outputBox = new EmbedBuilder();
int[] verteilung = new int[diceart];
int dice1;
StringBuilder result = new StringBuilder("");
StringBuilder rollString = new StringBuilder("");
int hits = 0;
boolean glitches = false;
try {
if(numberOfDice <= 0) {
String message = activLang.noNegativ;
event.getChannel().sendMessage(getAsMention(event) + message).queue();
channel.sendMessage(user.getAsMention() + message).queue();
return;
}
int bonusEdegeDice = 0;
int dicecorrection = hitBasis < 0 ? 0 : hitBasis;
for(int i = 0; i < numberOfDice+bonusEdegeDice; i++) {
dice1 = new Random().nextInt(diceart);
if(edge && dice1 == 5)
@ -282,15 +347,15 @@ public class dice extends ListenerAdapter {
result.append(dice1+1);
result.append(" ");
}
if (verteilung[0] > (numberOfDice+bonusEdegeDice)/2f) { // Patzer nur bei über er Hälfte an 1er
if (verteilung[0] > (numberOfDice+bonusEdegeDice+dicecorrection)/2f) { // Patzer nur bei über er Hälfte an 1er
glitches = true;
}
if(hits == 0 && !glitches) { // kein Erfolg, kein Patzer
if(hits+dicecorrection == 0 && !glitches) { // kein Erfolg, kein Patzer
outputBox.setColor(Color.gray);
}
else if(hits == 0 && glitches) { // kritischer Patzer
else if(hits+dicecorrection == 0 && glitches) { // kritischer Patzer
outputBox.setColor(Color.red);
}
else if(glitches) { // Patzer
@ -304,30 +369,64 @@ public class dice extends ListenerAdapter {
if(bonusEdegeDice > 0) {
addition = " + " + bonusEdegeDice + activLang.dice + diceart;
}
String message = "";
if(type == 1) {
message = activLang.resultText;
//%numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%";
message = message.replace("%numberOfDice%", String.valueOf(numberOfDice)).replace("%diceart%", String.valueOf(diceart)).replace("%EdgeDice%", addition).replace("%hits%", String.valueOf(hits) + "\t Gesamt: " + (hits + hitBasis)).replace("%oneHits%", String.valueOf(verteilung[0]));
outputBox.setTitle(effectiveName + " Edgereroll " + message);
}
if(type == 2) {
message = activLang.resultTextExtent;
//%numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%";
message = message.replace("%numberOfDice%", String.valueOf(numberOfDice)).replace("%diceart%", String.valueOf(diceart)).replace("%EdgeDice%", addition).replace("%hits%", String.valueOf(hits) + "\t Gesamt: " + (hits + hitBasis)).replace("%oneHits%", String.valueOf(verteilung[0]));
outputBox.setTitle(effectiveName + " Ausgedehnt " + message);
}
else {
message = activLang.resultText;
//%numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%";
message = message.replace("%numberOfDice%", String.valueOf(numberOfDice)).replace("%diceart%", String.valueOf(diceart)).replace("%EdgeDice%", addition).replace("%hits%", String.valueOf(hits)).replace("%oneHits%", String.valueOf(verteilung[0]));
outputBox.setTitle(effectiveName + message);
}
String message = activLang.resultText;
//%numberOfDice%%dice%%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%";
message = message.replace("%numberOfDice%", String.valueOf(numberOfDice)).replace("%diceart%", String.valueOf(diceart)).replace("%EdgeDice%", addition).replace("%hits%", String.valueOf(hits)).replace("%oneHits%", String.valueOf(verteilung[0]));
outputBox.setTitle(getEffectiveName(event) + message);
outputBox.setDescription("(" + result.toString().trim() + ")");
//outputBox.appendDescription("\r" + jda.getEmoteById("517528156014510111").getAsMention() + " Edge reroll");
//outputBox.appendDescription("\r" + jda.getEmoteById("517545127376322596").getAsMention() + " Ausgedehnte Probe");
//JDA::getEmoteById();
for(int i = 0; i < diceart; i++) {
float pro = verteilung[i]*100f/numberOfDice;
//outputBox.addField(Integer.toString(i+1), Integer.toString(verteilung[i]) + " - " + String.format("%.2f", pro) + "%", true);
}
event.getChannel().sendMessage(outputBox.build()).queue();
if(event.getChannelType() == ChannelType.PRIVATE) {
db.insertDice(event.getAuthor().getName(), event.getAuthor().getId(), event.getMessage().getContentRaw(), result.toString().trim(), event.getChannel().getId());
}
else {
db.insertDice(event.getMember().getEffectiveName(), event.getMember().getUser().getId(), event.getMessage().getContentRaw(), result.toString().trim(), event.getChannel().getId());
}
rollString.append(numberOfDice).append("|").append(hits+dicecorrection).append("|").append(verteilung[0]);
//event.getChannel().sendMessage(outputBox.build()).queue();
long[] messageId = new long[1];
boolean finalEdge = edge;
String finalRollData = rollString.toString();
channel.sendMessage(outputBox.build()).queue(message1 -> {
if(!finalEdge && type == 0) {
//message1.addReaction("sr:517528156014510111").queue();
}
if(!finalEdge && (type == 0 || type == 2)) {
//message1.addReaction("test:517545127376322596").queue();
}
messageId[0] = message1.getIdLong();
if(channel.getType() == ChannelType.PRIVATE) {
db.insertDice(user.getName(), user.getId(), inputMessage, result.toString().trim(), channel.getId(), messageId[0], finalRollData);
}
else {
db.insertDice(user.getName(), user.getId(), inputMessage, result.toString().trim(), channel.getId(), messageId[0], finalRollData);
}
});
}
catch (NumberFormatException e) {
event.getChannel().sendMessage("Nope").queue();
channel.sendMessage("Nope").queue();
}
catch (Exception e) {
System.out.println("problem: " + e.getMessage());
@ -489,4 +588,49 @@ public class dice extends ListenerAdapter {
}
return event.getMember().getAsMention() + " ";
}
private void reaktionRerollEdge(MessageReactionAddEvent event) {
Map<String, String> wurf = db.getMesssage(event.getMessageIdLong());
if(!wurf.containsKey("benutzerId")) {
return;
}
else if(!wurf.get("benutzerId").equals(event.getUserId())) {
return;
}
String[] wurfParts = wurf.get("wurfdaten").split("\\|");
int dice = Integer.parseInt(wurfParts[0]);
int hits = Integer.parseInt(wurfParts[1]);
int miss = Integer.parseInt(wurfParts[2]);
String effectName = "";
if(event.getMember().getEffectiveName() != "") {
effectName = event.getMember().getEffectiveName();
}
srrollOut(dice-hits, 6, false, event.getChannel(), event.getUser(), effectName, "Edege Reroll", hits, 1, event.getJDA());
}
private void extensionroll(MessageReactionAddEvent event) {
Map<String, String> wurf = db.getMesssage(event.getMessageIdLong());
if(!wurf.containsKey("benutzerId")) {
return;
}
else if(!wurf.get("benutzerId").equals(event.getUserId())) {
return;
}
String[] wurfParts = wurf.get("wurfdaten").split("\\|");
int dice = Integer.parseInt(wurfParts[0]);
int hits = Integer.parseInt(wurfParts[1]);
int miss = Integer.parseInt(wurfParts[2]);
String effectName = "";
if(event.getMember().getEffectiveName() != "") {
effectName = event.getMember().getEffectiveName();
}
if(dice == 1) {
event.getChannel().sendMessage(event.getUser().getAsMention() + " mehr geht nicht, du hast **" + hits + "** Erfolge").queue();
}
else {
srrollOut(dice - 1, 6, false, event.getChannel(), event.getUser(), effectName, "Extent Roll", hits, 2, event.getJDA());
}
}
}

View File

@ -1,6 +1,6 @@
package Shadowrun;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
public class help {

View File

@ -13,6 +13,8 @@ public class language {
public String noNegativ = " es darf kein Negativen Wurf geben";
public String dice = "w";
public String resultText = " %numberOfDice%w%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%";
public String resultTextExtent = " %numberOfDice%w%diceart% %EdgeDice%:\tErfolge: %hits%\tMisserfolge: %oneHits%";
public String basisresultText = " %numberOfDice%w%diceart%:";
public language() {
this.readConfig();
@ -54,6 +56,10 @@ public class language {
this.dice = config.getProperty(lang + ".dice");
if(config.containsKey(lang + ".resultText"))
this.resultText = config.getProperty(lang + ".resultText");
if(config.containsKey(lang + ".resultTextExtent"))
this.resultText = config.getProperty(lang + ".resultTextExtent");
if(config.containsKey(lang + ".basisresultText"))
this.resultText = config.getProperty(lang + ".basisresultText");
}
else {
@ -65,6 +71,8 @@ public class language {
config.setProperty(lang + ".noNegativ", this.noNegativ);
config.setProperty(lang + ".dice", this.dice);
config.setProperty(lang + ".resultText", this.resultText);
config.setProperty(lang + ".resultTextExtent", this.resultTextExtent);
config.setProperty(lang + ".basisresultText", this.basisresultText);
config.store(output, null);
}

View File

@ -1,6 +1,6 @@
package Shadowrun;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import java.util.Scanner;