Jump to content
  • 0

Add pages to droplist.


Question

Posted

l2jfrozen 1004 interlude.

So I added this code:

 

But when drops are too many I get the usual error Html is too long try using DB for this action.

So I want to add pages for it but I dont have a clue what I am doing.

These are the codes Im trying to follow:
https://pastebin.com/pCEGRBLR

https://pastebin.com/6hdGbztm

 

I dont know if I even add the lines to the correct java .
This is what I have done in the RequestBypassToServer.java.

 

https://pastebin.com/23quwrAC

 

 

 

Recommended Posts

  • 0
Posted

try this maybe it will work:

else if (_command.startsWith("DropListNpc"))
            {              
                private static void showItemsPage(Player activeChar, int page)
                {
                final L2Object object = activeChar.getTarget();
               
                int MaxItemsPerPage = 10;
                int MaxPages = _itemssize / maxItemsPerPage;
                if (_itemssize > MaxItemsPerPage * MaxPages)
                    MaxPages++;
               
           
                if (page > MaxPages)
                    page = MaxPages;
               
                int ItemsStart = MaxItemsPerPage * page;
                int ItemsEnd = _itemssize();
                if (ItemsEnd - ItemsStart > MaxItemsPerPage)
                    ItemsEnd = ItemsStart + MaxItemsPerPage;
               
                if (object instanceof L2NpcInstance)
                {
                    NpcHtmlMessage html = new NpcHtmlMessage(0);
                    StringBuilder html1 = new StringBuilder("<html>");
                   
                    html1.append("<title>Npc Name: " + object.getName() + "</title>");
                    html1.append("<body>");
                    html1.append("<br>");
                    html1.append("<table cellspacing=2 cellpadding=1 width=\"280\">");
                   
                    if (((L2NpcInstance) object).getTemplate().getDropData() != null)
                    {
						int myPage = 1;
						int i = 0;
						int shown = 0;
						boolean hasMore = false;

                        for (L2DropCategory cat : ((L2NpcInstance) object).getTemplate().getDropData())
                        {
							if (shown == MaxItemsPerPage)
							{
							hasMore = true;
							break;
							}
                            for (L2DropData drop : cat.getAllDrops())
                            {
                                final L2Item item = ItemTable.getInstance().getTemplate(drop.getItemId());
                               
                                if (item == null)
                                    continue;
								
								if (myPage != page)
								{
								i++;
								if (i == MaxItemsPerPage)
								{
								myPage++;
								i = 0;
								}
								continue;
								}
					
								if (shown == MaxItemsPerPage)
								{
								hasMore = true;
								break;
								}
								
                                int mind = 0, maxd = 0;
                                String smind = null, smaxd = null;
                                String name = item.getName();
                                if (cat.isSweep())
                                {
                                    mind = (int) (Config.RATE_DROP_SPOIL * drop.getMinDrop());
                                    maxd = (int) (Config.RATE_DROP_SPOIL * drop.getMaxDrop());
                                }
                                else if (drop.getItemId() == 57)
                                {
                                    mind = 300 * drop.getMinDrop();
                                    maxd = 300 * drop.getMaxDrop();
                                }
                                else
                                {
                                    mind = (int) (Config.RATE_DROP_ITEMS * drop.getMinDrop());
                                    maxd = (int) (Config.RATE_DROP_ITEMS * drop.getMaxDrop());
                                }
                                if (mind > 999999)
                                {
                                    DecimalFormat df = new DecimalFormat("###.#");
                                    smind = df.format(((double) (mind)) / 1000000) + " KK";
                                    smaxd = df.format(((double) (maxd)) / 1000000) + " KK";
                                }
                                else if (mind > 999)
                                {
                                    smind = ((mind / 1000)) + " K";
                                    smaxd = ((maxd / 1000)) + " K";
                                }
                               
                                else
                                {
                                    smind = Integer.toString(mind);
                                    smaxd = Integer.toString(maxd);
                                }
                                if (name.startsWith("Common Item - "))
                                {
                                    name = "(CI)" + name.substring(14);
                                }
                                if (name.length() >= 34)
                                {
                                    name = name.substring(0, 30) + "...";
                                }
                                html1.append("<tr>");
                                html1.append("<td valign=top align=center height=38 width=40><img src=\"" + getIcon(item.getItemId()) + "\" height=32 width=32></td>");
                                html1.append("<td>");
                                html1.append("<table cellpadding=0 cellspacing=1 width=237>");
                                html1.append("<tr>");
                                html1.append("<td>" + (drop.getChance() >= 10000 ? (double) drop.getChance() / 10000 : drop.getChance() < 10000 ? (double) drop.getChance() / 10000 : "N/A") + "% is " + (drop.isQuestDrop() ? "<font color=\"00b3b3\">[Quest]</font>" : (cat.isSweep() ? "<font color=\"009900\">[Spoil]</font> " : "[Drop]")) + "</td>");
                                html1.append("</tr>");
                                html1.append("<tr>");
                                html1.append("<td>Name: <font color=fff600>" + name + "</font> " + (maxd == 1 ? "[1]" : "[" + smind + " - " + smaxd + "]") + "</td>");
                                html1.append("</tr>");
                                html1.append("</table>");
                                html1.append("</td>");
								shown++;
                            }
                        }
                    }
                    for (int x = 0; x < MaxPages; x++)
                    {
                        int pagenr = x + 1;
                        if (page == x)
                        {
                            pages += "<td>Page " + pagenr + "</td>";
                        }
                        else
                        {
                            pages += "<td>something " + something() + " " + x + "\">Page " + pagenr + "</a></td>";
                        }
                    }
                    }
                   
                    html1.append("</tr></table>");
                    html1.append("</body>");
                    html1.append("</html>");
                   
                    html.setHtml(html1.toString());
                    activeChar.sendPacket(html);
                   
                    html1 = null;
                    html = null;
                }
               
            }

 

  • 0
Posted
34 minutes ago, wongerlt said:

else if (_command.startsWith("DropListNpc"))

{

     private static void showItemsPage(Player activeChar, int page)

     {

:dat:

  • 0
Posted (edited)

You are doing it wrong guys.

 

First of all you have to create an interface in the MMOCore and implement it's functions in the drop list system. In short: when an NPC happen to have bad drop, the MMOCore should stop the packet communication for all players.

 

Additionally you can include System.exit(-1); to grand boss drops.

Edited by lord_rex
  • Haha 1
  • 0
Posted
30 minutes ago, lord_rex said:

You are doing it wrong guys.

 

First of all you have to create an interface in the MMOCore and implement it's functions in the drop list system. In short: when an NPC happen to have bad drop, the MMOCore should stop the packet communication for all players.

 

Additionally you can include System.exit(-1); to grand boss drops.

 

wnv7r.jpg

  • Haha 1
  • Upvote 2
  • 0
Posted (edited)
On 2/10/2019 at 7:34 PM, wongerlt said:

try this maybe it will work:

 

What did you change?

On 2/10/2019 at 8:08 PM, SweeTs said:

:dat:

 

On 2/10/2019 at 11:32 PM, melron said:

https://pastebin.com/XahC0b9d

 

Take a look there. im using acis bookmarks code as a base to generate pages

 

I can see my mistake in the first line , I guess I have to add them like this:

 


			private static void showItemsPage(Player activeChar, int page)
			{				
				if (_command.startsWith("DropListNpc"))
				{

 

On 2/10/2019 at 11:54 PM, lord_rex said:

You are doing it wrong guys.

 

First of all you have to create an interface in the MMOCore and implement it's functions in the drop list system. In short: when an NPC happen to have bad drop, the MMOCore should stop the packet communication for all players.

 

Additionally you can include System.exit(-1); to grand boss drops.

I dont understand you.

 

 

I really need some help here, can someone help me via  anydesk/tv?

Edited by sotid
  • 0
Posted
17 hours ago, DenArt Designs said:

if it was to guess this

  1. else if (_command.startsWith("DropListNpc"))
  2.             {

is to go in the command handler and the rest of the method to be called inside.

 

the code added doesnt seem to have any changes to any handler.

where exactly do you mean?

  • 0
Posted

Bcs all is already said. Admin bookmark has code rdy code. All you have to change is the htm display.. Which you already have from original code. So.. Put puzzles together.

  • 0
Posted (edited)
5 hours ago, SweeTs said:

Bcs all is already said. Admin bookmark has code rdy code. All you have to change is the htm display.. Which you already have from original code. So.. Put puzzles together.

So am I adding the code to the right place? lets start from that..

 

If yes then one more Question .

This:

if (_command.startsWith("DropListNpc"))


I think is inside this:

 

 

protected void runImpl()
    {
        L2PcInstance activeChar = getClient().getActiveChar();

        if(activeChar == null)
            return;

        if (!getClient().getFloodProtectors().getServerBypass().tryPerformAction(_command))
            return;
        

        try
        {
          			
                    .
                    .
                    .
               if (_command.startsWith("DropListNpc"))

 

To start something like this :

private static void showItemsPage(Player activeChar, int page)

or

public boolean useAdminCommand(String command, Player activeChar)

I have to start in a new line outside the {} of the code?
Also what admincommands have anything to do with it , this code will be for players.

Edited by sotid
  • 0
Posted

What the heck man...

 

RequestBypassToServer.java

 


        else if (_command.startsWith("dropinfo"))
        {
            final StringTokenizer st = new StringTokenizer(_command, " ");
            st.nextToken();
            
            try
            {
                int npcId = Integer.parseInt(st.nextToken());
                int page = (st.hasMoreTokens()) ? Integer.parseInt(st.nextToken()) : 1;
                
                showNpcDropList(player, npcId, page);
            }
            catch (Exception e)
            {
                LOGGER.warn("Failed on dropinfo: {}", e);
            }
        }

 

I let you code the showNpcDropList. Hint, it's c/p of original method from admin command to show drop.. Once again, the code for pages you can find HERE. If you have latest aCis, use it as it's slighty modified.

 

Once again, you have ready solution. If you still fail additing it. Then well.. I would suggest to try harder or simply skip it and get back to it later. With clean head. Sometimes you need time to understand things.

  • 0
Posted

@baksteen are you serious? I just gave him a ready code.. Admin show drop view is all he ask for ++ icons. All he have to do now, is to edit the drop display? The text / htm display? Which is shared in initial topic he took the code?

 

Bcs I prefer to force him to learn a thing? You really think when I first time created my own code with pages, I asked for ready code? Hell no. I opened admin bookmark and simply copy the code. I am still doing it when I need pages... It's called logic.

 

He's about to open a server and he can't copy a ready code from other file. Ok, he don't have to, as I don't have to give him fully working code, why should I.

 

Can't find a solution? Ask to a friend to help you (@Kara`).

Don't have a friend to ask for help?

Well, pay someone for rdy code. I don't feel like to provide ready codes, I already gave him 90%.

 

No offense.

 

2 hours ago, baksteen said:

God damn, people nowadays monkaEyes

EXACTLY, you expect ready things, for free. When someone give you hints, give you almost ready code, you whine "OMG noob, give me full code".

 

Sounds legit.

 

lol_meme_postcard-ra61a3bd39cca4033872ab

  • 0
Posted (edited)

@baksteen Because the community is tragic, they don't want to learn either take help. 

They want to grab and open server and if they can use you, they will. You can't imagine how many times i've got tricked by idiots who spend 5 hours of my life telling that they wanted services and close a deal for tomorrow and in the end of conversation they just say they want help setup e.t.c and after the next day they don't respond.

 

Maxcheaters is not a forum that provide free codes, even stackoverflow don't do that. Maxcheaters offer either paid content or help. Now giving help does not mean give them full code cause 1.full code won't help 2. they will keep asking for more and its never ending 3.they just want to use you and no learn just take as i said. 

They don't even respect you at all. From my side just by today i have 2 people who added me, gave their codes and asked for fix - or ask for setup server and when i said i don't do anything free they obviously responded but why should i pay? 

So conslusion? majority are spoiled useless idiots behind a cheap PC who want to open frozen server and make money. Why should we help those? Whoever want to learn he just ask for advice or suggestion, no ask for full code.

 

SweeT's is right and in my opinion he shouldn't even respond, he should drop the topic. This is HELP section no REQUEST full code until i make my server for free

 

Edited by Kara`
Guest
This topic is now closed to further replies.


  • Posts

    • Interface sources for P447 (7s update) for Classic/Essence   NWindow + InterfaceClassic + L2Editor + L2ClientDat Mobius + XDat Editor   Download
    • Hey there, welcome to the community – no worries about being new, we all started exactly where you are. Let me break this down based on what you’re trying to achieve with your Interlude‑Classic idea.   What you’re describing is actually a pretty popular concept: basically Interlude gameplay and balance, but with Classic‑style UI and a cleaner overall user experience. A “hybrid client”, not a full chronicle change.   Projects that have done something similar or are worth studying:   Lucera 2 – You’re right about this one. They use a custom client that blends Interlude gameplay with a more modern/Classic‑like interface. Their UI work (inventory, skill bar, lobby, etc.) is a good reference point.   L2J Mobius – Not exactly your target, but it’s very flexible and has a lot of examples of customizations and adaptations between chronicles.   Smaller custom projects – There are (or were) a few hybrid attempts using Interlude server files with heavily modified clients, but most are private or closed‑source, so you mainly get ideas, not ready‑to-use files.   Where the real challenge is (the client side):   What you want is possible, but the heavy lifting is on the client, not the server. The main pain points usually are:   Making sure interface files are compatible between chronicles (UI textures, layouts, systemmsg, etc.).   L2Font and localization edits: titles, chat, system messages – a small mistake here can break visuals or cause weird text issues.   Character selection / lobby screens: if you take them from another chronicle, you have to adapt them carefully so they don’t conflict with Interlude data.   Inventory, status bars and shortcuts: they must still work with Interlude’s item/skill structure and packet format, or you’ll get visual desyncs and client errors.   About multi‑protocol:   You’re correct that multi‑protocol is often used by projects that want to support different client versions or custom blends. In your case, it can help “talk” properly with a customized client while keeping an Interlude base server. It doesn’t magically fix everything, but it gives you more flexibility on how client and server exchange data.   Quick chronicle breakdown (relevant for your idea):   2.0–2.6: Early, simpler mechanics, good base for old‑school vibes.   2.7: More skills and better balance, often used as a base for custom projects.   2.9.5: A “bridge” between old and new, very common choice for hybrid or heavily modded setups.   3.0+: Adds Kamael and systems you said you don’t want, so you’d mainly use it as a reference, not as a direct base.   My honest recommendation:   Start from a solid Interlude base (files you understand and can actually maintain). Interlude still has the most support, tools and community knowledge.   Focus first on UI/interface modifications instead of trying to change core mechanics. Use Lucera‑style clients and similar projects as visual/technical reference.   Consider a multi‑protocol setup only after you’re comfortable with a normal Interlude client; otherwise you’ll just stack complexity.   Join active L2J / client‑mod Discords and forums. There are specific channels for interface, system edits and client reverse‑engineering where people share tips and tools.   What I would avoid at the beginning:   No intentar mezclar tres o cuatro chronicles a la vez; con uno bien entendido + UI custom ya tienes más que suficiente trabajo.   No subestimar la parte de cliente; muchas veces es más complicada y más frágil que el lado del servidor.   No saltarte el testeo en entorno local; los híbridos rompen cosas pequeñas (tooltips raros, skills que crashean el cliente, UI bugueada) si no pruebas bien.   Resources worth checking:   L2J forums and old MaxCheaters threads about faction/hybrid servers and client mods.   GitHub repos with client tools and interface mods (even si no son exactamente tu chronicle, te sirven como ejemplo).   Discord communities focused on L2 client development; ahí es donde se mueve hoy la parte “seria” del modding.   The good news: what you want is achievable, just not “plug & play”. It will require patience, testing and a bit of learning on both server and client sides. If you share exactly which files/pack you’re planning to use and what you want your UI to look like, people here (me included) can give you more concrete, step‑by‑step advice.
    • I’m done with Lineage 2. Not because I “grew up”, not because I “don’t have time for games” anymore, but because this game has slowly turned into everything it was supposed to be against.   Let’s be honest: most people are not playing Lineage 2 anymore. They are running 5–10 boxes, macros and scripts, setting up their characters and going to watch Netflix. The core loop isn’t PvP, clan wars or raids – it’s AFK grinding and praying your gear upgrades don’t fail.   The game used to be about outplaying your enemy with positioning, timing and coordination. Now it’s about:   Who has more boxes logged in.   Who is willing to swipe the credit card harder.   Who abuses the most broken script, cheat or exploit before it gets “patched”.   And let’s talk about pay‑to‑win. You can pretend it’s “supporting the server” all you want, but when someone can buy power that takes others months (or is literally impossible) to reach, that’s not support, that’s buying victories. When top players are just walking credit cards with epics, donations and event gear, you don’t have competition, you have a spending contest.   The community? It’s just as bad. Most “friends” are temporary party members until they find a better CP, clan or donation package. Drama, backstabbing, ninja looting, clan leaders selling clan resources, spies in Discord – it’s more like a cheap political simulator than an MMO. People talk about “honor” and “fair play”, then log their 10th box, run radar and target through walls.   And private servers… So many promises: “long‑term project”, “no corruption”, “no over‑enchant items”, “balanced gameplay”. Then after a few weeks you see:   Admin friends with full gear “testing”.   Hidden donations or “special offers” for “supporters”.   GMs closing their eyes to obvious abuse because it’s their buddies or biggest donors. Every wipe and every “fresh start” is just another cycle of the same lie, and we all pretend “this time will be different”.   The saddest part? Most of us know all this and still keep coming back because Lineage 2 has an insane core – the world, the classes, the adrenaline of real PvP, the politics, the sieges. But that core is buried under layers of greed, abuse, bots, scripts, egos and fake promises.   So here is the brutal truth: Lineage 2 is not a hardcore competitive MMORPG anymore. It’s a casino disguised as nostalgia, kept alive by whales, box armies and people too addicted or too hopeful to finally let go.   If you’re still playing, ask yourself honestly: Are you having fun, or are you just grinding, coping and praying that “next server” will finally be the one that isn’t corrupt, pay‑to‑win or dead in three months?   For me, I’m out. Flame me, defend the game, call me salty – I don’t care. But deep down, most of you know I’m not lying.
  • 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..