package nautilus.game.arcade.stats; import java.util.List; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.GemData; public class ExperienceStatTracker extends StatTracker { private long _startTime = -1; public ExperienceStatTracker(Game game) { super(game); } @EventHandler public void onGameStart(GameStateChangeEvent event) { if (event.GetState() == Game.GameState.Live) _startTime = System.currentTimeMillis(); } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onGameEnd(GameStateChangeEvent event) { if (!event.GetGame().Manager.IsRewardStats() || !event.GetGame().Manager.IsRewardAchievements()) return; if (_startTime == -1) return; if (event.GetState() == Game.GameState.End) { List winners = getGame().getWinners(); if (winners != null) { for (Player player : event.GetGame().GetPlayers(false)) { //Tally Gems double gems = 0; for (String reason : event.GetGame().GetGems(player).keySet()) { if (reason.toLowerCase().contains("participation")) continue; GemData gem = event.GetGame().GetGems(player).get(reason); gems += (int)gem.Gems; } gems = Math.min(gems, 250); //Game Time double time = (System.currentTimeMillis() - _startTime)/60000d; //Mult double mult = 1; if (!winners.contains(player)) mult = 0.25; //Exp int expGained = (int)(time*gems*mult); //Record Global and per Game addStat(player, "ExpEarned", expGained, false, true); addStat(player, "ExpEarned", expGained, false, false); } } _startTime = -1; } } }