L2J_CE

Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
L2J_CE

L2J_CE Server


Участников: 3

    Востановление Оффлайн Трейдеров после рестарта

    lromchikl
    lromchikl


    Сообщения : 51
    Дата регистрации : 2010-03-06
    Возраст : 40
    Откуда : Москва

    Востановление Оффлайн Трейдеров после рестарта Empty Востановление Оффлайн Трейдеров после рестарта

    Сообщение  lromchikl Сб Мар 06, 2010 3:36 pm

    Большая просьба к разработчикам реализовать функцию Оффлайн Трейдеров после рестарта; так как эта очень нужная функция, а не на одной сборке которая попадала ко мне в руки этой функции небыло.
    Большое спасибо за понимание.
    avatar
    ax1s


    Сообщения : 74
    Дата регистрации : 2010-02-25

    Востановление Оффлайн Трейдеров после рестарта Empty Re: Востановление Оффлайн Трейдеров после рестарта

    Сообщение  ax1s Сб Мар 06, 2010 4:03 pm

    lromchikl пишет:Большая просьба к разработчикам реализовать функцию Оффлайн Трейдеров после рестарта; так как эта очень нужная функция, а не на одной сборке которая попадала ко мне в руки этой функции небыло.
    Большое спасибо за понимание.

    Это функция будет неплохо подружать сервер...
    lromchikl
    lromchikl


    Сообщения : 51
    Дата регистрации : 2010-03-06
    Возраст : 40
    Откуда : Москва

    Востановление Оффлайн Трейдеров после рестарта Empty Re: Востановление Оффлайн Трейдеров после рестарта

    Сообщение  lromchikl Сб Мар 06, 2010 4:08 pm

    ax1s пишет:Это функция будет неплохо подружать сервер...
    Так её же можно сделать как включаемой так и отключаемой Smile
    Naik
    Naik


    Сообщения : 307
    Дата регистрации : 2010-03-06

    Востановление Оффлайн Трейдеров после рестарта Empty Re: Востановление Оффлайн Трейдеров после рестарта

    Сообщение  Naik Вс Мар 07, 2010 3:31 am

    Присоединяюсь! Очень нужна эта функция. Пробывал сделать её на l2open,долго копался, но так ничего и не вышло.
    avatar
    ax1s


    Сообщения : 74
    Дата регистрации : 2010-02-25

    Востановление Оффлайн Трейдеров после рестарта Empty Re: Востановление Оффлайн Трейдеров после рестарта

    Сообщение  ax1s Вс Мар 07, 2010 7:58 am

    Ну это в ядре сделать так что при выключении сервера люди которые сидят на трейде сохранялись в базу...
    Naik
    Naik


    Сообщения : 307
    Дата регистрации : 2010-03-06

    Востановление Оффлайн Трейдеров после рестарта Empty Re: Востановление Оффлайн Трейдеров после рестарта

    Сообщение  Naik Вс Мар 07, 2010 7:59 am

    Это понятно, ток вот как это сделать=)
    lromchikl
    lromchikl


    Сообщения : 51
    Дата регистрации : 2010-03-06
    Возраст : 40
    Откуда : Москва

    Востановление Оффлайн Трейдеров после рестарта Empty Re: Востановление Оффлайн Трейдеров после рестарта

    Сообщение  lromchikl Вс Мар 07, 2010 8:26 am

    Naik пишет:Это понятно, ток вот как это сделать=)
    Сказка пожалуйста замути нам такой конфиг Smile
    Naik
    Naik


    Сообщения : 307
    Дата регистрации : 2010-03-06

    Востановление Оффлайн Трейдеров после рестарта Empty Re: Востановление Оффлайн Трейдеров после рестарта

    Сообщение  Naik Вс Мар 07, 2010 9:53 am

    Вот из этого я пытался что-то сделать, но ничего не вышло. Говорят там надо еще что-то, хз, мож кто сделает.


    Код:
    CREATE TABLE `offline_characters` (                     
                          `charId` int(11) NOT NULL,                           
                          `shopid` int(11) NOT NULL,                           
                          `mode` tinyint(4) NOT NULL default '0',               
                          `packaged` tinyint(4) NOT NULL default '0',           
                          `title` varchar(255) character set utf8 default NULL, 
                          PRIMARY KEY  (`charId`)                               
                        );
    CREATE TABLE `offline_shops` (         
                    `shopid` int(11) NOT NULL,           
                    `itemid` int(11) NOT NULL,           
                    `count` int(11) default NULL,       
                    `price` int(11) NOT NULL             
                  );


    Код:
    package extenders;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;

    import net.l2emuproject.Config;
    import net.l2emuproject.L2DatabaseFactory;
    import net.l2emuproject.gameserver.idfactory.IdFactory;
    import net.l2emuproject.gameserver.model.L2ManufactureItem;
    import net.l2emuproject.gameserver.model.L2ManufactureList;
    import net.l2emuproject.gameserver.model.L2World;
    import net.l2emuproject.gameserver.model.TradeList.TradeItem;
    import net.l2emuproject.gameserver.model.actor.instance.L2PcInstance;
    import net.l2emuproject.gameserver.taskmanager.PacketBroadcaster;

    public class Offliner extends Thread {
        private void storeTradeItems(L2PcInstance pc, PreparedStatement stm) throws SQLException {
            switch(pc.getPrivateStoreType()) {
            case L2PcInstance.STORE_PRIVATE_BUY:
                for(TradeItem it: pc.getBuyList().getItems() ) {
                    stm.setInt(2, it.getItem().getItemId());
                    stm.setInt(3, it.getCount());
                    stm.setInt(4, it.getPrice());
                    stm.execute();
                }
                break;
            case L2PcInstance.STORE_PRIVATE_PACKAGE_SELL:   
            case L2PcInstance.STORE_PRIVATE_SELL:
                for(TradeItem it: pc.getSellList().getItems()) {
                    stm.setInt(2, it.getObjectId());
                    stm.setInt(3, it.getCount());
                    stm.setInt(4, it.getPrice());
                    stm.execute();
                }
                break;
            case L2PcInstance.STORE_PRIVATE_MANUFACTURE:
                for(L2ManufactureItem it: pc.getCreateList().getList()) {
                    stm.setInt(2, it.getRecipeId() );
                    stm.setInt(3, 0);
                    stm.setInt(4, it.getCost());
                    stm.execute();
                }
            }
        }
        public void run() {
            System.out.println("Store offline traders...");
            try {
                Connection con = L2DatabaseFactory.getInstance().getConnection();
                PreparedStatement stm1 = con.prepareStatement("insert into offline_characters values(?,?,?,?,?)");
                PreparedStatement stm2 = con.prepareStatement("insert into offline_shops values(?,?,?,?)");
                for(L2PcInstance pc : L2World.getInstance().getAllPlayers()) {
                    if(pc.isOfflineTrade())
                    synchronized(pc) {
                        int shopId = IdFactory.getInstance().getNextId();
                        stm2.setInt(1, shopId);
                        storeTradeItems(pc, stm2);
                        stm1.setInt(1, pc.getObjectId());
                        stm1.setInt(2, shopId);
                        stm1.setInt(3, pc.getPrivateStoreType());
                        String title = "";
                        int isPackage  = 0;
                        if(pc.getPrivateStoreType()==L2PcInstance.STORE_PRIVATE_BUY) {
                            title = pc.getBuyList().getTitle();
                            isPackage = pc.getBuyList().isPackaged()?1:0;
                        }
                        else if(pc.getPrivateStoreType()==L2PcInstance.STORE_PRIVATE_SELL ||
                                pc.getPrivateStoreType()== L2PcInstance.STORE_PRIVATE_PACKAGE_SELL) {
                            title = pc.getSellList().getTitle();
                            isPackage = pc.getSellList().isPackaged()||pc.getPrivateStoreType()== L2PcInstance.STORE_PRIVATE_PACKAGE_SELL ?1:0;
                        }
                        else
                            title = pc.getCreateList().getStoreName();
                        stm1.setInt(4, isPackage);
                        stm1.setString(5, title);
                        stm1.execute();
                    }
                }
                stm2.close();
                stm1.close();
                con.close();
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
       
        public static void loadOffliners() {
            PacketBroadcaster.getInstance();
            System.out.print("Load offline traders...");
            int nTraders=0;
            try {
                Connection con = L2DatabaseFactory.getInstance().getConnection();
                PreparedStatement stm = con.prepareStatement("Select charId, shopid, mode, packaged, title from offline_characters");
                PreparedStatement stm2 = con.prepareStatement("select itemid, count, price from offline_shops where shopid=?");
                ResultSet rs = stm.executeQuery();
                while(rs.next()) {
                    L2PcInstance offliner = L2PcInstance.load(rs.getInt(1));
                    if(offliner!=null) try {
                        stm2.setInt(1, rs.getInt(2));
                        ResultSet rs2 = stm2.executeQuery();
                        while (rs2.next()) {
                            switch(rs.getInt(3)) {
                            case L2PcInstance.STORE_PRIVATE_BUY:
                                offliner.getBuyList().addItemByItemId(rs2.getInt(1), rs2.getInt(2), rs2.getInt(3));
                                break;
                            case L2PcInstance.STORE_PRIVATE_SELL:
                                offliner.getSellList().addItem(rs2.getInt(1), rs2.getInt(2), rs2.getInt(3));
                                break;
                            case L2PcInstance.STORE_PRIVATE_MANUFACTURE:
                                if(offliner.getCreateList()==null)
                                    offliner.setCreateList(new L2ManufactureList());
                                offliner.getCreateList().add(new L2ManufactureItem(rs2.getInt(1),rs2.getInt(3)));
                                break;
                            }
                        }
                        rs2.close();
                       
                        offliner.spawnMe();

                        offliner.sitDown();
                        if (Config.ALLOW_OFFLINE_TRADE_COLOR_NAME)
                            offliner.getAppearance().setNameColor(Config.OFFLINE_TRADE_COLOR_NAME);
                        offliner.setPrivateStoreType(rs.getInt(3));
                        switch(rs.getInt(3)) {
                            case L2PcInstance.STORE_PRIVATE_BUY:
                                offliner.getBuyList().setTitle(rs.getString(5));
                                offliner.getBuyList().setPackaged(rs.getInt(4)!=0);
                                break;
                            case L2PcInstance.STORE_PRIVATE_SELL:
                                offliner.getSellList().setTitle(rs.getString(5));
                                offliner.getSellList().setPackaged(rs.getInt(4)!=0);
                                break;
                            case L2PcInstance.STORE_PRIVATE_MANUFACTURE:
                                offliner.getCreateList().setStoreName(rs.getString(5));
                                break;
                        }
                        offliner.setOfflineTrade(true);
                        offliner.broadcastUserInfo();
                        nTraders++;
                    } catch(Exception e) {
                        e.printStackTrace();
                        offliner.decayMe();
                        offliner = null;
                    }
                }
                stm2.close();
                rs.close();
                stm.close();
                stm = con.prepareStatement("delete from offline_characters");
                stm.execute();
                stm.close();
                stm = con.prepareStatement("delete from offline_shops");
                stm.execute();
                stm.close();

                con.close();
                System.out.println(nTraders+" trader(s) loaded");
            } catch(Exception e) {
               
            }
        }
        public static void main(String[] args) {
            Runtime.getRuntime().addShutdownHook(new Offliner());
            loadOffliners();

        }

    }

      Текущее время Чт Ноя 21, 2024 12:42 am