Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Показ количества перосонажей при выборе сервера.
#1
В ХФ вместо пинга выводиться количество персонажей на сервере.
Суть проблемы в том что есть пакеты ГСа и ЛСа, есть сама структура пакета СерверЛист.

Название пакета на лыже ReplyCharacters.java, на лыже отправляеться с
com/l2jserver/gameserver/LoginServerThread.java

Суть проблеммы в том что не могу найти места откуда отправлять пакет от ГСа (с количеством персонажей на нем данного аккаунта) на Лс в сборках Феникс.

Сами пакеты брал с Лыжы и переделывал ан феникс.
Ответ
#2
Можно код?
Ответ
#3
loginserver\gameservercon\gspackets\ReplyCharacters.java
Код:
package l2open.loginserver.gameservercon.gspackets;

import l2open.loginserver.gameservercon.AttGS;
import l2open.loginserver.LoginController;
/**
* @author mrTJO
* Thanks to mochitto
*/
public class ReplyCharacters extends ClientBasePacket
{
    private AttGS gameserver;
    public ReplyCharacters(byte[] decrypt, AttGS gameserver)
    {
        super(decrypt, gameserver);
        this.gameserver = gameserver;
    }

    @Override
    public void read()
    {
        String account = readS();
        int chars = readC();
        int charsToDel = readC();
        long[] charsList = new long[charsToDel];
        for (int i = 0; i < charsToDel; i++)
        {
            charsList[i] = (long)readF();
        }
        LoginController.getInstance().setCharactersOnServer(account, chars, charsList, gameserver.getServerId());
    }
}
gameserver\loginservercon\gspackets\ReplyCharacters.java
Код:
package l2open.gameserver.loginservercon.gspackets;

import java.util.List;
/**
* @author mrTJO
* Thanks to mochitto
*/
public class ReplyCharacters extends GameServerBasePacket
{
    
    public ReplyCharacters(String account, int chars, List<Long> timeToDel)
    {
        writeC(0x0f);
        writeS(account);
        writeC(chars);
        writeC(timeToDel.size());
        for (long time : timeToDel)
        {
            writeF((double)time);
        }
    }    
}
loginserver\LoginController.java
Код:
*******
public void setCharactersOnServer(String account, int charsNum, long[] timeToDel, int serverId)
    {
        L2LoginClient client = _loginServerClients.get(account);
        
        if (client == null)
            return;
        
        if (charsNum > 0)
            client.setCharsOnServ(serverId, charsNum);
        
        if (timeToDel.length > 0)
            client.serCharsWaitingDelOnServ(serverId, timeToDel);
    }
*******
loginserver\L2LoginClient.java
Код:
**********
private Map<Integer, Integer> _charsOnServers;
private Map<Integer, long[]> _charsToDelete;
**********
public void setCharsOnServ(int servId, int chars)
    {
        if (_charsOnServers == null)
            _charsOnServers = new HashMap<Integer, Integer>();
        _charsOnServers.put(servId, chars);
    }
    
    public Map<Integer, Integer> getCharsOnServ()
    {
        return _charsOnServers;
    }
    
    public void serCharsWaitingDelOnServ(int servId, long[] charsToDel)
    {
        if (_charsToDelete == null)
            _charsToDelete = new HashMap<Integer, long[]>();
        _charsToDelete.put(servId, charsToDel);
    }
    
    public Map<Integer, long[]> getCharsWaitingDelOnServ()
    {
        return _charsToDelete;
    }
********************


В каком файле фени мне написать данное обращение к пакету.....
в Лыже отправка идет:
com\l2jserver\gameserver\LoginServerThread.java
Код:
*************************************
case 0x05:
                            RequestCharacters rc = new RequestCharacters(decrypt);
                            getCharsOnServer(rc.getAccount());
                            break;
***************************************
private void getCharsOnServer(String account)
    {
        Connection con = null;
        int chars = 0;
        List<Long> charToDel = new ArrayList<Long>();
        try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            PreparedStatement statement = con.prepareStatement("SELECT deletetime FROM characters WHERE account_name=?");
            statement.setString(1, account);
            ResultSet rset = statement.executeQuery();
            while (rset.next())
            {
                chars++;
                long delTime = rset.getLong("deletetime");
                if (delTime != 0)
                    charToDel.add(delTime);
            }
            rset.close();
            statement.close();
        }
        catch (SQLException e)
        {
            _log.log(Level.WARNING, "Exception: getCharsOnServer: " + e.getMessage(), e);
        }
        finally
        {
            L2DatabaseFactory.close(con);
        }
        
        ReplyCharacters rec = new ReplyCharacters(account, chars, charToDel);
        try
        {
            sendPacket(rec);
        }
        catch (IOException e)
        {
            if (Config.DEBUG)
                _log.log(Level.WARNING, "", e);
        }
        
    }
****************************************
Вот вроде весь код дал, в пакетах не силен только учусь.....
Ответ
#4
Ну для начало нужен коннект к обращению к базе, потом запрос.
Сатри!

Код:
try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            PreparedStatement statement = con.prepareStatement("SELECT deletetime FROM characters WHERE account_name=?");
            statement.setString(1, account);
            ResultSet rset = statement.executeQuery();
            while (rset.next())
            {
                [COLOR="DeepSkyBlue"]chars++;
                long delTime = rset.getLong("deletetime");
                if (delTime != 0)
                    charToDel.add(delTime);[/COLOR]
            }
            rset.close();
            statement.close();
        }

Я так понял по запросу тут время удаления чара? чтоль? Опять же в Цикле тут хз не понятно указывает чтоль на колличество поставленный чаров на удаление? Я понять не могу. Во первых нужен запрос вот такой
Код:
SELECT SUM(online) FROM characters
как то так! Тогда база тебе вернет сумму активных чаров те-кто в игре! Опять же

Код:
LoginServerThread.java

Я так понял это уже ТОГДА когда мы уже выбрали сервер!
Значит нужно искать другой файл отвечающий за это.
Все что ты предоставил ты показал не те файлы это уже при заходе на сервер! Не проканает. Исчи ближе к заходу.

Добавлено через 11 минут
Опять же не могу понять почему в Цикле while chars++; стоит инкримент. Думаю не нужно объяснять что это такое.
Код:
while [color=DeepSkyBlue](rset.next()[/color])
За что отвечает это условие за выход? чтоле? понять не могу до кокого состояния будет крутиться цикл?

Добавлено через 12 минут
А если тебе нужно смотреть пакеты с количеством персонажей то ты не там роешь кажется

Добавлено через 16 минут
Рой в L2Player.java в пакете
Код:
l2p.gameserver.model
Ответ
#5
kasik Написал:Суть проблеммы в том что не могу найти места откуда отправлять пакет от ГСа (с количеством персонажей на нем данного аккаунта) на Лс в сборках Феникс.
перед отправкой пакета ServerList(LS), посылаем на GS пакет с акаунтом, на GSe берем нужные данные и оправляем обрано на LS, и после этого уже должен отсылатся пакет ServerList

ЗЫ: Z3oM учи яву, не позорься...
Ответ
#6
linliss Написал:ЗЫ: Z3oM учи яву, не позорься...

Наверное =) Я учу а я что та не правильно сказал? Именно по синтаксису java?

Добавлено через 1 минуту
Я наверное суть проблемы не правильно понял.
Ответ
#7
Когда обратились с предложением "реализовать онлайн при входе в игру" (как на Астериосе) к Револтим, то они вроде опытные кодеры не смогли это сделать. Хотелось бы узнать, на этом форуме кто-то знает как это сделать? Smile И как?
Ответ
#8
Defuse Написал:Когда обратились с предложением "реализовать онлайн при входе в игру" (как на Астериосе) к Револтим, то они вроде опытные кодеры не смогли это сделать. Хотелось бы узнать, на этом форуме кто-то знает как это сделать? Smile И как?

так-же как и с кол. чаров на акаунте.... перед отправкой ServerList берем из ГСа количество онлайна:ugar:

int online = L2World.getAllPlayersCount();
Ответ
#9
Defuse Написал:Когда обратились с предложением "реализовать онлайн при входе в игру" (как на Астериосе) к Револтим, то они вроде опытные кодеры не смогли это сделать. Хотелось бы узнать, на этом форуме кто-то знает как это сделать? Smile И как?
Револьты - это сборище нубов, язык не поворачивается называть их кодерами.
Онлайн при входе в игру уже обсуждали как сделать и не раз и к вопросу ТС'а это не имеет никакого отношения. Юзаем поиск.

ТС'у поссмотрите как реализовано это в лыже. По факту:
1. Отсылаем запрос ГС'у на получения кол-во чаров. (пакеты логин сервера в логин сервере)
2. Обрабатываем запрос на стороне ГС'а (пакеты логин-сервера в гейм сервере).
3. Отправляем данные логин серверу (пакеты гейм сервера в гейм сервере).
4. Обрабатываем данные на стороне логин сервера (пакеты гейм сервера в логин сервере).
5. После отображения серверов циклично отображаем кол-во персонажей на серверах.
Ответ
#10
linliss Написал:так-же как и с кол. чаров на акаунте.... перед отправкой ServerList берем из ГСа количество онлайна:ugar:

int online = L2World.getAllPlayersCount();

Да я то в яве не шарю=) Я задал такой вопрос, чтобы лишний раз убедится что револы "сборище нубов" как сказал рут Big Grin Так как меня удивило это, что такую простую вещь они не смогли реализовать.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Ошибка запуска гейм сервера Kensiro 1 1,755 01-23-2018, 04:41 PM
Последний пост: PROGRAMMATOR
  Время сервера "/time" не совпадает с картой ntking 4 2,179 05-04-2017, 02:52 PM
Последний пост: ntking
  Анонс количества убитых Tiat KateKate7912 0 1,211 01-28-2016, 07:38 AM
Последний пост: KateKate7912
  Настройка сервера AndSrt 3 1,601 11-03-2015, 12:00 AM
Последний пост: Deeez
  Ошибка в логах игрового сервера KateKate7912 6 1,785 10-13-2015, 07:52 AM
Последний пост: KateKate7912
  Синхронизация координат клиента и сервера awers 5 2,806 11-03-2014, 12:05 AM
Последний пост: linliss
  Скрипт установки сервера не работает. Linux /. SunWar 2 1,334 08-24-2014, 06:48 PM
Последний пост: SunWar
  Вывод минимального количества игроков в конфиг для прохода к Antharas texport 13 3,947 01-31-2014, 11:23 AM
Последний пост: texport
  ядро сервера frozen pyworld 5 1,571 11-13-2013, 07:24 PM
Последний пост: [STIGMATED]
  Проблема с запуском Регистрации Гейм Сервера RandomSkill 6 2,049 07-23-2013, 03:46 PM
Последний пост: RandomSkill

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)