Advertisement
Guest User

Offline Shop & Craft

a guest
Aug 11th, 2013
968
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 27.45 KB | None | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P aCis_gameserver
  3. Index: java/net/sf/l2j/gameserver/GameServer.java
  4. ===================================================================
  5. --- java/net/sf/l2j/gameserver/GameServer.java  (wersja 309)
  6. +++ java/net/sf/l2j/gameserver/GameServer.java  (kopia robocza)
  7. @@ -49,6 +49,7 @@
  8.  import net.sf.l2j.gameserver.datatables.MapRegionTable;
  9.  import net.sf.l2j.gameserver.datatables.NpcTable;
  10.  import net.sf.l2j.gameserver.datatables.NpcWalkerRoutesTable;
  11. +import net.sf.l2j.gameserver.datatables.OfflineTradersTable;
  12.  import net.sf.l2j.gameserver.datatables.PetDataTable;
  13.  import net.sf.l2j.gameserver.datatables.SkillTable;
  14.  import net.sf.l2j.gameserver.datatables.SkillTreeTable;
  15. @@ -292,6 +293,9 @@
  16.         KnownListUpdateTaskManager.getInstance();
  17.         MovieMakerManager.getInstance();
  18.        
  19. +       if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
  20. +           OfflineTradersTable.restoreOfflineTraders();
  21. +      
  22.         if (Config.DEADLOCK_DETECTOR)
  23.         {
  24.             _log.info("Deadlock detector is enabled. Timer: " + Config.DEADLOCK_CHECK_INTERVAL + "s.");
  25. Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreSell.java
  26. ===================================================================
  27. --- java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreSell.java   (wersja 309)
  28. +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreSell.java   (kopia robocza)
  29. @@ -15,6 +15,7 @@
  30.  package net.sf.l2j.gameserver.network.clientpackets;
  31.  
  32.  import net.sf.l2j.Config;
  33. +import net.sf.l2j.gameserver.datatables.OfflineTradersTable;
  34.  import net.sf.l2j.gameserver.model.ItemRequest;
  35.  import net.sf.l2j.gameserver.model.L2World;
  36.  import net.sf.l2j.gameserver.model.TradeList;
  37. @@ -95,6 +96,12 @@
  38.             return;
  39.         }
  40.        
  41. +       // Update offline trade record in realtime
  42. +       if (Config.OFFLINE_TRADE_ENABLE && Config.RESTORE_OFFLINERS && !(storeList.getItemCount() == 0) && (storePlayer.getClient() == null || storePlayer.getClient().isDetached()))
  43. +       {
  44. +           OfflineTradersTable.storeOffliners();
  45. +       }
  46. +      
  47.         if (storeList.getItemCount() == 0)
  48.         {
  49.             storePlayer.setPrivateStoreType(L2PcInstance.STORE_PRIVATE_NONE);
  50. Index: java/net/sf/l2j/gameserver/network/L2GameClient.java
  51. ===================================================================
  52. --- java/net/sf/l2j/gameserver/network/L2GameClient.java    (wersja 309)
  53. +++ java/net/sf/l2j/gameserver/network/L2GameClient.java    (kopia robocza)
  54. @@ -26,6 +26,7 @@
  55.  import java.util.concurrent.locks.ReentrantLock;
  56.  import java.util.logging.Level;
  57.  import java.util.logging.Logger;
  58. +import java.util.logging.LogRecord;
  59.  
  60.  import net.sf.l2j.Config;
  61.  import net.sf.l2j.L2DatabaseFactory;
  62. @@ -446,9 +447,18 @@
  63.    
  64.     public void close(L2GameServerPacket gsp)
  65.     {
  66. +       if (getConnection() == null)
  67. +           return;
  68.         getConnection().close(gsp);
  69.     }
  70.    
  71. +   public void close(L2GameServerPacket[] gspArray)
  72. +   {
  73. +       if (getConnection() == null)
  74. +           return;
  75. +       getConnection().close(gspArray);
  76. +   }
  77. +  
  78.     /**
  79.      * @param charslot
  80.      * @return
  81. @@ -544,6 +554,33 @@
  82.                     setDetached(true);
  83.                     fast = !getActiveChar().isInCombat() && !getActiveChar().isLocked();
  84.                 }
  85. +              
  86. +               L2PcInstance player = L2GameClient.this.getActiveChar();
  87. +               if (player != null)
  88. +               {
  89. +                   if ((player.isInStoreMode() && Config.OFFLINE_TRADE_ENABLE) || (player.isInCraftMode() && Config.OFFLINE_CRAFT_ENABLE))
  90. +                   {
  91. +                       if (player.getPet() != null)
  92. +                       {
  93. +                           player.getPet().unSummon(player);
  94. +                       }
  95. +                      
  96. +                       player.leaveParty();
  97. +                      
  98. +                       if (Config.OFFLINE_SET_NAME_COLOR)
  99. +                       {
  100. +                           player.getAppearance().setNameColor(Config.OFFLINE_NAME_COLOR);
  101. +                           player.broadcastUserInfo();
  102. +                       }
  103. +                       if (player.getOfflineStartTime() == 0)
  104. +                           player.setOfflineStartTime(System.currentTimeMillis());
  105. +                  
  106. +                       LogRecord record = new LogRecord(Level.INFO, "Entering offline mode");
  107. +                       record.setParameters(new Object[]{L2GameClient.this});
  108. +                       _log.log(record);
  109. +                       return;
  110. +                   }
  111. +               }
  112.                 cleanMe(fast);
  113.             }
  114.             catch (Exception e1)
  115. Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreBuy.java
  116. ===================================================================
  117. --- java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreBuy.java    (wersja 309)
  118. +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreBuy.java    (kopia robocza)
  119. @@ -18,6 +18,7 @@
  120.  import java.util.Set;
  121.  
  122.  import net.sf.l2j.Config;
  123. +import net.sf.l2j.gameserver.datatables.OfflineTradersTable;
  124.  import net.sf.l2j.gameserver.model.ItemRequest;
  125.  import net.sf.l2j.gameserver.model.L2World;
  126.  import net.sf.l2j.gameserver.model.TradeList;
  127. @@ -108,6 +109,12 @@
  128.             return;
  129.         }
  130.        
  131. +       // Update offline trade record in realtime 
  132. +       if (Config.OFFLINE_TRADE_ENABLE && Config.RESTORE_OFFLINERS && !(storeList.getItemCount() == 0) && (storePlayer.getClient() == null || storePlayer.getClient().isDetached()))
  133. +       {
  134. +           OfflineTradersTable.storeOffliners();
  135. +       }
  136. +      
  137.         if (storeList.getItemCount() == 0)
  138.         {
  139.             storePlayer.setPrivateStoreType(L2PcInstance.STORE_PRIVATE_NONE);
  140. Index: java/net/sf/l2j/gameserver/Shutdown.java
  141. ===================================================================
  142. --- java/net/sf/l2j/gameserver/Shutdown.java    (wersja 309)
  143. +++ java/net/sf/l2j/gameserver/Shutdown.java    (kopia robocza)
  144. @@ -20,6 +20,7 @@
  145.  
  146.  import net.sf.l2j.Config;
  147.  import net.sf.l2j.L2DatabaseFactory;
  148. +import net.sf.l2j.gameserver.datatables.OfflineTradersTable;
  149.  import net.sf.l2j.gameserver.instancemanager.CastleManorManager;
  150.  import net.sf.l2j.gameserver.instancemanager.FishingChampionshipManager;
  151.  import net.sf.l2j.gameserver.instancemanager.FourSepulchersManager;
  152. @@ -113,6 +114,16 @@
  153.     {
  154.         if (this == SingletonHolder._instance)
  155.         {
  156. +           try
  157. +           {
  158. +               if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
  159. +                   OfflineTradersTable.storeOffliners();
  160. +           }
  161. +           catch (Throwable t)
  162. +           {
  163. +               _log.log(Level.WARNING, "Error saving offline shops.",t);
  164. +           }
  165. +          
  166.             Util.printSection("Under " + MODE_TEXT[_shutdownMode] + " process");
  167.            
  168.             // disconnect players
  169. Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
  170. ===================================================================
  171. --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java   (wersja 309)
  172. +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java   (kopia robocza)
  173. @@ -457,6 +457,8 @@
  174.     private boolean _inCrystallize;
  175.     private boolean _inCraftMode;
  176.    
  177. +   private long _offlineShopStart = 0;
  178. +  
  179.     /** The table containing all L2RecipeList of the L2PcInstance */
  180.     private final Map<Integer, L2RecipeList> _dwarvenRecipeBook = new HashMap<>();
  181.     private final Map<Integer, L2RecipeList> _commonRecipeBook = new HashMap<>();
  182. @@ -874,9 +876,16 @@
  183.    
  184.     public String getAccountName()
  185.     {
  186. +       if (getClient() == null)
  187. +           return getAccountNamePlayer();
  188.         return getClient().getAccountName();
  189.     }
  190.    
  191. +   public String getAccountNamePlayer()
  192. +   {
  193. +       return _accountName;
  194. +   }
  195. +  
  196.     public Map<Integer, String> getAccountChars()
  197.     {
  198.         return _chars;
  199. @@ -4730,6 +4739,11 @@
  200.     public void setPrivateStoreType(int type)
  201.     {
  202.         _privateStore = type;
  203. +      
  204. +       if (Config.OFFLINE_DISCONNECT_FINISHED && (_privateStore == STORE_PRIVATE_NONE) && ((getClient() == null) || getClient().isDetached()))
  205. +       {
  206. +           deleteMe();
  207. +       }
  208.     }
  209.    
  210.     /**
  211. @@ -10978,4 +10992,13 @@
  212.             }
  213.         }
  214.     }
  215. +  
  216. +   public long getOfflineStartTime()
  217. +   {
  218. +           return _offlineShopStart;
  219. +   }
  220. +   public void setOfflineStartTime(long time)
  221. +   {
  222. +           _offlineShopStart = time;
  223. +   }
  224.  }
  225. \ No newline at end of file
  226. Index: java/net/sf/l2j/Config.java
  227. ===================================================================
  228. --- java/net/sf/l2j/Config.java (wersja 309)
  229. +++ java/net/sf/l2j/Config.java (kopia robocza)
  230. @@ -642,6 +642,16 @@
  231.     public static int ZONE_TOWN;
  232.     public static boolean DISABLE_TUTORIAL;
  233.    
  234. +   /** Offline stores */
  235. +   public static boolean OFFLINE_TRADE_ENABLE;
  236. +   public static boolean OFFLINE_CRAFT_ENABLE;
  237. +   public static boolean RESTORE_OFFLINERS;
  238. +   public static int OFFLINE_MAX_DAYS;
  239. +   public static boolean OFFLINE_DISCONNECT_FINISHED;
  240. +   public static boolean OFFLINE_SET_NAME_COLOR;
  241. +   public static int OFFLINE_NAME_COLOR;
  242. +   public static boolean OFFLINE_FAME;
  243. +  
  244.     // --------------------------------------------------
  245.     // Those "hidden" settings haven't configs to avoid admins to fuck their server
  246.     // You still can experiment changing values here. But don't say I didn't warn you.
  247. @@ -1237,6 +1247,15 @@
  248.             ZONE_TOWN = server.getProperty("ZoneTown", 0);
  249.             SERVER_NEWS = server.getProperty("ShowServerNews", false);
  250.             DISABLE_TUTORIAL = server.getProperty("DisableTutorial", false);
  251. +          
  252. +           OFFLINE_TRADE_ENABLE = Boolean.parseBoolean(server.getProperty("OfflineTradeEnable", "false"));
  253. +           OFFLINE_CRAFT_ENABLE = Boolean.parseBoolean(server.getProperty("OfflineCraftEnable", "false"));
  254. +           OFFLINE_SET_NAME_COLOR = Boolean.parseBoolean(server.getProperty("OfflineSetNameColor", "false"));
  255. +           OFFLINE_NAME_COLOR = Integer.decode("0x" + server.getProperty("OfflineNameColor", "808080"));
  256. +           OFFLINE_FAME = Boolean.parseBoolean(server.getProperty("OfflineFame", "true"));
  257. +           RESTORE_OFFLINERS = Boolean.parseBoolean(server.getProperty("RestoreOffliners", "false"));
  258. +           OFFLINE_MAX_DAYS = Integer.parseInt(server.getProperty("OfflineMaxDays", "10"));
  259. +           OFFLINE_DISCONNECT_FINISHED = Boolean.parseBoolean(server.getProperty("OfflineDisconnectFinished", "true"));
  260.         }
  261.         else if (Server.serverMode == Server.MODE_LOGINSERVER)
  262.         {
  263. Index: java/net/sf/l2j/gameserver/datatables/OfflineTradersTable.java
  264. ===================================================================
  265. --- java/net/sf/l2j/gameserver/datatables/OfflineTradersTable.java  (wersja 0)
  266. +++ java/net/sf/l2j/gameserver/datatables/OfflineTradersTable.java  (wersja 0)
  267. @@ -0,0 +1,249 @@
  268. +/*
  269. + * This program is free software: you can redistribute it and/or modify it under
  270. + * the terms of the GNU General Public License as published by the Free Software
  271. + * Foundation, either version 3 of the License, or (at your option) any later
  272. + * version.
  273. + *
  274. + * This program is distributed in the hope that it will be useful, but WITHOUT
  275. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  276. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  277. + * details.
  278. + *
  279. + * You should have received a copy of the GNU General Public License along with
  280. + * this program. If not, see <http://www.gnu.org/licenses/>.
  281. + */
  282. +package net.sf.l2j.gameserver.datatables;
  283. +
  284. +import java.sql.Connection;
  285. +import java.sql.PreparedStatement;
  286. +import java.sql.ResultSet;
  287. +import java.util.Calendar;
  288. +import java.util.logging.Level;
  289. +import java.util.logging.Logger;
  290. +
  291. +import net.sf.l2j.Config;
  292. +import net.sf.l2j.L2DatabaseFactory;
  293. +import net.sf.l2j.gameserver.LoginServerThread;
  294. +import net.sf.l2j.gameserver.model.L2ManufactureItem;
  295. +import net.sf.l2j.gameserver.model.L2ManufactureList;
  296. +import net.sf.l2j.gameserver.model.L2World;
  297. +import net.sf.l2j.gameserver.model.TradeList.TradeItem;
  298. +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  299. +import net.sf.l2j.gameserver.network.L2GameClient;
  300. +import net.sf.l2j.gameserver.network.L2GameClient.GameClientState;
  301. +
  302. +public class OfflineTradersTable
  303. +{
  304. +       private static Logger _log = Logger.getLogger(OfflineTradersTable.class.getName());
  305. +      
  306. +       //SQL DEFINITIONS
  307. +       private static final String SAVE_OFFLINE_STATUS = "INSERT INTO character_offline_trade (`charId`,`time`,`type`,`title`) VALUES (?,?,?,?)";
  308. +       private static final String SAVE_ITEMS = "INSERT INTO character_offline_trade_items (`charId`,`item`,`count`,`price`) VALUES (?,?,?,?)";
  309. +       private static final String CLEAR_OFFLINE_TABLE = "DELETE FROM character_offline_trade";
  310. +       private static final String CLEAR_OFFLINE_TABLE_ITEMS = "DELETE FROM character_offline_trade_items";
  311. +       private static final String LOAD_OFFLINE_STATUS = "SELECT * FROM character_offline_trade";
  312. +       private static final String LOAD_OFFLINE_ITEMS = "SELECT * FROM character_offline_trade_items WHERE charId = ?";
  313. +      
  314. +       public static void storeOffliners()
  315. +       {
  316. +               try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  317. +               {
  318. +                       PreparedStatement stm = con.prepareStatement(CLEAR_OFFLINE_TABLE);
  319. +                       stm.execute();
  320. +                       stm.close();
  321. +                       stm = con.prepareStatement(CLEAR_OFFLINE_TABLE_ITEMS);
  322. +                       stm.execute();
  323. +                       stm.close();
  324. +                      
  325. +                       con.setAutoCommit(false); // avoid halfway done
  326. +                       stm = con.prepareStatement(SAVE_OFFLINE_STATUS);
  327. +                       PreparedStatement stm_items = con.prepareStatement(SAVE_ITEMS);
  328. +                      
  329. +                       //TextBuilder items = TextBuilder.newInstance();
  330. +                       for (L2PcInstance pc : L2World.getInstance().getAllPlayers().values())
  331. +                       {
  332. +                               try
  333. +                               {
  334. +                                       if ((pc.getPrivateStoreType() != L2PcInstance.STORE_PRIVATE_NONE) && ((pc.getClient() == null) || pc.getClient().isDetached()))
  335. +                                       {
  336. +                                               stm.setInt(1, pc.getObjectId()); //Char Id
  337. +                                               stm.setLong(2, pc.getOfflineStartTime());
  338. +                                               stm.setInt(3, pc.getPrivateStoreType()); //store type
  339. +                                               String title = null;
  340. +                                              
  341. +                                               switch (pc.getPrivateStoreType())
  342. +                                               {
  343. +                                                       case L2PcInstance.STORE_PRIVATE_BUY:
  344. +                                                               if (!Config.OFFLINE_TRADE_ENABLE)
  345. +                                                                       continue;
  346. +                                                               title = pc.getBuyList().getTitle();
  347. +                                                               for (TradeItem i : pc.getBuyList().getItems())
  348. +                                                               {
  349. +                                                                       stm_items.setInt(1, pc.getObjectId());
  350. +                                                                       stm_items.setInt(2, i.getItem().getItemId());
  351. +                                                                       stm_items.setInt(3, i.getCount());
  352. +                                                                       stm_items.setInt(4, i.getPrice());
  353. +                                                                       stm_items.executeUpdate();
  354. +                                                                       stm_items.clearParameters();
  355. +                                                               }
  356. +                                                               break;
  357. +                                                       case L2PcInstance.STORE_PRIVATE_SELL:
  358. +                                                       case L2PcInstance.STORE_PRIVATE_PACKAGE_SELL:
  359. +                                                               if (!Config.OFFLINE_TRADE_ENABLE)
  360. +                                                                       continue;
  361. +                                                               title = pc.getSellList().getTitle();
  362. +                                                               for (TradeItem i : pc.getSellList().getItems())
  363. +                                                               {
  364. +                                                                       stm_items.setInt(1, pc.getObjectId());
  365. +                                                                       stm_items.setInt(2, i.getObjectId());
  366. +                                                                       stm_items.setInt(3, i.getCount());
  367. +                                                                       stm_items.setInt(4, i.getPrice());
  368. +                                                                       stm_items.executeUpdate();
  369. +                                                                       stm_items.clearParameters();
  370. +                                                               }
  371. +                                                               break;
  372. +                                                       case L2PcInstance.STORE_PRIVATE_MANUFACTURE:
  373. +                                                               if (!Config.OFFLINE_CRAFT_ENABLE)
  374. +                                                                       continue;
  375. +                                                               title = pc.getCreateList().getStoreName();
  376. +                                                               for (L2ManufactureItem i : pc.getCreateList().getList())
  377. +                                                               {
  378. +                                                                       stm_items.setInt(1, pc.getObjectId());
  379. +                                                                       stm_items.setInt(2, i.getRecipeId());
  380. +                                                                       stm_items.setLong(3, 0);
  381. +                                                                       stm_items.setLong(4, i.getCost());
  382. +                                                                       stm_items.executeUpdate();
  383. +                                                                       stm_items.clearParameters();
  384. +                                                               }
  385. +                                               }
  386. +                                               stm.setString(4, title);
  387. +                                               stm.executeUpdate();
  388. +                                               stm.clearParameters();
  389. +                                               con.commit(); // flush
  390. +                                       }
  391. +                               }
  392. +                               catch (Exception e)
  393. +                               {
  394. +                                       _log.log(Level.WARNING, "OfflineTradersTable[storeTradeItems()]: Error while saving offline trader: " + pc.getObjectId() + " " + e, e);
  395. +                               }
  396. +                       }
  397. +                       stm.close();
  398. +                       stm_items.close();
  399. +                       _log.info("Offline traders stored.");
  400. +               }
  401. +               catch (Exception e)
  402. +               {
  403. +                       _log.log(Level.WARNING,"OfflineTradersTable[storeTradeItems()]: Error while saving offline traders: " + e,e);
  404. +               }
  405. +       }
  406. +      
  407. +       public static void restoreOfflineTraders()
  408. +       {
  409. +               _log.info("Loading offline traders...");
  410. +               int nTraders = 0;
  411. +               try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  412. +               {
  413. +                       PreparedStatement stm = con.prepareStatement(LOAD_OFFLINE_STATUS);
  414. +                       ResultSet rs = stm.executeQuery();
  415. +                       while (rs.next())
  416. +                       {
  417. +                               long time = rs.getLong("time");
  418. +                               if (Config.OFFLINE_MAX_DAYS > 0)
  419. +                               {
  420. +                                       Calendar cal = Calendar.getInstance();
  421. +                                       cal.setTimeInMillis(time);
  422. +                                       cal.add(Calendar.DAY_OF_YEAR, Config.OFFLINE_MAX_DAYS);
  423. +                                       if (cal.getTimeInMillis() <= System.currentTimeMillis())
  424. +                                               continue;
  425. +                               }
  426. +                              
  427. +                               int type = rs.getInt("type");
  428. +                               if (type == L2PcInstance.STORE_PRIVATE_NONE)
  429. +                                       continue;
  430. +                              
  431. +                               L2PcInstance player = null;
  432. +                              
  433. +                               try
  434. +                               {
  435. +                                       L2GameClient client = new L2GameClient(null);
  436. +                                       client.setDetached(true);
  437. +                                       player = L2PcInstance.restore(rs.getInt("charId"));
  438. +                                       client.setActiveChar(player);
  439. +                                       player.setOnlineStatus(true, false);
  440. +                                       client.setAccountName(player.getAccountName());
  441. +                                       client.setState(GameClientState.IN_GAME);
  442. +                                       player.setClient(client);
  443. +                                       player.setOfflineStartTime(time);
  444. +                                       player.spawnMe(player.getX(), player.getY(), player.getZ());
  445. +                                       LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
  446. +                                       PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS);
  447. +                                       stm_items.setInt(1, player.getObjectId());
  448. +                                       ResultSet items = stm_items.executeQuery();
  449. +                                      
  450. +                                       switch (type)
  451. +                                       {
  452. +                                               case L2PcInstance.STORE_PRIVATE_BUY:
  453. +                                                       while (items.next())
  454. +                                                       {
  455. +                                                               if (player.getBuyList().addItemByItemId(items.getInt(2), items.getInt(3), items.getInt(4)) == null)
  456. +                                                                       throw new NullPointerException();
  457. +                                                       }
  458. +                                                       player.getBuyList().setTitle(rs.getString("title"));
  459. +                                                       break;
  460. +                                               case L2PcInstance.STORE_PRIVATE_SELL:
  461. +                                               case L2PcInstance.STORE_PRIVATE_PACKAGE_SELL:
  462. +                                                       while (items.next())
  463. +                                                       {
  464. +                                                               if (player.getSellList().addItem(items.getInt(2), items.getInt(3), items.getInt(4)) == null)
  465. +                                                                       throw new NullPointerException();
  466. +                                                       }
  467. +                                                       player.getSellList().setTitle(rs.getString("title"));
  468. +                                                       player.getSellList().setPackaged(type == L2PcInstance.STORE_PRIVATE_PACKAGE_SELL);
  469. +                                                       break;
  470. +                                               case L2PcInstance.STORE_PRIVATE_MANUFACTURE:
  471. +                                                       L2ManufactureList createList = new L2ManufactureList();
  472. +                                                       while (items.next())
  473. +                                                       {
  474. +                                                               createList.add(new L2ManufactureItem(items.getInt(2), items.getInt(4)));
  475. +                                                       }
  476. +                                                       player.setCreateList(createList);
  477. +                                                       player.getCreateList().setStoreName(rs.getString("title"));
  478. +                                                       break;
  479. +                                       }
  480. +                                       items.close();
  481. +                                       stm_items.close();
  482. +                                      
  483. +                                       player.sitDown();
  484. +                                       if (Config.OFFLINE_SET_NAME_COLOR)
  485. +                                               player.getAppearance().setNameColor(Config.OFFLINE_NAME_COLOR);
  486. +                                       player.setPrivateStoreType(type);
  487. +                                       player.setOnlineStatus(true, true);
  488. +                                       player.restoreEffects();
  489. +                                       player.broadcastUserInfo();
  490. +                                       nTraders++;
  491. +                               }
  492. +                               catch (Exception e)
  493. +                               {
  494. +                                       _log.log(Level.WARNING, "OfflineTradersTable[loadOffliners()]: Error loading trader: "+player,e);
  495. +                                       if (player != null)
  496. +                                       {
  497. +                                               player.deleteMe();
  498. +                                       }
  499. +                               }
  500. +                       }
  501. +                       rs.close();
  502. +                       stm.close();
  503. +                       _log.info("Loaded: " +nTraders+ " offline trader(s)");
  504. +                       stm = con.prepareStatement(CLEAR_OFFLINE_TABLE);
  505. +                       stm.execute();
  506. +                       stm.close();
  507. +                       stm = con.prepareStatement(CLEAR_OFFLINE_TABLE_ITEMS);
  508. +                       stm.execute();
  509. +                       stm.close();
  510. +               }
  511. +               catch (Exception e)
  512. +               {
  513. +                       _log.log(Level.WARNING, "OfflineTradersTable[loadOffliners()]: Error while loading offline traders: ",e);
  514. +               }
  515. +       }
  516. +}
  517. \ No newline at end of file
  518. Index: config/server.properties
  519. ===================================================================
  520. --- config/server.properties    (wersja 309)
  521. +++ config/server.properties    (kopia robocza)
  522. @@ -376,4 +376,32 @@
  523.  
  524.  # Disable tutorial on new player game entrance.
  525.  # Default: False
  526. -DisableTutorial = False
  527. \ No newline at end of file
  528. +DisableTutorial = False
  529. +
  530. +# ================================================================
  531. +#                       Offline trade & craft
  532. +# ================================================================
  533. +
  534. +# Enable or disable offline trade mode
  535. +# Default: False
  536. +OfflineTradeEnable = True
  537. +
  538. +# Enable or disable offline craft mode
  539. +# Default: False
  540. +OfflineCraftEnable = True
  541. +
  542. +# Offline name color
  543. +OfflineSetNameColor = True
  544. +OfflineNameColor = 808080
  545. +
  546. +# Restore offline traders/crafters after restart/shutdown.
  547. +# Default: false.
  548. +RestoreOffliners = True
  549. +
  550. +# Restore offline characters for X days
  551. +#Default: 10
  552. +OfflineMaxDays = 10
  553. +
  554. +#Disconnect shop after finished selling, buying.
  555. +#Default: True
  556. +OfflineDisconnectFinished = True
  557. \ No newline at end of file
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement