activeChar.getAdena() Posted June 5, 2015 Posted June 5, 2015 (edited) Hello MaxCheaters, i want to ask how can i make pages every 6 items on this NpcInstance. Here Java Code /* This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * * http://www.gnu.org/copyleft/gpl.html */ package com.l2jfrozen.gameserver.model.actor.instance; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.StringTokenizer; import com.l2jfrozen.gameserver.ai.CtrlIntention; import com.l2jfrozen.gameserver.datatables.sql.ItemTable; import com.l2jfrozen.gameserver.network.SystemMessageId; import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed; import com.l2jfrozen.gameserver.network.serverpackets.CharInfo; import com.l2jfrozen.gameserver.network.serverpackets.InventoryUpdate; import com.l2jfrozen.gameserver.network.serverpackets.MyTargetSelected; import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage; import com.l2jfrozen.gameserver.network.serverpackets.UserInfo; import com.l2jfrozen.gameserver.network.serverpackets.ValidateLocation; import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance; import com.l2jfrozen.gameserver.templates.L2NpcTemplate; import com.l2jfrozen.util.CloseUtil; import com.l2jfrozen.util.database.L2DatabaseFactory; import javolution.text.TextBuilder; /** * * @author Elfocrash * */ public class L2SmartMultisellInstance extends L2FolkInstance { public L2SmartMultisellInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public void onBypassFeedback(L2PcInstance player, String command) { if(player == null) { return; } if(command.startsWith("buyItem ")) { String itemId = null; StringTokenizer st = new StringTokenizer(command, " "); while (st.hasMoreTokens()) { itemId = st.nextToken(); } int id = Integer.parseInt(itemId); if(player.getInventory().getItemByItemId(getItemCostId(id)).getCount() >= getItemCostCount(id)) { player.getInventory().destroyItemByItemId("delete", getItemCostId(id), getItemCostCount(id), player, null); L2ItemInstance item = null; item = player.getInventory().addItem("Elfo", getItemId(id), 1, null, null); item.setEnchantLevel(getItemEnchant(id)); // send packets InventoryUpdate iu = new InventoryUpdate(); iu.addItem(item); player.sendPacket(iu); player.broadcastPacket(new CharInfo(player)); player.sendPacket(new UserInfo(player)); SystemMessage sm = new SystemMessage(SystemMessageId.YOU_PICKED_UP_S1_S2); sm.addItemName(item.getItemId()); sm.addNumber(1); player.sendPacket(sm); iu = null; } else { player.sendMessage("You don't have enough items in order to buy this one"); return; } } } @Override public void onAction(L2PcInstance player) { if (!canTarget(player)) { return; } if (this != player.getTarget()) { player.setTarget(this); player.sendPacket(new MyTargetSelected(getObjectId(), 0)); player.sendPacket(new ValidateLocation(this)); } else if (!canInteract(player)) { player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this); } else { showHtmlWindow(player); } player.sendPacket(new ActionFailed()); } private void showHtmlWindow(L2PcInstance activeChar) { NpcHtmlMessage nhm = new NpcHtmlMessage(5); TextBuilder tb = new TextBuilder(""); tb.append("<html><head><title>Smart Shop</title></head><body>"); tb.append("<center>"); tb.append("<table width=\"250\" cellpadding=\"5\" bgcolor=\"000000\">"); tb.append("<tr>"); tb.append("<td width=\"45\" valign=\"top\" align=\"center\"><img src=\"L2ui_ch3.menubutton4\" width=\"38\" height=\"38\"></td>"); tb.append("<td valign=\"top\"><font color=\"FF6600\">Smart Shop</font>"); tb.append("<br1><font color=\"00FF00\">"+activeChar.getName()+"</font>, Here you can buy Enchanted Gear.</td>"); tb.append("</tr>"); tb.append("</table>"); tb.append("</center>"); tb.append("<center>"); for(int i = 1; i<= getRowsCount(); i++) tb.append("<br><a action=\"bypass -h npc_" + getObjectId() + "_buyItem " + i + "\">Item name: " + ItemTable.getInstance().getTemplate(getItemId(i)).getName() + " Enchant: +"+ getItemEnchant(i) + " Cost: " + getItemCostCount(i) + " " + ItemTable.getInstance().getTemplate(getItemCostId(i)).getName() + "</a>"); tb.append("</center>"); tb.append("<center>"); tb.append("<img src=\"l2ui_ch3.herotower_deco\" width=256 height=32 align=center>"); tb.append("<font color=\"FF6600\">By Elfocrash</font>"); tb.append("</center>"); tb.append("</body></html>"); nhm.setHtml(tb.toString()); activeChar.sendPacket(nhm); activeChar.sendPacket(new ActionFailed()); } private int getRowsCount() { int rows = 0; Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("SELECT * FROM smart_shop"); ResultSet rset = statement.executeQuery(); while (rset.next()) { rows++; } rset.close(); statement.close(); } catch(Exception e) { e.printStackTrace(); }finally{ CloseUtil.close(con); con = null; } return rows; } private int getItemId(int itemId) { int itemIdd = 0; Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("SELECT item_id FROM smart_shop WHERE id=?"); statement.setInt(1, itemId); ResultSet rset = statement.executeQuery(); while (rset.next()) { itemIdd = rset.getInt("item_id"); } rset.close(); statement.close(); } catch(Exception e) { e.printStackTrace(); }finally{ CloseUtil.close(con); con = null; } return itemIdd; } private int getItemCostId(int costid) { int costIt = 0; Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("SELECT cost_item_id FROM smart_shop WHERE id=?"); statement.setInt(1, costid); ResultSet rset = statement.executeQuery(); while (rset.next()) { costIt = rset.getInt("cost_item_id"); } rset.close(); statement.close(); } catch(Exception e) { e.printStackTrace(); }finally{ CloseUtil.close(con); con = null; } return costIt; } private int getItemCostCount(int costid) { int costIt = 0; Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("SELECT cost_item_count FROM smart_shop WHERE id=?"); statement.setInt(1, costid); ResultSet rset = statement.executeQuery(); while (rset.next()) { costIt = rset.getInt("cost_item_count"); } rset.close(); statement.close(); } catch(Exception e) { e.printStackTrace(); }finally{ CloseUtil.close(con); con = null; } return costIt; } private int getItemEnchant(int id) { int itemEnch = 0; Connection con = null; PreparedStatement statement = null; try { con = L2DatabaseFactory.getInstance().getConnection(); statement = con.prepareStatement("SELECT item_enchant FROM smart_shop WHERE id=?"); statement.setInt(1, id); ResultSet rset = statement.executeQuery(); while (rset.next()) { itemEnch = rset.getInt("item_enchant"); } rset.close(); statement.close(); } catch(Exception e) { e.printStackTrace(); }finally{ CloseUtil.close(con); con = null; } return itemEnch; } } Here SQL /* Navicat MySQL Data Transfer Source Server : localhost Source Server Version : 50519 Source Host : localhost:3306 Source Database : l2jfrozen Target Server Type : MYSQL Target Server Version : 50519 File Encoding : 65001 Date: 2013-01-17 18:22:51 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `smart_shop` -- ---------------------------- DROP TABLE IF EXISTS `smart_shop`; CREATE TABLE `smart_shop` ( `id` int(1) NOT NULL DEFAULT '0', `item_id` int(5) DEFAULT NULL, `item_enchant` int(5) DEFAULT NULL, `cost_item_id` int(5) DEFAULT NULL, `cost_item_count` bigint(16) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; //Edit I want to make it like this (at the moment pages not working) Edited June 5, 2015 by activeChar.getAdena() Quote
0 Tryskell Posted June 6, 2015 Posted June 6, 2015 (edited) You can inspire yourself about admincommands. Some of them got a page system. On aCis, I use a specific method to calculate number of page, then I sublist the ArrayList holding infos. It's shorter/easier writing style than "old" stuff you find on L2JFrozen and L2J. /** * @param numberOfObjects : The overall elements size. * @param pageSize : The number of elements per page. * @return The number of pages, based on the number of elements and the number of elements we want per page. */ public static int countNumberOfPages(int numberOfObjects, int pageSize) { return numberOfObjects / pageSize + (numberOfObjects % pageSize == 0 ? 0 : 1); } Used for example like : final int objId = activeChar.getObjectId(); List<L2Bookmark> bookmarks = BookmarkTable.getInstance().getBookmarks(objId); // Load static Htm. final NpcHtmlMessage html = new NpcHtmlMessage(0); html.setFile("data/html/admin/bk.htm"); if (bookmarks.isEmpty()) { html.replace("%locs%", "<tr><td>No bookmarks are currently registered.</td></tr>"); activeChar.sendPacket(html); return; } final int max = MathUtil.countNumberOfPages(bookmarks.size(), PAGE_LIMIT); bookmarks = bookmarks.subList((page - 1) * PAGE_LIMIT, Math.min(page * PAGE_LIMIT, bookmarks.size())); "bookmarks" holds good info, and only the good info. You have to define PAGE_LIMIT under a static int aswell. private static final int PAGE_LIMIT = 15; The count of pages begins to 0 (page 0 = 0 to 14, etc). Edited June 6, 2015 by Tryskell Quote
0 activeChar.getAdena() Posted June 7, 2015 Author Posted June 7, 2015 Im now on java.. and i cant understand this logic of pages :/ If you can make me one code inside this "L2SmartInstance" i will find the way to make page and on another Codes :) but i need a little help :) Quote
0 Tryskell Posted June 7, 2015 Posted June 7, 2015 Tbh there is nothing to understand, the whole code is here.... The only things you need is the total size of the array (whatever.size()), the PAGE_LIMIT, and the actual page you're looking on. I already posted what I use for page system for my bookmark system. The complete method : /** * Show the basic HTM fed with generated data. * @param activeChar The player to make checks on. * @param page The page id to show. */ private static void showBookmarks(L2PcInstance activeChar, int page) { final int objId = activeChar.getObjectId(); List<L2Bookmark> bookmarks = BookmarkTable.getInstance().getBookmarks(objId); // Load static Htm. final NpcHtmlMessage html = new NpcHtmlMessage(0); html.setFile("data/html/admin/bk.htm"); if (bookmarks.isEmpty()) { html.replace("%locs%", "<tr><td>No bookmarks are currently registered.</td></tr>"); activeChar.sendPacket(html); return; } final int max = MathUtil.countNumberOfPages(bookmarks.size(), PAGE_LIMIT); bookmarks = bookmarks.subList((page - 1) * PAGE_LIMIT, Math.min(page * PAGE_LIMIT, bookmarks.size())); // Generate data. final StringBuilder sb = new StringBuilder(2000); for (L2Bookmark bk : bookmarks) { final String name = bk.getName(); final int x = bk.getX(); final int y = bk.getY(); final int z = bk.getZ(); StringUtil.append(sb, "<tr><td><a action=\"bypass -h admin_move_to ", x, " ", y, " ", z, "\">", name, " (", x, " ", y, " ", z, ")", "</a></td><td><a action=\"bypass -h admin_delbk ", name, "\">Remove</a></td></tr>"); } html.replace("%locs%", sb.toString()); // Cleanup the sb. sb.setLength(0); // End of table, open a new table for pages system. for (int i = 0; i < max; i++) { final int pagenr = i + 1; if (page == pagenr) StringUtil.append(sb, pagenr, " "); else StringUtil.append(sb, "<a action=\"bypass -h admin_bkpage ", pagenr, "\">", pagenr, "</a> "); } html.replace("%pages%", sb.toString()); activeChar.sendPacket(html); } Quote
0 activeChar.getAdena() Posted June 8, 2015 Author Posted June 8, 2015 i try but... nothing :/ only errors :( Quote
0 vampir Posted June 9, 2015 Posted June 9, 2015 So i can suggest you to start with some smaller modifications. If you will spend some time on learning how everything works, you will be able to do a lot better things than just pages inside html :) Quote
0 Tryskell Posted June 10, 2015 Posted June 10, 2015 Well the method I put is way easier to understand than L2J one, so if you don't understand, you won't understand L2J way. I suggest you to take time to read it until you understand, all is correctly documented. The idea is you got a list of elements, you retrieve size, you get page, you get page limit, so it calculates max page amount. Then you sublist the overall list to retrieve only elements for current page, and process result. Got nothing more to say tbh, except doing it for you, which I won't do. Quote
0 activeChar.getAdena() Posted June 16, 2015 Author Posted June 16, 2015 emmmm guys... i know how to make page... but i cant stop page 1 (one) to stop on 6th item... and dont show me the other list... thats my problem on NPC. Quote
0 Tryskell Posted June 22, 2015 Posted June 22, 2015 (edited) emmmm guys... i know how to make page... but i cant stop page 1 (one) to stop on 6th item... and dont show me the other list... thats my problem on NPC. Analyze what I wrote, the subList section does it for you. Edited June 22, 2015 by Tryskell Quote
Question
activeChar.getAdena()
Hello MaxCheaters, i want to ask how can i make pages every 6 items on this NpcInstance.

//Edit
I want to make it like this (at the moment pages not working)

Edited by activeChar.getAdena()9 answers to this question
Recommended Posts
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.