Add faction and player kills / deaths stats.

This commit is contained in:
drtshock 2015-08-06 16:53:00 -05:00
parent bf0382ca76
commit 3b8bc19460
7 changed files with 86 additions and 45 deletions

View File

@ -25,6 +25,10 @@ import java.util.List;
*/
public interface FPlayer extends EconomyParticipator {
public void login();
public void logout();
public Faction getFaction();
public String getFactionId();
@ -133,6 +137,11 @@ public interface FPlayer extends EconomyParticipator {
public String getChatTag(FPlayer fplayer);
public int getKills();
public int getDeaths();
// -------------------------------
// Relation and relation colors
// -------------------------------

View File

@ -119,6 +119,10 @@ public interface Faction extends EconomyParticipator {
public void setLastDeath(long time);
public int getKills();
public int getDeaths();
// -------------------------------
// Relation and relation colors
// -------------------------------

View File

@ -59,6 +59,8 @@ public class FactionsPlayerListener implements Listener {
// Store player's current FLocation and notify them where they are
me.setLastStoodAt(new FLocation(player.getLocation()));
me.login(); // set kills / deaths
// Check for Faction announcements. Let's delay this so they actually see it.
Bukkit.getScheduler().runTaskLater(P.p, new Runnable() {
@Override
@ -94,6 +96,8 @@ public class FactionsPlayerListener implements Listener {
// and update their last login time to point to when the logged off, for auto-remove routine
me.setLastLoginTime(System.currentTimeMillis());
me.logout(); // cache kills / deaths
// if player is waiting for fstuck teleport but leaves, remove
if (P.p.getStuckMap().containsKey(me.getPlayer().getUniqueId())) {
FPlayers.getInstance().getByPlayer(me.getPlayer()).msg(TL.COMMAND_STUCK_CANCELLED);

View File

@ -17,10 +17,7 @@ import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.RelationUtil;
import com.massivecraft.factions.util.WarmUpUtil;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.*;
import org.bukkit.entity.Player;
import java.util.HashSet;
@ -41,63 +38,43 @@ import java.util.UUID;
*/
public abstract class MemoryFPlayer implements FPlayer {
// FIELD: factionId
protected String factionId;
// FIELD: role
protected Role role;
// FIELD: title
protected String title;
// FIELD: power
protected double power;
// FIELD: powerBoost
// special increase/decrease to min and max power for this player
protected double powerBoost;
// FIELD: lastPowerUpdateTime
protected long lastPowerUpdateTime;
// FIELD: lastLoginTime
protected long lastLoginTime;
// FIELD: chatMode
protected ChatMode chatMode;
// FIELD: ignoreAllianceChat
protected boolean ignoreAllianceChat = false;
protected String id;
protected String name;
protected boolean monitorJoins;
//private transient String playerName;
protected transient FLocation lastStoodAt = new FLocation(); // Where did this player stand the last time we checked?
// FIELD: mapAutoUpdating
protected transient boolean mapAutoUpdating;
// FIELD: autoClaimEnabled
protected transient Faction autoClaimFor;
// FIELD: autoSafeZoneEnabled
protected transient boolean autoSafeZoneEnabled;
// FIELD: autoWarZoneEnabled
protected transient boolean autoWarZoneEnabled;
protected transient boolean isAdminBypassing = false;
// FIELD: loginPvpDisabled
protected transient boolean loginPvpDisabled;
protected boolean spyingChat = false;
protected boolean showScoreboard = true;
protected WarmUpUtil.Warmup warmup;
protected int warmupTask;
protected boolean isAdminBypassing = false;
protected int kills, deaths;
protected transient FLocation lastStoodAt = new FLocation(); // Where did this player stand the last time we checked?
protected transient boolean mapAutoUpdating;
protected transient Faction autoClaimFor;
protected transient boolean autoSafeZoneEnabled;
protected transient boolean autoWarZoneEnabled;
protected transient boolean loginPvpDisabled;
public void login() {
this.kills = getPlayer().getStatistic(Statistic.PLAYER_KILLS);
this.deaths = getPlayer().getStatistic(Statistic.DEATHS);
}
public void logout() {
this.kills = getPlayer().getStatistic(Statistic.PLAYER_KILLS);
this.deaths = getPlayer().getStatistic(Statistic.DEATHS);
}
public Faction getFaction() {
if (this.factionId == null) {
@ -244,6 +221,8 @@ public abstract class MemoryFPlayer implements FPlayer {
this.loginPvpDisabled = Conf.noPVPDamageToOthersForXSecondsAfterLogin > 0;
this.powerBoost = 0.0;
this.showScoreboard = P.p.getConfig().getBoolean("scoreboard.default-enabled", false);
this.kills = 0;
this.deaths = 0;
if (!Conf.newPlayerStartingFactionID.equals("0") && Factions.getInstance().isValidFactionId(Conf.newPlayerStartingFactionID)) {
this.factionId = Conf.newPlayerStartingFactionID;
@ -268,6 +247,8 @@ public abstract class MemoryFPlayer implements FPlayer {
this.lastStoodAt = other.lastStoodAt;
this.isAdminBypassing = other.isAdminBypassing;
this.showScoreboard = P.p.getConfig().getBoolean("scoreboard.default-enabled", true);
this.kills = other.kills;
this.deaths = other.deaths;
}
public void resetFactionData(boolean doSpoutUpdate) {
@ -416,6 +397,15 @@ public abstract class MemoryFPlayer implements FPlayer {
return this.hasFaction() ? this.getColorTo(fplayer) + getChatTag() : "";
}
public int getKills() {
return isOnline() ? getPlayer().getStatistic(Statistic.PLAYER_KILLS) : this.kills;
}
public int getDeaths() {
return isOnline() ? getPlayer().getStatistic(Statistic.DEATHS) : this.deaths;
}
// -------------------------------
// Relation and relation colors
// -------------------------------

View File

@ -277,6 +277,24 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
return this.lastDeath;
}
public int getKills() {
int kills = 0;
for (FPlayer fp : getFPlayers()) {
kills += fp.getKills();
}
return kills;
}
public int getDeaths() {
int deaths = 0;
for (FPlayer fp : getFPlayers()) {
deaths += fp.getDeaths();
}
return deaths;
}
// -------------------------------------------- //
// Construct
// -------------------------------------------- //

View File

@ -33,6 +33,8 @@ public enum TagReplacer {
PLAYER_BALANCE(TagType.PLAYER, "{balance}"),
PLAYER_POWER(TagType.PLAYER, "{player-power}"),
PLAYER_MAXPOWER(TagType.PLAYER, "{player-maxpower}"),
PLAYER_KILLS(TagType.PLAYER, "{player-kills}"),
PLAYER_DEATHS(TagType.PLAYER, "{player-deaths}"),
/**
* Faction variables, require at least a player
@ -65,6 +67,8 @@ public enum TagReplacer {
ONLINE_COUNT(TagType.FACTION, "{online}"),
OFFLINE_COUNT(TagType.FACTION, "{offline}"),
FACTION_SIZE(TagType.FACTION, "{members}"),
FACTION_KILLS(TagType.FACTION, "{faction-kills}"),
FACTION_DEATHS(TagType.FACTION, "{faction-deaths}"),
/**
* General variables, require no faction or player
@ -150,6 +154,10 @@ public enum TagReplacer {
return String.valueOf(fp.getPowerRounded());
case PLAYER_MAXPOWER:
return String.valueOf(fp.getPowerMaxRounded());
case PLAYER_KILLS:
return String.valueOf(fp.getKills());
case PLAYER_DEATHS:
return String.valueOf(fp.getDeaths());
}
}
switch (this) {
@ -209,6 +217,10 @@ public enum TagReplacer {
return String.valueOf(fac.getFPlayers().size() - fac.getOnlinePlayers().size());
case FACTION_SIZE:
return String.valueOf(fac.getFPlayers().size());
case FACTION_KILLS:
return String.valueOf(fac.getKills());
case FACTION_DEATHS:
return String.valueOf(fac.getDeaths());
}
return null;
}

View File

@ -314,6 +314,8 @@ help:
# - {name} : Players name
# - {lastSeen} : Last time player was seen (if offline), or just 'Online'
# - {balance} : Players balance
# - {player-kills} : # of kills the player has
# - {player-deaths}: # of deaths the player has
# Faction variables. Can be used in tooltips.list, scoreboards, or /f show
# - {header} : Default factions header (ex. /f show)
# - {faction} : Factions tag (if none, uses lang.yml for factionless name)
@ -335,6 +337,8 @@ help:
# - {members} : # of faction members (includes offline)
# - {faction-balance} : Faction bank balance
# - {world}, {x}, {y}, {z} : Faction home variables. You don't need to use them all.
# - {faction-kills} : # of kills the faction has
# - {faction-deaths}: # of deaths the faction has
# General variables. Can be used anywhere.
# - {total-online} : Total # of players on the server
# - {max-warps} : Max # of warps a faction can set