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

Saltfire

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

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

  • Посещение

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

    20
  • Отзывы

    N/A

Весь контент Saltfire

  1. Ну по исходам, новый по лыже пишите на Kotlin. Даже названия соответствуют, тех-же пакетов и т.д., нет никакой динамики и в целом опять будет флуд-классами и наследованием один на другом, без на то причины, так-как у вас это уже началось, а дальше там только хуже, там туча классов и интерфейсов для АI будет и еще там много всего и проект раздует опять под 3к файлов.
  2. Вы пишите сервер новый, по серверу, который наследуется от l2jserver? Вы серьезно что-ли? У лыж, эта побочка везде, одинаковое перемещение персонажа, по таймеру, с одинаковыми значениями в секунду, не помню, есть ли там вообще расчет сколько пройдем за секунду. Но я помню, что у них там костыли и нет там расчета уже пройденной со старта дистанции, а также время которое уже затребовалось, чтобы пройти. У лыж все просто, одинаковыми значениями, каждую секунду, происходит синхронизация движения, прибавлением одного и того-же числа, пока двигаемся.
  3. У тебя есть 65к+ портов, из них, занятые системами и т.д. Порт будет закрыт ровно до момента, когда ты начнешь вешать на него слушателя. Суть в другом. Какое ты используешь подключение и для какой цели тебе интернет и смогут ли к тебе просто взять и вломиться, как в дверь. У тебя же может быть и прямой доступ сразу, а может быть с раздачи, через тот-же роутер, а есть NAT, который тебе этого не позволит сделать без особых маршрутов и хорошего модема, обычные от провайдера, они вряд ли смогут это сделать. Но все-же, я еще раз повторюсь, есть прямой доступ, ты сможешь сделать подключение через логин и пароль, как это было в старые времена, вписав свой ип и запустив сервер, любой зайдет. Кто не хочет заморачиваться с пересозданием интернет подключения, идут другим путем. Например: Это свой софт или сторонний софт, который поможет выделить канал, доступный для любого подключения из вне, на который привязать сервер. Отдельный нужно маршрут, а не порт открывать Я думаю вы можете попробовать VPN, этим сменить подключение на нужное вам. Никогда не страдал такой ерундой, но для друзей, если у вас это не весь город или мир То можно просто любую программу, которая сможет создать вам канал, в который зайдут друзья и после смогу играть.
  4. Это сработает, когда вы убьете босса и перезапустите сервер. Так-как, время респа берется с базы, а база будет обновлена после перезапуска служб сервера. То это будет отображаться не корректно, и после убийства босса, вы будете видеть, что он по прежнему еще жив, а хотя его уже нет. То есть после убийства мобов, боссов и т.д., сразу никто не обновляет базу и весь спавн уж тем-более, все работает на уровне памяти и кеширования данных. Когда происходит перезапуск, данные из памяти сохраняются, отчищаются и берутся новые при запуске. Для того, чтобы это избежать, нужно использовать статус конкретного босса: //............. private final RaidBossSpawnManager spawnBoss = RaidBossSpawnManager.getInstance(); //............. if (StatusEnum.DEAD == spawnBoss.getRaidBossStatusId(ИД_БОССА)) { // МЁРТВ } else { // ЖИВ } //.............
  5. Saltfire

    hello guys

    On the forum, can't check the files section because your religion forbids it?
  6. Saltfire

    NPC Для Emurt HF

    Да ладно, что в emurt нет баффера? А вообще, я думаю, что npc магазинов, менеджеров, бафферов - уже быть не должно, только npc которые участвуют в квестовых, территориальных и инстант событиях, а также порталов и башен. Остальное в HF нужно делать на уровне клиента, прямо через интерфейс и если специфичное что-то, уже на уровне dll. Хватит и шарного компилятора и UE редактора. И желательно, найти исходники сервера, чтобы ты смог править в случае каких-то глобальных изменений на клиентской стороне, ибо, чтобы сделать крутого многопрофильного баффера со всеми фишками и плюшками, с открытием окошка, перемещение, сохранением, созданием профилей и т.д., чтобы это все было удобно... Уж точно не удастся сделать без исходников сервера. А всякую шляпу делать, какой в этом смысл?
  7. Чувствую если ты начнешь писать мануал, то сможешь понимать его только ты, либо это будет не твой мануал
  8. Логика вундеркинда. не помогают, значит не знают. Можно было и не создавать.
  9. Да никакого толку, желания и интереса нет помогать таким, кто сам не знает чего хочет и голову включать не хочет, а только создает бесполезные темы, которые так и будут потом валяться мертвым грузом и никому не будут нужны. Это ты только сейчас понял?
  10. Saltfire

    Ишю Клиент Freya

    Открыть тебе тайну? Любой клиент будет блокировать защитник, пока в исключения не поставишь. А все потому, что сертификата то нету, и никогда ты его не сделаешь. Смирись и живи дальше. Это л2, тут всегда так было и будет! И ничего ты с этим не поделаешь. Хоть как ты не скрывай его, хоть как ты не бусти и обфусцируй, ничего у тебя не выйдет, рано или поздно защитник найдет, что ему нужно. Любой софт, который работает с интернетом (да и не только с интернетом), будет блокировать защитник, если нет сертификата.
  11. Saltfire

    Ишю Клиент Freya

    Знаю я таких, телефон всегда исправляет, но никак 2 ошибки(ДВЕ!!!!!) в слове из 3-х букв.
  12. Saltfire

    Ишю Клиент Freya

    http://akumu.ru/lineage2/L2RU/P216/ Вот для кого это все делалось? Чтобы очередная тема была ? Помогите? Спасите? ищу (а не шю) и даже тут умудрился допустить ошибку, в таком простом слове.
  13. Saltfire

    Lineage 2 Epilogue

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

    Lineage 2 Epilogue

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

    L2text

    На самом деле, за загрузку, отвечает метод LoadHtml. Как сделано например в interface.u -> UserPetitionWnd.uc: class'UIAPI_HTMLCTRL'.static.LoadHtml( "UserPetitionWnd.HelpHtmlCtrl", "..\\L2text\\" $ PetitionCategoryLink[ a_SelectedIndex - 1 ] ); Оно прописано везде статично, путь нигде жестоко не привязывается, многие вещи в клиенте написаны статично в том числе и пути к файлам, не всем конечно но к многим, например на оконную систему и т.д. Все это находится в nwindow.dll
  24. Данное меню зашито внутри 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"); Если начнете делать свою систему входа и авторизации, что я очень сильно сомневаюсь
×
×
  • Создать...