Тема: Скрипты
Делимся в этой теме полезными скриптами для программы. Можно под хайдом
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Делимся в этой теме полезными скриптами для программы. Можно под хайдом
Сборщик ников в файлик с проверкой повторов. Работает везде, пригодится для статистики или дальнейшей спам-рассылки по почтам\личкам
var
DC_FLAG: Boolean;
SL: TStringList;
const
BLOCK_PACKET = $FFFF;
fname = 'nicks.txt';
function RecvHandler(var s: string): Integer;
var
str, nick: String;
cmd: string;
begin
DC_FLAG := False;
Result := 0;
cmd := Copy(s, 1, 4);
if (cmd = '031F') then
begin
str := Copy(s, ($2B*2+1), Length(s));
str := Copy(str, 1, pos('00', str));
nick := HexToStr(str);
if SL.IndexOf(nick) = (-1) then SL.Add(nick);
end;
end;
function CheckDisconnect(): Boolean;
const
DC_TIMEOUT = 30000;
begin
Result := False;
DC_FLAG := TRUE;
Sleep(DC_TIMEOUT);
SL.SaveToFile(fname);
// Если за отведённое время не поступило
// входящих пакетов - нас отключило от сервера
if DC_FLAG = TRUE then Result := True;
end;
begin
SL := TStringList.Create();
// Если файлик с никами уже существует - подгружаем его содержимое
if FileExists(fname) then
begin
SL.LoadFromFile(fname);
end;
// Работаем до дисконнекта или остановки
repeat until (CheckDisconnect() = true);
SL.Free();
end.
Скрипт-дразнилка, получив сообщения из чата - отправляет их от своего ника в белый чат. Образец, чтобы показать вам пару фишек
var
DC_FLAG: Boolean;
const
BLOCK_PACKET = $FFFF;
procedure chat_msg(msg: string);
var
len: integer;
packet: string;
begin
len := Length(msg);
if (len < 1) then exit;
packet := ('0202 ' + Format('%.2x', [len]) + StrToHex(msg) + '00');
Send2Server(packet);
end;
procedure ChatLogger(packet: string);
var
i, len: integer;
nick, msg: string;
begin
len := length(packet);
if (len < 20) then exit;
packet := Copy(packet, 17, len);
i := pos('00', packet);
// Вытаскиваем ник
nick := Copy(packet, 1, i);
packet := Copy(packet, 41, len);
i := pos('00', packet);
// Вытаскиваем сообщение
msg := Copy(packet, 1, i);
// Выводим
// SaveToFile('chat.txt', HexToStr(nick) + ': ' + HexToStr(msg));
chat_msg( HexToStr(nick) + ': ' + HexToStr(msg) );
end;
function RecvHandler(var packet: string): Integer;
var
Cmd: String;
begin
DC_FLAG := False;
Result := 0;
Cmd := Copy(packet, 1, 4);
if (Cmd = '020B') then ChatLogger(packet);
end;
function CheckDisconnect(): Boolean;
const
DC_TIMEOUT = 30000;
begin
Result := False;
DC_FLAG := TRUE;
Sleep(DC_TIMEOUT);
// Если за отведённое время не поступило
// входящих пакетов - нас отключило от сервера
if DC_FLAG = TRUE then Result := True;
end;
begin
// Работаем до дисконнекта
repeat until (CheckDisconnect() = true);
end.
var
DC_FLAG: Boolean;
FilterEnable: Boolean = False;
FilterItems: TStringList;
const
BLOCK_PACKET = $FFFF;
FilterFile = 'LFilter.txt';
function LootFilter(grp: Integer; GID: Integer): Boolean;
var
loot: string;
begin
Result := False;
loot := IntToStr(grp) + ',' + IntToStr(GID);
// Блокируем отображение предметов, которых нет в списке
if (FilterItems.IndexOf(loot) = (-1)) then Result := True;
end;
function RecvHandler(var packet: string): Integer;
var
Cmd: String;
grp, GID: String;
begin
DC_FLAG := False;
Result := 0;
Cmd := Copy(packet, 1, 4);
if ( (Cmd = '0314') or (Cmd = '040F') ) then
begin
grp := Copy(packet, 5, 2);
GID := Copy(packet, 9, 2) + Copy(packet, 7, 2);
if FilterEnable then
begin
// Если функция вернула True - блокируем отображение предмета
if LootFilter(StrToInt('$' + grp), StrToInt('$' + GID)) then
begin
Result := BLOCK_PACKET;
end;
end;
end;
end;
function CheckDisconnect(): Boolean;
const
DC_TIMEOUT = 30000;
begin
Result := False;
DC_FLAG := TRUE;
Sleep(DC_TIMEOUT);
// Если за отведённое время не поступило
// входящих пакетов - нас отключило от сервера
if DC_FLAG = TRUE then Result := True;
end;
begin
if FileExists(FilterFile) then
begin
FilterItems := TStringList.Create();
FilterItems.LoadFromFile(FilterFile);
FilterEnable := True;
end;
// Работаем до дисконнекта
repeat until (CheckDisconnect() = true);
FilterItems.Free();
end.
сканер в зачаточном состоянии. ведаёт только окружающих мобов, мобы двигаются рывками, да и сканит только когда чар останавливается на месте. чтобы работало надо перед экраном выбора персонажа запустить скрипт в пакетнике, и потом саму прогу и только потом можно входить на персонажа. написанно на лазарусе. исходники в архиве. в исходниках написанно как я использую входящие пакеты, как работаю с бд чтобы хранить базу, ну и как рисую карту на канвасе в имейдже. также старт координатной сетки не слева сверху а слева снизу.
var
DC_FLAG: Boolean;
const
BLOCK_PACKET = $FFFF;
function RecvHandler(var packet: string): Integer;
begin
Result := 0;
WriteLog(packet);
StrToApp('project_test1', packet,0 );
// действия с пакетом
DC_FLAG := False;
end;
function CheckDisconnect(): Boolean;
const
DC_TIMEOUT = 30000;
begin
Result := False;
DC_FLAG := TRUE;
Sleep(DC_TIMEOUT);
// Если за отведённое время не поступило
// входящих пакетов - нас отключило от сервера
if DC_FLAG = TRUE then Result := True;
end;
begin
repeat until (CheckDisconnect() = true);
//StrToApp('project_test1', 'ыыыыы',0 );
end.
аттача не будет, 5 метров не прикрепляет (а несжатый 23 метра, хз чего его так раздуло)
rghost.ru/8qXBsRlHC
Скорей всего, я единственный, кому это будет интересно
а если вот так?)
бот для кача по принципу куклы, кукла бегает за мобами, мона пускать в ход и милишников и ренджей, лут не лутает, баффы тоже баффать неумеет, зато стабильно бегает и косит. бегает за ближайшими мобами. порядок запуска: в экране выбора персонажа запустить скрипт, потом логинитесь на персонажа, и кактолько сделаете персонажем первую остановку на месте то туда воткнётся кукла, потом берёте куклу в тангет, и кукла побежит к ближайшему мобу, и потом так и будет бегать. бывает что разрывается атака, надо типо опять нажать пробел и будет атаковать дальше. возможны кучи багов. также есть формула расчёта расстояний до моба, в скрипте мона указать дистанцию поиска (в константах), и время жизни моба (по дэфолту 7 сек, надо чтобы убирать тех мобов которые пропали), короче что смог на скриптах замутить, то и сами посмотрите)
Вы должны зайти под своим именем, чтобы увидеть скрытый текст.
Пакет на лвл-хак
Отправляем клиенту:
0B01 [XX XX] 00 00 15
Где 15 - байт желаемого уровня (в 16-ричной системе счисления. В примере 15 будет равно 21 уровню, а 63 в данном случае ровняется 99 уровню)
XX XX - 2 байта CharID, которые можно взять из исходящего пакета на любой баф\умение
Написал то, чего многие так ждали
Самостоятельное перемещение персонажа по заданным координатам
В основном написал каркас, разбив на модули. Отличный пример продвинутого скриптописания.
В качестве образца записал координаты от нубореспа белок до пещерных рапторов.
Вы должны зайти под своим именем, чтобы увидеть скрытый текст.
Выражаю благодарность A.F.I за подсказку с пакетами, без которой этот скрипт вряд ли бы появился.
Удачи
Скрипт записи координат для предыдущего скрипта перемещения по координатам.
Для работоспособности этого скрипта архив из предыдущего поста обязательно должен быть у вас УЖЕ распакован!
program CoordSaver;
uses
'scripts/lib/CharMove.lib';
const
// Файл, в который сохраняются координаты
CoordsFileName = 'coords.txt';
procedure LogCoords(packet: string);
var
i: Integer;
s, x, y, z: string;
cid: string;
const
MAX_INT = 32768;
begin
// Сравнимаем айди чара с нашим, если не наш - выходим
cid := Copy(packet, 5, 8);
if (cid <> CharSID) then exit;
s := reverseHexStr( Copy(packet, 13, 4) );
i := StrToInt('$' + s);
if i > MAX_INT then i := -(MAX_INT*2 - i);
x := IntToStr(i);
s := reverseHexStr( Copy(packet, 17, 4) );
i := StrToInt('$' + s);
if i > MAX_INT then i := -(MAX_INT*2 - i);
y := IntToStr(i);
s := reverseHexStr( Copy(packet, 21, 4) );
i := StrToInt('$' + s);
if i > MAX_INT then i := -(MAX_INT*2 - i);
z := IntToStr(i);
s := (x + ',' + y + ',' + z);
WriteLog('[+] Coordinate add: ' + s);
SaveToFile(CoordsFileName, s);
Beep(2000, 200);
end;
// Обработчик входящих пакетов
function RecvHandler(var packet: string): Integer;
var
Cmd: String;
begin
Result := 0;
Cmd := Copy(packet, 1, 4);
// Узнали о том, что ожидается определенный пакет
if (WR_FLAG) then recvWaitSwitch(cmd, packet);
if (Cmd = '0414') then
begin
LogCoords(packet);
end;
end;
// Процедура-костыль из-за отсутствия DeleteFile
procedure clearFile(fName: string);
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.Clear;
sl.SaveToFile(fName);
sl.Free();
end;
begin
// Чистим файл от содержимого
clearFile(CoordsFileName);
// Работаем до ручной остановки
repeat Sleep(1000) until False;
end.
Встаём в то место, откуда планируем начать запись координат;
Запускаем скрипт;
Потихоньку тыкаем мышкой и ждём, когда персонаж остановится и зафиксирует свою позицию (будет короткий писк);
Таким образом мы сформируем "чекпоинты" для перемещения. Координаты сохраняются в корневую папку с игрой, в файлик coords.txt. "Шаги" между точками желательно делать короткими, чтобы со стороны перемещение персонажа выглядело максимально натурально.
Обратите внимание, что при каждом запуске скрипта этот файлик принудительно очищается, поэтому не забывайте сохранять ранее записанные координаты!!
Скрипт для автоматического поеданя потов с экспой после обмена халоментала у мелкого храна.
после запуска скрипта надо один раз обменять и потом сожрать пот, и в дальнейшем после обмена пот будет жраться автоматически
var
DC_FLAG: Boolean;
s:string;
const
BLOCK_PACKET = $FFFF;
function RecvHandler(var packet: string): Integer;
var
Cmd, sDop: String;
begin
DC_FLAG := False;
Result := 0;
Cmd := Copy(packet, 1, 4);
if ((Cmd = '073D') AND (s<>'')) then
Send2Server('070700'+s+'005629000000'+copy(packet,45,4)+'01');
end;
function SendHandler(var packet: string): Integer;
var
Cmd:String;
begin
Result := 0;
Cmd := Copy(packet, 1, 4);
if ((Cmd = '0707') AND (s='')) then
s := copy(packet,7,2);
end;
function CheckDisconnect(): Boolean;
const
DC_TIMEOUT = 30000;
begin
Result := False;
DC_FLAG := TRUE;
Sleep(DC_TIMEOUT);
// Если за отведённое время не поступило
// входящих пакетов - нас отключило от сервера
if DC_FLAG = TRUE then Result := True;
end;
begin
s := '';
// Работаем до дисконнекта
repeat until (CheckDisconnect() = true);
end.
скрипт для автоматического комбинирования у героя и складывания в стопки. после запуска скрипта просто один раз меняем и жмёт на кнопку ОК или Далее, и повтор + складирование будут происходить автоматически по нажатии кнопок ОК\Далее, также будет продолжаться до того момента пока не отрубите скрипт либо не кончатся реагенты в конкретных слотах. применимо для коробок с т5, комбинации талик + катализатор, и прочей рутинной ересью.
константа force_stack = 1 это складывать всё подрят принудительно. если установить в 0 то надо вручную добавить что складывать а что нет:
s1.add('5402'); //high grade talic master
s1.add('0100'); //recovery item b
s1.add('4300'); //truth obsidian
искать айдишки можно из мануала который был недавно выкинут на форуме. там рассказано о том как выдирать айди вещи и её группу. последняя строка обязательно должна быть s1.add('FFFF').
также собирает в стопки не до конца. мне было лень париться с такими хернями если к примеру придмет падает стопками по 5 штук то в конце когда будет 95+5 то делить на 2 стопки 99 и 1. так что в данном варианте будет 95, 5 и потом вторая стопка начнёт забиваться дальше. чтобы увидеть все предметы в стопках надо будет по окончанию работы сделать релог.
const
force_stack = 1;
var
DC_FLAG: Boolean;
s1,s2,s3:TStringList;
comb_again:string;
g_i: integer;
const
BLOCK_PACKET = $FFFF;
function NeedToStack(str1:string): string;
var
i1:integer;
begin
Result := '';
for i1:= 0 to s1.count - 1 do
begin
if (s1[i1] = copy(str1,1,4)) then
begin
if (s3[i1] = '') then
begin
s3[i1] := copy(str1,5,4);
s2[i1] := inttostr(strtoint('$'+copy(str1,9,2)));
Break;
end
else
if (strtoint(s2[i1])+strtoint('$'+copy(str1,9,2)) >= 99) then
begin
s3[i1] := copy(str1,5,4);
s2[i1] := inttostr(strtoint('$'+copy(str1,9,2)));
Break;
end
else
begin
Result := '0D08'+copy(str1,5,4)+s3[i1]+copy(str1,9,2);
s2[i1] := inttostr(strtoint(s2[i1])+strtoint('$'+copy(str1,9,2)));
Break;
end;
end;
if ((force_stack = 1) and (i1 = s1.count - 1)) then
begin
s1.add(copy(str1,1,4));
s2.add('0');
s3.add('');
Result := NeedToStack(str1);
end;
end;
end;
function RecvHandler(var packet: string): Integer;
var
s, Cmd, sDop: String;
begin
DC_FLAG := False;
Result := 0;
Cmd := Copy(packet, 1, 4);
if (Cmd = '0B09') then
begin
s := NeedToStack(copy(packet,7,4)+copy(packet,35,4)+copy(packet,11,2));
if (s <> '') then Send2Server(s);
end;
end;
function SendHandler(var packet: string): Integer;
var
s, Cmd, sDop: String;
begin
DC_FLAG := False;
Result := 0;
Cmd := Copy(packet, 1, 4);
if (Cmd = '0720') then
begin
comb_again := packet;
end;
if (Cmd = '0723') then
if comb_again <> '' then
begin
Send2Server(comb_again);
end;
end;
function CheckDisconnect(): Boolean;
const
DC_TIMEOUT = 30000;
begin
Result := False;
DC_FLAG := TRUE;
Sleep(DC_TIMEOUT);
// Если за отведённое время не поступило
// входящих пакетов - нас отключило от сервера
if DC_FLAG = TRUE then Result := True;
end;
begin
// Работаем до дисконнекта
comb_again := '';
s1 := TStringList.Create;
s2 := TStringList.Create;
s3 := TStringList.Create;
//s1.add('0B0004');
s1.add('5402'); //high grade talic master
s1.add('0100'); //recovery item b
s1.add('4300'); //truth obsidian
s1.add('4200'); //elemental topaz
s1.add('4000'); //salamander ruby
s1.add('4100'); //last gem?
s1.add('0B00'); //mid box
s1.add('0A00'); //small box
s1.add('0C00'); //large box
s1.add('3802'); //empty large box
s1.add('5502'); //higest grade talic master
s1.add('FFFF'); //test
for g_i := 0 to s1.count - 1 do
begin
s2.add('0');
s3.add('');
end;
//s4.add('FFFFFF');
repeat until (CheckDisconnect() = true);
s1.free();
s2.free();
s3.free();
end.
заточка на определнное количество слотов. после запуска скрипта выбираем какую вещь точим и с чем точим. и заточка будет повторяться до того момента пока не кончатся расходники либо пока не сломается пуха. если у вас стоит необходимая заточка на +4, но стек таликов кончился то можно не останавливать скрипт и выбирать следующий стек для заточки и оно в любом случае остановится на +4 заточке. после того как точнули на запланированное +4 чтобы точить следующую шмотку надо перезапустить скрипт. автозаточка не отображается автоматически. чтобы увидеть свою точку надо либо сделать релог, либо положить шмотку в банк, закрыть банк, открыть банк и забрать пуху. описание констант:
COUNT_UPGR = 4; - сколько раз точнуть
COUNT_TALICS = 99; - сколько таликов в стеке.
если запустить скрипт с константой на 99 таликов и в стопке не будет столько столько то остальные попытки просто будут отображены ошибкой. если у вас пуха заточенна на +1 и вы оставляете константу на количество точек на 4 то пуха будет точиться не до +4 а до +5
var
DC_FLAG: Boolean;
CURR_UPGR: Integer;
CURR_TALICS: integer;
sUpPacket: string;
const
BLOCK_PACKET = $FFFF;
COUNT_UPGR = 4;
COUNT_TALICS = 99;
function SendHandler(var packet: string): Integer;
var
cmd:string;
begin
Result := 0;
Cmd := Copy(packet, 1, 4);
if (cmd = '0711') then
begin
sUpPacket := packet;
CURR_TALICS:=0;
//CURR_TALICS := CURR_TALICS + 1;
end;
end;
function RecvHandler(var packet: string): Integer;
var
cmd:string;
begin
Result := 0;
Cmd := Copy(packet, 1, 4);
if (cmd = '0712') then
begin
CURR_TALICS := CURR_TALICS + 1;
if (copy(packet,5,2) = '00') then
CURR_UPGR := CURR_UPGR + 1;
if ((CURR_TALICS < COUNT_TALICS) and (CURR_UPGR < COUNT_UPGR)) then
send2server(sUpPacket);
end;
DC_FLAG := False;
end;
function CheckDisconnect(): Boolean;
const
DC_TIMEOUT = 30000;
begin
Result := False;
DC_FLAG := TRUE;
Sleep(DC_TIMEOUT);
if DC_FLAG = TRUE then Result := True;
end;
begin
CURR_UPGR:=0;
CURR_TALICS:=0;
DC_FLAG := False;
repeat until (CheckDisconnect() = true);
end.
100% наложение дебафов
Очень часто бывает, что при попытке наложить баф на моба он не накладывается из-за защиты моба от стихий. Но при этом откат у дебафа получается только визуально, на сервере ограничения нет. Выкладываю скрипт, который гарантирует, что дебаф на моба или чара будет наложен
var
lastDebuff: string;
const
BLOCK_PACKET = $FFFF;
function SendHandler(var s: string): Integer;
var
cmd: string;
begin
Result := 0;
cmd := Copy(s, 1, 4);
if (cmd = '1101') then
begin
lastDebuff := s;
end;
end;
function RecvHandler(var s: string): Integer;
var
cmd: string;
begin
Result := 0;
cmd := Copy(s, 1, 4);
if (cmd = '1102') then
begin
if (Copy(s, 5, 2) = '1E') then
begin
Send2Server(lastDebuff);
Result := BLOCK_PACKET;
end;
end;
end;
begin
while true do sleep(1000);
end.
Я правильно понимаю - что это актуально и в случаи когда мобом выступает Пит Босс?)
Я правильно понимаю - что это актуально и в случаи когда мобом выступает Пит Босс?)
С питом не проверял, но по персам и обычным мобам работает
var
DC_FLAG: Boolean;
FilterEnable: Boolean = False;
FilterItems: TStringList;
const
BLOCK_PACKET = $FFFF;
FilterFile = 'LFilter.txt';
function LootFilter(grp: Integer; GID: Integer): Boolean;
var
loot: string;
begin
Result := False;
loot := IntToStr(grp) + ',' + IntToStr(GID);
// Блокируем отображение предметов, которых нет в списке
if (FilterItems.IndexOf(loot) = (-1)) then Result := True;
end;
function RecvHandler(var packet: string): Integer;
var
Cmd: String;
grp, GID: String;
begin
DC_FLAG := False;
Result := 0;
Cmd := Copy(packet, 1, 4);
if ( (Cmd = '0314') or (Cmd = '040F') ) then
begin
grp := Copy(packet, 5, 2);
GID := Copy(packet, 9, 2) + Copy(packet, 7, 2);
if FilterEnable then
begin
// Если функция вернула True - блокируем отображение предмета
if LootFilter(StrToInt('$' + grp), StrToInt('$' + GID)) then
begin
Result := BLOCK_PACKET;
end;
end;
end;
end;
function CheckDisconnect(): Boolean;
const
DC_TIMEOUT = 30000;
begin
Result := False;
DC_FLAG := TRUE;
Sleep(DC_TIMEOUT);
// Если за отведённое время не поступило
// входящих пакетов - нас отключило от сервера
if DC_FLAG = TRUE then Result := True;
end;
begin
if FileExists(FilterFile) then
begin
FilterItems := TStringList.Create();
FilterItems.LoadFromFile(FilterFile);
FilterEnable := True;
end;
// Работаем до дисконнекта
repeat until (CheckDisconnect() = true);
FilterItems.Free();
end.
var
DC_FLAG: Boolean;
FilterEnable: Boolean = False;
FilterItems: TStringList;
const
BLOCK_PACKET = $FFFF;
FilterFile = 'LFilter.txt';
function LootFilter(grp: Integer; GID: Integer): Boolean;
var
loot: string;
begin
Result := False;
loot := IntToStr(grp) + ',' + IntToStr(GID);
// Блокируем отображение предметов, которых нет в списке
if (FilterItems.IndexOf(loot) = (-1)) then Result := True;
end;
function RecvHandler(var packet: string): Integer;
var
Cmd: String;
grp, GID: String;
begin
DC_FLAG := False;
Result := 0;
Cmd := Copy(packet, 1, 4);
if ( (Cmd = '0314') or (Cmd = '040F') ) then
begin
grp := Copy(packet, 5, 2);
GID := Copy(packet, 9, 2) + Copy(packet, 7, 2);
if FilterEnable then
begin
// Если функция вернула True - блокируем отображение предмета
if LootFilter(StrToInt('$' + grp), StrToInt('$' + GID)) then
begin
Result := BLOCK_PACKET;
end;
end;
end;
end;
function CheckDisconnect(): Boolean;
const
DC_TIMEOUT = 30000;
begin
Result := False;
DC_FLAG := TRUE;
Sleep(DC_TIMEOUT);
// Если за отведённое время не поступило
// входящих пакетов - нас отключило от сервера
if DC_FLAG = TRUE then Result := True;
end;
begin
if FileExists(FilterFile) then
begin
FilterItems := TStringList.Create();
FilterItems.LoadFromFile(FilterFile);
FilterEnable := True;
end;
// Работаем до дисконнекта
repeat until (CheckDisconnect() = true);
FilterItems.Free();
end.
100% наложение дебафов
Очень часто бывает, что при попытке наложить баф на моба он не накладывается из-за защиты моба от стихий. Но при этом откат у дебафа получается только визуально, на сервере ограничения нет. Выкладываю скрипт, который гарантирует, что дебаф на моба или чара будет наложен
var lastDebuff: string; const BLOCK_PACKET = $FFFF; function SendHandler(var s: string): Integer; var cmd: string; begin Result := 0; cmd := Copy(s, 1, 4); if (cmd = '1101') then begin lastDebuff := s; end; end; function RecvHandler(var s: string): Integer; var cmd: string; begin Result := 0; cmd := Copy(s, 1, 4); if (cmd = '1102') then begin if (Copy(s, 5, 2) = '1E') then begin Send2Server(lastDebuff); Result := BLOCK_PACKET; end; end; end; begin while true do sleep(1000); end.
Не работает. Может быть погрешность из-за цербера, но ни клиент-сайдом ни пакетом не накладывает пакет, сообщая, что идет откат
Не работает. Может быть погрешность из-за цербера, но ни клиент-сайдом ни пакетом не накладывает пакет, сообщая, что идет откат
На цербере вроде бы фикс. Руофф и америка работает 100%
admin пишет:Скорей всего, я единственный, кому это будет интересно
а если вот так?)
бот для кача по принципу куклы, кукла бегает за мобами, мона пускать в ход и милишников и ренджей, лут не лутает, баффы тоже баффать неумеет, зато стабильно бегает и косит. бегает за ближайшими мобами. порядок запуска: в экране выбора персонажа запустить скрипт, потом логинитесь на персонажа, и кактолько сделаете персонажем первую остановку на месте то туда воткнётся кукла, потом берёте куклу в тангет, и кукла побежит к ближайшему мобу, и потом так и будет бегать. бывает что разрывается атака, надо типо опять нажать пробел и будет атаковать дальше. возможны кучи багов. также есть формула расчёта расстояний до моба, в скрипте мона указать дистанцию поиска (в константах), и время жизни моба (по дэфолту 7 сек, надо чтобы убирать тех мобов которые пропали), короче что смог на скриптах замутить, то и сами посмотрите)
Вы должны зайти под своим именем, чтобы увидеть скрытый текст.
а если кукла появляется бегает от моба к мобу и чар в нее стреляет но урон не проходит? что тогда? куда копать?
о как) некрофил)
if copy(packet,1,4) = '0506' then i_num_mob := monster_get(i_num_mob);
0506 это если атака неудачна, тогда он заново пытается выбрать другую цель, и если ты говоришь что бегает то значит что лупит он не по цели а в пустоту. видимо криво выбирается цель, или пакет на атаку отличается. милик, мавя и в осадке - разные пакеты. и тут вроде только чисто под милика (ренж тоже за милика сойдёт)
Вступаем в любую пати
function SendHandler(var packet: string): Integer;
var
s: String;
cmd: string;
begin
Result := 0;
cmd := Copy(packet, 1, 4);
if (cmd = '0D1A') then
begin
s := Copy(packet, 9, 12);
Send2Server('1003' + s);
end;
end;
begin
while true do sleep($FFFFFFFF);
end.
Чтобы вступить - берем в таргет главу пати. Если есть свободные места и с левелом всё ок - наш перс туда принудительно засунется)) Актуально на каче, когда брать не хотят
Берем в пати против воли (злой баг, позволяет любого взять в пати и выставить лут на себя (например, перед добивом моба))
function SendHandler(var packet: string): Integer;
var
s: String;
cmd: string;
begin
Result := 0;
cmd := Copy(packet, 1, 4);
if (cmd = '0D1A') then
begin
s := Copy(packet, 9, 12);
Send2Server('1006' + s);
end;
end;
begin
while true do sleep($FFFFFFFF);
end.
Файл отстутсвует, просьба перезалить
Спасибо.
сканер в зачаточном состоянии. ведаёт только окружающих мобов, мобы двигаются рывками, да и сканит только когда чар останавливается на месте. чтобы работало надо перед экраном выбора персонажа запустить скрипт в пакетнике, и потом саму прогу и только потом можно входить на персонажа. написанно на лазарусе. исходники в архиве. в исходниках написанно как я использую входящие пакеты, как работаю с бд чтобы хранить базу, ну и как рисую карту на канвасе в имейдже. также старт координатной сетки не слева сверху а слева снизу.
var DC_FLAG: Boolean; const BLOCK_PACKET = $FFFF; function RecvHandler(var packet: string): Integer; begin Result := 0; WriteLog(packet); StrToApp('project_test1', packet,0 ); // действия с пакетом DC_FLAG := False; end; function CheckDisconnect(): Boolean; const DC_TIMEOUT = 30000; begin Result := False; DC_FLAG := TRUE; Sleep(DC_TIMEOUT); // Если за отведённое время не поступило // входящих пакетов - нас отключило от сервера if DC_FLAG = TRUE then Result := True; end; begin repeat until (CheckDisconnect() = true); //StrToApp('project_test1', 'ыыыыы',0 ); end.
аттача не будет, 5 метров не прикрепляет (а несжатый 23 метра, хз чего его так раздуло)
Невозможно играть нормально!!1
Куда платить, чтобы снова работало?
Невозможно играть нормально!!1
А где ты играешь?)
Невозможно играть нормально!!1
А где ты играешь?)
На текущий момень можно комфортно играть только на одном сервере, сам понимаешь, что это цербер
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум работает на PunBB, при поддержке Informer Technologies, Inc