Перейти к содержанию

Saltfire

Постоялец
  • Публикаций

    509
  • Зарегистрирован

  • Посещение

  • Победитель дней

    19
  • Отзывы

    N/A

Saltfire стал победителем дня 24 июля

Saltfire имел наиболее популярный контент!

Репутация

82

2 Подписчика

Информация о Saltfire

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Saltfire

    Lineage 2 Epilogue

    Да возьми какие-нибудь l2jts от Hack, если платить не хочешь. Из платных, я хз, там хвалили l2jeternity, ну или l2jphoenix. Я даже не знаю, еще кто-то делает Gracia ? Кому она нужна? Уже весь упор "IT,HF,CLassic".
  2. Saltfire

    Lineage 2 Epilogue

    Что вы ищите? Непонятно ничего, во первых, Эпилог это грация, если память не изменяет, а хф это хф. ХФ Как-раз, для Вас хроника, Где можно сделать буквально все, что душе угодно с клиентом. Что даже позавидуют клиенты хроник Classic протокола 166 да и вообще других, который как-раз все делают но конечно-же добраться там до чего-то будет проблематично, лишь единицы смогут это сделать быстро (да и вообще сделать), ибо компилятор надо править тоже и интерфейс =) Так-же в ХФ можно обойти и сделать свой отдельный вход, лоби, и т.д. На Хф хватит и шарного компилятора с которым достигните любых вершин. По исходникам, да бери любой и пили для себя, какой смысл за каждым бегать, который рефактор провел и типо новый код , Большинство разрабов не переписывают, а лишь так подчистят и готово и своего сверху накидают. Главное, бери исходы, которые кто-то поддерживает тоже. Иначе будет нечего чекать. И тогда только одному одинешеньке, это касается только тех, кто игру всю не знает и устройство сервера и клиента... Конечно тоже найти сложно в бесплатном, да еще и бесплатные обновления. Да и в платном не всегда исходники получаете, не говоря уже про бесплатно, а " +- " то, покупаете тоже самое. По этому, если сам не разбираешься, только нужно платить, чтобы за тебя разбирались =)
  3. Почему бы вам 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); } } и любую таблицу превращать в класс с методами, если потребуются. При этом мы перечисляем только те поля, которые не хотим показывать и те функции которые только нужно, остальное просто через свойства класса.
  4. Не пойму, ты сам с собой поговорил получается? Я очень сильно сомневаюсь, что ты осилишь engine.dll от данного клиента. Ты просто не представляешь, какая учесть ждет тебя. Покажи, хоть один мне клиент interlude, где есть хоть что-то свое из мира фантастики, да тот-же радар кастомный, этого хватит тебе потеряться на долго. И темы, кто сравнивает от IT-HF, просто не сопоставимы, interlude клиент совершенно другой и там нет такого, что есть в HF, где можно хоть два радара сделать и хоть что затолкать, так сложилось, что HF был сделан не удачным образом и вскрытие и модернизация этого клиента безгранична...
  5. Не уверен, что у тебя хватит денег на реверсера Иначе бы уже нанял и не задавал бы глупых вопросов.
  6. Что подразумевается под простым способом? (вы сначала попробуйте заинжектиться в процесс, с данным продуктом, без жопаболей и заглушек, у вас этого не удастся сделать, ко всему, если конечно не лохо обновлятор, который никак не передает о том, что к серверу уже начали подключаться, после кнопки старт в Обновляторе, а если этого нет, тогда вы сможете запустить клиент в обход Обновлений и опустить библиотеки до нужного уровня и заглушить или вычистить, оставив только шифрацию и передачу пакетов и тайминги - но я сомневаюсь. что у вас хватит знаний и сил это сделать).
  7. Естественный процесс, клиент использует "Anticheat" встроенный продукт для отслеживания как-раз таких действий, которые модернизируют файлы клиента, а также пытаются дергать клиентские файлы в обход, главного процесса игры, который запущен, он работает именно так (надеюсь). Я не пробовал ставить заглушки, но в конкретном проекте, это сделать будет довольно сложно (или почти не возможно, так-как сразу изменится размер, дата и вся целостность файла), скорее всего проще будет искать дырку, на уровне адреса памяти, в которую можно будет внедриться для использования API клиента, все перекрыть не возможно и некоторые блокировки, все-же обойти можно. Но никак не модернизацией текущих файлов клиента.
  8. Saltfire

    Бинд клавиш Interlude

    На сколько помню, в 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.
  9. Для какой цели? Что будет происходить? Где, хоть какая-то информация? Ничего не понятно.
  10. Ппц, Вот бы раньше, так. Года так 2 назад =)
  11. Saltfire

    L2text

    На самом деле, за загрузку, отвечает метод LoadHtml. Как сделано например в interface.u -> UserPetitionWnd.uc: class'UIAPI_HTMLCTRL'.static.LoadHtml( "UserPetitionWnd.HelpHtmlCtrl", "..\\L2text\\" $ PetitionCategoryLink[ a_SelectedIndex - 1 ] ); Оно прописано везде статично, путь нигде жестоко не привязывается, многие вещи в клиенте написаны статично в том числе и пути к файлам, не всем конечно но к многим, например на оконную систему и т.д. Все это находится в nwindow.dll
  12. Данное меню зашито внутри nwindow.dll, я давно задавал уже и отвечал на этот вопрос. Чтобы скрыть это меню, требуется сделать HideWindow("LoginFunctionWnd"); А по верх сделать новое, только так вы сможете его убрать. В исходниках interface/Classes/ создаем новый файл к примеру LoginMenuWnd.uc: class LoginMenuWnd extends UICommonAPI; function onLoad() { //... } function OnShow () { HideWindow("LoginFunctionWnd"); } function OnClickButton(string strID) { switch(strID) { case "btnSettingsGame" : ShowOrHideOptionWnd(); break; } } function ShowOrHideOptionWnd() { if (class'UIAPI_WINDOW'.static.IsShowWindow("OptionWnd")) { PlayConsoleSound(IFST_WINDOW_CLOSE); class'UIAPI_WINDOW'.static.HideWindow("OptionWnd"); } else { PlayConsoleSound(IFST_WINDOW_OPEN); class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd"); class'UIAPI_WINDOW'.static.SetFocus("OptionWnd"); } } defaultproperties{} Далее в interface.xdat создаем LoginMenuWnd и привязываем ему скрипт LoginMenuWnd. А так-же где state прописываем LoginState. И в workingConfiguration пишем Game. Далее настраиваете окно на свое усмотрение, добавляете элементы кнопок, позицию и по ид, проверяете в OnСlickButton методе, нажатие кнопок, а дальше, что нужно уже пишите. Для скрытия окошка ввода логина и пароля HideWindow("AuthWnd"); Если начнете делать свою систему входа и авторизации, что я очень сильно сомневаюсь
  13. Погоди, ты тогда сам ничего не сможешь сделать потом, опять потом надо будет компилить, всегда надо будет компилить =))
  14. О том, что все эти ваши сборки кусок говна и так все знают. Тут доказательства не нужны, я приводил уже множество фактов. Ко всему прошло столько лет, а ничего толком и не сделано. Тадам! Попытка 100501! Ты хочешь 5 лет отдать исправлению говна, чтобы потом все равно забросить? Л2 умерла, а они сервера пишут! О каких-то открытиях, крутых сборках говорят! В нее уже играть никто не будет. Все это ради показухи. А в дальнейшем сруб бала на дурочках. Жаль их, да и вас тоже жаль!
×
×
  • Создать...