diff --git a/data/script/template/script/template/item/AdenaItemTemplate.java b/data/script/template/script/template/item/AdenaItemTemplate.java index b776a2da4..7d9f6545a 100644 --- a/data/script/template/script/template/item/AdenaItemTemplate.java +++ b/data/script/template/script/template/item/AdenaItemTemplate.java @@ -12,15 +12,9 @@ public class AdenaItemTemplate extends ItemTemplate implements Stackable { @Inject public AdenaItemTemplate(ItemTemplateIDFactory factory) { super(factory.createID(ID)); - } - - @Override - public void stack(Item... object) { - // final Item item1 = object[0]; - // if (object.length >= 2) { - // for (int i = 1; i < object.length; i++) { - // // TODO set item amount - // } - // } + this.icon = "icon.etc_adena_i00"; + this.immediateEffect = true; + this.material = ItemMaterial.GOLD; + this.price = 1; } } diff --git a/data/script/template/script/template/item/armor/AbstractGradeAArmorTemplate.java b/data/script/template/script/template/item/armor/AbstractGradeAArmorTemplate.java index 1c163432c..e21befc01 100644 --- a/data/script/template/script/template/item/armor/AbstractGradeAArmorTemplate.java +++ b/data/script/template/script/template/item/armor/AbstractGradeAArmorTemplate.java @@ -1,9 +1,9 @@ package script.template.item.armor; import com.l2jserver.model.id.template.ItemTemplateID; -import com.l2jserver.model.template.ArmorTemplate; import com.l2jserver.model.template.capability.Enchantable; import com.l2jserver.model.template.capability.Penalty; +import com.l2jserver.model.template.item.ArmorTemplate; import com.l2jserver.model.world.capability.Equiper; public abstract class AbstractGradeAArmorTemplate extends ArmorTemplate diff --git a/data/script/template/script/template/item/armor/AbstractNoGradeArmorTemplate.java b/data/script/template/script/template/item/armor/AbstractNoGradeArmorTemplate.java index a0039d55e..b7978c60e 100644 --- a/data/script/template/script/template/item/armor/AbstractNoGradeArmorTemplate.java +++ b/data/script/template/script/template/item/armor/AbstractNoGradeArmorTemplate.java @@ -1,7 +1,7 @@ package script.template.item.armor; import com.l2jserver.model.id.template.ItemTemplateID; -import com.l2jserver.model.template.ArmorTemplate; +import com.l2jserver.model.template.item.ArmorTemplate; public abstract class AbstractNoGradeArmorTemplate extends ArmorTemplate { public AbstractNoGradeArmorTemplate(ItemTemplateID id) { diff --git a/data/script/template/script/template/item/TestPotionTemplate.java b/data/script/template/script/template/item/potion/RedPotionTemplate.java similarity index 54% rename from data/script/template/script/template/item/TestPotionTemplate.java rename to data/script/template/script/template/item/potion/RedPotionTemplate.java index f73b98b7f..10966e923 100644 --- a/data/script/template/script/template/item/TestPotionTemplate.java +++ b/data/script/template/script/template/item/potion/RedPotionTemplate.java @@ -1,17 +1,20 @@ -package script.template.item; +package script.template.item.potion; import com.google.inject.Inject; import com.l2jserver.model.id.template.factory.ItemTemplateIDFactory; -import com.l2jserver.model.template.PotionTemplate; +import com.l2jserver.model.template.item.PotionTemplate; import com.l2jserver.model.world.capability.Attackable; import com.l2jserver.model.world.capability.Attacker; -public class TestPotionTemplate extends PotionTemplate { +public class RedPotionTemplate extends PotionTemplate { public static final int ID = 15; @Inject - public TestPotionTemplate(ItemTemplateIDFactory factory) { - super(factory.createID(ID)); + public RedPotionTemplate(ItemTemplateIDFactory factory) { + super(factory.createID(ID), "icon.etc_potion_red_i00"); + this.weight = 80; + this.price = 40; + } @Override diff --git a/data/script/template/script/template/item/weapon/AbstractNoGradeWeaponTemplate.java b/data/script/template/script/template/item/weapon/AbstractNoGradeWeaponTemplate.java new file mode 100644 index 000000000..09a074596 --- /dev/null +++ b/data/script/template/script/template/item/weapon/AbstractNoGradeWeaponTemplate.java @@ -0,0 +1,12 @@ +package script.template.item.weapon; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.item.WeaponTemplate; +import com.l2jserver.model.world.character.CharacterInventory.InventoryPaperdoll; + +public abstract class AbstractNoGradeWeaponTemplate extends WeaponTemplate { + public AbstractNoGradeWeaponTemplate(ItemTemplateID id, String icon, + ItemMaterial material, InventoryPaperdoll paperdoll, WeaponType type) { + super(id, icon, material, paperdoll, type); + } +} diff --git a/data/script/template/script/template/item/weapon/LongSwordTemplate.java b/data/script/template/script/template/item/weapon/LongSwordTemplate.java new file mode 100644 index 000000000..299847ca8 --- /dev/null +++ b/data/script/template/script/template/item/weapon/LongSwordTemplate.java @@ -0,0 +1,37 @@ +package script.template.item.weapon; + +import com.google.inject.Inject; +import com.l2jserver.model.id.template.factory.ItemTemplateIDFactory; +import com.l2jserver.model.world.capability.Attackable; +import com.l2jserver.model.world.capability.Attacker; +import com.l2jserver.model.world.character.CharacterInventory.InventoryPaperdoll; + +public class LongSwordTemplate extends AbstractNoGradeWeaponTemplate { + public static final int ID = 57; + + @Inject + public LongSwordTemplate(ItemTemplateIDFactory factory) { + super(factory.createID(ID), "icon.weapon_long_sword_i00", + ItemMaterial.STEEL, InventoryPaperdoll.RIGHT_HAND, + WeaponType.SWORD); + + attribute.set(WeaponAttributeType.PHYSICAL_ATTACK, 0x08, 24); + attribute.set(WeaponAttributeType.MAGICAL_ATTACK, 0x08, 17); + attribute.set(WeaponAttributeType.R_CRITICAL, 0x08, 8); + attribute.set(WeaponAttributeType.PHYSICAL_ATTACK_SPEED, 0x08, 379); + + this.randomDamage = 10; + this.attackRange = 40; + this.damageRange = new int[] { 0, 0, 40, 120 }; + this.weight = 1560; + this.price = 105000; + this.soulshots = 2; + this.spiritshots = 2; + } + + @Override + public void attack(Attacker source, Attackable target) { + source.attack(target, this); + target.receiveAttack(source, this); + } +} diff --git a/data/script/template/script/template/item/weapon/ShortSwordTemplate.java b/data/script/template/script/template/item/weapon/ShortSwordTemplate.java new file mode 100644 index 000000000..2af68d486 --- /dev/null +++ b/data/script/template/script/template/item/weapon/ShortSwordTemplate.java @@ -0,0 +1,40 @@ +package script.template.item.weapon; + +import com.google.inject.Inject; +import com.l2jserver.model.id.template.factory.ItemTemplateIDFactory; +import com.l2jserver.model.world.capability.Attackable; +import com.l2jserver.model.world.capability.Attacker; +import com.l2jserver.model.world.character.CharacterInventory.InventoryPaperdoll; + +public class ShortSwordTemplate extends AbstractNoGradeWeaponTemplate { + public static final int ID = 57; + + @Inject + public ShortSwordTemplate(ItemTemplateIDFactory factory) { + super(factory.createID(ID), "icon.weapon_small_sword_i00", + ItemMaterial.STEEL, InventoryPaperdoll.RIGHT_HAND, + WeaponType.SWORD); + + attribute.set(WeaponAttributeType.PHYSICAL_ATTACK, 0x08, 8); + attribute.set(WeaponAttributeType.MAGICAL_ATTACK, 0x08, 6); + attribute.set(WeaponAttributeType.R_CRITICAL, 0x08, 8); + attribute.set(WeaponAttributeType.PHYSICAL_ATTACK_SPEED, 0x08, 379); + + this.type = WeaponType.SWORD; + this.paperdoll = InventoryPaperdoll.RIGHT_HAND; + this.randomDamage = 10; + this.attackRange = 40; + this.damageRange = new int[] { 0, 0, 40, 120 }; + this.material = ItemMaterial.STEEL; + this.weight = 1600; + this.price = 590; + this.soulshots = 1; + this.spiritshots = 1; + } + + @Override + public void attack(Attacker source, Attackable target) { + source.attack(target, this); + target.receiveAttack(source, this); + } +} diff --git a/data/script/template/script/template/item/weapon/TestWeaponTemplate.java b/data/script/template/script/template/item/weapon/TestWeaponTemplate.java deleted file mode 100644 index 55a6ea337..000000000 --- a/data/script/template/script/template/item/weapon/TestWeaponTemplate.java +++ /dev/null @@ -1,32 +0,0 @@ -package script.template.item.weapon; - -import com.l2jserver.model.template.WeaponTemplate; -import com.l2jserver.model.world.capability.Attackable; -import com.l2jserver.model.world.capability.Attacker; - -public class TestWeaponTemplate extends WeaponTemplate { - private static final int DAMAGE_PHYSICAL = 10; - private static final int DAMAGE_MAGICAL = 10; - @SuppressWarnings("unused") - private static final int MAX_ENCHANT_LEVEL = 10; - - public TestWeaponTemplate() { - super(null); - } - - @Override - public void attack(Attacker source, Attackable target) { - source.attack(target, this); - target.receiveAttack(source, this); - } - - @Override - public int getPhysicalDamage() { - return DAMAGE_PHYSICAL; - } - - @Override - public int getMagicalDamage() { - return DAMAGE_MAGICAL; - } -} diff --git a/pom.xml b/pom.xml index 3420130e4..56a3bb765 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ junit 4.8.2 jar - compile + test org.jboss.netty diff --git a/src/main/java/com/l2jserver/game/net/packet/client/RequestCharacterTemplatesPacket.java b/src/main/java/com/l2jserver/game/net/packet/client/RequestCharacterTemplatesPacket.java index 019d06846..a7262031e 100644 --- a/src/main/java/com/l2jserver/game/net/packet/client/RequestCharacterTemplatesPacket.java +++ b/src/main/java/com/l2jserver/game/net/packet/client/RequestCharacterTemplatesPacket.java @@ -23,6 +23,14 @@ import com.l2jserver.model.world.character.CharacterClass; public class RequestCharacterTemplatesPacket extends AbstractClientPacket { public static final int OPCODE = 0x13; + public static final CharacterClass[] TEMPLATE_CLASSES = { + CharacterClass.HUMAN_FIGHTER, CharacterClass.HUMAN_MYSTIC, + CharacterClass.ELVEN_FIGHTER, CharacterClass.ELVEN_MYSTIC, + CharacterClass.DARK_FIGHTER, CharacterClass.DARK_MYSTIC, + CharacterClass.ORC_FIGHTER, CharacterClass.ORC_MYSTIC, + CharacterClass.DWARVEN_FIGHTER, CharacterClass.MALE_SOLDIER, + CharacterClass.FEMALE_SOLDIER }; + /** * The logger */ @@ -43,12 +51,13 @@ public class RequestCharacterTemplatesPacket extends AbstractClientPacket { @Override public void process(final Lineage2Connection conn) { log.debug("Requested character templates"); - final CharacterTemplateID id = idFactory - .createID(CharacterClass.HUMAN_FIGHTER.id); - final CharacterTemplate template = id.getTemplate(); + for (final CharacterClass charClass : TEMPLATE_CLASSES) { + final CharacterTemplateID id = idFactory.createID(charClass.id); + final CharacterTemplate template = id.getTemplate(); + final CharacterTemplatePacket templatePacket = new CharacterTemplatePacket( + template); - final CharacterTemplatePacket templatePacket = new CharacterTemplatePacket( - template); - conn.write(templatePacket); + conn.write(templatePacket); + } } } diff --git a/src/main/java/com/l2jserver/model/template/ItemTemplate.java b/src/main/java/com/l2jserver/model/template/ItemTemplate.java index 0f17d3c6c..2fbff0dd2 100644 --- a/src/main/java/com/l2jserver/model/template/ItemTemplate.java +++ b/src/main/java/com/l2jserver/model/template/ItemTemplate.java @@ -4,6 +4,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.capability.Depositable; +import com.l2jserver.model.template.capability.Dropable; +import com.l2jserver.model.template.capability.Enchantable; +import com.l2jserver.model.template.capability.Sellable; +import com.l2jserver.model.template.capability.Tradable; +import com.l2jserver.model.template.capability.Usable; import com.l2jserver.model.world.Item; /** @@ -18,16 +24,114 @@ public abstract class ItemTemplate extends AbstractTemplate { private static final Logger log = LoggerFactory .getLogger(ItemTemplate.class); + protected int weight = 0; + protected int price = 0; + protected String icon; + protected boolean immediateEffect = true; + + protected ItemMaterial material; + + public enum ItemMaterial { + COTTON, WOOD, PAPER, FISH, ORIHARUKON, HORN, ADAMANTAITE, CHRYSOLITE, MITHRIL, COBWEB, RUNE_XP, CLOTH, SCALE_OF_DRAGON, BONE, GOLD, LEATHER, FINE_STEEL, SILVER, DYESTUFF, CRYSTAL, RUNE_REMOVE_PENALTY, STEEL, BRONZE, RUNE_SP, LIQUID, BLOOD_STEEL, DAMASCUS; + } + public ItemTemplate(ItemTemplateID id) { super(id); } + public ItemTemplate(final ItemTemplateID id, String icon, + ItemMaterial material) { + super(id); + this.icon = icon; + this.material = material; + } + @Override public Item create() { log.debug("Creating a new Item instance with template {}", this); return new Item(this.getID()); } + public void stack(Item... object) { + } + + /** + * @return true if item is enchantable + */ + public boolean isEnchantable() { + return (this instanceof Enchantable); + } + + /** + * @return the sellable + */ + public boolean isSellable() { + return (this instanceof Sellable); + } + + /** + * @return the dropable + */ + public boolean isDropable() { + return (this instanceof Dropable); + } + + /** + * @return the tradable + */ + public boolean isTradable() { + return (this instanceof Tradable); + } + + /** + * @return the usable + */ + public boolean isUsable() { + return (this instanceof Usable); + } + + /** + * @return the usable + */ + public boolean isDepositable() { + return (this instanceof Depositable); + } + + /** + * @return the weight + */ + public int getWeight() { + return weight; + } + + /** + * @return the price + */ + public int getPrice() { + return price; + } + + /** + * @return the icon + */ + public String getIcon() { + return icon; + } + + /** + * @return the immediateEffect + */ + public boolean isImmediateEffect() { + return immediateEffect; + } + + /** + * @return the material + */ + public ItemMaterial getMaterial() { + return material; + } + @Override public ItemTemplateID getID() { return (ItemTemplateID) super.getID(); diff --git a/src/main/java/com/l2jserver/model/template/WeaponTemplate.java b/src/main/java/com/l2jserver/model/template/WeaponTemplate.java deleted file mode 100644 index 17d125a29..000000000 --- a/src/main/java/com/l2jserver/model/template/WeaponTemplate.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.l2jserver.model.template; - -import com.l2jserver.model.id.template.ItemTemplateID; -import com.l2jserver.model.template.capability.Attackable; -import com.l2jserver.model.world.Item; - -/** - * Template for Weapon {@link Item} - * - * @author Rogiel - */ -public abstract class WeaponTemplate extends ItemTemplate implements Attackable { - public WeaponTemplate(ItemTemplateID id) { - super(id); - } -} diff --git a/src/main/java/com/l2jserver/model/template/capability/Attackable.java b/src/main/java/com/l2jserver/model/template/capability/Attackable.java index 0799f2448..c97bad13b 100644 --- a/src/main/java/com/l2jserver/model/template/capability/Attackable.java +++ b/src/main/java/com/l2jserver/model/template/capability/Attackable.java @@ -14,8 +14,4 @@ import com.l2jserver.model.world.capability.Attacker; public interface Attackable extends TemplateCapability { void attack(Attacker source, com.l2jserver.model.world.capability.Attackable target); - - int getPhysicalDamage(); - - int getMagicalDamage(); } diff --git a/src/main/java/com/l2jserver/model/template/capability/Depositable.java b/src/main/java/com/l2jserver/model/template/capability/Depositable.java new file mode 100644 index 000000000..653dcb15e --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/capability/Depositable.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.capability; + +import com.l2jserver.model.template.Template; +import com.l2jserver.model.world.capability.Attacker; + +/** + * Defines an {@link Template template} {@link TemplateCapability capability} + * that can be selled. + * + * @author Rogiel + */ +public interface Depositable extends TemplateCapability { + void sell(Attacker source, + com.l2jserver.model.world.capability.Attackable target); +} diff --git a/src/main/java/com/l2jserver/model/template/capability/Dropable.java b/src/main/java/com/l2jserver/model/template/capability/Dropable.java new file mode 100644 index 000000000..b4cadc421 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/capability/Dropable.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.capability; + +import com.l2jserver.model.template.Template; +import com.l2jserver.model.world.capability.Attacker; + +/** + * Defines an {@link Template template} {@link TemplateCapability capability} + * that can be selled. + * + * @author Rogiel + */ +public interface Dropable extends TemplateCapability { + void sell(Attacker source, + com.l2jserver.model.world.capability.Attackable target); +} diff --git a/src/main/java/com/l2jserver/model/template/capability/Sellable.java b/src/main/java/com/l2jserver/model/template/capability/Sellable.java new file mode 100644 index 000000000..d20dfa615 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/capability/Sellable.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.capability; + +import com.l2jserver.model.template.Template; +import com.l2jserver.model.world.capability.Attacker; + +/** + * Defines an {@link Template template} {@link TemplateCapability capability} + * that can be selled. + * + * @author Rogiel + */ +public interface Sellable extends TemplateCapability { + void sell(Attacker source, + com.l2jserver.model.world.capability.Attackable target); +} diff --git a/src/main/java/com/l2jserver/model/template/capability/Tradable.java b/src/main/java/com/l2jserver/model/template/capability/Tradable.java new file mode 100644 index 000000000..245541afd --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/capability/Tradable.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.capability; + +import com.l2jserver.model.template.Template; +import com.l2jserver.model.world.capability.Attacker; + +/** + * Defines an {@link Template template} {@link TemplateCapability capability} + * that can be selled. + * + * @author Rogiel + */ +public interface Tradable extends TemplateCapability { + void sell(Attacker source, + com.l2jserver.model.world.capability.Attackable target); +} diff --git a/src/main/java/com/l2jserver/model/template/capability/Usable.java b/src/main/java/com/l2jserver/model/template/capability/Usable.java new file mode 100644 index 000000000..83853b5af --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/capability/Usable.java @@ -0,0 +1,13 @@ +package com.l2jserver.model.template.capability; + +import com.l2jserver.model.template.Template; + +/** + * Defines an {@link Template template} {@link TemplateCapability capability} + * that can be used. + * + * @author Rogiel + */ +public interface Usable extends TemplateCapability { + void canUse(); +} diff --git a/src/main/java/com/l2jserver/model/template/ArmorTemplate.java b/src/main/java/com/l2jserver/model/template/item/ArmorTemplate.java similarity index 84% rename from src/main/java/com/l2jserver/model/template/ArmorTemplate.java rename to src/main/java/com/l2jserver/model/template/item/ArmorTemplate.java index 89c16916f..d6ae45707 100644 --- a/src/main/java/com/l2jserver/model/template/ArmorTemplate.java +++ b/src/main/java/com/l2jserver/model/template/item/ArmorTemplate.java @@ -1,6 +1,7 @@ -package com.l2jserver.model.template; +package com.l2jserver.model.template.item; import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; import com.l2jserver.model.template.capability.Defendable; import com.l2jserver.model.template.capability.IncomingDamageIntercept; import com.l2jserver.model.world.Item; diff --git a/src/main/java/com/l2jserver/model/template/item/ArrowTemplate.java b/src/main/java/com/l2jserver/model/template/item/ArrowTemplate.java new file mode 100644 index 000000000..ace7c50f9 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/ArrowTemplate.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.world.Item; + +/** + * Template for consumable arrow {@link Item} + * + * @author Rogiel + */ +public abstract class ArrowTemplate extends ConsumableTemplate { + public ArrowTemplate(ItemTemplateID id, String icon, ItemMaterial material) { + super(id, icon, material); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/CastleGuardTemplate.java b/src/main/java/com/l2jserver/model/template/item/CastleGuardTemplate.java new file mode 100644 index 000000000..8e503a556 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/CastleGuardTemplate.java @@ -0,0 +1,16 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.Item; + +/** + * Template for Castle Guard {@link Item} + * + * @author Rogiel + */ +public abstract class CastleGuardTemplate extends ItemTemplate { + public CastleGuardTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/ConsumableTemplate.java b/src/main/java/com/l2jserver/model/template/item/ConsumableTemplate.java similarity index 62% rename from src/main/java/com/l2jserver/model/template/ConsumableTemplate.java rename to src/main/java/com/l2jserver/model/template/item/ConsumableTemplate.java index f0b5a442a..a8ebda5d2 100644 --- a/src/main/java/com/l2jserver/model/template/ConsumableTemplate.java +++ b/src/main/java/com/l2jserver/model/template/item/ConsumableTemplate.java @@ -1,6 +1,7 @@ -package com.l2jserver.model.template; +package com.l2jserver.model.template.item; import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; import com.l2jserver.model.template.capability.Consumable; import com.l2jserver.model.world.Item; @@ -11,7 +12,8 @@ import com.l2jserver.model.world.Item; */ public abstract class ConsumableTemplate extends ItemTemplate implements Consumable { - public ConsumableTemplate(ItemTemplateID id) { - super(id); + public ConsumableTemplate(ItemTemplateID id, String icon, + ItemMaterial material) { + super(id, icon, material); } } diff --git a/src/main/java/com/l2jserver/model/template/item/CoupomTemplate.java b/src/main/java/com/l2jserver/model/template/item/CoupomTemplate.java new file mode 100644 index 000000000..4945401bf --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/CoupomTemplate.java @@ -0,0 +1,16 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.Item; + +/** + * Template for coupom {@link Item} + * + * @author Rogiel + */ +public abstract class CoupomTemplate extends ItemTemplate { + public CoupomTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/CropTemplate.java b/src/main/java/com/l2jserver/model/template/item/CropTemplate.java new file mode 100644 index 000000000..10acd5a65 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/CropTemplate.java @@ -0,0 +1,16 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.Item; + +/** + * Template for crop {@link Item} + * + * @author Rogiel + */ +public abstract class CropTemplate extends ItemTemplate { + public CropTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/DyeTemplate.java b/src/main/java/com/l2jserver/model/template/item/DyeTemplate.java new file mode 100644 index 000000000..c5940c395 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/DyeTemplate.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.world.Item; + +/** + * Template for consumable Dye {@link Item} + * + * @author Rogiel + */ +public abstract class DyeTemplate extends ConsumableTemplate { + public DyeTemplate(ItemTemplateID id, String icon, ItemMaterial material) { + super(id, icon, material); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/ElixirTemplate.java b/src/main/java/com/l2jserver/model/template/item/ElixirTemplate.java new file mode 100644 index 000000000..260f33ebc --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/ElixirTemplate.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.world.Item; + +/** + * Template for consumable elixir {@link Item} + * + * @author Rogiel + */ +public abstract class ElixirTemplate extends ConsumableTemplate { + public ElixirTemplate(ItemTemplateID id, String icon, ItemMaterial material) { + super(id, icon, material); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/EnchantScrollTemplate.java b/src/main/java/com/l2jserver/model/template/item/EnchantScrollTemplate.java new file mode 100644 index 000000000..38baa8884 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/EnchantScrollTemplate.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.world.Item; + +/** + * Template for consumable enchant scroll {@link Item} + * + * @author Rogiel + */ +public abstract class EnchantScrollTemplate extends ScrollTemplate { + public EnchantScrollTemplate(ItemTemplateID id, String icon) { + super(id, icon); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/HarvestTemplate.java b/src/main/java/com/l2jserver/model/template/item/HarvestTemplate.java new file mode 100644 index 000000000..c85ef81fe --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/HarvestTemplate.java @@ -0,0 +1,16 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.Item; + +/** + * Template for harvest {@link Item} + * + * @author Rogiel + */ +public abstract class HarvestTemplate extends ItemTemplate { + public HarvestTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/LotteryTicketTemplate.java b/src/main/java/com/l2jserver/model/template/item/LotteryTicketTemplate.java new file mode 100644 index 000000000..5b0caa281 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/LotteryTicketTemplate.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.world.Item; + +/** + * Template for lottery ticket {@link Item} + * + * @author Rogiel + */ +public abstract class LotteryTicketTemplate extends TicketTemplate { + public LotteryTicketTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/LureTemplate.java b/src/main/java/com/l2jserver/model/template/item/LureTemplate.java new file mode 100644 index 000000000..709d9f861 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/LureTemplate.java @@ -0,0 +1,16 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.Item; + +/** + * Template for lure {@link Item} + * + * @author Rogiel + */ +public abstract class LureTemplate extends ItemTemplate { + public LureTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/MaterialTemplate.java b/src/main/java/com/l2jserver/model/template/item/MaterialTemplate.java new file mode 100644 index 000000000..1f0b09ee1 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/MaterialTemplate.java @@ -0,0 +1,16 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.Item; + +/** + * Template for material {@link Item} + * + * @author Rogiel + */ +public abstract class MaterialTemplate extends ItemTemplate { + public MaterialTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/PetCollarTemplate.java b/src/main/java/com/l2jserver/model/template/item/PetCollarTemplate.java new file mode 100644 index 000000000..6cb997008 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/PetCollarTemplate.java @@ -0,0 +1,16 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.Item; + +/** + * Template for pet collar {@link Item} + * + * @author Rogiel + */ +public abstract class PetCollarTemplate extends ItemTemplate { + public PetCollarTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/PotionTemplate.java b/src/main/java/com/l2jserver/model/template/item/PotionTemplate.java similarity index 53% rename from src/main/java/com/l2jserver/model/template/PotionTemplate.java rename to src/main/java/com/l2jserver/model/template/item/PotionTemplate.java index bdae4899f..4328bc37f 100644 --- a/src/main/java/com/l2jserver/model/template/PotionTemplate.java +++ b/src/main/java/com/l2jserver/model/template/item/PotionTemplate.java @@ -1,6 +1,7 @@ -package com.l2jserver.model.template; +package com.l2jserver.model.template.item; import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.capability.Stackable; import com.l2jserver.model.world.Item; /** @@ -8,8 +9,9 @@ import com.l2jserver.model.world.Item; * * @author Rogiel */ -public abstract class PotionTemplate extends ConsumableTemplate { - public PotionTemplate(ItemTemplateID id) { - super(id); +public abstract class PotionTemplate extends ConsumableTemplate implements + Stackable { + public PotionTemplate(ItemTemplateID id, String icon) { + super(id, icon, ItemMaterial.LIQUID); } } diff --git a/src/main/java/com/l2jserver/model/template/item/RaceTicketTemplate.java b/src/main/java/com/l2jserver/model/template/item/RaceTicketTemplate.java new file mode 100644 index 000000000..a26ae9699 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/RaceTicketTemplate.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.world.Item; + +/** + * Template for Race Ticket {@link Item} + * + * @author Rogiel + */ +public abstract class RaceTicketTemplate extends TicketTemplate { + public RaceTicketTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/RecipeTemplate.java b/src/main/java/com/l2jserver/model/template/item/RecipeTemplate.java new file mode 100644 index 000000000..9d8f73fdc --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/RecipeTemplate.java @@ -0,0 +1,18 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.Item; + +/** + * Template for recipe {@link Item} + * + * @author Rogiel + */ +public abstract class RecipeTemplate extends ItemTemplate { + private ItemTemplateID item; + + public RecipeTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/RuneTemplate.java b/src/main/java/com/l2jserver/model/template/item/RuneTemplate.java new file mode 100644 index 000000000..0e80bd4d2 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/RuneTemplate.java @@ -0,0 +1,16 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.Item; + +/** + * Template for rune {@link Item} + * + * @author Rogiel + */ +public abstract class RuneTemplate extends ItemTemplate { + public RuneTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/ScrollTemplate.java b/src/main/java/com/l2jserver/model/template/item/ScrollTemplate.java new file mode 100644 index 000000000..8d6552bbe --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/ScrollTemplate.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.world.Item; + +/** + * Template for consumable scroll {@link Item} + * + * @author Rogiel + */ +public abstract class ScrollTemplate extends ConsumableTemplate { + public ScrollTemplate(ItemTemplateID id, String icon) { + super(id, icon, ItemMaterial.PAPER); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/SeedTemplate.java b/src/main/java/com/l2jserver/model/template/item/SeedTemplate.java new file mode 100644 index 000000000..fe69585a4 --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/SeedTemplate.java @@ -0,0 +1,16 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.Item; + +/** + * Template for seed {@link Item} + * + * @author Rogiel + */ +public abstract class SeedTemplate extends ItemTemplate { + public SeedTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/TicketOfLordTemplate.java b/src/main/java/com/l2jserver/model/template/item/TicketOfLordTemplate.java new file mode 100644 index 000000000..073f89d9d --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/TicketOfLordTemplate.java @@ -0,0 +1,15 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.world.Item; + +/** + * Template for ticket of lord {@link Item} + * + * @author Rogiel + */ +public abstract class TicketOfLordTemplate extends TicketTemplate { + public TicketOfLordTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/TicketTemplate.java b/src/main/java/com/l2jserver/model/template/item/TicketTemplate.java new file mode 100644 index 000000000..5e947cbac --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/TicketTemplate.java @@ -0,0 +1,16 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.Item; + +/** + * Template for ticket {@link Item} + * + * @author Rogiel + */ +public abstract class TicketTemplate extends ItemTemplate { + public TicketTemplate(ItemTemplateID id) { + super(id); + } +} diff --git a/src/main/java/com/l2jserver/model/template/item/WeaponTemplate.java b/src/main/java/com/l2jserver/model/template/item/WeaponTemplate.java new file mode 100644 index 000000000..c9e97aa0d --- /dev/null +++ b/src/main/java/com/l2jserver/model/template/item/WeaponTemplate.java @@ -0,0 +1,201 @@ +package com.l2jserver.model.template.item; + +import com.l2jserver.model.id.template.ItemTemplateID; +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.template.capability.Attackable; +import com.l2jserver.model.world.Item; +import com.l2jserver.model.world.character.CharacterInventory.InventoryPaperdoll; + +/** + * Template for Weapon {@link Item} + * + * @author Rogiel + */ +public abstract class WeaponTemplate extends ItemTemplate implements Attackable { + protected InventoryPaperdoll paperdoll = null; + protected WeaponType type; + + public enum WeaponType { + FISHINGROD, CROSSBOW, BIG_SWORD, RAPIER, DUAL_FIST, ETC, DAGGER, BLUNT, BIG_BLUNT, DUAL_DAGGER, DUAL, FLAG, POLE, FIST, BOW, OWN_THING, SWORD, ANCIENT_SWORD; + } + + protected final WeaponAttribute attribute = new WeaponAttribute(); + + protected int randomDamage = 0; + protected int attackRange = 0; + protected int[] damageRange = new int[] {}; + + protected int soulshots = 0; + protected int spiritshots = 0; + + protected int crystals; + protected CrystalType crystal; + + public enum CrystalType { + GRADE_A, GRADE_B, GRADE_C, GRADE_D; + } + + public WeaponTemplate(ItemTemplateID id, String icon, + ItemMaterial material, InventoryPaperdoll paperdoll, WeaponType type) { + super(id, icon, material); + this.paperdoll = paperdoll; + this.type = type; + } + + public enum WeaponAttributeType { + PHYSICAL_ATTACK, MAGICAL_ATTACK, R_CRITICAL, PHYSICAL_ATTACK_SPEED; + } + + public class WeaponAttribute { + public void add(WeaponAttributeType type, int order, int value) { + } + + public void set(WeaponAttributeType type, int order, int value) { + } + + public void enchant(WeaponAttributeType type, int order, int value) { + } + } + + /** + * @return the paperdoll + */ + public InventoryPaperdoll getPaperdoll() { + return paperdoll; + } + + /** + * @param paperdoll + * the paperdoll to set + */ + public void setPaperdoll(InventoryPaperdoll paperdoll) { + this.paperdoll = paperdoll; + } + + /** + * @return the type + */ + public WeaponType getType() { + return type; + } + + /** + * @param type + * the type to set + */ + public void setType(WeaponType type) { + this.type = type; + } + + /** + * @return the randomDamage + */ + public int getRandomDamage() { + return randomDamage; + } + + /** + * @param randomDamage + * the randomDamage to set + */ + public void setRandomDamage(int randomDamage) { + this.randomDamage = randomDamage; + } + + /** + * @return the attackRange + */ + public int getAttackRange() { + return attackRange; + } + + /** + * @param attackRange + * the attackRange to set + */ + public void setAttackRange(int attackRange) { + this.attackRange = attackRange; + } + + /** + * @return the damageRange + */ + public int[] getDamageRange() { + return damageRange; + } + + /** + * @param damageRange + * the damageRange to set + */ + public void setDamageRange(int[] damageRange) { + this.damageRange = damageRange; + } + + /** + * @return the soulshots + */ + public int getSoulshots() { + return soulshots; + } + + /** + * @param soulshots + * the soulshots to set + */ + public void setSoulshots(int soulshots) { + this.soulshots = soulshots; + } + + /** + * @return the spiritshots + */ + public int getSpiritshots() { + return spiritshots; + } + + /** + * @param spiritshots + * the spiritshots to set + */ + public void setSpiritshots(int spiritshots) { + this.spiritshots = spiritshots; + } + + /** + * @return the crystals + */ + public int getCrystals() { + return crystals; + } + + /** + * @param crystals + * the crystals to set + */ + public void setCrystals(int crystals) { + this.crystals = crystals; + } + + /** + * @return the crystal + */ + public CrystalType getCrystal() { + return crystal; + } + + /** + * @param crystal + * the crystal to set + */ + public void setCrystal(CrystalType crystal) { + this.crystal = crystal; + } + + /** + * @return the attribute + */ + public WeaponAttribute getAttribute() { + return attribute; + } +} diff --git a/src/main/java/com/l2jserver/model/world/Item.java b/src/main/java/com/l2jserver/model/world/Item.java index 499d2b382..cb7c79373 100644 --- a/src/main/java/com/l2jserver/model/world/Item.java +++ b/src/main/java/com/l2jserver/model/world/Item.java @@ -49,6 +49,8 @@ public class Item extends AbstractObject implements Playable, Spawnable, * Drop coordinate of this item */ private Coordinate coordinate; + + private int count = 1; public Item(ItemTemplateID templateID) { this.templateID = templateID; diff --git a/src/main/java/com/l2jserver/service/game/template/ScriptTemplateService.java b/src/main/java/com/l2jserver/service/game/template/ScriptTemplateService.java index f40213648..fa2e31637 100644 --- a/src/main/java/com/l2jserver/service/game/template/ScriptTemplateService.java +++ b/src/main/java/com/l2jserver/service/game/template/ScriptTemplateService.java @@ -59,6 +59,11 @@ public class ScriptTemplateService extends AbstractService implements public void addTemplate(Class> t) { final Template template = injector.getInstance(t); + if (templates.containsKey(template.getID())) + throw new TemplateException("Template with ID" + template.getID() + + " is already registered for " + + templates.get(template.getID())); + if (template.getID() != null) templates.put(template.getID(), template); } diff --git a/src/main/java/com/l2jserver/service/game/template/TemplateException.java b/src/main/java/com/l2jserver/service/game/template/TemplateException.java new file mode 100644 index 000000000..5dcc4bf4c --- /dev/null +++ b/src/main/java/com/l2jserver/service/game/template/TemplateException.java @@ -0,0 +1,21 @@ +package com.l2jserver.service.game.template; + +public class TemplateException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public TemplateException() { + super(); + } + + public TemplateException(String message, Throwable cause) { + super(message, cause); + } + + public TemplateException(String message) { + super(message); + } + + public TemplateException(Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/com/l2jserver/util/calculator/Formula.java b/src/main/java/com/l2jserver/util/calculator/Formula.java new file mode 100644 index 000000000..edc9a9eab --- /dev/null +++ b/src/main/java/com/l2jserver/util/calculator/Formula.java @@ -0,0 +1,38 @@ +package com.l2jserver.util.calculator; + +import java.util.List; + +import com.l2jserver.util.calculator.operation.AddOperation; +import com.l2jserver.util.calculator.operation.CalculatorOperation; +import com.l2jserver.util.calculator.operation.SetOperation; +import com.l2jserver.util.calculator.operation.SubtractOperation; +import com.l2jserver.util.factory.CollectionFactory; + +public class Formula { + private List> operations = CollectionFactory + .newList(null); + + public void addOperation(int order, CalculatorOperation operation) { + operations.set(order, operation); + } + + public void add(int order, int value) { + addOperation(order, new AddOperation(value)); + } + + public void subtract(int order, int value) { + addOperation(order, new SubtractOperation(value)); + } + + public void set(int order, int value) { + addOperation(order, new SetOperation(value)); + } + + public int calculate() { + int value = 0; + for (CalculatorOperation operation : operations) { + value = operation.calculate(value); + } + return value; + } +} diff --git a/src/main/java/com/l2jserver/util/calculator/operation/AddOperation.java b/src/main/java/com/l2jserver/util/calculator/operation/AddOperation.java new file mode 100644 index 000000000..9d0265219 --- /dev/null +++ b/src/main/java/com/l2jserver/util/calculator/operation/AddOperation.java @@ -0,0 +1,14 @@ +package com.l2jserver.util.calculator.operation; + +public class AddOperation implements CalculatorOperation { + private Integer value; + + public AddOperation(Integer value) { + this.value = value; + } + + @Override + public Integer calculate(Integer value) { + return value + this.value; + } +} diff --git a/src/main/java/com/l2jserver/util/calculator/operation/CalculatorOperation.java b/src/main/java/com/l2jserver/util/calculator/operation/CalculatorOperation.java new file mode 100644 index 000000000..3494aff6e --- /dev/null +++ b/src/main/java/com/l2jserver/util/calculator/operation/CalculatorOperation.java @@ -0,0 +1,5 @@ +package com.l2jserver.util.calculator.operation; + +public interface CalculatorOperation { + T calculate(T value); +} diff --git a/src/main/java/com/l2jserver/util/calculator/operation/MultiplyOperation.java b/src/main/java/com/l2jserver/util/calculator/operation/MultiplyOperation.java new file mode 100644 index 000000000..fde121bef --- /dev/null +++ b/src/main/java/com/l2jserver/util/calculator/operation/MultiplyOperation.java @@ -0,0 +1,14 @@ +package com.l2jserver.util.calculator.operation; + +public class MultiplyOperation implements CalculatorOperation { + private Integer value; + + public MultiplyOperation(Integer value) { + this.value = value; + } + + @Override + public Integer calculate(Integer value) { + return value * this.value; + } +} diff --git a/src/main/java/com/l2jserver/util/calculator/operation/SetOperation.java b/src/main/java/com/l2jserver/util/calculator/operation/SetOperation.java new file mode 100644 index 000000000..2da0f9823 --- /dev/null +++ b/src/main/java/com/l2jserver/util/calculator/operation/SetOperation.java @@ -0,0 +1,14 @@ +package com.l2jserver.util.calculator.operation; + +public class SetOperation implements CalculatorOperation { + private Integer value; + + public SetOperation(Integer value) { + this.value = value; + } + + @Override + public Integer calculate(Integer value) { + return this.value; + } +} diff --git a/src/main/java/com/l2jserver/util/calculator/operation/SubtractOperation.java b/src/main/java/com/l2jserver/util/calculator/operation/SubtractOperation.java new file mode 100644 index 000000000..f9200cad1 --- /dev/null +++ b/src/main/java/com/l2jserver/util/calculator/operation/SubtractOperation.java @@ -0,0 +1,14 @@ +package com.l2jserver.util.calculator.operation; + +public class SubtractOperation implements CalculatorOperation { + private Integer value; + + public SubtractOperation(Integer value) { + this.value = value; + } + + @Override + public Integer calculate(Integer value) { + return value - this.value; + } +} diff --git a/src/tool/java/com/l2jserver/tool/conversor/CharacterTemplateBase.txt b/src/tool/java/com/l2jserver/tool/conversor/chartemplate/CharacterTemplateBase.txt similarity index 100% rename from src/tool/java/com/l2jserver/tool/conversor/CharacterTemplateBase.txt rename to src/tool/java/com/l2jserver/tool/conversor/chartemplate/CharacterTemplateBase.txt diff --git a/src/tool/java/com/l2jserver/tool/conversor/CharacterTemplateConverter.java b/src/tool/java/com/l2jserver/tool/conversor/chartemplate/CharacterTemplateConverter.java similarity index 98% rename from src/tool/java/com/l2jserver/tool/conversor/CharacterTemplateConverter.java rename to src/tool/java/com/l2jserver/tool/conversor/chartemplate/CharacterTemplateConverter.java index a4deafc75..a5e643a66 100644 --- a/src/tool/java/com/l2jserver/tool/conversor/CharacterTemplateConverter.java +++ b/src/tool/java/com/l2jserver/tool/conversor/chartemplate/CharacterTemplateConverter.java @@ -1,4 +1,4 @@ -package com.l2jserver.tool.conversor; +package com.l2jserver.tool.conversor.chartemplate; import java.io.FileOutputStream; import java.io.IOException; diff --git a/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemListXml.java b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemListXml.java new file mode 100644 index 000000000..93da3e17b --- /dev/null +++ b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemListXml.java @@ -0,0 +1,30 @@ +package com.l2jserver.tool.conversor.itemtemplate; + +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "list") +@XmlAccessorType(XmlAccessType.NONE) +public class ItemListXml { + @XmlElement(name = "item") + private List items; + + /** + * @return the items + */ + public List getItems() { + return items; + } + + /** + * @param items + * the items to set + */ + public void setItems(List items) { + this.items = items; + } +} diff --git a/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemSetXml.java b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemSetXml.java new file mode 100644 index 000000000..0d568945a --- /dev/null +++ b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemSetXml.java @@ -0,0 +1,62 @@ +package com.l2jserver.tool.conversor.itemtemplate; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "set") +@XmlAccessorType(XmlAccessType.NONE) +public class ItemSetXml { + @XmlAttribute(name = "order") + private int order; + @XmlAttribute(name = "stat") + private String stat; + @XmlAttribute(name = "val") + private int val; + + /** + * @return the order + */ + public int getOrder() { + return order; + } + + /** + * @param order + * the order to set + */ + public void setOrder(int order) { + this.order = order; + } + + /** + * @return the stat + */ + public String getStat() { + return stat; + } + + /** + * @param stat + * the stat to set + */ + public void setStat(String stat) { + this.stat = stat; + } + + /** + * @return the val + */ + public int getVal() { + return val; + } + + /** + * @param val + * the val to set + */ + public void setVal(int val) { + this.val = val; + } +} diff --git a/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemTemplateBase.txt b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemTemplateBase.txt new file mode 100644 index 000000000..5c3be42a6 --- /dev/null +++ b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemTemplateBase.txt @@ -0,0 +1,16 @@ +package script.template.item${package}; + +import com.google.inject.Inject; +import com.l2jserver.model.id.template.factory.ItemTemplateIDFactory; +${import} +import com.l2jserver.model.world.Item; + +public class ${className}Template ${extends} ${implements} { + public static final int ID = ${id}; + + @Inject + public ${className}Template(ItemTemplateIDFactory factory) { + super(factory.createID(ID)); + ${values} + } +} \ No newline at end of file diff --git a/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemTemplateConversor.java b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemTemplateConversor.java new file mode 100644 index 000000000..b4cfd0cd3 --- /dev/null +++ b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemTemplateConversor.java @@ -0,0 +1,203 @@ +package com.l2jserver.tool.conversor.itemtemplate; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Collection; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.xml.bind.JAXB; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; + +public class ItemTemplateConversor { + private static String template; + + public static void main(String[] args) throws IOException { + template = IOUtils.toString(ItemTemplateConversor.class + .getResourceAsStream("ItemTemplateBase.txt")); + + @SuppressWarnings("unchecked") + Collection files = FileUtils + .listFiles( + new File( + "/home/rogiel/Documents/Eclipse/lineage2/L2J_DataPack_BETA/data/stats/items"), + new String[] { "xml" }, false); + + for (final File file : files) { + processFile(file.getAbsolutePath()); + } + } + + private static void processFile(String file) throws FileNotFoundException { + ItemListXml xml = JAXB.unmarshal(new FileInputStream(file), + ItemListXml.class); + for (final ItemXml item : xml.getItems()) { + String template = ItemTemplateConversor.template; + String values = ""; + for (final ItemValueXml val : item.getValues()) { + values += generateSet(val.getName(), val.getValue()); + } + template = replace(template, "values", values); + template = replace(template, "package", ""); + template = replace(template, "import", ""); + template = replace(template, "className", camelCase(item.getName())); + template = replace(template, "extends", " extends " + + camelCase(item.getType()) + "Template"); + template = replace(template, "implements", ""); + template = replace(template, "id", item.getId() + ""); + } + } + + private static String generateSet(String property, String value) { + value = convertValue(property, value); + if (value == null) + return ""; + property = convertPropertyName(property); + if (property == null) + return ""; + + if (property.contains("_")) { + System.out.println(property); + System.exit(0); + } + + return "this." + convertPropertyName(property) + " = " + value + ";\n"; + } + + private static String convertPropertyName(String property) { + if ("default_action".equals(property)) + return null; + if ("is_tradable".equals(property)) + return null; + if ("is_dropable".equals(property)) + return null; + if ("is_sellable".equals(property)) + return null; + if ("is_destroyable".equals(property)) + return null; + if ("is_depositable".equals(property)) + return null; + if ("is_questitem".equals(property)) + return null; + if ("enchant_enabled".equals(property)) + return null; + if ("element_enabled".equals(property)) + return null; + if ("enchant4_skill".equals(property)) + return null; + if ("is_premium".equals(property)) + return null; + if ("is_oly_restricted".equals(property)) + return null; + if ("change_weaponId".equals(property)) + return null; + if ("use_condition".equals(property)) + return null; + if ("oncast_chance".equals(property)) + return "castChance"; + if ("oncast_skill".equals(property)) + return "castSkill"; + if ("oncrit_skill".equals(property)) + return "criticalSkill"; + if ("unequip_skill".equals(property)) + return "unequipSkill"; + if ("equip_condition".equals(property)) + return null; + if ("reduced_soulshot".equals(property)) + return null; + if ("reduced_mp_consume".equals(property)) + return null; + if ("equip_reuse_delay".equals(property)) + return null; + if ("recipe_id".equals(property)) + return null; + if ("shared_reuse_group".equals(property)) + return null; + if ("ex_immediate_effect".equals(property)) + return null; + if ("oncrit_chance".equals(property)) + return null; // TODO + if ("capsuled_items".equals(property)) + return "capsuled"; + if ("mp_consume".equals(property)) + return "mpConsume"; + if ("reuse_delay".equals(property)) + return "reuseDelay"; + if ("item_skill".equals(property)) + return "itemSkill"; + if ("is_magic_weapon".equals(property)) + return null; + if ("immediate_effect".equals(property)) + return "immediateEffect"; + if ("bodypart".equals(property)) + return "paperdoll"; + if ("is_stackable".equals(property)) + return null; + if ("etcitem_type".equals(property)) + return null; + if ("weapon_type".equals(property)) + return "type"; + if ("armor_type".equals(property)) + return "type"; + if ("attack_range".equals(property)) + return "attackRange"; + if ("damage_range".equals(property)) + return "damageRange"; + if ("random_damage".equals(property)) + return "randomDamage"; + if ("crystal_count".equals(property)) + return "crystals"; + if ("crystal_type".equals(property)) + return "crystal"; + return property; + } + + private static String convertValue(String property, String value) { + if ("material".equals(property)) + return "ItemMaterial." + value.toUpperCase(); + if ("weapon_type".equals(property)) + return "WeaponType." + value.toUpperCase(); + if ("bodypart".equals(property)) + return "InventoryPaperdoll." + value.toUpperCase(); + if ("icon".equals(property)) + return convertString(value); + if ("damage_range".equals(property)) + return convertArray(value, "int"); + return value; + } + + public static String convertString(String value) { + return "\"" + value + "\""; + } + + public static String convertArray(String value, String type) { + String v = "new " + type + "[] {"; + String[] args = value.split(";"); + for (final String r : args) { + v += r + ","; + } + v = v.substring(0, v.length() - 1); + return v + "}"; + } + + private static String replace(String template, String key, String value) { + return template.replaceAll("\\$\\{" + key + "\\}", value); + } + + private static String camelCase(String c) { + Pattern p = Pattern.compile("[a-zA-Z0-9]+"); + Matcher m = p.matcher(c.replaceAll("_", " ")); + StringBuffer result = new StringBuffer(); + String word; + while (m.find()) { + word = m.group(); + result.append(word.substring(0, 1).toUpperCase() + + word.substring(1).toLowerCase()); + } + return result.toString(); + } +} diff --git a/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemValueXml.java b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemValueXml.java new file mode 100644 index 000000000..2f02a4705 --- /dev/null +++ b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemValueXml.java @@ -0,0 +1,39 @@ +package com.l2jserver.tool.conversor.itemtemplate; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "set") +@XmlAccessorType(XmlAccessType.NONE) +public class ItemValueXml { + @XmlAttribute(name = "name") + private String name; + @XmlAttribute(name = "val") + private String value; + /** + * @return the name + */ + public String getName() { + return name; + } + /** + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + /** + * @return the value + */ + public String getValue() { + return value; + } + /** + * @param value the value to set + */ + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemXml.java b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemXml.java new file mode 100644 index 000000000..21d423fe6 --- /dev/null +++ b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/ItemXml.java @@ -0,0 +1,101 @@ +package com.l2jserver.tool.conversor.itemtemplate; + +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "item") +@XmlAccessorType(XmlAccessType.NONE) +public class ItemXml { + @XmlAttribute(name = "id") + private int id; + @XmlAttribute(name = "name") + private String name; + @XmlAttribute(name = "type") + private String type; + + @XmlElementRef + private List values; + @XmlElement(name = "for") + private List sets; + + /** + * @return the id + */ + public int getId() { + return id; + } + + /** + * @param id + * the id to set + */ + public void setId(int id) { + this.id = id; + } + + /** + * @return the name + */ + public String getName() { + return name; + } + + /** + * @param name + * the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** + * @return the type + */ + public String getType() { + return type; + } + + /** + * @param type + * the type to set + */ + public void setType(String type) { + this.type = type; + } + + /** + * @return the values + */ + public List getValues() { + return values; + } + + /** + * @param values + * the values to set + */ + public void setValues(List values) { + this.values = values; + } + + /** + * @return the sets + */ + public List getSets() { + return sets; + } + + /** + * @param sets + * the sets to set + */ + public void setSets(List sets) { + this.sets = sets; + } +} diff --git a/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/doc.txt b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/doc.txt new file mode 100644 index 000000000..b4a0083c5 --- /dev/null +++ b/src/tool/java/com/l2jserver/tool/conversor/itemtemplate/doc.txt @@ -0,0 +1,13 @@ +possible attribs: [blessed, item_skill, change_weaponId, is_oly_restricted, is_sellable, time, crystal_type, + oncast_chance, random_damage, bodypart, spiritshots, soulshots, crystal_count, enchant_enabled, + is_destroyable, armor_type, attack_range, is_stackable, etcitem_type, mp_consume, reduced_soulshot, + is_questitem, immediate_effect, price, use_condition, is_premium, shared_reuse_group, equip_reuse_delay, + weight, reuse_delay, capsuled_items, is_tradable, is_magic_weapon, icon, item_equip_option, oncrit_skill, + is_dropable, enchant4_skill, damage_range, is_depositable, default_action, material, equip_condition, + recipe_id, ex_immediate_effect, duration, unequip_skill, oncast_skill, element_enabled, reduced_mp_consume, + handler, weapon_type, oncrit_chance] + +etc_types: [race_ticket, castle_guard, dye, bolt, recipe, arrow, bless_scrl_enchant_wp, lure, rune, crop, + scrl_enchant_am, ancient_crystal_enchant_am, bless_scrl_enchant_am, potion, scrl_enchant_wp, coupon, + scrl_enchant_attr, seed2, scroll, seed, ticket_of_lord, rune_select, maturecrop, elixir, material, + lotto, scrl_inc_enchant_prop_wp, ancient_crystal_enchant_wp, scrl_inc_enchant_prop_am, harvest, pet_collar]