PcCafePointsManager rework.

This commit is contained in:
mobius
2015-01-30 14:30:43 +00:00
parent 00726289e4
commit 5127c5827a
3 changed files with 89 additions and 62 deletions

View File

@@ -845,26 +845,37 @@ BTZDelay = 10
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# PC BANG POINTS ID = -100 # PC BANG POINTS ID = -100
# PC Bang Enabled # PC Bang Enabled.
Enabled = True Enabled = True
# Max points that player may have # Max points that player may have.
# Limited by int limit # Limited by int limit.
MaxPcBangPoints = 200000 MaxPcBangPoints = 200000
# Use random in rewarding with points # PC Bang point rate.
# If enabled points will be random from points/2 to points # Acquisition formula equals (exp * 0.0001 * AcquisitionPointsRate)
AcquisitionPointsRandom = False
# Creates a chance to aquire double point
DoublingAcquisitionPoints = True
# Double points chance
# If DoublingAcquisitionPoints=True
DoublingAcquisitionPointsChance = 1
# PC Bang point rate
# e.g. with 1.0 it's 10000 exp = 1 PC Bang point # e.g. with 1.0 it's 10000 exp = 1 PC Bang point
# 2.0 - 10000 exp = 2 PC Bang points # 2.0 - 10000 exp = 2 PC Bang points
# 0.5 - 5000 exp = 1 PC Bang point # 0.5 - 5000 exp = 1 PC Bang point
AcquisitionPointsRate = 1.0 AcquisitionPointsRate = 1.0
# Use random points rewarding.
# If enabled points will be random from points/2 to points.
AcquisitionPointsRandom = False
# Creates a chance to aquire double points.
DoublingAcquisitionPoints = True
# Double points chance.
# Used when DoublingAcquisitionPoints is enabled.
# Default 1 (%)
DoublingAcquisitionPointsChance = 1
# Reward low exp kills
# Acquire points if player gains exp and aquire formula equals 0.
RewardLowExpKills = True
# Chance for low exp kills
# Used when RewardLowExpKills is enabled.
# Default 50 (%)
RewardLowExpKillsChance = 50

View File

@@ -866,11 +866,13 @@ public final class Config
public static boolean BTZ_REMOVE_PETS; public static boolean BTZ_REMOVE_PETS;
public static List<int[]> BTZ_REWARDS; public static List<int[]> BTZ_REWARDS;
public static boolean PC_BANG_ENABLED; public static boolean PC_BANG_ENABLED;
public static int MAX_PC_BANG_POINTS; public static int PC_BANG_MAX_POINTS;
public static boolean ENABLE_DOUBLE_PC_BANG_POINTS; public static boolean PC_BANG_ENABLE_DOUBLE_POINTS;
public static int DOUBLE_PC_BANG_POINTS_CHANCE; public static int PC_BANG_DOUBLE_POINTS_CHANCE;
public static double PC_BANG_POINT_RATE; public static double PC_BANG_POINT_RATE;
public static boolean RANDOM_PC_BANG_POINT; public static boolean PC_BANG_RANDOM_POINT;
public static boolean PC_BANG_REWARD_LOW_EXP_KILLS;
public static int PC_BANG_LOW_EXP_KILLS_CHANCE;
// -------------------------------------------------- // --------------------------------------------------
// NPC Settings // NPC Settings
@@ -2757,22 +2759,33 @@ public final class Config
} }
PC_BANG_ENABLED = CustomSettings.getBoolean("Enabled", false); PC_BANG_ENABLED = CustomSettings.getBoolean("Enabled", false);
MAX_PC_BANG_POINTS = CustomSettings.getInt("MaxPcBangPoints", 200000); PC_BANG_MAX_POINTS = CustomSettings.getInt("MaxPcBangPoints", 200000);
if (MAX_PC_BANG_POINTS < 0) if (PC_BANG_MAX_POINTS < 0)
{ {
MAX_PC_BANG_POINTS = 0; PC_BANG_MAX_POINTS = 0;
} }
ENABLE_DOUBLE_PC_BANG_POINTS = CustomSettings.getBoolean("DoublingAcquisitionPoints", false); PC_BANG_ENABLE_DOUBLE_POINTS = CustomSettings.getBoolean("DoublingAcquisitionPoints", false);
DOUBLE_PC_BANG_POINTS_CHANCE = CustomSettings.getInt("DoublingAcquisitionPointsChance", 1); PC_BANG_DOUBLE_POINTS_CHANCE = CustomSettings.getInt("DoublingAcquisitionPointsChance", 1);
if ((DOUBLE_PC_BANG_POINTS_CHANCE < 0) || (DOUBLE_PC_BANG_POINTS_CHANCE > 100)) if ((PC_BANG_DOUBLE_POINTS_CHANCE < 0) || (PC_BANG_DOUBLE_POINTS_CHANCE > 100))
{ {
DOUBLE_PC_BANG_POINTS_CHANCE = 1; PC_BANG_DOUBLE_POINTS_CHANCE = 1;
} }
PC_BANG_POINT_RATE = CustomSettings.getDouble("AcquisitionPointsRate", 1.0); PC_BANG_POINT_RATE = CustomSettings.getDouble("AcquisitionPointsRate", 1.0);
PC_BANG_RANDOM_POINT = CustomSettings.getBoolean("AcquisitionPointsRandom", false);
if (PC_BANG_POINT_RATE < 0) if (PC_BANG_POINT_RATE < 0)
{ {
PC_BANG_POINT_RATE = 1; PC_BANG_POINT_RATE = 1;
} }
PC_BANG_REWARD_LOW_EXP_KILLS = CustomSettings.getBoolean("RewardLowExpKills", true);
PC_BANG_LOW_EXP_KILLS_CHANCE = CustomSettings.getInt("RewardLowExpKillsChance", 50);
if (PC_BANG_LOW_EXP_KILLS_CHANCE < 0)
{
PC_BANG_LOW_EXP_KILLS_CHANCE = 0;
}
if (PC_BANG_LOW_EXP_KILLS_CHANCE > 100)
{
PC_BANG_LOW_EXP_KILLS_CHANCE = 100;
}
// Load PvP L2Properties file (if exists) // Load PvP L2Properties file (if exists)
final PropertiesParser PVPSettings = new PropertiesParser(PVP_CONFIG_FILE); final PropertiesParser PVPSettings = new PropertiesParser(PVP_CONFIG_FILE);

View File

@@ -26,24 +26,13 @@ import com.l2jserver.gameserver.network.serverpackets.ExPCCafePointInfo;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage; import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.util.Rnd; import com.l2jserver.util.Rnd;
public class PcCafePointsManager public final class PcCafePointsManager
{ {
private static PcCafePointsManager _instance;
public PcCafePointsManager() public PcCafePointsManager()
{ {
} }
public static PcCafePointsManager getInstance() public void givePcCafePoint(final L2PcInstance player, final long exp)
{
if (_instance == null)
{
_instance = new PcCafePointsManager();
}
return _instance;
}
public void givePcCafePoint(final L2PcInstance player, final long givedexp)
{ {
if (!Config.PC_BANG_ENABLED) if (!Config.PC_BANG_ENABLED)
{ {
@@ -55,45 +44,59 @@ public class PcCafePointsManager
return; return;
} }
if (player.getPcBangPoints() >= Config.MAX_PC_BANG_POINTS) if (player.getPcBangPoints() >= Config.PC_BANG_MAX_POINTS)
{ {
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_THE_MAXIMUM_NUMBER_OF_PC_POINTS); final SystemMessage message = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_THE_MAXIMUM_NUMBER_OF_PC_POINTS);
player.sendPacket(sm); player.sendPacket(message);
return; return;
} }
int _points = (int) (givedexp * 0.0001 * Config.PC_BANG_POINT_RATE);
// TODO: Mage class balance? int points = (int) (exp * 0.0001 * Config.PC_BANG_POINT_RATE);
// if ((player.getActiveClass() == ClassId.ARCHMAGE.getId()) || (player.getActiveClass() == ClassId.SOULTAKER.getId()) || (player.getActiveClass() == ClassId.STORM_SCREAMER.getId()) || (player.getActiveClass() == ClassId.MYSTIC_MUSE.getId()))
// {
// _points /= 2;
// }
if (Config.RANDOM_PC_BANG_POINT) if (Config.PC_BANG_RANDOM_POINT)
{ {
_points = Rnd.get(_points / 2, _points); points = Rnd.get(points / 2, points);
} }
SystemMessage sm = null; if ((points == 0) && (exp > 0) && Config.PC_BANG_REWARD_LOW_EXP_KILLS && (Rnd.get(100) < Config.PC_BANG_LOW_EXP_KILLS_CHANCE))
if (_points > 0)
{ {
if (Config.ENABLE_DOUBLE_PC_BANG_POINTS && (Rnd.get(100) < Config.DOUBLE_PC_BANG_POINTS_CHANCE)) points = 1; // minimum points
}
SystemMessage message = null;
if (points > 0)
{ {
_points *= 2; if (Config.PC_BANG_ENABLE_DOUBLE_POINTS && (Rnd.get(100) < Config.PC_BANG_DOUBLE_POINTS_CHANCE))
sm = SystemMessage.getSystemMessage(SystemMessageId.DOUBLE_POINTS_YOU_EARNED_S1_PC_POINT_S); {
points *= 2;
message = SystemMessage.getSystemMessage(SystemMessageId.DOUBLE_POINTS_YOU_EARNED_S1_PC_POINT_S);
} }
else else
{ {
sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_EARNED_S1_PC_POINT_S2); message = SystemMessage.getSystemMessage(SystemMessageId.YOU_EARNED_S1_PC_POINT_S2);
} }
if ((player.getPcBangPoints() + _points) > Config.MAX_PC_BANG_POINTS) if ((player.getPcBangPoints() + points) > Config.PC_BANG_MAX_POINTS)
{ {
_points = Config.MAX_PC_BANG_POINTS - player.getPcBangPoints(); points = Config.PC_BANG_MAX_POINTS - player.getPcBangPoints();
} }
sm.addLong(_points); message.addLong(points);
player.sendPacket(sm); player.sendPacket(message);
player.setPcBangPoints(player.getPcBangPoints() + _points); player.setPcBangPoints(player.getPcBangPoints() + points);
player.sendPacket(new ExPCCafePointInfo(player.getPcBangPoints(), _points, 1)); player.sendPacket(new ExPCCafePointInfo(player.getPcBangPoints(), points, 1));
} }
} }
/**
* Gets the single instance of {@code PcCafePointsManager}.
* @return single instance of {@code PcCafePointsManager}
*/
public static final PcCafePointsManager getInstance()
{
return SingletonHolder._instance;
}
private static class SingletonHolder
{
protected static final PcCafePointsManager _instance = new PcCafePointsManager();
}
} }