diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/items/36900-36999.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/items/36900-36999.xml index b170098276..cd1ccfe0a3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/items/36900-36999.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/items/36900-36999.xml @@ -894,44 +894,110 @@ - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/Elementals.java index c5654df9ba..1582e53016 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/Elementals.java @@ -19,6 +19,9 @@ package org.l2jmobius.gameserver.model; import java.util.HashMap; import java.util.Map; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; + public final class Elementals { private static final Map TABLE = new HashMap<>(); @@ -84,11 +87,11 @@ public final class Elementals public enum ElementalItemType { Stone(3), - Roughore(3), + StoneSuper(3), Crystal(6), + CrystalSuper(6), Jewel(9), - Energy(12), - GoD_Event(9); + Energy(12); public int _maxLevel; @@ -107,12 +110,12 @@ public final class Elementals divineStone(HOLY, 9551, ElementalItemType.Stone, 0), darkStone(DARK, 9550, ElementalItemType.Stone, 0), - fireRoughtore(FIRE, 10521, ElementalItemType.Roughore, 0), - waterRoughtore(WATER, 10522, ElementalItemType.Roughore, 0), - windRoughtore(WIND, 10524, ElementalItemType.Roughore, 0), - earthRoughtore(EARTH, 10523, ElementalItemType.Roughore, 0), - divineRoughtore(HOLY, 10526, ElementalItemType.Roughore, 0), - darkRoughtore(DARK, 10525, ElementalItemType.Roughore, 0), + fireRoughtore(FIRE, 10521, ElementalItemType.Stone, 0), + waterRoughtore(WATER, 10522, ElementalItemType.Stone, 0), + windRoughtore(WIND, 10524, ElementalItemType.Stone, 0), + earthRoughtore(EARTH, 10523, ElementalItemType.Stone, 0), + divineRoughtore(HOLY, 10526, ElementalItemType.Stone, 0), + darkRoughtore(DARK, 10525, ElementalItemType.Stone, 0), fireCrystal(FIRE, 9552, ElementalItemType.Crystal, 0), waterCrystal(WATER, 9553, ElementalItemType.Crystal, 0), @@ -128,7 +131,6 @@ public final class Elementals divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), windEnergy(WIND, 9567, ElementalItemType.Energy, 0), @@ -137,121 +139,121 @@ public final class Elementals darkEnergy(DARK, 9568, ElementalItemType.Energy, 0), // GoD+ Stones - GoD_22635(FIRE, 22635, ElementalItemType.GoD_Event, 0), - GoD_22636(WATER, 22636, ElementalItemType.GoD_Event, 0), - GoD_22637(EARTH, 22637, ElementalItemType.GoD_Event, 0), - GoD_22638(WIND, 22638, ElementalItemType.GoD_Event, 0), - GoD_22639(DARK, 22639, ElementalItemType.GoD_Event, 0), - GoD_22640(HOLY, 22640, ElementalItemType.GoD_Event, 0), - GoD_22919(FIRE, 22919, ElementalItemType.GoD_Event, 0), - GoD_22920(WATER, 22920, ElementalItemType.GoD_Event, 0), - GoD_22921(EARTH, 22921, ElementalItemType.GoD_Event, 0), - GoD_22922(WIND, 22922, ElementalItemType.GoD_Event, 0), - GoD_22923(DARK, 22923, ElementalItemType.GoD_Event, 0), - GoD_22924(HOLY, 22924, ElementalItemType.GoD_Event, 0), - GoD_33481(FIRE, 33481, ElementalItemType.GoD_Event, 0), - GoD_33482(WATER, 33482, ElementalItemType.GoD_Event, 0), - GoD_33483(EARTH, 33483, ElementalItemType.GoD_Event, 0), - GoD_33484(WIND, 33484, ElementalItemType.GoD_Event, 0), - GoD_33485(DARK, 33485, ElementalItemType.GoD_Event, 0), - GoD_33486(HOLY, 33486, ElementalItemType.GoD_Event, 0), - GoD_33863(FIRE, 33863, ElementalItemType.GoD_Event, 60), - GoD_33864(WATER, 33864, ElementalItemType.GoD_Event, 60), - GoD_33865(EARTH, 33865, ElementalItemType.GoD_Event, 60), - GoD_33866(WIND, 33866, ElementalItemType.GoD_Event, 60), - GoD_33867(DARK, 33867, ElementalItemType.GoD_Event, 60), - GoD_33868(HOLY, 33868, ElementalItemType.GoD_Event, 60), - GoD_33869(FIRE, 33869, ElementalItemType.GoD_Event, 150), - GoD_33870(WATER, 33870, ElementalItemType.GoD_Event, 150), - GoD_33871(EARTH, 33871, ElementalItemType.GoD_Event, 150), - GoD_33872(WIND, 33872, ElementalItemType.GoD_Event, 150), - GoD_33873(DARK, 33873, ElementalItemType.GoD_Event, 150), - GoD_33874(HOLY, 33874, ElementalItemType.GoD_Event, 150), - GoD_34661(FIRE, 34661, ElementalItemType.GoD_Event, 60), - GoD_34662(WATER, 34662, ElementalItemType.GoD_Event, 60), - GoD_34663(EARTH, 34663, ElementalItemType.GoD_Event, 60), - GoD_34664(WIND, 34664, ElementalItemType.GoD_Event, 60), - GoD_34665(DARK, 34665, ElementalItemType.GoD_Event, 60), - GoD_34666(HOLY, 34666, ElementalItemType.GoD_Event, 60), - GoD_34667(FIRE, 34667, ElementalItemType.GoD_Event, 150), - GoD_34668(WATER, 34668, ElementalItemType.GoD_Event, 150), - GoD_34669(EARTH, 34669, ElementalItemType.GoD_Event, 150), - GoD_34670(WIND, 34670, ElementalItemType.GoD_Event, 150), - GoD_34671(DARK, 34671, ElementalItemType.GoD_Event, 150), - GoD_34672(HOLY, 34672, ElementalItemType.GoD_Event, 150), - GoD_34790(FIRE, 34790, ElementalItemType.GoD_Event, 0), - GoD_34791(WATER, 34791, ElementalItemType.GoD_Event, 0), - GoD_34792(EARTH, 34792, ElementalItemType.GoD_Event, 0), - GoD_34793(WIND, 34793, ElementalItemType.GoD_Event, 0), - GoD_34794(DARK, 34794, ElementalItemType.GoD_Event, 0), - GoD_34795(HOLY, 34795, ElementalItemType.GoD_Event, 0), - GoD_35729(FIRE, 35729, ElementalItemType.GoD_Event, 60), - GoD_35730(WATER, 35730, ElementalItemType.GoD_Event, 60), - GoD_35731(EARTH, 35731, ElementalItemType.GoD_Event, 60), - GoD_35732(WIND, 35732, ElementalItemType.GoD_Event, 60), - GoD_35733(DARK, 35733, ElementalItemType.GoD_Event, 60), - GoD_35734(HOLY, 35734, ElementalItemType.GoD_Event, 60), - GoD_35735(FIRE, 35735, ElementalItemType.GoD_Event, 150), - GoD_35736(WATER, 35736, ElementalItemType.GoD_Event, 150), - GoD_35737(EARTH, 35737, ElementalItemType.GoD_Event, 150), - GoD_35738(WIND, 35738, ElementalItemType.GoD_Event, 150), - GoD_35739(DARK, 35739, ElementalItemType.GoD_Event, 150), - GoD_35740(HOLY, 35740, ElementalItemType.GoD_Event, 150), - GoD_36960(FIRE, 36960, ElementalItemType.GoD_Event, 60), - GoD_36961(WATER, 36961, ElementalItemType.GoD_Event, 60), - GoD_36962(EARTH, 36962, ElementalItemType.GoD_Event, 60), - GoD_36963(WIND, 36963, ElementalItemType.GoD_Event, 60), - GoD_36964(DARK, 36964, ElementalItemType.GoD_Event, 60), - GoD_36965(HOLY, 36965, ElementalItemType.GoD_Event, 60), - GoD_36966(FIRE, 36966, ElementalItemType.GoD_Event, 150), - GoD_36967(WATER, 36967, ElementalItemType.GoD_Event, 150), - GoD_36968(EARTH, 36968, ElementalItemType.GoD_Event, 150), - GoD_36969(WIND, 36969, ElementalItemType.GoD_Event, 150), - GoD_36970(DARK, 36970, ElementalItemType.GoD_Event, 150), - GoD_36971(HOLY, 36971, ElementalItemType.GoD_Event, 150), - GoD_37499(FIRE, 37499, ElementalItemType.GoD_Event, 0), - GoD_37500(WATER, 37500, ElementalItemType.GoD_Event, 0), - GoD_37501(EARTH, 37501, ElementalItemType.GoD_Event, 0), - GoD_37502(WIND, 37502, ElementalItemType.GoD_Event, 0), - GoD_37503(DARK, 37503, ElementalItemType.GoD_Event, 0), - GoD_37504(HOLY, 37504, ElementalItemType.GoD_Event, 0), + GoD_22635(FIRE, 22635, ElementalItemType.Stone, 0), + GoD_22636(WATER, 22636, ElementalItemType.Stone, 0), + GoD_22637(EARTH, 22637, ElementalItemType.Stone, 0), + GoD_22638(WIND, 22638, ElementalItemType.Stone, 0), + GoD_22639(DARK, 22639, ElementalItemType.Stone, 0), + GoD_22640(HOLY, 22640, ElementalItemType.Stone, 0), + GoD_22919(FIRE, 22919, ElementalItemType.Stone, 0), + GoD_22920(WATER, 22920, ElementalItemType.Stone, 0), + GoD_22921(EARTH, 22921, ElementalItemType.Stone, 0), + GoD_22922(WIND, 22922, ElementalItemType.Stone, 0), + GoD_22923(DARK, 22923, ElementalItemType.Stone, 0), + GoD_22924(HOLY, 22924, ElementalItemType.Stone, 0), + GoD_33481(FIRE, 33481, ElementalItemType.StoneSuper, 0), + GoD_33482(WATER, 33482, ElementalItemType.StoneSuper, 0), + GoD_33483(EARTH, 33483, ElementalItemType.StoneSuper, 0), + GoD_33484(WIND, 33484, ElementalItemType.StoneSuper, 0), + GoD_33485(DARK, 33485, ElementalItemType.StoneSuper, 0), + GoD_33486(HOLY, 33486, ElementalItemType.StoneSuper, 0), + GoD_33863(FIRE, 33863, ElementalItemType.StoneSuper, 60), + GoD_33864(WATER, 33864, ElementalItemType.StoneSuper, 60), + GoD_33865(EARTH, 33865, ElementalItemType.StoneSuper, 60), + GoD_33866(WIND, 33866, ElementalItemType.StoneSuper, 60), + GoD_33867(DARK, 33867, ElementalItemType.StoneSuper, 60), + GoD_33868(HOLY, 33868, ElementalItemType.StoneSuper, 60), + GoD_33869(FIRE, 33869, ElementalItemType.StoneSuper, 150), + GoD_33870(WATER, 33870, ElementalItemType.StoneSuper, 150), + GoD_33871(EARTH, 33871, ElementalItemType.StoneSuper, 150), + GoD_33872(WIND, 33872, ElementalItemType.StoneSuper, 150), + GoD_33873(DARK, 33873, ElementalItemType.StoneSuper, 150), + GoD_33874(HOLY, 33874, ElementalItemType.StoneSuper, 150), + GoD_34661(FIRE, 34661, ElementalItemType.StoneSuper, 60), + GoD_34662(WATER, 34662, ElementalItemType.StoneSuper, 60), + GoD_34663(EARTH, 34663, ElementalItemType.StoneSuper, 60), + GoD_34664(WIND, 34664, ElementalItemType.StoneSuper, 60), + GoD_34665(DARK, 34665, ElementalItemType.StoneSuper, 60), + GoD_34666(HOLY, 34666, ElementalItemType.StoneSuper, 60), + GoD_34667(FIRE, 34667, ElementalItemType.StoneSuper, 150), + GoD_34668(WATER, 34668, ElementalItemType.StoneSuper, 150), + GoD_34669(EARTH, 34669, ElementalItemType.StoneSuper, 150), + GoD_34670(WIND, 34670, ElementalItemType.StoneSuper, 150), + GoD_34671(DARK, 34671, ElementalItemType.StoneSuper, 150), + GoD_34672(HOLY, 34672, ElementalItemType.StoneSuper, 150), + GoD_34790(FIRE, 34790, ElementalItemType.Stone, 0), + GoD_34791(WATER, 34791, ElementalItemType.Stone, 0), + GoD_34792(EARTH, 34792, ElementalItemType.Stone, 0), + GoD_34793(WIND, 34793, ElementalItemType.Stone, 0), + GoD_34794(DARK, 34794, ElementalItemType.Stone, 0), + GoD_34795(HOLY, 34795, ElementalItemType.Stone, 0), + GoD_35729(FIRE, 35729, ElementalItemType.StoneSuper, 60), + GoD_35730(WATER, 35730, ElementalItemType.StoneSuper, 60), + GoD_35731(EARTH, 35731, ElementalItemType.StoneSuper, 60), + GoD_35732(WIND, 35732, ElementalItemType.StoneSuper, 60), + GoD_35733(DARK, 35733, ElementalItemType.StoneSuper, 60), + GoD_35734(HOLY, 35734, ElementalItemType.StoneSuper, 60), + GoD_35735(FIRE, 35735, ElementalItemType.StoneSuper, 150), + GoD_35736(WATER, 35736, ElementalItemType.StoneSuper, 150), + GoD_35737(EARTH, 35737, ElementalItemType.StoneSuper, 150), + GoD_35738(WIND, 35738, ElementalItemType.StoneSuper, 150), + GoD_35739(DARK, 35739, ElementalItemType.StoneSuper, 150), + GoD_35740(HOLY, 35740, ElementalItemType.StoneSuper, 150), + GoD_36960(FIRE, 36960, ElementalItemType.StoneSuper, 60), + GoD_36961(WATER, 36961, ElementalItemType.StoneSuper, 60), + GoD_36962(EARTH, 36962, ElementalItemType.StoneSuper, 60), + GoD_36963(WIND, 36963, ElementalItemType.StoneSuper, 60), + GoD_36964(DARK, 36964, ElementalItemType.StoneSuper, 60), + GoD_36965(HOLY, 36965, ElementalItemType.StoneSuper, 60), + GoD_36966(FIRE, 36966, ElementalItemType.StoneSuper, 150), + GoD_36967(WATER, 36967, ElementalItemType.StoneSuper, 150), + GoD_36968(EARTH, 36968, ElementalItemType.StoneSuper, 150), + GoD_36969(WIND, 36969, ElementalItemType.StoneSuper, 150), + GoD_36970(DARK, 36970, ElementalItemType.StoneSuper, 150), + GoD_36971(HOLY, 36971, ElementalItemType.StoneSuper, 150), + GoD_37499(FIRE, 37499, ElementalItemType.Stone, 0), + GoD_37500(WATER, 37500, ElementalItemType.Stone, 0), + GoD_37501(EARTH, 37501, ElementalItemType.Stone, 0), + GoD_37502(WIND, 37502, ElementalItemType.Stone, 0), + GoD_37503(DARK, 37503, ElementalItemType.Stone, 0), + GoD_37504(HOLY, 37504, ElementalItemType.Stone, 0), // GoD+ Crystals - GoD_22641(FIRE, 22641, ElementalItemType.GoD_Event, 0), - GoD_22642(WATER, 22642, ElementalItemType.GoD_Event, 0), - GoD_22643(EARTH, 22643, ElementalItemType.GoD_Event, 0), - GoD_22644(WIND, 22644, ElementalItemType.GoD_Event, 0), - GoD_22645(DARK, 22645, ElementalItemType.GoD_Event, 0), - GoD_22646(HOLY, 22646, ElementalItemType.GoD_Event, 0), - GoD_22925(FIRE, 22925, ElementalItemType.GoD_Event, 0), - GoD_22926(WATER, 22926, ElementalItemType.GoD_Event, 0), - GoD_22927(EARTH, 22927, ElementalItemType.GoD_Event, 0), - GoD_22928(WIND, 22928, ElementalItemType.GoD_Event, 0), - GoD_22929(DARK, 22929, ElementalItemType.GoD_Event, 0), - GoD_22930(HOLY, 22930, ElementalItemType.GoD_Event, 0), - GoD_33487(FIRE, 33487, ElementalItemType.GoD_Event, 0), - GoD_33488(WATER, 33488, ElementalItemType.GoD_Event, 0), - GoD_33489(EARTH, 33489, ElementalItemType.GoD_Event, 0), - GoD_33490(WIND, 33490, ElementalItemType.GoD_Event, 0), - GoD_33491(DARK, 33491, ElementalItemType.GoD_Event, 0), - GoD_33492(HOLY, 33492, ElementalItemType.GoD_Event, 0), - GoD_34796(FIRE, 34796, ElementalItemType.GoD_Event, 0), - GoD_34797(WATER, 34797, ElementalItemType.GoD_Event, 0), - GoD_34798(EARTH, 34798, ElementalItemType.GoD_Event, 0), - GoD_34799(WIND, 34799, ElementalItemType.GoD_Event, 0), - GoD_34800(DARK, 34800, ElementalItemType.GoD_Event, 0), - GoD_34801(HOLY, 34801, ElementalItemType.GoD_Event, 0), - GoD_36972(FIRE, 36972, ElementalItemType.GoD_Event, 0), - GoD_36973(WATER, 36973, ElementalItemType.GoD_Event, 0), - GoD_36974(EARTH, 36974, ElementalItemType.GoD_Event, 0), - GoD_36975(WIND, 36975, ElementalItemType.GoD_Event, 0), - GoD_36976(DARK, 36976, ElementalItemType.GoD_Event, 0), - GoD_36977(HOLY, 36977, ElementalItemType.GoD_Event, 0); + GoD_22641(FIRE, 22641, ElementalItemType.Crystal, 0), + GoD_22642(WATER, 22642, ElementalItemType.Crystal, 0), + GoD_22643(EARTH, 22643, ElementalItemType.Crystal, 0), + GoD_22644(WIND, 22644, ElementalItemType.Crystal, 0), + GoD_22645(DARK, 22645, ElementalItemType.Crystal, 0), + GoD_22646(HOLY, 22646, ElementalItemType.Crystal, 0), + GoD_22925(FIRE, 22925, ElementalItemType.Crystal, 0), + GoD_22926(WATER, 22926, ElementalItemType.Crystal, 0), + GoD_22927(EARTH, 22927, ElementalItemType.Crystal, 0), + GoD_22928(WIND, 22928, ElementalItemType.Crystal, 0), + GoD_22929(DARK, 22929, ElementalItemType.Crystal, 0), + GoD_22930(HOLY, 22930, ElementalItemType.Crystal, 0), + GoD_33487(FIRE, 33487, ElementalItemType.CrystalSuper, 0), + GoD_33488(WATER, 33488, ElementalItemType.CrystalSuper, 0), + GoD_33489(EARTH, 33489, ElementalItemType.CrystalSuper, 0), + GoD_33490(WIND, 33490, ElementalItemType.CrystalSuper, 0), + GoD_33491(DARK, 33491, ElementalItemType.CrystalSuper, 0), + GoD_33492(HOLY, 33492, ElementalItemType.CrystalSuper, 0), + GoD_34796(FIRE, 34796, ElementalItemType.Crystal, 0), + GoD_34797(WATER, 34797, ElementalItemType.Crystal, 0), + GoD_34798(EARTH, 34798, ElementalItemType.Crystal, 0), + GoD_34799(WIND, 34799, ElementalItemType.Crystal, 0), + GoD_34800(DARK, 34800, ElementalItemType.Crystal, 0), + GoD_34801(HOLY, 34801, ElementalItemType.Crystal, 0), + GoD_36972(FIRE, 36972, ElementalItemType.CrystalSuper, 0), + GoD_36973(WATER, 36973, ElementalItemType.CrystalSuper, 0), + GoD_36974(EARTH, 36974, ElementalItemType.CrystalSuper, 0), + GoD_36975(WIND, 36975, ElementalItemType.CrystalSuper, 0), + GoD_36976(DARK, 36976, ElementalItemType.CrystalSuper, 0), + GoD_36977(HOLY, 36977, ElementalItemType.CrystalSuper, 0); - public byte _element; - public int _itemId; - public ElementalItemType _type; - public int _fixedPower; + public final byte _element; + public final int _itemId; + public final ElementalItemType _type; + public final int _fixedPower; ElementalItems(byte element, int itemId, ElementalItemType type, int fixedPower) { @@ -286,4 +288,129 @@ public final class Elementals } return -1; } + + public static boolean isElementableWithStone(ItemInstance targetItem, int stoneId) + { + return targetItem.isElementable(); + } + + /* @formatter:off */ + // +-------+----------------+----------------+----------------+----------------+ + // | Grade | Stone | Crystal | Stone-Super | Crystal-Super | + // +-------+----------------+----------------+----------------+----------------+ + // | | Weapon | Armor | Weapon | Armor | Weapon | Armor | Weapon | Armor | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S | 50% | 60% | 30% | 50% | 100% | 100% | 80% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S80 | 50% | 80% | 40% | 70% | 100% | 100% | 90% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S84 | 50% | 80% | 50% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R | 50% | 100% | 60% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R95 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R99 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + /* @formatter:on */ + + public static boolean isSuccess(ItemInstance item, int stoneId) + { + switch (Elementals.getItemElemental(stoneId)._type) + { + case Stone: + { + if (item.isWeapon()) + { + return Rnd.get(100) < 50; + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 60; + } + case S80: + case S84: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case Crystal: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 30; + } + case S80: + { + return Rnd.get(100) < 40; + } + case S84: + { + return Rnd.get(100) < 50; + } + default: + { + return Rnd.get(100) < 60; + } + } + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 50; + } + case S80: + { + return Rnd.get(100) < 70; + } + case S84: + case R: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case CrystalSuper: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 80; + } + case S80: + { + return Rnd.get(100) < 90; + } + default: + { + return true; + } + } + } + return true; + } + } + // Super stones have 100% so will end here. + // Patch notes do not have info about jewels chance so 100% for now, till l2wiki update, energy are not used. + return true; + } } diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index 6d03548432..3e6f5b8d13 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.model.Elementals; @@ -104,7 +103,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return; } - if (!item.isElementable()) + if (!Elementals.isElementableWithStone(item, stone.getItem().getId())) { client.sendPacket(SystemMessageId.ELEMENTAL_POWER_ENHANCER_USAGE_REQUIREMENT_IS_NOT_SUFFICIENT); player.removeRequest(request.getClass()); @@ -301,53 +300,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return -1; } - boolean success = false; - switch (stone.getItem().getCrystalType()) - { - case R: - { - success = Rnd.get(100) < 80; - break; - } - case R95: - case R99: - { - success = true; - break; - } - default: - { - switch (Elementals.getItemElemental(stone.getId())._type) - { - case Stone: - case Roughore: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_STONE; - break; - } - case Crystal: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL; - break; - } - case Jewel: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_JEWEL; - break; - } - case Energy: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_ENERGY; - break; - } - case GoD_Event: - { - success = true; - break; - } - } - } - } + boolean success = Elementals.isSuccess(item, stone.getId()); if (success) { diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java index 94009d7d9c..153c6fd16d 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java @@ -51,7 +51,7 @@ public class ExChooseInventoryAttributeItem implements IClientOutgoingPacket // Register only items that can be put an attribute stone/crystal for (ItemInstance item : player.getInventory().getItems()) { - if (item.isElementable()) + if (Elementals.isElementableWithStone(item, stone.getId())) { _items.add(item.getObjectId()); } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/items/36900-36999.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/items/36900-36999.xml index b1a57d1a12..92f456e01f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/items/36900-36999.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/items/36900-36999.xml @@ -894,44 +894,110 @@ - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/Elementals.java index c5654df9ba..1582e53016 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/Elementals.java @@ -19,6 +19,9 @@ package org.l2jmobius.gameserver.model; import java.util.HashMap; import java.util.Map; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; + public final class Elementals { private static final Map TABLE = new HashMap<>(); @@ -84,11 +87,11 @@ public final class Elementals public enum ElementalItemType { Stone(3), - Roughore(3), + StoneSuper(3), Crystal(6), + CrystalSuper(6), Jewel(9), - Energy(12), - GoD_Event(9); + Energy(12); public int _maxLevel; @@ -107,12 +110,12 @@ public final class Elementals divineStone(HOLY, 9551, ElementalItemType.Stone, 0), darkStone(DARK, 9550, ElementalItemType.Stone, 0), - fireRoughtore(FIRE, 10521, ElementalItemType.Roughore, 0), - waterRoughtore(WATER, 10522, ElementalItemType.Roughore, 0), - windRoughtore(WIND, 10524, ElementalItemType.Roughore, 0), - earthRoughtore(EARTH, 10523, ElementalItemType.Roughore, 0), - divineRoughtore(HOLY, 10526, ElementalItemType.Roughore, 0), - darkRoughtore(DARK, 10525, ElementalItemType.Roughore, 0), + fireRoughtore(FIRE, 10521, ElementalItemType.Stone, 0), + waterRoughtore(WATER, 10522, ElementalItemType.Stone, 0), + windRoughtore(WIND, 10524, ElementalItemType.Stone, 0), + earthRoughtore(EARTH, 10523, ElementalItemType.Stone, 0), + divineRoughtore(HOLY, 10526, ElementalItemType.Stone, 0), + darkRoughtore(DARK, 10525, ElementalItemType.Stone, 0), fireCrystal(FIRE, 9552, ElementalItemType.Crystal, 0), waterCrystal(WATER, 9553, ElementalItemType.Crystal, 0), @@ -128,7 +131,6 @@ public final class Elementals divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), windEnergy(WIND, 9567, ElementalItemType.Energy, 0), @@ -137,121 +139,121 @@ public final class Elementals darkEnergy(DARK, 9568, ElementalItemType.Energy, 0), // GoD+ Stones - GoD_22635(FIRE, 22635, ElementalItemType.GoD_Event, 0), - GoD_22636(WATER, 22636, ElementalItemType.GoD_Event, 0), - GoD_22637(EARTH, 22637, ElementalItemType.GoD_Event, 0), - GoD_22638(WIND, 22638, ElementalItemType.GoD_Event, 0), - GoD_22639(DARK, 22639, ElementalItemType.GoD_Event, 0), - GoD_22640(HOLY, 22640, ElementalItemType.GoD_Event, 0), - GoD_22919(FIRE, 22919, ElementalItemType.GoD_Event, 0), - GoD_22920(WATER, 22920, ElementalItemType.GoD_Event, 0), - GoD_22921(EARTH, 22921, ElementalItemType.GoD_Event, 0), - GoD_22922(WIND, 22922, ElementalItemType.GoD_Event, 0), - GoD_22923(DARK, 22923, ElementalItemType.GoD_Event, 0), - GoD_22924(HOLY, 22924, ElementalItemType.GoD_Event, 0), - GoD_33481(FIRE, 33481, ElementalItemType.GoD_Event, 0), - GoD_33482(WATER, 33482, ElementalItemType.GoD_Event, 0), - GoD_33483(EARTH, 33483, ElementalItemType.GoD_Event, 0), - GoD_33484(WIND, 33484, ElementalItemType.GoD_Event, 0), - GoD_33485(DARK, 33485, ElementalItemType.GoD_Event, 0), - GoD_33486(HOLY, 33486, ElementalItemType.GoD_Event, 0), - GoD_33863(FIRE, 33863, ElementalItemType.GoD_Event, 60), - GoD_33864(WATER, 33864, ElementalItemType.GoD_Event, 60), - GoD_33865(EARTH, 33865, ElementalItemType.GoD_Event, 60), - GoD_33866(WIND, 33866, ElementalItemType.GoD_Event, 60), - GoD_33867(DARK, 33867, ElementalItemType.GoD_Event, 60), - GoD_33868(HOLY, 33868, ElementalItemType.GoD_Event, 60), - GoD_33869(FIRE, 33869, ElementalItemType.GoD_Event, 150), - GoD_33870(WATER, 33870, ElementalItemType.GoD_Event, 150), - GoD_33871(EARTH, 33871, ElementalItemType.GoD_Event, 150), - GoD_33872(WIND, 33872, ElementalItemType.GoD_Event, 150), - GoD_33873(DARK, 33873, ElementalItemType.GoD_Event, 150), - GoD_33874(HOLY, 33874, ElementalItemType.GoD_Event, 150), - GoD_34661(FIRE, 34661, ElementalItemType.GoD_Event, 60), - GoD_34662(WATER, 34662, ElementalItemType.GoD_Event, 60), - GoD_34663(EARTH, 34663, ElementalItemType.GoD_Event, 60), - GoD_34664(WIND, 34664, ElementalItemType.GoD_Event, 60), - GoD_34665(DARK, 34665, ElementalItemType.GoD_Event, 60), - GoD_34666(HOLY, 34666, ElementalItemType.GoD_Event, 60), - GoD_34667(FIRE, 34667, ElementalItemType.GoD_Event, 150), - GoD_34668(WATER, 34668, ElementalItemType.GoD_Event, 150), - GoD_34669(EARTH, 34669, ElementalItemType.GoD_Event, 150), - GoD_34670(WIND, 34670, ElementalItemType.GoD_Event, 150), - GoD_34671(DARK, 34671, ElementalItemType.GoD_Event, 150), - GoD_34672(HOLY, 34672, ElementalItemType.GoD_Event, 150), - GoD_34790(FIRE, 34790, ElementalItemType.GoD_Event, 0), - GoD_34791(WATER, 34791, ElementalItemType.GoD_Event, 0), - GoD_34792(EARTH, 34792, ElementalItemType.GoD_Event, 0), - GoD_34793(WIND, 34793, ElementalItemType.GoD_Event, 0), - GoD_34794(DARK, 34794, ElementalItemType.GoD_Event, 0), - GoD_34795(HOLY, 34795, ElementalItemType.GoD_Event, 0), - GoD_35729(FIRE, 35729, ElementalItemType.GoD_Event, 60), - GoD_35730(WATER, 35730, ElementalItemType.GoD_Event, 60), - GoD_35731(EARTH, 35731, ElementalItemType.GoD_Event, 60), - GoD_35732(WIND, 35732, ElementalItemType.GoD_Event, 60), - GoD_35733(DARK, 35733, ElementalItemType.GoD_Event, 60), - GoD_35734(HOLY, 35734, ElementalItemType.GoD_Event, 60), - GoD_35735(FIRE, 35735, ElementalItemType.GoD_Event, 150), - GoD_35736(WATER, 35736, ElementalItemType.GoD_Event, 150), - GoD_35737(EARTH, 35737, ElementalItemType.GoD_Event, 150), - GoD_35738(WIND, 35738, ElementalItemType.GoD_Event, 150), - GoD_35739(DARK, 35739, ElementalItemType.GoD_Event, 150), - GoD_35740(HOLY, 35740, ElementalItemType.GoD_Event, 150), - GoD_36960(FIRE, 36960, ElementalItemType.GoD_Event, 60), - GoD_36961(WATER, 36961, ElementalItemType.GoD_Event, 60), - GoD_36962(EARTH, 36962, ElementalItemType.GoD_Event, 60), - GoD_36963(WIND, 36963, ElementalItemType.GoD_Event, 60), - GoD_36964(DARK, 36964, ElementalItemType.GoD_Event, 60), - GoD_36965(HOLY, 36965, ElementalItemType.GoD_Event, 60), - GoD_36966(FIRE, 36966, ElementalItemType.GoD_Event, 150), - GoD_36967(WATER, 36967, ElementalItemType.GoD_Event, 150), - GoD_36968(EARTH, 36968, ElementalItemType.GoD_Event, 150), - GoD_36969(WIND, 36969, ElementalItemType.GoD_Event, 150), - GoD_36970(DARK, 36970, ElementalItemType.GoD_Event, 150), - GoD_36971(HOLY, 36971, ElementalItemType.GoD_Event, 150), - GoD_37499(FIRE, 37499, ElementalItemType.GoD_Event, 0), - GoD_37500(WATER, 37500, ElementalItemType.GoD_Event, 0), - GoD_37501(EARTH, 37501, ElementalItemType.GoD_Event, 0), - GoD_37502(WIND, 37502, ElementalItemType.GoD_Event, 0), - GoD_37503(DARK, 37503, ElementalItemType.GoD_Event, 0), - GoD_37504(HOLY, 37504, ElementalItemType.GoD_Event, 0), + GoD_22635(FIRE, 22635, ElementalItemType.Stone, 0), + GoD_22636(WATER, 22636, ElementalItemType.Stone, 0), + GoD_22637(EARTH, 22637, ElementalItemType.Stone, 0), + GoD_22638(WIND, 22638, ElementalItemType.Stone, 0), + GoD_22639(DARK, 22639, ElementalItemType.Stone, 0), + GoD_22640(HOLY, 22640, ElementalItemType.Stone, 0), + GoD_22919(FIRE, 22919, ElementalItemType.Stone, 0), + GoD_22920(WATER, 22920, ElementalItemType.Stone, 0), + GoD_22921(EARTH, 22921, ElementalItemType.Stone, 0), + GoD_22922(WIND, 22922, ElementalItemType.Stone, 0), + GoD_22923(DARK, 22923, ElementalItemType.Stone, 0), + GoD_22924(HOLY, 22924, ElementalItemType.Stone, 0), + GoD_33481(FIRE, 33481, ElementalItemType.StoneSuper, 0), + GoD_33482(WATER, 33482, ElementalItemType.StoneSuper, 0), + GoD_33483(EARTH, 33483, ElementalItemType.StoneSuper, 0), + GoD_33484(WIND, 33484, ElementalItemType.StoneSuper, 0), + GoD_33485(DARK, 33485, ElementalItemType.StoneSuper, 0), + GoD_33486(HOLY, 33486, ElementalItemType.StoneSuper, 0), + GoD_33863(FIRE, 33863, ElementalItemType.StoneSuper, 60), + GoD_33864(WATER, 33864, ElementalItemType.StoneSuper, 60), + GoD_33865(EARTH, 33865, ElementalItemType.StoneSuper, 60), + GoD_33866(WIND, 33866, ElementalItemType.StoneSuper, 60), + GoD_33867(DARK, 33867, ElementalItemType.StoneSuper, 60), + GoD_33868(HOLY, 33868, ElementalItemType.StoneSuper, 60), + GoD_33869(FIRE, 33869, ElementalItemType.StoneSuper, 150), + GoD_33870(WATER, 33870, ElementalItemType.StoneSuper, 150), + GoD_33871(EARTH, 33871, ElementalItemType.StoneSuper, 150), + GoD_33872(WIND, 33872, ElementalItemType.StoneSuper, 150), + GoD_33873(DARK, 33873, ElementalItemType.StoneSuper, 150), + GoD_33874(HOLY, 33874, ElementalItemType.StoneSuper, 150), + GoD_34661(FIRE, 34661, ElementalItemType.StoneSuper, 60), + GoD_34662(WATER, 34662, ElementalItemType.StoneSuper, 60), + GoD_34663(EARTH, 34663, ElementalItemType.StoneSuper, 60), + GoD_34664(WIND, 34664, ElementalItemType.StoneSuper, 60), + GoD_34665(DARK, 34665, ElementalItemType.StoneSuper, 60), + GoD_34666(HOLY, 34666, ElementalItemType.StoneSuper, 60), + GoD_34667(FIRE, 34667, ElementalItemType.StoneSuper, 150), + GoD_34668(WATER, 34668, ElementalItemType.StoneSuper, 150), + GoD_34669(EARTH, 34669, ElementalItemType.StoneSuper, 150), + GoD_34670(WIND, 34670, ElementalItemType.StoneSuper, 150), + GoD_34671(DARK, 34671, ElementalItemType.StoneSuper, 150), + GoD_34672(HOLY, 34672, ElementalItemType.StoneSuper, 150), + GoD_34790(FIRE, 34790, ElementalItemType.Stone, 0), + GoD_34791(WATER, 34791, ElementalItemType.Stone, 0), + GoD_34792(EARTH, 34792, ElementalItemType.Stone, 0), + GoD_34793(WIND, 34793, ElementalItemType.Stone, 0), + GoD_34794(DARK, 34794, ElementalItemType.Stone, 0), + GoD_34795(HOLY, 34795, ElementalItemType.Stone, 0), + GoD_35729(FIRE, 35729, ElementalItemType.StoneSuper, 60), + GoD_35730(WATER, 35730, ElementalItemType.StoneSuper, 60), + GoD_35731(EARTH, 35731, ElementalItemType.StoneSuper, 60), + GoD_35732(WIND, 35732, ElementalItemType.StoneSuper, 60), + GoD_35733(DARK, 35733, ElementalItemType.StoneSuper, 60), + GoD_35734(HOLY, 35734, ElementalItemType.StoneSuper, 60), + GoD_35735(FIRE, 35735, ElementalItemType.StoneSuper, 150), + GoD_35736(WATER, 35736, ElementalItemType.StoneSuper, 150), + GoD_35737(EARTH, 35737, ElementalItemType.StoneSuper, 150), + GoD_35738(WIND, 35738, ElementalItemType.StoneSuper, 150), + GoD_35739(DARK, 35739, ElementalItemType.StoneSuper, 150), + GoD_35740(HOLY, 35740, ElementalItemType.StoneSuper, 150), + GoD_36960(FIRE, 36960, ElementalItemType.StoneSuper, 60), + GoD_36961(WATER, 36961, ElementalItemType.StoneSuper, 60), + GoD_36962(EARTH, 36962, ElementalItemType.StoneSuper, 60), + GoD_36963(WIND, 36963, ElementalItemType.StoneSuper, 60), + GoD_36964(DARK, 36964, ElementalItemType.StoneSuper, 60), + GoD_36965(HOLY, 36965, ElementalItemType.StoneSuper, 60), + GoD_36966(FIRE, 36966, ElementalItemType.StoneSuper, 150), + GoD_36967(WATER, 36967, ElementalItemType.StoneSuper, 150), + GoD_36968(EARTH, 36968, ElementalItemType.StoneSuper, 150), + GoD_36969(WIND, 36969, ElementalItemType.StoneSuper, 150), + GoD_36970(DARK, 36970, ElementalItemType.StoneSuper, 150), + GoD_36971(HOLY, 36971, ElementalItemType.StoneSuper, 150), + GoD_37499(FIRE, 37499, ElementalItemType.Stone, 0), + GoD_37500(WATER, 37500, ElementalItemType.Stone, 0), + GoD_37501(EARTH, 37501, ElementalItemType.Stone, 0), + GoD_37502(WIND, 37502, ElementalItemType.Stone, 0), + GoD_37503(DARK, 37503, ElementalItemType.Stone, 0), + GoD_37504(HOLY, 37504, ElementalItemType.Stone, 0), // GoD+ Crystals - GoD_22641(FIRE, 22641, ElementalItemType.GoD_Event, 0), - GoD_22642(WATER, 22642, ElementalItemType.GoD_Event, 0), - GoD_22643(EARTH, 22643, ElementalItemType.GoD_Event, 0), - GoD_22644(WIND, 22644, ElementalItemType.GoD_Event, 0), - GoD_22645(DARK, 22645, ElementalItemType.GoD_Event, 0), - GoD_22646(HOLY, 22646, ElementalItemType.GoD_Event, 0), - GoD_22925(FIRE, 22925, ElementalItemType.GoD_Event, 0), - GoD_22926(WATER, 22926, ElementalItemType.GoD_Event, 0), - GoD_22927(EARTH, 22927, ElementalItemType.GoD_Event, 0), - GoD_22928(WIND, 22928, ElementalItemType.GoD_Event, 0), - GoD_22929(DARK, 22929, ElementalItemType.GoD_Event, 0), - GoD_22930(HOLY, 22930, ElementalItemType.GoD_Event, 0), - GoD_33487(FIRE, 33487, ElementalItemType.GoD_Event, 0), - GoD_33488(WATER, 33488, ElementalItemType.GoD_Event, 0), - GoD_33489(EARTH, 33489, ElementalItemType.GoD_Event, 0), - GoD_33490(WIND, 33490, ElementalItemType.GoD_Event, 0), - GoD_33491(DARK, 33491, ElementalItemType.GoD_Event, 0), - GoD_33492(HOLY, 33492, ElementalItemType.GoD_Event, 0), - GoD_34796(FIRE, 34796, ElementalItemType.GoD_Event, 0), - GoD_34797(WATER, 34797, ElementalItemType.GoD_Event, 0), - GoD_34798(EARTH, 34798, ElementalItemType.GoD_Event, 0), - GoD_34799(WIND, 34799, ElementalItemType.GoD_Event, 0), - GoD_34800(DARK, 34800, ElementalItemType.GoD_Event, 0), - GoD_34801(HOLY, 34801, ElementalItemType.GoD_Event, 0), - GoD_36972(FIRE, 36972, ElementalItemType.GoD_Event, 0), - GoD_36973(WATER, 36973, ElementalItemType.GoD_Event, 0), - GoD_36974(EARTH, 36974, ElementalItemType.GoD_Event, 0), - GoD_36975(WIND, 36975, ElementalItemType.GoD_Event, 0), - GoD_36976(DARK, 36976, ElementalItemType.GoD_Event, 0), - GoD_36977(HOLY, 36977, ElementalItemType.GoD_Event, 0); + GoD_22641(FIRE, 22641, ElementalItemType.Crystal, 0), + GoD_22642(WATER, 22642, ElementalItemType.Crystal, 0), + GoD_22643(EARTH, 22643, ElementalItemType.Crystal, 0), + GoD_22644(WIND, 22644, ElementalItemType.Crystal, 0), + GoD_22645(DARK, 22645, ElementalItemType.Crystal, 0), + GoD_22646(HOLY, 22646, ElementalItemType.Crystal, 0), + GoD_22925(FIRE, 22925, ElementalItemType.Crystal, 0), + GoD_22926(WATER, 22926, ElementalItemType.Crystal, 0), + GoD_22927(EARTH, 22927, ElementalItemType.Crystal, 0), + GoD_22928(WIND, 22928, ElementalItemType.Crystal, 0), + GoD_22929(DARK, 22929, ElementalItemType.Crystal, 0), + GoD_22930(HOLY, 22930, ElementalItemType.Crystal, 0), + GoD_33487(FIRE, 33487, ElementalItemType.CrystalSuper, 0), + GoD_33488(WATER, 33488, ElementalItemType.CrystalSuper, 0), + GoD_33489(EARTH, 33489, ElementalItemType.CrystalSuper, 0), + GoD_33490(WIND, 33490, ElementalItemType.CrystalSuper, 0), + GoD_33491(DARK, 33491, ElementalItemType.CrystalSuper, 0), + GoD_33492(HOLY, 33492, ElementalItemType.CrystalSuper, 0), + GoD_34796(FIRE, 34796, ElementalItemType.Crystal, 0), + GoD_34797(WATER, 34797, ElementalItemType.Crystal, 0), + GoD_34798(EARTH, 34798, ElementalItemType.Crystal, 0), + GoD_34799(WIND, 34799, ElementalItemType.Crystal, 0), + GoD_34800(DARK, 34800, ElementalItemType.Crystal, 0), + GoD_34801(HOLY, 34801, ElementalItemType.Crystal, 0), + GoD_36972(FIRE, 36972, ElementalItemType.CrystalSuper, 0), + GoD_36973(WATER, 36973, ElementalItemType.CrystalSuper, 0), + GoD_36974(EARTH, 36974, ElementalItemType.CrystalSuper, 0), + GoD_36975(WIND, 36975, ElementalItemType.CrystalSuper, 0), + GoD_36976(DARK, 36976, ElementalItemType.CrystalSuper, 0), + GoD_36977(HOLY, 36977, ElementalItemType.CrystalSuper, 0); - public byte _element; - public int _itemId; - public ElementalItemType _type; - public int _fixedPower; + public final byte _element; + public final int _itemId; + public final ElementalItemType _type; + public final int _fixedPower; ElementalItems(byte element, int itemId, ElementalItemType type, int fixedPower) { @@ -286,4 +288,129 @@ public final class Elementals } return -1; } + + public static boolean isElementableWithStone(ItemInstance targetItem, int stoneId) + { + return targetItem.isElementable(); + } + + /* @formatter:off */ + // +-------+----------------+----------------+----------------+----------------+ + // | Grade | Stone | Crystal | Stone-Super | Crystal-Super | + // +-------+----------------+----------------+----------------+----------------+ + // | | Weapon | Armor | Weapon | Armor | Weapon | Armor | Weapon | Armor | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S | 50% | 60% | 30% | 50% | 100% | 100% | 80% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S80 | 50% | 80% | 40% | 70% | 100% | 100% | 90% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S84 | 50% | 80% | 50% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R | 50% | 100% | 60% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R95 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R99 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + /* @formatter:on */ + + public static boolean isSuccess(ItemInstance item, int stoneId) + { + switch (Elementals.getItemElemental(stoneId)._type) + { + case Stone: + { + if (item.isWeapon()) + { + return Rnd.get(100) < 50; + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 60; + } + case S80: + case S84: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case Crystal: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 30; + } + case S80: + { + return Rnd.get(100) < 40; + } + case S84: + { + return Rnd.get(100) < 50; + } + default: + { + return Rnd.get(100) < 60; + } + } + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 50; + } + case S80: + { + return Rnd.get(100) < 70; + } + case S84: + case R: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case CrystalSuper: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 80; + } + case S80: + { + return Rnd.get(100) < 90; + } + default: + { + return true; + } + } + } + return true; + } + } + // Super stones have 100% so will end here. + // Patch notes do not have info about jewels chance so 100% for now, till l2wiki update, energy are not used. + return true; + } } diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index 6d03548432..3e6f5b8d13 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.model.Elementals; @@ -104,7 +103,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return; } - if (!item.isElementable()) + if (!Elementals.isElementableWithStone(item, stone.getItem().getId())) { client.sendPacket(SystemMessageId.ELEMENTAL_POWER_ENHANCER_USAGE_REQUIREMENT_IS_NOT_SUFFICIENT); player.removeRequest(request.getClass()); @@ -301,53 +300,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return -1; } - boolean success = false; - switch (stone.getItem().getCrystalType()) - { - case R: - { - success = Rnd.get(100) < 80; - break; - } - case R95: - case R99: - { - success = true; - break; - } - default: - { - switch (Elementals.getItemElemental(stone.getId())._type) - { - case Stone: - case Roughore: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_STONE; - break; - } - case Crystal: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL; - break; - } - case Jewel: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_JEWEL; - break; - } - case Energy: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_ENERGY; - break; - } - case GoD_Event: - { - success = true; - break; - } - } - } - } + boolean success = Elementals.isSuccess(item, stone.getId()); if (success) { diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java index 94009d7d9c..153c6fd16d 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java @@ -51,7 +51,7 @@ public class ExChooseInventoryAttributeItem implements IClientOutgoingPacket // Register only items that can be put an attribute stone/crystal for (ItemInstance item : player.getInventory().getItems()) { - if (item.isElementable()) + if (Elementals.isElementableWithStone(item, stone.getId())) { _items.add(item.getObjectId()); } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/items/36900-36999.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/items/36900-36999.xml index 01a4325561..0537f68f18 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/items/36900-36999.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/items/36900-36999.xml @@ -894,44 +894,110 @@ - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/Elementals.java index c5654df9ba..1582e53016 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/Elementals.java @@ -19,6 +19,9 @@ package org.l2jmobius.gameserver.model; import java.util.HashMap; import java.util.Map; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; + public final class Elementals { private static final Map TABLE = new HashMap<>(); @@ -84,11 +87,11 @@ public final class Elementals public enum ElementalItemType { Stone(3), - Roughore(3), + StoneSuper(3), Crystal(6), + CrystalSuper(6), Jewel(9), - Energy(12), - GoD_Event(9); + Energy(12); public int _maxLevel; @@ -107,12 +110,12 @@ public final class Elementals divineStone(HOLY, 9551, ElementalItemType.Stone, 0), darkStone(DARK, 9550, ElementalItemType.Stone, 0), - fireRoughtore(FIRE, 10521, ElementalItemType.Roughore, 0), - waterRoughtore(WATER, 10522, ElementalItemType.Roughore, 0), - windRoughtore(WIND, 10524, ElementalItemType.Roughore, 0), - earthRoughtore(EARTH, 10523, ElementalItemType.Roughore, 0), - divineRoughtore(HOLY, 10526, ElementalItemType.Roughore, 0), - darkRoughtore(DARK, 10525, ElementalItemType.Roughore, 0), + fireRoughtore(FIRE, 10521, ElementalItemType.Stone, 0), + waterRoughtore(WATER, 10522, ElementalItemType.Stone, 0), + windRoughtore(WIND, 10524, ElementalItemType.Stone, 0), + earthRoughtore(EARTH, 10523, ElementalItemType.Stone, 0), + divineRoughtore(HOLY, 10526, ElementalItemType.Stone, 0), + darkRoughtore(DARK, 10525, ElementalItemType.Stone, 0), fireCrystal(FIRE, 9552, ElementalItemType.Crystal, 0), waterCrystal(WATER, 9553, ElementalItemType.Crystal, 0), @@ -128,7 +131,6 @@ public final class Elementals divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), windEnergy(WIND, 9567, ElementalItemType.Energy, 0), @@ -137,121 +139,121 @@ public final class Elementals darkEnergy(DARK, 9568, ElementalItemType.Energy, 0), // GoD+ Stones - GoD_22635(FIRE, 22635, ElementalItemType.GoD_Event, 0), - GoD_22636(WATER, 22636, ElementalItemType.GoD_Event, 0), - GoD_22637(EARTH, 22637, ElementalItemType.GoD_Event, 0), - GoD_22638(WIND, 22638, ElementalItemType.GoD_Event, 0), - GoD_22639(DARK, 22639, ElementalItemType.GoD_Event, 0), - GoD_22640(HOLY, 22640, ElementalItemType.GoD_Event, 0), - GoD_22919(FIRE, 22919, ElementalItemType.GoD_Event, 0), - GoD_22920(WATER, 22920, ElementalItemType.GoD_Event, 0), - GoD_22921(EARTH, 22921, ElementalItemType.GoD_Event, 0), - GoD_22922(WIND, 22922, ElementalItemType.GoD_Event, 0), - GoD_22923(DARK, 22923, ElementalItemType.GoD_Event, 0), - GoD_22924(HOLY, 22924, ElementalItemType.GoD_Event, 0), - GoD_33481(FIRE, 33481, ElementalItemType.GoD_Event, 0), - GoD_33482(WATER, 33482, ElementalItemType.GoD_Event, 0), - GoD_33483(EARTH, 33483, ElementalItemType.GoD_Event, 0), - GoD_33484(WIND, 33484, ElementalItemType.GoD_Event, 0), - GoD_33485(DARK, 33485, ElementalItemType.GoD_Event, 0), - GoD_33486(HOLY, 33486, ElementalItemType.GoD_Event, 0), - GoD_33863(FIRE, 33863, ElementalItemType.GoD_Event, 60), - GoD_33864(WATER, 33864, ElementalItemType.GoD_Event, 60), - GoD_33865(EARTH, 33865, ElementalItemType.GoD_Event, 60), - GoD_33866(WIND, 33866, ElementalItemType.GoD_Event, 60), - GoD_33867(DARK, 33867, ElementalItemType.GoD_Event, 60), - GoD_33868(HOLY, 33868, ElementalItemType.GoD_Event, 60), - GoD_33869(FIRE, 33869, ElementalItemType.GoD_Event, 150), - GoD_33870(WATER, 33870, ElementalItemType.GoD_Event, 150), - GoD_33871(EARTH, 33871, ElementalItemType.GoD_Event, 150), - GoD_33872(WIND, 33872, ElementalItemType.GoD_Event, 150), - GoD_33873(DARK, 33873, ElementalItemType.GoD_Event, 150), - GoD_33874(HOLY, 33874, ElementalItemType.GoD_Event, 150), - GoD_34661(FIRE, 34661, ElementalItemType.GoD_Event, 60), - GoD_34662(WATER, 34662, ElementalItemType.GoD_Event, 60), - GoD_34663(EARTH, 34663, ElementalItemType.GoD_Event, 60), - GoD_34664(WIND, 34664, ElementalItemType.GoD_Event, 60), - GoD_34665(DARK, 34665, ElementalItemType.GoD_Event, 60), - GoD_34666(HOLY, 34666, ElementalItemType.GoD_Event, 60), - GoD_34667(FIRE, 34667, ElementalItemType.GoD_Event, 150), - GoD_34668(WATER, 34668, ElementalItemType.GoD_Event, 150), - GoD_34669(EARTH, 34669, ElementalItemType.GoD_Event, 150), - GoD_34670(WIND, 34670, ElementalItemType.GoD_Event, 150), - GoD_34671(DARK, 34671, ElementalItemType.GoD_Event, 150), - GoD_34672(HOLY, 34672, ElementalItemType.GoD_Event, 150), - GoD_34790(FIRE, 34790, ElementalItemType.GoD_Event, 0), - GoD_34791(WATER, 34791, ElementalItemType.GoD_Event, 0), - GoD_34792(EARTH, 34792, ElementalItemType.GoD_Event, 0), - GoD_34793(WIND, 34793, ElementalItemType.GoD_Event, 0), - GoD_34794(DARK, 34794, ElementalItemType.GoD_Event, 0), - GoD_34795(HOLY, 34795, ElementalItemType.GoD_Event, 0), - GoD_35729(FIRE, 35729, ElementalItemType.GoD_Event, 60), - GoD_35730(WATER, 35730, ElementalItemType.GoD_Event, 60), - GoD_35731(EARTH, 35731, ElementalItemType.GoD_Event, 60), - GoD_35732(WIND, 35732, ElementalItemType.GoD_Event, 60), - GoD_35733(DARK, 35733, ElementalItemType.GoD_Event, 60), - GoD_35734(HOLY, 35734, ElementalItemType.GoD_Event, 60), - GoD_35735(FIRE, 35735, ElementalItemType.GoD_Event, 150), - GoD_35736(WATER, 35736, ElementalItemType.GoD_Event, 150), - GoD_35737(EARTH, 35737, ElementalItemType.GoD_Event, 150), - GoD_35738(WIND, 35738, ElementalItemType.GoD_Event, 150), - GoD_35739(DARK, 35739, ElementalItemType.GoD_Event, 150), - GoD_35740(HOLY, 35740, ElementalItemType.GoD_Event, 150), - GoD_36960(FIRE, 36960, ElementalItemType.GoD_Event, 60), - GoD_36961(WATER, 36961, ElementalItemType.GoD_Event, 60), - GoD_36962(EARTH, 36962, ElementalItemType.GoD_Event, 60), - GoD_36963(WIND, 36963, ElementalItemType.GoD_Event, 60), - GoD_36964(DARK, 36964, ElementalItemType.GoD_Event, 60), - GoD_36965(HOLY, 36965, ElementalItemType.GoD_Event, 60), - GoD_36966(FIRE, 36966, ElementalItemType.GoD_Event, 150), - GoD_36967(WATER, 36967, ElementalItemType.GoD_Event, 150), - GoD_36968(EARTH, 36968, ElementalItemType.GoD_Event, 150), - GoD_36969(WIND, 36969, ElementalItemType.GoD_Event, 150), - GoD_36970(DARK, 36970, ElementalItemType.GoD_Event, 150), - GoD_36971(HOLY, 36971, ElementalItemType.GoD_Event, 150), - GoD_37499(FIRE, 37499, ElementalItemType.GoD_Event, 0), - GoD_37500(WATER, 37500, ElementalItemType.GoD_Event, 0), - GoD_37501(EARTH, 37501, ElementalItemType.GoD_Event, 0), - GoD_37502(WIND, 37502, ElementalItemType.GoD_Event, 0), - GoD_37503(DARK, 37503, ElementalItemType.GoD_Event, 0), - GoD_37504(HOLY, 37504, ElementalItemType.GoD_Event, 0), + GoD_22635(FIRE, 22635, ElementalItemType.Stone, 0), + GoD_22636(WATER, 22636, ElementalItemType.Stone, 0), + GoD_22637(EARTH, 22637, ElementalItemType.Stone, 0), + GoD_22638(WIND, 22638, ElementalItemType.Stone, 0), + GoD_22639(DARK, 22639, ElementalItemType.Stone, 0), + GoD_22640(HOLY, 22640, ElementalItemType.Stone, 0), + GoD_22919(FIRE, 22919, ElementalItemType.Stone, 0), + GoD_22920(WATER, 22920, ElementalItemType.Stone, 0), + GoD_22921(EARTH, 22921, ElementalItemType.Stone, 0), + GoD_22922(WIND, 22922, ElementalItemType.Stone, 0), + GoD_22923(DARK, 22923, ElementalItemType.Stone, 0), + GoD_22924(HOLY, 22924, ElementalItemType.Stone, 0), + GoD_33481(FIRE, 33481, ElementalItemType.StoneSuper, 0), + GoD_33482(WATER, 33482, ElementalItemType.StoneSuper, 0), + GoD_33483(EARTH, 33483, ElementalItemType.StoneSuper, 0), + GoD_33484(WIND, 33484, ElementalItemType.StoneSuper, 0), + GoD_33485(DARK, 33485, ElementalItemType.StoneSuper, 0), + GoD_33486(HOLY, 33486, ElementalItemType.StoneSuper, 0), + GoD_33863(FIRE, 33863, ElementalItemType.StoneSuper, 60), + GoD_33864(WATER, 33864, ElementalItemType.StoneSuper, 60), + GoD_33865(EARTH, 33865, ElementalItemType.StoneSuper, 60), + GoD_33866(WIND, 33866, ElementalItemType.StoneSuper, 60), + GoD_33867(DARK, 33867, ElementalItemType.StoneSuper, 60), + GoD_33868(HOLY, 33868, ElementalItemType.StoneSuper, 60), + GoD_33869(FIRE, 33869, ElementalItemType.StoneSuper, 150), + GoD_33870(WATER, 33870, ElementalItemType.StoneSuper, 150), + GoD_33871(EARTH, 33871, ElementalItemType.StoneSuper, 150), + GoD_33872(WIND, 33872, ElementalItemType.StoneSuper, 150), + GoD_33873(DARK, 33873, ElementalItemType.StoneSuper, 150), + GoD_33874(HOLY, 33874, ElementalItemType.StoneSuper, 150), + GoD_34661(FIRE, 34661, ElementalItemType.StoneSuper, 60), + GoD_34662(WATER, 34662, ElementalItemType.StoneSuper, 60), + GoD_34663(EARTH, 34663, ElementalItemType.StoneSuper, 60), + GoD_34664(WIND, 34664, ElementalItemType.StoneSuper, 60), + GoD_34665(DARK, 34665, ElementalItemType.StoneSuper, 60), + GoD_34666(HOLY, 34666, ElementalItemType.StoneSuper, 60), + GoD_34667(FIRE, 34667, ElementalItemType.StoneSuper, 150), + GoD_34668(WATER, 34668, ElementalItemType.StoneSuper, 150), + GoD_34669(EARTH, 34669, ElementalItemType.StoneSuper, 150), + GoD_34670(WIND, 34670, ElementalItemType.StoneSuper, 150), + GoD_34671(DARK, 34671, ElementalItemType.StoneSuper, 150), + GoD_34672(HOLY, 34672, ElementalItemType.StoneSuper, 150), + GoD_34790(FIRE, 34790, ElementalItemType.Stone, 0), + GoD_34791(WATER, 34791, ElementalItemType.Stone, 0), + GoD_34792(EARTH, 34792, ElementalItemType.Stone, 0), + GoD_34793(WIND, 34793, ElementalItemType.Stone, 0), + GoD_34794(DARK, 34794, ElementalItemType.Stone, 0), + GoD_34795(HOLY, 34795, ElementalItemType.Stone, 0), + GoD_35729(FIRE, 35729, ElementalItemType.StoneSuper, 60), + GoD_35730(WATER, 35730, ElementalItemType.StoneSuper, 60), + GoD_35731(EARTH, 35731, ElementalItemType.StoneSuper, 60), + GoD_35732(WIND, 35732, ElementalItemType.StoneSuper, 60), + GoD_35733(DARK, 35733, ElementalItemType.StoneSuper, 60), + GoD_35734(HOLY, 35734, ElementalItemType.StoneSuper, 60), + GoD_35735(FIRE, 35735, ElementalItemType.StoneSuper, 150), + GoD_35736(WATER, 35736, ElementalItemType.StoneSuper, 150), + GoD_35737(EARTH, 35737, ElementalItemType.StoneSuper, 150), + GoD_35738(WIND, 35738, ElementalItemType.StoneSuper, 150), + GoD_35739(DARK, 35739, ElementalItemType.StoneSuper, 150), + GoD_35740(HOLY, 35740, ElementalItemType.StoneSuper, 150), + GoD_36960(FIRE, 36960, ElementalItemType.StoneSuper, 60), + GoD_36961(WATER, 36961, ElementalItemType.StoneSuper, 60), + GoD_36962(EARTH, 36962, ElementalItemType.StoneSuper, 60), + GoD_36963(WIND, 36963, ElementalItemType.StoneSuper, 60), + GoD_36964(DARK, 36964, ElementalItemType.StoneSuper, 60), + GoD_36965(HOLY, 36965, ElementalItemType.StoneSuper, 60), + GoD_36966(FIRE, 36966, ElementalItemType.StoneSuper, 150), + GoD_36967(WATER, 36967, ElementalItemType.StoneSuper, 150), + GoD_36968(EARTH, 36968, ElementalItemType.StoneSuper, 150), + GoD_36969(WIND, 36969, ElementalItemType.StoneSuper, 150), + GoD_36970(DARK, 36970, ElementalItemType.StoneSuper, 150), + GoD_36971(HOLY, 36971, ElementalItemType.StoneSuper, 150), + GoD_37499(FIRE, 37499, ElementalItemType.Stone, 0), + GoD_37500(WATER, 37500, ElementalItemType.Stone, 0), + GoD_37501(EARTH, 37501, ElementalItemType.Stone, 0), + GoD_37502(WIND, 37502, ElementalItemType.Stone, 0), + GoD_37503(DARK, 37503, ElementalItemType.Stone, 0), + GoD_37504(HOLY, 37504, ElementalItemType.Stone, 0), // GoD+ Crystals - GoD_22641(FIRE, 22641, ElementalItemType.GoD_Event, 0), - GoD_22642(WATER, 22642, ElementalItemType.GoD_Event, 0), - GoD_22643(EARTH, 22643, ElementalItemType.GoD_Event, 0), - GoD_22644(WIND, 22644, ElementalItemType.GoD_Event, 0), - GoD_22645(DARK, 22645, ElementalItemType.GoD_Event, 0), - GoD_22646(HOLY, 22646, ElementalItemType.GoD_Event, 0), - GoD_22925(FIRE, 22925, ElementalItemType.GoD_Event, 0), - GoD_22926(WATER, 22926, ElementalItemType.GoD_Event, 0), - GoD_22927(EARTH, 22927, ElementalItemType.GoD_Event, 0), - GoD_22928(WIND, 22928, ElementalItemType.GoD_Event, 0), - GoD_22929(DARK, 22929, ElementalItemType.GoD_Event, 0), - GoD_22930(HOLY, 22930, ElementalItemType.GoD_Event, 0), - GoD_33487(FIRE, 33487, ElementalItemType.GoD_Event, 0), - GoD_33488(WATER, 33488, ElementalItemType.GoD_Event, 0), - GoD_33489(EARTH, 33489, ElementalItemType.GoD_Event, 0), - GoD_33490(WIND, 33490, ElementalItemType.GoD_Event, 0), - GoD_33491(DARK, 33491, ElementalItemType.GoD_Event, 0), - GoD_33492(HOLY, 33492, ElementalItemType.GoD_Event, 0), - GoD_34796(FIRE, 34796, ElementalItemType.GoD_Event, 0), - GoD_34797(WATER, 34797, ElementalItemType.GoD_Event, 0), - GoD_34798(EARTH, 34798, ElementalItemType.GoD_Event, 0), - GoD_34799(WIND, 34799, ElementalItemType.GoD_Event, 0), - GoD_34800(DARK, 34800, ElementalItemType.GoD_Event, 0), - GoD_34801(HOLY, 34801, ElementalItemType.GoD_Event, 0), - GoD_36972(FIRE, 36972, ElementalItemType.GoD_Event, 0), - GoD_36973(WATER, 36973, ElementalItemType.GoD_Event, 0), - GoD_36974(EARTH, 36974, ElementalItemType.GoD_Event, 0), - GoD_36975(WIND, 36975, ElementalItemType.GoD_Event, 0), - GoD_36976(DARK, 36976, ElementalItemType.GoD_Event, 0), - GoD_36977(HOLY, 36977, ElementalItemType.GoD_Event, 0); + GoD_22641(FIRE, 22641, ElementalItemType.Crystal, 0), + GoD_22642(WATER, 22642, ElementalItemType.Crystal, 0), + GoD_22643(EARTH, 22643, ElementalItemType.Crystal, 0), + GoD_22644(WIND, 22644, ElementalItemType.Crystal, 0), + GoD_22645(DARK, 22645, ElementalItemType.Crystal, 0), + GoD_22646(HOLY, 22646, ElementalItemType.Crystal, 0), + GoD_22925(FIRE, 22925, ElementalItemType.Crystal, 0), + GoD_22926(WATER, 22926, ElementalItemType.Crystal, 0), + GoD_22927(EARTH, 22927, ElementalItemType.Crystal, 0), + GoD_22928(WIND, 22928, ElementalItemType.Crystal, 0), + GoD_22929(DARK, 22929, ElementalItemType.Crystal, 0), + GoD_22930(HOLY, 22930, ElementalItemType.Crystal, 0), + GoD_33487(FIRE, 33487, ElementalItemType.CrystalSuper, 0), + GoD_33488(WATER, 33488, ElementalItemType.CrystalSuper, 0), + GoD_33489(EARTH, 33489, ElementalItemType.CrystalSuper, 0), + GoD_33490(WIND, 33490, ElementalItemType.CrystalSuper, 0), + GoD_33491(DARK, 33491, ElementalItemType.CrystalSuper, 0), + GoD_33492(HOLY, 33492, ElementalItemType.CrystalSuper, 0), + GoD_34796(FIRE, 34796, ElementalItemType.Crystal, 0), + GoD_34797(WATER, 34797, ElementalItemType.Crystal, 0), + GoD_34798(EARTH, 34798, ElementalItemType.Crystal, 0), + GoD_34799(WIND, 34799, ElementalItemType.Crystal, 0), + GoD_34800(DARK, 34800, ElementalItemType.Crystal, 0), + GoD_34801(HOLY, 34801, ElementalItemType.Crystal, 0), + GoD_36972(FIRE, 36972, ElementalItemType.CrystalSuper, 0), + GoD_36973(WATER, 36973, ElementalItemType.CrystalSuper, 0), + GoD_36974(EARTH, 36974, ElementalItemType.CrystalSuper, 0), + GoD_36975(WIND, 36975, ElementalItemType.CrystalSuper, 0), + GoD_36976(DARK, 36976, ElementalItemType.CrystalSuper, 0), + GoD_36977(HOLY, 36977, ElementalItemType.CrystalSuper, 0); - public byte _element; - public int _itemId; - public ElementalItemType _type; - public int _fixedPower; + public final byte _element; + public final int _itemId; + public final ElementalItemType _type; + public final int _fixedPower; ElementalItems(byte element, int itemId, ElementalItemType type, int fixedPower) { @@ -286,4 +288,129 @@ public final class Elementals } return -1; } + + public static boolean isElementableWithStone(ItemInstance targetItem, int stoneId) + { + return targetItem.isElementable(); + } + + /* @formatter:off */ + // +-------+----------------+----------------+----------------+----------------+ + // | Grade | Stone | Crystal | Stone-Super | Crystal-Super | + // +-------+----------------+----------------+----------------+----------------+ + // | | Weapon | Armor | Weapon | Armor | Weapon | Armor | Weapon | Armor | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S | 50% | 60% | 30% | 50% | 100% | 100% | 80% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S80 | 50% | 80% | 40% | 70% | 100% | 100% | 90% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S84 | 50% | 80% | 50% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R | 50% | 100% | 60% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R95 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R99 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + /* @formatter:on */ + + public static boolean isSuccess(ItemInstance item, int stoneId) + { + switch (Elementals.getItemElemental(stoneId)._type) + { + case Stone: + { + if (item.isWeapon()) + { + return Rnd.get(100) < 50; + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 60; + } + case S80: + case S84: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case Crystal: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 30; + } + case S80: + { + return Rnd.get(100) < 40; + } + case S84: + { + return Rnd.get(100) < 50; + } + default: + { + return Rnd.get(100) < 60; + } + } + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 50; + } + case S80: + { + return Rnd.get(100) < 70; + } + case S84: + case R: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case CrystalSuper: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 80; + } + case S80: + { + return Rnd.get(100) < 90; + } + default: + { + return true; + } + } + } + return true; + } + } + // Super stones have 100% so will end here. + // Patch notes do not have info about jewels chance so 100% for now, till l2wiki update, energy are not used. + return true; + } } diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index 6d03548432..3e6f5b8d13 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.model.Elementals; @@ -104,7 +103,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return; } - if (!item.isElementable()) + if (!Elementals.isElementableWithStone(item, stone.getItem().getId())) { client.sendPacket(SystemMessageId.ELEMENTAL_POWER_ENHANCER_USAGE_REQUIREMENT_IS_NOT_SUFFICIENT); player.removeRequest(request.getClass()); @@ -301,53 +300,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return -1; } - boolean success = false; - switch (stone.getItem().getCrystalType()) - { - case R: - { - success = Rnd.get(100) < 80; - break; - } - case R95: - case R99: - { - success = true; - break; - } - default: - { - switch (Elementals.getItemElemental(stone.getId())._type) - { - case Stone: - case Roughore: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_STONE; - break; - } - case Crystal: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL; - break; - } - case Jewel: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_JEWEL; - break; - } - case Energy: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_ENERGY; - break; - } - case GoD_Event: - { - success = true; - break; - } - } - } - } + boolean success = Elementals.isSuccess(item, stone.getId()); if (success) { diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java index 94009d7d9c..153c6fd16d 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java @@ -51,7 +51,7 @@ public class ExChooseInventoryAttributeItem implements IClientOutgoingPacket // Register only items that can be put an attribute stone/crystal for (ItemInstance item : player.getInventory().getItems()) { - if (item.isElementable()) + if (Elementals.isElementableWithStone(item, stone.getId())) { _items.add(item.getObjectId()); } diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/items/36900-36999.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/items/36900-36999.xml index 5518720d42..9fa2909084 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/items/36900-36999.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/items/36900-36999.xml @@ -843,44 +843,110 @@ - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Elementals.java index c5654df9ba..1582e53016 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Elementals.java @@ -19,6 +19,9 @@ package org.l2jmobius.gameserver.model; import java.util.HashMap; import java.util.Map; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; + public final class Elementals { private static final Map TABLE = new HashMap<>(); @@ -84,11 +87,11 @@ public final class Elementals public enum ElementalItemType { Stone(3), - Roughore(3), + StoneSuper(3), Crystal(6), + CrystalSuper(6), Jewel(9), - Energy(12), - GoD_Event(9); + Energy(12); public int _maxLevel; @@ -107,12 +110,12 @@ public final class Elementals divineStone(HOLY, 9551, ElementalItemType.Stone, 0), darkStone(DARK, 9550, ElementalItemType.Stone, 0), - fireRoughtore(FIRE, 10521, ElementalItemType.Roughore, 0), - waterRoughtore(WATER, 10522, ElementalItemType.Roughore, 0), - windRoughtore(WIND, 10524, ElementalItemType.Roughore, 0), - earthRoughtore(EARTH, 10523, ElementalItemType.Roughore, 0), - divineRoughtore(HOLY, 10526, ElementalItemType.Roughore, 0), - darkRoughtore(DARK, 10525, ElementalItemType.Roughore, 0), + fireRoughtore(FIRE, 10521, ElementalItemType.Stone, 0), + waterRoughtore(WATER, 10522, ElementalItemType.Stone, 0), + windRoughtore(WIND, 10524, ElementalItemType.Stone, 0), + earthRoughtore(EARTH, 10523, ElementalItemType.Stone, 0), + divineRoughtore(HOLY, 10526, ElementalItemType.Stone, 0), + darkRoughtore(DARK, 10525, ElementalItemType.Stone, 0), fireCrystal(FIRE, 9552, ElementalItemType.Crystal, 0), waterCrystal(WATER, 9553, ElementalItemType.Crystal, 0), @@ -128,7 +131,6 @@ public final class Elementals divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), windEnergy(WIND, 9567, ElementalItemType.Energy, 0), @@ -137,121 +139,121 @@ public final class Elementals darkEnergy(DARK, 9568, ElementalItemType.Energy, 0), // GoD+ Stones - GoD_22635(FIRE, 22635, ElementalItemType.GoD_Event, 0), - GoD_22636(WATER, 22636, ElementalItemType.GoD_Event, 0), - GoD_22637(EARTH, 22637, ElementalItemType.GoD_Event, 0), - GoD_22638(WIND, 22638, ElementalItemType.GoD_Event, 0), - GoD_22639(DARK, 22639, ElementalItemType.GoD_Event, 0), - GoD_22640(HOLY, 22640, ElementalItemType.GoD_Event, 0), - GoD_22919(FIRE, 22919, ElementalItemType.GoD_Event, 0), - GoD_22920(WATER, 22920, ElementalItemType.GoD_Event, 0), - GoD_22921(EARTH, 22921, ElementalItemType.GoD_Event, 0), - GoD_22922(WIND, 22922, ElementalItemType.GoD_Event, 0), - GoD_22923(DARK, 22923, ElementalItemType.GoD_Event, 0), - GoD_22924(HOLY, 22924, ElementalItemType.GoD_Event, 0), - GoD_33481(FIRE, 33481, ElementalItemType.GoD_Event, 0), - GoD_33482(WATER, 33482, ElementalItemType.GoD_Event, 0), - GoD_33483(EARTH, 33483, ElementalItemType.GoD_Event, 0), - GoD_33484(WIND, 33484, ElementalItemType.GoD_Event, 0), - GoD_33485(DARK, 33485, ElementalItemType.GoD_Event, 0), - GoD_33486(HOLY, 33486, ElementalItemType.GoD_Event, 0), - GoD_33863(FIRE, 33863, ElementalItemType.GoD_Event, 60), - GoD_33864(WATER, 33864, ElementalItemType.GoD_Event, 60), - GoD_33865(EARTH, 33865, ElementalItemType.GoD_Event, 60), - GoD_33866(WIND, 33866, ElementalItemType.GoD_Event, 60), - GoD_33867(DARK, 33867, ElementalItemType.GoD_Event, 60), - GoD_33868(HOLY, 33868, ElementalItemType.GoD_Event, 60), - GoD_33869(FIRE, 33869, ElementalItemType.GoD_Event, 150), - GoD_33870(WATER, 33870, ElementalItemType.GoD_Event, 150), - GoD_33871(EARTH, 33871, ElementalItemType.GoD_Event, 150), - GoD_33872(WIND, 33872, ElementalItemType.GoD_Event, 150), - GoD_33873(DARK, 33873, ElementalItemType.GoD_Event, 150), - GoD_33874(HOLY, 33874, ElementalItemType.GoD_Event, 150), - GoD_34661(FIRE, 34661, ElementalItemType.GoD_Event, 60), - GoD_34662(WATER, 34662, ElementalItemType.GoD_Event, 60), - GoD_34663(EARTH, 34663, ElementalItemType.GoD_Event, 60), - GoD_34664(WIND, 34664, ElementalItemType.GoD_Event, 60), - GoD_34665(DARK, 34665, ElementalItemType.GoD_Event, 60), - GoD_34666(HOLY, 34666, ElementalItemType.GoD_Event, 60), - GoD_34667(FIRE, 34667, ElementalItemType.GoD_Event, 150), - GoD_34668(WATER, 34668, ElementalItemType.GoD_Event, 150), - GoD_34669(EARTH, 34669, ElementalItemType.GoD_Event, 150), - GoD_34670(WIND, 34670, ElementalItemType.GoD_Event, 150), - GoD_34671(DARK, 34671, ElementalItemType.GoD_Event, 150), - GoD_34672(HOLY, 34672, ElementalItemType.GoD_Event, 150), - GoD_34790(FIRE, 34790, ElementalItemType.GoD_Event, 0), - GoD_34791(WATER, 34791, ElementalItemType.GoD_Event, 0), - GoD_34792(EARTH, 34792, ElementalItemType.GoD_Event, 0), - GoD_34793(WIND, 34793, ElementalItemType.GoD_Event, 0), - GoD_34794(DARK, 34794, ElementalItemType.GoD_Event, 0), - GoD_34795(HOLY, 34795, ElementalItemType.GoD_Event, 0), - GoD_35729(FIRE, 35729, ElementalItemType.GoD_Event, 60), - GoD_35730(WATER, 35730, ElementalItemType.GoD_Event, 60), - GoD_35731(EARTH, 35731, ElementalItemType.GoD_Event, 60), - GoD_35732(WIND, 35732, ElementalItemType.GoD_Event, 60), - GoD_35733(DARK, 35733, ElementalItemType.GoD_Event, 60), - GoD_35734(HOLY, 35734, ElementalItemType.GoD_Event, 60), - GoD_35735(FIRE, 35735, ElementalItemType.GoD_Event, 150), - GoD_35736(WATER, 35736, ElementalItemType.GoD_Event, 150), - GoD_35737(EARTH, 35737, ElementalItemType.GoD_Event, 150), - GoD_35738(WIND, 35738, ElementalItemType.GoD_Event, 150), - GoD_35739(DARK, 35739, ElementalItemType.GoD_Event, 150), - GoD_35740(HOLY, 35740, ElementalItemType.GoD_Event, 150), - GoD_36960(FIRE, 36960, ElementalItemType.GoD_Event, 60), - GoD_36961(WATER, 36961, ElementalItemType.GoD_Event, 60), - GoD_36962(EARTH, 36962, ElementalItemType.GoD_Event, 60), - GoD_36963(WIND, 36963, ElementalItemType.GoD_Event, 60), - GoD_36964(DARK, 36964, ElementalItemType.GoD_Event, 60), - GoD_36965(HOLY, 36965, ElementalItemType.GoD_Event, 60), - GoD_36966(FIRE, 36966, ElementalItemType.GoD_Event, 150), - GoD_36967(WATER, 36967, ElementalItemType.GoD_Event, 150), - GoD_36968(EARTH, 36968, ElementalItemType.GoD_Event, 150), - GoD_36969(WIND, 36969, ElementalItemType.GoD_Event, 150), - GoD_36970(DARK, 36970, ElementalItemType.GoD_Event, 150), - GoD_36971(HOLY, 36971, ElementalItemType.GoD_Event, 150), - GoD_37499(FIRE, 37499, ElementalItemType.GoD_Event, 0), - GoD_37500(WATER, 37500, ElementalItemType.GoD_Event, 0), - GoD_37501(EARTH, 37501, ElementalItemType.GoD_Event, 0), - GoD_37502(WIND, 37502, ElementalItemType.GoD_Event, 0), - GoD_37503(DARK, 37503, ElementalItemType.GoD_Event, 0), - GoD_37504(HOLY, 37504, ElementalItemType.GoD_Event, 0), + GoD_22635(FIRE, 22635, ElementalItemType.Stone, 0), + GoD_22636(WATER, 22636, ElementalItemType.Stone, 0), + GoD_22637(EARTH, 22637, ElementalItemType.Stone, 0), + GoD_22638(WIND, 22638, ElementalItemType.Stone, 0), + GoD_22639(DARK, 22639, ElementalItemType.Stone, 0), + GoD_22640(HOLY, 22640, ElementalItemType.Stone, 0), + GoD_22919(FIRE, 22919, ElementalItemType.Stone, 0), + GoD_22920(WATER, 22920, ElementalItemType.Stone, 0), + GoD_22921(EARTH, 22921, ElementalItemType.Stone, 0), + GoD_22922(WIND, 22922, ElementalItemType.Stone, 0), + GoD_22923(DARK, 22923, ElementalItemType.Stone, 0), + GoD_22924(HOLY, 22924, ElementalItemType.Stone, 0), + GoD_33481(FIRE, 33481, ElementalItemType.StoneSuper, 0), + GoD_33482(WATER, 33482, ElementalItemType.StoneSuper, 0), + GoD_33483(EARTH, 33483, ElementalItemType.StoneSuper, 0), + GoD_33484(WIND, 33484, ElementalItemType.StoneSuper, 0), + GoD_33485(DARK, 33485, ElementalItemType.StoneSuper, 0), + GoD_33486(HOLY, 33486, ElementalItemType.StoneSuper, 0), + GoD_33863(FIRE, 33863, ElementalItemType.StoneSuper, 60), + GoD_33864(WATER, 33864, ElementalItemType.StoneSuper, 60), + GoD_33865(EARTH, 33865, ElementalItemType.StoneSuper, 60), + GoD_33866(WIND, 33866, ElementalItemType.StoneSuper, 60), + GoD_33867(DARK, 33867, ElementalItemType.StoneSuper, 60), + GoD_33868(HOLY, 33868, ElementalItemType.StoneSuper, 60), + GoD_33869(FIRE, 33869, ElementalItemType.StoneSuper, 150), + GoD_33870(WATER, 33870, ElementalItemType.StoneSuper, 150), + GoD_33871(EARTH, 33871, ElementalItemType.StoneSuper, 150), + GoD_33872(WIND, 33872, ElementalItemType.StoneSuper, 150), + GoD_33873(DARK, 33873, ElementalItemType.StoneSuper, 150), + GoD_33874(HOLY, 33874, ElementalItemType.StoneSuper, 150), + GoD_34661(FIRE, 34661, ElementalItemType.StoneSuper, 60), + GoD_34662(WATER, 34662, ElementalItemType.StoneSuper, 60), + GoD_34663(EARTH, 34663, ElementalItemType.StoneSuper, 60), + GoD_34664(WIND, 34664, ElementalItemType.StoneSuper, 60), + GoD_34665(DARK, 34665, ElementalItemType.StoneSuper, 60), + GoD_34666(HOLY, 34666, ElementalItemType.StoneSuper, 60), + GoD_34667(FIRE, 34667, ElementalItemType.StoneSuper, 150), + GoD_34668(WATER, 34668, ElementalItemType.StoneSuper, 150), + GoD_34669(EARTH, 34669, ElementalItemType.StoneSuper, 150), + GoD_34670(WIND, 34670, ElementalItemType.StoneSuper, 150), + GoD_34671(DARK, 34671, ElementalItemType.StoneSuper, 150), + GoD_34672(HOLY, 34672, ElementalItemType.StoneSuper, 150), + GoD_34790(FIRE, 34790, ElementalItemType.Stone, 0), + GoD_34791(WATER, 34791, ElementalItemType.Stone, 0), + GoD_34792(EARTH, 34792, ElementalItemType.Stone, 0), + GoD_34793(WIND, 34793, ElementalItemType.Stone, 0), + GoD_34794(DARK, 34794, ElementalItemType.Stone, 0), + GoD_34795(HOLY, 34795, ElementalItemType.Stone, 0), + GoD_35729(FIRE, 35729, ElementalItemType.StoneSuper, 60), + GoD_35730(WATER, 35730, ElementalItemType.StoneSuper, 60), + GoD_35731(EARTH, 35731, ElementalItemType.StoneSuper, 60), + GoD_35732(WIND, 35732, ElementalItemType.StoneSuper, 60), + GoD_35733(DARK, 35733, ElementalItemType.StoneSuper, 60), + GoD_35734(HOLY, 35734, ElementalItemType.StoneSuper, 60), + GoD_35735(FIRE, 35735, ElementalItemType.StoneSuper, 150), + GoD_35736(WATER, 35736, ElementalItemType.StoneSuper, 150), + GoD_35737(EARTH, 35737, ElementalItemType.StoneSuper, 150), + GoD_35738(WIND, 35738, ElementalItemType.StoneSuper, 150), + GoD_35739(DARK, 35739, ElementalItemType.StoneSuper, 150), + GoD_35740(HOLY, 35740, ElementalItemType.StoneSuper, 150), + GoD_36960(FIRE, 36960, ElementalItemType.StoneSuper, 60), + GoD_36961(WATER, 36961, ElementalItemType.StoneSuper, 60), + GoD_36962(EARTH, 36962, ElementalItemType.StoneSuper, 60), + GoD_36963(WIND, 36963, ElementalItemType.StoneSuper, 60), + GoD_36964(DARK, 36964, ElementalItemType.StoneSuper, 60), + GoD_36965(HOLY, 36965, ElementalItemType.StoneSuper, 60), + GoD_36966(FIRE, 36966, ElementalItemType.StoneSuper, 150), + GoD_36967(WATER, 36967, ElementalItemType.StoneSuper, 150), + GoD_36968(EARTH, 36968, ElementalItemType.StoneSuper, 150), + GoD_36969(WIND, 36969, ElementalItemType.StoneSuper, 150), + GoD_36970(DARK, 36970, ElementalItemType.StoneSuper, 150), + GoD_36971(HOLY, 36971, ElementalItemType.StoneSuper, 150), + GoD_37499(FIRE, 37499, ElementalItemType.Stone, 0), + GoD_37500(WATER, 37500, ElementalItemType.Stone, 0), + GoD_37501(EARTH, 37501, ElementalItemType.Stone, 0), + GoD_37502(WIND, 37502, ElementalItemType.Stone, 0), + GoD_37503(DARK, 37503, ElementalItemType.Stone, 0), + GoD_37504(HOLY, 37504, ElementalItemType.Stone, 0), // GoD+ Crystals - GoD_22641(FIRE, 22641, ElementalItemType.GoD_Event, 0), - GoD_22642(WATER, 22642, ElementalItemType.GoD_Event, 0), - GoD_22643(EARTH, 22643, ElementalItemType.GoD_Event, 0), - GoD_22644(WIND, 22644, ElementalItemType.GoD_Event, 0), - GoD_22645(DARK, 22645, ElementalItemType.GoD_Event, 0), - GoD_22646(HOLY, 22646, ElementalItemType.GoD_Event, 0), - GoD_22925(FIRE, 22925, ElementalItemType.GoD_Event, 0), - GoD_22926(WATER, 22926, ElementalItemType.GoD_Event, 0), - GoD_22927(EARTH, 22927, ElementalItemType.GoD_Event, 0), - GoD_22928(WIND, 22928, ElementalItemType.GoD_Event, 0), - GoD_22929(DARK, 22929, ElementalItemType.GoD_Event, 0), - GoD_22930(HOLY, 22930, ElementalItemType.GoD_Event, 0), - GoD_33487(FIRE, 33487, ElementalItemType.GoD_Event, 0), - GoD_33488(WATER, 33488, ElementalItemType.GoD_Event, 0), - GoD_33489(EARTH, 33489, ElementalItemType.GoD_Event, 0), - GoD_33490(WIND, 33490, ElementalItemType.GoD_Event, 0), - GoD_33491(DARK, 33491, ElementalItemType.GoD_Event, 0), - GoD_33492(HOLY, 33492, ElementalItemType.GoD_Event, 0), - GoD_34796(FIRE, 34796, ElementalItemType.GoD_Event, 0), - GoD_34797(WATER, 34797, ElementalItemType.GoD_Event, 0), - GoD_34798(EARTH, 34798, ElementalItemType.GoD_Event, 0), - GoD_34799(WIND, 34799, ElementalItemType.GoD_Event, 0), - GoD_34800(DARK, 34800, ElementalItemType.GoD_Event, 0), - GoD_34801(HOLY, 34801, ElementalItemType.GoD_Event, 0), - GoD_36972(FIRE, 36972, ElementalItemType.GoD_Event, 0), - GoD_36973(WATER, 36973, ElementalItemType.GoD_Event, 0), - GoD_36974(EARTH, 36974, ElementalItemType.GoD_Event, 0), - GoD_36975(WIND, 36975, ElementalItemType.GoD_Event, 0), - GoD_36976(DARK, 36976, ElementalItemType.GoD_Event, 0), - GoD_36977(HOLY, 36977, ElementalItemType.GoD_Event, 0); + GoD_22641(FIRE, 22641, ElementalItemType.Crystal, 0), + GoD_22642(WATER, 22642, ElementalItemType.Crystal, 0), + GoD_22643(EARTH, 22643, ElementalItemType.Crystal, 0), + GoD_22644(WIND, 22644, ElementalItemType.Crystal, 0), + GoD_22645(DARK, 22645, ElementalItemType.Crystal, 0), + GoD_22646(HOLY, 22646, ElementalItemType.Crystal, 0), + GoD_22925(FIRE, 22925, ElementalItemType.Crystal, 0), + GoD_22926(WATER, 22926, ElementalItemType.Crystal, 0), + GoD_22927(EARTH, 22927, ElementalItemType.Crystal, 0), + GoD_22928(WIND, 22928, ElementalItemType.Crystal, 0), + GoD_22929(DARK, 22929, ElementalItemType.Crystal, 0), + GoD_22930(HOLY, 22930, ElementalItemType.Crystal, 0), + GoD_33487(FIRE, 33487, ElementalItemType.CrystalSuper, 0), + GoD_33488(WATER, 33488, ElementalItemType.CrystalSuper, 0), + GoD_33489(EARTH, 33489, ElementalItemType.CrystalSuper, 0), + GoD_33490(WIND, 33490, ElementalItemType.CrystalSuper, 0), + GoD_33491(DARK, 33491, ElementalItemType.CrystalSuper, 0), + GoD_33492(HOLY, 33492, ElementalItemType.CrystalSuper, 0), + GoD_34796(FIRE, 34796, ElementalItemType.Crystal, 0), + GoD_34797(WATER, 34797, ElementalItemType.Crystal, 0), + GoD_34798(EARTH, 34798, ElementalItemType.Crystal, 0), + GoD_34799(WIND, 34799, ElementalItemType.Crystal, 0), + GoD_34800(DARK, 34800, ElementalItemType.Crystal, 0), + GoD_34801(HOLY, 34801, ElementalItemType.Crystal, 0), + GoD_36972(FIRE, 36972, ElementalItemType.CrystalSuper, 0), + GoD_36973(WATER, 36973, ElementalItemType.CrystalSuper, 0), + GoD_36974(EARTH, 36974, ElementalItemType.CrystalSuper, 0), + GoD_36975(WIND, 36975, ElementalItemType.CrystalSuper, 0), + GoD_36976(DARK, 36976, ElementalItemType.CrystalSuper, 0), + GoD_36977(HOLY, 36977, ElementalItemType.CrystalSuper, 0); - public byte _element; - public int _itemId; - public ElementalItemType _type; - public int _fixedPower; + public final byte _element; + public final int _itemId; + public final ElementalItemType _type; + public final int _fixedPower; ElementalItems(byte element, int itemId, ElementalItemType type, int fixedPower) { @@ -286,4 +288,129 @@ public final class Elementals } return -1; } + + public static boolean isElementableWithStone(ItemInstance targetItem, int stoneId) + { + return targetItem.isElementable(); + } + + /* @formatter:off */ + // +-------+----------------+----------------+----------------+----------------+ + // | Grade | Stone | Crystal | Stone-Super | Crystal-Super | + // +-------+----------------+----------------+----------------+----------------+ + // | | Weapon | Armor | Weapon | Armor | Weapon | Armor | Weapon | Armor | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S | 50% | 60% | 30% | 50% | 100% | 100% | 80% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S80 | 50% | 80% | 40% | 70% | 100% | 100% | 90% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S84 | 50% | 80% | 50% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R | 50% | 100% | 60% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R95 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R99 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + /* @formatter:on */ + + public static boolean isSuccess(ItemInstance item, int stoneId) + { + switch (Elementals.getItemElemental(stoneId)._type) + { + case Stone: + { + if (item.isWeapon()) + { + return Rnd.get(100) < 50; + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 60; + } + case S80: + case S84: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case Crystal: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 30; + } + case S80: + { + return Rnd.get(100) < 40; + } + case S84: + { + return Rnd.get(100) < 50; + } + default: + { + return Rnd.get(100) < 60; + } + } + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 50; + } + case S80: + { + return Rnd.get(100) < 70; + } + case S84: + case R: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case CrystalSuper: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 80; + } + case S80: + { + return Rnd.get(100) < 90; + } + default: + { + return true; + } + } + } + return true; + } + } + // Super stones have 100% so will end here. + // Patch notes do not have info about jewels chance so 100% for now, till l2wiki update, energy are not used. + return true; + } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index 6d03548432..3e6f5b8d13 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.model.Elementals; @@ -104,7 +103,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return; } - if (!item.isElementable()) + if (!Elementals.isElementableWithStone(item, stone.getItem().getId())) { client.sendPacket(SystemMessageId.ELEMENTAL_POWER_ENHANCER_USAGE_REQUIREMENT_IS_NOT_SUFFICIENT); player.removeRequest(request.getClass()); @@ -301,53 +300,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return -1; } - boolean success = false; - switch (stone.getItem().getCrystalType()) - { - case R: - { - success = Rnd.get(100) < 80; - break; - } - case R95: - case R99: - { - success = true; - break; - } - default: - { - switch (Elementals.getItemElemental(stone.getId())._type) - { - case Stone: - case Roughore: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_STONE; - break; - } - case Crystal: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL; - break; - } - case Jewel: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_JEWEL; - break; - } - case Energy: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_ENERGY; - break; - } - case GoD_Event: - { - success = true; - break; - } - } - } - } + boolean success = Elementals.isSuccess(item, stone.getId()); if (success) { diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java index 94009d7d9c..153c6fd16d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java @@ -51,7 +51,7 @@ public class ExChooseInventoryAttributeItem implements IClientOutgoingPacket // Register only items that can be put an attribute stone/crystal for (ItemInstance item : player.getInventory().getItems()) { - if (item.isElementable()) + if (Elementals.isElementableWithStone(item, stone.getId())) { _items.add(item.getObjectId()); } diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/items/36900-36999.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/items/36900-36999.xml index 68b41b9653..7ed63f4dcb 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/items/36900-36999.xml +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/items/36900-36999.xml @@ -843,44 +843,110 @@ - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/Elementals.java index 68d61edf1f..e9b115d509 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/Elementals.java @@ -19,6 +19,9 @@ package org.l2jmobius.gameserver.model; import java.util.HashMap; import java.util.Map; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; + public final class Elementals { private static final Map TABLE = new HashMap<>(); @@ -84,11 +87,11 @@ public final class Elementals public enum ElementalItemType { Stone(3), - Roughore(3), + StoneSuper(3), Crystal(6), + CrystalSuper(6), Jewel(9), - Energy(12), - GoD_Event(9); + Energy(12); public int _maxLevel; @@ -109,12 +112,12 @@ public final class Elementals divineStone(HOLY, 9551, ElementalItemType.Stone, 0), darkStone(DARK, 9550, ElementalItemType.Stone, 0), - fireRoughtore(FIRE, 10521, ElementalItemType.Roughore, 0), - waterRoughtore(WATER, 10522, ElementalItemType.Roughore, 0), - windRoughtore(WIND, 10524, ElementalItemType.Roughore, 0), - earthRoughtore(EARTH, 10523, ElementalItemType.Roughore, 0), - divineRoughtore(HOLY, 10526, ElementalItemType.Roughore, 0), - darkRoughtore(DARK, 10525, ElementalItemType.Roughore, 0), + fireRoughtore(FIRE, 10521, ElementalItemType.Stone, 0), + waterRoughtore(WATER, 10522, ElementalItemType.Stone, 0), + windRoughtore(WIND, 10524, ElementalItemType.Stone, 0), + earthRoughtore(EARTH, 10523, ElementalItemType.Stone, 0), + divineRoughtore(HOLY, 10526, ElementalItemType.Stone, 0), + darkRoughtore(DARK, 10525, ElementalItemType.Stone, 0), fireCrystal(FIRE, 9552, ElementalItemType.Crystal, 0), waterCrystal(WATER, 9553, ElementalItemType.Crystal, 0), @@ -130,7 +133,6 @@ public final class Elementals divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), windEnergy(WIND, 9567, ElementalItemType.Energy, 0), @@ -139,121 +141,121 @@ public final class Elementals darkEnergy(DARK, 9568, ElementalItemType.Energy, 0), // GoD+ Stones - GoD_22635(FIRE, 22635, ElementalItemType.GoD_Event, 0), - GoD_22636(WATER, 22636, ElementalItemType.GoD_Event, 0), - GoD_22637(EARTH, 22637, ElementalItemType.GoD_Event, 0), - GoD_22638(WIND, 22638, ElementalItemType.GoD_Event, 0), - GoD_22639(DARK, 22639, ElementalItemType.GoD_Event, 0), - GoD_22640(HOLY, 22640, ElementalItemType.GoD_Event, 0), - GoD_22919(FIRE, 22919, ElementalItemType.GoD_Event, 0), - GoD_22920(WATER, 22920, ElementalItemType.GoD_Event, 0), - GoD_22921(EARTH, 22921, ElementalItemType.GoD_Event, 0), - GoD_22922(WIND, 22922, ElementalItemType.GoD_Event, 0), - GoD_22923(DARK, 22923, ElementalItemType.GoD_Event, 0), - GoD_22924(HOLY, 22924, ElementalItemType.GoD_Event, 0), - GoD_33481(FIRE, 33481, ElementalItemType.GoD_Event, 0), - GoD_33482(WATER, 33482, ElementalItemType.GoD_Event, 0), - GoD_33483(EARTH, 33483, ElementalItemType.GoD_Event, 0), - GoD_33484(WIND, 33484, ElementalItemType.GoD_Event, 0), - GoD_33485(DARK, 33485, ElementalItemType.GoD_Event, 0), - GoD_33486(HOLY, 33486, ElementalItemType.GoD_Event, 0), - GoD_33863(FIRE, 33863, ElementalItemType.GoD_Event, 60), - GoD_33864(WATER, 33864, ElementalItemType.GoD_Event, 60), - GoD_33865(EARTH, 33865, ElementalItemType.GoD_Event, 60), - GoD_33866(WIND, 33866, ElementalItemType.GoD_Event, 60), - GoD_33867(DARK, 33867, ElementalItemType.GoD_Event, 60), - GoD_33868(HOLY, 33868, ElementalItemType.GoD_Event, 60), - GoD_33869(FIRE, 33869, ElementalItemType.GoD_Event, 150), - GoD_33870(WATER, 33870, ElementalItemType.GoD_Event, 150), - GoD_33871(EARTH, 33871, ElementalItemType.GoD_Event, 150), - GoD_33872(WIND, 33872, ElementalItemType.GoD_Event, 150), - GoD_33873(DARK, 33873, ElementalItemType.GoD_Event, 150), - GoD_33874(HOLY, 33874, ElementalItemType.GoD_Event, 150), - GoD_34661(FIRE, 34661, ElementalItemType.GoD_Event, 60), - GoD_34662(WATER, 34662, ElementalItemType.GoD_Event, 60), - GoD_34663(EARTH, 34663, ElementalItemType.GoD_Event, 60), - GoD_34664(WIND, 34664, ElementalItemType.GoD_Event, 60), - GoD_34665(DARK, 34665, ElementalItemType.GoD_Event, 60), - GoD_34666(HOLY, 34666, ElementalItemType.GoD_Event, 60), - GoD_34667(FIRE, 34667, ElementalItemType.GoD_Event, 150), - GoD_34668(WATER, 34668, ElementalItemType.GoD_Event, 150), - GoD_34669(EARTH, 34669, ElementalItemType.GoD_Event, 150), - GoD_34670(WIND, 34670, ElementalItemType.GoD_Event, 150), - GoD_34671(DARK, 34671, ElementalItemType.GoD_Event, 150), - GoD_34672(HOLY, 34672, ElementalItemType.GoD_Event, 150), - GoD_34790(FIRE, 34790, ElementalItemType.GoD_Event, 0), - GoD_34791(WATER, 34791, ElementalItemType.GoD_Event, 0), - GoD_34792(EARTH, 34792, ElementalItemType.GoD_Event, 0), - GoD_34793(WIND, 34793, ElementalItemType.GoD_Event, 0), - GoD_34794(DARK, 34794, ElementalItemType.GoD_Event, 0), - GoD_34795(HOLY, 34795, ElementalItemType.GoD_Event, 0), - GoD_35729(FIRE, 35729, ElementalItemType.GoD_Event, 60), - GoD_35730(WATER, 35730, ElementalItemType.GoD_Event, 60), - GoD_35731(EARTH, 35731, ElementalItemType.GoD_Event, 60), - GoD_35732(WIND, 35732, ElementalItemType.GoD_Event, 60), - GoD_35733(DARK, 35733, ElementalItemType.GoD_Event, 60), - GoD_35734(HOLY, 35734, ElementalItemType.GoD_Event, 60), - GoD_35735(FIRE, 35735, ElementalItemType.GoD_Event, 150), - GoD_35736(WATER, 35736, ElementalItemType.GoD_Event, 150), - GoD_35737(EARTH, 35737, ElementalItemType.GoD_Event, 150), - GoD_35738(WIND, 35738, ElementalItemType.GoD_Event, 150), - GoD_35739(DARK, 35739, ElementalItemType.GoD_Event, 150), - GoD_35740(HOLY, 35740, ElementalItemType.GoD_Event, 150), - GoD_36960(FIRE, 36960, ElementalItemType.GoD_Event, 60), - GoD_36961(WATER, 36961, ElementalItemType.GoD_Event, 60), - GoD_36962(EARTH, 36962, ElementalItemType.GoD_Event, 60), - GoD_36963(WIND, 36963, ElementalItemType.GoD_Event, 60), - GoD_36964(DARK, 36964, ElementalItemType.GoD_Event, 60), - GoD_36965(HOLY, 36965, ElementalItemType.GoD_Event, 60), - GoD_36966(FIRE, 36966, ElementalItemType.GoD_Event, 150), - GoD_36967(WATER, 36967, ElementalItemType.GoD_Event, 150), - GoD_36968(EARTH, 36968, ElementalItemType.GoD_Event, 150), - GoD_36969(WIND, 36969, ElementalItemType.GoD_Event, 150), - GoD_36970(DARK, 36970, ElementalItemType.GoD_Event, 150), - GoD_36971(HOLY, 36971, ElementalItemType.GoD_Event, 150), - GoD_37499(FIRE, 37499, ElementalItemType.GoD_Event, 0), - GoD_37500(WATER, 37500, ElementalItemType.GoD_Event, 0), - GoD_37501(EARTH, 37501, ElementalItemType.GoD_Event, 0), - GoD_37502(WIND, 37502, ElementalItemType.GoD_Event, 0), - GoD_37503(DARK, 37503, ElementalItemType.GoD_Event, 0), - GoD_37504(HOLY, 37504, ElementalItemType.GoD_Event, 0), + GoD_22635(FIRE, 22635, ElementalItemType.Stone, 0), + GoD_22636(WATER, 22636, ElementalItemType.Stone, 0), + GoD_22637(EARTH, 22637, ElementalItemType.Stone, 0), + GoD_22638(WIND, 22638, ElementalItemType.Stone, 0), + GoD_22639(DARK, 22639, ElementalItemType.Stone, 0), + GoD_22640(HOLY, 22640, ElementalItemType.Stone, 0), + GoD_22919(FIRE, 22919, ElementalItemType.Stone, 0), + GoD_22920(WATER, 22920, ElementalItemType.Stone, 0), + GoD_22921(EARTH, 22921, ElementalItemType.Stone, 0), + GoD_22922(WIND, 22922, ElementalItemType.Stone, 0), + GoD_22923(DARK, 22923, ElementalItemType.Stone, 0), + GoD_22924(HOLY, 22924, ElementalItemType.Stone, 0), + GoD_33481(FIRE, 33481, ElementalItemType.StoneSuper, 0), + GoD_33482(WATER, 33482, ElementalItemType.StoneSuper, 0), + GoD_33483(EARTH, 33483, ElementalItemType.StoneSuper, 0), + GoD_33484(WIND, 33484, ElementalItemType.StoneSuper, 0), + GoD_33485(DARK, 33485, ElementalItemType.StoneSuper, 0), + GoD_33486(HOLY, 33486, ElementalItemType.StoneSuper, 0), + GoD_33863(FIRE, 33863, ElementalItemType.StoneSuper, 60), + GoD_33864(WATER, 33864, ElementalItemType.StoneSuper, 60), + GoD_33865(EARTH, 33865, ElementalItemType.StoneSuper, 60), + GoD_33866(WIND, 33866, ElementalItemType.StoneSuper, 60), + GoD_33867(DARK, 33867, ElementalItemType.StoneSuper, 60), + GoD_33868(HOLY, 33868, ElementalItemType.StoneSuper, 60), + GoD_33869(FIRE, 33869, ElementalItemType.StoneSuper, 150), + GoD_33870(WATER, 33870, ElementalItemType.StoneSuper, 150), + GoD_33871(EARTH, 33871, ElementalItemType.StoneSuper, 150), + GoD_33872(WIND, 33872, ElementalItemType.StoneSuper, 150), + GoD_33873(DARK, 33873, ElementalItemType.StoneSuper, 150), + GoD_33874(HOLY, 33874, ElementalItemType.StoneSuper, 150), + GoD_34661(FIRE, 34661, ElementalItemType.StoneSuper, 60), + GoD_34662(WATER, 34662, ElementalItemType.StoneSuper, 60), + GoD_34663(EARTH, 34663, ElementalItemType.StoneSuper, 60), + GoD_34664(WIND, 34664, ElementalItemType.StoneSuper, 60), + GoD_34665(DARK, 34665, ElementalItemType.StoneSuper, 60), + GoD_34666(HOLY, 34666, ElementalItemType.StoneSuper, 60), + GoD_34667(FIRE, 34667, ElementalItemType.StoneSuper, 150), + GoD_34668(WATER, 34668, ElementalItemType.StoneSuper, 150), + GoD_34669(EARTH, 34669, ElementalItemType.StoneSuper, 150), + GoD_34670(WIND, 34670, ElementalItemType.StoneSuper, 150), + GoD_34671(DARK, 34671, ElementalItemType.StoneSuper, 150), + GoD_34672(HOLY, 34672, ElementalItemType.StoneSuper, 150), + GoD_34790(FIRE, 34790, ElementalItemType.Stone, 0), + GoD_34791(WATER, 34791, ElementalItemType.Stone, 0), + GoD_34792(EARTH, 34792, ElementalItemType.Stone, 0), + GoD_34793(WIND, 34793, ElementalItemType.Stone, 0), + GoD_34794(DARK, 34794, ElementalItemType.Stone, 0), + GoD_34795(HOLY, 34795, ElementalItemType.Stone, 0), + GoD_35729(FIRE, 35729, ElementalItemType.StoneSuper, 60), + GoD_35730(WATER, 35730, ElementalItemType.StoneSuper, 60), + GoD_35731(EARTH, 35731, ElementalItemType.StoneSuper, 60), + GoD_35732(WIND, 35732, ElementalItemType.StoneSuper, 60), + GoD_35733(DARK, 35733, ElementalItemType.StoneSuper, 60), + GoD_35734(HOLY, 35734, ElementalItemType.StoneSuper, 60), + GoD_35735(FIRE, 35735, ElementalItemType.StoneSuper, 150), + GoD_35736(WATER, 35736, ElementalItemType.StoneSuper, 150), + GoD_35737(EARTH, 35737, ElementalItemType.StoneSuper, 150), + GoD_35738(WIND, 35738, ElementalItemType.StoneSuper, 150), + GoD_35739(DARK, 35739, ElementalItemType.StoneSuper, 150), + GoD_35740(HOLY, 35740, ElementalItemType.StoneSuper, 150), + GoD_36960(FIRE, 36960, ElementalItemType.StoneSuper, 60), + GoD_36961(WATER, 36961, ElementalItemType.StoneSuper, 60), + GoD_36962(EARTH, 36962, ElementalItemType.StoneSuper, 60), + GoD_36963(WIND, 36963, ElementalItemType.StoneSuper, 60), + GoD_36964(DARK, 36964, ElementalItemType.StoneSuper, 60), + GoD_36965(HOLY, 36965, ElementalItemType.StoneSuper, 60), + GoD_36966(FIRE, 36966, ElementalItemType.StoneSuper, 150), + GoD_36967(WATER, 36967, ElementalItemType.StoneSuper, 150), + GoD_36968(EARTH, 36968, ElementalItemType.StoneSuper, 150), + GoD_36969(WIND, 36969, ElementalItemType.StoneSuper, 150), + GoD_36970(DARK, 36970, ElementalItemType.StoneSuper, 150), + GoD_36971(HOLY, 36971, ElementalItemType.StoneSuper, 150), + GoD_37499(FIRE, 37499, ElementalItemType.Stone, 0), + GoD_37500(WATER, 37500, ElementalItemType.Stone, 0), + GoD_37501(EARTH, 37501, ElementalItemType.Stone, 0), + GoD_37502(WIND, 37502, ElementalItemType.Stone, 0), + GoD_37503(DARK, 37503, ElementalItemType.Stone, 0), + GoD_37504(HOLY, 37504, ElementalItemType.Stone, 0), // GoD+ Crystals - GoD_22641(FIRE, 22641, ElementalItemType.GoD_Event, 0), - GoD_22642(WATER, 22642, ElementalItemType.GoD_Event, 0), - GoD_22643(EARTH, 22643, ElementalItemType.GoD_Event, 0), - GoD_22644(WIND, 22644, ElementalItemType.GoD_Event, 0), - GoD_22645(DARK, 22645, ElementalItemType.GoD_Event, 0), - GoD_22646(HOLY, 22646, ElementalItemType.GoD_Event, 0), - GoD_22925(FIRE, 22925, ElementalItemType.GoD_Event, 0), - GoD_22926(WATER, 22926, ElementalItemType.GoD_Event, 0), - GoD_22927(EARTH, 22927, ElementalItemType.GoD_Event, 0), - GoD_22928(WIND, 22928, ElementalItemType.GoD_Event, 0), - GoD_22929(DARK, 22929, ElementalItemType.GoD_Event, 0), - GoD_22930(HOLY, 22930, ElementalItemType.GoD_Event, 0), - GoD_33487(FIRE, 33487, ElementalItemType.GoD_Event, 0), - GoD_33488(WATER, 33488, ElementalItemType.GoD_Event, 0), - GoD_33489(EARTH, 33489, ElementalItemType.GoD_Event, 0), - GoD_33490(WIND, 33490, ElementalItemType.GoD_Event, 0), - GoD_33491(DARK, 33491, ElementalItemType.GoD_Event, 0), - GoD_33492(HOLY, 33492, ElementalItemType.GoD_Event, 0), - GoD_34796(FIRE, 34796, ElementalItemType.GoD_Event, 0), - GoD_34797(WATER, 34797, ElementalItemType.GoD_Event, 0), - GoD_34798(EARTH, 34798, ElementalItemType.GoD_Event, 0), - GoD_34799(WIND, 34799, ElementalItemType.GoD_Event, 0), - GoD_34800(DARK, 34800, ElementalItemType.GoD_Event, 0), - GoD_34801(HOLY, 34801, ElementalItemType.GoD_Event, 0), - GoD_36972(FIRE, 36972, ElementalItemType.GoD_Event, 0), - GoD_36973(WATER, 36973, ElementalItemType.GoD_Event, 0), - GoD_36974(EARTH, 36974, ElementalItemType.GoD_Event, 0), - GoD_36975(WIND, 36975, ElementalItemType.GoD_Event, 0), - GoD_36976(DARK, 36976, ElementalItemType.GoD_Event, 0), - GoD_36977(HOLY, 36977, ElementalItemType.GoD_Event, 0); + GoD_22641(FIRE, 22641, ElementalItemType.Crystal, 0), + GoD_22642(WATER, 22642, ElementalItemType.Crystal, 0), + GoD_22643(EARTH, 22643, ElementalItemType.Crystal, 0), + GoD_22644(WIND, 22644, ElementalItemType.Crystal, 0), + GoD_22645(DARK, 22645, ElementalItemType.Crystal, 0), + GoD_22646(HOLY, 22646, ElementalItemType.Crystal, 0), + GoD_22925(FIRE, 22925, ElementalItemType.Crystal, 0), + GoD_22926(WATER, 22926, ElementalItemType.Crystal, 0), + GoD_22927(EARTH, 22927, ElementalItemType.Crystal, 0), + GoD_22928(WIND, 22928, ElementalItemType.Crystal, 0), + GoD_22929(DARK, 22929, ElementalItemType.Crystal, 0), + GoD_22930(HOLY, 22930, ElementalItemType.Crystal, 0), + GoD_33487(FIRE, 33487, ElementalItemType.CrystalSuper, 0), + GoD_33488(WATER, 33488, ElementalItemType.CrystalSuper, 0), + GoD_33489(EARTH, 33489, ElementalItemType.CrystalSuper, 0), + GoD_33490(WIND, 33490, ElementalItemType.CrystalSuper, 0), + GoD_33491(DARK, 33491, ElementalItemType.CrystalSuper, 0), + GoD_33492(HOLY, 33492, ElementalItemType.CrystalSuper, 0), + GoD_34796(FIRE, 34796, ElementalItemType.Crystal, 0), + GoD_34797(WATER, 34797, ElementalItemType.Crystal, 0), + GoD_34798(EARTH, 34798, ElementalItemType.Crystal, 0), + GoD_34799(WIND, 34799, ElementalItemType.Crystal, 0), + GoD_34800(DARK, 34800, ElementalItemType.Crystal, 0), + GoD_34801(HOLY, 34801, ElementalItemType.Crystal, 0), + GoD_36972(FIRE, 36972, ElementalItemType.CrystalSuper, 0), + GoD_36973(WATER, 36973, ElementalItemType.CrystalSuper, 0), + GoD_36974(EARTH, 36974, ElementalItemType.CrystalSuper, 0), + GoD_36975(WIND, 36975, ElementalItemType.CrystalSuper, 0), + GoD_36976(DARK, 36976, ElementalItemType.CrystalSuper, 0), + GoD_36977(HOLY, 36977, ElementalItemType.CrystalSuper, 0); - public byte _element; - public int _itemId; - public ElementalItemType _type; - public int _fixedPower; + public final byte _element; + public final int _itemId; + public final ElementalItemType _type; + public final int _fixedPower; ElementalItems(byte element, int itemId, ElementalItemType type, int fixedPower) { @@ -288,4 +290,129 @@ public final class Elementals } return -1; } + + public static boolean isElementableWithStone(ItemInstance targetItem, int stoneId) + { + return targetItem.isElementable(); + } + + /* @formatter:off */ + // +-------+----------------+----------------+----------------+----------------+ + // | Grade | Stone | Crystal | Stone-Super | Crystal-Super | + // +-------+----------------+----------------+----------------+----------------+ + // | | Weapon | Armor | Weapon | Armor | Weapon | Armor | Weapon | Armor | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S | 50% | 60% | 30% | 50% | 100% | 100% | 80% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S80 | 50% | 80% | 40% | 70% | 100% | 100% | 90% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S84 | 50% | 80% | 50% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R | 50% | 100% | 60% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R95 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R99 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + /* @formatter:on */ + + public static boolean isSuccess(ItemInstance item, int stoneId) + { + switch (Elementals.getItemElemental(stoneId)._type) + { + case Stone: + { + if (item.isWeapon()) + { + return Rnd.get(100) < 50; + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 60; + } + case S80: + case S84: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case Crystal: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 30; + } + case S80: + { + return Rnd.get(100) < 40; + } + case S84: + { + return Rnd.get(100) < 50; + } + default: + { + return Rnd.get(100) < 60; + } + } + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 50; + } + case S80: + { + return Rnd.get(100) < 70; + } + case S84: + case R: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case CrystalSuper: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 80; + } + case S80: + { + return Rnd.get(100) < 90; + } + default: + { + return true; + } + } + } + return true; + } + } + // Super stones have 100% so will end here. + // Patch notes do not have info about jewels chance so 100% for now, till l2wiki update, energy are not used. + return true; + } } diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index 7595d68397..9ee14823a7 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.model.Elementals; @@ -112,7 +111,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return; } - if (!item.isElementable()) + if (!Elementals.isElementableWithStone(item, stone.getItem().getId())) { client.sendPacket(SystemMessageId.ELEMENTAL_POWER_ENHANCER_USAGE_REQUIREMENT_IS_NOT_SUFFICIENT); player.removeRequest(request.getClass()); @@ -309,53 +308,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return -1; } - boolean success = false; - switch (stone.getItem().getCrystalType()) - { - case R: - { - success = Rnd.get(100) < 80; - break; - } - case R95: - case R99: - { - success = true; - break; - } - default: - { - switch (Elementals.getItemElemental(stone.getId())._type) - { - case Stone: - case Roughore: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_STONE; - break; - } - case Crystal: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL; - break; - } - case Jewel: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_JEWEL; - break; - } - case Energy: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_ENERGY; - break; - } - case GoD_Event: - { - success = true; - break; - } - } - } - } + boolean success = Elementals.isSuccess(item, stone.getId()); if (success) { diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java index 94009d7d9c..153c6fd16d 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java @@ -51,7 +51,7 @@ public class ExChooseInventoryAttributeItem implements IClientOutgoingPacket // Register only items that can be put an attribute stone/crystal for (ItemInstance item : player.getInventory().getItems()) { - if (item.isElementable()) + if (Elementals.isElementableWithStone(item, stone.getId())) { _items.add(item.getObjectId()); } diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/items/36900-36999.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/items/36900-36999.xml index 50181942d3..19a66ab3be 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/items/36900-36999.xml +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/items/36900-36999.xml @@ -843,44 +843,110 @@ - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/Elementals.java index 68d61edf1f..e9b115d509 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/Elementals.java @@ -19,6 +19,9 @@ package org.l2jmobius.gameserver.model; import java.util.HashMap; import java.util.Map; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; + public final class Elementals { private static final Map TABLE = new HashMap<>(); @@ -84,11 +87,11 @@ public final class Elementals public enum ElementalItemType { Stone(3), - Roughore(3), + StoneSuper(3), Crystal(6), + CrystalSuper(6), Jewel(9), - Energy(12), - GoD_Event(9); + Energy(12); public int _maxLevel; @@ -109,12 +112,12 @@ public final class Elementals divineStone(HOLY, 9551, ElementalItemType.Stone, 0), darkStone(DARK, 9550, ElementalItemType.Stone, 0), - fireRoughtore(FIRE, 10521, ElementalItemType.Roughore, 0), - waterRoughtore(WATER, 10522, ElementalItemType.Roughore, 0), - windRoughtore(WIND, 10524, ElementalItemType.Roughore, 0), - earthRoughtore(EARTH, 10523, ElementalItemType.Roughore, 0), - divineRoughtore(HOLY, 10526, ElementalItemType.Roughore, 0), - darkRoughtore(DARK, 10525, ElementalItemType.Roughore, 0), + fireRoughtore(FIRE, 10521, ElementalItemType.Stone, 0), + waterRoughtore(WATER, 10522, ElementalItemType.Stone, 0), + windRoughtore(WIND, 10524, ElementalItemType.Stone, 0), + earthRoughtore(EARTH, 10523, ElementalItemType.Stone, 0), + divineRoughtore(HOLY, 10526, ElementalItemType.Stone, 0), + darkRoughtore(DARK, 10525, ElementalItemType.Stone, 0), fireCrystal(FIRE, 9552, ElementalItemType.Crystal, 0), waterCrystal(WATER, 9553, ElementalItemType.Crystal, 0), @@ -130,7 +133,6 @@ public final class Elementals divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), windEnergy(WIND, 9567, ElementalItemType.Energy, 0), @@ -139,121 +141,121 @@ public final class Elementals darkEnergy(DARK, 9568, ElementalItemType.Energy, 0), // GoD+ Stones - GoD_22635(FIRE, 22635, ElementalItemType.GoD_Event, 0), - GoD_22636(WATER, 22636, ElementalItemType.GoD_Event, 0), - GoD_22637(EARTH, 22637, ElementalItemType.GoD_Event, 0), - GoD_22638(WIND, 22638, ElementalItemType.GoD_Event, 0), - GoD_22639(DARK, 22639, ElementalItemType.GoD_Event, 0), - GoD_22640(HOLY, 22640, ElementalItemType.GoD_Event, 0), - GoD_22919(FIRE, 22919, ElementalItemType.GoD_Event, 0), - GoD_22920(WATER, 22920, ElementalItemType.GoD_Event, 0), - GoD_22921(EARTH, 22921, ElementalItemType.GoD_Event, 0), - GoD_22922(WIND, 22922, ElementalItemType.GoD_Event, 0), - GoD_22923(DARK, 22923, ElementalItemType.GoD_Event, 0), - GoD_22924(HOLY, 22924, ElementalItemType.GoD_Event, 0), - GoD_33481(FIRE, 33481, ElementalItemType.GoD_Event, 0), - GoD_33482(WATER, 33482, ElementalItemType.GoD_Event, 0), - GoD_33483(EARTH, 33483, ElementalItemType.GoD_Event, 0), - GoD_33484(WIND, 33484, ElementalItemType.GoD_Event, 0), - GoD_33485(DARK, 33485, ElementalItemType.GoD_Event, 0), - GoD_33486(HOLY, 33486, ElementalItemType.GoD_Event, 0), - GoD_33863(FIRE, 33863, ElementalItemType.GoD_Event, 60), - GoD_33864(WATER, 33864, ElementalItemType.GoD_Event, 60), - GoD_33865(EARTH, 33865, ElementalItemType.GoD_Event, 60), - GoD_33866(WIND, 33866, ElementalItemType.GoD_Event, 60), - GoD_33867(DARK, 33867, ElementalItemType.GoD_Event, 60), - GoD_33868(HOLY, 33868, ElementalItemType.GoD_Event, 60), - GoD_33869(FIRE, 33869, ElementalItemType.GoD_Event, 150), - GoD_33870(WATER, 33870, ElementalItemType.GoD_Event, 150), - GoD_33871(EARTH, 33871, ElementalItemType.GoD_Event, 150), - GoD_33872(WIND, 33872, ElementalItemType.GoD_Event, 150), - GoD_33873(DARK, 33873, ElementalItemType.GoD_Event, 150), - GoD_33874(HOLY, 33874, ElementalItemType.GoD_Event, 150), - GoD_34661(FIRE, 34661, ElementalItemType.GoD_Event, 60), - GoD_34662(WATER, 34662, ElementalItemType.GoD_Event, 60), - GoD_34663(EARTH, 34663, ElementalItemType.GoD_Event, 60), - GoD_34664(WIND, 34664, ElementalItemType.GoD_Event, 60), - GoD_34665(DARK, 34665, ElementalItemType.GoD_Event, 60), - GoD_34666(HOLY, 34666, ElementalItemType.GoD_Event, 60), - GoD_34667(FIRE, 34667, ElementalItemType.GoD_Event, 150), - GoD_34668(WATER, 34668, ElementalItemType.GoD_Event, 150), - GoD_34669(EARTH, 34669, ElementalItemType.GoD_Event, 150), - GoD_34670(WIND, 34670, ElementalItemType.GoD_Event, 150), - GoD_34671(DARK, 34671, ElementalItemType.GoD_Event, 150), - GoD_34672(HOLY, 34672, ElementalItemType.GoD_Event, 150), - GoD_34790(FIRE, 34790, ElementalItemType.GoD_Event, 0), - GoD_34791(WATER, 34791, ElementalItemType.GoD_Event, 0), - GoD_34792(EARTH, 34792, ElementalItemType.GoD_Event, 0), - GoD_34793(WIND, 34793, ElementalItemType.GoD_Event, 0), - GoD_34794(DARK, 34794, ElementalItemType.GoD_Event, 0), - GoD_34795(HOLY, 34795, ElementalItemType.GoD_Event, 0), - GoD_35729(FIRE, 35729, ElementalItemType.GoD_Event, 60), - GoD_35730(WATER, 35730, ElementalItemType.GoD_Event, 60), - GoD_35731(EARTH, 35731, ElementalItemType.GoD_Event, 60), - GoD_35732(WIND, 35732, ElementalItemType.GoD_Event, 60), - GoD_35733(DARK, 35733, ElementalItemType.GoD_Event, 60), - GoD_35734(HOLY, 35734, ElementalItemType.GoD_Event, 60), - GoD_35735(FIRE, 35735, ElementalItemType.GoD_Event, 150), - GoD_35736(WATER, 35736, ElementalItemType.GoD_Event, 150), - GoD_35737(EARTH, 35737, ElementalItemType.GoD_Event, 150), - GoD_35738(WIND, 35738, ElementalItemType.GoD_Event, 150), - GoD_35739(DARK, 35739, ElementalItemType.GoD_Event, 150), - GoD_35740(HOLY, 35740, ElementalItemType.GoD_Event, 150), - GoD_36960(FIRE, 36960, ElementalItemType.GoD_Event, 60), - GoD_36961(WATER, 36961, ElementalItemType.GoD_Event, 60), - GoD_36962(EARTH, 36962, ElementalItemType.GoD_Event, 60), - GoD_36963(WIND, 36963, ElementalItemType.GoD_Event, 60), - GoD_36964(DARK, 36964, ElementalItemType.GoD_Event, 60), - GoD_36965(HOLY, 36965, ElementalItemType.GoD_Event, 60), - GoD_36966(FIRE, 36966, ElementalItemType.GoD_Event, 150), - GoD_36967(WATER, 36967, ElementalItemType.GoD_Event, 150), - GoD_36968(EARTH, 36968, ElementalItemType.GoD_Event, 150), - GoD_36969(WIND, 36969, ElementalItemType.GoD_Event, 150), - GoD_36970(DARK, 36970, ElementalItemType.GoD_Event, 150), - GoD_36971(HOLY, 36971, ElementalItemType.GoD_Event, 150), - GoD_37499(FIRE, 37499, ElementalItemType.GoD_Event, 0), - GoD_37500(WATER, 37500, ElementalItemType.GoD_Event, 0), - GoD_37501(EARTH, 37501, ElementalItemType.GoD_Event, 0), - GoD_37502(WIND, 37502, ElementalItemType.GoD_Event, 0), - GoD_37503(DARK, 37503, ElementalItemType.GoD_Event, 0), - GoD_37504(HOLY, 37504, ElementalItemType.GoD_Event, 0), + GoD_22635(FIRE, 22635, ElementalItemType.Stone, 0), + GoD_22636(WATER, 22636, ElementalItemType.Stone, 0), + GoD_22637(EARTH, 22637, ElementalItemType.Stone, 0), + GoD_22638(WIND, 22638, ElementalItemType.Stone, 0), + GoD_22639(DARK, 22639, ElementalItemType.Stone, 0), + GoD_22640(HOLY, 22640, ElementalItemType.Stone, 0), + GoD_22919(FIRE, 22919, ElementalItemType.Stone, 0), + GoD_22920(WATER, 22920, ElementalItemType.Stone, 0), + GoD_22921(EARTH, 22921, ElementalItemType.Stone, 0), + GoD_22922(WIND, 22922, ElementalItemType.Stone, 0), + GoD_22923(DARK, 22923, ElementalItemType.Stone, 0), + GoD_22924(HOLY, 22924, ElementalItemType.Stone, 0), + GoD_33481(FIRE, 33481, ElementalItemType.StoneSuper, 0), + GoD_33482(WATER, 33482, ElementalItemType.StoneSuper, 0), + GoD_33483(EARTH, 33483, ElementalItemType.StoneSuper, 0), + GoD_33484(WIND, 33484, ElementalItemType.StoneSuper, 0), + GoD_33485(DARK, 33485, ElementalItemType.StoneSuper, 0), + GoD_33486(HOLY, 33486, ElementalItemType.StoneSuper, 0), + GoD_33863(FIRE, 33863, ElementalItemType.StoneSuper, 60), + GoD_33864(WATER, 33864, ElementalItemType.StoneSuper, 60), + GoD_33865(EARTH, 33865, ElementalItemType.StoneSuper, 60), + GoD_33866(WIND, 33866, ElementalItemType.StoneSuper, 60), + GoD_33867(DARK, 33867, ElementalItemType.StoneSuper, 60), + GoD_33868(HOLY, 33868, ElementalItemType.StoneSuper, 60), + GoD_33869(FIRE, 33869, ElementalItemType.StoneSuper, 150), + GoD_33870(WATER, 33870, ElementalItemType.StoneSuper, 150), + GoD_33871(EARTH, 33871, ElementalItemType.StoneSuper, 150), + GoD_33872(WIND, 33872, ElementalItemType.StoneSuper, 150), + GoD_33873(DARK, 33873, ElementalItemType.StoneSuper, 150), + GoD_33874(HOLY, 33874, ElementalItemType.StoneSuper, 150), + GoD_34661(FIRE, 34661, ElementalItemType.StoneSuper, 60), + GoD_34662(WATER, 34662, ElementalItemType.StoneSuper, 60), + GoD_34663(EARTH, 34663, ElementalItemType.StoneSuper, 60), + GoD_34664(WIND, 34664, ElementalItemType.StoneSuper, 60), + GoD_34665(DARK, 34665, ElementalItemType.StoneSuper, 60), + GoD_34666(HOLY, 34666, ElementalItemType.StoneSuper, 60), + GoD_34667(FIRE, 34667, ElementalItemType.StoneSuper, 150), + GoD_34668(WATER, 34668, ElementalItemType.StoneSuper, 150), + GoD_34669(EARTH, 34669, ElementalItemType.StoneSuper, 150), + GoD_34670(WIND, 34670, ElementalItemType.StoneSuper, 150), + GoD_34671(DARK, 34671, ElementalItemType.StoneSuper, 150), + GoD_34672(HOLY, 34672, ElementalItemType.StoneSuper, 150), + GoD_34790(FIRE, 34790, ElementalItemType.Stone, 0), + GoD_34791(WATER, 34791, ElementalItemType.Stone, 0), + GoD_34792(EARTH, 34792, ElementalItemType.Stone, 0), + GoD_34793(WIND, 34793, ElementalItemType.Stone, 0), + GoD_34794(DARK, 34794, ElementalItemType.Stone, 0), + GoD_34795(HOLY, 34795, ElementalItemType.Stone, 0), + GoD_35729(FIRE, 35729, ElementalItemType.StoneSuper, 60), + GoD_35730(WATER, 35730, ElementalItemType.StoneSuper, 60), + GoD_35731(EARTH, 35731, ElementalItemType.StoneSuper, 60), + GoD_35732(WIND, 35732, ElementalItemType.StoneSuper, 60), + GoD_35733(DARK, 35733, ElementalItemType.StoneSuper, 60), + GoD_35734(HOLY, 35734, ElementalItemType.StoneSuper, 60), + GoD_35735(FIRE, 35735, ElementalItemType.StoneSuper, 150), + GoD_35736(WATER, 35736, ElementalItemType.StoneSuper, 150), + GoD_35737(EARTH, 35737, ElementalItemType.StoneSuper, 150), + GoD_35738(WIND, 35738, ElementalItemType.StoneSuper, 150), + GoD_35739(DARK, 35739, ElementalItemType.StoneSuper, 150), + GoD_35740(HOLY, 35740, ElementalItemType.StoneSuper, 150), + GoD_36960(FIRE, 36960, ElementalItemType.StoneSuper, 60), + GoD_36961(WATER, 36961, ElementalItemType.StoneSuper, 60), + GoD_36962(EARTH, 36962, ElementalItemType.StoneSuper, 60), + GoD_36963(WIND, 36963, ElementalItemType.StoneSuper, 60), + GoD_36964(DARK, 36964, ElementalItemType.StoneSuper, 60), + GoD_36965(HOLY, 36965, ElementalItemType.StoneSuper, 60), + GoD_36966(FIRE, 36966, ElementalItemType.StoneSuper, 150), + GoD_36967(WATER, 36967, ElementalItemType.StoneSuper, 150), + GoD_36968(EARTH, 36968, ElementalItemType.StoneSuper, 150), + GoD_36969(WIND, 36969, ElementalItemType.StoneSuper, 150), + GoD_36970(DARK, 36970, ElementalItemType.StoneSuper, 150), + GoD_36971(HOLY, 36971, ElementalItemType.StoneSuper, 150), + GoD_37499(FIRE, 37499, ElementalItemType.Stone, 0), + GoD_37500(WATER, 37500, ElementalItemType.Stone, 0), + GoD_37501(EARTH, 37501, ElementalItemType.Stone, 0), + GoD_37502(WIND, 37502, ElementalItemType.Stone, 0), + GoD_37503(DARK, 37503, ElementalItemType.Stone, 0), + GoD_37504(HOLY, 37504, ElementalItemType.Stone, 0), // GoD+ Crystals - GoD_22641(FIRE, 22641, ElementalItemType.GoD_Event, 0), - GoD_22642(WATER, 22642, ElementalItemType.GoD_Event, 0), - GoD_22643(EARTH, 22643, ElementalItemType.GoD_Event, 0), - GoD_22644(WIND, 22644, ElementalItemType.GoD_Event, 0), - GoD_22645(DARK, 22645, ElementalItemType.GoD_Event, 0), - GoD_22646(HOLY, 22646, ElementalItemType.GoD_Event, 0), - GoD_22925(FIRE, 22925, ElementalItemType.GoD_Event, 0), - GoD_22926(WATER, 22926, ElementalItemType.GoD_Event, 0), - GoD_22927(EARTH, 22927, ElementalItemType.GoD_Event, 0), - GoD_22928(WIND, 22928, ElementalItemType.GoD_Event, 0), - GoD_22929(DARK, 22929, ElementalItemType.GoD_Event, 0), - GoD_22930(HOLY, 22930, ElementalItemType.GoD_Event, 0), - GoD_33487(FIRE, 33487, ElementalItemType.GoD_Event, 0), - GoD_33488(WATER, 33488, ElementalItemType.GoD_Event, 0), - GoD_33489(EARTH, 33489, ElementalItemType.GoD_Event, 0), - GoD_33490(WIND, 33490, ElementalItemType.GoD_Event, 0), - GoD_33491(DARK, 33491, ElementalItemType.GoD_Event, 0), - GoD_33492(HOLY, 33492, ElementalItemType.GoD_Event, 0), - GoD_34796(FIRE, 34796, ElementalItemType.GoD_Event, 0), - GoD_34797(WATER, 34797, ElementalItemType.GoD_Event, 0), - GoD_34798(EARTH, 34798, ElementalItemType.GoD_Event, 0), - GoD_34799(WIND, 34799, ElementalItemType.GoD_Event, 0), - GoD_34800(DARK, 34800, ElementalItemType.GoD_Event, 0), - GoD_34801(HOLY, 34801, ElementalItemType.GoD_Event, 0), - GoD_36972(FIRE, 36972, ElementalItemType.GoD_Event, 0), - GoD_36973(WATER, 36973, ElementalItemType.GoD_Event, 0), - GoD_36974(EARTH, 36974, ElementalItemType.GoD_Event, 0), - GoD_36975(WIND, 36975, ElementalItemType.GoD_Event, 0), - GoD_36976(DARK, 36976, ElementalItemType.GoD_Event, 0), - GoD_36977(HOLY, 36977, ElementalItemType.GoD_Event, 0); + GoD_22641(FIRE, 22641, ElementalItemType.Crystal, 0), + GoD_22642(WATER, 22642, ElementalItemType.Crystal, 0), + GoD_22643(EARTH, 22643, ElementalItemType.Crystal, 0), + GoD_22644(WIND, 22644, ElementalItemType.Crystal, 0), + GoD_22645(DARK, 22645, ElementalItemType.Crystal, 0), + GoD_22646(HOLY, 22646, ElementalItemType.Crystal, 0), + GoD_22925(FIRE, 22925, ElementalItemType.Crystal, 0), + GoD_22926(WATER, 22926, ElementalItemType.Crystal, 0), + GoD_22927(EARTH, 22927, ElementalItemType.Crystal, 0), + GoD_22928(WIND, 22928, ElementalItemType.Crystal, 0), + GoD_22929(DARK, 22929, ElementalItemType.Crystal, 0), + GoD_22930(HOLY, 22930, ElementalItemType.Crystal, 0), + GoD_33487(FIRE, 33487, ElementalItemType.CrystalSuper, 0), + GoD_33488(WATER, 33488, ElementalItemType.CrystalSuper, 0), + GoD_33489(EARTH, 33489, ElementalItemType.CrystalSuper, 0), + GoD_33490(WIND, 33490, ElementalItemType.CrystalSuper, 0), + GoD_33491(DARK, 33491, ElementalItemType.CrystalSuper, 0), + GoD_33492(HOLY, 33492, ElementalItemType.CrystalSuper, 0), + GoD_34796(FIRE, 34796, ElementalItemType.Crystal, 0), + GoD_34797(WATER, 34797, ElementalItemType.Crystal, 0), + GoD_34798(EARTH, 34798, ElementalItemType.Crystal, 0), + GoD_34799(WIND, 34799, ElementalItemType.Crystal, 0), + GoD_34800(DARK, 34800, ElementalItemType.Crystal, 0), + GoD_34801(HOLY, 34801, ElementalItemType.Crystal, 0), + GoD_36972(FIRE, 36972, ElementalItemType.CrystalSuper, 0), + GoD_36973(WATER, 36973, ElementalItemType.CrystalSuper, 0), + GoD_36974(EARTH, 36974, ElementalItemType.CrystalSuper, 0), + GoD_36975(WIND, 36975, ElementalItemType.CrystalSuper, 0), + GoD_36976(DARK, 36976, ElementalItemType.CrystalSuper, 0), + GoD_36977(HOLY, 36977, ElementalItemType.CrystalSuper, 0); - public byte _element; - public int _itemId; - public ElementalItemType _type; - public int _fixedPower; + public final byte _element; + public final int _itemId; + public final ElementalItemType _type; + public final int _fixedPower; ElementalItems(byte element, int itemId, ElementalItemType type, int fixedPower) { @@ -288,4 +290,129 @@ public final class Elementals } return -1; } + + public static boolean isElementableWithStone(ItemInstance targetItem, int stoneId) + { + return targetItem.isElementable(); + } + + /* @formatter:off */ + // +-------+----------------+----------------+----------------+----------------+ + // | Grade | Stone | Crystal | Stone-Super | Crystal-Super | + // +-------+----------------+----------------+----------------+----------------+ + // | | Weapon | Armor | Weapon | Armor | Weapon | Armor | Weapon | Armor | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S | 50% | 60% | 30% | 50% | 100% | 100% | 80% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S80 | 50% | 80% | 40% | 70% | 100% | 100% | 90% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S84 | 50% | 80% | 50% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R | 50% | 100% | 60% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R95 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R99 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + /* @formatter:on */ + + public static boolean isSuccess(ItemInstance item, int stoneId) + { + switch (Elementals.getItemElemental(stoneId)._type) + { + case Stone: + { + if (item.isWeapon()) + { + return Rnd.get(100) < 50; + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 60; + } + case S80: + case S84: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case Crystal: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 30; + } + case S80: + { + return Rnd.get(100) < 40; + } + case S84: + { + return Rnd.get(100) < 50; + } + default: + { + return Rnd.get(100) < 60; + } + } + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 50; + } + case S80: + { + return Rnd.get(100) < 70; + } + case S84: + case R: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case CrystalSuper: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 80; + } + case S80: + { + return Rnd.get(100) < 90; + } + default: + { + return true; + } + } + } + return true; + } + } + // Super stones have 100% so will end here. + // Patch notes do not have info about jewels chance so 100% for now, till l2wiki update, energy are not used. + return true; + } } diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index 7595d68397..9ee14823a7 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.model.Elementals; @@ -112,7 +111,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return; } - if (!item.isElementable()) + if (!Elementals.isElementableWithStone(item, stone.getItem().getId())) { client.sendPacket(SystemMessageId.ELEMENTAL_POWER_ENHANCER_USAGE_REQUIREMENT_IS_NOT_SUFFICIENT); player.removeRequest(request.getClass()); @@ -309,53 +308,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return -1; } - boolean success = false; - switch (stone.getItem().getCrystalType()) - { - case R: - { - success = Rnd.get(100) < 80; - break; - } - case R95: - case R99: - { - success = true; - break; - } - default: - { - switch (Elementals.getItemElemental(stone.getId())._type) - { - case Stone: - case Roughore: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_STONE; - break; - } - case Crystal: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL; - break; - } - case Jewel: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_JEWEL; - break; - } - case Energy: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_ENERGY; - break; - } - case GoD_Event: - { - success = true; - break; - } - } - } - } + boolean success = Elementals.isSuccess(item, stone.getId()); if (success) { diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java index 94009d7d9c..153c6fd16d 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java @@ -51,7 +51,7 @@ public class ExChooseInventoryAttributeItem implements IClientOutgoingPacket // Register only items that can be put an attribute stone/crystal for (ItemInstance item : player.getInventory().getItems()) { - if (item.isElementable()) + if (Elementals.isElementableWithStone(item, stone.getId())) { _items.add(item.getObjectId()); } diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/Elementals.java index 214c696831..6c818e7fc7 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/Elementals.java @@ -135,7 +135,6 @@ public final class Elementals divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), windEnergy(WIND, 9567, ElementalItemType.Energy, 0), diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Elementals.java index b6aacfc0a2..29d3583043 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Elementals.java @@ -19,6 +19,9 @@ package org.l2jmobius.gameserver.model; import java.util.HashMap; import java.util.Map; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; + public final class Elementals { private static final Map TABLE = new HashMap<>(); @@ -84,8 +87,9 @@ public final class Elementals public enum ElementalItemType { Stone(3), - Roughore(3), + StoneSuper(3), Crystal(6), + CrystalSuper(6), Jewel(9), Energy(12); @@ -99,51 +103,52 @@ public final class Elementals public enum ElementalItems { - fireStone(FIRE, 9546, ElementalItemType.Stone), - waterStone(WATER, 9547, ElementalItemType.Stone), - windStone(WIND, 9549, ElementalItemType.Stone), - earthStone(EARTH, 9548, ElementalItemType.Stone), - divineStone(HOLY, 9551, ElementalItemType.Stone), - darkStone(DARK, 9550, ElementalItemType.Stone), + fireStone(FIRE, 9546, ElementalItemType.Stone, 0), + waterStone(WATER, 9547, ElementalItemType.Stone, 0), + windStone(WIND, 9549, ElementalItemType.Stone, 0), + earthStone(EARTH, 9548, ElementalItemType.Stone, 0), + divineStone(HOLY, 9551, ElementalItemType.Stone, 0), + darkStone(DARK, 9550, ElementalItemType.Stone, 0), - fireRoughtore(FIRE, 10521, ElementalItemType.Roughore), - waterRoughtore(WATER, 10522, ElementalItemType.Roughore), - windRoughtore(WIND, 10524, ElementalItemType.Roughore), - earthRoughtore(EARTH, 10523, ElementalItemType.Roughore), - divineRoughtore(HOLY, 10526, ElementalItemType.Roughore), - darkRoughtore(DARK, 10525, ElementalItemType.Roughore), + fireRoughtore(FIRE, 10521, ElementalItemType.Stone, 0), + waterRoughtore(WATER, 10522, ElementalItemType.Stone, 0), + windRoughtore(WIND, 10524, ElementalItemType.Stone, 0), + earthRoughtore(EARTH, 10523, ElementalItemType.Stone, 0), + divineRoughtore(HOLY, 10526, ElementalItemType.Stone, 0), + darkRoughtore(DARK, 10525, ElementalItemType.Stone, 0), - fireCrystal(FIRE, 9552, ElementalItemType.Crystal), - waterCrystal(WATER, 9553, ElementalItemType.Crystal), - windCrystal(WIND, 9555, ElementalItemType.Crystal), - earthCrystal(EARTH, 9554, ElementalItemType.Crystal), - divineCrystal(HOLY, 9557, ElementalItemType.Crystal), - darkCrystal(DARK, 9556, ElementalItemType.Crystal), + fireCrystal(FIRE, 9552, ElementalItemType.Crystal, 0), + waterCrystal(WATER, 9553, ElementalItemType.Crystal, 0), + windCrystal(WIND, 9555, ElementalItemType.Crystal, 0), + earthCrystal(EARTH, 9554, ElementalItemType.Crystal, 0), + divineCrystal(HOLY, 9557, ElementalItemType.Crystal, 0), + darkCrystal(DARK, 9556, ElementalItemType.Crystal, 0), - fireJewel(FIRE, 9558, ElementalItemType.Jewel), - waterJewel(WATER, 9559, ElementalItemType.Jewel), - windJewel(WIND, 9561, ElementalItemType.Jewel), - earthJewel(EARTH, 9560, ElementalItemType.Jewel), - divineJewel(HOLY, 9563, ElementalItemType.Jewel), - darkJewel(DARK, 9562, ElementalItemType.Jewel), + fireJewel(FIRE, 9558, ElementalItemType.Jewel, 0), + waterJewel(WATER, 9559, ElementalItemType.Jewel, 0), + windJewel(WIND, 9561, ElementalItemType.Jewel, 0), + earthJewel(EARTH, 9560, ElementalItemType.Jewel, 0), + divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), + darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) - fireEnergy(FIRE, 9564, ElementalItemType.Energy), - waterEnergy(WATER, 9565, ElementalItemType.Energy), - windEnergy(WIND, 9567, ElementalItemType.Energy), - earthEnergy(EARTH, 9566, ElementalItemType.Energy), - divineEnergy(HOLY, 9569, ElementalItemType.Energy), - darkEnergy(DARK, 9568, ElementalItemType.Energy); + fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), + waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), + windEnergy(WIND, 9567, ElementalItemType.Energy, 0), + earthEnergy(EARTH, 9566, ElementalItemType.Energy, 0), + divineEnergy(HOLY, 9569, ElementalItemType.Energy, 0), + darkEnergy(DARK, 9568, ElementalItemType.Energy, 0); - public byte _element; - public int _itemId; - public ElementalItemType _type; + public final byte _element; + public final int _itemId; + public final ElementalItemType _type; + public final int _fixedPower; - ElementalItems(byte element, int itemId, ElementalItemType type) + ElementalItems(byte element, int itemId, ElementalItemType type, int fixedPower) { _element = element; _itemId = itemId; _type = type; + _fixedPower = fixedPower; } } @@ -171,4 +176,129 @@ public final class Elementals } return -1; } + + public static boolean isElementableWithStone(ItemInstance targetItem, int stoneId) + { + return targetItem.isElementable(); + } + + /* @formatter:off */ + // +-------+----------------+----------------+----------------+----------------+ + // | Grade | Stone | Crystal | Stone-Super | Crystal-Super | + // +-------+----------------+----------------+----------------+----------------+ + // | | Weapon | Armor | Weapon | Armor | Weapon | Armor | Weapon | Armor | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S | 50% | 60% | 30% | 50% | 100% | 100% | 80% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S80 | 50% | 80% | 40% | 70% | 100% | 100% | 90% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S84 | 50% | 80% | 50% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R | 50% | 100% | 60% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R95 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R99 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + /* @formatter:on */ + + public static boolean isSuccess(ItemInstance item, int stoneId) + { + switch (Elementals.getItemElemental(stoneId)._type) + { + case Stone: + { + if (item.isWeapon()) + { + return Rnd.get(100) < 50; + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 60; + } + case S80: + case S84: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case Crystal: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 30; + } + case S80: + { + return Rnd.get(100) < 40; + } + case S84: + { + return Rnd.get(100) < 50; + } + default: + { + return Rnd.get(100) < 60; + } + } + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 50; + } + case S80: + { + return Rnd.get(100) < 70; + } + case S84: + case R: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case CrystalSuper: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 80; + } + case S80: + { + return Rnd.get(100) < 90; + } + default: + { + return true; + } + } + } + return true; + } + } + // Super stones have 100% so will end here. + // Patch notes do not have info about jewels chance so 100% for now, till l2wiki update, energy are not used. + return true; + } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index b0bf5cfba5..3e6f5b8d13 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.model.Elementals; @@ -104,7 +103,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return; } - if (!item.isElementable()) + if (!Elementals.isElementableWithStone(item, stone.getItem().getId())) { client.sendPacket(SystemMessageId.ELEMENTAL_POWER_ENHANCER_USAGE_REQUIREMENT_IS_NOT_SUFFICIENT); player.removeRequest(request.getClass()); @@ -301,48 +300,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return -1; } - boolean success = false; - switch (stone.getItem().getCrystalType()) - { - case R: - { - success = Rnd.get(100) < 80; - break; - } - case R95: - case R99: - { - success = true; - break; - } - default: - { - switch (Elementals.getItemElemental(stone.getId())._type) - { - case Stone: - case Roughore: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_STONE; - break; - } - case Crystal: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL; - break; - } - case Jewel: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_JEWEL; - break; - } - case Energy: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_ENERGY; - break; - } - } - } - } + boolean success = Elementals.isSuccess(item, stone.getId()); if (success) { @@ -371,6 +329,10 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket { if (Elementals.getItemElement(stoneId) != -1) { + if (Elementals.getItemElemental(stoneId)._fixedPower > 0) + { + return Elementals.getItemElemental(stoneId)._fixedPower; + } if (item.isWeapon()) { if (oldValue == 0) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java index 94009d7d9c..153c6fd16d 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java @@ -51,7 +51,7 @@ public class ExChooseInventoryAttributeItem implements IClientOutgoingPacket // Register only items that can be put an attribute stone/crystal for (ItemInstance item : player.getInventory().getItems()) { - if (item.isElementable()) + if (Elementals.isElementableWithStone(item, stone.getId())) { _items.add(item.getObjectId()); } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/Elementals.java index b6aacfc0a2..29d3583043 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/Elementals.java @@ -19,6 +19,9 @@ package org.l2jmobius.gameserver.model; import java.util.HashMap; import java.util.Map; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; + public final class Elementals { private static final Map TABLE = new HashMap<>(); @@ -84,8 +87,9 @@ public final class Elementals public enum ElementalItemType { Stone(3), - Roughore(3), + StoneSuper(3), Crystal(6), + CrystalSuper(6), Jewel(9), Energy(12); @@ -99,51 +103,52 @@ public final class Elementals public enum ElementalItems { - fireStone(FIRE, 9546, ElementalItemType.Stone), - waterStone(WATER, 9547, ElementalItemType.Stone), - windStone(WIND, 9549, ElementalItemType.Stone), - earthStone(EARTH, 9548, ElementalItemType.Stone), - divineStone(HOLY, 9551, ElementalItemType.Stone), - darkStone(DARK, 9550, ElementalItemType.Stone), + fireStone(FIRE, 9546, ElementalItemType.Stone, 0), + waterStone(WATER, 9547, ElementalItemType.Stone, 0), + windStone(WIND, 9549, ElementalItemType.Stone, 0), + earthStone(EARTH, 9548, ElementalItemType.Stone, 0), + divineStone(HOLY, 9551, ElementalItemType.Stone, 0), + darkStone(DARK, 9550, ElementalItemType.Stone, 0), - fireRoughtore(FIRE, 10521, ElementalItemType.Roughore), - waterRoughtore(WATER, 10522, ElementalItemType.Roughore), - windRoughtore(WIND, 10524, ElementalItemType.Roughore), - earthRoughtore(EARTH, 10523, ElementalItemType.Roughore), - divineRoughtore(HOLY, 10526, ElementalItemType.Roughore), - darkRoughtore(DARK, 10525, ElementalItemType.Roughore), + fireRoughtore(FIRE, 10521, ElementalItemType.Stone, 0), + waterRoughtore(WATER, 10522, ElementalItemType.Stone, 0), + windRoughtore(WIND, 10524, ElementalItemType.Stone, 0), + earthRoughtore(EARTH, 10523, ElementalItemType.Stone, 0), + divineRoughtore(HOLY, 10526, ElementalItemType.Stone, 0), + darkRoughtore(DARK, 10525, ElementalItemType.Stone, 0), - fireCrystal(FIRE, 9552, ElementalItemType.Crystal), - waterCrystal(WATER, 9553, ElementalItemType.Crystal), - windCrystal(WIND, 9555, ElementalItemType.Crystal), - earthCrystal(EARTH, 9554, ElementalItemType.Crystal), - divineCrystal(HOLY, 9557, ElementalItemType.Crystal), - darkCrystal(DARK, 9556, ElementalItemType.Crystal), + fireCrystal(FIRE, 9552, ElementalItemType.Crystal, 0), + waterCrystal(WATER, 9553, ElementalItemType.Crystal, 0), + windCrystal(WIND, 9555, ElementalItemType.Crystal, 0), + earthCrystal(EARTH, 9554, ElementalItemType.Crystal, 0), + divineCrystal(HOLY, 9557, ElementalItemType.Crystal, 0), + darkCrystal(DARK, 9556, ElementalItemType.Crystal, 0), - fireJewel(FIRE, 9558, ElementalItemType.Jewel), - waterJewel(WATER, 9559, ElementalItemType.Jewel), - windJewel(WIND, 9561, ElementalItemType.Jewel), - earthJewel(EARTH, 9560, ElementalItemType.Jewel), - divineJewel(HOLY, 9563, ElementalItemType.Jewel), - darkJewel(DARK, 9562, ElementalItemType.Jewel), + fireJewel(FIRE, 9558, ElementalItemType.Jewel, 0), + waterJewel(WATER, 9559, ElementalItemType.Jewel, 0), + windJewel(WIND, 9561, ElementalItemType.Jewel, 0), + earthJewel(EARTH, 9560, ElementalItemType.Jewel, 0), + divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), + darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) - fireEnergy(FIRE, 9564, ElementalItemType.Energy), - waterEnergy(WATER, 9565, ElementalItemType.Energy), - windEnergy(WIND, 9567, ElementalItemType.Energy), - earthEnergy(EARTH, 9566, ElementalItemType.Energy), - divineEnergy(HOLY, 9569, ElementalItemType.Energy), - darkEnergy(DARK, 9568, ElementalItemType.Energy); + fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), + waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), + windEnergy(WIND, 9567, ElementalItemType.Energy, 0), + earthEnergy(EARTH, 9566, ElementalItemType.Energy, 0), + divineEnergy(HOLY, 9569, ElementalItemType.Energy, 0), + darkEnergy(DARK, 9568, ElementalItemType.Energy, 0); - public byte _element; - public int _itemId; - public ElementalItemType _type; + public final byte _element; + public final int _itemId; + public final ElementalItemType _type; + public final int _fixedPower; - ElementalItems(byte element, int itemId, ElementalItemType type) + ElementalItems(byte element, int itemId, ElementalItemType type, int fixedPower) { _element = element; _itemId = itemId; _type = type; + _fixedPower = fixedPower; } } @@ -171,4 +176,129 @@ public final class Elementals } return -1; } + + public static boolean isElementableWithStone(ItemInstance targetItem, int stoneId) + { + return targetItem.isElementable(); + } + + /* @formatter:off */ + // +-------+----------------+----------------+----------------+----------------+ + // | Grade | Stone | Crystal | Stone-Super | Crystal-Super | + // +-------+----------------+----------------+----------------+----------------+ + // | | Weapon | Armor | Weapon | Armor | Weapon | Armor | Weapon | Armor | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S | 50% | 60% | 30% | 50% | 100% | 100% | 80% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S80 | 50% | 80% | 40% | 70% | 100% | 100% | 90% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S84 | 50% | 80% | 50% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R | 50% | 100% | 60% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R95 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R99 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + /* @formatter:on */ + + public static boolean isSuccess(ItemInstance item, int stoneId) + { + switch (Elementals.getItemElemental(stoneId)._type) + { + case Stone: + { + if (item.isWeapon()) + { + return Rnd.get(100) < 50; + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 60; + } + case S80: + case S84: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case Crystal: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 30; + } + case S80: + { + return Rnd.get(100) < 40; + } + case S84: + { + return Rnd.get(100) < 50; + } + default: + { + return Rnd.get(100) < 60; + } + } + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 50; + } + case S80: + { + return Rnd.get(100) < 70; + } + case S84: + case R: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case CrystalSuper: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 80; + } + case S80: + { + return Rnd.get(100) < 90; + } + default: + { + return true; + } + } + } + return true; + } + } + // Super stones have 100% so will end here. + // Patch notes do not have info about jewels chance so 100% for now, till l2wiki update, energy are not used. + return true; + } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index b0bf5cfba5..3e6f5b8d13 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.model.Elementals; @@ -104,7 +103,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return; } - if (!item.isElementable()) + if (!Elementals.isElementableWithStone(item, stone.getItem().getId())) { client.sendPacket(SystemMessageId.ELEMENTAL_POWER_ENHANCER_USAGE_REQUIREMENT_IS_NOT_SUFFICIENT); player.removeRequest(request.getClass()); @@ -301,48 +300,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return -1; } - boolean success = false; - switch (stone.getItem().getCrystalType()) - { - case R: - { - success = Rnd.get(100) < 80; - break; - } - case R95: - case R99: - { - success = true; - break; - } - default: - { - switch (Elementals.getItemElemental(stone.getId())._type) - { - case Stone: - case Roughore: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_STONE; - break; - } - case Crystal: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL; - break; - } - case Jewel: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_JEWEL; - break; - } - case Energy: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_ENERGY; - break; - } - } - } - } + boolean success = Elementals.isSuccess(item, stone.getId()); if (success) { @@ -371,6 +329,10 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket { if (Elementals.getItemElement(stoneId) != -1) { + if (Elementals.getItemElemental(stoneId)._fixedPower > 0) + { + return Elementals.getItemElemental(stoneId)._fixedPower; + } if (item.isWeapon()) { if (oldValue == 0) diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java index 94009d7d9c..153c6fd16d 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java @@ -51,7 +51,7 @@ public class ExChooseInventoryAttributeItem implements IClientOutgoingPacket // Register only items that can be put an attribute stone/crystal for (ItemInstance item : player.getInventory().getItems()) { - if (item.isElementable()) + if (Elementals.isElementableWithStone(item, stone.getId())) { _items.add(item.getObjectId()); } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/Elementals.java index b6aacfc0a2..29d3583043 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/Elementals.java @@ -19,6 +19,9 @@ package org.l2jmobius.gameserver.model; import java.util.HashMap; import java.util.Map; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; + public final class Elementals { private static final Map TABLE = new HashMap<>(); @@ -84,8 +87,9 @@ public final class Elementals public enum ElementalItemType { Stone(3), - Roughore(3), + StoneSuper(3), Crystal(6), + CrystalSuper(6), Jewel(9), Energy(12); @@ -99,51 +103,52 @@ public final class Elementals public enum ElementalItems { - fireStone(FIRE, 9546, ElementalItemType.Stone), - waterStone(WATER, 9547, ElementalItemType.Stone), - windStone(WIND, 9549, ElementalItemType.Stone), - earthStone(EARTH, 9548, ElementalItemType.Stone), - divineStone(HOLY, 9551, ElementalItemType.Stone), - darkStone(DARK, 9550, ElementalItemType.Stone), + fireStone(FIRE, 9546, ElementalItemType.Stone, 0), + waterStone(WATER, 9547, ElementalItemType.Stone, 0), + windStone(WIND, 9549, ElementalItemType.Stone, 0), + earthStone(EARTH, 9548, ElementalItemType.Stone, 0), + divineStone(HOLY, 9551, ElementalItemType.Stone, 0), + darkStone(DARK, 9550, ElementalItemType.Stone, 0), - fireRoughtore(FIRE, 10521, ElementalItemType.Roughore), - waterRoughtore(WATER, 10522, ElementalItemType.Roughore), - windRoughtore(WIND, 10524, ElementalItemType.Roughore), - earthRoughtore(EARTH, 10523, ElementalItemType.Roughore), - divineRoughtore(HOLY, 10526, ElementalItemType.Roughore), - darkRoughtore(DARK, 10525, ElementalItemType.Roughore), + fireRoughtore(FIRE, 10521, ElementalItemType.Stone, 0), + waterRoughtore(WATER, 10522, ElementalItemType.Stone, 0), + windRoughtore(WIND, 10524, ElementalItemType.Stone, 0), + earthRoughtore(EARTH, 10523, ElementalItemType.Stone, 0), + divineRoughtore(HOLY, 10526, ElementalItemType.Stone, 0), + darkRoughtore(DARK, 10525, ElementalItemType.Stone, 0), - fireCrystal(FIRE, 9552, ElementalItemType.Crystal), - waterCrystal(WATER, 9553, ElementalItemType.Crystal), - windCrystal(WIND, 9555, ElementalItemType.Crystal), - earthCrystal(EARTH, 9554, ElementalItemType.Crystal), - divineCrystal(HOLY, 9557, ElementalItemType.Crystal), - darkCrystal(DARK, 9556, ElementalItemType.Crystal), + fireCrystal(FIRE, 9552, ElementalItemType.Crystal, 0), + waterCrystal(WATER, 9553, ElementalItemType.Crystal, 0), + windCrystal(WIND, 9555, ElementalItemType.Crystal, 0), + earthCrystal(EARTH, 9554, ElementalItemType.Crystal, 0), + divineCrystal(HOLY, 9557, ElementalItemType.Crystal, 0), + darkCrystal(DARK, 9556, ElementalItemType.Crystal, 0), - fireJewel(FIRE, 9558, ElementalItemType.Jewel), - waterJewel(WATER, 9559, ElementalItemType.Jewel), - windJewel(WIND, 9561, ElementalItemType.Jewel), - earthJewel(EARTH, 9560, ElementalItemType.Jewel), - divineJewel(HOLY, 9563, ElementalItemType.Jewel), - darkJewel(DARK, 9562, ElementalItemType.Jewel), + fireJewel(FIRE, 9558, ElementalItemType.Jewel, 0), + waterJewel(WATER, 9559, ElementalItemType.Jewel, 0), + windJewel(WIND, 9561, ElementalItemType.Jewel, 0), + earthJewel(EARTH, 9560, ElementalItemType.Jewel, 0), + divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), + darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) - fireEnergy(FIRE, 9564, ElementalItemType.Energy), - waterEnergy(WATER, 9565, ElementalItemType.Energy), - windEnergy(WIND, 9567, ElementalItemType.Energy), - earthEnergy(EARTH, 9566, ElementalItemType.Energy), - divineEnergy(HOLY, 9569, ElementalItemType.Energy), - darkEnergy(DARK, 9568, ElementalItemType.Energy); + fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), + waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), + windEnergy(WIND, 9567, ElementalItemType.Energy, 0), + earthEnergy(EARTH, 9566, ElementalItemType.Energy, 0), + divineEnergy(HOLY, 9569, ElementalItemType.Energy, 0), + darkEnergy(DARK, 9568, ElementalItemType.Energy, 0); - public byte _element; - public int _itemId; - public ElementalItemType _type; + public final byte _element; + public final int _itemId; + public final ElementalItemType _type; + public final int _fixedPower; - ElementalItems(byte element, int itemId, ElementalItemType type) + ElementalItems(byte element, int itemId, ElementalItemType type, int fixedPower) { _element = element; _itemId = itemId; _type = type; + _fixedPower = fixedPower; } } @@ -171,4 +176,129 @@ public final class Elementals } return -1; } + + public static boolean isElementableWithStone(ItemInstance targetItem, int stoneId) + { + return targetItem.isElementable(); + } + + /* @formatter:off */ + // +-------+----------------+----------------+----------------+----------------+ + // | Grade | Stone | Crystal | Stone-Super | Crystal-Super | + // +-------+----------------+----------------+----------------+----------------+ + // | | Weapon | Armor | Weapon | Armor | Weapon | Armor | Weapon | Armor | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S | 50% | 60% | 30% | 50% | 100% | 100% | 80% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S80 | 50% | 80% | 40% | 70% | 100% | 100% | 90% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S84 | 50% | 80% | 50% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R | 50% | 100% | 60% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R95 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R99 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + /* @formatter:on */ + + public static boolean isSuccess(ItemInstance item, int stoneId) + { + switch (Elementals.getItemElemental(stoneId)._type) + { + case Stone: + { + if (item.isWeapon()) + { + return Rnd.get(100) < 50; + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 60; + } + case S80: + case S84: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case Crystal: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 30; + } + case S80: + { + return Rnd.get(100) < 40; + } + case S84: + { + return Rnd.get(100) < 50; + } + default: + { + return Rnd.get(100) < 60; + } + } + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 50; + } + case S80: + { + return Rnd.get(100) < 70; + } + case S84: + case R: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case CrystalSuper: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 80; + } + case S80: + { + return Rnd.get(100) < 90; + } + default: + { + return true; + } + } + } + return true; + } + } + // Super stones have 100% so will end here. + // Patch notes do not have info about jewels chance so 100% for now, till l2wiki update, energy are not used. + return true; + } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index b0bf5cfba5..3e6f5b8d13 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.model.Elementals; @@ -104,7 +103,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return; } - if (!item.isElementable()) + if (!Elementals.isElementableWithStone(item, stone.getItem().getId())) { client.sendPacket(SystemMessageId.ELEMENTAL_POWER_ENHANCER_USAGE_REQUIREMENT_IS_NOT_SUFFICIENT); player.removeRequest(request.getClass()); @@ -301,48 +300,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return -1; } - boolean success = false; - switch (stone.getItem().getCrystalType()) - { - case R: - { - success = Rnd.get(100) < 80; - break; - } - case R95: - case R99: - { - success = true; - break; - } - default: - { - switch (Elementals.getItemElemental(stone.getId())._type) - { - case Stone: - case Roughore: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_STONE; - break; - } - case Crystal: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL; - break; - } - case Jewel: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_JEWEL; - break; - } - case Energy: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_ENERGY; - break; - } - } - } - } + boolean success = Elementals.isSuccess(item, stone.getId()); if (success) { @@ -371,6 +329,10 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket { if (Elementals.getItemElement(stoneId) != -1) { + if (Elementals.getItemElemental(stoneId)._fixedPower > 0) + { + return Elementals.getItemElemental(stoneId)._fixedPower; + } if (item.isWeapon()) { if (oldValue == 0) diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java index 94009d7d9c..153c6fd16d 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java @@ -51,7 +51,7 @@ public class ExChooseInventoryAttributeItem implements IClientOutgoingPacket // Register only items that can be put an attribute stone/crystal for (ItemInstance item : player.getInventory().getItems()) { - if (item.isElementable()) + if (Elementals.isElementableWithStone(item, stone.getId())) { _items.add(item.getObjectId()); } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/Elementals.java index b6aacfc0a2..29d3583043 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/Elementals.java @@ -19,6 +19,9 @@ package org.l2jmobius.gameserver.model; import java.util.HashMap; import java.util.Map; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; + public final class Elementals { private static final Map TABLE = new HashMap<>(); @@ -84,8 +87,9 @@ public final class Elementals public enum ElementalItemType { Stone(3), - Roughore(3), + StoneSuper(3), Crystal(6), + CrystalSuper(6), Jewel(9), Energy(12); @@ -99,51 +103,52 @@ public final class Elementals public enum ElementalItems { - fireStone(FIRE, 9546, ElementalItemType.Stone), - waterStone(WATER, 9547, ElementalItemType.Stone), - windStone(WIND, 9549, ElementalItemType.Stone), - earthStone(EARTH, 9548, ElementalItemType.Stone), - divineStone(HOLY, 9551, ElementalItemType.Stone), - darkStone(DARK, 9550, ElementalItemType.Stone), + fireStone(FIRE, 9546, ElementalItemType.Stone, 0), + waterStone(WATER, 9547, ElementalItemType.Stone, 0), + windStone(WIND, 9549, ElementalItemType.Stone, 0), + earthStone(EARTH, 9548, ElementalItemType.Stone, 0), + divineStone(HOLY, 9551, ElementalItemType.Stone, 0), + darkStone(DARK, 9550, ElementalItemType.Stone, 0), - fireRoughtore(FIRE, 10521, ElementalItemType.Roughore), - waterRoughtore(WATER, 10522, ElementalItemType.Roughore), - windRoughtore(WIND, 10524, ElementalItemType.Roughore), - earthRoughtore(EARTH, 10523, ElementalItemType.Roughore), - divineRoughtore(HOLY, 10526, ElementalItemType.Roughore), - darkRoughtore(DARK, 10525, ElementalItemType.Roughore), + fireRoughtore(FIRE, 10521, ElementalItemType.Stone, 0), + waterRoughtore(WATER, 10522, ElementalItemType.Stone, 0), + windRoughtore(WIND, 10524, ElementalItemType.Stone, 0), + earthRoughtore(EARTH, 10523, ElementalItemType.Stone, 0), + divineRoughtore(HOLY, 10526, ElementalItemType.Stone, 0), + darkRoughtore(DARK, 10525, ElementalItemType.Stone, 0), - fireCrystal(FIRE, 9552, ElementalItemType.Crystal), - waterCrystal(WATER, 9553, ElementalItemType.Crystal), - windCrystal(WIND, 9555, ElementalItemType.Crystal), - earthCrystal(EARTH, 9554, ElementalItemType.Crystal), - divineCrystal(HOLY, 9557, ElementalItemType.Crystal), - darkCrystal(DARK, 9556, ElementalItemType.Crystal), + fireCrystal(FIRE, 9552, ElementalItemType.Crystal, 0), + waterCrystal(WATER, 9553, ElementalItemType.Crystal, 0), + windCrystal(WIND, 9555, ElementalItemType.Crystal, 0), + earthCrystal(EARTH, 9554, ElementalItemType.Crystal, 0), + divineCrystal(HOLY, 9557, ElementalItemType.Crystal, 0), + darkCrystal(DARK, 9556, ElementalItemType.Crystal, 0), - fireJewel(FIRE, 9558, ElementalItemType.Jewel), - waterJewel(WATER, 9559, ElementalItemType.Jewel), - windJewel(WIND, 9561, ElementalItemType.Jewel), - earthJewel(EARTH, 9560, ElementalItemType.Jewel), - divineJewel(HOLY, 9563, ElementalItemType.Jewel), - darkJewel(DARK, 9562, ElementalItemType.Jewel), + fireJewel(FIRE, 9558, ElementalItemType.Jewel, 0), + waterJewel(WATER, 9559, ElementalItemType.Jewel, 0), + windJewel(WIND, 9561, ElementalItemType.Jewel, 0), + earthJewel(EARTH, 9560, ElementalItemType.Jewel, 0), + divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), + darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) - fireEnergy(FIRE, 9564, ElementalItemType.Energy), - waterEnergy(WATER, 9565, ElementalItemType.Energy), - windEnergy(WIND, 9567, ElementalItemType.Energy), - earthEnergy(EARTH, 9566, ElementalItemType.Energy), - divineEnergy(HOLY, 9569, ElementalItemType.Energy), - darkEnergy(DARK, 9568, ElementalItemType.Energy); + fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), + waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), + windEnergy(WIND, 9567, ElementalItemType.Energy, 0), + earthEnergy(EARTH, 9566, ElementalItemType.Energy, 0), + divineEnergy(HOLY, 9569, ElementalItemType.Energy, 0), + darkEnergy(DARK, 9568, ElementalItemType.Energy, 0); - public byte _element; - public int _itemId; - public ElementalItemType _type; + public final byte _element; + public final int _itemId; + public final ElementalItemType _type; + public final int _fixedPower; - ElementalItems(byte element, int itemId, ElementalItemType type) + ElementalItems(byte element, int itemId, ElementalItemType type, int fixedPower) { _element = element; _itemId = itemId; _type = type; + _fixedPower = fixedPower; } } @@ -171,4 +176,129 @@ public final class Elementals } return -1; } + + public static boolean isElementableWithStone(ItemInstance targetItem, int stoneId) + { + return targetItem.isElementable(); + } + + /* @formatter:off */ + // +-------+----------------+----------------+----------------+----------------+ + // | Grade | Stone | Crystal | Stone-Super | Crystal-Super | + // +-------+----------------+----------------+----------------+----------------+ + // | | Weapon | Armor | Weapon | Armor | Weapon | Armor | Weapon | Armor | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S | 50% | 60% | 30% | 50% | 100% | 100% | 80% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S80 | 50% | 80% | 40% | 70% | 100% | 100% | 90% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S84 | 50% | 80% | 50% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R | 50% | 100% | 60% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R95 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R99 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + /* @formatter:on */ + + public static boolean isSuccess(ItemInstance item, int stoneId) + { + switch (Elementals.getItemElemental(stoneId)._type) + { + case Stone: + { + if (item.isWeapon()) + { + return Rnd.get(100) < 50; + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 60; + } + case S80: + case S84: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case Crystal: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 30; + } + case S80: + { + return Rnd.get(100) < 40; + } + case S84: + { + return Rnd.get(100) < 50; + } + default: + { + return Rnd.get(100) < 60; + } + } + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 50; + } + case S80: + { + return Rnd.get(100) < 70; + } + case S84: + case R: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case CrystalSuper: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 80; + } + case S80: + { + return Rnd.get(100) < 90; + } + default: + { + return true; + } + } + } + return true; + } + } + // Super stones have 100% so will end here. + // Patch notes do not have info about jewels chance so 100% for now, till l2wiki update, energy are not used. + return true; + } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index b0bf5cfba5..3e6f5b8d13 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.model.Elementals; @@ -104,7 +103,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return; } - if (!item.isElementable()) + if (!Elementals.isElementableWithStone(item, stone.getItem().getId())) { client.sendPacket(SystemMessageId.ELEMENTAL_POWER_ENHANCER_USAGE_REQUIREMENT_IS_NOT_SUFFICIENT); player.removeRequest(request.getClass()); @@ -301,48 +300,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return -1; } - boolean success = false; - switch (stone.getItem().getCrystalType()) - { - case R: - { - success = Rnd.get(100) < 80; - break; - } - case R95: - case R99: - { - success = true; - break; - } - default: - { - switch (Elementals.getItemElemental(stone.getId())._type) - { - case Stone: - case Roughore: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_STONE; - break; - } - case Crystal: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL; - break; - } - case Jewel: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_JEWEL; - break; - } - case Energy: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_ENERGY; - break; - } - } - } - } + boolean success = Elementals.isSuccess(item, stone.getId()); if (success) { @@ -371,6 +329,10 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket { if (Elementals.getItemElement(stoneId) != -1) { + if (Elementals.getItemElemental(stoneId)._fixedPower > 0) + { + return Elementals.getItemElemental(stoneId)._fixedPower; + } if (item.isWeapon()) { if (oldValue == 0) diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java index 94009d7d9c..153c6fd16d 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java @@ -51,7 +51,7 @@ public class ExChooseInventoryAttributeItem implements IClientOutgoingPacket // Register only items that can be put an attribute stone/crystal for (ItemInstance item : player.getInventory().getItems()) { - if (item.isElementable()) + if (Elementals.isElementableWithStone(item, stone.getId())) { _items.add(item.getObjectId()); } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Elementals.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Elementals.java index b6aacfc0a2..29d3583043 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Elementals.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Elementals.java @@ -19,6 +19,9 @@ package org.l2jmobius.gameserver.model; import java.util.HashMap; import java.util.Map; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; + public final class Elementals { private static final Map TABLE = new HashMap<>(); @@ -84,8 +87,9 @@ public final class Elementals public enum ElementalItemType { Stone(3), - Roughore(3), + StoneSuper(3), Crystal(6), + CrystalSuper(6), Jewel(9), Energy(12); @@ -99,51 +103,52 @@ public final class Elementals public enum ElementalItems { - fireStone(FIRE, 9546, ElementalItemType.Stone), - waterStone(WATER, 9547, ElementalItemType.Stone), - windStone(WIND, 9549, ElementalItemType.Stone), - earthStone(EARTH, 9548, ElementalItemType.Stone), - divineStone(HOLY, 9551, ElementalItemType.Stone), - darkStone(DARK, 9550, ElementalItemType.Stone), + fireStone(FIRE, 9546, ElementalItemType.Stone, 0), + waterStone(WATER, 9547, ElementalItemType.Stone, 0), + windStone(WIND, 9549, ElementalItemType.Stone, 0), + earthStone(EARTH, 9548, ElementalItemType.Stone, 0), + divineStone(HOLY, 9551, ElementalItemType.Stone, 0), + darkStone(DARK, 9550, ElementalItemType.Stone, 0), - fireRoughtore(FIRE, 10521, ElementalItemType.Roughore), - waterRoughtore(WATER, 10522, ElementalItemType.Roughore), - windRoughtore(WIND, 10524, ElementalItemType.Roughore), - earthRoughtore(EARTH, 10523, ElementalItemType.Roughore), - divineRoughtore(HOLY, 10526, ElementalItemType.Roughore), - darkRoughtore(DARK, 10525, ElementalItemType.Roughore), + fireRoughtore(FIRE, 10521, ElementalItemType.Stone, 0), + waterRoughtore(WATER, 10522, ElementalItemType.Stone, 0), + windRoughtore(WIND, 10524, ElementalItemType.Stone, 0), + earthRoughtore(EARTH, 10523, ElementalItemType.Stone, 0), + divineRoughtore(HOLY, 10526, ElementalItemType.Stone, 0), + darkRoughtore(DARK, 10525, ElementalItemType.Stone, 0), - fireCrystal(FIRE, 9552, ElementalItemType.Crystal), - waterCrystal(WATER, 9553, ElementalItemType.Crystal), - windCrystal(WIND, 9555, ElementalItemType.Crystal), - earthCrystal(EARTH, 9554, ElementalItemType.Crystal), - divineCrystal(HOLY, 9557, ElementalItemType.Crystal), - darkCrystal(DARK, 9556, ElementalItemType.Crystal), + fireCrystal(FIRE, 9552, ElementalItemType.Crystal, 0), + waterCrystal(WATER, 9553, ElementalItemType.Crystal, 0), + windCrystal(WIND, 9555, ElementalItemType.Crystal, 0), + earthCrystal(EARTH, 9554, ElementalItemType.Crystal, 0), + divineCrystal(HOLY, 9557, ElementalItemType.Crystal, 0), + darkCrystal(DARK, 9556, ElementalItemType.Crystal, 0), - fireJewel(FIRE, 9558, ElementalItemType.Jewel), - waterJewel(WATER, 9559, ElementalItemType.Jewel), - windJewel(WIND, 9561, ElementalItemType.Jewel), - earthJewel(EARTH, 9560, ElementalItemType.Jewel), - divineJewel(HOLY, 9563, ElementalItemType.Jewel), - darkJewel(DARK, 9562, ElementalItemType.Jewel), + fireJewel(FIRE, 9558, ElementalItemType.Jewel, 0), + waterJewel(WATER, 9559, ElementalItemType.Jewel, 0), + windJewel(WIND, 9561, ElementalItemType.Jewel, 0), + earthJewel(EARTH, 9560, ElementalItemType.Jewel, 0), + divineJewel(HOLY, 9563, ElementalItemType.Jewel, 0), + darkJewel(DARK, 9562, ElementalItemType.Jewel, 0), - // not yet supported by client (Freya pts) - fireEnergy(FIRE, 9564, ElementalItemType.Energy), - waterEnergy(WATER, 9565, ElementalItemType.Energy), - windEnergy(WIND, 9567, ElementalItemType.Energy), - earthEnergy(EARTH, 9566, ElementalItemType.Energy), - divineEnergy(HOLY, 9569, ElementalItemType.Energy), - darkEnergy(DARK, 9568, ElementalItemType.Energy); + fireEnergy(FIRE, 9564, ElementalItemType.Energy, 0), + waterEnergy(WATER, 9565, ElementalItemType.Energy, 0), + windEnergy(WIND, 9567, ElementalItemType.Energy, 0), + earthEnergy(EARTH, 9566, ElementalItemType.Energy, 0), + divineEnergy(HOLY, 9569, ElementalItemType.Energy, 0), + darkEnergy(DARK, 9568, ElementalItemType.Energy, 0); - public byte _element; - public int _itemId; - public ElementalItemType _type; + public final byte _element; + public final int _itemId; + public final ElementalItemType _type; + public final int _fixedPower; - ElementalItems(byte element, int itemId, ElementalItemType type) + ElementalItems(byte element, int itemId, ElementalItemType type, int fixedPower) { _element = element; _itemId = itemId; _type = type; + _fixedPower = fixedPower; } } @@ -171,4 +176,129 @@ public final class Elementals } return -1; } + + public static boolean isElementableWithStone(ItemInstance targetItem, int stoneId) + { + return targetItem.isElementable(); + } + + /* @formatter:off */ + // +-------+----------------+----------------+----------------+----------------+ + // | Grade | Stone | Crystal | Stone-Super | Crystal-Super | + // +-------+----------------+----------------+----------------+----------------+ + // | | Weapon | Armor | Weapon | Armor | Weapon | Armor | Weapon | Armor | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S | 50% | 60% | 30% | 50% | 100% | 100% | 80% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S80 | 50% | 80% | 40% | 70% | 100% | 100% | 90% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | S84 | 50% | 80% | 50% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R | 50% | 100% | 60% | 80% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R95 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + // | R99 | 50% | 100% | 60% | 100% | 100% | 100% | 100% | 100% | + // +-------+--------+-------+--------+-------+--------+-------+--------+-------+ + /* @formatter:on */ + + public static boolean isSuccess(ItemInstance item, int stoneId) + { + switch (Elementals.getItemElemental(stoneId)._type) + { + case Stone: + { + if (item.isWeapon()) + { + return Rnd.get(100) < 50; + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 60; + } + case S80: + case S84: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case Crystal: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 30; + } + case S80: + { + return Rnd.get(100) < 40; + } + case S84: + { + return Rnd.get(100) < 50; + } + default: + { + return Rnd.get(100) < 60; + } + } + } + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 50; + } + case S80: + { + return Rnd.get(100) < 70; + } + case S84: + case R: + { + return Rnd.get(100) < 80; + } + default: + { + return true; + } + } + } + case CrystalSuper: + { + if (item.isWeapon()) + { + switch (item.getItem().getCrystalType()) + { + case S: + { + return Rnd.get(100) < 80; + } + case S80: + { + return Rnd.get(100) < 90; + } + default: + { + return true; + } + } + } + return true; + } + } + // Super stones have 100% so will end here. + // Patch notes do not have info about jewels chance so 100% for now, till l2wiki update, energy are not used. + return true; + } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index b0bf5cfba5..3e6f5b8d13 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.Config; import org.l2jmobius.commons.network.PacketReader; -import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.model.Elementals; @@ -104,7 +103,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return; } - if (!item.isElementable()) + if (!Elementals.isElementableWithStone(item, stone.getItem().getId())) { client.sendPacket(SystemMessageId.ELEMENTAL_POWER_ENHANCER_USAGE_REQUIREMENT_IS_NOT_SUFFICIENT); player.removeRequest(request.getClass()); @@ -301,48 +300,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket return -1; } - boolean success = false; - switch (stone.getItem().getCrystalType()) - { - case R: - { - success = Rnd.get(100) < 80; - break; - } - case R95: - case R99: - { - success = true; - break; - } - default: - { - switch (Elementals.getItemElemental(stone.getId())._type) - { - case Stone: - case Roughore: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_STONE; - break; - } - case Crystal: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_CRYSTAL; - break; - } - case Jewel: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_JEWEL; - break; - } - case Energy: - { - success = Rnd.get(100) < Config.ENCHANT_CHANCE_ELEMENT_ENERGY; - break; - } - } - } - } + boolean success = Elementals.isSuccess(item, stone.getId()); if (success) { @@ -371,6 +329,10 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket { if (Elementals.getItemElement(stoneId) != -1) { + if (Elementals.getItemElemental(stoneId)._fixedPower > 0) + { + return Elementals.getItemElemental(stoneId)._fixedPower; + } if (item.isWeapon()) { if (oldValue == 0) diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java index 94009d7d9c..153c6fd16d 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/serverpackets/ExChooseInventoryAttributeItem.java @@ -51,7 +51,7 @@ public class ExChooseInventoryAttributeItem implements IClientOutgoingPacket // Register only items that can be put an attribute stone/crystal for (ItemInstance item : player.getInventory().getItems()) { - if (item.isElementable()) + if (Elementals.isElementableWithStone(item, stone.getId())) { _items.add(item.getObjectId()); }