Jump to content
  • 0

[help]offline trade adapt to L2jC4


Question

Posted

hello guys. Please help me to adapt some parts of code, from Interlude server packs to L2jC4. Here is this patch:

 

package com.l2jserver.gameserver.datatables;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;

import net.sf.l2j.Config;
import net.sf.l2j.L2DatabaseFactory;
import net.sf.l2j.gameserver.LoginServerThread;
import net.sf.l2j.gameserver.model.L2ManufactureItem;
import net.sf.l2j.gameserver.model.L2ManufactureList;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.model.TradeList.TradeItem;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.ClientThread; // ???? WHERE this in L2jC4??
import com.l2jserver.gameserver.network.L2GameClient.GameClientState; // Again???

public class OfflineTradersTable
{
   private static Logger _log = Logger.getLogger(OfflineTradersTable.class.getName());
  
   //SQL DEFINITIONS
   private static final String SAVE_OFFLINE_STATUS = "INSERT INTO character_offline_trade (`charId`,`time`,`type`,`title`) VALUES (?,?,?,?)";
   private static final String SAVE_ITEMS = "INSERT INTO character_offline_trade_items (`charId`,`item`,`count`,`price`) VALUES (?,?,?,?)";
   private static final String CLEAR_OFFLINE_TABLE = "DELETE FROM character_offline_trade";
   private static final String CLEAR_OFFLINE_TABLE_ITEMS = "DELETE FROM character_offline_trade_items";
   private static final String LOAD_OFFLINE_STATUS = "SELECT * FROM character_offline_trade";
   private static final String LOAD_OFFLINE_ITEMS = "SELECT * FROM character_offline_trade_items WHERE charId = ?";
   
   public static void storeOffliners()
   {
      Connection con = null;
      try
      {
         con = L2DatabaseFactory.getInstance().getConnection();
         PreparedStatement stm = con.prepareStatement(CLEAR_OFFLINE_TABLE);
         stm.execute();
         stm.close();
         stm = con.prepareStatement(CLEAR_OFFLINE_TABLE_ITEMS);
         stm.execute();
        stm.close();
         
         con.setAutoCommit(false); // avoid halfway done
        stm = con.prepareStatement(SAVE_OFFLINE_STATUS);
      PreparedStatement stm_items = con.prepareStatement(SAVE_ITEMS);
         
        //TextBuilder items = TextBuilder.newInstance();
         for (L2PcInstance pc : L2World.getInstance().getAllPlayers().values())
         {
          try
           {
               if ((pc.getPrivateStoreType() != L2PcInstance.STORE_PRIVATE_NONE) && (pc.getClient() == null || pc.getClient().isDetached()))
               {
                  stm.setInt(1, pc.getObjectId()); //Char Id
                 stm.setLong(2, pc.getOfflineStartTime());
                  stm.setInt(3, pc.getPrivateStoreType()); //store type
                 String title = null;
                  
                 switch (pc.getPrivateStoreType())
                 {
                     case L2PcInstance.STORE_PRIVATE_BUY:
                       if (!Config.OFFLINE_TRADE_ENABLE)
                          continue;
                       title = pc.getBuyList().getTitle();
                        for (TradeItem i : pc.getBuyList().getItems())
                       {
                          stm_items.setInt(1, pc.getObjectId());
                         stm_items.setInt(2, i.getItem().getItemId());
                          stm_items.setLong(3, i.getCount());
                           stm_items.setLong(4, i.getPrice());
                           stm_items.executeUpdate();
                          stm_items.clearParameters();
                        }
                       break;
                     case L2PcInstance.STORE_PRIVATE_SELL:
                    case L2PcInstance.STORE_PRIVATE_PACKAGE_SELL:
                        if (!Config.OFFLINE_TRADE_ENABLE)
                            continue;
                       title = pc.getSellList().getTitle();
                       for (TradeItem i : pc.getSellList().getItems())
                       {
                         stm_items.setInt(1, pc.getObjectId());
                           stm_items.setInt(2, i.getObjectId());
                           stm_items.setLong(3, i.getCount());
                           stm_items.setLong(4, i.getPrice());
                          stm_items.executeUpdate();
                           stm_items.clearParameters();
                        }
                        break;
                     case L2PcInstance.STORE_PRIVATE_MANUFACTURE:
                        if (!Config.OFFLINE_CRAFT_ENABLE)
                           continue;
                        title = pc.getCreateList().getStoreName();
                        for (L2ManufactureItem i : pc.getCreateList().getList())
                       {
                          stm_items.setInt(1, pc.getObjectId());
                            stm_items.setInt(2, i.getRecipeId());
                           stm_items.setLong(3, 0);
                          stm_items.setLong(4, i.getCost());
                           stm_items.executeUpdate();
                          stm_items.clearParameters();
                       }
                  }
                  stm.setString(4, title);
                  stm.executeUpdate();
                 stm.clearParameters();
                  con.commit(); // flush
              }
            }
           catch (Exception e)
            {
              _log.log(Level.WARNING, "OfflineTradersTable[storeTradeItems()]: Error while saving offline trader: " + pc.getObjectId() + " " + e, e);
           }
         }
        stm.close();
         stm_items.close();
         _log.info("Offline traders stored.");
     }
      catch (Exception e)
      {
         _log.log(Level.WARNING,"OfflineTradersTable[storeTradeItems()]: Error while saving offline traders: " + e,e);
      }
     finally
      {
         try
         {
            con.close();
        }
         catch (Exception e)
         {
            
        }
      }
   }
  
   public static void restoreOfflineTraders()
   {
      _log.info("Loading offline traders...");
      Connection con = null;
      int nTraders = 0;
       try
      {
         con = L2DatabaseFactory.getInstance().getConnection();
         PreparedStatement stm = con.prepareStatement(LOAD_OFFLINE_STATUS);
         ResultSet rs = stm.executeQuery();
         while (rs.next())
         {
            long time = rs.getLong("time");
            if (Config.OFFLINE_MAX_DAYS > 0)
            {
               Calendar cal = Calendar.getInstance();
               cal.setTimeInMillis(time);
               cal.roll(Calendar.DAY_OF_YEAR, Config.OFFLINE_MAX_DAYS);
               if (cal.getTimeInMillis() <= System.currentTimeMillis())
                  continue;
            }
            
            int type = rs.getInt("type");
            if (type == L2PcInstance.STORE_PRIVATE_NONE)
               continue;
            
            L2PcInstance player = null;
            
            try
            {
               L2GameClient client = new L2GameClient(null);
               client.setDetached(true);
               player = L2PcInstance.load(rs.getInt("charId"));
               client.setActiveChar(player);
               client.setAccountName(player.getAccountNamePlayer());
               client.setState(GameClientState.IN_GAME);
               player.setClient(client);
               player.setOfflineStartTime(time);
                player.spawnMe(player.getX(), player.getY(), player.getZ());
               LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
               PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS);
              stm_items.setInt(1, player.getObjectId());
               ResultSet items = stm_items.executeQuery();
               
               switch (type)
               {
                  case L2PcInstance.STORE_PRIVATE_BUY:
                     while (items.next())
                     {
                        player.getBuyList().addItemByItemId(items.getInt(2), items.getLong(3), items.getLong(4));
                     }
                     player.getBuyList().setTitle(rs.getString("title"));
                     break;
                  case L2PcInstance.STORE_PRIVATE_SELL:
                  case L2PcInstance.STORE_PRIVATE_PACKAGE_SELL:
                     while (items.next())
                     {
                        player.getSellList().addItem(items.getInt(2), items.getLong(3), items.getLong(4));
                     }
                     player.getSellList().setTitle(rs.getString("title"));
                     player.getSellList().setPackaged(type == L2PcInstance.STORE_PRIVATE_PACKAGE_SELL);
                     break;
                  case L2PcInstance.STORE_PRIVATE_MANUFACTURE:
                     L2ManufactureList createList = new L2ManufactureList();
                     while (items.next())
                      {
                        createList.add(new L2ManufactureItem(items.getInt(2), items.getLong(4)));
                     }
                     player.setCreateList(createList);
                     player.getCreateList().setStoreName(rs.getString("title"));
                     break;
               }
               items.close();
               stm_items.close();
               
               player.sitDown();
               if (Config.OFFLINE_SET_NAME_COLOR)
                  player.getAppearance().setNameColor(Config.OFFLINE_NAME_COLOR);
               player.setPrivateStoreType(type);
               player.setOnlineStatus(true);
               player.restoreEffects();
               player.broadcastUserInfo();
               nTraders++;
            }
            catch (Exception e)
            {
                _log.log(Level.WARNING, "OfflineTradersTable[loadOffliners()]: Error loading trader: ",e);
               if (player != null)
                  player.logout();
            }
          }
         rs.close();
         stm.close();
         _log.info("Loaded: " +nTraders+ " offline trader(s)");
         stm = con.prepareStatement(CLEAR_OFFLINE_TABLE);
         stm.execute();
         stm.close();
         stm = con.prepareStatement(CLEAR_OFFLINE_TABLE_ITEMS);
         stm.execute();
         stm.close();
      }
      catch (Exception e)
      {
         _log.log(Level.WARNING, "OfflineTradersTable[loadOffliners()]: Error while loading offline traders: ",e);
      }
      finally
      {
         try
         {
            con.close();
         }
         catch (Exception e)
         {
            
         }
      }
   }
}

 

L2jC4 dont have some classes:

import com.l2jserver.gameserver.ClientThread;

import com.l2jserver.gameserver.network.L2GameClient.GameClientState;

And i dont know where i can find it...(

Or how can I rewrite the code that he worked in L2jC4???

Please help!!! Thx anyway.

6 answers to this question

Recommended Posts

  • 0
Posted

[quoteFrom C4 to IL it's net.sf.l2j, not com.l2jserver

 

Use ctrl+shift+O to correct imports...

 

i know it, thx.

i dont know what a class 'L2GameClient' in l2jc4, src dont have it!

i try use: 'ClientThread', but i dont know right it or now.. (and have many errors in compile)

import com.l2jserver.gameserver.ClientThread; // L2GameClient

import com.l2jserver.gameserver.network.L2GameClient.GameClientState; // ?

 

what to do?

  • 0
Posted

Forget about it or hire someone that know what to do.

I know how to programing, but I'm not good know in the structure of the lineage 2 java code, I need that would me someone came upon the right path.

Please help, anybody(

Join the conversation

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

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

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

×
×
  • Create New...