Add level calculation for anura level + smash level
This commit is contained in:
@@ -229,4 +229,8 @@ public class Core {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static Level getLevel() {
|
||||
return getMainClass().level;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,6 +194,7 @@ public class Inventories implements Listener {
|
||||
}
|
||||
final Player player = (Player) event.getWhoClicked();
|
||||
Inventory inventory = event.getClickedInventory();
|
||||
if (inventory == null) return;
|
||||
String invName = inventory.getName();
|
||||
if (invNames.containsKey(invName)) {
|
||||
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;
|
||||
|
||||
import de.anura.core.API.Core;
|
||||
import de.anura.core.API.Level;
|
||||
import de.anura.core.API.Money;
|
||||
import de.anura.core.API.MySQL;
|
||||
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, Entity> golfBall = 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 Permissions perms;
|
||||
public Signs signs;
|
||||
public Tools tools;
|
||||
public Level level;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
@@ -79,6 +83,7 @@ public class AnuraCore extends JavaPlugin {
|
||||
}
|
||||
sql.queryUpdate("DELETE FROM coreServers WHERE name = '" + this.getConfig().getString("server-name") + "'");
|
||||
features.reset();
|
||||
level.update();
|
||||
for (Player P : this.sittingPlayer.keySet()) {
|
||||
Core.endSitting(P);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package de.anura.core;
|
||||
|
||||
import de.anura.core.API.Core;
|
||||
import de.anura.core.API.Inventories;
|
||||
import de.anura.core.API.Level;
|
||||
import de.anura.core.API.Tools;
|
||||
import static de.anura.core.AnuraCore.sql;
|
||||
import de.anura.core.commands.AdminCommands;
|
||||
@@ -91,6 +92,7 @@ public class Setup {
|
||||
Core.getMainClass().tools = new Tools();
|
||||
Core.getMainClass().pots = new FlowerPots();
|
||||
Core.getMainClass().signs = new Signs();
|
||||
Core.getMainClass().level = new Level();
|
||||
RealTime.setup();
|
||||
ResultSet rs = sql.querySelect("SELECT id, X, Y, Z, world, type, waitTime FROM corePots");
|
||||
try {
|
||||
@@ -207,6 +209,7 @@ public class Setup {
|
||||
Core.getMainClass().getCommand("joinminigame").setExecutor(pc);
|
||||
Core.getMainClass().getCommand("leaveminigame").setExecutor(pc);
|
||||
Core.getMainClass().getCommand("toggleminigame").setExecutor(pc);
|
||||
Core.getMainClass().getCommand("addAimTWWin").setExecutor(oc);
|
||||
}
|
||||
|
||||
public static void setupInventories() {
|
||||
|
||||
@@ -39,6 +39,19 @@ public class OtherCommands implements CommandExecutor {
|
||||
} else if (cmd.getName().equalsIgnoreCase("none")) {
|
||||
Core.statusMsg(sender, "cmd_not_found", false);
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.anura.core.events;
|
||||
|
||||
import de.anura.core.API.Core;
|
||||
import de.anura.core.AnuraCore;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
@@ -38,6 +39,9 @@ public class PlayerJoin implements Listener {
|
||||
plugin.pots.refreshPlayer(event.getPlayer());
|
||||
plugin.getFeatures().updateFeatures(event.getPlayer());
|
||||
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")) {
|
||||
event.getPlayer().teleport(event.getPlayer().getWorld().getSpawnLocation());
|
||||
}
|
||||
|
||||
@@ -19,5 +19,6 @@ public class PlayerQuit implements Listener {
|
||||
Core.endSitting(event.getPlayer());
|
||||
AnuraCore.getInstance().disableCommandsAdventure.remove(event.getPlayer());
|
||||
Money.saveMoney(event.getPlayer());
|
||||
Core.getLevel().update(event.getPlayer());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,4 +78,7 @@ commands:
|
||||
usage: /<command> (xpBattle|pool)
|
||||
toggleminigame:
|
||||
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