summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/PlayerHealths.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/uomc/mineshaft/PlayerHealths.java')
-rw-r--r--src/main/java/net/uomc/mineshaft/PlayerHealths.java131
1 files changed, 73 insertions, 58 deletions
diff --git a/src/main/java/net/uomc/mineshaft/PlayerHealths.java b/src/main/java/net/uomc/mineshaft/PlayerHealths.java
index 395f71a..0b3af79 100644
--- a/src/main/java/net/uomc/mineshaft/PlayerHealths.java
+++ b/src/main/java/net/uomc/mineshaft/PlayerHealths.java
@@ -1,13 +1,12 @@
package net.uomc.mineshaft;
-import java.io.File;
-import java.sql.SQLException;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
+import java.util.Collections;
import com.mouldycheerio.dbot.commands.CommandDetails;
-import com.mouldycheerio.dbot.util.DatabaseUtils;
import com.mouldycheerio.dbot.util.PeelingUtils;
import com.vdurmont.emoji.EmojiManager;
import com.vdurmont.emoji.EmojiParser;
@@ -21,43 +20,41 @@ import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
public class PlayerHealths {
private static final String HP_TABLE = "hp";
- private static final String HP_EMOJI = "<:hp:1428837195329962115>";
- private String healthDb;
+ public static final String HP_EMOJI = "<:hp:1428837195329962115>";
private Mineshaft bot;
- private static final long MAX_HP = 20;
+ public static final long MAX_HP = 20;
+
+ private SavedStat healthStat;
public PlayerHealths(Mineshaft bot) {
this.bot = bot;
- healthDb = (new File(bot.getDatadir(), "players.db")).getPath();
- initDB();
+ healthStat = bot.getPlayerStats().getStat(HP_TABLE);
+ healthStat.setDefaultValue(MAX_HP);
bot.getCommandController().addCommand(CommandDetails.from("hp,health"), (e, b, args) -> {
Member member = PeelingUtils.getSingleMentionFromArgs(e);
+
+
+ if (e.getMember().getId().equals(b.getOwnerID())){
+ Optional<Long> amount = Arrays.asList(args).stream().filter(s -> PeelingUtils.isLong(s)).map(s -> Long.parseLong(s))
+ .findFirst();
+ if (!amount.isEmpty()) {
+ setHP(member, amount.get());
+ }
+ }
+
b.sendMessage(e, member.getEffectiveName() + "'s health", (member.equals(e.getMember()) ? "Your " : member.getEffectiveName() + "'s") + " health: " + getHPString(member));
});
}
public void setHP(Member member, long value) {
- try {
- DatabaseUtils.putInKVtable(healthDb, HP_TABLE, member.getId() + ":" + member.getGuild().getId(), value);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
- private long getHP(String member, String guild) {
- try {
- return DatabaseUtils.getInKVtable(healthDb, HP_TABLE, member + ":" + guild);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return MAX_HP;
+ healthStat.set(member, value);
}
public long getHP(Member member) {
- return getHP(member.getId(), member.getGuild().getId());
+ return healthStat.get(member);
}
public String getHPString(Member member) {
@@ -68,65 +65,82 @@ public class PlayerHealths {
return "**" + hp + HP_EMOJI + "**";
}
- public long damage(MessageReceivedEvent event, Member member, long amount, String reason) {
- long hp = getHP(member);
- hp -= amount;
- if (hp <= 0) {
- killPlayer(event, member, reason);
- setHP(member, MAX_HP);
- } else {
- setHP(member, hp);
+ public long calculateDamage(Member member, long damage) {
+ return calculateDamage(member, null, true, damage);
+ }
+
+ public long calculateDamage(Member member, boolean countArmour, long damage) {
+ return calculateDamage(member, null, countArmour, damage);
+ }
+
+ public long calculateDamage(Member target, Member attacker, boolean countArmour, long damage) {
+ return calculateDamage(target, attacker, countArmour, true, damage);
+ }
+
+ public long calculateDamage(Member target, Member attacker, boolean countArmour, boolean randomise, long damage) {
+ long bonus = 0;
+ if (attacker != null) {
+ bonus = bot.getSword(attacker).getDamageBonus();
}
- return hp;
+ double n = 1;
+
+ if (randomise) {
+ n = Math.random();
+ }
+
+ return (long) (n * Math.abs(damage)) + bonus - bot.getArmour(target).getDamageReduction();
+ }
+
+ public long damage(MessageReceivedEvent event, Member member, long amount, String reason) {
+ return damageAndDropIfKill(event, member, amount, reason, Collections.emptyMap());
}
public long damageAndDropIfKill(MessageReceivedEvent event, Member member, long amount, String reason, Map<MineshaftItem, Long> items) {
- long hp = getHP(member);
- hp -= amount;
- if (hp <= 0) {
- killPlayerAndDrop(event, member, reason, items);
- setHP(member, MAX_HP);
- } else {
+
+ long hp = getHP(member) - amount;
+
+ if (hp > 0) {
setHP(member, hp);
+ return hp;
}
+
+ killPlayerAndDrop(event, member, reason, items);
+
return hp;
}
public long damageAndDropIfKill(Message message, Member member, long amount, String reason, Map<MineshaftItem, Long> items) {
long hp = getHP(member);
hp -= amount;
- if (hp <= 0) {
- killPlayerAndDrop(message, member, reason, items);
- setHP(member, MAX_HP);
- } else {
+
+ if (hp > 0) {
setHP(member, hp);
+ return hp;
}
+
+ killPlayerAndDrop(message, member, reason, items);
return hp;
}
public long damage(Message message, Member member, long amount, String reason) {
- long hp = getHP(member);
- hp -= amount;
- if (hp <= 0) {
- killPlayer(message, member, reason);
- setHP(member, MAX_HP);
- } else {
+ long hp = getHP(member) - amount;
+
+ if (hp > 0) {
setHP(member, hp);
+ return hp;
}
- return hp;
- }
- private void initDB() {
- try {
- DatabaseUtils.createSimpleKVtable(healthDb, HP_TABLE);
- } catch (SQLException e) {
- }
+ killPlayer(message, member, reason);
+ return hp;
}
public void killPlayerAndDrop(Message message, Member member, String deathMessage, Map<MineshaftItem, Long> items) {
+ setHP(member, MAX_HP);
Map<MineshaftItem, Long> drops = DropUtil.getDeathDrops(bot, member);
- drops = bot.sumItems(drops, items);
+
+ if (!items.isEmpty())
+ drops = bot.sumItems(drops, items);
bot.removeItems(member, drops);
@@ -137,6 +151,7 @@ public class PlayerHealths {
DropUtil.spawnDropEdit(bot, message, embed, drops);
return;
}
+
String title = getDeathTitle(member, deathMessage);
MessageEmbed embed = DropUtil.getDropEmbed(bot, drops, deathMessage, title);
@@ -148,10 +163,10 @@ public class PlayerHealths {
}
public void killPlayer(MessageReceivedEvent event, Member member, String deathMessage ) {
- killPlayerAndDrop(event, member, deathMessage, new HashMap<>());
+ killPlayerAndDrop(event, member, deathMessage, Collections.emptyMap());
}
public void killPlayer(Message message, Member member, String deathMessage ) {
- killPlayerAndDrop(message, member, deathMessage, new HashMap<>());
+ killPlayerAndDrop(message, member, deathMessage, Collections.emptyMap());
}
private String getDeathTitle(Member member, String deathMessage) {