Add level calculation for anura level + smash level
This commit is contained in:
@@ -229,4 +229,8 @@ public class Core {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Level getLevel() {
|
||||||
|
return getMainClass().level;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,6 +194,7 @@ public class Inventories implements Listener {
|
|||||||
}
|
}
|
||||||
final Player player = (Player) event.getWhoClicked();
|
final Player player = (Player) event.getWhoClicked();
|
||||||
Inventory inventory = event.getClickedInventory();
|
Inventory inventory = event.getClickedInventory();
|
||||||
|
if (inventory == null) return;
|
||||||
String invName = inventory.getName();
|
String invName = inventory.getName();
|
||||||
if (invNames.containsKey(invName)) {
|
if (invNames.containsKey(invName)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|||||||
117
src/de/anura/core/API/Level.java
Normal file
117
src/de/anura/core/API/Level.java
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
package de.anura.core.API;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Statistic;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public final class Level {
|
||||||
|
|
||||||
|
private static final HashMap<Player, Integer> anuraLevel = new HashMap<>();
|
||||||
|
private static final HashMap<Player, Integer> smashLevel = new HashMap<>();
|
||||||
|
private static final HashMap<Player, Integer> ffLevel = new HashMap<>();
|
||||||
|
|
||||||
|
public Level() {
|
||||||
|
for (Player P : Bukkit.getOnlinePlayers()) {
|
||||||
|
Core.getMainClass().joinTime.put(P, (int) (System.currentTimeMillis() / 1000));
|
||||||
|
Core.getMainClass().aimTheWaterWins.put(P, 0);
|
||||||
|
}
|
||||||
|
loadLevelAll();
|
||||||
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(Core.getMainClass(), new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
}, 20 * 60, 20 * 60);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveStuffAll() {
|
||||||
|
for (Player P : Bukkit.getOnlinePlayers()) {
|
||||||
|
saveStuff(P);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveStuff(Player P) {
|
||||||
|
int walkedMeters = P.getStatistic(Statistic.WALK_ONE_CM) / 100;
|
||||||
|
int playedTime = (int) ((System.currentTimeMillis() / 1000 - Core.getMainClass().joinTime.get(P)) / 60);
|
||||||
|
Core.getMySql().queryUpdate("UPDATE coreStats "
|
||||||
|
+ "SET onlineTime = onlineTime + " + playedTime + ""
|
||||||
|
+ ", walkedMeters = walkedMeters + " + walkedMeters + ""
|
||||||
|
+ ", aimTheWaterWins = aimTheWaterWins + " + Core.getMainClass().aimTheWaterWins.get(P) + " "
|
||||||
|
+ "WHERE player = (SELECT id FROM players WHERE uuid = '" + P.getUniqueId().toString() + "')");
|
||||||
|
Core.getMainClass().joinTime.put(P, (int) (System.currentTimeMillis() / 1000));
|
||||||
|
P.setStatistic(Statistic.WALK_ONE_CM, 0);
|
||||||
|
Core.getMainClass().aimTheWaterWins.put(P, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadLevelAll() {
|
||||||
|
for (Player P : Bukkit.getOnlinePlayers()) {
|
||||||
|
loadLevel(P);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadLevel(Player P) {
|
||||||
|
try {
|
||||||
|
ResultSet rs = Core.getMySql().querySelect("SELECT level, smashLevel, ffLevel FROM coreStats WHERE player = (SELECT id FROM players WHERE uuid = '" + P.getUniqueId().toString() + "')");
|
||||||
|
rs.first();
|
||||||
|
anuraLevel.put(P, (int) rs.getDouble("level"));
|
||||||
|
smashLevel.put(P, rs.getInt("smashLevel"));
|
||||||
|
ffLevel.put(P, rs.getInt("ffLevel"));
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
System.err.println("Error whilst loading player level");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update() {
|
||||||
|
for (Player P : Bukkit.getOnlinePlayers()) {
|
||||||
|
update(P);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update(Player P) {
|
||||||
|
saveStuff(P);
|
||||||
|
try {
|
||||||
|
String whereClause = " = (SELECT id FROM players WHERE uuid = '" + P.getUniqueId().toString() + "')";
|
||||||
|
ResultSet stats = Core.getMySql().querySelect("SELECT * FROM coreStats WHERE player" + whereClause);
|
||||||
|
ResultSet features = Core.getMySql().querySelect("SELECT count(*) as features FROM coreFeatures WHERE playerId" + whereClause);
|
||||||
|
ResultSet pots = Core.getMySql().querySelect("SELECT count(*) as pots FROM coreFoundPots WHERE player" + whereClause);
|
||||||
|
ResultSet stages = Core.getMySql().querySelect("SELECT count(*) as stages FROM jumpUsers WHERE userId" + whereClause);
|
||||||
|
ResultSet smashClasses = Core.getMySql().querySelect("SELECT count(*) as classes FROM smashClasses WHERE playerId" + whereClause);
|
||||||
|
stats.first();
|
||||||
|
features.first();
|
||||||
|
pots.first();
|
||||||
|
stages.first();
|
||||||
|
smashClasses.first();
|
||||||
|
int time = stats.getInt("onlineTime");
|
||||||
|
double walked = stats.getInt("walkedMeters");
|
||||||
|
int wins = stats.getInt("aimTheWaterWins");
|
||||||
|
double kills = stats.getInt("smashKills");
|
||||||
|
double deaths = stats.getInt("smashDeaths");
|
||||||
|
double killstreak = stats.getInt("smashKillstreak");
|
||||||
|
double smashMoney = stats.getInt("smashMoney");
|
||||||
|
int feature = features.getInt("features");
|
||||||
|
int pot = pots.getInt("pots");
|
||||||
|
int stage = stages.getInt("stages");
|
||||||
|
int classes = smashClasses.getInt("classes");
|
||||||
|
double level = (time * 0.0375 + walked / 300.0 + wins * 400 + feature * 1200 + pot * 200 + stage * 300) / 400.0;
|
||||||
|
double sLevel = ((kills / (deaths + 1)) * kills / 90 + smashMoney / 90 + classes * 5 + (killstreak * killstreak) / 4) / 3 + 1;
|
||||||
|
anuraLevel.put(P, (int) level);
|
||||||
|
smashLevel.put(P, (int) sLevel);
|
||||||
|
Core.getMySql().queryUpdate("UPDATE coreStats SET level = '" + level + "', smashLevel = '" + sLevel + "' WHERE player" + whereClause);
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
System.err.println("SQLException whilst updating player level (" + ex.getLocalizedMessage() + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void updateLevel(Player P) {
|
||||||
|
Core.getMainClass().level.update(P);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getSmashLevel(Player P) {
|
||||||
|
return smashLevel.get(P);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package de.anura.core;
|
package de.anura.core;
|
||||||
|
|
||||||
import de.anura.core.API.Core;
|
import de.anura.core.API.Core;
|
||||||
|
import de.anura.core.API.Level;
|
||||||
import de.anura.core.API.Money;
|
import de.anura.core.API.Money;
|
||||||
import de.anura.core.API.MySQL;
|
import de.anura.core.API.MySQL;
|
||||||
import de.anura.core.API.Tools;
|
import de.anura.core.API.Tools;
|
||||||
@@ -37,10 +38,13 @@ public class AnuraCore extends JavaPlugin {
|
|||||||
public HashMap<Player, Boolean> releaseGolf = new HashMap<>();
|
public HashMap<Player, Boolean> releaseGolf = new HashMap<>();
|
||||||
public HashMap<Player, Entity> golfBall = new HashMap<>();
|
public HashMap<Player, Entity> golfBall = new HashMap<>();
|
||||||
public HashMap<Player, Boolean> disableCommandsAdventure = new HashMap<>();
|
public HashMap<Player, Boolean> disableCommandsAdventure = new HashMap<>();
|
||||||
|
public HashMap<Player, Integer> joinTime = new HashMap<>();
|
||||||
|
public HashMap<Player, Integer> aimTheWaterWins = new HashMap<>();
|
||||||
public Features features;
|
public Features features;
|
||||||
public Permissions perms;
|
public Permissions perms;
|
||||||
public Signs signs;
|
public Signs signs;
|
||||||
public Tools tools;
|
public Tools tools;
|
||||||
|
public Level level;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
@@ -79,6 +83,7 @@ public class AnuraCore extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
sql.queryUpdate("DELETE FROM coreServers WHERE name = '" + this.getConfig().getString("server-name") + "'");
|
sql.queryUpdate("DELETE FROM coreServers WHERE name = '" + this.getConfig().getString("server-name") + "'");
|
||||||
features.reset();
|
features.reset();
|
||||||
|
level.update();
|
||||||
for (Player P : this.sittingPlayer.keySet()) {
|
for (Player P : this.sittingPlayer.keySet()) {
|
||||||
Core.endSitting(P);
|
Core.endSitting(P);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package de.anura.core;
|
|||||||
|
|
||||||
import de.anura.core.API.Core;
|
import de.anura.core.API.Core;
|
||||||
import de.anura.core.API.Inventories;
|
import de.anura.core.API.Inventories;
|
||||||
|
import de.anura.core.API.Level;
|
||||||
import de.anura.core.API.Tools;
|
import de.anura.core.API.Tools;
|
||||||
import static de.anura.core.AnuraCore.sql;
|
import static de.anura.core.AnuraCore.sql;
|
||||||
import de.anura.core.commands.AdminCommands;
|
import de.anura.core.commands.AdminCommands;
|
||||||
@@ -91,6 +92,7 @@ public class Setup {
|
|||||||
Core.getMainClass().tools = new Tools();
|
Core.getMainClass().tools = new Tools();
|
||||||
Core.getMainClass().pots = new FlowerPots();
|
Core.getMainClass().pots = new FlowerPots();
|
||||||
Core.getMainClass().signs = new Signs();
|
Core.getMainClass().signs = new Signs();
|
||||||
|
Core.getMainClass().level = new Level();
|
||||||
RealTime.setup();
|
RealTime.setup();
|
||||||
ResultSet rs = sql.querySelect("SELECT id, X, Y, Z, world, type, waitTime FROM corePots");
|
ResultSet rs = sql.querySelect("SELECT id, X, Y, Z, world, type, waitTime FROM corePots");
|
||||||
try {
|
try {
|
||||||
@@ -207,6 +209,7 @@ public class Setup {
|
|||||||
Core.getMainClass().getCommand("joinminigame").setExecutor(pc);
|
Core.getMainClass().getCommand("joinminigame").setExecutor(pc);
|
||||||
Core.getMainClass().getCommand("leaveminigame").setExecutor(pc);
|
Core.getMainClass().getCommand("leaveminigame").setExecutor(pc);
|
||||||
Core.getMainClass().getCommand("toggleminigame").setExecutor(pc);
|
Core.getMainClass().getCommand("toggleminigame").setExecutor(pc);
|
||||||
|
Core.getMainClass().getCommand("addAimTWWin").setExecutor(oc);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setupInventories() {
|
public static void setupInventories() {
|
||||||
|
|||||||
@@ -39,6 +39,19 @@ public class OtherCommands implements CommandExecutor {
|
|||||||
} else if (cmd.getName().equalsIgnoreCase("none")) {
|
} else if (cmd.getName().equalsIgnoreCase("none")) {
|
||||||
Core.statusMsg(sender, "cmd_not_found", false);
|
Core.statusMsg(sender, "cmd_not_found", false);
|
||||||
return true;
|
return true;
|
||||||
|
} else if (cmd.getName().equalsIgnoreCase("addAimTWWin")) {
|
||||||
|
if (!(sender instanceof BlockCommandSender)) {
|
||||||
|
Core.getTools().sendStatusMsg(sender, "Only command block cmd!", false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (args.length != 1) return false;
|
||||||
|
String p = args[0];
|
||||||
|
if (Bukkit.getOfflinePlayer(p).isOnline()) {
|
||||||
|
Player player = Bukkit.getPlayer(p);
|
||||||
|
Core.getMainClass().aimTheWaterWins.put(player, Core.getMainClass().aimTheWaterWins.get(player) + 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package de.anura.core.events;
|
package de.anura.core.events;
|
||||||
|
|
||||||
|
import de.anura.core.API.Core;
|
||||||
import de.anura.core.AnuraCore;
|
import de.anura.core.AnuraCore;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
@@ -38,6 +39,9 @@ public class PlayerJoin implements Listener {
|
|||||||
plugin.pots.refreshPlayer(event.getPlayer());
|
plugin.pots.refreshPlayer(event.getPlayer());
|
||||||
plugin.getFeatures().updateFeatures(event.getPlayer());
|
plugin.getFeatures().updateFeatures(event.getPlayer());
|
||||||
plugin.disableCommandsAdventure.put(event.getPlayer(), false);
|
plugin.disableCommandsAdventure.put(event.getPlayer(), false);
|
||||||
|
plugin.joinTime.put(event.getPlayer(), (int) (System.currentTimeMillis() / 1000));
|
||||||
|
plugin.aimTheWaterWins.put(event.getPlayer(), 0);
|
||||||
|
Core.getLevel().loadLevel(event.getPlayer());
|
||||||
if (plugin.getConfig().getBoolean("on-join-to-spawn")) {
|
if (plugin.getConfig().getBoolean("on-join-to-spawn")) {
|
||||||
event.getPlayer().teleport(event.getPlayer().getWorld().getSpawnLocation());
|
event.getPlayer().teleport(event.getPlayer().getWorld().getSpawnLocation());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,5 +19,6 @@ public class PlayerQuit implements Listener {
|
|||||||
Core.endSitting(event.getPlayer());
|
Core.endSitting(event.getPlayer());
|
||||||
AnuraCore.getInstance().disableCommandsAdventure.remove(event.getPlayer());
|
AnuraCore.getInstance().disableCommandsAdventure.remove(event.getPlayer());
|
||||||
Money.saveMoney(event.getPlayer());
|
Money.saveMoney(event.getPlayer());
|
||||||
|
Core.getLevel().update(event.getPlayer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,3 +79,6 @@ commands:
|
|||||||
toggleminigame:
|
toggleminigame:
|
||||||
description: Join/Leave a redstone minigame
|
description: Join/Leave a redstone minigame
|
||||||
usage: /<command> (xpBattle|pool)
|
usage: /<command> (xpBattle|pool)
|
||||||
|
addAimTWWin:
|
||||||
|
description: Adds an Aim the Water win to the statistics
|
||||||
|
usage: /<command> <username>
|
||||||
Reference in New Issue
Block a user