Lineage 2 Lindvior - Конкурс

Tyrel

Путник
Пользователь
Сообщения
65
Розыгрыши
0
Репутация
161
Реакции
23
Баллы
0
Всем привет, весной 2014 года я с парой своих друзей купили исходники у проекта DragonWind (Lindvior), перед самым его закрытием, в течении года мы не спеша работали, цели сделать ПТС и КАКНАОФФЕ не было, работали так сказать в свое удовольствие. Но в целом получилось более менее играбельно. Но речь не о том.

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

Мы в своей сборке сделали валидацию лицензий, активацию сервисов, даже ограничение на онлайн, чтоб бедные админы могли себе позволить новые хроники почти нахаляву -:D Так же сверху прошлись STRINGER JAVA OBFUSCATOR.

Конкурс собственно в следующем, есть полноценная 1я стабильная версия, без лицензии она работает в демо режиме, необходимо силами всего сообщества все это разобрать по кусочкам, по завершению выкладываю сурс))

P.s. Данный конкурс будет полезен в целом для сообщества т.к. раскроет многие интересные моменты в разработке, для профи конечно сие мало чем будет полезно, но для новичков это хороший опыт на реальной ситуации. Идея пришла после того, как увидел системы лицензирования других команд, что мягко говоря повергло меня в шок)

Сборка для конкурса:
Сорсы ДВ но с паролем (будет доступен позже):
 
Последнее редактирование модератором:

Всем привет, весной 2014 года я с парой своих друзей купили исходники у проекта DragonWind (Lindvior), перед самым его закрытием, в течении года мы не спеша работали, цели сделать ПТС и КАКНАОФФЕ не было, работали так сказать в свое удовольствие. Но в целом получилось более менее играбельно. Но речь не о том.

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

Мы в своей сборке сделали валидацию лицензий, активацию сервисов, даже ограничение на онлайн, чтоб бедные админы могли себе позволить новые хроники почти нахаляву -:D Так же сверху прошлись STRINGER JAVA OBFUSCATOR.

Конкурс собственно в следующем, есть полноценная 1я стабильная версия, без лицензии она работает в демо режиме, необходимо силами всего сообщества все это разобрать по кусочкам, по завершению выкладываю сурс))

P.s. Данный конкурс будет полезен в целом для сообщества т.к. раскроет многие интересные моменты в разработке, для профи конечно сие мало чем будет полезно, но для новичков это хороший опыт на реальной ситуации. Идея пришла после того, как увидел системы лицензирования других команд, что мягко говоря повергло меня в шок)

Сборка для конкурса: Project Enzo Version 1.rar
Сорсы ДВ но с паролем (будет доступен позже): Lindvior.rar
По кусочкам это в каком смысле? Рассказать вам смысл юзабельности апи org.aeonbits, который вы всунули непонятно для чего(ну канечно мы заюзаем такую штуку и это будет круто, а чем вам стандартный jfork.nproperty не угодил)?
2) Для чего было выдумывать новые глобальные хуки при том в запихивать их в скрипты? (лол пздц я ору, стандартная "перепиленная" система глобал ивентов не вариант вааапще)
3) Какую нагрузку имеет сервер при использовании ботаф?
4) Данжи отдельный разговор... Почему до сих пор не переписан старый дыбильный контроллер? (и о да, EpicInstanceAntharas, EpicInstanceTrasken, EpicInstanceLindvior... да что это вообще такое, эта "разработка" так и осталась не тронутой от DW)
5) Интеграцию смарт гварда будьте любезны выкинуть, даже не стану объяснять почему.
6) Хорошая обфускация, ломаю голову.
7) Привяка:
Код:
class Lic
{
    private String AllowIp;
    private int MaxOnline;
    private int Version;
    private HashSet<String> Mods;

    public String getAllowIp() {
        return AllowIp;
    }

    public int getMaxOnline() {
        return MaxOnline;
    }

    public int getVersion() {
        return Version;
    }

    public HashSet<String> getMods() {
        return Mods;
    }
}

GameServerStartup.class
Код:
1) private static String check()

2) private static String getCurrentIP()
8) Сколько можно юзать w3c апи явы, нет альтернатив?
9) Не понимаю назначения класса (class Merchant), да окей удобство, трудно описывать getInventory().getItemByItemId(id) == null?
10) Не вижу чтобы у вас был переписан геодвижок, как остался старый таков и есть.
P.S. лично моя критика и мои исследования, пис!
 
Последнее редактирование:
По кусочкам это в каком смысле? Рассказать вам смысл юзабельности апи org.aeonbits, который вы всунули непонятно для чего(ну канечно мы заюзаем такую штуку и это будет круто, а чем вам стандартный jfork не угодил)?
Лично мне апи org.aeonbits понравилось

2) Для чего было выдумывать новые глобальные хуки при том в запихивать их в скрипты? (лол пздц я ору, стандартная "перепиленная" система глобал ивентов не вариант вааапще)
Прокачать скилл если можно так выразится

3) Какую нагрузку имеет сервер при использовании ботаф?
4000 - 30% i7

4) Данжи отдельный разговор... Почему до сих пор не переписан старый дыбильный контроллер? (и о да, EpicInstanceAntharas, EpicInstanceTrasken, EpicInstanceLindvior... да что это вообще такое, эта "разработка" так и осталась не тронутой от DW)
Их никто и не трогал

5) Интеграцию смарт гварда будьте любезны выкинуть, даже не стану объяснять почему.
Сама интеграция работе сборки не мешает, но смарт пользуется популярностью, на многих проектах встречал

8) Сколько можно юзать w3c апи явы, не альтернатив?
Уточните вопрос

9) Не понимаю назначения класса (class Merchant), да окей удобство, трудно описывать getInventory().getItemByItemId(id) == null?
Это не ко мне, спрашивайте у драгонвинда

А теперь что касается лицензирования, да class Lic это часть, отлично

1) private static String check()
2) private static String getCurrentIP()

Тоже хорошо, но эти данные можно получить и декомпилом простым если мне не изменяет память
Но все же интересно что в методах check() getCurrentIP() и в самом GameServerStartup.class
 
Код:
private static String check() {
        final Gson gson = new Gson();
        try {
            Reader reader = null;
            try {
                reader = new BufferedReader(new InputStreamReader(new URL(ThreadPoolManager$ThreadPoolManager$PriorityThreadFactory.풅("餎花⛔酟缺褻뢟洞↸癍岝暉㴘⛨棘ꗭ峧㉢艃靄렙惼䢙껂ᴿ蛯⍑ꈫ꾗㡾쵳턌−쪣儌쟤깂⨕") + Options.lic.Key() + ThreadPoolManager$ThreadPoolManager$PriorityThreadFactory.풅("饀芎⛅酖缲褩") + MD5.getHash(getCurrentIP())).openStream()));
                final StringBuilder sb = new StringBuilder();
                final char[] array = new char[1024];
                int read;
                while ((read = reader.read(array)) != -1) {
                    sb.append(array, 0, read);
                }
                final String string = sb.toString();
                if (string.contains(ThreadPoolManager$ThreadPoolManager$PriorityThreadFactory.풅("餧芩⛌酀罷襝룀"))) {
                    GameServerStartup.lic = (GameServerStartup$Lic)gson.fromJson(string, (Class)GameServerStartup$Lic.class);
                    if (GameServerStartup.lic.getVersion() <= 1 && GameServerStartup.lic.getAllowIp().equalsIgnoreCase(getCurrentIP())) {
                        return ThreadPoolManager$ThreadPoolManager$PriorityThreadFactory.풅("饖苫⚐鄁缰褺뢀");
                    }
                    GameServerStartup._log.fatal((Object)ThreadPoolManager$ThreadPoolManager$PriorityThreadFactory.풅("餲芍⛩酼缠襂룵勤⇟癮岺曇㴴⛇梟ꗆ岆㉅舆靷렣惙䢵껰ᵬ蛡⌸ꉥ"));
                }
                else {
                    GameServerStartup._log.fatal((Object)ThreadPoolManager$ThreadPoolManager$PriorityThreadFactory.풅("餢芀⛭酠缠襂룵勤⇟癮岺曇㵜⚨梞"));
                }
            }
            catch (Exception ex) {}
            finally {
                if (reader != null) {
                    try {
                        ((BufferedReader)reader).close();
                    }
                    catch (Exception ex2) {}
                }
            }
        }
        catch (Exception ex3) {}
        return ThreadPoolManager$ThreadPoolManager$PriorityThreadFactory.풅("饗苷⚗鄁缰褺뢀煮");
    }

    private static String getCurrentIP() {
        String s = null;
        try {
            BufferedReader bufferedReader = null;
            try {
                bufferedReader = new BufferedReader(new InputStreamReader(new URL(GameServerShutdown$GameServerStartup$Lic.혓("撮씣ⅾ\u2e58ꙩ?着佥鍇쑑ȥȉꋚ")).openStream()));
                final StringBuilder sb = new StringBuilder();
                final char[] array = new char[1024];
                int read;
                while ((read = bufferedReader.read(array)) != -1) {
                    sb.append(array, 0, read);
                }
                final Integer value = sb.indexOf(GameServerShutdown$GameServerStartup$Lic.혓("擤앩ⅽ\u2e40\ua63c?\ufaf6伨"));
                final String substring = sb.substring(value + 8, Integer.valueOf(sb.indexOf(GameServerShutdown$GameServerStartup$Lic.혓("擺앸Ⅻ⸖"), value)));
                if (substring.split(GameServerShutdown$GameServerStartup$Lic.혓("撚앹")).length == 4) {
                    s = substring;
                }
            }
            catch (Exception ex) {}
            finally {
                if (bufferedReader != null) {
                    try {
                        bufferedReader.close();
                    }
                    catch (Exception ex2) {}
                }
            }
        }
        catch (Exception ex3) {}
        return s;
    }
под парусами jd-gui :Stressed::Stressed::Stressed:
обфускатору ОГРОМНЕЙШИЙ +++++, понравилось, люблю такие няшки.
По поводу w3c, юзается у вас в парсерах данных. Есть жи прекрасные апи jdom2, dom4j (во много раз быстрее происходит обработка данных)

Это не ко мне, спрашивайте у драгонвинда
а с данной личностью даже не желаю общаться.

Не плохая работа, но некоторые моменты можно делать по другому.
 
Неплохо, ну и последнее, попробуйте сделать следующее:

1. Убрать проверку на активацию сервисов
2. Узнать по какому адресу обращается сборка за лицензией
3. В идеале сделать билд ядра с кряком

Что касается парса данных, я начал использовать в модах своих JAXB, удобство не сравнить ни с чем.
Вот пример JAXB.rar

Не плохая работа, но некоторые моменты можно делать по другому.
Например ?
 

Вложения

  • JAXB.rar
    2,1 КБ · Просмотры: 94
Неплохо, ну и последнее, попробуйте сделать следующее:

1. Убрать проверку на активацию сервисов
2. Узнать по какому адресу обращается сборка за лицензией
3. В идеале сделать билд ядра с кряком

Что касается парса данных, я начал использовать в модах своих JAXB, удобство не сравнить ни с чем.
Вот пример JAXB.rar
Код:
/**
* User: GenCloud
* Date: 06.07.2015
* Team: La2Era Team
*/
public class BuffStackGroupData extends XmlDocumentParser
{
    private static final Map<String, String[]> locked_list = new HashMap<>();

    protected static BuffStackGroupData instance;

    private BuffStackGroupData()
    {
        try {
            load();
        } catch (JDOMException | IOException e) {
            e.printStackTrace();
        }
    }

    public static BuffStackGroupData getInstance()
    {
        return instance == null ? instance = new BuffStackGroupData() : instance;
    }

    @Override
    public void load() throws JDOMException, IOException {
        locked_list.clear();
        parseFile(FilePath.BUFF_STACK_GROUP_DATA);
        _log.log(Level.INFO, getClass().getSimpleName() + ": Loaded " + locked_list.size() + " group.");
    }

    @Override
    public String getDTDFileName() {
        return Config.DATAPACK_ROOT + "/data/dtd/BuffStackGroupData.dtd";
    }

    @Override
    protected void parseDocument(Element rootElement)
    {
        String abnormal_type = null;
        String[] loc_type = new String[0];
        for (Element element : rootElement.getChildren())
        {
            final String name = element.getName();
            if (name.equalsIgnoreCase("abnormal_type"))
            {
                abnormal_type = element.getAttributeValue("type");

                for (Element element1 : element.getChildren())
                {
                    final String name1 = element1.getName();
                    if (name1.equalsIgnoreCase("locked_abnormals"))
                    {
                        loc_type = element1.getAttributeValue("type").split(",");
                    }
                }
            }
            locked_list.put(abnormal_type, loc_type);
        }
    }

    public String[] getLockedAbnormalsList(String locked_name)
    {
        return locked_list.get(locked_name);
    }
}
Ну а чем плох такой подход?) Не изучал данную дулзу, спасибо просмотрю
 
Ну а чем плох такой подход?)
В плане кода сильно много, а jaxb это сразу проекция на объект, описал структуру - данные готовы.

И все же, осталось совсем немного

1. Убрать проверку на активацию сервисов
2. Узнать по какому адресу обращается сборка за лицензией
3. В идеале сделать билд ядра с кряком
 
Фестеваль Хаоса - уж слишком на мудрено.
1) Саму логику файтов, таймеров, появления мобов и т.п. мелочи можно описать изначально в классе данжа.
2) Сделать ДАО механизм (точно не помню но вроде видел у вас).
3) Остальные свистоперделки на подобии запретов юза скилов описать доп. классом условий.
4) Я нихрена не понимаю логики ваших нововведений аля каких-то ивентов-контроллеров.
Кнов Листы - давно уже стоит перепилить на более изящную систему (к примеру портнуть систему с овера).
Поиск/Удаление объектов - старенькая допотопная система и раковая опухоль l2j форков (опять же -> оверы открыты).
Также почему бы вам не перенести дроп в темплейт нпса (аля [А по щам?] оптимизешн)?
31f2760419fd8a098ccaf717b35ea00b.png
 
Последнее редактирование модератором:
Фестеваль Хаоса - уж слишком на мудрено.
1) Саму логику файтов, таймеров, появления мобов и т.п. мелочи можно описать изначально в классе данжа.
2) Сделать ДАО механизм (точно не помню но вроде видел у вас).
3) Остальные свистоперделки на подобии запретов юза скилов описать доп. классом условий.
4) Я нихрена не понимаю логики ваших нововведений аля каких-то ивентов-контроллеров.
Кнов Листы - давно уже стоит перепилить на более изящную систему (к примеру портнуть систему с овера).
Поиск/Удаление объектов - старенькая допотопная система и раковая опухоль l2j форков (опять же -> оверы открыты).
Также почему бы вам не перенести дроп в темплейт нпса (аля [А по щам?] оптимизешн)?
Посмотреть вложение 19120
Со многим согласен, костылей конечно хватает, но тут уже вопрос в другом, а имеет ли смысл ? Можно сделать все красиво, но линдвиор не сильно популярные хроники, можно поднять до артеи или инфинити, но это большой объем работы.
 
Последнее редактирование модератором:
И все же, осталось совсем немного

1. Убрать проверку на активацию сервисов
2. Узнать по какому адресу обращается сборка за лицензией
3. В идеале сделать билд ядра с кряком
1) Замечено в нескольких классах проверка check() а именно Event.class, EnumServices.class, FakeManager.class, DurabilityEngine.class
Код:
public static boolean checkMod(final String name) {
        return GameServerStartup.lic != null && GameServerStartup.lic.getMods().contains(name);
    }
Чистим данную проверку и ее же зависимости, возможно что-то упустил.
2) ИП: Достаточно смотреть на список вновь открытых портов, для этого подойдет
TCPView (честно мне впадлу ставить бд, запускать и ждать когда он пройдет проверку ниже)
Код:
 try {
            byName = InetAddress.getByName(check());
        }
        catch (Exception ex2) {}

Со многим согласен, костылей конечно хватает, но тут уже вопрос в другом, а имеет ли смысл ? Можно сделать все красиво, но линдвиор не сильно популярные хроники, можно поднять до артеи или инфинити, но это большой объем работы.
Не спорю, инфинити требует полностью перепиленный скиловой движок. А без скриптов офа куда-то прыгать не айс, разве что мувики данный вики систем.....:Stressed:
 
1) Замечено в нескольких классах проверка check() а именно Event.class, EnumServices.class, FakeManager.class, DurabilityEngine.class
Код:
public static boolean checkMod(final String name) {
        return GameServerStartup.lic != null && GameServerStartup.lic.getMods().contains(name);
    }
Чистим данную проверку и ее же зависимости, возможно что-то упустил.
2) ИП: Достаточно смотреть на список вновь открытых портов, для этого подойдет
TCPView (честно мне впадлу ставить бд, запускать и ждать когда он пройдет проверку ниже)
Код:
 try {
            byName = InetAddress.getByName(check());
        }
        catch (Exception ex2) {}
Скомпиль то ядро без проверок и шарю ключик от архива 😉
 
Скомпиль то ядро без проверок и шарю ключик от архива 😉
Вы мне предлагает вычистить все то дерьмо оставшееся от декомпила и скомпилить? нетуж спасибо, шутканул
P.S. кик в атаку
 
  • Мне нравится
Реакции: Forcecat и kick

    kick

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

    Forcecat

    Баллов: 1
    Без комментариев
:yao ming:
 
Побольше бы таких подобных конкурсов. Но скажу сразу хватит насиловать лыжу. По поводу сг - это хлам Обходим Smart Guard или же защита хлам и Меняем ип или Smart Guard полный шлак лг будет профитнее этого хлама а зная какой укумок и что он сует к себе в софт вирусы то и там скорей всего вшит какой нибудь бот нет. Пересобирать вам ядро не кто не будет это не имеет смысла по поводу лицензии можно глянуть сюда https://mmo-dev.info/index.php?threads/Лицензирование.1051/ будет куда профитнее.
Вы хоть понимаете смысл использования JAXB? Выкинуть этот бред для веб сайтов и не более и посмотрите в сторону jdom2 как вам сказали. dom4j - лучше отказать и перейти на jdom2 т.к у jdom2 больше преймуществ и потокобезопасная.
Вы мне предлагает вычистить все то дерьмо оставшееся от декомпила и скомпилить? нетуж спасибо, шутканул
P.S. кик в атаку
Не понял :D
 
Побольше бы таких подобных конкурсов. Но скажу сразу хватит насиловать лыжу. По поводу сг - это хлам Обходим Smart Guard или же защита хлам и Меняем ип или Smart Guard полный шлак лг будет профитнее этого хлама а зная какой укумок и что он сует к себе в софт вирусы то и там скорей всего вшит какой нибудь бот нет. Пересобирать вам ядро не кто не будет это не имеет смысла по поводу лицензии можно глянуть сюда https://mmo-dev.info/index.php?threads/Лицензирование.1051/ будет куда профитнее.
Вы хоть понимаете смысл использования JAXB? Выкинуть этот бред для веб сайтов и не более и посмотрите в сторону jdom2 как вам сказали. dom4j - лучше отказать и перейти на jdom2 т.к у jdom2 больше преймуществ и потокобезопасная.

Не понял :D
Темы пока что недоступны для просмотра, банально не хватает постов.
Что касается JAXB, а что в нем плохого, если по сути на выходе мы получаем те же данные что и при использовании того же jdom2 ? Если есть какие то особенности использования в проектах J2SE то хотелось бы услышать, гугл он конечно хорош, но при выборе этой технологии ничего негативного найдено не было. Ладно бы это был фреймфорк J2EE, но это же часть J2SE.
 
Назад
Сверху Снизу