Вход
Логин: Пароль:Забыли пароль?
Запомнить вас на этом компьютере?
Войти скрытым?

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
Сброс таргета через геодату

Sparkling
сообщение 15.10.2014, 16:15
Сообщение #1


Старейшина
***
Группа: Проверенные
Сообщений: 189
Регистрация: 2.4.2010
Пользователь №: 10952
Спасибо сказали: 23 раз(а)



Репутация:   0  
Уязвимость заключается в том, что при изменении координаты Z можно чаром "взлететь" в небо или "провалиться" сквозь землю. При этом у самого такого чара пропадают все игроки и нпц, а так же с него сбрасывается таргет. Баг был обнаружен, когда в городе была мирная зона и нажимая в небо чар переходил в General Field с пропажей всех объектов (чаров, нпц) в городе.

Под этот баг написали скрипт для пакетника, который автоматически сбрасывает таргет. Описание принципа работы: после включения скрипта необходимо вызвать пакет от сервера UserInfo, в котором содержится ObjectID вашего чара. Для вызова UserInfo можно снять/одеть пуху, шмот, использовать баф на себя, сесть на продажу, сделать тп и т.д. После того как будет запомнен ObjectID, скрипту необходимо поймать от клиента пакет ValidatePosition, в котором хранятся координаты и Heading чара. Для этого достаточно сделать шаг или побежать. Клиент отправит MoveBackwardToLocation с последующими ValidatePosition. После этого скрипт автоматически отсылает ValidatePosition с измененной координатой Z, что сбрасывает таргет, если вас выделили, или при нажатии социального действия Victory. Для возврата нормальной координаты Z - социальное действие Greeting.

Вкратце:
1. Запустить скрипт.
2. Одеть/снять оружие или шмот.
3. Сдвинуться с места.
4. Включить социальным действием Victory.

Сам скрипт для хроник Gracia Final:
Свёрнутая информация:
const
// FromClient
mv = #$0F; // MoveBackwardToLocation
vp = #$59; // ValidatePosition
sa = #$56; // RequestActionUse
// FromServer
cs = #$4A; // CreatureSay
ts = #$23; // TargetSelected
ui = #$32; // UserInfo
vl = #$79; // ValidateLocation

high = 5000;

// Name='nick';

var
ObjectID,act,ToX,ToY,ToZ,OriginX,OriginY,OriginZ,MoveMovement: integer;
X,Y,Z,Heading,Data: integer;
IsHidden: boolean;

procedure SendMsg2(msg:string);
begin
buf := cs;
WriteD(0);
WriteD(15);
WriteS('');
WriteS(msg);
//SendToClientEx(Name);
SendToClient;
end;

procedure Init; //Вызывается при включении скрипта
begin
act := 0;
ObjectID := 0;
IsHidden := false;
SendMsg2('Снимите или оденьте пуху и сдвиньтесь с места');
end;

procedure Hide;
begin
buf := vp;
WriteD(X);
WriteD(Y);
if act=1 then
WriteD(Z - high)
else if act=2 then
WriteD(Z + high)
else
WriteD(Z);
WriteD(Heading);
WriteD(Data);
SendToServer;
pck := '';
if act=0 then
IsHidden := false
else
IsHidden := true;
end;

begin

// If got targeted
if FromServer and (pck[1]=ts) and (ReadD(6)=ObjectID) then
begin
if ReadD(2)<>ObjectID then
begin
act := 1;
SendMsg2('Antitarget ON');
Hide;
end;
end;

// Get ObjectID from UserInfo packet
if FromServer and (pck[1]=ui) and (ObjectID=0) then
begin
ObjectID := ReadD($12);
SendMsg2('Запомнен ObjectID = '+IntToStr(ObjectID));
end
;
// New MoveBackwardToLocation
if FromClient and (pck[1]=mv) and (act>0) then
begin
// Reading values
ToX := ReadD(2);
ToY := ReadD(6);
ToZ := ReadD(10);
OriginX := ReadD(14);
OriginY := ReadD(18);
OriginZ := ReadD(22);
MoveMovement := ReadD(26);
// Making packet
buf := mv;
WriteD(ToX);
WriteD(ToY);
if act=1 then
WriteD(ToZ - high)
else if act=2 then
WriteD(ToZ + high)
else
WriteD(ToZ);
WriteD(OriginX);
WriteD(OriginY);
if act=1 then
WriteD(OriginZ - high)
else if act=2 then
WriteD(OriginZ + high)
else
WriteD(OriginZ);
WriteD(MoveMovement);
//SendToServerEx(Name);
SendToServer;
pck := '';
end;

// New ValidatePosition
if FromClient and (pck[1]=vp) then
begin
// Always keep coordinates
X := ReadD(2);
Y := ReadD(6);
Z := ReadD(10);
Heading := ReadD(14);
Data := ReadD(18);
if act>0 then
begin
Hide;
end;
end;

// Block ValidateLocation
if FromServer and (pck[1]=vl) then
begin
pck := '';
end;

// Social action check
if FromClient and (pck[1]=sa) then
begin
case pck[2] of
#$0C:
begin
act := 0;
SendMsg2('OFF');
if IsHidden then Hide;
end;
#$0D:
begin
act := 1;
SendMsg2('Antitarget ON');
Hide;
end;
#$0E:
begin
act := 2;
SendMsg2('Air ON');
Hide;
end;
end;
pck := '';
end;

end.



Что бы не было лишних вопросов - скрипты активируются, через l2phx. Вопросы по программе лучше задавать на официальном форуме - coderx.ru

Пакеты под Interlude
Свёрнутая информация:
const
// FromClient
mv = #$01; // MoveBackwardToLocation
vp = #$48; // ValidatePosition
sa = #$1B; // RequestActionUse
// FromServer
cs = #$4A; // CreatureSay
ts = #$29; // TargetSelected
ui = #$04; // UserInfo
vl = #$61; // ValidateLocation

high = 5000;

// Name='nick';

var
ObjectID,act,ToX,ToY,ToZ,OriginX,OriginY,OriginZ,MoveMovement: integer;
X,Y,Z,Heading,Data: integer;
IsHidden: boolean;

procedure SendMsg2(msg:string);
begin
buf := cs;
WriteD(0);
WriteD(15);
WriteS('');
WriteS(msg);
//SendToClientEx(Name);
SendToClient;
end;

procedure Init; //Вызывается при включении скрипта
begin
act := 0;
ObjectID := 0;
IsHidden := false;
SendMsg2('Снимите или оденьте пуху и сдвиньтесь с места');
end;

procedure Hide;
begin
buf := vp;
WriteD(X);
WriteD(Y);
if act=1 then
WriteD(Z - high)
else if act=2 then
WriteD(Z + high)
else
WriteD(Z);
WriteD(Heading);
WriteD(Data);
SendToServer;
pck := '';
if act=0 then
IsHidden := false
else
IsHidden := true;
end;

begin

// If got targeted
if FromServer and (pck[1]=ts) and (ReadD(6)=ObjectID) then
begin
if ReadD(2)<>ObjectID then
begin
act := 1;
SendMsg2('Antitarget ON');
Hide;
end;
end;

// Get ObjectID from UserInfo packet
if FromServer and (pck[1]=ui) and (ObjectID=0) then
begin
ObjectID := ReadD($12);
SendMsg2('Запомнен ObjectID = '+IntToStr(ObjectID));
end
;
// New MoveBackwardToLocation
if FromClient and (pck[1]=mv) and (act>0) then
begin
// Reading values
ToX := ReadD(2);
ToY := ReadD(6);
ToZ := ReadD(10);
OriginX := ReadD(14);
OriginY := ReadD(18);
OriginZ := ReadD(22);
MoveMovement := ReadD(26);
// Making packet
buf := mv;
WriteD(ToX);
WriteD(ToY);
if act=1 then
WriteD(ToZ - high)
else if act=2 then
WriteD(ToZ + high)
else
WriteD(ToZ);
WriteD(OriginX);
WriteD(OriginY);
if act=1 then
WriteD(OriginZ - high)
else if act=2 then
WriteD(OriginZ + high)
else
WriteD(OriginZ);
WriteD(MoveMovement);
//SendToServerEx(Name);
SendToServer;
pck := '';
end;

// New ValidatePosition
if FromClient and (pck[1]=vp) then
begin
// Always keep coordinates
X := ReadD(2);
Y := ReadD(6);
Z := ReadD(10);
Heading := ReadD(14);
Data := ReadD(18);
if act>0 then
begin
Hide;
end;
end;

// Block ValidateLocation
if FromServer and (pck[1]=vl) then
begin
pck := '';
end;

// Social action check
if FromClient and (pck[1]=sa) then
begin
case pck[2] of
#$02:
begin
act := 0;
SendMsg2('OFF');
if IsHidden then Hide;
end;
#$03:
begin
act := 1;
SendMsg2('Antitarget ON');
Hide;
end;
#$04:
begin
act := 2;
SendMsg2('Air ON');
Hide;
end;
end;
pck := '';
end;

end.


Сообщение отредактировал Sparkling - 15.10.2014, 16:14
Перейти в начало страницы
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
Нет новых сообщений Сервер через Роутер
Не могу войти в игру
4 malinkhii 324 14.10.2018, 14:33 Посл. сообщение: malinkhii
Закрыта Сервер через РОУТЕР
Нет подключение
0 malinkhii 787 18.3.2016, 14:19 Посл. сообщение: malinkhii
Нет новых сообщений Сброс Мастер лвл Скилы
8 poschlik 3871 23.7.2015, 15:28 Посл. сообщение: Profesor08
Нет новых сообщений disconnect через минуту
disconnect через минуту
0 Kemper 650 25.11.2013, 16:40 Посл. сообщение: Kemper
Нет новых проблема при открытии Аиды через World Editor
13 SenD 1348 1.3.2013, 17:18 Посл. сообщение: borsa

 

RSS Текстовая версия Сейчас: 21.10.2019, 12:50
Яндекс.Метрика  Перевод с помощью Google English French German Italian Portuguese Russian Spanish