PDA

Просмотр полной версии : модификация клиента С4 (как быстро убрать трупы?)


SeregaZ
31.05.2010, 10:55
собственно проблема - моб умирает, и лежит секунд 5. бывает тело довольно большое и не видно что из него выпало. то есть стоит ли подбежать за дропом или хрен с ним.
ладно один моб, а если я торчу в сайлент валей и бью половинки, те что в пати из 5 мобов - это капец :) 5 трупов, если играть в окошке 800х600 пол окна трупами завалено.
эта была вводная к вопросу. теперь сам вопрос - как можно убрать это самое время, то есть чтобы моб исчезал сразу после смерти? путем химии с пакетами - не предлагать. л2пх убивает пинг в моем случае. нужна именно модификация клиента. где какой параметр можно подправить, чтобы мобы сразу испарялись после смерти и таргет тутже освобождался от мертвой цели. оооо и если можно то и игроки тоже. то есть умер - испарился, и таргет мой пропал, его реснули - он проявился из ниоткуда. суть в том, что если пати кучно стоит, ты начинаешь лупить - а в толпе не видно жив твой таргет или уже умер. потом стоишь, жмешь кнопки и думаешь - чего мой чар не стреляет скатина? а оказываеца таргет умер давно.

Xen
31.05.2010, 12:34
В С4 хз, но в гф это пакет

[Server]
...
08=DeleteObject:d(ObjectID)d(0)
...

Слушай пакет
00=Die:d(CharID)d(1)d(HasHideout)d(HasCastle)d(Fla gs)d(Sweepable)d(Access)

Если поступил, сразу обрабатывай и посылай клиенту, а реальный от сервера, который приходит позже - киляй pck:='';

SeregaZ
01.06.2010, 20:15
смущает слово "пакет" - то есть без помощи сторонних программ, внести эти настройки в клиент не получится? хотелось бы именно в самом клиенте подобное "настроить" - без l2ph.

J-Fobos
01.06.2010, 20:32
смущает слово "пакет" - то есть без помощи сторонних программ, внести эти настройки в клиент не получится? хотелось бы именно в самом клиенте подобное "настроить" - без l2ph.
Удаление мертвых мобов происходит по команде (именно тот пакет о котором писал Xen) с сервера, без этой команды тело будет лежать вечно. Клиент без этой команды ничего делать не будет.

xkor
01.06.2010, 20:32
SeregaZ, ну разве что подправить метод вызываемый при приходе пакета Die что бы он вызывал сразу и метод реагирующий на DeleteObject
ЗЫ в принципе это не очень сложно

Xen
02.06.2010, 09:43
Теоритически можно в клиенте убрать всю анимацию скиллов?)

Для чего нужно? Осады, тв и другие масс мероприятия, в которых происходит жуткое падение дпс, независимо от тачки, т.к. движек л2 не оптимизированный для таких случаев. Тогда зачем анимацию скиллов показывать?) Фтопку ее!:D
Если не всю, то хотябы выборочно, есть на подозрения а некоторые файлы в папке систем, ктото пробывал такое?
Хотел сначало сделать откл. тестр, но в рунете прочитал, что отключением текстур (видны только контуры) клиент все равно грузит текстуру, но элементарно не отображает ее.

SeregaZ
04.06.2010, 08:19
так дело не пойдет :) сперва мой вопрос решаем, потом Xen твой со скилами :)

кстати попробуй chargrp.dat времеено удалить. тогда вообще ни одного чара отображать не будет :))) хотя... я кажись на окнах удалял. по моему клиент критовал, как кто-либо рядом стоящий начинал стрелять. но в целом для бишопа самый цвет. список сопати видишь и капец. ни чаров, ни скилов... пустыня :)

xkor какой файлик нужно расковырять, и чем, и какой язык программирования при этом нужно знать?

Sherman
04.06.2010, 12:17
xkor какой файлик нужно расковырять, и чем, и какой язык программирования при этом нужно знать?
1.
Engine.dll
Core.dll
Fire.dll

2. Ассемблер (для анализа имеющегося кода) + Паскаль||Си (для реализации инъекта)
Возможно можно обойтись Ассемблер + Hiew (для битхака)

Для анализа кода клиента можно использовать OllyDbg



Теоритически можно в клиенте убрать всю анимацию скиллов?)
Можно, эфекты анимации в каком то из *.dat файлов описаны... почистить в нем колонку со ссылками на эффекты анимации, и ниодин скилл анимироватся не будет.

xkor
04.06.2010, 15:40
1.
Engine.dll
Core.dll
Fire.dllCore.dll и Fire.dll я бы сказал тут даже и не нужны, хватит ковыряния engine.dll, хотя это для интерлюда и более высоких хроник, вроде в каких то более ранних некоторые нужные функции содержались в core.dll, хотя это точно не помню

Sherman
04.06.2010, 16:36
Про fire.dll сказал ибо там тоже какие то рисовалки текстур реализованы, F3 тоталкомандера с плагином показало имена ф-ций...
Хотя да, по именам ф-ций скорее всего отрисовка эфектов воды огня льда....

SeregaZ
05.06.2010, 14:00
ясно... в самом л2пх все просто:
var
j:integer;
idtela:string;

procedure Init; //Вызывается при включении скрипта
begin

useforconnectname := 'SeregaZ';

end;

procedure Free; //Вызывается при выключении скрипта
begin

end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin

if FromServer and (pck[1]=#$06) then begin //умер моб

idtela:=pck[2]+pck[3]+pck[4]+pck[5];

buf:=HStr('12 ') + idtela + HStr(' 00 00 00 00');
SendToClient;

end;

end.
косяк правда - когда убивают меня - клиент критует :) и плюс лаги из-за л2пх. и нужно еще чуток привыкнуть. так получается, что пакет исчезания приходить раньше, чем Die - то есть моб тебя еще бьет, и начинает испарятся. но в целом как раз то что я хотел по функционалу, но хотелось бы средствами клиента без сторонних программ.

Prixmegently
05.06.2010, 15:04
В UserInfo ид твоего персонажа.

xkor
05.06.2010, 22:53
и нужно еще чуток привыкнуть. так получается, что пакет исчезания приходить раньше, чем Die - то есть моб тебя еще бьет, и начинает испарятсядык а что мешает сделать скрипт таким:
var
j:integer;
idtela:string;

procedure Init; //Вызывается при включении скрипта
begin

useforconnectname := 'SeregaZ';

end;

procedure Free; //Вызывается при выключении скрипта
begin

end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin

if FromServer and (pck[1]=#$06) then begin //умер моб

idtela:=Copy(pck,2,4);

buf:=pck;
SendToClient;
pck:=#$12+idtela+#0#0#0#0;
end;

end.

Sherman
05.06.2010, 23:15
косяк правда - когда убивают меня - клиент критует
Запомни свое ID и для всех кроме этого ID делай DeleteObject

SeregaZ
06.06.2010, 09:17
спасибо :)
насчет моего ID это то я знаю. потом руки дойдут доделаю, тут сразу готовый выкладывать нельзя. ведь прийдут такие же люди как я - скопируют готовое решение и будут считать себя крутыми хакерами :)
другое дело если лежит болванка. как бы показывает идею и реализацию этой идеи - но нет тонкостей, то есть побуждает человека самому подумать и что-то добавить от себя, улучшить, проявить фантазию, посидеть по изучать код. проблема линейки в том, что человек начинает реально отупевать - ведь есть база л2дб.ру - зашел, все прочитал. и выполнение квеста превращается в чистый фарс - ты не читаешь текст нпс, не ищешь сам вручную эту локацию, вся информация уже у тебя в голове и весь процесс доведен до автоматизма.
я пришел в линейку из 2 готики. разбирал её вручную без единой подсказки по прохождению. прошел паладинкой (не знал вообще что там кучи вариантов было). и тут, сто лет спустя, как-то попался диск на руки. установил, запустил, думаю поиграть - предаться ностальгии... и епрс... как в это можно играть?!?!?! дошел до фермы и удалил к черту.

и все равно модификацию клиента надо. л2пх в сайлент валей не оставляет шансов отбиться от пкшников. лагает :( отключал обработку пакетов - чтобы они не отображались в окне программы, клиент на минимальных настройках и зараза лагает :( может еще какие порты там поотключать не линеечные?
без л2пх пинг примерно 120.

Sherman
06.06.2010, 11:59
тут сразу готовый выкладывать нельзя
Хз, затруднений с реализацией того что тебе нужно, кроме тебя, мало у кого возникло. Проблема отепения она более глобальна.

Helleraser
06.06.2010, 15:11
Проблема отепения она более глобальна.

Как избавиться от трупов это проблема еще глобальнее, Не даром крематории в моду входить стали ))

Sherman
06.06.2010, 23:18
Готовый скрипт.

var
CharId,UserID:Cardinal;

begin

if FromServer and (pck[1]=#$04) then
begin
UserID:=ReadD($12);
end;


if FromServer and (pck[1]=#$06) and (UserID<>0) then
begin
CharId:=ReadD(2);
if CharId=UserId then Exit;
if ReadD($16)=0 then
begin
buf:=#$12;
WriteD(CharId);
WriteD(0);
SendToClient;
end;
end;

end.

а пакетхак у меня при таком скрипте не тормозит трафик...

SeregaZ
08.06.2010, 14:54
а у меня даже без скриптов, с отключенной обработкой пакетов катастрофа :) с небольшим опозданием от пх до клиента пакеты доходят, что сурьезно ухудшает пинг.

Sherman
08.06.2010, 16:01
Через LSP или иньект?

SeregaZ
11.06.2010, 15:25
вот настройки. может какую галку убрать\поставить и оно поможет делу?

Sherman
11.06.2010, 15:37
попробуй снеми галку Перехват, и поставь Использовать LSP перехват, по идее LSP шустрее должен работать.

xkor
11.06.2010, 19:17
по идее LSP шустрее должен работатьэто по какой такой идее?)

alexteam
11.06.2010, 19:26
в редиме перехвата соединения он работает идентично.
в режиме перехвата данных еще тормознутей будет.