Added conf.json option "noPVPDamageToOthersForXSecondsAfterLogin" (defaults to 3 seconds) which keeps players from being able to do PvP damage for a few seconds after logging in (to counteract the exploitable 3-second PvP protection given to players when they log in); Fix for "claimsMustBeConnected" bug which prevented factions from making their initial first claim

This commit is contained in:
Brettflan 2011-06-22 20:10:42 -05:00
parent 6035b204dc
commit 094486676a
3 changed files with 23 additions and 1 deletions

View File

@ -67,6 +67,7 @@ public class Conf {
public static double homesTeleportAllowedEnemyDistance = 32;
public static boolean disablePVPForFactionlessPlayers = false;
public static int noPVPDamageToOthersForXSecondsAfterLogin = 3;
public static boolean claimsMustBeConnected = false;

View File

@ -47,6 +47,7 @@ public class FPlayer {
private transient boolean autoClaimEnabled;
private transient boolean autoSafeZoneEnabled;
private transient boolean autoWarZoneEnabled;
private transient boolean loginPvpDisabled;
private boolean factionChatting;
// -------------------------------------------- //
@ -63,6 +64,7 @@ public class FPlayer {
this.autoClaimEnabled = false;
this.autoSafeZoneEnabled = false;
this.autoWarZoneEnabled = false;
this.loginPvpDisabled = (Conf.noPVPDamageToOthersForXSecondsAfterLogin > 0) ? true : false;
}
public void resetFactionData() {
@ -177,6 +179,9 @@ public class FPlayer {
public void setLastLoginTime(long lastLoginTime) {
this.lastLoginTime = lastLoginTime;
this.lastPowerUpdateTime = lastLoginTime;
if (Conf.noPVPDamageToOthersForXSecondsAfterLogin > 0) {
this.loginPvpDisabled = true;
}
}
public boolean isMapAutoUpdating() {
@ -186,6 +191,17 @@ public class FPlayer {
public void setMapAutoUpdating(boolean mapAutoUpdating) {
this.mapAutoUpdating = mapAutoUpdating;
}
public boolean hasLoginPvpDisabled() {
if (!loginPvpDisabled) {
return false;
}
if (this.lastLoginTime + (Conf.noPVPDamageToOthersForXSecondsAfterLogin * 1000) < System.currentTimeMillis()) {
this.loginPvpDisabled = false;
return false;
}
return true;
}
public FLocation getLastStoodAt() {
return this.lastStoodAt;
@ -490,7 +506,7 @@ public class FPlayer {
return false;
}
if (Conf.claimsMustBeConnected && !Board.isConnectedLocation(flocation, myFaction)) {
if (Conf.claimsMustBeConnected && myFaction.getLandRounded() > 0 && !Board.isConnectedLocation(flocation, myFaction)) {
sendMessage("You can only claim additional land which is connected to your first claim!");
return false;
}

View File

@ -169,6 +169,11 @@ public class FactionsEntityListener extends EntityListener {
return false;
}
if (attacker.hasLoginPvpDisabled()) {
attacker.sendMessage("You can't hurt other players for " + Conf.noPVPDamageToOthersForXSecondsAfterLogin + " seconds after logging in.");
return false;
}
Faction locFaction = Board.getFactionAt(new FLocation(attacker));
// so we know from above that the defender isn't in a safezone... what about the attacker, sneaky dog that he might be?