Jump to content

Recommended Posts

Posted

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

Posted

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();
Posted (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 by MlDNlGHT
Posted

 

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!

Posted (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 by xdem
Posted

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;
    }
}
Posted (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 by HappyLDE
  • 2 weeks later...
Posted (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 by MlDNlGHT
  • 3 weeks later...
  • 2 weeks later...
Posted

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.

 

post-135436-0-69473800-1388430360_thumb.png

 

I haven't got much experience with this and am still trying to learn, any help would be appreciated :D

Guest
This topic is now closed to further replies.



  • Posts

    • A misaligned badge or a heavy shadow is not evidence of AI. If anything, small inconsistencies are usually proof of years of manual modifications layered over an old codebase. AI-generated UIs tend to be overly clean, symmetrical, and generic because models optimize for visual patterns, not long-term product evolution. What you’re calling “AI design” is actually a very common style in older gaming communities: strong gradients, metallic buttons, glow effects, dense information blocks, and high visual emphasis on rankings/votes/sponsors.    Also, good UI is contextual. A toplist platform for MMORPG servers is optimized differently than a modern SaaS dashboard or a portfolio site. Here, visibility, CTR, sponsor highlighting, fast scanning, and information density matter more than minimalist whitespace trends from Dribbble. And honestly, if the UI was actually generated by AI, it probably would’ve looked more modern and generic — not like a platform that clearly evolved piece by piece over many years 😄   The funny thing is that a lot of these new “AI web designers” can’t even write 20 lines of CSS by hand without ChatGPT holding their hand 😄    They see a shadow, a gradient, or a rounded border and instantly scream “AI-generated” because their entire understanding of design now comes from prompting tools instead of actually building interfaces from scratch. And honestly, @Elfo was right — your own website looks far more AI-generated you built it with Tailwind/shadcn-style aesthetics and probably Next.js ,m i right friend? you built it with Tailwind/shadcn-style aesthetics...  You literally scanned the entire site just to find a tiny shadow behind a button as “proof” 😂 Real developers know the difference between a handcrafted project that evolved over many years, and a generic AI-generated template pumped out in 30 seconds.       Anyway, no hard feelings. Different tastes, different opinions 🙂
    • If it is AI-generated, you used a really shit model. Even AI wouldn't be able to generate obvious errors like the badge misalignment.   I do find it funny, however, that out of everyone to accuse you, Splicho, who used AI to fully generate this https://nimeracp.com/, is the one to talk.
    • You’re free to dislike the design, that’s subjective and totally fine. But calling everything you personally don’t like “AI generated” is not really an argument 😄 The funny part is that the layout constraints you’re criticizing are actually intentional design decisions for toplist platforms — ads, rankings, visibility blocks, sponsor placements, and high information density. This isn’t a portfolio landing page or a SaaS dashboard where you can leave half the screen empty for aesthetics. Also, AI-generated UIs usually look generic, over-animated, inconsistent, and impractical for real long-term usage. Our platform has been evolving for years based on actual user behavior, server owner needs, CTR optimization, and functionality requirements. You may not like the visual style, and that’s okay. But confusing “I don’t like this design” with “this was made by AI” just shows you’re judging emotionally instead of technically. Anyway, appreciate the feedback. Good luck to you too 🙂
    • You don't get it what I am trying to say. Your UI is simply ai generated, entirely. The current theme what you are using. I am not talking about the backend. It's just my personal preference/opinion that I think your UI looks really bad because it's AI generated and whoever worked on it didn't give a single fuck about how it looks, or at least take the time to rework the UI that AI generated yourself.   AI is just bad with design and your website is a proof of concept once again. But how would someone know what looks good and what does not look good if one doesn't have the design skills or knowledge.   Whatever, good luck with your site.
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..