Механика работы сервера при захвате кланхолла?

xJIEXAx

Знаменитый
Участник
Сообщения
105
Розыгрыши
0
Репутация
6
Реакции
33
Баллы
1 288
Есть захватываемые кланхоллы разных типов. Team battle, npc battle, siege.
В каком месте описана логика работы захвата? В самом коде сервера? В ai.obj не нашел.
Как происходит определение и запись победителя в базу? Возможно ли самому сделать захват кланхолла со своей логикой?
 
Потому что осады вшиты в компил бинарей.
Можно, через экст, отлавливая нужные функции и подставляя свои - но выйдет или А - овердорого, или Б - очень долго)
 
castledata, если правильно помню. В нем выдается тип, и базовые настройки для механики захватов. Но если пилить самому, то уже идти в l2server, и мучаться с декомпилом \ точечной правкой
 
максимум, что там можно сделать - это поиграться с дверьми, нпс, спавном и таймерами.
Придумать новый тип захвата, например вход в кх только в трусах баюма - не получится.
 
Я образно сказал.
Без экста в птс сервере ты можешь поменять нпс/двери/спавн/зоны - собственно все, что связано с самой осадой.
Но не можешь придумать свою логику осаду - например сделать какую-то стадийность осады (как к примеру в инстах), и так далее. Ты можешь выбрать только то, что уже вшито в гс.ехе.
Чтобы это применить - нужно писать отдельную библу, перехватывать участки памяти с нужными функциями, подставлять свои описанные функции и фиксить сотни ошибок, которые будут крушить сервер.
По поводу сохранения победителя в бд - это я не помню, кстати, чот там вроде такого даже не было.
 
а если написать свои методы для осады и просто заменить адреса методов на свои, тоже не выйдет? ну предположим есть ивент onSiegeStart, и ты в него как то инклудишь свой startSiege , а все остальное скипаешь и выполняется только твой код? Или это как раз то что ты описываешь где надо фиксить сотни ошибок?
 
Вы немного не поняли суть того, как работает экстендер в приложении. Допустим есть l2server.exe каждый участок кода имеет свой адрес в памяти(статический, не меняющийся) допустим функция метод класса CCastleSiege::OnSiegeStart(CCastleSiege*, int, int); старт этой функции, допустим, находится по адресу 0х463DEB, Допустим она вызывается в нескольких местах в сервере, при начале цикла осад, при гм команде и т.д. Для начала нам необходимо дизассемблировать и восстановить все члены класса CCastleSiege, и множество других, которые используются в этой функции, чтобы понимать, что вообще там происходит. Реверс происходит путем постановки брейк поинта,отладки и просмотра значений в переменных, и далее уже используя интуицию, так же в помощь берется пдб от 166, Далее, необходимое создать длл библу, написать функцию подмены(если целиком) вызова настоящей функции, на твою, измененную и написанную на с++ в твоей длл, так же необходимо написать портатипы, или изменить(по желанию) функции, которыетвызываются в OnSiegeStart. Если изменить, то проделать тоже самое и с ними. В общем вам необходимо разобрать не один класс, не Одину функцию, чтобы понимать что делается в одной нужной вам. Для человека, который этим занимается долгое время и имеет уже разобранный Ida от нужного протокола, это сделать очень не сложно. Если вы с нуля начнете делать это, то потратите очень много времени
 
Последнее редактирование:
Вы немного не поняли суть
А нельзя никак это обойти?
Ну например, кастую я определенный скил на НПС, он мне в ответ баф вешает, сервер записывает в базу инфу. Там же хранимые процедуры, написать ее можно любую. Самое главное записать инфу о захвате в БД.
 
Хранимку ты можешь вызвать только отправив пакет от сервера кешеду, написав при этом пакет хандлер для пакетов кешеда и игрового сервера. Опять же это все экст, да честно в ПТС вообще нефиг лезть, если не умеешь реверсить и экстить. Так как ты упрешься в такой момент, который не сможешь исправить без экста, в Яве как то стараются все вывести в конфиги и дата Пак, в ПТС же все захардкорено. Это работает так: игровой сервер отправляет пакет с данными, опкод и информацию кешед серверу, кешед сервер по опкоду определяет в какую функцию засунуть эти данные, и дальше эти данные обрабатываются кешед сервером, если надо биндят параметры и отправляют в процедуру либо прямой запрос, если необходимо выводят какие то значения и записывают в переменные и отправляют обратно игровому серверу, пакетом с опкодом и информацией. Так же игровой сервер смотрит по опкоду в какую функцию
Засунуть этот пакет и дальше там обрабатываются полученные из бд данные(если надо было)
 
Последнее редактирование:
Я тебе уже сказал кратко - это будет тебе стоить или дорого, или долго)
 
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…