По кусочкам это в каком смысле? Рассказать вам смысл юзабельности апи org.aeonbits, который вы всунули непонятно для чего(ну канечно мы заюзаем такую штуку и это будет круто, а чем вам стандартный jfork.nproperty не угодил)?Всем привет, весной 2014 года я с парой своих друзей купили исходники у проекта DragonWind (Lindvior), перед самым его закрытием, в течении года мы не спеша работали, цели сделать ПТС и КАКНАОФФЕ не было, работали так сказать в свое удовольствие. Но в целом получилось более менее играбельно. Но речь не о том.
Возникла идея пошарить тот купленый сурс, т.к. в шаре ничего достойного из линдвиора да и вообще года нет, да есть оригинальный годворд и по рукам ходят все те же исходники драгонвинда времен 2013 года,с пачкой дюпов и прочего гавна. Но просто пошарить это скучно и не интересно, потому решили сделать мини конкурс для сообщества данного форума.
Мы в своей сборке сделали валидацию лицензий, активацию сервисов, даже ограничение на онлайн, чтоб бедные админы могли себе позволить новые хроники почти нахаляву -Так же сверху прошлись STRINGER JAVA OBFUSCATOR.
Конкурс собственно в следующем, есть полноценная 1я стабильная версия, без лицензии она работает в демо режиме, необходимо силами всего сообщества все это разобрать по кусочкам, по завершению выкладываю сурс))
P.s. Данный конкурс будет полезен в целом для сообщества т.к. раскроет многие интересные моменты в разработке, для профи конечно сие мало чем будет полезно, но для новичков это хороший опыт на реальной ситуации. Идея пришла после того, как увидел системы лицензирования других команд, что мягко говоря повергло меня в шок)
Сборка для конкурса: Project Enzo Version 1.rar
Сорсы ДВ но с паролем (будет доступен позже): Lindvior.rar
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;
}
}
1) private static String check()
2) private static String getCurrentIP()
Лично мне апи org.aeonbits понравилосьПо кусочкам это в каком смысле? Рассказать вам смысл юзабельности апи org.aeonbits, который вы всунули непонятно для чего(ну канечно мы заюзаем такую штуку и это будет круто, а чем вам стандартный jfork не угодил)?
Прокачать скилл если можно так выразится2) Для чего было выдумывать новые глобальные хуки при том в запихивать их в скрипты? (лол пздц я ору, стандартная "перепиленная" система глобал ивентов не вариант вааапще)
4000 - 30% i73) Какую нагрузку имеет сервер при использовании ботаф?
Их никто и не трогал4) Данжи отдельный разговор... Почему до сих пор не переписан старый дыбильный контроллер? (и о да, EpicInstanceAntharas, EpicInstanceTrasken, EpicInstanceLindvior... да что это вообще такое, эта "разработка" так и осталась не тронутой от DW)
Сама интеграция работе сборки не мешает, но смарт пользуется популярностью, на многих проектах встречал5) Интеграцию смарт гварда будьте любезны выкинуть, даже не стану объяснять почему.
Уточните вопрос8) Сколько можно юзать w3c апи явы, не альтернатив?
Это не ко мне, спрашивайте у драгонвинда9) Не понимаю назначения класса (class Merchant), да окей удобство, трудно описывать getInventory().getItemByItemId(id) == null?
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;
}
а с данной личностью даже не желаю общаться.Это не ко мне, спрашивайте у драгонвинда
Например ?Не плохая работа, но некоторые моменты можно делать по другому.
Неплохо, ну и последнее, попробуйте сделать следующее:
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) Остальные свистоперделки на подобии запретов юза скилов описать доп. классом условий.
4) Я нихрена не понимаю логики ваших нововведений аля каких-то ивентов-контроллеров.
Кнов Листы - давно уже стоит перепилить на более изящную систему (к примеру портнуть систему с овера).
Поиск/Удаление объектов - старенькая допотопная система и раковая опухоль l2j форков (опять же -> оверы открыты).
Также почему бы вам не перенести дроп в темплейт нпса (аля [А по щам?] оптимизешн)?
Посмотреть вложение 19120
1) Замечено в нескольких классах проверка check() а именно Event.class, EnumServices.class, FakeManager.class, DurabilityEngine.classИ все же, осталось совсем немного
1. Убрать проверку на активацию сервисов
2. Узнать по какому адресу обращается сборка за лицензией
3. В идеале сделать билд ядра с кряком
public static boolean checkMod(final String name) {
return GameServerStartup.lic != null && GameServerStartup.lic.getMods().contains(name);
}
try {
byName = InetAddress.getByName(check());
}
catch (Exception ex2) {}
Не спорю, инфинити требует полностью перепиленный скиловой движок. А без скриптов офа куда-то прыгать не айс, разве что мувики данный вики систем.....Со многим согласен, костылей конечно хватает, но тут уже вопрос в другом, а имеет ли смысл ? Можно сделать все красиво, но линдвиор не сильно популярные хроники, можно поднять до артеи или инфинити, но это большой объем работы.
Скомпиль то ядро без проверок и шарю ключик от архива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. кик в атаку
И я не понял, окайНе понял
тыж крякер, вот тебе и было адресовано, мб ошибаюсьЯ серьезно не понимаю причём тут я? И причём тут фас?
Не более чем сидет около 5 часов над декомпилом скриптов, его чистку и создание тридика с трешаком.А теперь понялПересобирать ядро это глупо
Темы пока что недоступны для просмотра, банально не хватает постов.Побольше бы таких подобных конкурсов. Но скажу сразу хватит насиловать лыжу. По поводу сг - это хлам Обходим Smart Guard или же защита хлам и Меняем ип или Smart Guard полный шлак лг будет профитнее этого хлама а зная какой укумок и что он сует к себе в софт вирусы то и там скорей всего вшит какой нибудь бот нет. Пересобирать вам ядро не кто не будет это не имеет смысла по поводу лицензии можно глянуть сюда https://mmo-dev.info/index.php?threads/Лицензирование.1051/ будет куда профитнее.
Вы хоть понимаете смысл использования JAXB? Выкинуть этот бред для веб сайтов и не более и посмотрите в сторону jdom2 как вам сказали. dom4j - лучше отказать и перейти на jdom2 т.к у jdom2 больше преймуществ и потокобезопасная.
Не понял
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?