Moving the power configuration from MConf to UConf.

This commit is contained in:
Olof Larsson 2013-04-22 17:20:34 +02:00
parent 9a324d572e
commit e30c652759
5 changed files with 66 additions and 49 deletions

View File

@ -30,30 +30,6 @@ public class ConfServer extends SimpleConfig
public static double autoLeaveRoutineRunsEveryXMinutes = 5.0;
public static boolean removePlayerDataWhenBanned = true;
// -------------------------------------------- //
// POWER
// -------------------------------------------- //
public static double powerMax = 10.0;
public static double powerMin = -10.0;
public static double powerStarting = 10.0; // New players start out with this power level
public static double powerPerDeath = -4.0; // A death makes you lose 4 power
public static double powerPerHourOnline = 10.0;
public static double powerPerHourOffline = 0.0;
// players will no longer lose power from being offline once their power drops to this amount or less
public static double powerLimitGainOnline = 10.0;
public static double powerLimitGainOffline = 0.0;
public static double powerLimitLossOnline = -10.0;
public static double powerLimitLossOffline = 0.0;
public static boolean scaleNegativePower = false; // Power regeneration rate increase as power decreases
public static double scaleNegativeDivisor = 40.0; // Divisor for inverse power regeneration curve
public static double powerFactionMax = 0.0; // if greater than 0, the cap on how much power a faction can have (additional power from players beyond that will act as a "buffer" of sorts)
// -------------------------------------------- //
// HOMES
// -------------------------------------------- //

View File

@ -29,6 +29,7 @@ import com.massivecraft.mcore.mixin.Mixin;
import com.massivecraft.mcore.money.Money;
import com.massivecraft.mcore.ps.PS;
import com.massivecraft.mcore.store.SenderEntity;
import com.massivecraft.mcore.util.MUtil;
import com.massivecraft.mcore.util.TimeUnit;
import com.massivecraft.mcore.util.Txt;
@ -70,7 +71,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
// Note: we do not check role or title here since they mean nothing without a faction.
// TODO: This line looks obnoxious, investigate it.
if (this.getPowerRounded() != this.getPowerMaxRounded() && this.getPowerRounded() != (int) Math.round(ConfServer.powerStarting)) return false;
if (this.getPowerRounded() != this.getPowerMaxRounded() && this.getPowerRounded() != (int) Math.round(UConf.get(this).powerStarting)) return false;
if (this.hasPowerBoost()) return false;
@ -354,7 +355,9 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
public double getPower()
{
this.recalculatePower();
return this.power;
Double ret = this.power;
if (ret == null) ret = UConf.get(this).powerStarting;
return ret;
}
public void setPower(double power)
@ -368,7 +371,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
power = Math.max(power, this.getPowerMin());
// Nochange
if (this.power == power) return;
if (MUtil.equals(this.power, Double.valueOf(power))) return;
this.power = power;
this.setLastPowerUpdateTime(now);
@ -377,12 +380,12 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
public double getPowerMax()
{
return ConfServer.powerMax + this.getPowerBoost();
return UConf.get(this).powerMax + this.getPowerBoost();
}
public double getPowerMin()
{
return ConfServer.powerMin + this.getPowerBoost();
return UConf.get(this).powerMin + this.getPowerBoost();
}
public void recalculatePower()
@ -411,30 +414,39 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
// Note that we updated
this.setLastPowerUpdateTime(now);
// We consider dead players to be offline.
// We consider dead players and players in other universes offline.
if (online)
{
Player thisPlayer = this.getPlayer();
if (thisPlayer != null && thisPlayer.isDead())
{
online = false;
online = (thisPlayer != null && !thisPlayer.isDead() && FPlayer.get(thisPlayer) == this);
}
// Cache and prepare
UConf uconf = UConf.get(this);
double powerCurrent;
if (this.power != null)
{
powerCurrent = this.power;
}
else
{
powerCurrent = uconf.powerStarting;
}
// Depending on online state pick the config values
double powerPerHour = online ? ConfServer.powerPerHourOnline : ConfServer.powerPerHourOffline;
double powerLimitGain = online ? ConfServer.powerLimitGainOnline : ConfServer.powerLimitGainOffline;
double powerLimitLoss = online ? ConfServer.powerLimitLossOnline : ConfServer.powerLimitLossOffline;
double powerPerHour = online ? uconf.powerPerHourOnline : uconf.powerPerHourOffline;
double powerLimitGain = online ? uconf.powerLimitGainOnline : uconf.powerLimitGainOffline;
double powerLimitLoss = online ? uconf.powerLimitLossOnline : uconf.powerLimitLossOffline;
// Apply the negative divisor thingy
if (ConfServer.scaleNegativePower && this.power < 0)
if (uconf.scaleNegativePower && powerCurrent < 0)
{
powerPerHour += (Math.sqrt(Math.abs(this.power)) * Math.abs(this.power)) / ConfServer.scaleNegativeDivisor;
powerPerHour += (Math.sqrt(Math.abs(powerCurrent)) * Math.abs(powerCurrent)) / uconf.scaleNegativeDivisor;
}
// Calculate delta and target
double powerDelta = powerPerHour * millisPassed / TimeUnit.MILLIS_PER_HOUR;
double powerTarget = this.power + powerDelta;
double powerTarget = powerCurrent + powerDelta;
// Check Gain and Loss limits
if (powerDelta >= 0)
@ -442,10 +454,10 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
// Gain
if (powerTarget > powerLimitGain)
{
if (this.power > powerLimitGain)
if (powerCurrent > powerLimitGain)
{
// Did already cross --> Just freeze
powerTarget = this.power;
powerTarget = powerCurrent;
}
else
{
@ -459,10 +471,10 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
// Loss
if (powerTarget < powerLimitLoss)
{
if (this.power < powerLimitLoss)
if (powerCurrent < powerLimitLoss)
{
// Did already cross --> Just freeze
powerTarget = this.power;
powerTarget = powerCurrent;
}
else
{

View File

@ -677,10 +677,12 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
{
ret += fplayer.getPower();
}
if (ConfServer.powerFactionMax > 0 && ret > ConfServer.powerFactionMax)
if (UConf.get(this).powerFactionMax > 0 && ret > UConf.get(this).powerFactionMax)
{
ret = ConfServer.powerFactionMax;
ret = UConf.get(this).powerFactionMax;
}
return ret + this.getPowerBoost();
}
@ -696,10 +698,12 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
{
ret += fplayer.getPowerMax();
}
if (ConfServer.powerFactionMax > 0 && ret > ConfServer.powerFactionMax)
if (UConf.get(this).powerFactionMax > 0 && ret > UConf.get(this).powerFactionMax)
{
ret = ConfServer.powerFactionMax;
ret = UConf.get(this).powerFactionMax;
}
return ret + this.getPowerBoost();
}

View File

@ -40,4 +40,28 @@ public class UConf extends Entity<UConf>
public int factionMemberLimit = 0;
// -------------------------------------------- //
// POWER
// -------------------------------------------- //
public double powerMax = 10.0;
public double powerMin = -10.0;
public double powerStarting = 10.0; // New players start out with this power level
public double powerPerDeath = -4.0; // A death makes you lose 4 power
public double powerPerHourOnline = 10.0;
public double powerPerHourOffline = 0.0;
// players will no longer lose power from being offline once their power drops to this amount or less
public double powerLimitGainOnline = 10.0;
public double powerLimitGainOffline = 0.0;
public double powerLimitLossOnline = -10.0;
public double powerLimitLossOffline = 0.0;
public boolean scaleNegativePower = false; // Power regeneration rate increase as power decreases
public double scaleNegativeDivisor = 40.0; // Divisor for inverse power regeneration curve
public double powerFactionMax = 0.0; // if greater than 0, the cap on how much power a faction can have (additional power from players beyond that will act as a "buffer" of sorts)
}

View File

@ -53,6 +53,7 @@ import com.massivecraft.factions.entity.BoardColls;
import com.massivecraft.factions.entity.FPlayer;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.MConf;
import com.massivecraft.factions.entity.UConf;
import com.massivecraft.factions.event.FactionsEventPowerChange;
import com.massivecraft.factions.event.FactionsEventPowerChange.PowerChangeReason;
import com.massivecraft.factions.util.VisualizeUtil;
@ -106,7 +107,7 @@ public class FactionsListenerMain implements Listener
}
// ... Event ...
double newPower = fplayer.getPower() + ConfServer.powerPerDeath;
double newPower = fplayer.getPower() + UConf.get(fplayer).powerPerDeath;
FactionsEventPowerChange powerChangeEvent = new FactionsEventPowerChange(null, fplayer, PowerChangeReason.DEATH, newPower);
powerChangeEvent.run();
if (powerChangeEvent.isCancelled()) return;