Staff server work to include treasure chests/keys and gem hunter level 8, 12.

This commit is contained in:
Jonathan Williams 2014-09-30 12:20:01 -07:00
parent 552a861c8b
commit 0228ef5921
18 changed files with 228 additions and 75 deletions

View File

@ -62,12 +62,12 @@ public class FriendRepository extends RepositoryBase
return false; return false;
} }
public boolean removeFriend(Player caller, String name) public boolean removeFriend(String caller, String name)
{ {
int rowsAffected = executeUpdate(DELETE_FRIEND_RECORD, new ColumnVarChar("name", 100, name), new ColumnVarChar("name", 100, caller.getName())); int rowsAffected = executeUpdate(DELETE_FRIEND_RECORD, new ColumnVarChar("name", 100, name), new ColumnVarChar("name", 100, caller));
if (rowsAffected > 0) if (rowsAffected > 0)
return executeUpdate(DELETE_FRIEND_RECORD, new ColumnVarChar("name", 100, caller.getName()), new ColumnVarChar("uuid", 100, name)) > 0; return executeUpdate(DELETE_FRIEND_RECORD, new ColumnVarChar("name", 100, caller), new ColumnVarChar("uuid", 100, name)) > 0;
return false; return false;
} }

View File

@ -57,45 +57,7 @@ public class StatsManager extends MiniClientPlugin<PlayerStats>
final String uuidString = player.getUniqueId().toString(); final String uuidString = player.getUniqueId().toString();
// Verify stat is in our local cache, if not add it remotely. incrementStat(uuidString, statName, value);
if (!_stats.containsKey(statName))
{
Bukkit.getScheduler().runTaskAsynchronously(GetPlugin(), new Runnable()
{
public void run()
{
synchronized (_statSync)
{
// If many players come in for a new stat, when the first add finishes the others are queued to add again
// This makes a second check for the stat name (already added before lock was released)
// Then it pops into queue and forgets adding the new stat to db.
if (_stats.containsKey(statName))
{
addToQueue(statName, uuidString, value);
return;
}
_repository.addStat(statName);
_stats.clear();
for (Stat stat : _repository.retrieveStats())
{
_stats.put(stat.Name, stat.Id);
}
addToQueue(statName, uuidString, value);
}
}
});
}
else
{
synchronized (_statSync)
{
addToQueue(statName, uuidString, value);
}
}
} }
private void addToQueue(String statName, String uuidString, int value) private void addToQueue(String statName, String uuidString, int value)
@ -181,4 +143,47 @@ public class StatsManager extends MiniClientPlugin<PlayerStats>
} }
}); });
} }
public void incrementStat(final String uuidString, final String statName, final int value)
{
// Verify stat is in our local cache, if not add it remotely.
if (!_stats.containsKey(statName))
{
Bukkit.getScheduler().runTaskAsynchronously(GetPlugin(), new Runnable()
{
public void run()
{
synchronized (_statSync)
{
// If many players come in for a new stat, when the first add finishes the others are queued to add again
// This makes a second check for the stat name (already added before lock was released)
// Then it pops into queue and forgets adding the new stat to db.
if (_stats.containsKey(statName))
{
addToQueue(statName, uuidString, value);
return;
}
_repository.addStat(statName);
_stats.clear();
for (Stat stat : _repository.retrieveStats())
{
_stats.put(stat.Name, stat.Id);
}
addToQueue(statName, uuidString, value);
}
}
});
}
else
{
synchronized (_statSync)
{
addToQueue(statName, uuidString, value);
}
}
}
} }

View File

@ -102,7 +102,7 @@ public class TreasureManager extends MiniPlugin
{ {
// Remove a treasure and a key // Remove a treasure and a key
_inventoryManager.addItemToInventory(player, "Treasure", "Treasure Key", -1); _inventoryManager.addItemToInventory(player, "Treasure", "Treasure Key", -1);
_inventoryManager.addItemToInventory(player, "Treasure", "Treasure Chest", -1); _inventoryManager.addItemToInventory(player, "Utility", "Treasure Chest", -1);
} }
Bukkit.broadcastMessage(F.main("Treasure", F.name(player.getName()) + " is opening a " + C.cGreen + "Treasure Chest")); Bukkit.broadcastMessage(F.main("Treasure", F.name(player.getName()) + " is opening a " + C.cGreen + "Treasure Chest"));

View File

@ -13,6 +13,7 @@ import mineplex.core.playerTracker.PlayerTracker;
import mineplex.core.portal.Portal; import mineplex.core.portal.Portal;
import mineplex.core.preferences.PreferencesManager; import mineplex.core.preferences.PreferencesManager;
import mineplex.core.recharge.Recharge; import mineplex.core.recharge.Recharge;
import mineplex.core.stats.StatsManager;
import mineplex.core.status.ServerStatusManager; import mineplex.core.status.ServerStatusManager;
import mineplex.core.updater.FileUpdater; import mineplex.core.updater.FileUpdater;
import mineplex.core.updater.Updater; import mineplex.core.updater.Updater;
@ -56,7 +57,7 @@ public class StaffServer extends JavaPlugin
new MemoryFix(this); new MemoryFix(this);
new FileUpdater(this, portal); new FileUpdater(this, portal);
new CustomerSupport(this, clientManager, donationManager, new SalesPackageManager(this, clientManager, donationManager, new InventoryManager(this))); new CustomerSupport(this, clientManager, donationManager, new SalesPackageManager(this, clientManager, donationManager, new InventoryManager(this), new StatsManager(this)));
new Password(this); new Password(this);
//Updates //Updates

View File

@ -1,6 +1,5 @@
package mineplex.staffServer.salespackage; package mineplex.staffServer.salespackage;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -8,12 +7,13 @@ import mineplex.core.MiniPlugin;
import mineplex.core.account.CoreClientManager; import mineplex.core.account.CoreClientManager;
import mineplex.core.common.jsonchat.JsonMessage; import mineplex.core.common.jsonchat.JsonMessage;
import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.NautHashMap;
import mineplex.core.common.util.UtilServer;
import mineplex.core.donation.DonationManager; import mineplex.core.donation.DonationManager;
import mineplex.core.inventory.InventoryManager; import mineplex.core.inventory.InventoryManager;
import mineplex.core.stats.StatsManager;
import mineplex.staffServer.salespackage.command.DisplayPackageCommand; import mineplex.staffServer.salespackage.command.DisplayPackageCommand;
import mineplex.staffServer.salespackage.command.Sales; import mineplex.staffServer.salespackage.command.Sales;
import mineplex.staffServer.salespackage.salespackages.Coins; import mineplex.staffServer.salespackage.salespackages.Coins;
import mineplex.staffServer.salespackage.salespackages.GemHunter;
import mineplex.staffServer.salespackage.salespackages.LifetimeHero; import mineplex.staffServer.salespackage.salespackages.LifetimeHero;
import mineplex.staffServer.salespackage.salespackages.LifetimeUltra; import mineplex.staffServer.salespackage.salespackages.LifetimeUltra;
import mineplex.staffServer.salespackage.salespackages.MonthlyHero; import mineplex.staffServer.salespackage.salespackages.MonthlyHero;
@ -25,16 +25,18 @@ public class SalesPackageManager extends MiniPlugin
private CoreClientManager _clientManager; private CoreClientManager _clientManager;
private DonationManager _donationManager; private DonationManager _donationManager;
private InventoryManager _inventoryManager; private InventoryManager _inventoryManager;
private StatsManager _statsManager;
private NautHashMap<String, SalesPackageBase> _salesPackages = new NautHashMap<String, SalesPackageBase>(); private NautHashMap<String, SalesPackageBase> _salesPackages = new NautHashMap<String, SalesPackageBase>();
public SalesPackageManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager, InventoryManager inventoryManager) public SalesPackageManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager, InventoryManager inventoryManager, StatsManager statsManager)
{ {
super("SalesPackageManager", plugin); super("SalesPackageManager", plugin);
_clientManager = clientManager; _clientManager = clientManager;
_donationManager = donationManager; _donationManager = donationManager;
_inventoryManager = inventoryManager; _inventoryManager = inventoryManager;
_statsManager = statsManager;
AddSalesPackage(new Coins(this, 5000)); AddSalesPackage(new Coins(this, 5000));
AddSalesPackage(new Coins(this, 25000)); AddSalesPackage(new Coins(this, 25000));
@ -42,7 +44,9 @@ public class SalesPackageManager extends MiniPlugin
AddSalesPackage(new MonthlyUltra(this)); AddSalesPackage(new MonthlyUltra(this));
AddSalesPackage(new MonthlyHero(this)); AddSalesPackage(new MonthlyHero(this));
AddSalesPackage(new LifetimeUltra(this)); AddSalesPackage(new LifetimeUltra(this));
AddSalesPackage(new LifetimeHero(this)); AddSalesPackage(new LifetimeHero(this));
AddSalesPackage(new GemHunter(this, 8));
AddSalesPackage(new GemHunter(this, 12));
} }
private void AddSalesPackage(SalesPackageBase salesPackage) private void AddSalesPackage(SalesPackageBase salesPackage)
@ -101,4 +105,9 @@ public class SalesPackageManager extends MiniPlugin
coinBuilder.sendToPlayer(caller); coinBuilder.sendToPlayer(caller);
packageBuilder.sendToPlayer(caller); packageBuilder.sendToPlayer(caller);
} }
public StatsManager getStatsManager()
{
return _statsManager;
}
} }

View File

@ -0,0 +1,31 @@
package mineplex.staffServer.salespackage.command;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UUIDFetcher;
import mineplex.staffServer.salespackage.SalesPackageManager;
public class GemHunterCommand extends CommandBase<SalesPackageManager>
{
public GemHunterCommand(SalesPackageManager plugin)
{
super(plugin, Rank.MODERATOR, "gemhunter");
}
@Override
public void Execute(Player caller, String[] args)
{
if (args == null || args.length != 2)
return;
String playerName = args[0];
int amount = Integer.parseInt(args[1]);
Plugin.getDonationManager().PurchaseUnknownSalesPackage(null, playerName, "Gem Hunter Level " + amount, false, 0, false);
Plugin.getStatsManager().incrementStat(UUIDFetcher.getUUIDOf(playerName).toString(), "Global.GemsEarned", amount);
caller.sendMessage(F.main(Plugin.GetName(), "Added Level " + amount + " Gem Hunter to " + playerName + "'s account!"));
}
}

View File

@ -6,7 +6,6 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import mineplex.core.command.CommandBase; import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank; import mineplex.core.common.Rank;
import mineplex.core.recharge.Recharge;
import mineplex.staffServer.salespackage.SalesPackageManager; import mineplex.staffServer.salespackage.SalesPackageManager;
public class HeroCommand extends CommandBase<SalesPackageManager> public class HeroCommand extends CommandBase<SalesPackageManager>
@ -20,15 +19,18 @@ public class HeroCommand extends CommandBase<SalesPackageManager>
public void Execute(Player caller, String[] args) public void Execute(Player caller, String[] args)
{ {
resetCommandCharge(caller); resetCommandCharge(caller);
PlayerCommandPreprocessEvent event = new PlayerCommandPreprocessEvent(caller, "/sales rank " + args[0] + " HERO false"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales rank " + args[0] + " HERO false"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller); resetCommandCharge(caller);
event = new PlayerCommandPreprocessEvent(caller, "/sales coin " + args[0] + " 15000"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales coin " + args[0] + " 15000"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller); resetCommandCharge(caller);
event = new PlayerCommandPreprocessEvent(caller, "/sales booster " + args[0] + " 90"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales booster " + args[0] + " 90"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller);
Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales chest " + args[0] + " 40"));
resetCommandCharge(caller);
Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales key " + args[0] + " 10"));
} }
} }

View File

@ -19,15 +19,18 @@ public class LifetimeHeroCommand extends CommandBase<SalesPackageManager>
public void Execute(Player caller, String[] args) public void Execute(Player caller, String[] args)
{ {
resetCommandCharge(caller); resetCommandCharge(caller);
PlayerCommandPreprocessEvent event = new PlayerCommandPreprocessEvent(caller, "/sales rank " + args[0] + " HERO true"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales rank " + args[0] + " HERO true"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller); resetCommandCharge(caller);
event = new PlayerCommandPreprocessEvent(caller, "/sales coin " + args[0] + " 40000"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales coin " + args[0] + " 40000"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller); resetCommandCharge(caller);
event = new PlayerCommandPreprocessEvent(caller, "/sales booster " + args[0] + " 180"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales booster " + args[0] + " 180"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller);
Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales chest " + args[0] + " 40"));
resetCommandCharge(caller);
Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales key " + args[0] + " 10"));
} }
} }

View File

@ -19,15 +19,18 @@ public class LifetimeUltraCommand extends CommandBase<SalesPackageManager>
public void Execute(Player caller, String[] args) public void Execute(Player caller, String[] args)
{ {
resetCommandCharge(caller); resetCommandCharge(caller);
PlayerCommandPreprocessEvent event = new PlayerCommandPreprocessEvent(caller, "/sales rank " + args[0] + " ULTRA true"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales rank " + args[0] + " ULTRA true"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller); resetCommandCharge(caller);
event = new PlayerCommandPreprocessEvent(caller, "/sales coin " + args[0] + " 20000"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales coin " + args[0] + " 20000"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller); resetCommandCharge(caller);
event = new PlayerCommandPreprocessEvent(caller, "/sales booster " + args[0] + " 60"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales booster " + args[0] + " 60"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller);
Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales chest " + args[0] + " 20"));
resetCommandCharge(caller);
Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales key " + args[0] + " 5"));
} }
} }

View File

@ -15,6 +15,9 @@ public class Sales extends MultiCommandBase<SalesPackageManager>
AddCommand(new RankCommand(plugin)); AddCommand(new RankCommand(plugin));
AddCommand(new CoinCommand(plugin)); AddCommand(new CoinCommand(plugin));
AddCommand(new BoosterCommand(plugin)); AddCommand(new BoosterCommand(plugin));
AddCommand(new TreasureChestCommand(plugin));
AddCommand(new TreasureKeyCommand(plugin));
AddCommand(new GemHunterCommand(plugin));
AddCommand(new UltraCommand(plugin)); AddCommand(new UltraCommand(plugin));
AddCommand(new HeroCommand(plugin)); AddCommand(new HeroCommand(plugin));
AddCommand(new LifetimeUltraCommand(plugin)); AddCommand(new LifetimeUltraCommand(plugin));

View File

@ -0,0 +1,31 @@
package mineplex.staffServer.salespackage.command;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UUIDFetcher;
import mineplex.staffServer.salespackage.SalesPackageManager;
public class TreasureChestCommand extends CommandBase<SalesPackageManager>
{
public TreasureChestCommand(SalesPackageManager plugin)
{
super(plugin, Rank.MODERATOR, "chest");
}
@Override
public void Execute(Player caller, String[] args)
{
if (args == null || args.length != 2)
return;
String playerName = args[0];
int amount = Integer.parseInt(args[1]);
Plugin.getDonationManager().PurchaseUnknownSalesPackage(null, playerName, "Treasure Chest " + amount, false, 0, false);
Plugin.getInventoryManager().addItemToInventoryForOffline(UUIDFetcher.getUUIDOf(playerName).toString(), "Utility", "Treasure Chest", amount);
caller.sendMessage(F.main(Plugin.GetName(), "Added " + amount + " treasure chests to " + playerName + "'s account!"));
}
}

View File

@ -0,0 +1,31 @@
package mineplex.staffServer.salespackage.command;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UUIDFetcher;
import mineplex.staffServer.salespackage.SalesPackageManager;
public class TreasureKeyCommand extends CommandBase<SalesPackageManager>
{
public TreasureKeyCommand(SalesPackageManager plugin)
{
super(plugin, Rank.MODERATOR, "key");
}
@Override
public void Execute(Player caller, String[] args)
{
if (args == null || args.length != 2)
return;
String playerName = args[0];
int amount = Integer.parseInt(args[1]);
Plugin.getDonationManager().PurchaseUnknownSalesPackage(null, playerName, "Treasure Key " + amount, false, 0, false);
Plugin.getInventoryManager().addItemToInventoryForOffline(UUIDFetcher.getUUIDOf(playerName).toString(), "Treasure", "Treasure Key", amount);
caller.sendMessage(F.main(Plugin.GetName(), "Added " + amount + " treasure Keys to " + playerName + "'s account!"));
}
}

View File

@ -19,15 +19,18 @@ public class UltraCommand extends CommandBase<SalesPackageManager>
public void Execute(Player caller, String[] args) public void Execute(Player caller, String[] args)
{ {
resetCommandCharge(caller); resetCommandCharge(caller);
PlayerCommandPreprocessEvent event = new PlayerCommandPreprocessEvent(caller, "/sales rank " + args[0] + " ULTRA false"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales rank " + args[0] + " ULTRA false"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller); resetCommandCharge(caller);
event = new PlayerCommandPreprocessEvent(caller, "/sales coin " + args[0] + " 7500"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales coin " + args[0] + " 7500"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller); resetCommandCharge(caller);
event = new PlayerCommandPreprocessEvent(caller, "/sales booster " + args[0] + " 30"); Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales booster " + args[0] + " 30"));
Bukkit.getServer().getPluginManager().callEvent(event);
resetCommandCharge(caller);
Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales chest " + args[0] + " 20"));
resetCommandCharge(caller);
Bukkit.getServer().getPluginManager().callEvent(new PlayerCommandPreprocessEvent(caller, "/sales key " + args[0] + " 5"));
} }
} }

View File

@ -0,0 +1,23 @@
package mineplex.staffServer.salespackage.salespackages;
import mineplex.staffServer.salespackage.SalesPackageManager;
import org.bukkit.entity.Player;
public class GemHunter extends SalesPackageBase
{
private int _level;
public GemHunter(SalesPackageManager manager, int level)
{
super(manager, "Level " + level + " Gem Hunter");
_level = level;
}
public void displayToAgent(Player agent, String playerName)
{
addButton(agent, "/sales gemhunter " + playerName + " " + _level, "Level " + _level + " Gem Hunter.");
agent.sendMessage(" ");
addBackButton(agent, playerName);
}
}

View File

@ -15,7 +15,9 @@ public class LifetimeHero extends SalesPackageBase
{ {
addButton(agent, "/sales coin " + playerName + " 40000", " 40,000 Coins"); addButton(agent, "/sales coin " + playerName + " 40000", " 40,000 Coins");
addButton(agent, "/sales booster " + playerName + " 180", " 180 Gem Boosters"); addButton(agent, "/sales booster " + playerName + " 180", " 180 Gem Boosters");
addButton(agent, "/sales rank " + playerName + " HERO true", " Lifetime Hero (Also, unlocks kits)."); addButton(agent, "/sales chest " + playerName + " 40", " 40 Treasure Chests");
addButton(agent, "/sales key " + playerName + " 10", " 10 Treasure Keys");
addButton(agent, "/sales rank " + playerName + " HERO true", " Lifetime Hero.");
addButton(agent, "Apply All", "/sales lifetimehero " + playerName, " Apply all above."); addButton(agent, "Apply All", "/sales lifetimehero " + playerName, " Apply all above.");
agent.sendMessage(" "); agent.sendMessage(" ");
addBackButton(agent, playerName); addBackButton(agent, playerName);

View File

@ -15,7 +15,9 @@ public class LifetimeUltra extends SalesPackageBase
{ {
addButton(agent, "/sales coin " + playerName + " 20000", " 20,000 Coins"); addButton(agent, "/sales coin " + playerName + " 20000", " 20,000 Coins");
addButton(agent, "/sales booster " + playerName + " 60", " 60 Gem Boosters"); addButton(agent, "/sales booster " + playerName + " 60", " 60 Gem Boosters");
addButton(agent, "/sales rank " + playerName + " ULTRA true", " Lifetime Ultra (Also, unlocks kits)."); addButton(agent, "/sales chest " + playerName + " 20", " 20 Treasure Chests");
addButton(agent, "/sales key " + playerName + " 5", " 5 Treasure Keys");
addButton(agent, "/sales rank " + playerName + " ULTRA true", " Lifetime Ultra.");
addButton(agent, "Apply All", "/sales lifetimeultra " + playerName, " Apply all above."); addButton(agent, "Apply All", "/sales lifetimeultra " + playerName, " Apply all above.");
agent.sendMessage(" "); agent.sendMessage(" ");
addBackButton(agent, playerName); addBackButton(agent, playerName);

View File

@ -15,6 +15,8 @@ public class MonthlyHero extends SalesPackageBase
{ {
addButton(agent, "/sales coin " + playerName + " 15000", " 15,000 Coins"); addButton(agent, "/sales coin " + playerName + " 15000", " 15,000 Coins");
addButton(agent, "/sales booster " + playerName + " 90", " 90 Gem Boosters"); addButton(agent, "/sales booster " + playerName + " 90", " 90 Gem Boosters");
addButton(agent, "/sales chest " + playerName + " 40", " 40 Treasure Chests");
addButton(agent, "/sales key " + playerName + " 10", " 10 Treasure Keys");
addButton(agent, "/sales rank " + playerName + " HERO false", " Monthly Hero."); addButton(agent, "/sales rank " + playerName + " HERO false", " Monthly Hero.");
addButton(agent, "Apply All", "/sales hero " + playerName, " Apply all above."); addButton(agent, "Apply All", "/sales hero " + playerName, " Apply all above.");
agent.sendMessage(" "); agent.sendMessage(" ");

View File

@ -15,6 +15,8 @@ public class MonthlyUltra extends SalesPackageBase
{ {
addButton(agent, "/sales coin " + playerName + " 7500", " 7,500 Coins"); addButton(agent, "/sales coin " + playerName + " 7500", " 7,500 Coins");
addButton(agent, "/sales booster " + playerName + " 30", " 30 Gem Boosters"); addButton(agent, "/sales booster " + playerName + " 30", " 30 Gem Boosters");
addButton(agent, "/sales chest " + playerName + " 20", " 20 Treasure Chests");
addButton(agent, "/sales key " + playerName + " 5", " 5 Treasure Keys");
addButton(agent, "/sales rank " + playerName + " ULTRA false", " Monthly Ultra."); addButton(agent, "/sales rank " + playerName + " ULTRA false", " Monthly Ultra.");
addButton(agent, "Apply All", "/sales ultra " + playerName, " Apply all above."); addButton(agent, "Apply All", "/sales ultra " + playerName, " Apply all above.");
agent.sendMessage(" "); agent.sendMessage(" ");