Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Работа со скриптами (https://forum.zone-game.info/forumdisplay.php?f=37)
-   -   Показ количества перосонажей при выборе сервера. (https://forum.zone-game.info/showthread.php?t=16708)

Mifesto 12.11.2011 23:34

Показ количества перосонажей при выборе сервера.
 
В ХФ вместо пинга выводиться количество персонажей на сервере.
Суть проблемы в том что есть пакеты ГСа и ЛСа, есть сама структура пакета СерверЛист.

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

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

Сами пакеты брал с Лыжы и переделывал ан феникс.

Z3oM 13.11.2011 00:03

Re: Показ количества перосонажей при выборе сервера.
 
Можно код?

Mifesto 13.11.2011 01:10

Re: Показ количества перосонажей при выборе сервера.
 
loginserver\gameservercon\gspackets\ReplyCharacter s.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\ReplyCharacter s.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);
                }
               
        }
****************************************

Вот вроде весь код дал, в пакетах не силен только учусь.....

Z3oM 13.11.2011 08:29

Re: Показ количества перосонажей при выборе сервера.
 
Ну для начало нужен коннект к обращению к базе, потом запрос.
Сатри!

Код:

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();
                }

Я так понял по запросу тут время удаления чара? чтоль? Опять же в Цикле тут хз не понятно указывает чтоль на колличество поставленный чаров на удаление? Я понять не могу. Во первых нужен запрос вот такой
Код:

SELECT SUM(online) FROM characters
как то так! Тогда база тебе вернет сумму активных чаров те-кто в игре! Опять же

Код:

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

Добавлено через 11 минут
Опять же не могу понять почему в Цикле while chars++; стоит инкримент. Думаю не нужно объяснять что это такое.
Код:

while (rset.next())
За что отвечает это условие за выход? чтоле? понять не могу до кокого состояния будет крутиться цикл?

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

Добавлено через 16 минут
Рой в L2Player.java в пакете
Код:

l2p.gameserver.model

linliss 13.11.2011 09:18

Re: Показ количества перосонажей при выборе сервера.
 
Цитата:

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

перед отправкой пакета ServerList(LS), посылаем на GS пакет с акаунтом, на GSe берем нужные данные и оправляем обрано на LS, и после этого уже должен отсылатся пакет ServerList

ЗЫ: Z3oM учи яву, не позорься...

Z3oM 13.11.2011 10:21

Re: Показ количества перосонажей при выборе сервера.
 
Цитата:

Сообщение от linliss (Сообщение 147913)
ЗЫ: Z3oM учи яву, не позорься...

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

Добавлено через 1 минуту
Я наверное суть проблемы не правильно понял.

Gambit_J 13.11.2011 11:14

Re: Показ количества перосонажей при выборе сервера.
 
Когда обратились с предложением "реализовать онлайн при входе в игру" (как на Астериосе) к Револтим, то они вроде опытные кодеры не смогли это сделать. Хотелось бы узнать, на этом форуме кто-то знает как это сделать? :) И как?

linliss 13.11.2011 11:44

Re: Показ количества перосонажей при выборе сервера.
 
Цитата:

Сообщение от Defuse (Сообщение 147922)
Когда обратились с предложением "реализовать онлайн при входе в игру" (как на Астериосе) к Револтим, то они вроде опытные кодеры не смогли это сделать. Хотелось бы узнать, на этом форуме кто-то знает как это сделать? :) И как?

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

int online = L2World.getAllPlayersCount();

Ro_0TT 13.11.2011 12:09

Re: Показ количества перосонажей при выборе сервера.
 
Цитата:

Сообщение от Defuse (Сообщение 147922)
Когда обратились с предложением "реализовать онлайн при входе в игру" (как на Астериосе) к Револтим, то они вроде опытные кодеры не смогли это сделать. Хотелось бы узнать, на этом форуме кто-то знает как это сделать? :) И как?

Револьты - это сборище нубов, язык не поворачивается называть их кодерами.
Онлайн при входе в игру уже обсуждали как сделать и не раз и к вопросу ТС'а это не имеет никакого отношения. Юзаем поиск.

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

Gambit_J 13.11.2011 12:31

Re: Показ количества перосонажей при выборе сервера.
 
Цитата:

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

int online = L2World.getAllPlayersCount();

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


Текущее время: 12:00. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot