Jump to content

Recommended Posts

Posted


Index: java/net/sf/l2j/gameserver/GameServer.java

===================================================================

--- java/net/sf/l2j/gameserver/GameServer.java    (revision 21)

+++ java/net/sf/l2j/gameserver/GameServer.java    (working copy)

@@ -75,6 +75,7 @@

 import net.sf.l2j.gameserver.instancemanager.PetitionManager;

 import net.sf.l2j.gameserver.instancemanager.ZoneManager;

 import net.sf.l2j.gameserver.l2spike.botengine.BotManager;

+import net.sf.l2j.gameserver.l2spike.datatables.AuctionTable;

 import net.sf.l2j.gameserver.l2spike.datatables.IconTable;

 import net.sf.l2j.gameserver.l2spike.handler.BypassHandler;

 import net.sf.l2j.gameserver.l2spike.partymatching.PartyMatchingManager;

@@ -226,6 +227,7 @@

         IconTable.getInstance();

         BotManager.getInstance();

         PartyMatchingManager.getInstance();

+        AuctionTable.getInstance();

         

         StringUtil.printSection("System");

         Runtime.getRuntime().addShutdownHook(Shutdown.getInstance());

Index: java/net/sf/l2j/gameserver/l2spike/auction/AuctionItem.java

===================================================================

--- java/net/sf/l2j/gameserver/l2spike/auction/AuctionItem.java    (revision 0)

+++ java/net/sf/l2j/gameserver/l2spike/auction/AuctionItem.java    (revision 0)

@@ -0,0 +1,76 @@

+/*

+ * 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.

+ */

+package net.sf.l2j.gameserver.l2spike.auction;

+

+/**

+ * @author Anarchy

+ *

+ */

+public class AuctionItem

+{

+    private int auctionId;

+    private int ownerId;

+    private int itemId;

+    private int count;

+    private int enchant;

+    private int costId;

+    private int costCount;

+    

+    public AuctionItem(int auctionId, int ownerId, int itemId, int count, int enchant, int costId, int costCount)

+    {

+        this.auctionId = auctionId;

+        this.ownerId = ownerId;

+        this.itemId = itemId;

+        this.count = count;

+        this.enchant = enchant;

+        this.costId = costId;

+        this.costCount = costCount;

+    }

+    

+    public int getAuctionId()

+    {

+        return auctionId;

+    }

+    

+    public int getOwnerId()

+    {

+        return ownerId;

+    }

+    

+    public int getItemId()

+    {

+        return itemId;

+    }

+    

+    public int getCount()

+    {

+        return count;

+    }

+    

+    public int getEnchant()

+    {

+        return enchant;

+    }

+    

+    public int getCostId()

+    {

+        return costId;

+    }

+    

+    public int getCostCount()

+    {

+        return costCount;

+    }

+}

Index: java/net/sf/l2j/gameserver/l2spike/datatables/AuctionTable.java

===================================================================

--- java/net/sf/l2j/gameserver/l2spike/datatables/AuctionTable.java    (revision 0)

+++ java/net/sf/l2j/gameserver/l2spike/datatables/AuctionTable.java    (revision 0)

@@ -0,0 +1,199 @@

/*

 * 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.

 */

package net.sf.l2j.gameserver.l2spike.datatables;

 

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.Map;

import java.util.concurrent.ConcurrentHashMap;

import java.util.logging.Logger;

 

 

import net.sf.l2j.L2DatabaseFactory;

import net.sf.l2j.gameserver.l2spike.auction.AuctionItem;

 

 

/**

 * @author Anarchy

 *

 

 */

public class AuctionTable

{

    private static Logger log = Logger.getLogger(AuctionTable.class.getName());

   

    private Map<Integer, AuctionItem> items;

    private int maxId;

   

    public static AuctionTable getInstance()

    {

        return SingletonHolder._instance;

    }

   

    protected AuctionTable()

    {

        items = new ConcurrentHashMap<>();

        maxId = 0;

       

        load();

    }

   

    private void load()

    {

        try (Connection con = L2DatabaseFactory.getInstance().getConnection())

        {

            PreparedStatement stm = con.prepareStatement("SELECT * FROM auction_table");

            ResultSet rset = stm.executeQuery();

           

            while (rset.next())

            {

                int auctionId = rset.getInt("auctionid");

                int ownerId = rset.getInt("ownerid");

                int itemId = rset.getInt("itemid");

                int count = rset.getInt("count");

                int enchant = rset.getInt("enchant");

                int costId = rset.getInt("costid");

                int costCount = rset.getInt("costcount");

               

                items.put(auctionId, new AuctionItem(auctionId, ownerId, itemId, count, enchant, costId, costCount));

               

                if (auctionId > maxId)

                    maxId = auctionId;

            }

           

            rset.close();

            stm.close();

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

       

        log.info("AuctionTable: Loaded "+items.size()+" items.");

    }

   

    public void addItem(AuctionItem item)

    {

        items.put(item.getAuctionId(), item);

       

        try (Connection con = L2DatabaseFactory.getInstance().getConnection())

        {

            PreparedStatement stm = con.prepareStatement("INSERT INTO auction_table VALUES (?,?,?,?,?,?,?)");

            stm.setInt(1, item.getAuctionId());

            stm.setInt(2, item.getOwnerId());

            stm.setInt(3, item.getItemId());

            stm.setInt(4, item.getCount());

            stm.setInt(5, item.getEnchant());

            stm.setInt(6, item.getCostId());

            stm.setInt(7, item.getCostCount());

           

            stm.execute();

            stm.close();

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

    }

   

    public void deleteItem(AuctionItem item)

    {

        items.remove(item);

       

        try (Connection con = L2DatabaseFactory.getInstance().getConnection())

        {

            PreparedStatement stm = con.prepareStatement("DELETE FROM auction_table WHERE auctionid=?");

            stm.setInt(1, item.getAuctionId());

           

            stm.execute();

            stm.close();

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

    }

   

    public AuctionItem getItem(int auctionId)

    {

        return items.get(auctionId);

    }

   

    public Map<Integer, AuctionItem> getItems()

    {

        return items;

    }

   

    public int getNextAuctionId()

    {

        maxId++;

        return maxId;

    }

   

    private static class SingletonHolder

    {

        protected static final AuctionTable _instance = new AuctionTable();

    }}

 

Index: java/net/sf/l2j/gameserver/model/actor/instance/L2AuctionManagerInstance.java

===================================================================

--- java/net/sf/l2j/gameserver/model/actor/instance/L2AuctionManagerInstance.java    (revision 0)

+++ java/net/sf/l2j/gameserver/model/actor/instance/L2AuctionManagerInstance.java    (revision 0)

@@ -0,0 +1,512 @@

/*

 * 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.

 */

package net.sf.l2j.gameserver.model.actor.instance;

 

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

 

 

import net.sf.l2j.commons.lang.StringUtil;

 

 

import net.sf.l2j.L2DatabaseFactory;

import net.sf.l2j.gameserver.datatables.ItemTable;

import net.sf.l2j.gameserver.idfactory.IdFactory;

import net.sf.l2j.gameserver.l2spike.auction.AuctionItem;

import net.sf.l2j.gameserver.l2spike.datatables.AuctionTable;

import net.sf.l2j.gameserver.l2spike.datatables.IconTable;

import net.sf.l2j.gameserver.model.World;

import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;

import net.sf.l2j.gameserver.model.item.instance.ItemInstance;

import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;

import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;

 

 

/**

 * @author Anarchy

 *

 */

public class L2AuctionManagerInstance extends L2NpcInstance

{

    public L2AuctionManagerInstance(int objectId, NpcTemplate template)

    {

        super(objectId, template);

    }

   

    @Override

    public void onBypassFeedback(L2PcInstance player, String command)

    {

        if (command.startsWith("auction"))

        {

            try

            {

                String[] data = command.substring(8).split(" - ");

                int page = Integer.parseInt(data[0]);

                String search = data[1];

                showAuction(player, page, search);

            }

            catch (Exception e)

            {

                showChatWindow(player);

                player.sendMessage("Invalid input. Please try again.");

                return;

            }

        }

        else if (command.startsWith("buy"))

        {

            int auctionId = Integer.parseInt(command.substring(4));

            AuctionItem item = AuctionTable.getInstance().getItem(auctionId);

           

            if (item == null)

            {

                showChatWindow(player);

                player.sendMessage("Invalid choice. Please try again.");

                return;

            }

           

            if (player.getInventory().getItemByItemId(item.getCostId()) == null || player.getInventory().getItemByItemId(item.getCostId()).getCount() < item.getCostCount())

            {

                showChatWindow(player);

                player.sendMessage("Incorrect item count.");

                return;

            }

           

            player.destroyItemByItemId("auction", item.getCostId(), item.getCostCount(), this, true);

           

            L2PcInstance owner = World.getInstance().getPlayer(item.getOwnerId());

            if (owner != null && owner.isOnline())

            {

                owner.addItem("auction", item.getCostId(), item.getCostCount(), null, true);

                owner.sendMessage("You have sold an item in the Auction Shop.");

            }

            else

            {

                addItemToOffline(item.getOwnerId(), item.getCostId(), item.getCostCount());

            }

           

            ItemInstance i = player.addItem("auction", item.getItemId(), item.getCount(), this, true);

            i.setEnchantLevel(item.getEnchant());

            player.sendPacket(new InventoryUpdate());

            player.sendMessage("You have purchased an item from the Auction Shop.");

           

            AuctionTable.getInstance().deleteItem(item);

           

            showChatWindow(player);

        }

        else if (command.startsWith("addpanel"))

        {

            int page = Integer.parseInt(command.substring(9));

 

           

            showAddPanel(player, page);

        }

        else if (command.startsWith("additem"))

        {

            int itemId = Integer.parseInt(command.substring(8));

           

            if (player.getInventory().getItemByObjectId(itemId) == null)

            {

                showChatWindow(player);

                player.sendMessage("Invalid item. Please try again.");

                return;

            }

           

            showAddPanel2(player, itemId);

        }

        else if (command.startsWith("addit2"))

        {

            try

            {

                String[] data = command.substring(7).split(" ");

                int itemId = Integer.parseInt(data[0]);

                String costitemtype = data[1];

                int costCount = Integer.parseInt(data[2]);

                int itemAmount = Integer.parseInt(data[3]);

               

                if (player.getInventory().getItemByObjectId(itemId) == null)

                {

                    showChatWindow(player);

                    player.sendMessage("Invalid item. Please try again.");

                    return;

                }

                if (player.getInventory().getItemByObjectId(itemId).getCount() < itemAmount)

                {

                    showChatWindow(player);

                    player.sendMessage("Invalid item. Please try again.");

                    return;

                }

                if (!player.getInventory().getItemByObjectId(itemId).isTradable())

                {

                    showChatWindow(player);

                    player.sendMessage("Invalid item. Please try again.");

                    return;

                }

               

                int costId = 0;

                if (costitemtype.equals("Adena"))

                {

                    costId = 57;

                }

               

                AuctionTable.getInstance().addItem(new AuctionItem(AuctionTable.getInstance().getNextAuctionId(), player.getObjectId(), player.getInventory().getItemByObjectId(itemId).getItemId(), itemAmount, player.getInventory().getItemByObjectId(itemId).getEnchantLevel(), costId, costCount));

               

                player.destroyItem("auction", itemId, itemAmount, this, true);

                player.sendPacket(new InventoryUpdate());

                player.sendMessage("You have added an item for sale in the Auction Shop.");

                showChatWindow(player);

            }

            catch (Exception e)

            {

                showChatWindow(player);

                player.sendMessage("Invalid input. Please try again.");

                return;

            }

        }

        else if (command.startsWith("myitems"))

 

        {

            int page = Integer.parseInt(command.substring(8));

            showMyItems(player, page);

        }

        else if (command.startsWith("remove"))

        {

            int auctionId = Integer.parseInt(command.substring(7));

            AuctionItem item = AuctionTable.getInstance().getItem(auctionId);

           

            if (item == null)

            {

                showChatWindow(player);

                player.sendMessage("Invalid choice. Please try again.");

                return;

            }

           

            AuctionTable.getInstance().deleteItem(item);

           

            ItemInstance i = player.addItem("auction", item.getItemId(), item.getCount(), this, true);

            i.setEnchantLevel(item.getEnchant());

            player.sendPacket(new InventoryUpdate());

            player.sendMessage("You have removed an item from the Auction Shop.");

            showChatWindow(player);

        }

        else

        {

            super.onBypassFeedback(player, command);

        }

    }

   

    private void showMyItems(L2PcInstance player, int page)

    {

        HashMap<Integer, ArrayList<AuctionItem>> items = new HashMap<>();

        int curr = 1;

        int counter = 0;

       

        ArrayList<AuctionItem> temp = new ArrayList<>();

        for (Map.Entry<Integer, AuctionItem> entry : AuctionTable.getInstance().getItems().entrySet())

        {

            if (entry.getValue().getOwnerId() == player.getObjectId())

            {

                temp.add(entry.getValue());

               

                counter++;

               

                if (counter == 10)

                {

                    items.put(curr, temp);

                    temp = new ArrayList<>();

                    curr++;

                    counter = 0;

                }

            }

        }

        items.put(curr, temp);

       

        if (!items.containsKey(page))

        {

            showChatWindow(player);

            player.sendMessage("Invalid page. Please try again.");

            return;

        }

       

        String html = "";

        html += "<html><title>Auction Shop</title><body><center><br1>";

        html += "<table width=310 bgcolor=000000 border=1>";

        html += "<tr><td>Item</td><td>Cost</td><td></td></tr>";

        for (AuctionItem item : items.get(page))

        {

            html += "<tr>";

            html += "<td><img src=\""+IconTable.getInstance().getIcon(item.getItemId())+"\" width=32 height=32 align=center></td>";

            html += "<td>Item: "+(item.getEnchant() > 0 ? "+"+item.getEnchant()+" "+ItemTable.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount() : ItemTable.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount());

            html += "<br1>Cost: "+StringUtil.formatNumber(item.getCostCount())+" "+ItemTable.getInstance().getTemplate(item.getCostId()).getName();

            html += "</td>";

            html += "<td fixwidth=71><button value=\"Remove\" action=\"bypass -h npc_"+getObjectId()+"_remove "+item.getAuctionId()+"\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">";

            html += "</td></tr>";

        }

        html += "</table><br><br>";

       

        html += "Page: "+page;

        html += "<br1>";

       

        if (items.keySet().size() > 1)

        {

            if (page > 1)

                html += "<a action=\"bypass -h npc_"+getObjectId()+"_myitems "+(page-1)+"\"><- Prev</a>";

           

            if (items.keySet().size() > page)

                html += "<a action=\"bypass -h npc_"+getObjectId()+"_myitems "+(page+1)+"\">Next -></a>";

        }

       

        html += "</center></body></html>";

       

        NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());

        htm.setHtml(html);

        player.sendPacket(htm);

    }

   

    private void showAddPanel2(L2PcInstance player, int itemId)

    {

        ItemInstance item = player.getInventory().getItemByObjectId(itemId);

       

        String html = "";

        html += "<html><title>Auction Shop</title><body><center><br1>";

        html += "<img src=\""+IconTable.getInstance().getIcon(item.getItemId())+"\" width=32 height=32 align=center>";

        html += "Item: "+(item.getEnchantLevel() > 0 ? "+"+item.getEnchantLevel()+" "+item.getName() : item.getName());

       

        if (item.isStackable())

        {

            html += "<br>Set amount of items to sell:";

            html += "<edit var=amm type=number width=120 height=17>";

        }

       

        html += "<br>Select price:";

        html += "<br><combobox width=120 height=17 var=ebox list=Adena;>";

        html += "<br><edit var=count type=number width=120 height=17>";

        html += "<br><button value=\"Add item\" action=\"bypass -h npc_"+getObjectId()+"_addit2 "+itemId+" $ebox $count "+(item.isStackable() ? "$amm" : "1")+"\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">";

        html += "</center></body></html>";

       

        NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());

        htm.setHtml(html);

        player.sendPacket(htm);

    }

   

    private void showAddPanel(L2PcInstance player, int page)

    {

        HashMap<Integer, ArrayList<ItemInstance>> items = new HashMap<>();

        int curr = 1;

        int counter = 0;

       

        ArrayList<ItemInstance> temp = new ArrayList<>();

        for (ItemInstance item : player.getInventory().getItems())

        {

            if (item.getItemId() != 57 && item.isTradable())

            {

                temp.add(item);

               

                counter++;

               

                if (counter == 10)

                {

                    items.put(curr, temp);

                    temp = new ArrayList<>();

                    curr++;

                    counter = 0;

                }

            }

        }

        items.put(curr, temp);

       

        if (!items.containsKey(page))

        {

            showChatWindow(player);

            player.sendMessage("Invalid page. Please try again.");

            return;

        }

       

        String html = "";

        html += "<html><title>Auction Shop</title><body><center><br1>";

        html += "Select item:";

        html += "<br><table width=310 bgcolor=000000 border=1>";

       

        for (ItemInstance item : items.get(page))

        {

            html += "<tr>";

            html += "<td>";

            html += "<img src=\""+IconTable.getInstance().getIcon(item.getItemId())+"\" width=32 height=32 align=center></td>";

            html += "<td>"+(item.getEnchantLevel() > 0 ? "+"+item.getEnchantLevel()+" "+item.getName() : item.getName());

            html += "</td>";

            html += "<td><button value=\"Select\" action=\"bypass -h npc_"+getObjectId()+"_additem "+item.getObjectId()+"\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">";

            html += "</td>";

            html += "</tr>";

        }

        html += "</table><br><br>";

       

        html += "Page: "+page;

        html += "<br1>";

       

        if (items.keySet().size() > 1)

        {

            if (page > 1)

                html += "<a action=\"bypass -h npc_"+getObjectId()+"_addpanel "+(page-1)+"\"><- Prev</a>";

           

            if (items.keySet().size() > page)

                html += "<a action=\"bypass -h npc_"+getObjectId()+"_addpanel "+(page+1)+"\">Next -></a>";

        }

       

        html += "</center></body></html>";

       

        NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());

        htm.setHtml(html);

        player.sendPacket(htm);

    }

   

    @SuppressWarnings("resource")

    private static void addItemToOffline(int playerId, int itemId, int count)

    {

        try (Connection con = L2DatabaseFactory.getInstance().getConnection())

        {

            PreparedStatement stm = con.prepareStatement("SELECT count FROM items WHERE owner_id=? AND item_id=?");

            stm.setInt(1, playerId);

            stm.setInt(2, itemId);

            ResultSet rset = stm.executeQuery();

           

            if (rset.next())

            {

                stm = con.prepareStatement("UPDATE items SET count=? WHERE owner_id=? AND item_id=?");

                stm.setInt(1, rset.getInt("count") + count);

                stm.setInt(2, playerId);

                stm.setInt(3, itemId);

               

                stm.execute();

            }

            else

            {

                stm = con.prepareStatement("INSERT INTO items VALUES (?,?,?,?,?,?,?,?,?,?,?,?)");

                stm.setInt(1, playerId);

                stm.setInt(2, IdFactory.getInstance().getNextId());

                stm.setInt(3, itemId);

                stm.setInt(4, count);

                stm.setInt(5, 0);

                stm.setString(6, "INVENTORY");

                stm.setInt(7, 0);

                stm.setInt(8, 0);

                stm.setInt(9, 0);

                stm.setInt(10, 0);

                stm.setInt(11, -1);

                stm.setInt(12, 0);

               

                stm.execute();

            }

           

            rset.close();

            stm.close();

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

    }

   

    private void showAuction(L2PcInstance player, int page, String search)

    {

        boolean src = !search.equals("*null*");

       

        HashMap<Integer, ArrayList<AuctionItem>> items = new HashMap<>();

        int curr = 1;

        int counter = 0;

       

        ArrayList<AuctionItem> temp = new ArrayList<>();

        for (Map.Entry<Integer, AuctionItem> entry : AuctionTable.getInstance().getItems().entrySet())

        {

            if (entry.getValue().getOwnerId() != player.getObjectId() && (!src || (src && ItemTable.getInstance().getTemplate(entry.getValue().getItemId()).getName().contains(search))))

            {

                temp.add(entry.getValue());

               

                counter++;

               

                if (counter == 10)

                {

                    items.put(curr, temp);

                    temp = new ArrayList<>();

                    curr++;

                    counter = 0;

                }

            }

        }

        items.put(curr, temp);

       

        if (!items.containsKey(page))

        {

            showChatWindow(player);

            player.sendMessage("Invalid page. Please try again.");

            return;

        }

       

        String html = "<html><title>Auction Shop</title><body><center><br1>";

        html += "<multiedit var=srch width=150 height=20><br1>";

        html += "<button value=\"Search\" action=\"bypass -h npc_"+getObjectId()+"_auction 1 - $srch\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">";

        html += "<br><table width=310 bgcolor=000000 border=1>";

        html += "<tr><td>Item</td><td>Cost</td><td></td></tr>";

        for (AuctionItem item : items.get(page))

        {

            html += "<tr>";

            html += "<td><img src=\""+IconTable.getInstance().getIcon(item.getItemId())+"\" width=32 height=32 align=center></td>";

            html += "<td>Item: "+(item.getEnchant() > 0 ? "+"+item.getEnchant()+" "+ItemTable.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount() : ItemTable.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount());

            html += "<br1>Cost: "+StringUtil.formatNumber(item.getCostCount())+" "+ItemTable.getInstance().getTemplate(item.getCostId()).getName();

            html += "</td>";

            html += "<td fixwidth=71><button value=\"Buy\" action=\"bypass -h npc_"+getObjectId()+"_buy "+item.getAuctionId()+"\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">";

            html += "</td></tr>";

        }

        html += "</table><br><br>";

       

        html += "Page: "+page;

        html += "<br1>";

       

        if (items.keySet().size() > 1)

        {

            if (page > 1)

                html += "<a action=\"bypass -h npc_"+getObjectId()+"_auction "+(page-1)+" - "+search+"\"><- Prev</a>";

           

            if (items.keySet().size() > page)

                html += "<a action=\"bypass -h npc_"+getObjectId()+"_auction "+(page+1)+" - "+search+"\">Next -></a>";

        }

       

        html += "</center></body></html>";

       

        NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());

        htm.setHtml(html);

        player.sendPacket(htm);

    }

   

    @Override

    public String getHtmlPath(int npcId, int val)

    {

        String pom = "";

        if (val == 0)

            pom = "" + npcId;

        else

            pom = npcId + "-" + val;

               

        return "data/html/l2spike/auction/" + pom + ".htm";

    }}

 

Index: data/html/l2spike/auction/65529.htm

===================================================================

--- data/html/l2spike/auction/65529.htm    (revision 0)

+++ data/html/l2spike/auction/65529.htm    (revision 0)

@@ -0,0 +1,25 @@

+<html>

+<title>

+Auction Shop

+</title>

+<body>

+<center>

+<img src="l2spike.npclogo" width=256 height=95>

+<br><img src="l2spike.splitter" width=256 height=8 align=center>

+<br>

+Welcome to L2Spike auction shop!

+<br>

+<table width=230 bgcolor="000000">

+    <tr>

+        <td align=center>

+            <button value="Shop" action="bypass -h npc_%objectId%_auction 1 - *null*" width=204 height=20 back="sek.cbui81" fore="sek.cbui82">

+            <button value="Add item" action="bypass -h npc_%objectId%_addpanel 1" width=204 height=20 back="sek.cbui81" fore="sek.cbui82">

+            <button value="My items" action="bypass -h npc_%objectId%_myitems 1" width=204 height=20 back="sek.cbui81" fore="sek.cbui82">

+        </td>

+    </tr>

+</table>

+<br>

+<img src="l2spike.splitter" width=256 height=8 align=center>

+</center>

+</body>

+</html>

\ No newline at end of file

Index: sql/auction_table.sql

===================================================================

--- sql/auction_table.sql    (revision 0)

+++ sql/auction_table.sql    (revision 0)

@@ -0,0 +1,10 @@

+CREATE TABLE IF NOT EXISTS `auction_table` (

+  `auctionid` INT UNSIGNED NOT NULL DEFAULT 0,

+  `ownerid` INT UNSIGNED NOT NULL DEFAULT 0,

+  `itemid` INT UNSIGNED NOT NULL DEFAULT 0,

+  `count` INT UNSIGNED NOT NULL DEFAULT 0,

+  `enchant` INT UNSIGNED NOT NULL DEFAULT 0,

+  `costid` INT UNSIGNED NOT NULL DEFAULT 0,

+  `costcount` INT UNSIGNED NOT NULL DEFAULT 0,

+  PRIMARY KEY (auctionid)

+);

Index: tools/database_installer.bat

===================================================================

--- tools/database_installer.bat    (revision 17)

+++ tools/database_installer.bat    (working copy)

@@ -104,6 +104,7 @@

 %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/topic.sql

 %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/character_schemes.sql

 %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/bots.sql

+%mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/auction_table.sql

 

 echo Done.

 echo.

Index: tools/database_installer.sh

===================================================================

--- tools/database_installer.sh    (revision 17)

+++ tools/database_installer.sh    (working copy)

@@ -124,6 +124,7 @@

 $MYG < ../sql/topic.sql &> /dev/null

 $MYG < ../sql/character_schemes.sql &> /dev/null

 $MYG < ../sql/bots.sql &> /dev/null

+$MYG < ../sql/auction_table.sql &> /dev/null

 echo ""

 echo "Was fast, isn't it ?"

 }

Index: tools/full_install.sql

===================================================================

--- tools/full_install.sql    (revision 17)

+++ tools/full_install.sql    (working copy)

@@ -45,4 +45,5 @@

 DROP TABLE IF EXISTS siege_clans;

 DROP TABLE IF EXISTS topic;

 DROP TABLE IF EXISTS character_schemes;

-DROP TABLE IF EXISTS bots;

\ No newline at end of file

+DROP TABLE IF EXISTS bots;

+DROP TABLE IF EXISTS auction_table;

\ No newline at end of file

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • https://web.archive.org/web/20260306183214/https://maxcheaters.com/topic/241828-l2j-l2damage/page/3/ https://l2topzone.com/forum/l2-server-support-problems/9/l2damage-stopped/30514 Also we will try to push longer seasons ever ! (1135-100)/9 = 115 online
    • ONE SIDE – AND EVERYTHING BREAKS ▪ Looks like a simple case: Florida DL, back side, barcode – “clean and minimal”. ▪ In reality, these are exactly the tasks that fail most often. – data provided as plain text – request only for the back side – focus on the barcode (PDF417) ▪ And here’s the key point: ▪ A barcode is not just a “picture on the back”. It’s compressed logic of the entire document. ▪ If it doesn’t match the front, format, and data structure – the system flags it instantly. ▪ Many create a “similar-looking” code. But systems don’t read “similar” – they read by specification. ▪ In cases like this, it’s not about design. It’s about correct data assembly and how it behaves inside the format. ▪ Today only – 15% off for verification cases. ▪ Want it to pass, not just look right? Describe your case – we’ll show where even clean files break. › TG: @mustang_service ( https:// t.me/ mustang_service ) › Channel: Mustang Service ( https:// t.me/ +JPpJCETg-xM1NjNl ) #editing #photoshop #documents #verification #case
    • Your anonymity is a corpse. Blockchain forgets nothing. Your transactions are direct footprints in the hands of anyone who takes an interest. [✘] Still believe in "mixing"? Forget it. Classic Bitcoin mixers are an illusion of security. For Chainalysis and Elliptic algorithms, any attempt to hide tracks in the ledger is transparent. Your "mixing" is an artifact that gets filtered out in seconds. Every transaction leaves a trail that leads to frozen assets or unwanted questions from exchanges.  We don't mix. We break the link. [-] Input: Your "dirty" coins (Dirty BTC/ETH) with all their history and digital markers stay with us. [+] Output: You receive absolutely clean assets (Clean Crypto) from our reserves, which have never intersected with your past. This isn't a game of hide and seek. This is the surgical removal of your financial history from the system.   ------------------------------------------------------------------- Technical indexing: Bitcoin Mixer, Crypto Mixer, Clean BTC, Clean ETH, Anti-Chainalysis, Best Bitcoin Mixer, Anonymous Crypto Exchange, NoLog Mixing Service.
    • Here you are: https://l2crypt.com/l2-tools/l2editor-source/
  • 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..