SweeTs Posted November 2, 2013 Posted November 2, 2013 dude imports... -.-' I know that, but others don't as you see.. :P You ask them to show the error, given line where is error and they don't get it and they give you random shit.. It's really frustrating sometimes.. :D
fissban Posted November 9, 2013 Posted November 9, 2013 this code is hardcode. the html is better to define them as such and not within the code. execution times is better to write this as follows String html = "<html>"+ "<title>L2Mondial Enchanter</title>"+ "<body>"+ "<center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"+ "<font color=\"FF9900\">" + title + "</font></center><br>"+ content + "<br><br>"+ "<center><a action=\"bypass -h Quest Enchant " + enchantType + "\">Go Back</a></center>"+ "</body>"+ "</html>"; return html; TextBuilder _td = new TextBuilder(); _td.append("<html>"); _td.append("<title>L2Mondial Enchanter</title>"); _td.append("<body>"); _td.append("<center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"); _td.append("<font color=\"FF9900\">" + title + "</font></center><br>" + content + "<br><br>"); _td.append("<center><a action=\"bypass -h Quest Enchant " + enchantType + "\">Go Back</a></center>"); _td.append("</body>"); _td.append("</html>"); return _td.toString();
MlDNlGHT Posted November 9, 2013 Posted November 9, 2013 (edited) int npcId = 9994; // Item required to enchant armor +1 int itemRequiredArmor = 6393; int itemRequiredArmorCount = 50; // Item required to enchant jewels +1 int itemRequiredJewels = 6393; int itemRequiredJewelsCount = 50; // Item required to enchant weapon +1 int itemRequiredWeapon = 6393; int itemRequiredWeaponCount = 150; // Item required to enchant belt/shirt +1 int itemRequiredBeltShirt = 6393; int itemRequiredBeltShirtCount = 100; all should be private final static Overall a cool code, but imo its very poor Disagree, the variables in this class are only being accessed by it's own class/itself. It is not being called by any other outside class or instance. Why would you want to make all the variables global? This will keep them in memory even when this instance/class is unloaded/not in use. Having them as non static, dynamic, will only access them and keep them in memory while the instance of that class is still being used/in memory. You should only use static methods/variables etc when you need to access them from other classes/instances, and dont need to initiate a new instance of the class holding the needed variables/methods. Hope I explained it well, try the example program and you should see. They Should be -> private final int Example: void main(){ { dynamic int a = 1; static int b = 1; } // a deleted from memory but b still is there cout << b; cout << a; // error occured because a deleted } Edited November 9, 2013 by MlDNlGHT
HappyLDE Posted November 9, 2013 Author Posted November 9, 2013 Disagree, the variables in this class are only being accessed by it's own class/itself. It is not being called by any other outside class or instance. Why would you want to make all the variables global? This will keep them in memory even when this instance/class is unloaded/not in use. Having them as non static, dynamic, will only access them and keep them in memory while the instance of that class is still being used/in memory. You should only use static methods/variables etc when you need to access them from other classes/instances, and dont need to initiate a new instance of the class holding the needed variables/methods. Hope I explained it well, try the example program and you should see. They Should be -> private final int Example: void main(){ { dynamic int a = 1; static int b = 1; } // a deleted from memory but b still is there cout << b; cout << a; // error occured because a deleted } Good explanation and i thank you for taking the time!
Karasu Posted November 11, 2013 Posted November 11, 2013 This is what ive been looking for, ur autoenchant system rocks! gz happy
xdem Posted November 11, 2013 Posted November 11, 2013 (edited) Disagree, the variables in this class are only being accessed by it's own class/itself. It is not being called by any other outside class or instance. Why would you want to make all the variables global? This will keep them in memory even when this instance/class is unloaded/not in use. Having them as non static, dynamic, will only access them and keep them in memory while the instance of that class is still being used/in memory. You should only use static methods/variables etc when you need to access them from other classes/instances, and dont need to initiate a new instance of the class holding the needed variables/methods. Hope I explained it well, try the example program and you should see. They Should be -> private final int Example: void main(){ { dynamic int a = 1; static int b = 1; } // a deleted from memory but b still is there cout << b; cout << a; // error occured because a deleted } it should be static since the variable belongs to the class and not neceserly to the object, just like config variables... Static variables have better perfomance than non-static, for example they are faster. I find no reason for them to be nonstatic since I see no OOP here However I will neither argue with you, your argument is valid, since the "perfomance" while alocating memory is nowaday useless due to the modern JVMs Edited November 11, 2013 by xdem
davidBm Posted November 11, 2013 Posted November 11, 2013 Error. Help. http://postimg.org/image/r28k0kbw1/ For all items he say is no't encantable!!! Here is the code what i make for freya. Some help plz thx package custom.Enchant; import java.util.logging.Logger; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.itemcontainer.Inventory; import com.l2jserver.gameserver.model.L2ItemInstance; import com.l2jserver.gameserver.model.olympiad.OlympiadManager; import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.network.serverpackets.CharInfo; import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo; import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate; import com.l2jserver.gameserver.network.serverpackets.UserInfo; public class Enchant extends Quest { public static final Logger _log = Logger.getLogger(Enchant.class.getName()); private final static int npcId = 9994; // Item required to enchant armor +1 private final static int itemRequiredArmor = 6393; private final static int itemRequiredArmorCount = 50; // Item required to enchant jewels +1 private final static int itemRequiredJewels = 6393; private final static int itemRequiredJewelsCount = 50; // Item required to enchant weapon +1 private final static int itemRequiredWeapon = 6393; private final static int itemRequiredWeaponCount = 150; // Item required to enchant belt/shirt +1 private final static int itemRequiredBeltShirt = 6393; private final static int itemRequiredBeltShirtCount = 100; public Enchant(int questId, String name, String descr) { super(questId, name, descr); addStartNpc(npcId); addFirstTalkId(npcId); addTalkId(npcId); } public static void main(String[] args) { new Enchant(-1, Enchant.class.getSimpleName(), "custom"); } public String onFirstTalk(L2Npc npc, L2PcInstance player) { String enchantType = "Enchant.htm"; if (player.getQuestState(getName()) == null) { newQuestState(player); } else if (player.isInCombat()) { return drawHtml("You are in combat", "Don't fight if you want to talk with me!", enchantType); } else if (player.getPvpFlag() == 1) { return drawHtml("You are flagged", "Don't fight if you want to talk with me!", enchantType); } else if (player.getKarma() != 0) { return drawHtml("You are in chaotic state", "Don't fight if you want to talk with me!", enchantType); } else if (OlympiadManager.getInstance().isRegistered(player)) { return drawHtml("You are registered for Olympiad", "You can't use my services<br1>while playing the Olympiad.", enchantType); } return "Enchant.htm"; } public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { String htmlText = event; String enchantType = "Enchant.htm"; int armorType = -1; // Armor parts if (event.equals("enchantHelmet")) { armorType = Inventory.PAPERDOLL_HEAD; enchantType = "EnchantArmor.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount); } else if (event.equals("enchantChest")) { armorType = Inventory.PAPERDOLL_CHEST; enchantType = "EnchantArmor.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount); } else if (event.equals("enchantLeggings")) { armorType = Inventory.PAPERDOLL_LEGS; enchantType = "EnchantArmor.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount); } else if (event.equals("enchantGloves")) { armorType = Inventory.PAPERDOLL_GLOVES; enchantType = "EnchantArmor.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount); } else if (event.equals("enchantBoots")) { armorType = Inventory.PAPERDOLL_FEET; enchantType = "EnchantArmor.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount); } else if (event.equals("enchantShieldOrSigil")) { armorType = Inventory.PAPERDOLL_LHAND; enchantType = "EnchantArmor.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredArmor, itemRequiredArmorCount); } // Jewels else if (event.equals("enchantUpperEarring")) { armorType = Inventory.PAPERDOLL_LEAR; enchantType = "EnchantJewels.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredJewels, itemRequiredJewelsCount); } else if (event.equals("enchantLowerEarring")) { armorType = Inventory.PAPERDOLL_REAR; enchantType = "EnchantJewels.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredJewels, itemRequiredJewelsCount); } else if (event.equals("enchantNecklace")) { armorType = Inventory.PAPERDOLL_NECK; enchantType = "EnchantJewels.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredJewels, itemRequiredJewelsCount); } else if (event.equals("enchantUpperRing")) { armorType = Inventory.PAPERDOLL_LFINGER; enchantType = "EnchantJewels.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredJewels, itemRequiredJewelsCount); } else if (event.equals("enchantLowerRing")) { armorType = Inventory.PAPERDOLL_RFINGER; enchantType = "EnchantJewels.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredJewels, itemRequiredJewelsCount); } // Belt/Shirt else if (event.equals("enchantBelt")) { armorType = Inventory.PAPERDOLL_BELT; enchantType = "EnchantBeltShirt.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredBeltShirt, itemRequiredBeltShirtCount); } else if (event.equals("enchantShirt")) { armorType = Inventory.PAPERDOLL_UNDER; enchantType = "EnchantBeltShirt.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredBeltShirt, itemRequiredBeltShirtCount); } // Weapon else if (event.equals("enchantWeapon")) { armorType = Inventory.PAPERDOLL_RHAND; enchantType = "EnchantWeapon.htm"; htmlText = enchant(enchantType, player, armorType, itemRequiredWeapon, itemRequiredWeaponCount); } return htmlText; } private String enchant(String enchantType, L2PcInstance player, int armorType, int itemRequired, int itemRequiredCount) { QuestState st = player.getQuestState(getName()); int currentEnchant = 0; int newEnchantLevel = 0; if (st.getQuestItemsCount(itemRequired) >= itemRequiredCount) { try { L2ItemInstance item = getItemToEnchant(player, armorType); if (item != null) { if ( item.isCommonItem() && item.isEquipable() && !item.isConsumable() && !item.isCommonItem() && !item.isOlyRestrictedItem() && !item.isShadowItem() && !item.isQuestItem() ) { currentEnchant = item.getEnchantLevel(); if ( currentEnchant < 20 ) { newEnchantLevel = setEnchant(player, item, currentEnchant+1, armorType); if ( newEnchantLevel > 0 ) { st.takeItems(itemRequired, itemRequiredCount); player.sendMessage("You successfully enchanted your " + item.getItem().getName() +" from +" + currentEnchant + " to +" + newEnchantLevel + "!"); String htmlContent = "<center>You successfully enchanted your:<br>"+ "<font color=\"FF7200\">" + item.getItem().getName() + "</font><br>"+ "From: <font color=\"AEFF00\">+" + currentEnchant + "</font> to <font color=\"AEFF00\">+" + newEnchantLevel + "</font>"+ "</center>"; return drawHtml("Congratulations!", htmlContent, enchantType); } } else { player.sendMessage("Your " + item.getItem().getName() + " is already +20!"); return drawHtml("It's already +20", "<center>Your <font color=\"FF7200\">" + item.getItem().getName() +"</font> is already +20!</center>", enchantType); } } else { player.sendMessage("Your " + item.getItem().getName() + " is not enchantable!"); return drawHtml("Not enchantable item!", "<center>Your <font color=\"FF7200\">" + item.getItem().getName() +"</font> is not enchantable!</center>", enchantType); } } } catch (StringIndexOutOfBoundsException e) { player.sendMessage("Something went wrong. Are equiped with the item?"); return drawHtml("Error Enchant", "<center>Something went wrong.<br>Are equiped with the item?</center>", enchantType); } catch (NumberFormatException e) { player.sendMessage("Something went wrong. Are equiped with the item?"); return drawHtml("Error Enchant", "<center>Something went wrong.<br>Are equiped with the item?</center>", enchantType); } player.sendMessage("Something went wrong. Are equiped with the item?"); return drawHtml("Error Enchant", "<center>Something went wrong.<br>Are equiped with the item?</center>", enchantType); } else { String content = "<center>"+ "Not enough <font color=\"FF7200\">Event - Glitering Medals</font>!<br>"; if ( st.getQuestItemsCount(itemRequired) > 0 ) { content += "You have " + st.getQuestItemsCount(itemRequired) + " Glittering Medals,<br1>"+ "Need " + (itemRequiredCount - st.getQuestItemsCount(itemRequired)) + " more."; } else { content += "You need <font color=\"FF7200\">" + itemRequiredCount + " Event - Glitering Medals</font>!"; } content += "</center>"; return drawHtml("Not Enough Items", content, enchantType); } } private L2ItemInstance getItemToEnchant(L2PcInstance player, int armorType) { L2ItemInstance itemInstance = null; L2ItemInstance parmorInstance = player.getInventory().getPaperdollItem(armorType); if ((parmorInstance != null) && (parmorInstance.getLocationSlot() == armorType)) { itemInstance = parmorInstance; if (itemInstance != null) { return itemInstance; } } return null; } private int setEnchant(L2PcInstance player, L2ItemInstance item, int newEnchantLevel, int armorType) { if (item != null) { // set enchant value player.getInventory().unEquipItemInSlot(armorType); item.setEnchantLevel(newEnchantLevel); player.getInventory().equipItem(item); // send packets InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(item); player.sendPacket(iu); player.broadcastPacket(new CharInfo(player)); player.sendPacket(new UserInfo(player)); player.broadcastPacket(new ExBrExtraUserInfo(player)); return newEnchantLevel; } return -1; } public String drawHtml(String title, String content, String enchantType) { String html = "<html>"+ "<title>L2Mondial Enchanter</title>"+ "<body>"+ "<center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"+ "<font color=\"FF9900\">" + title + "</font></center><br>"+ content + "<br><br>"+ "<center><a action=\"bypass -h Quest Enchant " + enchantType + "\">Go Back</a></center>"+ "</body>"+ "</html>"; return html; } }
HappyLDE Posted November 13, 2013 Author Posted November 13, 2013 (edited) -- if ( item.isCommonItem() && item.isEquipable() && !item.isConsumable() && !item.isCommonItem() && !item.isOlyRestrictedItem() && !item.isShadowItem() && !item.isQuestItem() ) ++ if ( item.isEquipable() && !item.isConsumable() && !item.isCommonItem() && !item.isOlyRestrictedItem() && !item.isShadowItem() && !item.isQuestItem() ) Edited November 13, 2013 by HappyLDE
MlDNlGHT Posted November 26, 2013 Posted November 26, 2013 (edited) it should be static since the variable belongs to the class and not neceserly to the object, just like config variables... Static variables have better perfomance than non-static, for example they are faster. I find no reason for them to be nonstatic since I see no OOP here However I will neither argue with you, your argument is valid, since the "perfomance" while alocating memory is nowaday useless due to the modern JVMs It doesn't make 1 ioata of a difference if they belong to the class or the object, in the same class. All the objects in that class are in that class. It would make a difference if the objects are in a different class. As for faster processing , I would sacrafic a few ms loading/processing time for less total memory usage of the entire application. I don't believe the "change off" is worth it. Guess it's all about one's coding style.. Edited November 26, 2013 by MlDNlGHT
Devlin Posted December 14, 2013 Posted December 14, 2013 Topic locked, in case of new dl links just pm me.
HappyLDE Posted December 28, 2013 Author Posted December 28, 2013 (edited) Updated the NPC, now it can add Attribute Elements to it. Link uploaded in the first post. Edited December 28, 2013 by HappyLDE
qazokn Posted December 30, 2013 Posted December 30, 2013 Hello, I tried using your updated enchant manager npc (V2) in my H5 server but keep getting this L2ItemInstance error. I haven't changed any of your code. I haven't got much experience with this and am still trying to learn, any help would be appreciated :D
Recommended Posts