Реализация дисконекта

Ne1s

Прославленный
Местный
Сообщения
314
Розыгрыши
0
Репутация
354
Реакции
142
Баллы
1 435
Кто подскажет где есть такое или как реализовать, чтобы окно выбора персонажа было доступно 5 минут, затем дисконект если персонаж не выбран.
 
В чем смысл? Как по мне не нужная вещь
 
через поток, запускаем на 5 минут, при этом инсертим переменную в пакет выбора персонажа, к примеру int select = 0; при выборе персонажа задаем переменной значение 1, а в потоке проверяем if(select = 0) то десконектим с сервера
 
а на практике это как сделать?
package l2p.gameserver.serverpackets;

import l2p.gameserver.GameTimeController;
import l2p.gameserver.model.Player;
import l2p.gameserver.utils.Location;

public class CharSelected extends L2GameServerPacket
{
// SdSddddddddddffddddddddddddddddddddddddddddddddddddddddd d
private int _sessionId, char_id, clan_id, sex, race, class_id;
private String _name, _title;
private Location _loc;
private double curHp, curMp;
private int _sp, level, karma, _int, _str, _con, _men, _dex, _wit, _pk;
private long _exp;

public CharSelected(final Player cha, final int sessionId)
{
_sessionId = sessionId;

_name = cha.getName();
char_id = cha.getObjectId(); //FIXME 0x00030b7a ??
_title = cha.getTitle();
clan_id = cha.getClanId();
sex = cha.getSex();
race = cha.getRace().ordinal();
class_id = cha.getClassId().getId();
_loc = cha.getLoc();
curHp = cha.getCurrentHp();
curMp = cha.getCurrentMp();
_sp = cha.getIntSp();
_exp = cha.getExp();
level = cha.getLevel();
karma = cha.getKarma();
_pk = cha.getPkKills();
_int = cha.getINT();
_str = cha.getSTR();
_con = cha.getCON();
_men = cha.getMEN();
_dex = cha.getDEX();
_wit = cha.getWIT();
}

@Override
protected final void writeImpl()
{
writeC(0x0b);

writeS(_name);
writeD(char_id);
writeS(_title);
writeD(_sessionId);
writeD(clan_id);
writeD(0x00); //??
writeD(sex);
writeD(race);
writeD(class_id);
writeD(0x01); // active ??
writeD(_loc.x);
writeD(_loc.y);
writeD(_loc.z);

writeF(curHp);
writeF(curMp);
writeD(_sp);
writeQ(_exp);
writeD(level);
writeD(karma); //?
writeD(_pk);
writeD(_int);
writeD(_str);
writeD(_con);
writeD(_men);
writeD(_dex);
writeD(_wit);
for(int i = 0; i < 30; i++)
writeD(0x00);

writeF(0x00); //c3 work
writeF(0x00); //c3 work
// extra info
writeD(GameTimeController.getInstance().getGameTime()); // in-game time
writeD(0x00); //
writeD(0x00); //c3
writeC(0x00); //c3 InspectorBin
writeH(0x00); //c3
writeH(0x00); //c3
writeD(0x00); //c3
//writeD(0x00); //c3 InspectorBin for 528 client
//writeD(0x00); //c3
//writeD(0x00); //c3
//writeD(0x00); //c3
//writeD(0x00); //c3
//writeD(0x00); //c3
//writeD(0x00); //c3
//writeD(0x00); //c3
//writeD(0x00); //c3

//writeD(0x00); //c5
//writeD(0x00); //c5
//writeD(0x00); //c5
}
}
 
я вам должен разжевывать? Учитесь, смотрите примеры реализаций кода ThreadPoolManager, doDisconnect функции. Это все есть в вашем ядре, нужно только поискать и подумать.
 
Реакции: Ne1s
Создаем в L2GameClient переменную типа ScheduledFuture(необходимо для остановки потока), при входе в Лобби(пакет RequestGotoLobby) запускаем поток который будет выполнен через * промежуток времени, и записываем в переменную что вернул L2ThreadPoolManager. Далее если персонаж вошел в мир(EnterWorld) отменяем поток через переменную которая в L2GameClient(ScheduledFuture), в ином случае поток успешно завершит работу(нужный вам код).
 
Реакции: Ne1s

    Mizuwokiru

    Баллов: 15
    Без комментариев
На ПТС серверах кикает через 10 минут. Всё предложенное выше костыли костылей.
 
Реакции: kick

    kick

    Баллов: 17
    Без комментариев
Да действительно, костыли. Так предложите же нам "О, Великий" рациональное решение "ПАОФУ".
 
Раздавать советы самое безответственное занятие. Я сказал достаточно, чтобы автор знал где это глянуть и реализовать механизм без костылей. Умерьте своё ЧСВ, оно слишком завышено.
 

    Mizuwokiru

    Баллов: -15
    Без комментариев
Хотел воздержаться... Ок, предоставьте нам сорсы PTS(не куриво смелого и тд, именно кор офа), тогда мы будем там смотреть. А смотреть на то что выдает дизасемблер, рядовому пользователю, это как "Стать королем аськи".

П.С. А по теме, может стоит еще покопать в сторону сетевой реализации в сервере, может там есть время закрытия соединения ели не было активность в течении определенного интервала времени.
 
Ты сказал только то, что на ПТСе (при чем он здесь вообще, если имеется в виду Java-эмулятор?!) кикает через 10 минут и какие все калеки.
 
Пришел, пернул, ушел.
 
Реакции: gvb
Все нормальные люди работу клиента с сервером смотрят через снифер пакетов. У вас, видимо, принято всё изучать тактильно подключая собственные пукановые ощущения. Поэтому все остальные, кроме вас, пердят проходя мимо.
 
ты дибил? каким боком пакетка относиться к данной теме? ты там интервал дисконекта через нее засекал или что?
 
Диванные проффесор детектед. Каким макаром ты через снифер будешь смотреть механику? Снифер тебе покажет только кусок данных в которых будет приказ клиенту на дисконект, мой вариант тоже такое покажет через снифер.

[
П.С. Прежде чем что то советовать изучи назначение пакетной части.
 
Последнее редактирование модератором:

немного поправлю,
в пакете клиента (****clientpackets.AuthLogin именно после выбора сервера клиент шлёт его и появляется выбор персов) через поток, запускаем таймер на 5 минут,
в нём по истечении 5-ти минут делаем проверку всех персов аккаунта на isOnlain()(isOnlain() это реализовано практически в всех сборках)
и соответственно если истина, то просто просто отменяем поток, иначе поток успешно завершит работу с указанными Вашими параметрами(отсылает пакет дисконнекта).

просто улыбнуло -
 
как я писал выше, просто отменяем дальнейшее выполнение потока при EnterWorld=)
 
да, но добавлять новые переменные, зачем?
 
да, но добавлять новые переменные, зачем?
Правильно, давайте будет запускать цыкл по персонажам, это будет более продуктивнее. Так же персонаж может 10 раз перезайти пока эти 5 минут пройдут, а это еще +потоки которые будут сидеть в сервере.

П.С. ТСу: Так же не забудьте что есть метод RequestRestart(вход в лобби из игры а не после выбора сервера), там тоже по идее нужно пускать поток.
 

    Mizuwokiru

    Баллов: 15
    Без комментариев