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 gemExp = 0; for (String reason : event.GetGame().GetGems(player).keySet()) { if (reason.toLowerCase().contains("participation")) continue; GemData gem = event.GetGame().GetGems(player).get(reason); gemExp += (int)gem.Gems; } gemExp = Math.min(gemExp, 250) * 5; //Game Time = 1 Exp per 3 Seconds double timeExp = (System.currentTimeMillis() - _startTime)/1500d; //Mult double mult = 1; if (winners.contains(player)) mult = 1.5; //Exp int expGained = (int)((timeExp + gemExp)*mult); //Record Global and per Game addStat(player, "ExpEarned", expGained, false, true); addStat(player, "ExpEarned", expGained, false, false); } } _startTime = -1; } } }