Saltfire
Постоялец-
Публикаций
547 -
Зарегистрирован
-
Посещение
-
Победитель дней
24 -
Отзывы
N/A
Тип контента
Профили
Форумы
Загрузки
Магазин
Инструкции
Весь контент Saltfire
-
Да это у единиц есть, никто не сольет этого никогда. Любая логика, должна быть логикой, а не просто набором данных (как у лыж). В вашем случае на Kotlin, можно добиться тех же результатов, что и на java, динамичности. Возьмите организацию базы за основу, основ, всего этого сервера. Забудьте, что такое: xml,cfg,properties,ini,config,etc...(не касается компиляторов и нативных файлов, где базы нет и реально лучше xml или что-то проще, чем свой велосипед), не нужно лишних файлов на сервере и каких-то непонятных разных механизмов для взаимодействия с ними - база будет легко справляться с любой прихотью. Легко редактируется, легко ищется по SQL запросу, легко меняется, легко дампить данные как нужно и когда нужно. И все возможные транзакции и множества других специфических функций, а для такого проекта как л2, нужна не маленькая база и логика для работы с ней. Что касается htm, также нужна динамика, 1 файл, 1 нпц, без лишних дублирующих: 30002-1, 30002-2, 30002-3, etc... Для избежания таких костылей, копипаста папок и тонны файлов на разных языках, с разными текстами и непонятным оформлением, требуется сделать словарь текстов, на разных языках и вызывать лишь по ключику Msg.get("myText") нужный текст - при выборе языка, будет изменяться только текст, а для htm разметки, сделать простенький шаблонизатор, чтобы разделить логику разметки на блоки, для взаимодействия с нпц, после отправки bypass, чтобы знать, какой блок за что отвечает и когда показывать. По пакетке, опять-же, динамика нужна, для работы с пакетами, иначе потонешь. Про геодату и Поиск пути я вообще молчу, тут все на столько плохо, что лучше даже не смотреть. И таких моментов, тут можно очень долго перечислять и вести бесконечные дискуссии.
-
Ну по исходам, новый по лыже пишите на Kotlin. Даже названия соответствуют, тех-же пакетов и т.д., нет никакой динамики и в целом опять будет флуд-классами и наследованием один на другом, без на то причины, так-как у вас это уже началось, а дальше там только хуже, там туча классов и интерфейсов для АI будет и еще там много всего и проект раздует опять под 3к файлов.
-
Вы пишите сервер новый, по серверу, который наследуется от l2jserver? Вы серьезно что-ли? У лыж, эта побочка везде, одинаковое перемещение персонажа, по таймеру, с одинаковыми значениями в секунду, не помню, есть ли там вообще расчет сколько пройдем за секунду. Но я помню, что у них там костыли и нет там расчета уже пройденной со старта дистанции, а также время которое уже затребовалось, чтобы пройти. У лыж все просто, одинаковыми значениями, каждую секунду, происходит синхронизация движения, прибавлением одного и того-же числа, пока двигаемся.
-
У тебя есть 65к+ портов, из них, занятые системами и т.д. Порт будет закрыт ровно до момента, когда ты начнешь вешать на него слушателя. Суть в другом. Какое ты используешь подключение и для какой цели тебе интернет и смогут ли к тебе просто взять и вломиться, как в дверь. У тебя же может быть и прямой доступ сразу, а может быть с раздачи, через тот-же роутер, а есть NAT, который тебе этого не позволит сделать без особых маршрутов и хорошего модема, обычные от провайдера, они вряд ли смогут это сделать. Но все-же, я еще раз повторюсь, есть прямой доступ, ты сможешь сделать подключение через логин и пароль, как это было в старые времена, вписав свой ип и запустив сервер, любой зайдет. Кто не хочет заморачиваться с пересозданием интернет подключения, идут другим путем. Например: Это свой софт или сторонний софт, который поможет выделить канал, доступный для любого подключения из вне, на который привязать сервер. Отдельный нужно маршрут, а не порт открывать Я думаю вы можете попробовать VPN, этим сменить подключение на нужное вам. Никогда не страдал такой ерундой, но для друзей, если у вас это не весь город или мир То можно просто любую программу, которая сможет создать вам канал, в который зайдут друзья и после смогу играть.
-
Это сработает, когда вы убьете босса и перезапустите сервер. Так-как, время респа берется с базы, а база будет обновлена после перезапуска служб сервера. То это будет отображаться не корректно, и после убийства босса, вы будете видеть, что он по прежнему еще жив, а хотя его уже нет. То есть после убийства мобов, боссов и т.д., сразу никто не обновляет базу и весь спавн уж тем-более, все работает на уровне памяти и кеширования данных. Когда происходит перезапуск, данные из памяти сохраняются, отчищаются и берутся новые при запуске. Для того, чтобы это избежать, нужно использовать статус конкретного босса: //............. private final RaidBossSpawnManager spawnBoss = RaidBossSpawnManager.getInstance(); //............. if (StatusEnum.DEAD == spawnBoss.getRaidBossStatusId(ИД_БОССА)) { // МЁРТВ } else { // ЖИВ } //.............
- 2 ответа
-
- 1
-
On the forum, can't check the files section because your religion forbids it?
-
Да ладно, что в emurt нет баффера? А вообще, я думаю, что npc магазинов, менеджеров, бафферов - уже быть не должно, только npc которые участвуют в квестовых, территориальных и инстант событиях, а также порталов и башен. Остальное в HF нужно делать на уровне клиента, прямо через интерфейс и если специфичное что-то, уже на уровне dll. Хватит и шарного компилятора и UE редактора. И желательно, найти исходники сервера, чтобы ты смог править в случае каких-то глобальных изменений на клиентской стороне, ибо, чтобы сделать крутого многопрофильного баффера со всеми фишками и плюшками, с открытием окошка, перемещение, сохранением, созданием профилей и т.д., чтобы это все было удобно... Уж точно не удастся сделать без исходников сервера. А всякую шляпу делать, какой в этом смысл?
-
Чувствую если ты начнешь писать мануал, то сможешь понимать его только ты, либо это будет не твой мануал
-
Логика вундеркинда. не помогают, значит не знают. Можно было и не создавать.
-
Да никакого толку, желания и интереса нет помогать таким, кто сам не знает чего хочет и голову включать не хочет, а только создает бесполезные темы, которые так и будут потом валяться мертвым грузом и никому не будут нужны. Это ты только сейчас понял?
-
Открыть тебе тайну? Любой клиент будет блокировать защитник, пока в исключения не поставишь. А все потому, что сертификата то нету, и никогда ты его не сделаешь. Смирись и живи дальше. Это л2, тут всегда так было и будет! И ничего ты с этим не поделаешь. Хоть как ты не скрывай его, хоть как ты не бусти и обфусцируй, ничего у тебя не выйдет, рано или поздно защитник найдет, что ему нужно. Любой софт, который работает с интернетом (да и не только с интернетом), будет блокировать защитник, если нет сертификата.
-
Знаю я таких, телефон всегда исправляет, но никак 2 ошибки(ДВЕ!!!!!) в слове из 3-х букв.
-
http://akumu.ru/lineage2/L2RU/P216/ Вот для кого это все делалось? Чтобы очередная тема была ? Помогите? Спасите? ищу (а не шю) и даже тут умудрился допустить ошибку, в таком простом слове.
-
Да возьми какие-нибудь l2jts от Hack, если платить не хочешь. Из платных, я хз, там хвалили l2jeternity, ну или l2jphoenix. Я даже не знаю, еще кто-то делает Gracia ? Кому она нужна? Уже весь упор "IT,HF,CLassic".
-
Что вы ищите? Непонятно ничего, во первых, Эпилог это грация, если память не изменяет, а хф это хф. ХФ Как-раз, для Вас хроника, Где можно сделать буквально все, что душе угодно с клиентом. Что даже позавидуют клиенты хроник Classic протокола 166 да и вообще других, который как-раз все делают но конечно-же добраться там до чего-то будет проблематично, лишь единицы смогут это сделать быстро (да и вообще сделать), ибо компилятор надо править тоже и интерфейс =) Так-же в ХФ можно обойти и сделать свой отдельный вход, лоби, и т.д. На Хф хватит и шарного компилятора с которым достигните любых вершин. По исходникам, да бери любой и пили для себя, какой смысл за каждым бегать, который рефактор провел и типо новый код , Большинство разрабов не переписывают, а лишь так подчистят и готово и своего сверху накидают. Главное, бери исходы, которые кто-то поддерживает тоже. Иначе будет нечего чекать. И тогда только одному одинешеньке, это касается только тех, кто игру всю не знает и устройство сервера и клиента... Конечно тоже найти сложно в бесплатном, да еще и бесплатные обновления. Да и в платном не всегда исходники получаете, не говоря уже про бесплатно, а " +- " то, покупаете тоже самое. По этому, если сам не разбираешься, только нужно платить, чтобы за тебя разбирались =)
-
Почему бы вам AC тогда не взять? Правда зачем оно нужно? Сейчас никто не будет играть в игру, где нужно терять миллионы часов, когда можно заплатить и сделать чтобы сама играла. Вся суть в сервере, очень плохо синхронизирован с клиентом. То есть, если раньше были только макросы, чтобы в ручную выбирать цель, то теперь оно само выбирает. Стало легче жить правда? Теперь ситуация с кликерами, ты сидишь, теряешь море часов, чтобы в ручную выбирать скролл, вставлять пуху, гемы, камни, водить мышь, чтобы нажать на кнопку и постоянно совершать действия, которые наскучат в такой огромной игре и ее атмосфере. А тут само все выбирает, кликает, водит, пошел кофе налил, дела поделал, пусть электричество жгет, играет днями и ночами, а ты будешь только забирать бонусы и открывать всякую хрень и проходить мисии, как круто и легко стало жить, правда? И смотреть за игровым процессом, словно в мультфильме. Главное это же развитие, какую линию выбрал ту и развиваешь. И пусть он там бегает колотит днями и ночами этих мобов, на автомате, какая разница. Сейчас уже другая л2. Всем хочется равенства и автоматики, тогда у тебя будут все играть (а не ФантомБоты). И еще меня поражают все эти исходники сборок это мусорные классы для базы в них еще раз запрос к базе и наполнения классов с перечислениеем тонны информации... За которой еще и следить нужно. Когда можно сделать так: import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; public class TableClass<T> { private Map<String, List<T>> data = new HashMap<>(); private Map<String, Function<TableClass<T>, T>> methods = new HashMap<>(); public TableClass(List<Map<String, T>> dataArray, List<String> excludes) { for (Map<String, T> entry : dataArray) { entry.keySet().stream() .filter(key -> !excludes.contains(key)) .forEach(key -> { data.computeIfAbsent(key, k -> new ArrayList<>()).add(entry.get(key)); }); } } public void addMethod(String name, Function<TableClass<T>, T> func) { methods.put(name, func); } public T invokeMethod(String name) { return methods.get(name).apply(this); } public T getProperty(String key) { List<T> values = data.get(key); if (values == null || values.isEmpty()) { return null; } return values.get(0); } } и любую таблицу превращать в класс с методами, если потребуются. При этом мы перечисляем только те поля, которые не хотим показывать и те функции которые только нужно, остальное просто через свойства класса.
-
Не пойму, ты сам с собой поговорил получается? Я очень сильно сомневаюсь, что ты осилишь engine.dll от данного клиента. Ты просто не представляешь, какая учесть ждет тебя. Покажи, хоть один мне клиент interlude, где есть хоть что-то свое из мира фантастики, да тот-же радар кастомный, этого хватит тебе потеряться на долго. И темы, кто сравнивает от IT-HF, просто не сопоставимы, interlude клиент совершенно другой и там нет такого, что есть в HF, где можно хоть два радара сделать и хоть что затолкать, так сложилось, что HF был сделан не удачным образом и вскрытие и модернизация этого клиента безгранична...
-
Не уверен, что у тебя хватит денег на реверсера Иначе бы уже нанял и не задавал бы глупых вопросов.
-
Что подразумевается под простым способом? (вы сначала попробуйте заинжектиться в процесс, с данным продуктом, без жопаболей и заглушек, у вас этого не удастся сделать, ко всему, если конечно не лохо обновлятор, который никак не передает о том, что к серверу уже начали подключаться, после кнопки старт в Обновляторе, а если этого нет, тогда вы сможете запустить клиент в обход Обновлений и опустить библиотеки до нужного уровня и заглушить или вычистить, оставив только шифрацию и передачу пакетов и тайминги - но я сомневаюсь. что у вас хватит знаний и сил это сделать).
-
Естественный процесс, клиент использует "Anticheat" встроенный продукт для отслеживания как-раз таких действий, которые модернизируют файлы клиента, а также пытаются дергать клиентские файлы в обход, главного процесса игры, который запущен, он работает именно так (надеюсь). Я не пробовал ставить заглушки, но в конкретном проекте, это сделать будет довольно сложно (или почти не возможно, так-как сразу изменится размер, дата и вся целостность файла), скорее всего проще будет искать дырку, на уровне адреса памяти, в которую можно будет внедриться для использования API клиента, все перекрыть не возможно и некоторые блокировки, все-же обойти можно. Но никак не модернизацией текущих файлов клиента.
-
На сколько помню, в interlude работает нативный метод IsKeyDown который из NWindow->UIScript.uc. И есть класс Engine->Interactions.uc и конструкция событий enum EInputKey. На самом деле, вы очень просто сможете использовать такое условие: if(IsKeyDown(IK_1) && IsKeyDown(IK_Q) || IsKeyDown(IK_2) && IsKeyDown(IK_W)) { //... } То есть по факту, можно отследить весь, вот этот класс: enum EInputKey { /*00*/ IK_None ,IK_LeftMouse ,IK_RightMouse ,IK_Cancel , /*04*/ IK_MiddleMouse ,IK_Unknown05 ,IK_Unknown06 ,IK_Unknown07 , /*08*/ IK_Backspace ,IK_Tab ,IK_Unknown0A ,IK_Unknown0B , /*0C*/ IK_Unknown0C ,IK_Enter ,IK_Unknown0E ,IK_Unknown0F , /*10*/ IK_Shift ,IK_Ctrl ,IK_Alt ,IK_Pause , /*14*/ IK_CapsLock ,IK_Unknown15 ,IK_Unknown16 ,IK_Unknown17 , /*18*/ IK_Unknown18 ,IK_Unknown19 ,IK_Unknown1A ,IK_Escape , /*1C*/ IK_Unknown1C ,IK_Unknown1D ,IK_Unknown1E ,IK_Unknown1F , /*20*/ IK_Space ,IK_PageUp ,IK_PageDown ,IK_End , /*24*/ IK_Home ,IK_Left ,IK_Up ,IK_Right , /*28*/ IK_Down ,IK_Select ,IK_Print ,IK_Execute , /*2C*/ IK_PrintScrn ,IK_Insert ,IK_Delete ,IK_Help , /*30*/ IK_0 ,IK_1 ,IK_2 ,IK_3 , /*34*/ IK_4 ,IK_5 ,IK_6 ,IK_7 , /*38*/ IK_8 ,IK_9 ,IK_Unknown3A ,IK_Unknown3B , /*3C*/ IK_Unknown3C ,IK_Unknown3D ,IK_Unknown3E ,IK_Unknown3F , /*40*/ IK_Unknown40 ,IK_A ,IK_B ,IK_C , /*44*/ IK_D ,IK_E ,IK_F ,IK_G , /*48*/ IK_H ,IK_I ,IK_J ,IK_K , /*4C*/ IK_L ,IK_M ,IK_N ,IK_O , /*50*/ IK_P ,IK_Q ,IK_R ,IK_S , /*54*/ IK_T ,IK_U ,IK_V ,IK_W , /*58*/ IK_X ,IK_Y ,IK_Z ,IK_Unknown5B , /*5C*/ IK_Unknown5C ,IK_Unknown5D ,IK_Unknown5E ,IK_Unknown5F , /*60*/ IK_NumPad0 ,IK_NumPad1 ,IK_NumPad2 ,IK_NumPad3 , /*64*/ IK_NumPad4 ,IK_NumPad5 ,IK_NumPad6 ,IK_NumPad7 , /*68*/ IK_NumPad8 ,IK_NumPad9 ,IK_GreyStar ,IK_GreyPlus , /*6C*/ IK_Separator ,IK_GreyMinus ,IK_NumPadPeriod,IK_GreySlash , /*70*/ IK_F1 ,IK_F2 ,IK_F3 ,IK_F4 , /*74*/ IK_F5 ,IK_F6 ,IK_F7 ,IK_F8 , /*78*/ IK_F9 ,IK_F10 ,IK_F11 ,IK_F12 , /*7C*/ IK_F13 ,IK_F14 ,IK_F15 ,IK_F16 , /*80*/ IK_F17 ,IK_F18 ,IK_F19 ,IK_F20 , /*84*/ IK_F21 ,IK_F22 ,IK_F23 ,IK_F24 , /*88*/ IK_Unknown88 ,IK_Unknown89 ,IK_Unknown8A ,IK_Unknown8B , /*8C*/ IK_Unknown8C ,IK_Unknown8D ,IK_Unknown8E ,IK_Unknown8F , /*90*/ IK_NumLock ,IK_ScrollLock ,IK_Unknown92 ,IK_Unknown93 , /*94*/ IK_Unknown94 ,IK_Unknown95 ,IK_Unknown96 ,IK_Unknown97 , /*98*/ IK_Unknown98 ,IK_Unknown99 ,IK_Unknown9A ,IK_Unknown9B , /*9C*/ IK_Unknown9C ,IK_Unknown9D ,IK_Unknown9E ,IK_Unknown9F , /*A0*/ IK_LShift ,IK_RShift ,IK_LControl ,IK_RControl , /*A4*/ IK_UnknownA4 ,IK_UnknownA5 ,IK_UnknownA6 ,IK_UnknownA7 , /*A8*/ IK_UnknownA8 ,IK_UnknownA9 ,IK_UnknownAA ,IK_UnknownAB , /*AC*/ IK_UnknownAC ,IK_UnknownAD ,IK_UnknownAE ,IK_UnknownAF , /*B0*/ IK_UnknownB0 ,IK_UnknownB1 ,IK_UnknownB2 ,IK_UnknownB3 , /*B4*/ IK_UnknownB4 ,IK_UnknownB5 ,IK_UnknownB6 ,IK_UnknownB7 , /*B8*/ IK_UnknownB8 ,IK_Unicode ,IK_Semicolon ,IK_Equals , /*BC*/ IK_Comma ,IK_Minus ,IK_Period ,IK_Slash , /*C0*/ IK_Tilde ,IK_UnknownC1 ,IK_UnknownC2 ,IK_UnknownC3 , /*C4*/ IK_UnknownC4 ,IK_UnknownC5 ,IK_UnknownC6 ,IK_UnknownC7 , /*C8*/ IK_Joy1 ,IK_Joy2 ,IK_Joy3 ,IK_Joy4 , /*CC*/ IK_Joy5 ,IK_Joy6 ,IK_Joy7 ,IK_Joy8 , /*D0*/ IK_Joy9 ,IK_Joy10 ,IK_Joy11 ,IK_Joy12 , /*D4*/ IK_Joy13 ,IK_Joy14 ,IK_Joy15 ,IK_Joy16 , /*D8*/ IK_UnknownD8 ,IK_UnknownD9 ,IK_UnknownDA ,IK_LeftBracket , /*DC*/ IK_Backslash ,IK_RightBracket,IK_SingleQuote ,IK_UnknownDF , /*E0*/ IK_UnknownE0 ,IK_UnknownE1 ,IK_UnknownE2 ,IK_UnknownE3 , /*E4*/ IK_MouseX ,IK_MouseY ,IK_MouseZ ,IK_MouseW , /*E8*/ IK_JoyU ,IK_JoyV ,IK_JoySlider1 ,IK_JoySlider2 , /*EC*/ IK_MouseWheelUp ,IK_MouseWheelDown,IK_Unknown10E,UK_Unknown10F , /*F0*/ IK_JoyX ,IK_JoyY ,IK_JoyZ ,IK_JoyR , /*F4*/ IK_UnknownF4 ,IK_UnknownF5 ,IK_Attn ,IK_CrSel , /*F8*/ IK_ExSel ,IK_ErEof ,IK_Play ,IK_Zoom , /*FC*/ IK_NoName ,IK_PA1 ,IK_OEMClear }; А также, есть еще interface.xdat, где есть уже привязанные комбинации клавиш и другие события, так называемые shortcuts для интерфейса и оконной системы в целом, разных вызовов, по разным стадиям и сценам. Панель Shortcuts находится в shortcuts->GamingStateShortcut->UseShortcutItem-*, где key - это кнопка для использования. В общем и целом, смотря что вообще требуется, многие вещи, находятся в nwindow.dll.
-
Для какой цели? Что будет происходить? Где, хоть какая-то информация? Ничего не понятно.
-
Ппц, Вот бы раньше, так. Года так 2 назад =)
-
На самом деле, за загрузку, отвечает метод LoadHtml. Как сделано например в interface.u -> UserPetitionWnd.uc: class'UIAPI_HTMLCTRL'.static.LoadHtml( "UserPetitionWnd.HelpHtmlCtrl", "..\\L2text\\" $ PetitionCategoryLink[ a_SelectedIndex - 1 ] ); Оно прописано везде статично, путь нигде жестоко не привязывается, многие вещи в клиенте написаны статично в том числе и пути к файлам, не всем конечно но к многим, например на оконную систему и т.д. Все это находится в nwindow.dll
- 2 ответа
-
- 1