Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Дюп - двойная сессия
#41
ParadiseDay Написал:я конечно 0 в сборках, в серверах, но нет ли выхода сделать возможность релога с задержкой 20-30 сек?

И так костылей в l2j хватает, зачем их еще больше делать?
Ответ
#42
Код:
synchronized (_lock)// TODO [G1ta0] че это за хуйня, и почему она тут
        {
            for (Player cha : GameObjectsStorage.getAllPlayersForIterate()) {
                if (MyStoreId == cha.getStoredId()) {
                    continue;
                }
                try {
                    if (cha.getObjectId() == MyObjectId) {
                        _log.warn("Double EnterWorld for char: " + activeChar.getName());
                        cha.kick();
                    }
                } catch (Exception e) {
                    _log.error("", e);
                }
            }
        }

Цитата кода из овера)))
Ответ
#43
kingzor Написал:Есть еще вариант))
Узнать как работает баг и запилить костыль))

kingzor Написал:И так костылей в l2j хватает, зачем их еще больше делать?


))))))))))
Вот бы сделать дома уборку и нажать "СОХРАНИТЬ"!)
Ответ
#44
dorocki Написал:))))))))))

Ахахах

PS: Есть предположения по фиксу, как я заметил на всех l2j подобных сборках на логин можно зайти до выбора сервера несколькими окнами одновременно используя 1 аккаунт.
Ответ
#45
GabberBaby Написал:Вы серьезно ?! А как же стринговые коллизии ?! Я уже и забыл какие ит сервера говно. Я надеюсь в люсе2 Рут выпилил такую хрень, а то пиздец же.

Расскажите, пожалуйста, про стринговые коллизии - что вы под этим понимаете? То, что совпадет hashCode()? Это очевидно, так как вариантов hasCode конечное множество 2^32, а вот количество слов - множество бесконечное. Поговорим о том, как работает HashMap? Так что же случится, когда совпадет hashCode? Быть может, должен где-то пригодиться и equals?

Ничем этот вариант не опасен, разве что только ресайзом бакета - операция дороговата. Но беспокоиться об этом на рамере порядка 10^3 записей немного нелепо.

Чтобы уж наверняка:

Код:
import lombok.extern.slf4j.Slf4j;

import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

@Slf4j
public class MapCollisionTest
{
    @Test
    public void testCollision()
    {
        Map<CustomKey, String> map = new HashMap<>();

        CustomKey k1 = new CustomKey(1);
        map.put(k1, "abc");
        CustomKey k2 = new CustomKey(2);
        map.put(k2, "def");

        log.debug("K1 hash {} K2 hash {}", k1.hashCode(), k2.hashCode());
        log.debug("K1 equals K2? {}", k1.equals(k2));

        String v1 = m2.get(k1);
        String v2 = m2.get(k2);
        log.debug("Get K1: {} Get K2: {}", v1, v2);

        assert !v1.equals(v2);
    }

    private class CustomKey
    {
        private int key;

        private CustomKey(int key) {
            this.key = key;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            CustomKey stringAlt = (CustomKey) o;

            return key == stringAlt.key;
        }

        @Override
        public int hashCode() {
            return 1;
        }
    }
}

Нет коллизии как таковой - есть совпадения hashCode с невысокой в текущих условиях вероятностью.
Ответ
#46
ProDev Написал:Расскажите, пожалуйста, про стринговые коллизии - что вы под этим понимаете? То, что совпадет hashCode()? Это очевидно, так как вариантов hasCode конечное множество 2^32, а вот количество слов - множество бесконечное. Поговорим о том, как работает HashMap? Так что же случится, когда совпадет hashCode? Быть может, должен где-то пригодиться и equals?

Ничем этот вариант не опасен, разве что только ресайзом бакета - операция дороговата. Но беспокоиться об этом на рамере порядка 10^3 записей немного нелепо.

Чтобы уж наверняка:

Код:
import lombok.extern.slf4j.Slf4j;

import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

@Slf4j
public class MapCollisionTest
{
    @Test
    public void testCollision()
    {
        Map<CustomKey, String> map = new HashMap<>();

        CustomKey k1 = new CustomKey(1);
        map.put(k1, "abc");
        CustomKey k2 = new CustomKey(2);
        map.put(k2, "def");

        log.debug("K1 hash {} K2 hash {}", k1.hashCode(), k2.hashCode());
        log.debug("K1 equals K2? {}", k1.equals(k2));

        String v1 = m2.get(k1);
        String v2 = m2.get(k2);
        log.debug("Get K1: {} Get K2: {}", v1, v2);

        assert !v1.equals(v2);
    }

    private class CustomKey
    {
        private int key;

        private CustomKey(int key) {
            this.key = key;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            CustomKey stringAlt = (CustomKey) o;

            return key == stringAlt.key;
        }

        @Override
        public int hashCode() {
            return 1;
        }
    }
}

Нет коллизии как таковой - есть совпадения hashCode с невысокой в текущих условиях вероятностью.

Ну, возможно я действительно чуть-чуть погорячился, что стринговые коллизии - это сущее говно. Но ведь есть же уникальные обжект иды. Какой смысл заранее использовать более проигрышный вариант?
Ответ
#47
GabberBaby Написал:Ну, возможно я действительно чуть-чуть погорячился, что стринговые коллизии - это сущее говно. Но ведь есть же уникальные обжект иды. Какой смысл заранее использовать более проигрышный вариант?


Я полностью согласен, что вариант не лучший, просто звучало предыдущее утверждение немного двусмысленно, поэтому и уточнил. А вообще оба варианта плохи, что через итератор, что через мэп, если возникает необходимость проверять данные на этом этапе, значит, где-то ранее хороший архитектурный пролаб.

Да и вообще большая часть LS перекочевывают с ошибками от хроник к хроникам. Например, ошибка с пингом вполне себе существует в той же версии от оверов.
Ответ
#48
Вот это дисскусия Smile Ещё варианты - будут?)))) В любом случае - ответ каждого был для нас ценным, спасибо!

Не ожидал такой активности, если чесно)
Ответ
#49
kingzor Написал:Ахахах

PS: Есть предположения по фиксу, как я заметил на всех l2j подобных сборках на логин можно зайти до выбора сервера несколькими окнами одновременно используя 1 аккаунт.
Ну и что? Это не значить что в гейм можно зайти 2-мя окнами на 1 чара - насколько я понимаю это проблема топик стартера - что на 1 чара заходят 2 окнами и дюпают. Если не в этом проблема ТС - то значить не полно описано - по описанию так получается.
А то что зайти на 1 акк можно в логине - это проблема - которую просто выносят в конфиг - чтобы включить/выключить.
Ответ
#50
Visor Написал:Ну и что? Это не значить что в гейм можно зайти 2-мя окнами на 1 чара - насколько я понимаю это проблема топик стартера - что на 1 чара заходят 2 окнами и дюпают. Если не в этом проблема ТС - то значить не полно описано - по описанию так получается.
А то что зайти на 1 акк можно в логине - это проблема - которую просто выносят в конфиг - чтобы включить/выключить.

Зачем вообще это нужно? Я про 1 аккаунт и 2 пользователя.
1
Ответ


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


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