Jump to content
  • 0

Npc Enchant


Question

Posted

Who can tell me how i can edit npc enchant with different enchant?

i mean i have one npc for max enchant +150. This item need to be +0 to enchant it.

and i want the secound one to be from 150 (not from +0) to +300. 

Now, the problem is it in .JAVA file. How i can duplicate npc to work both?

I can change just id? (i try this and doesn;t work).

Thank's

7 answers to this question

Recommended Posts

  • 0
Posted

Well, i paste here java file from npc enchant. 

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.items.instance.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());

    int npcId = 99942;

    // Item required to enchant armor +20
    int itemRequiredArmor = 8284;
    int itemRequiredArmorCount = 10;

    // Item required to enchant jewels +20
    int itemRequiredJewels = 8284;
    int itemRequiredJewelsCount = 10;

    // Item required to enchant weapon +20
    int itemRequiredWeapon = 8284;
    int itemRequiredWeaponCount = 10;

    // Item required to enchant belt/shirt +20
    int itemRequiredBeltShirt = 8284;
    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)
                {
                    currentEnchant = item.getEnchantLevel();

                    if ( currentEnchant < 100 )
                    {
                        newEnchantLevel = setEnchant(player, item, currentEnchant+10, 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 +100!");
                        return drawHtml("It's already +100", "<center>Your <font color=\"FF7200\">" + item.getItem().getName() +"</font> is already +100!</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;
    }
}

What i need to change here ?

  • 0
Posted

If you cant understand and edit a simple code, you should learn the language first. at least the basics. If not, you are doing a bad job trying to open a server without knowledge about editing stuff... What will you do when you find a bug? Will you come with it to the forum and hope people will help you out? ... Google stuff, try to understand what you are doing... 

  • 0
Posted (edited)

You should re-write your code buddy.. Your logic about packets/unequip and then enchant and again equip it's totally wrong.. This can be done with only 1/7 of this code.

 

example like:


                item.setEnchantLevel(enchant);
                item.updateDatabase();
                player.sendPacket(new ItemList(player, false));
                player.broadcastUserInfo();
                player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_S2_SUCCESSFULLY_ENCHANTED).addNumber(item.getEnchantLevel()).addItemName(item.getItemId()));

 

Make your method:

 

    public static void Enchant(L2PcInstance player, int enchant, int type)
    {
        L2ItemInstance item = player.getInventory().getPaperdollItem(type);
        
        if (item != null)
        {
            if (item.getEnchantLevel() < 150)
                player.sendMessage("Move to another enchant npc!");
            else if (item.getEnchantLevel() == 300)
                player.sendMessage("Your " + item.getItemName() + " is already on maximun enchant!");
            else if (item.getItem().getCrystalType().getId() == 0)
                player.sendMessage("You can't Enchant under " + item.getItem().getCrystalType() + " Grade Items!");
            else if (item.isHeroItem())
                player.sendMessage("You Cannot be Enchant On " + item.getItemName() + " !");
            else if (player.destroyItemByItemId("Consume", 57, 100, player, true))
            {
                item.setEnchantLevel(enchant);
                item.updateDatabase();
                player.sendPacket(new ItemList(player, false));
                player.broadcastUserInfo();
                player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_S2_SUCCESSFULLY_ENCHANTED).addNumber(item.getEnchantLevel()).addItemName(item.getItemId()));
            }
            else
                player.sendMessage("You do not have enough adena.");
        }
        else
            player.sendMessage("That item doesn't exist in your inventory.");
    }

 

 

        if (command.startsWith("enchant"))
        {
            StringTokenizer st = new StringTokenizer(command);
            st.nextToken();
            try
            {
                String type = st.nextToken();
                switch (type)
                {
                    case "Weapon":
                        Enchant(player, 300, Inventory.PAPERDOLL_RHAND);
                        break;

                }
            }
            catch (Exception e)
            {
            }
        }

 

That's all you need.. Create a html, name the bypass "enchant" and done.. Your wep from +150 to +300. 

Edited by 'Baggos'
  • 0
Posted

I like how it's look new code, but i can't to edit my code (even if it's wrong) because mby , and i am sure, i'll broke all code. And i don;t want to spam maxcheaters.com with errors. I post here the code. Maybe someone wants to help me. I post here all code. I want to know what i must change.

Thanks Guys

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Posts

    • Hi, for l2jfrozen...   I want Bless Enchat to have a limit.   Example: 7+ to +15 with Bless Enchat.   That for +16, it doesn't allow use.
    • @FixerRay the problem is that my dev will not be available for a while so if you could help that will be great 
    • Tired of watching your Instagram account grow at a snail’s pace? Feeling frustrated when your quality content doesn’t reach the audience it deserves? Let me share a secret that changed the game for me and many others: using a reliable SMM panel Instagram service like GoUpSocial. Whether you're building a brand, promoting a product, or growing a personal page, GoUpSocial offers the best and cheapest SMM panel for Instagram followers, likes, and views — with real results, fast delivery, and budget-friendly pricing. ✅ What Is an SMM Panel Instagram and Why Should You Care? An Instagram SMM panel is a specialized marketing tool that helps you grow your account faster by automating likes, followers, views, and even verification services. But not all SMM panels are created equal. GoUpSocial stands out because it offers: Safe and real SMM followers Instagram services High-retention SMM panel for Instagram views Instant Instagram likes SMM panel to boost engagement Smart Instagram comment like SMM panel to highlight key messages Trusted SMM panel Instagram blue tick strategies to increase verification chances All of this is delivered through an intuitive, user-friendly platform with 24/7 customer support. 📈 Instagram Followers Increase SMM Panel – Grow with Confidence If you’re looking for meaningful growth, the Instagram followers increase SMM panel is your go-to solution. GoUpSocial provides real followers, delivered gradually to keep your profile looking natural and compliant with Instagram’s algorithm. Whether you’re launching a business page or trying to build a fan base as a creator, more followers = more trust and more visibility. ❤️ Drive More Engagement with the Instagram Likes SMM Panel Instagram rewards popular posts with more visibility. That means more likes lead to more exposure. With the Instagram likes SMM panel, you can boost your post’s visibility instantly, increasing your chance of hitting the Explore page or going viral. If you're managing brand mentions or public feedback, the Instagram comment like SMM panel is perfect for pushing important comments to the top — ideal for testimonials, FAQs, or influencer interactions. 🎥 Don’t Miss Out on Views – Try the SMM Panel for Instagram Views Instagram is prioritizing video content more than ever. Whether it’s Reels, Stories, or feed videos, performance matters — and GoUpSocial’s SMM panel for Instagram views ensures you get noticed. Combined with the Instagram likes SMM panel, this powerful duo can significantly increase your profile’s reach and influence. Don’t just post content — get it seen. 🔵 Boost Verification Potential with SMM Panel Instagram Blue Tick Getting verified on Instagram isn’t easy — but it’s also not impossible. Instagram looks at follower count, engagement, and public presence. That’s where GoUpSocial’s SMM panel Instagram blue tick service can give you the edge. By growing your followers and interaction rates authentically, you increase your chances of being verified. It’s a smart, strategic move for influencers, entrepreneurs, and anyone seeking social credibility. ⚙️ Easy SMM Panel Instagram – Simplicity Meets Power Forget clunky dashboards or complicated processes. GoUpSocial provides an easy SMM panel Instagram interface that lets you: Place orders quickly Monitor real-time progress Manage multiple services effortlessly Choose from flexible packages Pay securely and safely Even if you're new to digital marketing, you’ll feel confident using this system. 💸 Cheapest SMM Panel for Instagram Followers, Likes, and Views Let’s talk about pricing — GoUpSocial is hands-down the cheapest SMM panel for Instagram followers, likes, and views that doesn’t compromise on quality. They offer: Low-cost follower packages Budget-friendly like boosts Affordable video views with high retention Targeted solutions to maximize ROI Ideal for students, startups, creators, and agencies alike. 🤝 Manage Clients Efficiently with the Instagram Reseller Panel If you’re a digital agency or freelancer, GoUpSocial’s Instagram reseller panel is a goldmine. You get access to all the same high-quality services at reseller prices — with API access, white-label delivery, and bulk order management. You can resell these services under your own brand and watch your revenue grow alongside your client base. 🎯 A Complete Growth System – Why GoUpSocial Wins There are many panels out there. But here’s why GoUpSocial consistently ranks as the best and cheap SMM panel for Instagram server: 🔒 Safe and compliant with Instagram’s systems ⚡ Fast and automatic delivery 💬 Real engagement from real users 🛠️ Easy-to-use platform for all experience levels 🧩 All-in-one panel for followers, likes, views, comments, and verification 💼 Reseller-ready for agencies and freelancers If you want a system that works, and works well — this is it. 👉 Ready to accelerate your Instagram growth? Sign up now at https://goupsocial.com and experience the easiest, most reliable, and cheapest SMM panel Instagram solution available today. Whether you're after likes, views, followers, or even a verified badge, GoUpSocial delivers everything you need — fast, safe, and with real impact. 🔥 Don’t wait — your Instagram success story starts here! 🔥
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock