Achievement bug fixes

This commit is contained in:
CoderTim 2014-11-12 20:56:57 -05:00
parent d7141e4943
commit d363637015
4 changed files with 53 additions and 5 deletions

View File

@ -67,7 +67,7 @@ public class ChampionsDominate extends Domination
this.DisableKillCommand = false;
registerStatTrackers(
new KillReasonStatTracker(this, "Backstab", "Assassination"),
new KillReasonStatTracker(this, "Backstab", "Assassination", false),
new ElectrocutionStatTracker(this),
new TheLongestShotStatTracker(this),
new SeismicSlamStatTracker(this)

View File

@ -67,7 +67,7 @@ public class ChampionsTDM extends TeamDeathmatch
registerStatTrackers(
new WinWithoutLosingTeammateStatTracker(this, "FlawlessVictory"),
new KillAllOpposingStatTracker(this),
new KillReasonStatTracker(this, "Backstab", "Assassination"),
new KillReasonStatTracker(this, "Backstab", "Assassination", false),
new ElectrocutionStatTracker(this),
new TheLongestShotStatTracker(this),
new SeismicSlamStatTracker(this)

View File

@ -284,10 +284,10 @@ public class MineStrike extends TeamGame
};
registerStatTrackers(
new KillReasonStatTracker(this, "Headshot", "BoomHeadshot"),
new KillReasonStatTracker(this, "Headshot", "BoomHeadshot", true),
new KillAllOpposingMineStrikeRoundStatTracker(this),
new KaboomStatTracker(this),
new KillReasonStatTracker(this, "Backstab", "Assassination"),
new KillReasonStatTracker(this, "Backstab", "Assassination", false),
new MineStrikeLastAliveKillStatTracker(this),
new KillFastStatTracker(this, 4, 5, "KillingSpree"),
new KillsWithConditionStatTracker(this, "Blindfolded", ConditionType.BLINDNESS, "Flash Bang", 2)

View File

@ -1,5 +1,11 @@
package nautilus.game.arcade.stats;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -8,6 +14,7 @@ import mineplex.core.common.util.UtilPlayer;
import mineplex.minecraft.game.core.combat.CombatComponent;
import mineplex.minecraft.game.core.combat.CombatDamage;
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import mineplex.minecraft.game.core.damage.DamageChange;
import nautilus.game.arcade.game.Game;
@ -15,13 +22,42 @@ public class KillReasonStatTracker extends StatTracker<Game>
{
private final String _reason;
private final String _statName;
private final boolean _canBeDamagedByKilledPlayer;
private final Map<UUID, Set<UUID>> _damaged = new HashMap<>();
public KillReasonStatTracker(Game game, String reason, String statName)
public KillReasonStatTracker(Game game, String reason, String statName, boolean canBeDamagedByKilledPlayer)
{
super(game);
_reason = reason;
_statName = statName;
_canBeDamagedByKilledPlayer = canBeDamagedByKilledPlayer;
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
public void onCustomDamage(CustomDamageEvent event)
{
if (canBeDamagedByKilledPlayer())
return;
if (getGame().GetState() != Game.GameState.Live)
return;
Player damager = event.GetDamagerPlayer(false);
if (damager == null)
return;
Player damagee = event.GetDamageePlayer();
if (damagee == null)
return;
Set<UUID> set = _damaged.get(damagee.getUniqueId());
if (set == null)
{
set = new HashSet<>();
_damaged.put(damagee.getUniqueId(), set);
}
set.add(damager.getUniqueId());
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
@ -50,6 +86,13 @@ public class KillReasonStatTracker extends StatTracker<Game>
if (player == null)
return;
if (!canBeDamagedByKilledPlayer())
{
Set<UUID> set = _damaged.remove(killer.getUniqueId());
if (set != null && set.contains(player.getUniqueId()))
return;
}
if (event.GetLog().GetLastDamager() != null && event.GetLog().GetLastDamager().GetReason() != null && event.GetLog().GetLastDamager().GetReason().contains(getReason()))
addStat(killer, getStatName(), 1, false, false);
else
@ -84,4 +127,9 @@ public class KillReasonStatTracker extends StatTracker<Game>
{
return _reason;
}
public boolean canBeDamagedByKilledPlayer()
{
return _canBeDamagedByKilledPlayer;
}
}