HorrorSlyer

Members
  • Content Count

    15
  • Joined

  • Last visited

  • Feedback

    N/A

Community Reputation

0 Neutral

About HorrorSlyer

  • Rank
    Vassal

Profile Information

  • Gender
    Male

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. hello guys im selling my strix-guard protection with lisence key with it because im closing my java-server i will sell it of course less then the original price the original price is : 150$ "just once" ( u can check it on their website ) *note* changing the server adress will cost 33 $ ( u can check it on their website ) === im selling the protection with price of 80$ === wich making anyone who want's to buy it a 37$ saving + the protection is the best in everything no bot or interface was able to work + === my E-mail : mohamedlaidreal2@gmail.com my skype : faycal769 ===
  2. hello i have on my soruce code a general enchant max limit but i want to make a custom enchant system by making normall , blessed and crystal scrolls by limits i didn't find any code to adabt to my source configs are easy also the other.ini but the problem in RequestEnchantItem.java settings here is what the file contains package l2f.gameserver.network.clientpackets; import java.util.List; import l2f.commons.dao.JdbcEntityState; import l2f.commons.util.Rnd; import l2f.gameserver.Config; import l2f.gameserver.data.xml.holder.EnchantItemHolder; import l2f.gameserver.model.Player; import l2f.gameserver.model.actor.instances.player.Bonus; import l2f.gameserver.model.instances.NpcInstance; import l2f.gameserver.model.instances.WarehouseInstance; import l2f.gameserver.model.items.ItemInstance; import l2f.gameserver.model.items.PcInventory; import l2f.gameserver.network.serverpackets.EnchantResult; import l2f.gameserver.network.serverpackets.InventoryUpdate; import l2f.gameserver.network.serverpackets.MagicSkillUse; import l2f.gameserver.network.serverpackets.SystemMessage; import l2f.gameserver.network.serverpackets.components.SystemMsg; import l2f.gameserver.templates.item.ItemTemplate; import l2f.gameserver.templates.item.support.EnchantScroll; import l2f.gameserver.utils.ItemFunctions; import l2f.gameserver.utils.Log; public class RequestEnchantItem extends L2GameClientPacket { private int _objectId, _catalystObjId; @Override protected void readImpl() { _objectId = readD(); _catalystObjId = readD(); } public static void showEnchantAnimation(Player player, int enchantLevel) { enchantLevel = Math.min(enchantLevel, 20); final int skillId = 23096 + enchantLevel; final MagicSkillUse msu = new MagicSkillUse(player, player, skillId, 1, 1, 1); player.broadcastPacket(msu); } @Override protected void runImpl() { Player player = getClient().getActiveChar(); if (player == null) return; player.isntAfk(); if (player.isActionsDisabled() || player.isBlocked()) { player.setEnchantScroll(null); player.sendActionFailed(); return; } if (player.isInTrade()) { player.setEnchantScroll(null); player.sendActionFailed(); return; } if (player.isSitting()) { player.setEnchantScroll(null); player.sendPacket(EnchantResult.CANCEL); player.sendMessage("You can't enchant while sitting."); player.sendActionFailed(); return; } if (player.isInStoreMode()) { player.setEnchantScroll(null); player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.YOU_CANNOT_ENCHANT_WHILE_OPERATING_A_PRIVATE_STORE_OR_PRIVATE_WORKSHOP); player.sendActionFailed(); return; } final List<NpcInstance> wh = player.getAroundNpc(200, 200); for (NpcInstance warehouse : wh) { if (warehouse instanceof WarehouseInstance) { player.sendMessage("You can't enchant near warehouse."); return; } } PcInventory inventory = player.getInventory(); inventory.writeLock(); try { ItemInstance item = inventory.getItemByObjectId(_objectId); ItemInstance catalyst = _catalystObjId > 0 ? inventory.getItemByObjectId(_catalystObjId) : null; ItemInstance scroll = player.getEnchantScroll(); if (item == null || scroll == null) { player.sendActionFailed(); return; } EnchantScroll enchantScroll = EnchantItemHolder.getInstance().getEnchantScroll(scroll.getItemId()); if (enchantScroll == null) { doEnchantOld(player, item, scroll, catalyst); return; } if (enchantScroll.getMaxEnchant() != -1 && item.getEnchantLevel() >= enchantScroll.getMaxEnchant()) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.INAPPROPRIATE_ENCHANT_CONDITIONS); player.sendActionFailed(); return; } if (enchantScroll.getItems().size() > 0) { if (!enchantScroll.getItems().contains(item.getItemId())) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL); player.sendActionFailed(); return; } } else { if (!enchantScroll.getGrades().contains(item.getCrystalType())) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL); player.sendActionFailed(); return; } } if (!item.canBeEnchanted(false)) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.INAPPROPRIATE_ENCHANT_CONDITIONS); player.sendActionFailed(); return; } if (!inventory.destroyItem(scroll, 1L, "EnchantingItem") || catalyst != null && !inventory.destroyItem(catalyst, 1L, "EnchantingItem")) { player.sendPacket(EnchantResult.CANCEL); player.sendActionFailed(); return; } boolean equipped = false; if (equipped = item.isEquipped()) inventory.unEquipItem(item); int safeEnchantLevel = item.getTemplate().getBodyPart() == ItemTemplate.SLOT_FULL_ARMOR ? 4 : 3; int chance = enchantScroll.getChance(); if (item.getEnchantLevel() < safeEnchantLevel) chance = 100; // Olf's T-Shirt Custom Enchant Rates if(Config.OLF_TSHIRT_CUSTOM_ENABLED && item.getItemId() == 21580 && (enchantScroll.getItemId() == 21581 || enchantScroll.getItemId() == 21582)) { chance = (item.getEnchantLevel() >= Config.ENCHANT_OLF_TSHIRT_CHANCES.size()) ? 10 : Config.ENCHANT_OLF_TSHIRT_CHANCES.get(item.getEnchantLevel()); // if item enchant lvl is more than +10 than chance is 10 } if (Rnd.chance(chance)) { boolean isBlessedScroll = ItemFunctions.isBlessedEnchantScroll(enchantScroll.getItemId()); boolean isCrystalScroll = ItemFunctions.isCrystallEnchantScroll(enchantScroll.getItemId()); // success if (isBlessedScroll) player.getCounters().enchantBlessedSucceeded++; else if (!isBlessedScroll && !isCrystalScroll) player.getCounters().enchantNormalSucceeded++; item.setEnchantLevel(item.getEnchantLevel() + 1); Log.LogAddItem(player, "EnchantSuccess", item, 1L); item.setJdbcState(JdbcEntityState.UPDATED); item.update(); if (equipped) inventory.equipItem(item); if (item.getEnchantLevel() > player.getCounters().highestEnchant) player.getCounters().highestEnchant = item.getEnchantLevel(); player.sendPacket(new InventoryUpdate().addModifiedItem(item)); player.sendPacket(EnchantResult.SUCESS); if (enchantScroll.isHasVisualEffect() && item.getEnchantLevel() > 3) { showEnchantAnimation(player, item.getEnchantLevel()); } // Alexander - Add a enchant succesful to the stats // if (chance < 100) // player.addPlayerStats(Ranking.STAT_TOP_ENCHANTS_SUCCEED); } else { switch (enchantScroll.getResultType()) { case CRYSTALS: if (item.isEquipped()) player.sendDisarmMessage(item); if (!inventory.destroyItem(item, 1L, "EnchantFail")) { player.sendActionFailed(); return; } int crystalId = item.getCrystalType().cry; if (crystalId > 0 && item.getTemplate().getCrystalCount() > 0) { int crystalAmount = (int) (item.getTemplate().getCrystalCount() * 0.87); if (item.getEnchantLevel() > 3) crystalAmount += item.getTemplate().getCrystalCount() * 0.25 * (item.getEnchantLevel() - 3); if (crystalAmount < 1) crystalAmount = 1; player.sendPacket(new EnchantResult(1, crystalId, crystalAmount)); ItemFunctions.addItem(player, crystalId, crystalAmount, true, "EnchantFailCrystals"); } else player.sendPacket(EnchantResult.FAILED_NO_CRYSTALS); if (enchantScroll.isHasVisualEffect()) { showEnchantAnimation(player, 0); } break; case DROP_ENCHANT: item.setEnchantLevel(0); item.setJdbcState(JdbcEntityState.UPDATED); item.update(); if (equipped) inventory.equipItem(item); player.sendPacket(new InventoryUpdate().addModifiedItem(item)); player.sendPacket(SystemMsg.THE_BLESSED_ENCHANT_FAILED); player.sendPacket(EnchantResult.BLESSED_FAILED); showEnchantAnimation(player, 0); break; case NOTHING: player.sendPacket(EnchantResult.ANCIENT_FAILED); showEnchantAnimation(player, 0); break; } // Alexander - Add a failed enchant to the stats // if (chance < 100) // player.addPlayerStats(Ranking.STAT_TOP_ENCHANTS_FAILED); } } finally { inventory.writeUnlock(); player.setEnchantScroll(null); player.updateStats(); } } private static void doEnchantOld(Player player, ItemInstance item, ItemInstance scroll, ItemInstance catalyst) { PcInventory inventory = player.getInventory(); if (!ItemFunctions.checkCatalyst(item, catalyst)) catalyst = null; if (!item.canBeEnchanted(true)) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.INAPPROPRIATE_ENCHANT_CONDITIONS); player.sendActionFailed(); return; } int crystalId = ItemFunctions.getEnchantCrystalId(item, scroll, catalyst); if (crystalId == -1) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL); player.sendActionFailed(); return; } int scrollId = scroll.getItemId(); if (scrollId == 13540 && item.getItemId() != 13539) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL); player.sendActionFailed(); return; } // ольф 21580(21581/21582) if ((scrollId == 21581 || scrollId == 21582) && item.getItemId() != 21580) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL); player.sendActionFailed(); return; } // ольф 21580(21581/21582) if ((scrollId != 21581 || scrollId != 21582) && item.getItemId() == 21580) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL); player.sendActionFailed(); return; } if (ItemFunctions.isDestructionWpnEnchantScroll(scrollId) && item.getEnchantLevel() >= 15 || ItemFunctions.isDestructionArmEnchantScroll(scrollId) && item.getEnchantLevel() >= 6) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL); player.sendActionFailed(); return; } int itemType = item.getTemplate().getType2(); boolean fail = false; switch (item.getItemId()) { case 13539: if (item.getEnchantLevel() >= Config.ENCHANT_MAX_MASTER_YOGI_STAFF) fail = true; break; case 21580: if (item.getEnchantLevel() < 9) fail = false; else fail = true; break; default: { if (itemType == ItemTemplate.TYPE2_WEAPON) { if (Config.ENCHANT_MAX_WEAPON > 0 && item.getEnchantLevel() >= Config.ENCHANT_MAX_WEAPON) fail = true; } else if (itemType == ItemTemplate.TYPE2_SHIELD_ARMOR) { if (Config.ENCHANT_MAX_ARMOR > 0 && item.getEnchantLevel() >= Config.ENCHANT_MAX_ARMOR) fail = true; } else if (itemType == ItemTemplate.TYPE2_ACCESSORY) { if (Config.ENCHANT_MAX_JEWELRY > 0 && item.getEnchantLevel() >= Config.ENCHANT_MAX_JEWELRY) fail = true; } else fail = true; } break; } if (!inventory.destroyItem(scroll, 1L, "Enchanting") || catalyst != null && !inventory.destroyItem(catalyst, 1L, "Enchanting")) { player.sendPacket(EnchantResult.CANCEL); player.sendActionFailed(); return; } if (fail) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.INAPPROPRIATE_ENCHANT_CONDITIONS); player.sendActionFailed(); return; } int safeEnchantLevel = item.getTemplate().getBodyPart() == ItemTemplate.SLOT_FULL_ARMOR ? Config.SAFE_ENCHANT_FULL_BODY : Config.SAFE_ENCHANT_COMMON; double chance; if (item.getEnchantLevel() < safeEnchantLevel) chance = 100; else if (itemType == ItemTemplate.TYPE2_WEAPON) { if (Config.USE_ALT_ENCHANT) { if (ItemFunctions.isCrystallEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_WEAPON_FIGHT_CRYSTAL.size() ? Config.ENCHANT_WEAPON_FIGHT_CRYSTAL.get(Config.ENCHANT_WEAPON_FIGHT_CRYSTAL.size() - 1) : Config.ENCHANT_WEAPON_FIGHT_CRYSTAL.get(item.getEnchantLevel()); else if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_WEAPON_FIGHT_BLESSED.size() ? Config.ENCHANT_WEAPON_FIGHT_BLESSED.get(Config.ENCHANT_WEAPON_FIGHT_BLESSED.size() - 1) : Config.ENCHANT_WEAPON_FIGHT_BLESSED.get(item.getEnchantLevel()); else chance = item.getEnchantLevel() > Config.ENCHANT_WEAPON_FIGHT.size() ? Config.ENCHANT_WEAPON_FIGHT.get(Config.ENCHANT_WEAPON_FIGHT.size() - 1) : Config.ENCHANT_WEAPON_FIGHT.get(item.getEnchantLevel()); } else if ((Config.SERVICES_RATE_TYPE != Bonus.NO_BONUS && player.getNetConnection().getBonus() > 0) && Config.USE_ALT_ENCHANT_PA) { if (ItemFunctions.isCrystallEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_WEAPON_FIGHT_CRYSTAL_PA.size() ? Config.ENCHANT_WEAPON_FIGHT_CRYSTAL_PA.get(Config.ENCHANT_WEAPON_FIGHT_CRYSTAL_PA.size() - 1) : Config.ENCHANT_WEAPON_FIGHT_CRYSTAL_PA.get(item.getEnchantLevel()); else if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_WEAPON_FIGHT_BLESSED_PA.size() ? Config.ENCHANT_WEAPON_FIGHT_BLESSED_PA.get(Config.ENCHANT_WEAPON_FIGHT_BLESSED_PA.size() - 1) : Config.ENCHANT_WEAPON_FIGHT_BLESSED_PA.get(item.getEnchantLevel()); else chance = item.getEnchantLevel() > Config.ENCHANT_WEAPON_FIGHT_PA.size() ? Config.ENCHANT_WEAPON_FIGHT_PA.get(Config.ENCHANT_WEAPON_FIGHT_PA.size() - 1) : Config.ENCHANT_WEAPON_FIGHT_PA.get(item.getEnchantLevel()); } else if (Config.SERVICES_RATE_TYPE != Bonus.NO_BONUS && player.getNetConnection().getBonus() > 0) { if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = Config.ENCHANT_CHANCE_WEAPON_BLESS_PA; else chance = ItemFunctions.isCrystallEnchantScroll(scrollId) ? Config.ENCHANT_CHANCE_CRYSTAL_WEAPON_PA : Config.ENCHANT_CHANCE_WEAPON_PA; } else if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = Config.ENCHANT_CHANCE_WEAPON_BLESS; else chance = ItemFunctions.isCrystallEnchantScroll(scrollId) ? Config.ENCHANT_CHANCE_CRYSTAL_WEAPON : Config.ENCHANT_CHANCE_WEAPON; } else if (itemType == ItemTemplate.TYPE2_SHIELD_ARMOR) if (Config.USE_ALT_ENCHANT) { if (ItemFunctions.isCrystallEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR_CRYSTAL.size() ? Config.ENCHANT_ARMOR_CRYSTAL.get(Config.ENCHANT_ARMOR_CRYSTAL.size() - 1) : Config.ENCHANT_ARMOR_CRYSTAL.get(item.getEnchantLevel()); else if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR_BLESSED.size() ? Config.ENCHANT_ARMOR_BLESSED.get(Config.ENCHANT_ARMOR_BLESSED.size() - 1) : Config.ENCHANT_ARMOR_BLESSED.get(item.getEnchantLevel()); else chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR.size() ? Config.ENCHANT_ARMOR.get(Config.ENCHANT_ARMOR.size() - 1) : Config.ENCHANT_ARMOR.get(item.getEnchantLevel()); } else if ((Config.SERVICES_RATE_TYPE != Bonus.NO_BONUS && player.getNetConnection().getBonus() > 0) && Config.USE_ALT_ENCHANT_PA) { if (ItemFunctions.isCrystallEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR_CRYSTAL_PA.size() ? Config.ENCHANT_ARMOR_CRYSTAL_PA.get(Config.ENCHANT_ARMOR_CRYSTAL_PA.size() - 1) : Config.ENCHANT_ARMOR_CRYSTAL_PA.get(item.getEnchantLevel()); else if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR_BLESSED_PA.size() ? Config.ENCHANT_ARMOR_BLESSED_PA.get(Config.ENCHANT_ARMOR_BLESSED_PA.size() - 1) : Config.ENCHANT_ARMOR_BLESSED_PA.get(item.getEnchantLevel()); else chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR_PA.size() ? Config.ENCHANT_ARMOR_PA.get(Config.ENCHANT_ARMOR_PA.size() - 1) : Config.ENCHANT_ARMOR_PA.get(item.getEnchantLevel()); } else if (Config.SERVICES_RATE_TYPE != Bonus.NO_BONUS && player.getNetConnection().getBonus() > 0) { if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = Config.ENCHANT_CHANCE_ARMOR_BLESS_PA; else chance = ItemFunctions.isCrystallEnchantScroll(scrollId) ? Config.ENCHANT_CHANCE_CRYSTAL_ARMOR_PA : Config.ENCHANT_CHANCE_ARMOR_PA; } else if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = Config.ENCHANT_CHANCE_ARMOR_BLESS; else chance = ItemFunctions.isCrystallEnchantScroll(scrollId) ? Config.ENCHANT_CHANCE_CRYSTAL_ARMOR : Config.ENCHANT_CHANCE_ARMOR; else if (itemType == ItemTemplate.TYPE2_ACCESSORY) if (Config.USE_ALT_ENCHANT) { if (ItemFunctions.isCrystallEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL.size() ? Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL.get(Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL.size() - 1) : Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL.get(item.getEnchantLevel()); else if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR_JEWELRY_BLESSED.size() ? Config.ENCHANT_ARMOR_JEWELRY_BLESSED.get(Config.ENCHANT_ARMOR_JEWELRY_BLESSED.size() - 1) : Config.ENCHANT_ARMOR_JEWELRY_BLESSED.get(item.getEnchantLevel()); else chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR_JEWELRY.size() ? Config.ENCHANT_ARMOR_JEWELRY.get(Config.ENCHANT_ARMOR_JEWELRY.size() - 1) : Config.ENCHANT_ARMOR_JEWELRY.get(item.getEnchantLevel()); } else if ((Config.SERVICES_RATE_TYPE != Bonus.NO_BONUS && player.getNetConnection().getBonus() > 0) && Config.USE_ALT_ENCHANT_PA) { if (ItemFunctions.isCrystallEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL_PA.size() ? Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL_PA.get(Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL_PA.size() - 1) : Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL_PA.get(item.getEnchantLevel()); else if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR_JEWELRY_BLESSED_PA.size() ? Config.ENCHANT_ARMOR_JEWELRY_BLESSED_PA.get(Config.ENCHANT_ARMOR_JEWELRY_BLESSED_PA.size() - 1) : Config.ENCHANT_ARMOR_JEWELRY_BLESSED_PA.get(item.getEnchantLevel()); else chance = item.getEnchantLevel() > Config.ENCHANT_ARMOR_JEWELRY_PA.size() ? Config.ENCHANT_ARMOR_JEWELRY_PA.get(Config.ENCHANT_ARMOR_JEWELRY_PA.size() - 1) : Config.ENCHANT_ARMOR_JEWELRY_PA.get(item.getEnchantLevel()); } else if (Config.SERVICES_RATE_TYPE != Bonus.NO_BONUS && player.getNetConnection().getBonus() > 0) { if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = Config.ENCHANT_CHANCE_ACCESSORY_BLESS_PA; else chance = ItemFunctions.isCrystallEnchantScroll(scrollId) ? Config.ENCHANT_CHANCE_CRYSTAL_ACCESSORY_PA : Config.ENCHANT_CHANCE_ACCESSORY_PA; } else if (ItemFunctions.isBlessedEnchantScroll(scrollId)) chance = Config.ENCHANT_CHANCE_ACCESSORY_BLESS; else chance = ItemFunctions.isCrystallEnchantScroll(scrollId) ? Config.ENCHANT_CHANCE_CRYSTAL_ACCESSORY : Config.ENCHANT_CHANCE_ACCESSORY; else { player.sendPacket(EnchantResult.CANCEL); player.sendActionFailed(); return; } if (ItemFunctions.isDivineEnchantScroll(scrollId)) // Item Mall divine chance = 100; else if (ItemFunctions.isItemMallEnchantScroll(scrollId)) // Item Mall normal/ancient chance += 10; if (catalyst != null) chance += ItemFunctions.getCatalystPower(catalyst.getItemId()); if (scrollId == 13540) chance = item.getEnchantLevel() < Config.SAFE_ENCHANT_MASTER_YOGI_STAFF ? 100 : Config.ENCHANT_CHANCE_MASTER_YOGI_STAFF; else if (scrollId == 21581 || scrollId == 21582) { if (item.getEnchantLevel() < 9) chance = item.getEnchantLevel() < 3 ? 100 : Config.ENCHANT_CHANCE_CRYSTAL_ARMOR_OLF; else chance = 0; } boolean equipped = false; if (equipped = item.isEquipped()) inventory.unEquipItem(item); boolean isBlessedScroll = ItemFunctions.isBlessedEnchantScroll(scrollId); boolean isCrystalScroll = ItemFunctions.isCrystallEnchantScroll(scrollId); if (Rnd.chance(chance)) { if (isBlessedScroll) player.getCounters().enchantBlessedSucceeded++; else if (!isBlessedScroll && !isCrystalScroll) player.getCounters().enchantNormalSucceeded++; item.setEnchantLevel(item.getEnchantLevel() + 1); item.setJdbcState(JdbcEntityState.UPDATED); item.update(); if (equipped) inventory.equipItem(item); player.sendPacket(new InventoryUpdate().addModifiedItem(item)); player.sendPacket(EnchantResult.SUCESS); Log.LogAddItem(player, "EnchantSuccess", item, 1L); if (scrollId == 13540 && item.getEnchantLevel() > 3 || Config.SHOW_ENCHANT_EFFECT_RESULT) { showEnchantAnimation(player, item.getEnchantLevel()); } } else if (ItemFunctions.isBlessedEnchantScroll(scrollId)) { item.setEnchantLevel(Config.SAFE_ENCHANT_LVL); item.setJdbcState(JdbcEntityState.UPDATED); item.update(); if (equipped) inventory.equipItem(item); player.sendPacket(new InventoryUpdate().addModifiedItem(item)); player.sendPacket(SystemMsg.THE_BLESSED_ENCHANT_FAILED); player.sendPacket(EnchantResult.BLESSED_FAILED); showEnchantAnimation(player, 0); Log.LogAddItem(player, "EnchantBlessedFail", item, 1L); } else if (ItemFunctions.isAncientEnchantScroll(scrollId) || ItemFunctions.isDestructionWpnEnchantScroll(scrollId) || ItemFunctions.isDestructionArmEnchantScroll(scrollId)) { player.sendPacket(EnchantResult.ANCIENT_FAILED); Log.LogAddItem(player, "EnchantDestructionFail", item, 1L); } else { if (item.isEquipped()) player.sendDisarmMessage(item); if (!inventory.destroyItem(item, 1L, "EnchantFail")) { player.sendPacket(new SystemMessage(SystemMessage.THE_ENCHANTMENT_HAS_FAILED_YOUR_S1_HAS_BEEN_CRYSTALLIZED).addItemName(item.getItemId())); showEnchantAnimation(player, 0); player.sendActionFailed(); return; } if (crystalId > 0 && item.getTemplate().getCrystalCount() > 0) { int crystalAmount = (int) (item.getTemplate().getCrystalCount() * 0.87); if (item.getEnchantLevel() > 3) crystalAmount += item.getTemplate().getCrystalCount() * 0.25 * (item.getEnchantLevel() - 3); if (crystalAmount < 1) crystalAmount = 1; player.sendPacket(new EnchantResult(1, crystalId, crystalAmount)); ItemFunctions.addItem(player, crystalId, crystalAmount, true, "EnchantFailCrystals"); } else player.sendPacket(EnchantResult.FAILED_NO_CRYSTALS); if (scrollId == 13540 || Config.SHOW_ENCHANT_EFFECT_RESULT) { showEnchantAnimation(player, 0); } } } }
  3. hello guys i was trying to add a feature to count mobs to my captcha system from like two months but i did not succed package l2f.gameserver.handler.voicecommands.impl.BotReport; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import l2f.gameserver.Config; import l2f.commons.util.Rnd; import l2f.gameserver.data.htm.HtmCache; import l2f.gameserver.model.Player; import l2f.gameserver.network.serverpackets.NpcHtmlMessage; import l2f.gameserver.network.serverpackets.PledgeCrest; import l2f.gameserver.vote.DDSConverter; /** * Class that handles Generating and Sending Captcha Image to the Player */ public class Captcha { private static final char[] CAPTCHA_TEXT_POSSIBILITIES = {'A','B','C','D','E','F','G','H','K','L','M','P','R','S','T','U','W','X','Y','Z'}; private static final int CAPTCHA_WORD_LENGTH = 5; private static final int CAPTCHA_MIN_ID = 1; private static final int CAPTCHA_MAX_ID = 1; /** * Generation new Captcha ID * Generation random Captcha Text * Generating BufferedImage * Sending BufferedImage as PledgeCrest to the Target * Sending HTML Window with Captcha to the player * @param target that will receive image and html Window * @return Captcha Text that player will try to write on Text Box */ public static String sendCaptcha(Player target) { int captchaId = generateRandomCaptchaId(); char[] captchaText = generateCaptchaText(); BufferedImage image = generateCaptcha(captchaText); PledgeCrest packet = new PledgeCrest(captchaId, DDSConverter.convertToDDS(image).array()); target.sendPacket(packet); sendCaptchaWindow(target, captchaId); return String.valueOf(captchaText); } /** * Getting data/html-en/captcha.htm HTML * Replacing %captchaId% and %time% * Sending it as HTML window * @param target Player that will receive html * @param captchaId ID of the image to replace */ private static void sendCaptchaWindow(Player target, int captchaId) { String text = HtmCache.getInstance().getNotNull("captcha.htm", target); text = text.replace("%captchaId%", String.valueOf(captchaId)); text = text.replace("%time%", String.valueOf(Config.CAPTCHA_ANSWER_SECONDS)); NpcHtmlMessage msg = new NpcHtmlMessage(0); msg.setHtml(text); target.sendPacket(msg); } private static char[] generateCaptchaText() { char[] text = new char[5]; for (int i = 0; i < CAPTCHA_WORD_LENGTH; i++) text[i] = CAPTCHA_TEXT_POSSIBILITIES[Rnd.get(CAPTCHA_TEXT_POSSIBILITIES.length)]; return text; } private static int generateRandomCaptchaId() { return Rnd.get(CAPTCHA_MIN_ID, CAPTCHA_MAX_ID); } private static BufferedImage generateCaptcha(char[] text) { Color textColor = new Color(38, 213, 30); Color circleColor = new Color(73, 100, 151); Font textFont = new Font("comic sans ms", Font.BOLD, 24); int charsToPrint = 5; int width = 256; int height = 64; int circlesToDraw = 8; float horizMargin = 20.0f; double rotationRange = 0.7; // this is radians BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D) bufferedImage.getGraphics(); //Draw an oval g.setColor(new Color(30,31,31)); g.fillRect(0, 0, width, height); g.setColor(circleColor); for ( int i = 0; i < circlesToDraw; i++ ) { int circleRadius = (int) (Math.random() * height / 2.0); int circleX = (int) (Math.random() * width - circleRadius); int circleY = (int) (Math.random() * height - circleRadius); g.drawOval(circleX, circleY, circleRadius * 2, circleRadius * 2); } g.setColor(textColor); g.setFont(textFont); FontMetrics fontMetrics = g.getFontMetrics(); int maxAdvance = fontMetrics.getMaxAdvance(); int fontHeight = fontMetrics.getHeight(); float spaceForLetters = -horizMargin * 2.0F + width; float spacePerChar = spaceForLetters / (charsToPrint - 1.0f); for ( int i = 0; i < charsToPrint; i++ ) { char characterToShow = text[i]; // this is a separate canvas used for the character so that // we can rotate it independently int charWidth = fontMetrics.charWidth(characterToShow); int charDim = Math.max(maxAdvance, fontHeight); int halfCharDim = charDim / 2; BufferedImage charImage = new BufferedImage(charDim, charDim, BufferedImage.TYPE_INT_ARGB); Graphics2D charGraphics = charImage.createGraphics(); charGraphics.translate(halfCharDim, halfCharDim); double angle = (Math.random() - 0.5) * rotationRange; charGraphics.transform(AffineTransform.getRotateInstance(angle)); charGraphics.translate(-halfCharDim,-halfCharDim); charGraphics.setColor(textColor); charGraphics.setFont(textFont); int charX = (int) (0.5 * charDim - 0.5 * charWidth); charGraphics.drawString(String.valueOf(characterToShow), charX, (charDim - fontMetrics.getAscent()) / 2 + fontMetrics.getAscent()); float x = horizMargin + spacePerChar * i - charDim / 2.0f; int y = (height - charDim) / 2; g.drawImage(charImage, (int) x, y, charDim, charDim, null, null); charGraphics.dispose(); } g.dispose(); return bufferedImage; } } my goal is to add those lines in the code public void onDeath(Creature actor, Creature killer) { if(Config.ENABLE_CAPTCHA && actor.isMonster() && killer != null && killer != actor && killer.isPlayer()) { Player player = killer.getPlayer(); String customHtm = HtmCache.getInstance().getNotNull("mods/Captcha/ShowCaptchaWindow.htm", player); // +1 to mobcounter addKilledMob(player); boolean doCaptcha = CaptchaImage.getKilledMobs(player.getObjectId()) >= Rnd.get(Config.CAPTCHA_MIN_MONSTERS, Config.CAPTCHA_MAX_MONSTERS) && getCaptchaRequests(player) <= 0; // random monster number. all i manage to do i just adding the lines in the config.java
  4. hello is there anyway to make a command is auto ( like the captcha report command in all of l2mythras/l2ava/l2age sources) thank's !
  5. hello guys i tried knowing what is causing captcha not working but i have no clue here in config.java //Captcha public static boolean CAPTCHA_ALLOW; public static long CAPTCHA_ANSWER_SECONDS; public static long CAPTCHA_JAIL_SECONDS; public static long CAPTCHA_TIME_BETWEEN_TESTED_SECONDS; public static long CAPTCHA_TIME_BETWEEN_REPORTS_SECONDS; public static int CAPTCHA_MIN_LEVEL; public static int CAPTCHA_COUNT; public static String[] CAPTCHA_PUNISHMENT; public static boolean EVENT_RANDOM_TASK; public static long EVENT_RANDOM_TIME; ========================================== //Captcha CAPTCHA_ALLOW = otherSettings.getProperty("AllowCaptcha", true); CAPTCHA_ANSWER_SECONDS = otherSettings.getProperty("CaptchaAnswerTime", 15L); CAPTCHA_JAIL_SECONDS = otherSettings.getProperty("CaptchaJailTime", 1800L); CAPTCHA_TIME_BETWEEN_TESTED_SECONDS = otherSettings.getProperty("CaptchaDelayBetweenCaptchas", 1800L); CAPTCHA_TIME_BETWEEN_REPORTS_SECONDS = otherSettings.getProperty("CaptchaReportDelay", 7200); CAPTCHA_MIN_LEVEL = otherSettings.getProperty("CaptchaMinLevel", 40); CAPTCHA_COUNT = otherSettings.getProperty("CaptchaCount", 2); CAPTCHA_PUNISHMENT = otherSettings.getProperty("CaptchaPunishment", new String[] { "JAIL:90", "JAIL:350", "JAIL:900", "BAN:-100" }); ========================================== captcha.java : package l2f.gameserver.handler.voicecommands.impl.BotReport; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import l2f.gameserver.Config; import l2f.commons.util.Rnd; import l2f.gameserver.data.htm.HtmCache; import l2f.gameserver.model.Player; import l2f.gameserver.network.serverpackets.NpcHtmlMessage; import l2f.gameserver.network.serverpackets.PledgeCrest; import l2f.gameserver.vote.DDSConverter; /** * Class that handles Generating and Sending Captcha Image to the Player */ public class Captcha { private static final char[] CAPTCHA_TEXT_POSSIBILITIES = {'A','B','C','D','E','F','G','H','K','L','M','P','R','S','T','U','W','X','Y','Z'}; private static final int CAPTCHA_WORD_LENGTH = 5; private static final int CAPTCHA_MIN_ID = 1900000000; private static final int CAPTCHA_MAX_ID = 2000000000; /** * Generation new Captcha ID * Generation random Captcha Text * Generating BufferedImage * Sending BufferedImage as PledgeCrest to the Target * Sending HTML Window with Captcha to the player * @param target that will receive image and html Window * @return Captcha Text that player will try to write on Text Box */ public static String sendCaptcha(Player target) { int captchaId = generateRandomCaptchaId(); char[] captchaText = generateCaptchaText(); BufferedImage image = generateCaptcha(captchaText); PledgeCrest packet = new PledgeCrest(captchaId, DDSConverter.convertToDDS(image).array()); target.sendPacket(packet); sendCaptchaWindow(target, captchaId); return String.valueOf(captchaText); } /** * Getting data/html-en/captcha.htm HTML * Replacing %captchaId% and %time% * Sending it as HTML window * @param target Player that will receive html * @param captchaId ID of the image to replace */ private static void sendCaptchaWindow(Player target, int captchaId) { String text = HtmCache.getInstance().getNotNull("captcha.htm", target); text = text.replace("%captchaId%", String.valueOf(captchaId)); text = text.replace("%time%", String.valueOf(Config.CAPTCHA_ANSWER_SECONDS)); NpcHtmlMessage msg = new NpcHtmlMessage(0); msg.setHtml(text); target.sendPacket(msg); } private static char[] generateCaptchaText() { char[] text = new char[5]; for (int i = 0; i < CAPTCHA_WORD_LENGTH; i++) text[i] = CAPTCHA_TEXT_POSSIBILITIES[Rnd.get(CAPTCHA_TEXT_POSSIBILITIES.length)]; return text; } private static int generateRandomCaptchaId() { return Rnd.get(CAPTCHA_MIN_ID, CAPTCHA_MAX_ID); } private static BufferedImage generateCaptcha(char[] text) { Color textColor = new Color(38, 213, 30); Color circleColor = new Color(73, 100, 151); Font textFont = new Font("comic sans ms", Font.BOLD, 24); int charsToPrint = 5; int width = 256; int height = 64; int circlesToDraw = 8; float horizMargin = 20.0f; double rotationRange = 0.7; // this is radians BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D) bufferedImage.getGraphics(); //Draw an oval g.setColor(new Color(30,31,31)); g.fillRect(0, 0, width, height); g.setColor(circleColor); for ( int i = 0; i < circlesToDraw; i++ ) { int circleRadius = (int) (Math.random() * height / 2.0); int circleX = (int) (Math.random() * width - circleRadius); int circleY = (int) (Math.random() * height - circleRadius); g.drawOval(circleX, circleY, circleRadius * 2, circleRadius * 2); } g.setColor(textColor); g.setFont(textFont); FontMetrics fontMetrics = g.getFontMetrics(); int maxAdvance = fontMetrics.getMaxAdvance(); int fontHeight = fontMetrics.getHeight(); float spaceForLetters = -horizMargin * 2.0F + width; float spacePerChar = spaceForLetters / (charsToPrint - 1.0f); for ( int i = 0; i < charsToPrint; i++ ) { char characterToShow = text[i]; // this is a separate canvas used for the character so that // we can rotate it independently int charWidth = fontMetrics.charWidth(characterToShow); int charDim = Math.max(maxAdvance, fontHeight); int halfCharDim = charDim / 2; BufferedImage charImage = new BufferedImage(charDim, charDim, BufferedImage.TYPE_INT_ARGB); Graphics2D charGraphics = charImage.createGraphics(); charGraphics.translate(halfCharDim, halfCharDim); double angle = (Math.random() - 0.5) * rotationRange; charGraphics.transform(AffineTransform.getRotateInstance(angle)); charGraphics.translate(-halfCharDim,-halfCharDim); charGraphics.setColor(textColor); charGraphics.setFont(textFont); int charX = (int) (0.5 * charDim - 0.5 * charWidth); charGraphics.drawString(String.valueOf(characterToShow), charX, (charDim - fontMetrics.getAscent()) / 2 + fontMetrics.getAscent()); float x = horizMargin + spacePerChar * i - charDim / 2.0f; int y = (height - charDim) / 2; g.drawImage(charImage, (int) x, y, charDim, charDim, null, null); charGraphics.dispose(); } g.dispose(); return bufferedImage; } } im enable it via the other.ini too but it just won't work inside the game no page will appear nothing even i tried with l2mythras - l2 ava - l2age all of the sources have the same problem captcha won't work at all enabling it from config.java - captcha.java - other.ini even when i check the server id and it just won't show up anyone will know how to make it work or will advice me using another captcha system it will be easy to adabt in this source because it aint easy in this kind pack of files to adabt thank's to all
  6. thank's for the support guys example for gendre change service if (command.equalsIgnoreCase("change_sex")) { if (player.getRace() == Race.kamael) { player.sendMessage("Not available for Kamael."); return; } if (Functions.getItemCount(player, Config.DONATOR_NPC_ITEM) < Config.DONATOR_NPC_COUNT_SEX) { player.sendMessage("You don't have enough " + Config.DONATOR_NPC_ITEM_NAME +"." ); return; } Connection con = null; PreparedStatement offline = null; try { con = DatabaseFactory.getInstance().getConnection(); offline = con.prepareStatement("UPDATE characters SET sex = ? WHERE obj_Id = ?"); offline.setInt(1, player.getSex() == 1 ? 0 : 1); offline.setInt(2, player.getObjectId()); offline.executeUpdate(); } catch(Exception e) { e.printStackTrace(); return; } finally { DbUtils.closeQuietly(con, offline); } Functions.removeItem(player, Config.DONATOR_NPC_ITEM, Config.DONATOR_NPC_COUNT_SEX, "Removed"); player.changeSex(); player.setTransformation(251); player.sendMessage("Your gender has been changed!"); player.broadcastUserInfo(true); player.setTransformation(0); System.out.println("Character " + player + " changed sex via donation"); }
  7. hello guys how i can make this script working by coins and not free package l2f.gameserver.model.instances; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 6 import l2f.commons.dbutils.DbUtils; 7 import l2f.gameserver.database.DatabaseFactory; 8 import l2f.gameserver.model.Player; 9 import l2f.gameserver.model.entity.olympiad.Olympiad; 10 import l2f.gameserver.network.serverpackets.L2GameServerPacket; 11 import l2f.gameserver.network.serverpackets.PledgeShowInfoUpdate; 12 import l2f.gameserver.network.serverpackets.SkillList; 13 import l2f.gameserver.network.serverpackets.UserInfo; 14 import l2f.gameserver.tables.SkillTable; 15 import l2f.gameserver.templates.npc.NpcTemplate; 16 import l2f.gameserver.utils.Log; 17 18 public final class BetaNPCInstance extends NpcInstance 19 { 20 /** 21 * 22 */ 23 private static final long serialVersionUID = 5938813598479742068L; 24 25 public BetaNPCInstance(int objectId, NpcTemplate template) 26 { 27 super(objectId, template); 28 } 29 30 @Override 31 public void onBypassFeedback(Player player, String command) 32 { 33 if (!canBypassCheck(player, this)) 34 { 35 return; 36 } 37 if (command.equalsIgnoreCase("change_sex")) 38 { 39 Connection con = null; 40 PreparedStatement offline = null; 41 try 42 { 43 con = DatabaseFactory.getInstance().getConnection(); 44 offline = con.prepareStatement("UPDATE characters SET sex = ? WHERE obj_Id = ?"); 45 offline.setInt(1, player.getSex() == 1 ? 0 : 1); 46 offline.setInt(2, player.getObjectId()); 47 offline.executeUpdate(); 48 } 49 catch (Exception e) 50 { 51 e.printStackTrace(); 52 return; 53 } 54 finally 55 { 56 DbUtils.closeQuietly(con, offline); 57 } 58 59 player.changeSex(); 60 player.sendMessage("Your gender has been changed !!"); 61 Log.add(new StringBuilder().append("Character ").append(player).append(" changed sex to ").append(player.getSex() == 1 ? "male" : "female").toString(), "renames"); 62 } 63 else if (command.equalsIgnoreCase("add_clan_reputation")) 64 { 65 if (player.getClan() != null) 66 { 67 player.getClan().incReputation(10000, false, "BetaNpc"); 68 player.getClan().broadcastToOnlineMembers(new L2GameServerPacket[] 69 { 70 new PledgeShowInfoUpdate(player.getClan()) 71 }); 72 player.sendMessage("Your clan received 10 000 clan reputation!"); 73 } 74 else 75 { 76 player.sendMessage("You don't have clan to use this feature!"); 77 } 78 } 79 else if (command.equalsIgnoreCase("add_exp_sp")) 80 { 81 player.addExpAndSp(999999999L, 999999999L); 82 player.addExpAndSp(999999999L, 999999999L); 83 player.addExpAndSp(999999999L, 999999999L); 84 player.addExpAndSp(999999999L, 999999999L); 85 player.addExpAndSp(999999999L, 999999999L); 86 player.addExpAndSp(999999999L, 999999999L); 87 player.addExpAndSp(999999999L, 999999999L); 88 player.addExpAndSp(999999999L, 999999999L); 89 } 90 else if (command.equalsIgnoreCase("add_fame")) 91 { 92 player.setFame(player.getFame() + 10000, "BetaNpc"); 93 player.sendPacket(new UserInfo(player)); 94 player.sendMessage("You received 10.000 fame points !"); 95 } 96 else if (command.equalsIgnoreCase("give_noblesse")) 97 { 98 if (!player.isNoble()) 99 { 100 Olympiad.addNoble(player.getPlayer()); 101 player.getPlayer().setNoble(true); 102 player.getPlayer().updatePledgeClass(); 103 player.getPlayer().updateNobleSkills(); 104 player.getPlayer().sendPacket(new SkillList(player.getPlayer())); 105 player.getPlayer().broadcastUserInfo(true); 106 player.getInventory().addItem(7694, 1L, "nobleTiara"); 107 player.sendMessage("Congratulations! You gained noblesse rank."); 108 player.broadcastUserInfo(true); 109 } 110 else if (player.isNoble()) 111 { 112 player.sendMessage("You already have noblesse rank !"); 113 } 114 } 115 else if (command.equalsIgnoreCase("give_hero")) 116 { 117 if (!player.isHero()) 118 { 119 player.setHero(true); 120 player.updatePledgeClass(); 121 player.addSkill(SkillTable.getInstance().getInfo(395, 1)); 122 player.addSkill(SkillTable.getInstance().getInfo(396, 1)); 123 player.addSkill(SkillTable.getInstance().getInfo(1374, 1)); 124 player.addSkill(SkillTable.getInstance().getInfo(1375, 1)); 125 player.addSkill(SkillTable.getInstance().getInfo(1376, 1)); 126 player.sendPacket(new SkillList(player)); 127 player.getPlayer().broadcastUserInfo(true); 128 player.sendMessage("Congratulations! You gained hero rank."); 129 player.broadcastUserInfo(true); 130 } 131 else if (player.isNoble()) 132 { 133 player.sendMessage("You already have hero rank !"); 134 } 135 } 136 else 137 { 138 super.onBypassFeedback(player, command); 139 } 140 } 141 142 @Override 143 public boolean isNpc() 144 { 145 return true; 146 } 147 148 }
  8. hello guyes im using trunk porject but editing chat sicrpt here not like in l2sunrise i wonder if anyone know the bath cuz i didn't find anything im trying to fix some language becuase in some cases the text written reversed ( in showing items , in the tittle , in the announcement ) if anyone know let me know cuz i tried to connect the say2 file from the sunrise project to trunk project by adding extra import lines
  9. so no one couldn't help ? i tried all decoding / deycrpting programes / l2file edits i tried getting a clean one but it just don't work with my cilent or my server what is the problem with this file ? i just needed to replace one name that's all!
  10. Hello, can someone decode this file for me so I can edit it using the l2 file edit thank you very much http://www.mediafire.com/file/sg1zk497au27coh/itemname-e.dat/file
  11. ok thank you i will delete the rar i want to make a private ertheia server so i can to test all the new features because right now i'm playing with a server that will upgrade from h5 to god so i don't know anything about god client i really did before h5 private servers but not like this and i don't find the ways to do it ( there is no script for mysql files and register sever won't start etc...)
  12. Hello, I have a folder with the name (L2JServer Ertheia (Compiled by Baggos) .rar I want to create an Ertheia server but I can not. do i replace l2datapack and l2server files? If anyone know how to make the files in one folder Please let me know or give me another source thanks