Custom Items in custom Builds for dom.

This commit is contained in:
Jonathan Williams 2014-04-19 20:53:55 -07:00
parent 6b07541b3b
commit e5e9cc7284
37 changed files with 1439 additions and 828 deletions

View File

@ -77,9 +77,7 @@ public abstract class ShopPageBase<PluginType extends MiniPlugin, ShopType exten
{
if (slot > inventory.getSize() - 1)
{
// Magic slot conversion
int playerSlot = slot >= (inventory.getSize() + 27) ? slot - (inventory.getSize() + 27) : slot - (inventory.getSize() - 9);
Player.getInventory().setItem(playerSlot, item);
Player.getInventory().setItem(getPlayerSlot(slot), item);
}
else
{
@ -87,6 +85,11 @@ public abstract class ShopPageBase<PluginType extends MiniPlugin, ShopType exten
}
}
protected int getPlayerSlot(int slot)
{
return slot >= (inventory.getSize() + 27) ? slot - (inventory.getSize() + 27) : slot - (inventory.getSize() - 9);
}
protected void AddButton(int slot, ShopItem item, IButton button)
{
AddItem(slot, item);

View File

@ -21,14 +21,13 @@ import mineplex.core.itemstack.ItemStackFactory;
import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
import mineplex.minecraft.game.classcombat.Class.repository.token.ClientClassToken;
import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken;
import mineplex.minecraft.game.classcombat.Class.repository.token.SlotToken;
import mineplex.minecraft.game.classcombat.Skill.ISkill;
import mineplex.minecraft.game.classcombat.Skill.ISkill.SkillType;
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
public class ClientClass
{
public static int MAX_TOKENS = 12;
private ClassManager _classFactory;
private SkillFactory _skillFactory;
private CoreClient _client;
@ -47,9 +46,6 @@ public class ClientClass
private CustomBuildToken _savingCustomBuild;
public int SkillTokens = MAX_TOKENS;
public ClientClass(ClassManager classFactory, SkillFactory skillFactory, CoreClient client, Donor donor, ClientClassToken token)
{
_classFactory = classFactory;
@ -106,6 +102,47 @@ public class ClientClass
if (!buildToken.GlobalPassiveSkill.isEmpty() && !ValidSkill(buildToken.GlobalPassiveSkill, globalPassive, SkillType.GlobalPassive))
continue;
boolean allEmpty = true;
for (SlotToken slotToken : buildToken.Slots)
{
if (slotToken == null)
continue;
if (slotToken.Material == null)
continue;
if (slotToken.Material.isEmpty())
continue;
allEmpty = false;
break;
}
if (allEmpty)
{
buildToken.SkillTokens = CustomBuildToken.MAX_SKILL_TOKENS;
buildToken.ItemTokens = CustomBuildToken.MAX_ITEM_TOKENS;
if (!buildToken.SwordSkill.isEmpty() && !ValidSkill(buildToken.SwordSkill, swordSkill, SkillType.Sword))
buildToken.SkillTokens -= swordSkill.GetTokenCost();
if (!buildToken.AxeSkill.isEmpty() && !ValidSkill(buildToken.AxeSkill, axeSkill, SkillType.Axe))
buildToken.SkillTokens -= axeSkill.GetTokenCost();
if (!buildToken.BowSkill.isEmpty() && !ValidSkill(buildToken.BowSkill, bowSkill, SkillType.Bow))
buildToken.SkillTokens -= bowSkill.GetTokenCost();
if (!buildToken.ClassPassiveASkill.isEmpty() && !ValidSkill(buildToken.ClassPassiveASkill, classPassiveASkill, SkillType.PassiveA))
buildToken.SkillTokens -= classPassiveASkill.GetTokenCost();
if (!buildToken.ClassPassiveBSkill.isEmpty() && !ValidSkill(buildToken.ClassPassiveBSkill, classPassiveBSkill, SkillType.PassiveB))
buildToken.SkillTokens -= classPassiveBSkill.GetTokenCost();
if (!buildToken.GlobalPassiveSkill.isEmpty() && !ValidSkill(buildToken.GlobalPassiveSkill, globalPassive, SkillType.GlobalPassive))
buildToken.SkillTokens -= globalPassive.GetTokenCost();
}
_customBuilds.get(pvpClass).put(buildToken.CustomBuildNumber, buildToken);
}
}
@ -155,8 +192,6 @@ public class ClientClass
{
customBuild.Active = true;
_activeCustomBuilds.put(pvpClass, customBuild);
calculateTokens();
}
public CustomBuildToken GetActiveCustomBuild(IPvpClass pvpClass)
@ -228,6 +263,51 @@ public class ClientClass
else
_lastSkillMap.remove(SkillType.GlobalPassive);
// Put default items, then overwrite them with custom build items
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD), 0);
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE), 1);
for (int i = 2; i < 9; i++)
{
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP), i);
}
if (_gameClass.GetType() == ClassType.Assassin || _gameClass.GetType() == ClassType.Ranger)
{
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.BOW), 2);
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.ARROW, _gameClass.GetType() == ClassType.Assassin ? 16 : 32), 3);
}
else
{
if (_gameClass.GetType() != ClassType.Mage)
{
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.POTION), 8);
}
else
{
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.WEB, 3), 8);
}
}
boolean customItems = false;
for (SlotToken token : customBuild.Slots)
{
if (token == null || token.Material == null || token.Material.isEmpty())
continue;
customItems = true;
_lastItems.put(customBuild.Slots.indexOf(token), ItemStackFactory.Instance.CreateStack(Enum.valueOf(Material.class, token.Material), (byte)0, token.Amount, token.Name));
}
if (!customItems)
{
if (_gameClass.GetType() == ClassType.Assassin || _gameClass.GetType() == ClassType.Ranger)
customBuild.ItemTokens = 6;
else
customBuild.ItemTokens = 5;
}
ResetToDefaults(true, true);
if (notify)
@ -290,31 +370,6 @@ public class ClientClass
if (equipItems)
{
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD), 0);
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE), 1);
for (int i = 2; i < 9; i++)
{
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP), i);
}
if (_gameClass.GetType() == ClassType.Assassin || _gameClass.GetType() == ClassType.Ranger)
{
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.BOW), 2);
PutDefaultItem( ItemStackFactory.Instance.CreateStack(Material.ARROW, _gameClass.GetType() == ClassType.Assassin ? 16 : 32), 3);
}
else
{
if (_gameClass.GetType() != ClassType.Mage)
{
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.POTION), 8);
}
else
{
PutDefaultItem(ItemStackFactory.Instance.CreateStack(Material.WEB, 2), 8);
}
}
_client.GetPlayer().getInventory().clear();
for (Entry<Integer, ItemStack> defaultItem : GetDefaultItems().entrySet())
@ -416,8 +471,6 @@ public class ClientClass
if (IsSavingCustomBuild())
_savingCustomBuild.setSkill(skill, level);
calculateTokens();
}
public void RemoveSkill(ISkill skill)
@ -432,11 +485,9 @@ public class ClientClass
_lastSkillMap.remove(skill.GetSkillType());
if (IsSavingCustomBuild())
_savingCustomBuild.removeSkill(skill.GetSkillType());
_savingCustomBuild.removeSkill(skill);
skill.RemoveUser(_client.GetPlayer());
calculateTokens();
}
public ItemStack[] GetDefaultArmor()
@ -467,44 +518,6 @@ public class ClientClass
return true;
}
private void calculateTokens()
{
if (_gameClass == null)
return;
CustomBuildToken customBuild = _activeCustomBuilds.get(_gameClass);
SkillTokens = MAX_TOKENS;
if (customBuild == null)
return;
ISkill swordSkill = _skillFactory.GetSkill(customBuild.SwordSkill);
ISkill axeSkill = _skillFactory.GetSkill(customBuild.AxeSkill);
ISkill bowSkill = _skillFactory.GetSkill(customBuild.BowSkill);
ISkill classPassiveASkill = _skillFactory.GetSkill(customBuild.ClassPassiveASkill);
ISkill classPassiveBSkill = _skillFactory.GetSkill(customBuild.ClassPassiveBSkill);
ISkill globalPassive = _skillFactory.GetSkill(customBuild.GlobalPassiveSkill);
if (ValidSkill(customBuild.SwordSkill, swordSkill, SkillType.Sword))
SkillTokens -= swordSkill.GetTokenCost() * customBuild.SwordSkillLevel;
if (ValidSkill(customBuild.AxeSkill, axeSkill, SkillType.Axe))
SkillTokens -= axeSkill.GetTokenCost() * customBuild.AxeSkillLevel;
if (ValidSkill(customBuild.BowSkill, bowSkill, SkillType.Bow))
SkillTokens -= bowSkill.GetTokenCost() * customBuild.BowSkillLevel;
if (ValidSkill(customBuild.ClassPassiveASkill, classPassiveASkill, SkillType.PassiveA))
SkillTokens -= classPassiveASkill.GetTokenCost() * customBuild.ClassPassiveASkillLevel;
if (ValidSkill(customBuild.ClassPassiveBSkill, classPassiveBSkill, SkillType.PassiveB))
SkillTokens -= classPassiveBSkill.GetTokenCost() * customBuild.ClassPassiveBSkillLevel;
if (ValidSkill(customBuild.GlobalPassiveSkill, globalPassive, SkillType.GlobalPassive))
SkillTokens -= globalPassive.GetTokenCost() * customBuild.GlobalPassiveSkillLevel;
}
public void DisplaySkills(Player player)
{
player.sendMessage("------------------------------------------");

View File

@ -3,11 +3,16 @@ package mineplex.minecraft.game.classcombat.Class.repository.token;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Material;
import mineplex.minecraft.game.classcombat.Skill.ISkill;
import mineplex.minecraft.game.classcombat.Skill.ISkill.SkillType;
import mineplex.minecraft.game.classcombat.item.Item;
public class CustomBuildToken
{
public static int MAX_SKILL_TOKENS = 12;
public static int MAX_ITEM_TOKENS = 12;
public int CustomBuildId;
public String PlayerName;
@ -38,6 +43,9 @@ public class CustomBuildToken
public List<SlotToken> Slots = new ArrayList<SlotToken>();
public int SkillTokens = MAX_SKILL_TOKENS;
public int ItemTokens = MAX_ITEM_TOKENS;
public void printInfo()
{
System.out.println("CustomBuildId : " + CustomBuildId);
@ -106,41 +114,53 @@ public class CustomBuildToken
default:
break;
}
SkillTokens -= skill.GetTokenCost() * level;
}
public void removeSkill(SkillType type)
public void removeSkill(ISkill skill)
{
switch (type)
int level = 0;
switch (skill.GetSkillType())
{
case Axe:
AxeSkill = "";
level = AxeSkillLevel;
AxeSkillLevel = 0;
break;
case Bow:
BowSkill = "";
level = BowSkillLevel;
BowSkillLevel = 0;
break;
case Class:
break;
case GlobalPassive:
GlobalPassiveSkill = "";
level = GlobalPassiveSkillLevel;
GlobalPassiveSkillLevel = 0;
break;
case PassiveA:
ClassPassiveASkill = "";
level = ClassPassiveASkillLevel;
ClassPassiveASkillLevel = 0;
break;
case PassiveB:
ClassPassiveBSkill = "";
level = ClassPassiveBSkillLevel;
ClassPassiveBSkillLevel = 0;
break;
case Sword:
SwordSkill = "";
level = SwordSkillLevel;
SwordSkillLevel = 0;
break;
default:
break;
}
SkillTokens += skill.GetTokenCost() * level;
}
public boolean hasSkill(ISkill skill)
@ -173,4 +193,73 @@ public class CustomBuildToken
return 0;
}
}
public boolean hasItem(Material material, String name)
{
for (SlotToken token : Slots)
{
// Stupid json crap giving me null values.
if (token == null)
continue;
if (token.Material == null)
continue;
if (token.Name == null)
continue;
if (token.Material.equalsIgnoreCase(material.name()) && token.Name.equalsIgnoreCase(name))
return true;
}
return false;
}
public int addItem(Item item)
{
for (SlotToken token : Slots)
{
if (token == null || token.Material == null || token.Material.isEmpty())
{
token.Material = item.GetType().name();
token.Amount = item.GetAmount();
token.Name = item.GetName();
ItemTokens -= item.getTokenCost();
return Slots.indexOf(token);
}
}
return -1;
}
public int removeItem(Item item)
{
for (SlotToken token : Slots)
{
// Stupid json crap giving me null values.
if (token == null)
continue;
if (token.Material == null)
continue;
if (token.Name == null)
continue;
if (token.Material.equalsIgnoreCase(item.GetName()) && token.Amount == item.GetAmount())
{
token.Material = "";
token.Amount = 0;
token.Name = "";
ItemTokens += item.getTokenCost();
return Slots.indexOf(token);
}
}
return -1;
}
}

View File

@ -2,11 +2,13 @@ package mineplex.minecraft.game.classcombat.Class.repository.token;
public class SlotToken
{
public String Material;
public int Amount;
public String Name = "";
public String Material = "";
public int Amount = 0;
public void printInfo()
{
System.out.println("Name : " + Name);
System.out.println("Material : " + Material);
System.out.println("Amount : " + Amount);
}

View File

@ -20,14 +20,14 @@ import mineplex.minecraft.game.classcombat.item.ItemUsable;
public class Apple extends ItemUsable
{
public Apple(ItemFactory factory, int salesPackageId, Material type,
int amount, boolean canDamage, int creditCost,
public Apple(ItemFactory factory, Material type,
int amount, boolean canDamage, int gemCost, int tokenCost,
ActionType useAction, boolean useStock, long useDelay,
int useEnergy, ActionType throwAction, boolean throwStock,
long throwDelay, int throwEnergy, float throwPower,
long throwExpire, boolean throwPlayer, boolean throwBlock, boolean throwIdle, boolean throwPickup)
{
super(factory, salesPackageId, "Apple", new String[] { "Consume:", "Heals two hunger points.", " ", "Thrown:", "Does half a heart of damage on hit." }, type, amount, canDamage, creditCost,
super(factory, "Apple", new String[] { "Consume:", "Heals two hunger points.", " ", "Thrown:", "Does half a heart of damage on hit." }, type, amount, canDamage, gemCost, tokenCost,
useAction, useStock, useDelay, useEnergy, throwAction, throwStock,
throwDelay, throwEnergy, throwPower,
throwExpire, throwPlayer, throwBlock, throwIdle, throwPickup);

View File

@ -17,14 +17,14 @@ import mineplex.minecraft.game.core.condition.Condition.ConditionType;
public class Soup extends ItemUsable
{
public Soup(ItemFactory factory, int salesPackageId, Material type,
int amount, boolean canDamage, int creditCost,
public Soup(ItemFactory factory, Material type,
int amount, boolean canDamage, int gemCost, int tokenCost,
ActionType useAction, boolean useStock, long useDelay,
int useEnergy, ActionType throwAction, boolean throwStock,
long throwDelay, int throwEnergy, float throwPower,
long throwExpire, boolean throwPlayer, boolean throwBlock, boolean throwIdle, boolean throwPickup)
{
super(factory, salesPackageId, "Mushroom Soup", new String[] { "Consume:", "Heals two hunger points.", "Gives Regen II boost for 4 seconds" }, type, amount, canDamage, creditCost,
super(factory, "Mushroom Soup", new String[] { "Consume:", "Heals two hunger points.", "Gives Regen II boost for 4 seconds" }, type, amount, canDamage, gemCost, tokenCost,
useAction, useStock, useDelay, useEnergy, throwAction, throwStock,
throwDelay, throwEnergy, throwPower,
throwExpire, throwPlayer, throwBlock, throwIdle, throwPickup);

View File

@ -7,7 +7,6 @@ public interface IItem
Material GetType();
int GetAmount();
int GetGemCost();
int GetSalesPackageId();
String GetName();
String[] GetDesc();
}

View File

@ -1,7 +1,6 @@
package mineplex.minecraft.game.classcombat.item;
import mineplex.core.common.util.UtilGear;
import mineplex.minecraft.game.classcombat.item.repository.ItemToken;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import org.bukkit.Material;
@ -13,7 +12,6 @@ public class Item implements IItem, Listener
{
protected ItemFactory Factory;
private int _salesPackageId;
private Material _type;
private String _name;
private String[] _desc;
@ -22,15 +20,17 @@ public class Item implements IItem, Listener
private int _gemCost;
private boolean _canDamage;
public Item(ItemFactory factory, int salesPackageId, String name, String[] desc, Material type, int amount, boolean canDamage, int gemCost)
private int _tokenCost;
public Item(ItemFactory factory, String name, String[] desc, Material type, int amount, boolean canDamage, int gemCost, int tokenCost)
{
Factory = factory;
_salesPackageId = salesPackageId;
_name = name;
_desc = desc;
_type = type;
_amount = amount;
_gemCost = gemCost;
_tokenCost = tokenCost;
_canDamage = canDamage;
}
@ -52,12 +52,6 @@ public class Item implements IItem, Listener
return _gemCost;
}
@Override
public int GetSalesPackageId()
{
return _salesPackageId;
}
@Override
public String GetName()
{
@ -77,16 +71,19 @@ public class Item implements IItem, Listener
event.SetCancelled("Item Damage Cancel");
}
public void Update(ItemToken itemToken)
{
_salesPackageId = itemToken.SalesPackage.GameSalesPackageId;
_gemCost = itemToken.SalesPackage.Gems;
_free = itemToken.SalesPackage.Free;
}
@Override
public String[] GetDesc()
{
return _desc;
}
public boolean isFree()
{
return _free;
}
public int getTokenCost()
{
return _tokenCost;
}
}

View File

@ -1,24 +1,19 @@
package mineplex.minecraft.game.classcombat.item;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import mineplex.core.MiniPlugin;
import mineplex.core.blockrestore.BlockRestore;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.donation.repository.GameSalesPackageToken;
import mineplex.core.energy.Energy;
import mineplex.minecraft.game.core.fire.Fire;
import mineplex.core.projectile.ProjectileManager;
import mineplex.minecraft.game.classcombat.Class.ClassManager;
import mineplex.minecraft.game.classcombat.item.Consume.*;
import mineplex.minecraft.game.classcombat.item.Throwable.*;
import mineplex.minecraft.game.classcombat.item.Tools.Scanner;
import mineplex.minecraft.game.classcombat.item.repository.ItemRepository;
import mineplex.minecraft.game.classcombat.item.repository.ItemToken;
import mineplex.minecraft.game.classcombat.item.weapon.*;
import mineplex.minecraft.game.core.condition.ConditionManager;
import mineplex.minecraft.game.core.damage.DamageManager;
@ -38,6 +33,11 @@ public class ItemFactory extends MiniPlugin implements IItemFactory
private HashMap<String, Item> _items;
private HashSet<String> _ignore;
public ItemFactory(JavaPlugin plugin, BlockRestore blockRestore, ClassManager classManager, ConditionManager condition, DamageManager damage, Energy energy, Fire fire, ProjectileManager projectileManager, String webAddress)
{
this(plugin, blockRestore, classManager, condition, damage, energy, fire, projectileManager, webAddress, new HashSet<String>());
}
public ItemFactory(JavaPlugin plugin, BlockRestore blockRestore, ClassManager classManager, ConditionManager condition, DamageManager damage, Energy energy, Fire fire, ProjectileManager projectileManager, String webAddress, HashSet<String> ignore)
{
super("Item Factory", plugin);
@ -79,48 +79,36 @@ public class ItemFactory extends MiniPlugin implements IItemFactory
AddThrowable();
AddTools();
AddOther();
addWeapons();
for (Item cur : _items.values())
RegisterEvents(cur);
List<ItemToken> itemTokens = new ArrayList<ItemToken>();
for (Item item : _items.values())
{
ItemToken itemToken = new ItemToken();
itemToken.Name = item.GetName();
itemToken.Material = item.GetType().toString();
itemToken.SalesPackage = new GameSalesPackageToken();
itemToken.SalesPackage.GameSalesPackageId = item.GetSalesPackageId();
itemToken.SalesPackage.Gems = item.GetGemCost();
itemTokens.add(itemToken);
}
for (ItemToken itemToken : new ItemRepository(webAddress).GetItems(itemTokens))
{
if (_items.containsKey(itemToken.Name))
{
_items.get(itemToken.Name).Update(itemToken);
}
}
}
private void AddConsumables()
{
AddItem(new Apple(this, 100,
Material.APPLE, 1, false, 0,
AddItem(new Apple(this, Material.APPLE, 1, false, 0, 1,
ActionType.R, true, 500, 0,
ActionType.L, true, 500, 4, 1.2f,
-1, true, true, true, false));
AddItem(new Soup(this, 103,
Material.MUSHROOM_SOUP, 1, true, 0,
AddItem(new Soup(this, Material.MUSHROOM_SOUP, 1, true, 0, 1,
ActionType.R, true, 500, 0,
null, false, 0, 0, 0f,
-1, true, true, true, false));
}
private void addWeapons()
{
AddItem(new BoosterSword(this, 0, 2));
AddItem(new BoosterAxe(this, 0, 2));
AddItem(new BoosterBow(this, 0, 2));
AddItem(new GoldenSword(this, 0, 2));
AddItem(new GoldenAxe(this, 0, 2));
AddItem(new GoldenBow(this, 0, 2));
}
private void AddPassive()
{
@ -128,32 +116,27 @@ public class ItemFactory extends MiniPlugin implements IItemFactory
private void AddThrowable()
{
AddItem(new WaterBottle(this, 301,
Material.POTION, 1, false, 0,
AddItem(new WaterBottle(this, Material.POTION, 1, false, 0, 1,
ActionType.R, true, 500, 0,
ActionType.L, true, 500, 4, 1f,
-1, true, true, true, false));
AddItem(new Web(this, 30,
Material.WEB, 2, false, 500,
AddItem(new Web(this, Material.WEB, 3, false, 500, 1,
null, true, 0, 0,
ActionType.L, true, 250, 8, 1f,
-1, true, true, true, false));
AddItem(new PoisonBall(this, 304,
Material.SLIME_BALL, 1, false, 1500,
AddItem(new PoisonBall(this, Material.SLIME_BALL, 1, false, 1500, 2,
null, true, 0, 0,
ActionType.L, true, 0, 6, 1.2f,
-1, true, true, true, false));
AddItem(new ProximityExplosive(this, 307,
Material.COMMAND, 1, false, 1000,
AddItem(new ProximityExplosive(this, Material.COMMAND, 1, false, 1000, 1,
null, true, 0, 0,
ActionType.L, true, 250, 10, 0.8f,
4000, false, false, false, true));
AddItem(new ProximityZapper(this, 308,
Material.REDSTONE_LAMP_ON, 1, false, 1000,
AddItem(new ProximityZapper(this, Material.REDSTONE_LAMP_OFF, 1, false, 1000, 1,
null, true, 0, 0,
ActionType.L, true, 250, 10, 0.8f,
4000, false, false, false, true));
@ -161,17 +144,19 @@ public class ItemFactory extends MiniPlugin implements IItemFactory
private void AddTools()
{
/*
AddItem(new Scanner(this, 303,
Material.SHEARS, 1, true, 1000,
ActionType.R, false, 2000, 20,
null, true, 250, 6, 1.8f,
-1, true, true, true, false));
*/
}
private void AddOther()
{
AddItem(new Item(this, 401, "Arrows", new String[] { "Standard Arrows" }, Material.ARROW, 8, true, 0));
//AddItem(new Item(this, 402, "Pistol Ammo", new String[] { "Pistol Ammo" }, Material.MELON_SEEDS, 5, true, 5, 0));
AddItem(new Item(this, "Assassin Arrows", new String[] { "Arrows for your bow." }, Material.ARROW, 16, true, 0, 1));
AddItem(new Item(this, "Ranger Arrows", new String[] { "Arrows for your bow." }, Material.ARROW, 32, true, 0, 1));
}
public IItem GetItem(String weaponName)

View File

@ -40,13 +40,13 @@ public abstract class ItemUsable extends Item implements IThrown
private boolean _throwIdle;
private boolean _throwPickup;
public ItemUsable(ItemFactory factory, int salesPackageId, String name, String[] desc,
Material type, int amount, boolean canDamage, int gemCost,
public ItemUsable(ItemFactory factory, String name, String[] desc,
Material type, int amount, boolean canDamage, int gemCost, int tokenCost,
ActionType useAction, boolean useStock, long useDelay, int useEnergy,
ActionType throwAction, boolean throwStock, long throwDelay, int throwEnergy, float throwPower,
long throwExpire, boolean throwPlayer, boolean throwBlock, boolean throwIdle, boolean throwPickup)
{
super(factory, salesPackageId, name, desc, type, amount, canDamage, gemCost);
super(factory, name, desc, type, amount, canDamage, gemCost, tokenCost);
_useAction = useAction;
_throwAction = throwAction;
_useStock = useStock;

View File

@ -24,14 +24,14 @@ import mineplex.minecraft.game.classcombat.item.ItemUsable;
public class Pistol extends ItemUsable
{
public Pistol(ItemFactory factory, int salesPackageId, Material type,
int amount, boolean canDamage, int creditCost,
public Pistol(ItemFactory factory, Material type,
int amount, boolean canDamage, int gemCost, int tokenCost,
ActionType useAction, boolean useStock, long useDelay,
int useEnergy, ActionType throwAction, boolean throwStock,
long throwDelay, int throwEnergy, float throwPower,
long throwExpire, boolean throwPlayer, boolean throwBlock, boolean throwIdle, boolean throwPickup)
{
super(factory, salesPackageId, "Pistol", new String[] { "Pew pew pew." }, type, amount, canDamage, creditCost,
super(factory, "Pistol", new String[] { "Pew pew pew." }, type, amount, canDamage, gemCost, tokenCost,
useAction, useStock, useDelay, useEnergy, throwAction, throwStock,
throwDelay, throwEnergy, throwPower,
throwExpire, throwPlayer, throwBlock, throwIdle, throwPickup);

View File

@ -17,14 +17,14 @@ import mineplex.minecraft.game.classcombat.item.ItemUsable;
public class PoisonBall extends ItemUsable
{
public PoisonBall(ItemFactory factory, int salesPackageId, Material type,
int amount, boolean canDamage, int creditCost,
public PoisonBall(ItemFactory factory, Material type,
int amount, boolean canDamage, int gemCost, int tokenCost,
ActionType useAction, boolean useStock, long useDelay,
int useEnergy, ActionType throwAction, boolean throwStock,
long throwDelay, int throwEnergy, float throwPower,
long throwExpire, boolean throwPlayer, boolean throwBlock, boolean throwIdle, boolean throwPickup)
{
super(factory, salesPackageId, "Poison Ball", new String[] { "Thrown:", "Poisons for 6 seconds on hit.", "Bounces back to you.", "Can be intercepted by enemy on return." }, type, amount, canDamage, creditCost,
super(factory, "Poison Ball", new String[] { "Thrown:", "Poisons for 6 seconds on hit.", "Bounces back to you.", "Can be intercepted by enemy on return." }, type, amount, canDamage, gemCost, tokenCost,
useAction, useStock, useDelay, useEnergy, throwAction, throwStock,
throwDelay, throwEnergy, throwPower,
throwExpire, throwPlayer, throwBlock, throwIdle, throwPickup);

View File

@ -34,14 +34,14 @@ public class ProximityExplosive extends ItemUsable
{
private HashMap<Entity, LivingEntity> _armed = new HashMap<Entity, LivingEntity>();
public ProximityExplosive(ItemFactory factory, int salesPackageId, Material type,
int amount, boolean canDamage, int creditCost,
public ProximityExplosive(ItemFactory factory, Material type,
int amount, boolean canDamage, int gemCost, int tokenCost,
ActionType useAction, boolean useStock, long useDelay,
int useEnergy, ActionType throwAction, boolean throwStock,
long throwDelay, int throwEnergy, float throwPower,
long throwExpire, boolean throwPlayer, boolean throwBlock, boolean throwIdle, boolean throwPickup)
{
super(factory, salesPackageId, "Proximity Explosive", new String[] {
super(factory, "Proximity Explosive", new String[] {
"Thrown Item:",
"Activates after 4 seconds.",
"Detonates on player proximity;",
@ -49,7 +49,7 @@ public class ProximityExplosive extends ItemUsable
"* 1 Damage" ,
"* Strong Knockback" ,
"All effects scale down with range."
}, type, amount, canDamage, creditCost,
}, type, amount, canDamage, gemCost, tokenCost,
useAction, useStock, useDelay, useEnergy, throwAction, throwStock,
throwDelay, throwEnergy, throwPower,
throwExpire, throwPlayer, throwBlock, throwIdle, throwPickup);

View File

@ -31,14 +31,14 @@ public class ProximityZapper extends ItemUsable
{
private HashMap<Entity, LivingEntity> _armed = new HashMap<Entity, LivingEntity>();
public ProximityZapper(ItemFactory factory, int salesPackageId, Material type,
int amount, boolean canDamage, int creditCost,
public ProximityZapper(ItemFactory factory, Material type,
int amount, boolean canDamage, int gemCost, int tokenCost,
ActionType useAction, boolean useStock, long useDelay,
int useEnergy, ActionType throwAction, boolean throwStock,
long throwDelay, int throwEnergy, float throwPower,
long throwExpire, boolean throwPlayer, boolean throwBlock, boolean throwIdle, boolean throwPickup)
{
super(factory, salesPackageId, "Proximity Zapper", new String[] {
super(factory, "Proximity Zapper", new String[] {
"Thrown Item:",
"Activates after 4 seconds.",
"Detonates on player proximity;",
@ -46,7 +46,7 @@ public class ProximityZapper extends ItemUsable
"* Silence for 6 seconds" ,
"* Shock for 6 seconds" ,
"* Slow IV for 6 seconds"
}, type, amount, canDamage, creditCost,
}, type, amount, canDamage, gemCost, tokenCost,
useAction, useStock, useDelay, useEnergy, throwAction, throwStock,
throwDelay, throwEnergy, throwPower,
throwExpire, throwPlayer, throwBlock, throwIdle, throwPickup);

View File

@ -17,14 +17,14 @@ import mineplex.minecraft.game.classcombat.item.ItemUsable;
public class WaterBottle extends ItemUsable
{
public WaterBottle(ItemFactory factory, int salesPackageId, Material type,
int amount, boolean canDamage, int creditCost,
public WaterBottle(ItemFactory factory, Material type,
int amount, boolean canDamage, int gemCost, int tokenCost,
ActionType useAction, boolean useStock, long useDelay,
int useEnergy, ActionType throwAction, boolean throwStock,
long throwDelay, int throwEnergy, float throwPower,
long throwExpire, boolean throwPlayer, boolean throwBlock, boolean throwIdle, boolean throwPickup)
{
super(factory, salesPackageId, "Water Bottle", new String[] {
super(factory, "Water Bottle", new String[] {
"Thrown, giving AoE effect;",
"* 3 Range",
"* Douses Players",
@ -32,7 +32,7 @@ public class WaterBottle extends ItemUsable
"Used, giving personal effect;",
"* Douses Player",
"* Fire Resistance for 4 Seconds"
}, type, amount, canDamage, creditCost,
}, type, amount, canDamage, gemCost, tokenCost,
useAction, useStock, useDelay, useEnergy, throwAction, throwStock,
throwDelay, throwEnergy, throwPower,
throwExpire, throwPlayer, throwBlock, throwIdle, throwPickup);

View File

@ -17,14 +17,14 @@ import mineplex.minecraft.game.classcombat.item.ItemUsable;
public class Web extends ItemUsable
{
public Web(ItemFactory factory, int salesPackageId, Material type,
int amount, boolean canDamage, int creditCost,
public Web(ItemFactory factory, Material type,
int amount, boolean canDamage, int gemCost, int tokenCost,
ActionType useAction, boolean useStock, long useDelay,
int useEnergy, ActionType throwAction, boolean throwStock,
long throwDelay, int throwEnergy, float throwPower,
long throwExpire, boolean throwPlayer, boolean throwBlock, boolean throwIdle, boolean throwPickup)
{
super(factory, salesPackageId, "Web", new String[] { "Thrown:", "Used to trap enemies." }, type, amount, canDamage, creditCost,
super(factory, "Web", new String[] { "Thrown:", "Used to trap enemies." }, type, amount, canDamage, gemCost, tokenCost,
useAction, useStock, useDelay, useEnergy, throwAction, throwStock,
throwDelay, throwEnergy, throwPower,
throwExpire, throwPlayer, throwBlock, throwIdle, throwPickup);

View File

@ -15,14 +15,14 @@ import mineplex.minecraft.game.classcombat.item.ItemUsable;
public class Scanner extends ItemUsable
{
public Scanner(ItemFactory factory, int salesPackageId, Material type,
int amount, boolean canDamage, int creditCost,
public Scanner(ItemFactory factory, Material type,
int amount, boolean canDamage, int gemCost, int tokenCost,
ActionType useAction, boolean useStock, long useDelay,
int useEnergy, ActionType throwAction, boolean throwStock,
long throwDelay, int throwEnergy, float throwPower,
long throwExpire, boolean throwPlayer, boolean throwBlock, boolean throwIdle, boolean throwPickup)
{
super(factory, salesPackageId, "Scanner VR-9000", new String[] { "Displays target players skills." }, type, amount, canDamage, creditCost,
super(factory, "Scanner VR-9000", new String[] { "Displays target players skills." }, type, amount, canDamage, gemCost, tokenCost,
useAction, useStock, useDelay, useEnergy, throwAction, throwStock,
throwDelay, throwEnergy, throwPower,
throwExpire, throwPlayer, throwBlock, throwIdle, throwPickup);

View File

@ -1,30 +0,0 @@
package mineplex.minecraft.game.classcombat.itempack;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class ItemPack
{
private List<ItemStack> _items = new ArrayList<ItemStack>(9);
public void AddItem(ItemStack itemStack)
{
_items.add(itemStack);
}
public void ApplyToPlayer(Player player)
{
for (int i = 0; i < 9; i++)
{
player.getInventory().setItem(i, _items.size() > i ? _items.get(i) : null);
}
}
public int GetCost()
{
return 1000;
}
}

View File

@ -1,81 +0,0 @@
package mineplex.minecraft.game.classcombat.itempack;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniPlugin;
import mineplex.core.common.util.NautHashMap;
import mineplex.minecraft.game.classcombat.Class.IPvpClass;
import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
public class ItemPackFactory extends MiniPlugin
{
private NautHashMap<ClassType, List<ItemPack>> _classItemPackMap = new NautHashMap<ClassType, List<ItemPack>>();
public ItemPackFactory(JavaPlugin plugin)
{
super("Item Pack Factory", plugin);
AddItemPacks();
}
/*
public List<ItemPack> GetItemPacks(IPvpClass pvpClass)
{
}
*/
private void AddItemPacks()
{
for (ClassType pvpClassType : ClassType.values())
_classItemPackMap.put(pvpClassType, new ArrayList<ItemPack>());
AddAssassin();
AddBrute();
AddKnight();
AddMage();
AddRanger();
//AddShifter();
AddGlobal();
}
private void AddGlobal()
{
/*
for (ClassType pvpClassType : ClassType.values())
_classItemPackMap.get(pvpClassType).add(itemPack);
*/
}
private void AddRanger()
{
}
private void AddMage()
{
// TODO Auto-generated method stub
}
private void AddKnight()
{
// TODO Auto-generated method stub
}
private void AddBrute()
{
// TODO Auto-generated method stub
}
private void AddAssassin()
{
// TODO Auto-generated method stub
}
}

View File

@ -5,21 +5,21 @@ import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniPlugin;
import mineplex.minecraft.game.classcombat.Class.ClassManager;
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
import mineplex.minecraft.game.classcombat.itempack.ItemPackFactory;
import mineplex.minecraft.game.classcombat.item.ItemFactory;
public class ClassShopManager extends MiniPlugin
{
private ClassManager _classManager;
private SkillFactory _skillFactory;
private ItemPackFactory _itemPackFactory;
private ItemFactory _itemFactory;
public ClassShopManager(JavaPlugin plugin, ClassManager classManager, SkillFactory skillFactory, ItemPackFactory itemPackFactory)
public ClassShopManager(JavaPlugin plugin, ClassManager classManager, SkillFactory skillFactory, ItemFactory itemFactory)
{
super("Class Shop Manager", plugin);
_classManager = classManager;
_skillFactory = skillFactory;
_itemPackFactory = itemPackFactory;
_itemFactory = itemFactory;
}
public ClassManager GetClassManager()
@ -32,8 +32,8 @@ public class ClassShopManager extends MiniPlugin
return _skillFactory;
}
public ItemPackFactory GetItemPackFactory()
public ItemFactory GetItemFactory()
{
return _itemPackFactory;
return _itemFactory;
}
}

View File

@ -8,21 +8,30 @@ import mineplex.core.common.CurrencyType;
import mineplex.core.common.Rank;
import mineplex.core.common.util.C;
import mineplex.core.donation.DonationManager;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.shop.item.ShopItem;
import mineplex.core.shop.page.ConfirmationPage;
import mineplex.core.shop.page.ShopPageBase;
import mineplex.minecraft.game.classcombat.Class.ClientClass;
import mineplex.minecraft.game.classcombat.Class.IPvpClass;
import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken;
import mineplex.minecraft.game.classcombat.Skill.ISkill;
import mineplex.minecraft.game.classcombat.item.Item;
import mineplex.minecraft.game.classcombat.shop.ClassCombatShop;
import mineplex.minecraft.game.classcombat.shop.ClassShopManager;
import mineplex.minecraft.game.classcombat.shop.button.DeselectItemButton;
import mineplex.minecraft.game.classcombat.shop.button.PurchaseItemButton;
import mineplex.minecraft.game.classcombat.shop.button.PurchaseSkillButton;
import mineplex.minecraft.game.classcombat.shop.button.SelectItemButton;
import mineplex.minecraft.game.classcombat.shop.button.SelectSkillButton;
import mineplex.minecraft.game.classcombat.shop.salespackage.ItemSalesPackage;
import mineplex.minecraft.game.classcombat.shop.salespackage.SkillSalesPackage;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class SkillPage extends ShopPageBase<ClassShopManager, ClassCombatShop>
{
@ -58,15 +67,88 @@ public class SkillPage extends ShopPageBase<ClassShopManager, ClassCombatShop>
ClientClass clientClass = Plugin.GetClassManager().Get(Player);
//System.out.println("Custombuild being displayed.");
//clientClass.GetSavingCustomBuild().printInfo();
BuildClassSkills(_pvpClass, clientClass);
BuildGlobalSkills(clientClass);
//BuildItemPacks();
BuildItems(_pvpClass, clientClass);
}
private void BuildItems(IPvpClass gameClass, ClientClass clientClass)
{
if (clientClass.GetSavingCustomBuild().ItemTokens > 0)
AddItem(62, new ShopItem(Material.IRON_INGOT, clientClass.GetSavingCustomBuild().ItemTokens + " Item Tokens", null, clientClass.GetSavingCustomBuild().ItemTokens, true, true));
else
AddItem(62, new ShopItem(Material.REDSTONE_BLOCK, "0 Item Tokens", null, 1, true, true));
int slotNumber = 54;
int swordSlotNumber = 72;
int axeSlotNumber = 73;
int bowSlotNumber = 74;
int itemNumber = 67;
for (Item item : Plugin.GetItemFactory().GetItems())
{
if (item.GetName().contains("Sword"))
{
slotNumber = swordSlotNumber;
swordSlotNumber -= 9;
}
else if (item.GetName().contains("Axe"))
{
slotNumber = axeSlotNumber;
axeSlotNumber -= 9;
}
else if (item.GetName().contains("Bow"))
{
if (gameClass.GetType() != ClassType.Assassin && gameClass.GetType() != ClassType.Ranger)
continue;
slotNumber = bowSlotNumber;
bowSlotNumber -= 9;
}
else
{
if (gameClass.GetType() != ClassType.Assassin && gameClass.GetType() != ClassType.Ranger && item.GetName().contains("Arrow"))
continue;
if (gameClass.GetType() == ClassType.Assassin && item.GetName().contains("Ranger"))
continue;
if (gameClass.GetType() == ClassType.Ranger && item.GetName().contains("Assassin"))
continue;
slotNumber = itemNumber;
itemNumber++;
if (itemNumber % 9 == 0)
{
itemNumber += 4;
}
}
BuildItem(item, slotNumber, clientClass);
for (int i = 0; i < 9; i++)
{
ItemStack itemStack = Player.getInventory().getItem(i);
if (itemStack != null && itemStack.getType() == item.GetType() && itemStack.getAmount() == item.GetAmount())
{
System.out.println("Put button at index " + (81 + i) + " for " + item.GetType() + " " + item.GetAmount() + " count");
ButtonMap.put(81 + i, new DeselectItemButton(this, item, i));
}
}
}
}
private void BuildClassSkills(IPvpClass gameClass, ClientClass clientClass)
{
if (clientClass.GetSavingCustomBuild().SkillTokens > 0)
getInventory().setItem(8, new ShopItem(Material.GOLD_INGOT, clientClass.GetSavingCustomBuild().SkillTokens + " Skill Tokens", null, clientClass.GetSavingCustomBuild().SkillTokens, true, true).getHandle());
else
getInventory().setItem(8, new ShopItem(Material.REDSTONE_BLOCK, "0 Skill Tokens", null, 1, true, true).getHandle());
getInventory().setItem(0, new ShopItem(Material.IRON_SWORD, "Sword Skills", null, 1, true, true).getHandle());
getInventory().setItem(9, new ShopItem(Material.IRON_AXE, "Axe Skills", null, 1, true, true).getHandle());
getInventory().setItem(18, new ShopItem(Material.BOW, "Bow Skills", null, 1, true, true).getHandle());
@ -130,7 +212,7 @@ public class SkillPage extends ShopPageBase<ClassShopManager, ClassCombatShop>
{
List<String> skillLore = new ArrayList<String>();
boolean locked = isSkillLocked(skill.GetSalesPackageId(), skill);
boolean locked = isSkillLocked(skill);
Material material = locked ? Material.EMERALD : (clientClass.GetSavingCustomBuild().hasSkill(skill) ? Material.WRITTEN_BOOK : Material.BOOK);
boolean hasSkill = clientClass.GetSavingCustomBuild().hasSkill(skill);
int level = hasSkill ? clientClass.GetSavingCustomBuild().getLevel(skill) : 1;
@ -153,10 +235,10 @@ public class SkillPage extends ShopPageBase<ClassShopManager, ClassCombatShop>
if (!hasSkill || level < skill.getMaxLevel())
{
skillLore.add(C.cYellow + "Skill Token Cost: " + C.cWhite + skill.GetTokenCost());
skillLore.add(C.cYellow + "Skill Tokens Remaining: " + C.cWhite + clientClass.SkillTokens + "/" + ClientClass.MAX_TOKENS);
skillLore.add(C.cYellow + "Skill Tokens Remaining: " + C.cWhite + clientClass.GetSavingCustomBuild().SkillTokens + "/" + CustomBuildToken.MAX_SKILL_TOKENS);
skillLore.add("");
if (clientClass.SkillTokens >= skill.GetTokenCost())
if (clientClass.GetSavingCustomBuild().SkillTokens >= skill.GetTokenCost())
{
if (hasSkill)
skillLore.add(C.cGreen + "Left-Click to Upgrade to Level " + (level + 1));
@ -185,58 +267,65 @@ public class SkillPage extends ShopPageBase<ClassShopManager, ClassCombatShop>
if (locked)
AddButton(slotNumber, skillItem, new PurchaseSkillButton(this, skill));
else
AddButton(slotNumber, skillItem, new SelectSkillButton(this, skill, Math.min((hasSkill ? level + 1 : level), skill.getMaxLevel()), clientClass.SkillTokens >= skill.GetTokenCost()));
AddButton(slotNumber, skillItem, new SelectSkillButton(this, skill, Math.min((hasSkill ? level + 1 : level), skill.getMaxLevel()), clientClass.GetSavingCustomBuild().SkillTokens >= skill.GetTokenCost()));
}
/*
private void BuildItemPacks()
protected void BuildItem(Item item, int slotNumber, ClientClass clientClass)
{
Player.getInventory().setItem(18, new ShopItem(Material.WORKBENCH, (byte)11, "Item packs", null, 1, true, true));
List<String> itemLore = new ArrayList<String>();
int slotNumber = 19;
boolean locked = isItemLocked(item);
Material material = locked ? Material.EMERALD : item.GetType();
boolean hasItem = locked ? false : clientClass.GetSavingCustomBuild().hasItem(material, item.GetName());
for (ItemPack item : Plugin.GetItemPackFactory().GetItemPacks(_pvpClass))
{
BuildItemPack(item, slotNumber++);
}
}
String name = (locked ? ChatColor.RED + item.GetName() + " (Locked)" : item.GetName());
private void BuildItemPack(ItemPack itemPack, int slotNumber)
{
List<String> skillLore = new ArrayList<String>();
if (_purchasing)
{
skillLore.add(C.cYellow + itemPack.GetCost() + " Gems");
skillLore.add(C.cBlack);
}
skillLore.addAll(Arrays.asList(itemPack.GetDesc()));
for (int i = 0; i < skillLore.size(); i++)
{
skillLore.set(i, C.cGray + skillLore.get(i));
}
boolean locked = !itemPack.IsFree() && !DonationManager.Get(Player.getName()).OwnsUnknownPackage("Competitive itempack " + itemPack.GetName()) && !Client.GetRank().Has(Rank.ULTRA);
ShopItem skillItem = new ShopItem(locked ? Material.BOOK_AND_QUILL : ((skill.GetUsers().contains(Player) || _purchasing) ? Material.WRITTEN_BOOK : Material.BOOK), (locked ? ChatColor.RED + skill.GetName() + " (Locked)" : skill.GetName()), skillLore.toArray(new String[skillLore.size()]), 1, locked, true);
if (_purchasing)
{
if (locked)
AddButton(slotNumber, skillItem, new PurchaseItemPackButton(this, itemPack));
else
AddItem(slotNumber, skillItem);
{
itemLore.add(C.cYellow + item.GetGemCost() + " Gems");
itemLore.add(C.cBlack);
}
//Add Lore
itemLore.addAll(java.util.Arrays.asList(item.GetDesc()));
//Add Select Information
itemLore.add("");
itemLore.add("");
if (!hasItem)
{
itemLore.add(C.cYellow + "Item Token Cost: " + C.cWhite + item.getTokenCost());
itemLore.add(C.cYellow + "Item Tokens Remaining: " + C.cWhite + clientClass.GetSavingCustomBuild().ItemTokens + "/" + CustomBuildToken.MAX_ITEM_TOKENS);
itemLore.add("");
if (clientClass.GetSavingCustomBuild().ItemTokens >= item.getTokenCost())
{
itemLore.add(C.cGreen + "Left-Click to Select");
}
else
{
if (locked)
AddItem(slotNumber, skillItem);
itemLore.add(C.cRed + "You don't have enough Item Tokens.");
}
}
else
AddButton(slotNumber, skillItem, new SelectItemPackButton(this, itemPack));
{
itemLore.add(C.cGold + "You already have this item.");
}
//Color Gray
for (int i = 0; i < itemLore.size(); i++)
{
itemLore.set(i, C.cGray + itemLore.get(i));
}
*/
ShopItem itemGUI = new ShopItem(material, name, itemLore.toArray(new String[itemLore.size()]), item.GetAmount(), locked, true);
if (locked)
AddButton(slotNumber, itemGUI, new PurchaseItemButton(this, item));
else
AddButton(slotNumber, itemGUI, new SelectItemButton(this, item, clientClass.GetSavingCustomBuild().ItemTokens >= item.getTokenCost()));
}
public void SelectSkill(Player player, ISkill skill, int level)
{
ClientClass clientClass = Plugin.GetClassManager().Get(player);
@ -295,11 +384,73 @@ public class SkillPage extends ShopPageBase<ClassShopManager, ClassCombatShop>
}, this, new SkillSalesPackage(skill), CurrencyType.Gems, player));
}
private boolean isSkillLocked(int skillId, ISkill skill)
private boolean isSkillLocked(ISkill skill)
{
if (skill.IsFree() || DonationManager.Get(Player.getName()).Owns(skillId) || ClientManager.Get(Player.getName()).GetRank().Has(Rank.ULTRA) || DonationManager.Get(Player.getName()).OwnsUnknownPackage("Competitive ULTRA"))
if (skill.IsFree() || ClientManager.Get(Player.getName()).GetRank().Has(Rank.ULTRA) || DonationManager.Get(Player.getName()).OwnsUnknownPackage("Champions ULTRA") || DonationManager.Get(Player.getName()).OwnsUnknownPackage("Champions " + skill.GetName()))
return false;
return true;
}
private boolean isItemLocked(Item item)
{
if (item.isFree() || ClientManager.Get(Player.getName()).GetRank().Has(Rank.ULTRA) || DonationManager.Get(Player.getName()).OwnsUnknownPackage("Champions ULTRA") || DonationManager.Get(Player.getName()).OwnsUnknownPackage("Champions " + item.GetName()))
return false;
return true;
}
public void PurchaseItem(Player player, Item item)
{
Shop.OpenPageForPlayer(player, new ConfirmationPage<ClassShopManager, ClassCombatShop>(Plugin, Shop, ClientManager, DonationManager, new Runnable()
{
public void run()
{
BuildPage();
}
}, this, new ItemSalesPackage(item), CurrencyType.Gems, player));
}
public void SelectItem(Player player, Item item)
{
ClientClass clientClass = Plugin.GetClassManager().Get(player);
int index = clientClass.GetSavingCustomBuild().addItem(item);
if (index != -1)
{
PlayAcceptSound(player);
player.getInventory().setItem(index, ItemStackFactory.Instance.CreateStack(item.GetType(), (byte)0, item.GetAmount(), item.GetName()));
}
else
{
PlayDenySound(player);
}
BuildPage();
}
public void DeselectItem(Player player, Item item)
{
DeselectItem(player, item, Plugin.GetClassManager().Get(player).GetSavingCustomBuild().removeItem(item), false);
}
public void DeselectItem(Player player, Item item, int index, boolean override)
{
if (index != -1 || override)
{
PlayAcceptSound(player);
player.getInventory().setItem(index, null);
if (override)
Plugin.GetClassManager().Get(player).GetSavingCustomBuild().ItemTokens += item.getTokenCost();
}
else
{
PlayDenySound(player);
}
BuildPage();
}
}

View File

@ -12,8 +12,8 @@ public class SkillSalesPackage extends SalesPackageBase
public SkillSalesPackage(ISkill skill)
{
super(skill.GetName(), Material.BOOK, skill.GetDesc(0));
SalesPackageId = skill.GetSalesPackageId();
Free = skill.IsFree();
KnownPackage = false;
}
@Override

View File

@ -26,7 +26,6 @@ import org.bukkit.event.block.BlockFadeEvent;
import org.bukkit.event.block.BlockSpreadEvent;
import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
@ -36,11 +35,10 @@ import mineplex.minecraft.game.classcombat.Class.ClassManager;
import mineplex.minecraft.game.classcombat.Condition.SkillConditionManager;
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
import mineplex.minecraft.game.classcombat.itempack.ItemPackFactory;
import mineplex.minecraft.game.classcombat.item.ItemFactory;
import mineplex.minecraft.game.classcombat.shop.ClassCombatShop;
import mineplex.minecraft.game.classcombat.shop.ClassShopManager;
import mineplex.minecraft.game.core.IRelation;
import mineplex.minecraft.game.core.combat.CombatManager;
import mineplex.minecraft.game.core.condition.ConditionManager;
import mineplex.minecraft.game.core.condition.Condition.ConditionType;
import mineplex.minecraft.game.core.damage.DamageManager;
@ -154,10 +152,11 @@ public class ArcadeManager extends MiniPlugin implements IRelation
if (serverConfig.GameList.contains(GameType.ChampionsDominate) || serverConfig.GameList.contains(GameType.ChampionsTDM) || serverConfig.GameList.contains(GameType.ChampionsMOBA))
{
_skillFactory = new SkillFactory(plugin, damageManager, this, _damageManager.GetCombatManager(), _conditionManager, _projectileManager, _blockRestore, _fire, new Movement(plugin), teleport, new Energy(plugin), webAddress);
Energy energy = new Energy(plugin);
_skillFactory = new SkillFactory(plugin, damageManager, this, _damageManager.GetCombatManager(), _conditionManager, _projectileManager, _blockRestore, _fire, new Movement(plugin), teleport, energy, webAddress);
_classManager = new ClassManager(plugin, clientManager, donationManager, _skillFactory, webAddress);
_classShopManager = new ClassShopManager(_plugin, _classManager, _skillFactory, new ItemPackFactory(_plugin));
_classShopManager = new ClassShopManager(_plugin, _classManager, _skillFactory, new ItemFactory(_plugin, _blockRestore, _classManager, _conditionManager, damageManager, energy, _fire, _projectileManager, webAddress));
_classShop = new ClassCombatShop(_classShopManager, clientManager, donationManager, webAddress);
}

View File

@ -0,0 +1,8 @@
package nautilus.game.core.scoreboard;
import nautilus.game.core.player.IGamePlayer;
public interface IScoreHandler<PlayerType extends IGamePlayer>
{
void RewardForDeath(PlayerType player);
}

View File

@ -0,0 +1,13 @@
package nautilus.game.core.scoreboard;
import nautilus.game.core.engine.ITeam;
import nautilus.game.core.player.ITeamGamePlayer;
public interface ITeamScoreHandler<PlayerType extends ITeamGamePlayer<PlayerTeamType>, PlayerTeamType extends ITeam<PlayerType>> extends IScoreHandler<PlayerType>
{
void RewardForTeamKill(PlayerType killer, PlayerType victim);
void RewardForKill(PlayerType killer, PlayerType victim, int assists);
void RewardForAssist(PlayerType assistant, PlayerType victim);
}

View File

@ -0,0 +1,64 @@
package nautilus.game.core.scoreboard;
import net.minecraft.server.v1_7_R1.EntityPlayer;
import net.minecraft.server.v1_7_R1.Packet201PlayerInfo;
public class LineTracker
{
private String _line = null;
private String _oldLine = null;
private Packet201PlayerInfo _clearOldPacket;
private Packet201PlayerInfo _addNewPacket;
private Packet201PlayerInfo _clearNewPacket;
public LineTracker()
{
_line = null;
}
public void SetLine(String s)
{
if (s != null && s.length() > 16)
s = s.substring(0, 16);
_oldLine = _line;
_line = s;
if (_oldLine != null)
{
_clearOldPacket = new Packet201PlayerInfo(_oldLine, false, 0);
}
if (_line != null)
{
_addNewPacket = new Packet201PlayerInfo(_line, true, 0);
_clearNewPacket = new Packet201PlayerInfo(_line, false, 0);
}
}
public void DisplayLineToPlayer(EntityPlayer entityPlayer)
{
if (_oldLine != null)
{
entityPlayer.playerConnection.sendPacket(_clearOldPacket);
}
if (_line != null)
{
entityPlayer.playerConnection.sendPacket(_addNewPacket);
}
}
public void RemoveLineForPlayer(EntityPlayer entityPlayer)
{
if (_line != null)
{
entityPlayer.playerConnection.sendPacket(_clearNewPacket);
}
}
public void ClearOldLine()
{
_oldLine = null;
}
}

View File

@ -0,0 +1,16 @@
package nautilus.game.core.scoreboard;
import java.util.Comparator;
import nautilus.game.core.player.IGamePlayer;
public class PlayerPointSorter<PlayerType extends IGamePlayer> implements Comparator<PlayerType>
{
public int compare(PlayerType a, PlayerType b)
{
if (a.GetPoints() != b.GetPoints())
return b.GetPoints() - a.GetPoints();
return a.getName().toLowerCase().compareTo(b.getName().toLowerCase());
}
}

View File

@ -0,0 +1,304 @@
package nautilus.game.core.scoreboard;
import org.bukkit.ChatColor;
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.util.NautHashMap;
import mineplex.core.packethandler.IPacketRunnable;
import mineplex.core.packethandler.PacketArrayList;
import mineplex.core.packethandler.PacketHandler;
import mineplex.minecraft.game.classcombat.Class.ClassManager;
import mineplex.minecraft.game.classcombat.Class.ClientClass;
import nautilus.game.core.engine.ITeam;
import nautilus.game.core.game.ITeamGame;
import nautilus.game.core.player.ITeamGamePlayer;
import nautilus.minecraft.core.utils.TimeStuff;
import net.minecraft.server.v1_7_R1.EntityPlayer;
import net.minecraft.server.v1_7_R1.Packet;
import net.minecraft.server.v1_7_R1.Packet201PlayerInfo;
public class TabScoreboard<GameType extends ITeamGame<?, PlayerType, TeamType>, PlayerType extends ITeamGamePlayer<TeamType>, TeamType extends ITeam<PlayerType>> implements IPacketRunnable
{
protected CoreClientManager ClientManager;
protected ClassManager ClassManager;
protected PacketHandler PacketHandler;
protected NautHashMap<String, NautHashMap<Integer, LineTracker>> MainColumn;
protected GameType Game;
protected NautHashMap<Integer, LineTracker> RedColumn;
protected NautHashMap<Integer, LineTracker> BlueColumn;
private boolean _updating = false;
public TabScoreboard(JavaPlugin plugin, CoreClientManager clientManager, ClassManager classManager, PacketHandler packetHandler, GameType game)
{
ClientManager = clientManager;
ClassManager = classManager;
PacketHandler = packetHandler;
Game = game;
RedColumn = new NautHashMap<Integer, LineTracker>();
BlueColumn = new NautHashMap<Integer, LineTracker>();
MainColumn = new NautHashMap<String, NautHashMap<Integer, LineTracker>>();
for (Integer i=0; i < 20; i++)
{
RedColumn.put(i, new LineTracker());
}
for (Integer i=0; i < 20; i++)
{
BlueColumn.put(i, new LineTracker());
}
PacketHandler.AddPacketRunnable(this);
}
public void Update()
{
SetRedTeamInfo();
SetBlueTeamInfo();
for (PlayerType player : Game.GetPlayers())
{
UpdateForPlayer(player);
if (player.isOnline())
SendPlayerScoreboard(player);
}
for (PlayerType player : Game.GetSpectators())
{
UpdateForPlayer(player);
SendPlayerScoreboard(player);
}
for (Integer i=0; i < 20; i++)
{
RedColumn.get(i).ClearOldLine();
}
for (Integer i=0; i < 20; i++)
{
BlueColumn.get(i).ClearOldLine();
}
}
public void AddSpectator(PlayerType spectator)
{
UpdateForPlayer(spectator);
SendPlayerScoreboard(spectator);
}
public void Stop()
{
for (Integer i=0; i < 20; i++)
{
RedColumn.get(i).SetLine("");
}
for (Integer i=0; i < 20; i++)
{
BlueColumn.get(i).SetLine("");
}
Packet201PlayerInfo clearPacket = new Packet201PlayerInfo("", false, 0);
_updating = true;
for (PlayerType player : Game.GetPlayers())
{
NautHashMap<Integer, LineTracker> playerLines = MainColumn.get(player.getName());
// If player quit as game was preparing and never reconnected...
if (playerLines != null)
{
for (Integer i=0; i < 20; i++)
{
playerLines.get(i).SetLine("");
}
SendPlayerScoreboard(player);
EntityPlayer entityPlayer = ((CraftPlayer)player.GetPlayer()).getHandle();
entityPlayer.playerConnection.sendPacket(clearPacket);
}
}
for (PlayerType player : Game.GetSpectators())
{
NautHashMap<Integer, LineTracker> playerLines = MainColumn.get(player.getName());
for (Integer i=0; i < 20; i++)
{
playerLines.get(i).SetLine("");
}
SendPlayerScoreboard(player);
EntityPlayer entityPlayer = ((CraftPlayer)player.GetPlayer()).getHandle();
entityPlayer.playerConnection.sendPacket(clearPacket);
}
_updating = false;
PacketHandler.RemovePacketRunnable(this);
}
public void UpdateForPlayer(PlayerType player)
{
SetMainInfo(player);
}
protected void SetRedTeamInfo()
{
RedColumn.get(0).SetLine(ChatColor.RED + " [RED]");
RedColumn.get(1).SetLine(ChatColor.RED + "Score: " + ChatColor.WHITE + Game.GetRedTeam().GetScore());
RedColumn.get(8).SetLine(ChatColor.RED + " [Players]");
RedColumn.get(9).SetLine(ChatColor.RED + " [K/D/A S]");
String spacer = "";
for (int i=0; i < 5; i++)
{
int lineIndex = 10 + i * 2;
spacer += " ";
if (i < Game.GetRedTeam().GetPlayers().size())
{
PlayerType player = Game.GetRedTeam().GetPlayers().get(i);
ChatColor playerColor = !player.isOnline() ? ChatColor.DARK_GRAY : ChatColor.WHITE;
RedColumn.get(lineIndex).SetLine(playerColor + player.getName());
RedColumn.get(lineIndex+1).SetLine(ChatColor.RED + "" + player.GetKills() + "/" + player.GetDeaths() + "/" + player.GetAssists() + " " + player.GetPoints() + spacer);
}
else
{
RedColumn.get(lineIndex).SetLine(ChatColor.RED + "" + ChatColor.GREEN + spacer);
RedColumn.get(lineIndex+1).SetLine(ChatColor.RED + "" + ChatColor.BLUE + spacer);
}
}
}
protected void SetMainInfo(PlayerType player)
{
if (!player.isOnline())
return;
ClientClass clientPlayer = ClassManager.Get(player.GetPlayer());
if (!MainColumn.containsKey(player.getName()))
{
NautHashMap<Integer, LineTracker> playerLines = new NautHashMap<Integer, LineTracker>();
for (Integer i=0; i < 20; i++)
{
playerLines.put(i, new LineTracker());
}
MainColumn.put(player.getName(), playerLines);
}
NautHashMap<Integer, LineTracker> playerLines = MainColumn.get(player.getName());
playerLines.get(0).SetLine(ChatColor.GREEN + " [Dominate]");
playerLines.get(1).SetLine(ChatColor.GREEN + "Map:");
playerLines.get(2).SetLine(Game.GetArena().GetName());
playerLines.get(3).SetLine(ChatColor.GREEN + "Win Limit:");
playerLines.get(4).SetLine(Game.GetWinLimit() + "");
playerLines.get(5).SetLine(ChatColor.GREEN + "Duration:");
playerLines.get(6).SetLine((Game.GetStartTime() == 0 ? "0" : TimeStuff.GetTimespanString(System.currentTimeMillis() - Game.GetStartTime())));
playerLines.get(7).SetLine(ChatColor.GREEN + "");
playerLines.get(8).SetLine(ChatColor.GREEN + " [Stats]");
playerLines.get(9).SetLine(ChatColor.GREEN + "Class:" );
playerLines.get(10).SetLine((clientPlayer.GetGameClass() == null ? "None" : clientPlayer.GetGameClass().GetName()));
playerLines.get(11).SetLine(ChatColor.GREEN + "Kills:");
playerLines.get(12).SetLine(player.GetKills() + " ");
playerLines.get(13).SetLine(ChatColor.GREEN + "Deaths:");
playerLines.get(14).SetLine(player.GetDeaths() + " ");
playerLines.get(15).SetLine(ChatColor.GREEN + "Assists:");
playerLines.get(16).SetLine(player.GetAssists() + " ");
playerLines.get(17).SetLine(ChatColor.GREEN + "Score:");
playerLines.get(18).SetLine(player.GetPoints() + " ");
playerLines.get(19).SetLine(ChatColor.GREEN + " ");
}
protected void SetBlueTeamInfo()
{
BlueColumn.get(0).SetLine(ChatColor.BLUE + " [BLUE]");
BlueColumn.get(1).SetLine(ChatColor.BLUE + "Score: " + ChatColor.WHITE + Game.GetBlueTeam().GetScore());
BlueColumn.get(8).SetLine(ChatColor.BLUE + " [Players]");
BlueColumn.get(9).SetLine(ChatColor.BLUE + " [K/D/A S]");
String spacer = "";
for (int i=0; i < 5; i++)
{
int lineIndex = 10 + i * 2;
spacer += " ";
if (i < Game.GetBlueTeam().GetPlayers().size())
{
PlayerType player = Game.GetBlueTeam().GetPlayers().get(i);
ChatColor playerColor = !player.isOnline() ? ChatColor.DARK_GRAY : ChatColor.WHITE;
BlueColumn.get(lineIndex).SetLine(playerColor + player.getName());
BlueColumn.get(lineIndex+1).SetLine(ChatColor.BLUE + "" + player.GetKills() + "/" + player.GetDeaths() + "/" + player.GetAssists() + " " + player.GetPoints() + spacer);
}
else
{
BlueColumn.get(lineIndex).SetLine(ChatColor.BLUE + " " + ChatColor.GREEN + spacer);
BlueColumn.get(lineIndex+1).SetLine(ChatColor.BLUE + " " + ChatColor.RED + spacer);
}
}
}
public void ClearScoreboardForSpectator(PlayerType player)
{
EntityPlayer entityPlayer = ((CraftPlayer)player.GetPlayer()).getHandle();
NautHashMap<Integer, LineTracker> playersLines = MainColumn.get(player.getName());
if (playersLines == null)
return;
_updating = true;
for (Integer i=0; i < 20; i++)
{
RedColumn.get(i).RemoveLineForPlayer(entityPlayer);
playersLines.get(i).RemoveLineForPlayer(entityPlayer);
BlueColumn.get(i).RemoveLineForPlayer(entityPlayer);
}
_updating = false;
MainColumn.remove(player.getName());
}
public void SendPlayerScoreboard(PlayerType player)
{
EntityPlayer entityPlayer = ((CraftPlayer)player.GetPlayer()).getHandle();
NautHashMap<Integer, LineTracker> playersLines = MainColumn.get(player.getName());
_updating = true;
for (int i=0; i < 20; i++)
{
RedColumn.get(i).DisplayLineToPlayer(entityPlayer);
playersLines.get(i).DisplayLineToPlayer(entityPlayer);
BlueColumn.get(i).DisplayLineToPlayer(entityPlayer);
playersLines.get(i).ClearOldLine();
}
_updating = false;
}
@Override
public boolean run(Packet packet, Player owner, PacketArrayList packetList)
{
if (packet instanceof Packet201PlayerInfo)
{
if (Game.IsPlayerInGame(owner) && Game.IsActive())
return _updating;
}
return true;
}
}

View File

@ -0,0 +1,60 @@
package nautilus.game.core.scoreboard;
import nautilus.game.core.arena.ITeamArena;
import nautilus.game.core.engine.ITeam;
import nautilus.game.core.game.ITeamGame;
import nautilus.game.core.notifier.TeamPlayerNotifier;
import nautilus.game.core.player.ITeamGamePlayer;
import org.bukkit.ChatColor;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
public abstract class TeamGameScoreHandler<NotifierType extends TeamPlayerNotifier<GameType, ArenaType, PlayerTeamType, PlayerType>, GameType extends ITeamGame<ArenaType, PlayerType, PlayerTeamType>, ArenaType extends ITeamArena, PlayerTeamType extends ITeam<PlayerType>, PlayerType extends ITeamGamePlayer<PlayerTeamType>> implements ITeamScoreHandler<PlayerType, PlayerTeamType>, Listener
{
protected NotifierType Notifier;
public TeamGameScoreHandler(JavaPlugin plugin, NotifierType notifier)
{
Notifier = notifier;
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
public void Stop()
{
HandlerList.unregisterAll(this);
}
public void RewardForDeath(PlayerType player)
{
player.AddPoints(-5);
Notifier.BroadcastMessageToPlayer("Your score was reduced by " + ChatColor.YELLOW + 5 + ChatColor.GRAY + " for dying!", player.GetPlayer());
}
public void RewardForTeamKill(PlayerType killer, PlayerType victim)
{
killer.AddPoints(-25);
Notifier.BroadcastMessageToPlayer("You team killed " + victim.getName() + " and reduced your score by " + ChatColor.YELLOW + -25 + ChatColor.GRAY + "!", killer.GetPlayer());
}
public void RewardForKill(PlayerType killer, PlayerType victim, int assists)
{
int deathValue = 15;
int deathPoints = deathValue + GetKillModifierValue(killer, victim, assists);
killer.AddPoints(deathPoints - (assists * 2));
Notifier.BroadcastMessageToPlayer("You killed " + victim.getName() + " for an additional +" + ChatColor.YELLOW + (deathPoints - (assists * 2)) + ChatColor.GRAY + " to your score!", killer.GetPlayer());
}
public void RewardForAssist(PlayerType assistant, PlayerType victim)
{
assistant.AddPoints(2);
Notifier.BroadcastMessageToPlayer("You helped kill " + victim.getName() + " for an additional +" + ChatColor.YELLOW + 2 + ChatColor.GRAY + " to your score!", assistant.GetPlayer());
}
protected abstract int GetKillModifierValue(PlayerType killer, PlayerType victim, int assists);
}

View File

@ -16,6 +16,9 @@
[StringLength(40)]
public string Name { get; set; }
public string Uuid { get; set; }
public Rank Rank { get; set; }
public bool RankPerm { get; set; }
public DateTime RankExpire { get; set; }

View File

@ -12,10 +12,6 @@
public int CustomBuildNumber { get; set; }
public int SkillTokensBalance { get; set; }
public int ItemTokensBalance { get; set; }
public string PvpClass { get; set; }
public string SwordSkill { get; set; }
@ -36,6 +32,10 @@
public string GlobalPassiveSkill { get; set; }
public int GlobalPassiveSkillLevel { get; set; }
public int SkillTokens { get; set; }
public int ItemTokens { get; set; }
public string Slot1Material { get; set; }
public int Slot1Amount { get; set; }

View File

@ -18,6 +18,7 @@
FilterChat = account.FilterChat;
Name = account.Name;
Uuid = account.Uuid;
Rank = account.Rank.Name;
EconomyBalance = account.EconomyBalance;
@ -112,6 +113,9 @@
public bool FilterChat { get; set; }
public string Name { get; set; }
public string Uuid { get; set; }
public string Rank { get; set; }
public int EconomyBalance { get; set; }

View File

@ -13,8 +13,6 @@
Name = customBuild.Name;
Active = customBuild.Active;
CustomBuildNumber = customBuild.CustomBuildNumber;
SkillTokensBalance = customBuild.SkillTokensBalance;
ItemTokensBalance = customBuild.ItemTokensBalance;
PvpClass = customBuild.PvpClass;
SwordSkill = customBuild.SwordSkill;
@ -35,6 +33,9 @@
GlobalPassiveSkill = customBuild.GlobalPassiveSkill;
GlobalPassiveSkillLevel = customBuild.GlobalPassiveSkillLevel;
SkillTokens = customBuild.SkillTokens;
ItemTokens = customBuild.ItemTokens;
Slots = new List<SlotToken>();
Slots.Add(new SlotToken { Material = customBuild.Slot1Material, Amount = customBuild.Slot1Amount});
@ -58,10 +59,6 @@
public int CustomBuildNumber { get; set; }
public int SkillTokensBalance { get; set; }
public int ItemTokensBalance { get; set; }
public string PvpClass { get; set; }
public string SwordSkill { get; set; }
@ -84,6 +81,10 @@
public List<SlotToken> Slots { get; set; }
public int SkillTokens { get; set; }
public int ItemTokens { get; set; }
public CustomBuild GetCustomBuild()
{
var customBuild = new CustomBuild();
@ -99,8 +100,6 @@
customBuild.Active = Active;
customBuild.CustomBuildNumber = CustomBuildNumber;
customBuild.PvpClass = PvpClass;
customBuild.SkillTokensBalance = SkillTokensBalance;
customBuild.ItemTokensBalance = ItemTokensBalance;
customBuild.SwordSkill = SwordSkill;
customBuild.SwordSkillLevel = SwordSkillLevel;
@ -118,6 +117,9 @@
customBuild.GlobalPassiveSkill = GlobalPassiveSkill;
customBuild.GlobalPassiveSkillLevel = GlobalPassiveSkillLevel;
customBuild.ItemTokens = ItemTokens;
customBuild.SkillTokens = SkillTokens;
if (Slots != null && Slots.Count > 0)
{
var slots = Slots.ToArray();

View File

@ -10,6 +10,8 @@ namespace LOC.Core.Tokens.Client
public string Name { get; set; }
public string Uuid { get; set; }
public Server Server { get; set; }
}
}

View File

@ -79,6 +79,13 @@
}
}
// Insert UUID if not there
if (String.IsNullOrEmpty(account.Uuid) && !String.IsNullOrEmpty(loginToken.Uuid))
{
account.Uuid = loginToken.Uuid;
edited = true;
}
// Expire ranks
if ((account.Rank.Name == "ULTRA") && !account.RankPerm && DateTime.Now.CompareTo(account.RankExpire) >= 0)
{
@ -557,6 +564,7 @@
var newAccount = new Account
{
Name = loginToken.Name,
Uuid = loginToken.Uuid,
Rank = repository.Where<Rank>(x => x.RankId == 1).First(),
Gems = 0,
Transactions = new List<Transaction>(),

File diff suppressed because it is too large Load Diff

Binary file not shown.