diff --git a/plugin.yml b/plugin.yml index c1d07e7b..9b7fec3c 100644 --- a/plugin.yml +++ b/plugin.yml @@ -25,9 +25,10 @@ permissions: children: factions.kit.halfmod: true factions.disband.any: true + factions.setpeaceful: true factions.setpermanent: true factions.setpermanentpower: true - factions.setpeaceful: true + factions.powerboost: true factions.sethome.any: true factions.money.*: true factions.join.any: true @@ -194,6 +195,8 @@ permissions: description: show player power info factions.power.any: description: view an other players power level + factions.powerboost: + description: apply permanent power bonus/penalty to specified player or faction factions.relation: description: set relation wish to another faction factions.reload: diff --git a/src/com/massivecraft/factions/FPlayer.java b/src/com/massivecraft/factions/FPlayer.java index e430c8f1..98467ff8 100644 --- a/src/com/massivecraft/factions/FPlayer.java +++ b/src/com/massivecraft/factions/FPlayer.java @@ -61,7 +61,13 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator // FIELD: power private double power; - + + // FIELD: powerBoost + // special increase/decrease to min and max power for this player + private double powerBoost; + public double getPowerBoost() { return this.powerBoost; } + public void setPowerBoost(double powerBoost) { this.powerBoost = powerBoost; } + // FIELD: lastPowerUpdateTime private long lastPowerUpdateTime; @@ -161,6 +167,7 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator this.autoWarZoneEnabled = false; this.loginPvpDisabled = (Conf.noPVPDamageToOthersForXSecondsAfterLogin > 0) ? true : false; this.deleteMe = false; + this.powerBoost = 0.0; if ( ! Conf.newPlayerStartingFactionID.equals("0") && Factions.i.exists(Conf.newPlayerStartingFactionID)) { @@ -453,23 +460,19 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator { this.power += delta; if (this.power > this.getPowerMax()) - { this.power = this.getPowerMax(); - } else if (this.power < this.getPowerMin()) - { + else if (this.power < this.getPowerMin()) this.power = this.getPowerMin(); - } - //Log.debug("Power of "+this.getName()+" is now: "+this.power); } public double getPowerMax() { - return Conf.powerPlayerMax; + return Conf.powerPlayerMax + this.powerBoost; } public double getPowerMin() { - return Conf.powerPlayerMin; + return Conf.powerPlayerMin + this.powerBoost; } public int getPowerRounded() diff --git a/src/com/massivecraft/factions/Faction.java b/src/com/massivecraft/factions/Faction.java index 2725a246..b2d89f07 100644 --- a/src/com/massivecraft/factions/Faction.java +++ b/src/com/massivecraft/factions/Faction.java @@ -135,7 +135,14 @@ public class Faction extends Entity implements EconomyParticipator public Integer getPermanentPower() { return this.permanentPower; } public void setPermanentPower(Integer permanentPower) { this.permanentPower = permanentPower; } public boolean hasPermanentPower() { return this.permanentPower != null; } - + + // FIELD: powerBoost + // special increase/decrease to default and max power for this faction + private double powerBoost; + public double getPowerBoost() { return this.powerBoost; } + public void setPowerBoost(double powerBoost) { this.powerBoost = powerBoost; } + + // -------------------------------------------- // // Construct // -------------------------------------------- // @@ -152,6 +159,7 @@ public class Faction extends Entity implements EconomyParticipator this.peacefulExplosionsEnabled = false; this.permanent = false; this.money = 0.0; + this.powerBoost = 0.0; } // -------------------------------------------- // @@ -268,7 +276,7 @@ public class Faction extends Entity implements EconomyParticipator { ret = Conf.powerFactionMax; } - return ret; + return ret + this.powerBoost; } public double getPowerMax() @@ -287,7 +295,7 @@ public class Faction extends Entity implements EconomyParticipator { ret = Conf.powerFactionMax; } - return ret; + return ret + this.powerBoost; } public int getPowerRounded() diff --git a/src/com/massivecraft/factions/cmd/CmdHelp.java b/src/com/massivecraft/factions/cmd/CmdHelp.java index d5e98f50..39875de8 100644 --- a/src/com/massivecraft/factions/cmd/CmdHelp.java +++ b/src/com/massivecraft/factions/cmd/CmdHelp.java @@ -174,10 +174,16 @@ public class CmdHelp extends FCommand pageLines.add( p.cmdBase.cmdChatSpy.getUseageTemplate(true) ); pageLines.add( p.cmdBase.cmdPermanent.getUseageTemplate(true) ); pageLines.add( p.cmdBase.cmdPermanentPower.getUseageTemplate(true) ); + pageLines.add( p.cmdBase.cmdPowerBoost.getUseageTemplate(true) ); + pageLines.add( p.cmdBase.cmdConfig.getUseageTemplate(true) ); + helpPages.add(pageLines); + + pageLines = new ArrayList(); + pageLines.add(p.txt.parse("Even more commands for server admins:")); pageLines.add( p.cmdBase.cmdLock.getUseageTemplate(true) ); pageLines.add( p.cmdBase.cmdReload.getUseageTemplate(true) ); pageLines.add( p.cmdBase.cmdSaveAll.getUseageTemplate(true) ); - pageLines.add( p.cmdBase.cmdConfig.getUseageTemplate(true) ); + pageLines.add( p.cmdBase.cmdVersion.getUseageTemplate(true) ); helpPages.add(pageLines); } } diff --git a/src/com/massivecraft/factions/cmd/CmdPower.java b/src/com/massivecraft/factions/cmd/CmdPower.java index 3085dfe1..98bbdd9b 100644 --- a/src/com/massivecraft/factions/cmd/CmdPower.java +++ b/src/com/massivecraft/factions/cmd/CmdPower.java @@ -36,7 +36,9 @@ public class CmdPower extends FCommand // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay if ( ! payForCommand(Conf.econCostPower, "to show player power info", "for showing player power info")) return; - msg("%s - Power / Maxpower: %d / %d", target.describeTo(fme, true), target.getPowerRounded(), target.getPowerMaxRounded()); + double powerBoost = target.getPowerBoost(); + String boost = (powerBoost == 0.0) ? "" : (powerBoost > 0.0 ? " (bonus: " : " (penalty: ") + powerBoost + ")"; + msg("%s - Power / Maxpower: %d / %d %s", target.describeTo(fme, true), target.getPowerRounded(), target.getPowerMaxRounded(), boost); } } diff --git a/src/com/massivecraft/factions/cmd/CmdPowerBoost.java b/src/com/massivecraft/factions/cmd/CmdPowerBoost.java new file mode 100644 index 00000000..7ec50e28 --- /dev/null +++ b/src/com/massivecraft/factions/cmd/CmdPowerBoost.java @@ -0,0 +1,72 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; + +public class CmdPowerBoost extends FCommand +{ + public CmdPowerBoost() + { + super(); + this.aliases.add("powerboost"); + + this.requiredArgs.add("p|f|player|faction"); + this.requiredArgs.add("name"); + this.requiredArgs.add("#"); + + this.permission = Permission.POWERBOOST.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() + { + String type = this.argAsString(0).toLowerCase(); + boolean doPlayer = true; + if (type.equals("f") || type.equals("faction")) + { + doPlayer = false; + } + else if (!type.equals("p") && !type.equals("player")) + { + msg("You must specify \"p\" or \"player\" to target a player or \"f\" or \"faction\" to target a faction."); + msg("ex. /f powerboost p SomePlayer 0.5 -or- /f powerboost f SomeFaction -5"); + return; + } + + Double targetPower = this.argAsDouble(2); + if (targetPower == null) + { + msg("You must specify a valid numeric value for the power bonus/penalty amount."); + return; + } + + String target; + + if (doPlayer) + { + FPlayer targetPlayer = this.argAsBestFPlayerMatch(1); + if (targetPlayer == null) return; + targetPlayer.setPowerBoost(targetPower); + target = "Player \""+targetPlayer.getName()+"\""; + } + else + { + Faction targetFaction = this.argAsFaction(1); + if (targetFaction == null) return; + targetFaction.setPowerBoost(targetPower); + target = "Faction \""+targetFaction.getTag()+"\""; + } + + msg(""+target+" now has a power bonus/penalty of "+targetPower+" to min and max power levels."); + if (!senderIsConsole) + P.p.log(fme.getName()+" has set the power bonus/penalty for "+target+" to "+targetPower+"."); + } +} diff --git a/src/com/massivecraft/factions/cmd/CmdShow.java b/src/com/massivecraft/factions/cmd/CmdShow.java index 9318918c..7799e074 100644 --- a/src/com/massivecraft/factions/cmd/CmdShow.java +++ b/src/com/massivecraft/factions/cmd/CmdShow.java @@ -61,7 +61,10 @@ public class CmdShow extends FCommand } msg("Joining: "+(faction.getOpen() ? "no invitation is needed" : "invitation is required")+peaceStatus); - msg("Land / Power / Maxpower: %d/%d/%d", faction.getLandRounded(), faction.getPowerRounded(), faction.getPowerMaxRounded()); + + double powerBoost = faction.getPowerBoost(); + String boost = (powerBoost == 0.0) ? "" : (powerBoost > 0.0 ? " (bonus: " : " (penalty: ") + powerBoost + ")"; + msg("Land / Power / Maxpower: %d/%d/%d %s", faction.getLandRounded(), faction.getPowerRounded(), faction.getPowerMaxRounded(), boost); if (faction.isPermanent()) { diff --git a/src/com/massivecraft/factions/cmd/FCmdRoot.java b/src/com/massivecraft/factions/cmd/FCmdRoot.java index 04365940..ac9db002 100644 --- a/src/com/massivecraft/factions/cmd/FCmdRoot.java +++ b/src/com/massivecraft/factions/cmd/FCmdRoot.java @@ -35,6 +35,7 @@ public class FCmdRoot extends FCommand public CmdPeaceful cmdPeaceful = new CmdPeaceful(); public CmdPermanent cmdPermanent = new CmdPermanent(); public CmdPermanentPower cmdPermanentPower = new CmdPermanentPower(); + public CmdPowerBoost cmdPowerBoost = new CmdPowerBoost(); public CmdPower cmdPower = new CmdPower(); public CmdRelationAlly cmdRelationAlly = new CmdRelationAlly(); public CmdRelationEnemy cmdRelationEnemy = new CmdRelationEnemy(); @@ -103,6 +104,7 @@ public class FCmdRoot extends FCommand this.addSubCommand(this.cmdPermanent); this.addSubCommand(this.cmdPermanentPower); this.addSubCommand(this.cmdPower); + this.addSubCommand(this.cmdPowerBoost); this.addSubCommand(this.cmdRelationAlly); this.addSubCommand(this.cmdRelationEnemy); this.addSubCommand(this.cmdRelationNeutral); diff --git a/src/com/massivecraft/factions/struct/Permission.java b/src/com/massivecraft/factions/struct/Permission.java index ea0a3f6c..f03e4ae1 100644 --- a/src/com/massivecraft/factions/struct/Permission.java +++ b/src/com/massivecraft/factions/struct/Permission.java @@ -50,6 +50,7 @@ public enum Permission SET_PEACEFUL("setpeaceful"), SET_PERMANENT("setpermanent"), SET_PERMANENTPOWER("setpermanentpower"), + POWERBOOST("powerboost"), POWER("power"), POWER_ANY("power.any"), RELATION("relation"),