PDA

Просмотр полной версии : Кружок нубов(Вопрос-Ответ)


Страницы : [1] 2 3 4 5 6 7 8 9

DeVolf
05.10.2007, 22:00
//QaK:отдельная тема по подкючению пакетхака к серверу >>>>>>>>тут (http://coderx.ru/showthread.php?t=3791)
любые вопросы по данной тематике в этом топе будут удаляться без предупреждения.

const
mp='8A 1B 15 01 10';
hp='8A 1A 15 01 10';
begin
if fromclient and (pck[1]=#$38#$F5#$00#$EF#$00#$00#$00#$03#$00#$00#$00) then
begin
buf:=hstr(hp);
SendToServer;
end;
if fromclient and (pck[2]=#$33#$F5#$00#$EF#$00#$40#$00#$03#$00#$00#$00) then
begin
buf:=hstr(mp);
SendToServer;
end;
end.
где я ошибся?

xkor
05.10.2007, 22:12
вопервых pck[2] это второй байт пакета а не пакет так что надо не pck[2] а просто pck, во вторых помойму имелось в виду не #$33#$F5#$00#$EF#$00#$40#$00#$03#$00#$00#$00 а #$38#$F5#$00#$EF#$00#$40#$00#$03#$00#$00#$00

DeVolf
06.10.2007, 14:33
const
mp='8A 1B 15 01 10';
hp='8A 1A 15 01 10';
begin
if fromclient and (pck=#$38#$F5#$00#$EF#$00#$00#$00#$03#$00#$00#$00) then
begin
buf:=hstr(hp);
SendToServer;
end;
if fromclient and (pck=#$38#$F5#$00#$EF#$00#$40#$00#$03#$00#$00#$00) then
begin
buf:=hstr(mp);
SendToServer;
end;
end.
вот теперь правельно)
а как мне сделать чтоб пакет не дошол до сервера (pck=#$38#$F5#$00#$EF#$00#$40#$00#$03#$00#$00#$00) ?

xkor
06.10.2007, 15:08
а как мне сделать чтоб пакет не дошол до сервера (pck=#$38#$F5#$00#$EF#$00#$40#$00#$03#$00#$00#$00) ?
добавить в обработку этого пакета pck:='';
тоесть так:
const
mp='8A 1B 15 01 10';
hp='8A 1A 15 01 10';
begin
if fromclient and (pck=#$38#$F5#$00#$EF#$00#$00#$00#$03#$00#$00#$00) then begin
buf:=hstr(hp);
SendToServer;
pck:='';
end;
if fromclient and (pck=#$38#$F5#$00#$EF#$00#$40#$00#$03#$00#$00#$00) then begin
buf:=hstr(mp);
SendToServer;
pck:='';
end;
end.

DeVolf
06.10.2007, 18:09
спасибо :roll:
а вопше реально ли сделать скрипт похожый на Дор Ектион только чтоб клавишы отправляли слова в чат а второе окно выполняло действия )
так вопрос как сделать чтоб клавиша в АЖХТМ коде скрипта ДорЕктион придавала переменой Х значение?
'<html><body><center>L2UI_CH3.herotower_deco<font color="LEVEL">Меню управления во'+
'ротами и дверями</font>
<font color="LEVEL">Автор: Furio'+
'us</font>L2UI.SquareWhite<im'+
'g src="L2UI.SquareBlank" width=260 height=4><br1><td><butto'+
'n value="Открыть" action="bypass -h open" width=70 height=1'+
'5 back="sek.cbui94" fore="sek.cbui92"></td>
<td><button '+
'value="Закрыть" action="bypass -h close" width=70 height=15'+
' back="sek.cbui94" fore="sek.cbui92"></td>
</tr><img src'+
'="L2UI.SquareWhite" width=260 height=1><img src="L2UI.Squar'+
'eBlank" width=260 height=4><br1></center></body></html>';
вот етот код

VORON
09.10.2007, 07:29
а вопше реально ли сделать скрипт похожый на Дор Ектион только чтоб клавишы отправляли слова в чат а второе окно выполняло действия )
нет
скрипт на дор опен ваще кривой и ностороен на преодаление геодаты...
он у тебя в клиенте тока окна открывает.. и если сервак кривой то ты через ворота - проходиш
а если серв коректный то нифика..

DeVolf
09.10.2007, 17:03
ну у меня есть идея со скриптом ... нада чтоб в окне (как разговор с НПС) были клавишы (как в ДорЕктион) при нажатии клавишы переменая Х обретала значение .... а как сделать ХЗ

mks
10.10.2007, 11:08
if pck='ddddddddddd' then x:='dfdffdfdfdf';
да я понял что имеет в виду DeVolf, сам хотел разобраться....
Есть пакет клиенту NpcHtmlMessage (0F), с помощью его можно создавать окна с кнопками и всем остальным прямо в клиенте(HTML кодом), и допустим при нажатии кнопки в окне, какой-то переменной присваивается определенное значение(просто для того что б скрипт при этом мог выполнить какое-то действие)
кто-нидь может что сказать по этому поводу, потому как было бы действительно очень удобно

Добавлено спустя 12 минут 7 секунд:
Re: Кружок нубов(Вопрос-Ответ)
т.е. на сколько я понимаю здесь нужно выяснить две вещи:
1. Как построить это окно с кнопками в HTML(я в этом не шарю)
2. Каким пакетом реагирует клиент на действия происходящие в этом окне(нажатие кнопок и т.п., скорее всего даже можно кнопке присвоить горячую клавишу - кстати что решило бы и наш наболевший вопрос с хоткеями)

DeVolf
10.10.2007, 16:56
да я понял что имеет в виду DeVolf, сам хотел разобраться....
Есть пакет клиенту NpcHtmlMessage (0F), с помощью его можно создавать окна с кнопками и всем остальным прямо в клиенте(HTML кодом), и допустим при нажатии кнопки в окне, какой-то переменной присваивается определенное значение(просто для того что б скрипт при этом мог выполнить какое-то действие)
кто-нидь может что сказать по этому поводу, потому как было бы действительно очень удобно

:) разкажы подробней про "NpcHtmlMessage (0F)"

mks
10.10.2007, 17:36
:) разкажы подробней про "NpcHtmlMessage (0F)"
Да я ж говорю что сам не шарю в HTML, поэтому хотелось бы услышать мнение тех кто в этом понимает....

VORON
11.10.2007, 05:58
окошко с диалогом с НПЦ- ето аналог БРАУЗЕРА ИНТЕРНЕТ ЕКСПЛОРЕРА в нем применяетсятся протокол- ХТМЛ..
т.е. если перехватить трафик то ты увидиш в нем ХТМЛ текст..им ссылки в фомате ХТМЛ... но...
ты хочеш что???... заставить скрипт реагировать на нажатие кнопки? ХТМЛ тут не причем... для такой задачи ХТМЛ не нужен...
я бы тебе посоветовал почитать тьему ДА БУДЕТ БОТ... и там ты узнаеш кучу примеров в которых скрипт реагирует на нажатие кнопки ф5

xkor
11.10.2007, 09:52
окошко с диалогом с НПЦ- ето аналог БРАУЗЕРА ИНТЕРНЕТ ЕКСПЛОРЕРА в нем применяетсятся протокол- ХТМЛ..
т.е. если перехватить трафик то ты увидиш в нем ХТМЛ текст..им ссылки в фомате ХТМЛ... но...
ты хочеш что???... заставить скрипт реагировать на нажатие кнопки? ХТМЛ тут не причем... для такой задачи ХТМЛ не нужен...
я бы тебе посоветовал почитать тьему ДА БУДЕТ БОТ... и там ты узнаеш кучу примеров в которых скрипт реагирует на нажатие кнопки ф5
ему хочется именно на ссылки и кнопки жать)
ЗЫ вообще помойму понять что надо писать на HTML довольно просто посмотрев те что приходят от серва и что посылает клиент при нажатии на кнопки/ссылки

mks
11.10.2007, 10:54
да не так-то уж и просто получается, например в этом html пакете мне некоторые вещи не понятны:

'<html><body><center>L2UI_CH3.herotower_deco<font color="LEVEL">Меню управления во'+
'ротами и дверями</font>
<font color="LEVEL">Автор: Furio'+
'us</font>L2UI.SquareWhite<im'+
'g src="L2UI.SquareBlank" width=260 height=4><br1><td><butto'+
'n value="Открыть" action="bypass -h open" width=70 height=1'+
'5 back="sek.cbui94" fore="sek.cbui92"></td>
<td><button '+
'value="Закрыть" action="bypass -h close" width=70 height=15'+
' back="sek.cbui94" fore="sek.cbui92"></td>
</tr><img src'+
'="L2UI.SquareWhite" width=260 height=1><img src="L2UI.Squar'+
'eBlank" width=260 height=4><br1></center></body></html>';

мож для внесения ясности кто-нидь опишет этот html код? (это из скрипта дорс экшн окно с кнопками открыть и закрыть)
и еще вопрос по html - возможно ли в html коде присваивать кнопкам хоткеи?

NLObP
11.10.2007, 15:29
Вот что примерно.
<html> //начало
<body> //тело HTML
<center> //по центру
L2UI_CH3.herotower_deco //картинка ширина, высота
<font color="LEVEL"> //текст цветом
Меню управления воротами и дверями
</font>

<font color="LEVEL">
Автор: Furious
</font>
//перевод строки
L2UI.SquareWhite //картинка ширина, высота
L2UI.SquareBlank <br1> //перевод строки
<td> //табличные данные
<button value="Открыть" //кнопка с надписью Открыть
action="bypass -h open" //что делать при нажатии
width=70 height=15 //ширина, высота
back="sek.cbui94" //вид кнопки нажатой
fore="sek.cbui92"> //не нажатой
</td>
//перевод строки
<td>
<button value="Закрыть" //кнопка с надписью Закрыть
action="bypass -h close" //что делать при нажатии
width=70 height=15 //ширина, высота
back="sek.cbui94" //вид кнопки нажатой
fore="sek.cbui92"> //не нажатой
</td>
//перевод строки
L2UI.SquareWhite
L2UI.SquareBlank <br1> //перевод строки
</center>
</body> //конец тела HTML
</html> //конец

mks
11.10.2007, 16:36
NLObP
пасиб тебе, теперь все ясно
ЗЫ вообще не пойму нах сдался этот HTML код - пусть машина обрабатывает эту хрень, мы ж проги на ассэмблере не пишем, можно написать прогу весом пару мегабайт - аля Visual HTML Creater

mks
11.10.2007, 17:42
2NLObP мне ето все и так было ясно вот что наисать в "action" чтоб Х давалось значение ибо "х:=" не прокатывает :(
естесственно не прокатывает, здесь плучается клиент при нажатии кнопки отвечает серверу пакетом #$21, со 2го байта которого идет стринг, в данном случае 'open' либо 'close'
так что можно заменить их на нужные тебе числовые значения, и в скрипте уже ловить пакет:

if fromclient and (pck[1]=#$21) then
begin
Xstr:=reads(2);
Xint:=strtoint(Xstr);
end; //если нажата кнопка прочитать ее значение и перевести в интеджер

DeVolf
11.10.2007, 18:00
%)
покажи не примере плиз... так ак я не понял что значит Xstr:=reads(2);
Xint:=strtoint(Xstr);
и как тогда будет выглядит скрипт???

NLObP
11.10.2007, 18:54
2NLObP мне ето все и так было ясно вот что наисать в "action" чтоб Х давалось значение ибо "х:=" не прокатывает :(
Вот кусок где идет присваивание

<center>
Move to given Co-ordinates:
<table>
<tr>
<td>X: <edit var="char_cord_x" width=60></td>
<td>Y: <edit var="char_cord_y" width=60></td>
<td>Z: <edit var="char_cord_z" width=60></td>
</tr>
</table>


<button value="Teleport Self" action="bypass -h admin_move_to $char_cord_x $char_cord_y $char_cord_z" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">
</center>

DeVolf
15.10.2007, 16:58
Всем спасибо
Следующий вопрос
клиент посылает пакет , второй клиент его принемает , и отвечает на него действием
как написать скрипт
if fromclient (pck=('пакет действия')) then begin
pck:='';
///а вот тут нада сделать так чтоб посредником передачи пакета был не сервер а Л2ПХ
// тоисть чтоб отетого скрипта второму окну , ну к примеру пришло ПМ
// на которое скрипт запушеный на етом окне ответил действием

или тогда скажые другой способ...
ЗЫ кто не разобрался в скрипте с АЖХТМЛ кодом могу помоч) :)

NLObP
16.10.2007, 02:49
Вот в теме "Что нужно знать для написания скриптов"
Например скрипт:
begin
if FromClient and (ConnectName='SokolA')
and (pck=HStr('1b 04 00 00 00')) then begin
buf:=HStr('45 00 00 00 00 00 00 00 00 00');
SendToServerEx('SokolB');
pck:='';
end;
end.
При получении от клиента играющего за чара с ником SokolA пакета 1b 04 00 00 00 (социальное действие "Victory") непропустит этот пакет и отправит пакет 45 00 00 00 00 00 00 00 00 00 (команда сесть) от имени клиента играющего за чара с ником SokolB, тоесть играете вы в два окна, в одном SokolA, в другом SokolB, нажимаете в первом Victory, и SokolB садится.

Ты такое хотел?

DeVolf
19.10.2007, 16:15
Следуюший вопрос....
как мне сделать скрипт в котором будут отправлятся пакеты на сервер при условии что
1 ЦП менше чем...
2 МП менше чем...
3 ХП менше чем...
как условия написать я знаю
а вот как из пакета выделить количество ХП МП и ЦП я не знаю....

NLObP
25.10.2007, 00:48
при отправки пакетов на учение скилов или покупку оружия сразу дисконект идет. почему? серв шок-ворлд

Просто надо внимательно прочитать правила форума и для чего предназначена данная программа и все станет ясно, а если не станет, то не надо пользоваться программой, забанят и здесь и на сервере. :twisted:

mks
26.10.2007, 15:44
Следуюший вопрос....
как мне сделать скрипт в котором будут отправлятся пакеты на сервер при условии что
1 ЦП менше чем...
2 МП менше чем...
3 ХП менше чем...
как условия написать я знаю
а вот как из пакета выделить количество ХП МП и ЦП я не знаю....
можешь это посмотреть в моем скрипте Master PvP

PIONER
28.10.2007, 00:23
const
greeting=('1b 04 00 00 00');
victory=('1b 03 00 00 00');
advance=('1b 04 00 00 00');
yes=('1b 06 00 00 00');
begin
buf:=HStr(greeting);
SendToServer;
end.
delay(9999)
begin
buf:=HStr(victory);
SendToServer;
end.
delay(9999)
begin
buf:=HStr(advance);
SendToServer;
delay(9999)
end.
delay(9999)
begin
buf:=HStr(yes);
SendToServer;
end.
delay(9999)

Как выставить задержку побольше? а то я ставил и 9999 и 9999999, помоему эффект одинаковый, может она вобще не включается?
Как сделать так, чтобы victory повторился 10 раз(с задержкой между повторениями), перед тем как перейти к выполнению advance?

NLObP
28.10.2007, 02:04
Следуюший вопрос....
как мне сделать скрипт в котором будут отправлятся пакеты на сервер при условии что
1 ЦП менше чем...
2 МП менше чем...
3 ХП менше чем...
как условия написать я знаю
а вот как из пакета выделить количество ХП МП и ЦП я не знаю....

Если еще не разобрался, то примерно вот так (требуются незначительные доделки):
Воспользуемся мониторингом статов чара (хп, мп, цп и координаты) by Shura1oplot модифицировав его с помощью скрипта на автохилки.

Const
Name='NLObP'; //имя чара
heal=1218; //Greater Battle Heal
potion=1060; //Healing potion

var
CharObjID,MyCorX,MyCorY,MyCorZ: integer;
MaxHP,CurHP,MaxMP,CurMP,MaxCP,CurCP: integer;
CharName: string;
TimerHP, TimerCP, TimerMP: TTimer;

procedure Init; //Вызывается при включении скрипта
begin
timerHP:=TTimer.Create(nil);
timerHP.OnTimer:=@OnTimerHP;
timerHP.enabled:=False;
timerHP.interval:=6000;

timerCP:=TTimer.Create(nil);
timerCP.OnTimer:=@OnTimerCP;
timerCP.enabled:=False;
timerCP.interval:=6000;

timerMP:=TTimer.Create(nil);
timerMP.OnTimer:=@OnTimerMP;
timerMP.enabled:=False;
timerMP.interval:=6000;
end;

procedure OnTimerHP(Sender: TObject);
begin
//выбрать что нужно
//MagicSkillUse(heal);
//UseItem(potion);
end;
//по аналогии напиши для CP, MP
procedure OnTimerCP(Sender: TObject);
begin
end;
procedure OnTimerMP(Sender: TObject);
begin
end;

//используем магию
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;

//используем предметы
procedure UseItem(ObjID:integer);
begin
buf:=#$14;
WriteD(ObjID);
WriteD(00);
SendToServerEx(Name);
end;

procedure InitStats;
var
i: integer;
begin
CharObjID:=ReadD(18);
MyCorX:=ReadD(2);
MyCorY:=ReadD(6);
MyCorZ:=ReadD(10);
i:=22;
CharName:=ReadS(i);
i:=i+44;
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
MaxMP:=ReadD(i);
CurMP:=ReadD(i);
i:=i+363;
MaxCP:=ReadD(i);
CurCP:=ReadD(i);
//добавляем проверки по вкусу
if (CurHP<=MaxHP-500) then TimerHP.enabled:=true else TimerHP.enabled:=false;
if (CurCP<=MaxCP-500) then TimerCP.enabled:=true else TimerCP.enabled:=false;
if (CurMP<=MaxMP-500) then TimerMP.enabled:=true else TimerMP.enabled:=false;
end;

procedure StatsUpdate;
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
#$0B: CurMP:=ReadD(i*8+14);
#$0C: MaxMP:=ReadD(i*8+14);
#$21: CurCP:=ReadD(i*8+14);
#$22: MaxCP:=ReadD(i*8+14);
end;
//добавляем проверки по вкусу
if (CurHP<=MaxHP-500) then TimerHP.enabled:=true else TimerHP.enabled:=false;
if (CurCP<=MaxCP-500) then TimerCP.enabled:=true else TimerCP.enabled:=false;
if (CurMP<=MaxMP-500) then TimerMP.enabled:=true else TimerMP.enabled:=false;
end;

procedure CorsUpdate;
begin
MyCorX:=ReadD(2);
MyCorY:=ReadD(6);
MyCorZ:=ReadD(10);
end;

BEGIN
//--- STATS BEGIN ---//
if FromServer and (ConnectName=Name) and (pck[1]=#$04) then InitStats;
if FromServer and (ConnectName=Name) and (pck[1]=#$0E) and (CharObjID=ReadD(2)) then StatsUpdate;
if FromClient and (ConnectName=Name) and (pck[1]=#$48) then CorsUpdate;
//--- STATS END ---//
END.

PIONER
28.10.2007, 06:27
var
tick: Integer;

procedure Init;
begin
end;
function Pause(Timewait: Integer):Boolean;
// сквозная проверка без остановки скрипта (c)dmitry501
var
t : integer;
begin
result := false;
t := Round(Time*86400);
if t > (tick + Timewait) then
begin
tick := t;
result := true;
end;
end;
const
greeting=('1b 04 00 00 00');
victory=('1b 03 00 00 00');
advance=('1b 04 00 00 00');
yes=('1b 06 00 00 00');
begin
buf:=HStr(greeting);
SendToServer;
end; //ТУТ ВЫДАЁТ ОШИБКУ<<<<<<<<<<<<<<<
begin
if pause(2) then;//+ 2 секунды ожидания
end;
begin
buf:=HStr(victory);
SendToServer;
end;
begin
if pause(2) then; //+ 2 секунды ожидания
end;

begin
buf:=HStr(advance);
SendToServer;
end;
begin
if pause(2) then; //+ 2 секунды ожидания
end;

begin
buf:=HStr(yes);
SendToServer;
end;
begin
if pause(2) then; //+ 2 секунды ожидания
end.


добавил задержку, но скрипт выдаёт ошибку на END(в скрипте указанно место), подскажите что неправильно или чего нехватает.

NLObP
28.10.2007, 18:37
Даже не знаю как тебе помочь. Ты в программировании понимаешь? Зачем у тебя куча ненужных begin end;?
Почитай книги какие нибудь.

Вот формат скрипта для пакетхака:

//описываешь константы
const
...
//описываешь переменные
var
...
//описываешь вспомогательные функции (возвращает результат)
function Pause(Timewait: Integer):Boolean;
begin
...
result:=true;
end;
//описываешь вспомогательные процедуры (не возвращает результат)
procedere Pause2;
begin
...
end;

procedure Init; //Вызывается при включении скрипта
begin
//заполняешь если надо
...
end;

procedure Free; //Вызывается при выключении скрипта
begin
//заполняешь если надо
...
end;

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

PIONER
28.10.2007, 19:42
можете мне показать шаблон скрипта, для отправки пакетов поочереди с задержкой? Тоесть эффект тотже самый что и в окне отправки пакетов, только тут должна быть задержка между пакетами.

DeVolf
29.10.2007, 15:31
где я тупонул?
Const
Name='DeVolf'; //??? ????
mp='8A CC F3 00 10';
hp='8A AA B7 00 10';
cp='8A A8 B7 00 10';
var
CharObjID,MyCorX,MyCorY,MyCorZ: integer;
MaxHP,CurHP,MaxMP,CurMP,MaxCP,CurCP: integer;
CharName: string;
TimerHP, TimerCP, TimerMP: TTimer;

procedure Init; //?????????? ??? ????????? ???????
begin
timerHP:=TTimer.Create(nil);
timerHP.OnTimer:=@OnTimerHP;
timerHP.enabled:=False;
timerHP.interval:=100;

timerCP:=TTimer.Create(nil);
timerCP.OnTimer:=@OnTimerCP;
timerCP.enabled:=False;
timerCP.interval:=100;

timerMP:=TTimer.Create(nil);
timerMP.OnTimer:=@OnTimerMP;
timerMP.enabled:=False;
timerMP.interval:=100;
end;

procedure OnTimerHP(Sender: TObject);
begin
buf:=hstr(hp);
SendToServerEx(Name);
end;

procedure OnTimerCP(Sender: TObject);
begin
buf:=hstr(cp);
SendToServerEx(Name);
end;
procedure OnTimerMP(Sender: TObject);
begin
buf:=hstr(mp);
SendToServerEx(Name);
end;

procedure InitStats;
var
i: integer;
begin
CharObjID:=ReadD(18);
MyCorX:=ReadD(2);
MyCorY:=ReadD(6);
MyCorZ:=ReadD(10);
i:=22;
CharName:=ReadS(i);
i:=i+44;
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
MaxMP:=ReadD(i);
CurMP:=ReadD(i);
i:=i+363;
MaxCP:=ReadD(i);
CurCP:=ReadD(i);
//????????? ???????? ?? ?????
if (CurHP<=MaxHP-500) then TimerHP.enabled:=true else TimerHP.enabled:=false;
if (CurCP<=MaxCP-500) then TimerCP.enabled:=true else TimerCP.enabled:=false;
if (CurMP<=MaxMP-500) then TimerMP.enabled:=true else TimerMP.enabled:=false;
end;

procedure StatsUpdate;
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
#$0B: CurMP:=ReadD(i*8+14);
#$0C: MaxMP:=ReadD(i*8+14);
#$21: CurCP:=ReadD(i*8+14);
#$22: MaxCP:=ReadD(i*8+14);
end;
//????????? ???????? ?? ?????
if (CurHP<=MaxHP-500) then TimerHP.enabled:=true else TimerHP.enabled:=false;
if (CurCP<=MaxCP-500) then TimerCP.enabled:=true else TimerCP.enabled:=false;
if (CurMP<=MaxMP-500) then TimerMP.enabled:=true else TimerMP.enabled:=false;
end;

procedure CorsUpdate;
begin
MyCorX:=ReadD(2);
MyCorY:=ReadD(6);
MyCorZ:=ReadD(10);
end;

BEGIN
//--- STATS BEGIN ---//
if FromServer and (ConnectName=Name) and (pck[1]=#$04) then InitStats;
if FromServer and (ConnectName=Name) and (pck[1]=#$0E) and (CharObjID=ReadD(2)) then StatsUpdate;
if FromClient and (ConnectName=Name) and (pck[1]=#$48) then CorsUpdate;
//--- STATS END ---//
END.

NLObP
30.10.2007, 00:02
где я тупонул?
Const
Name='DeVolf';
mp='8A CC F3 00 10';
hp='8A AA B7 00 10';
cp='8A A8 B7 00 10';
procedure OnTimerHP(Sender: TObject);
begin
buf:=hstr(hp);
SendToServerEx(Name);
end;
procedure OnTimerCP(Sender: TObject);
begin
buf:=hstr(cp);
SendToServerEx(Name);
end;
procedure OnTimerMP(Sender: TObject);
begin
buf:=hstr(mp);
SendToServerEx(Name);
end;

Что за пакет 8А?! А вообще разницу видно, что я предлагал и что ты сделал?
Const
Name='DeVolf'; //имя чара
heal=1218; //ID Greater Battle Heal
potion=1060; //ID Healing potion
...
procedure OnTimerHP(Sender: TObject);
begin
//выбрать что нужно
MagicSkillUse(heal);
//UseItem(potion);
end;
//по аналогии напиши для CP, MP
procedure OnTimerCP(Sender: TObject);
begin
end;
procedure OnTimerMP(Sender: TObject);
begin
end;

//используем магию
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;

//используем предметы
procedure UseItem(ObjID:integer);
begin
buf:=#$14;
WriteD(ObjID);
WriteD(00);
SendToServerEx(Name);
end;

DeVolf
30.10.2007, 11:30
пакеты те что в константах ето использование итема петом (мп банок цп банок и хп банок)
так как сервер скручен через жо... то получился такой интересный баг что у пета нету перевеса... я поставил пета в городе и ....
а вот сделать ето ст твоим примером не выходит так ака не ус итем , не скилы , не помогут мне использовать етот баг

NLObP
30.10.2007, 22:24
пакеты те что в константах ето использование итема петом (мп банок цп банок и хп банок)
так как сервер скручен через жо... то получился такой интересный баг что у пета нету перевеса... я поставил пета в городе и ....
а вот сделать ето ст твоим примером не выходит так ака не ус итем , не скилы , не помогут мне использовать етот баг

Не понял юмора. Ну выпьет пет банку и что будет, на чара начинает лекарство действовать?

DeVolf
31.10.2007, 19:00
да...
когда пет пёт банку она действует на чара..

NLObP
31.10.2007, 22:42
да...
когда пет пёт банку она действует на чара..
Интересно, это только на твоем сервере или везде так? А что в скрипте твоем, по конкретнее, не работает? На первый взгляд все правильно и должно работать.

DeVolf
01.11.2007, 12:51
Интересно, это только на твоем сервере или везде так?
ну сервер такой )
А что в скрипте твоем, по конкретнее, не работает?
а как ето можно понять?
ну захожу я ... запускаю скрипт ... сливаю ХП а банки не пёт
думал может гдето ошибся... получается что нет...
что ж тогда делатЬ?

02.11.2007, 11:07
Попробуй потестить, сделай формочку и лабел(например) и после каждого действия, чтоб туда выводиась какая-нить инфа, например после проверки на количество ХП или выводи само каличество ХП.

DeVolf
02.11.2007, 22:30
о да ! точна я сделаю чтоб при каждом обновлении статов в ПМ присылалась колчиство МП ХП ЦП
спасибо)

Добавлено спустя 1 час 52 минуты 15 секунд:
оказуется трабл с пакетами
вот пакет статус апдейт (ПХ не расшифровывает)
0E 9A 13 01 10 01 00 00 00 0E 00 00 00 1C 02 00 00
вот пакет чар селект
15 50 00 6C 00 65 00 61 00 73 00 65 00 54 00 72 00 79 00 41 00 67 00 61 00 69 00 6E 00 00 00 7A 0B 03 00 00 00 D0 FD A6 64 00 00 00 00 00 00 00 00 01 00 00 00 04 00 00 00 35 00 00 00 01 00 00 00 46 C6 01 00 03 36 02 00 E7 F5 FF FF 00 00 00 00 00 A0 72 40 00 00 00 00 00 40 57 40 44 08 00 00 E3 77 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 14 00 00 00 27 00 00 00 2D 00 00 00 1B 00 00 00 1D 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C0 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
пакет ект статус апдейт(ПК не расшифровывает)
F3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00
получается тут различие интерлюдии и с4 (

mazx
03.11.2007, 01:50
Есть пакет npcinfo начинающийся на 16 потом идет обж ид (как я понял pck[2-5])а за ним номер НПС (как я понял pck[6-9])...
я делаю так
var
a:string
if (FromServer) and (pck[1]=#$16) then begin
дальше нужно получить из шестнадцатиричного десятичное число - номер нпc и присвоить строке, как это сделать?
есть идея ...но не знаю верна ли - a:=inttostr(ReadD(6));

и еще вопрос - подскажите код чтобы при target присвоить переменной номер нпc (не обжект,а npcid вроде)

NLObP
01.12.2007, 00:57
P.S. выложите пж на точку скилов и оружия_
На точку оружия и брони уже есть в теме "Да будет бот", смотри внимательно. Точку скиллов делай по подобии, никто за тебя делать не будет.

alxabay
12.12.2007, 23:53
Привет всем. А можно сделать так как будто сеть зависла? :lol:
тоесть я делаю так: нажимаю на модеме стэндби и делаю действия в игре, потом снова в онлайн и перс выполняет их.
Т.е. пакеты гдето буферились а потом стопкой улетали?
спс

mks
13.12.2007, 11:27
Привет всем. А можно сделать так как будто сеть зависла? :lol:
тоесть я делаю так: нажимаю на модеме стэндби и делаю действия в игре, потом снова в онлайн и перс выполняет их.
Т.е. пакеты гдето буферились а потом стопкой улетали?
спс
да, есть такая маза, только пока не вижу в ней смысла....
если есть интересные предложения как это использовать, можно написать скриптик....

alxabay
16.12.2007, 12:31
есть идеи? :)
пытался просто записать команды в 1 пакет ну нет такова эффекта как с кнопкой модема.
Отловил хлапексом там все действия улетают подряд не ожидая сервер потом ответ от серва прилетел. Как повторить это вообще можно этой прогой или более низкий нада перехват сетки?

VORON
16.12.2007, 14:26
а в чем проблемато ? создаем масив стринговый состоящий из перехваченых пакетов исходящих.. все пакеты сохраняет и килем.. не пропускаем их.. при нажатии на чета- запускаем таймер с маленьким интервалом- который из сохранненного масива всё серверу отдаст.. разве так нельзя?

Добавлено спустя 25 минут 37 секунд:
Re:
Есть пакет npcinfo начинающийся на 16 потом идет обж ид (как я понял pck[2-5])а за ним номер НПС (как я понял pck[6-9])...
я делаю так
var
a:string
if (FromServer) and (pck[1]=#$16) then begin
дальше нужно получить из шестнадцатиричного десятичное число - номер нпc и присвоить строке, как это сделать?
есть идея ...но не знаю верна ли - a:=inttostr(ReadD(6));

и еще вопрос - подскажите код чтобы при target присвоить переменной номер нпc (не обжект,а npcid вроде)
я перевожу из 16 в 10 так:
пример рабочий из самописнаго скрипта.. применяю для мониторинга ХП и МП..:
/*************************СЛЕДИМ ЗА ХП******************************************
//следим за ХП
if FromServer and (pck[1]=#$0e) and (ConnectName = NameKom) then
if (pck[2] + pck[3] + pck[4] + pck[5] = IDKomandos) and (pck[6]=#$04) then
begin
//СОБСТВЕННО ЕТО И ЕСТЬ КОЛ-ВО ХП В ФОРМАТЕ ИНИГЕР ПЕРЕВОД в 10 из 16
CurHPKom:=(ord(pck[15]) * 256 + ord(pck[14]));

//если ХП меньше 70% от шкалы то ХП ЛЬЁТ БАФЕР
if (CurHPKom < round(MaxHPKom*0.7)) then
if (tick1 = 1) then
begin
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('2F C1 04 00 00 00 00 00 00 00');
SendToServerEX(NameBot1);
delay(500);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;

Добавлено спустя 10 минут 34 секунды:
а вот если 4-х байтный стринг содержащий закодированое число может принимать отрицателььное значение то немного сложней.. яделаю так:
CentrKachXex:= ord(CentrKachX[3])*256*256 + ord(CentrKachX[2]) * 256 + ord(CentrKachX[1]);
CentrKachYex:= ord(CentrKachY[3])*256*256 + ord(CentrKachY[2]) * 256 + ord(CentrKachY[1]);
if (CentrKachX[4] = #$FF) then CentrKachXex:=16777215-CentrKachXex;
if (CentrKachY[4] = #$FF) then CentrKachYex:=16777215-CentrKachYex;

4-й байт указатель на минус..
хранить такие числа надо в формате ЕКСЕНДИТ- ето 8-ми байтный интегер учитывающий минус. с ним можно выполнять все функции придуманные для ИНТЕГЕРА.. + - / *
жэлаю удачи

функцию INTTOSTR(xx) применять собственно тут нельзя.. для понимания надо понимать-) о как загнул.. стринговый пакет - что ето?? ето не 16-тиричные числа а набор символов.. ето для простоты визуализации он в 16 системе мониторится.. а так как он имеет формат стринг- значит он в памяти хранится в виде "G@KKK(*&%#45GJKhdмсадвыр7:%;%:@" что то типа таково.. поетому работать с ним с использованием INTTOSTR- нельзя..
жэлаю удачи

alxabay
16.12.2007, 14:37
voron раскажи плз поподробнее как их килить?
if FromClient and (pck[1]=#$xx) - тут я правильно? дальше не янаю как их кил:) пжалуста

VORON
16.12.2007, 14:49
voron раскажи плз поподробнее как их килить?
if FromClient and (pck[1]=#$xx) - тут я правильно? дальше не янаю как их кил:) пжалуста
гы-) ну прочитал бы топ ДА БУДЕТ БОТ и всё понял бы.. но я тя понимаю.. ето лень- она всему виной- я сам- лентяй..
для убийства пакета в основной блок (который срабатывает при приходе каждого пакета) вставляеш такую фишку:

pck:='';

весь трафик при етом заблокируется..
но нам надо не ето. нам надо временно заблокировать запомнить действия и потом их выложить.. поетому надо все PCK- запоминать в стринговый массив.. и при етом PCK:=''; использовать с условием что пакет- исходящий а не вхходящий... при етом- жэлательно пакет НЕТПИНГ- пропускать- иначе дисконект будет.. потом при нажатии на соц действие- активируем таймер.. с маленбькой задержкой.. етот таймер каждый тик- будет отсылать очередной пакет серверу из сохраненнго массива..
жэлаю удачи

alxabay
16.12.2007, 15:45
мне надо эти действия в скрипте затормозить

procedure RR(scrl,wp: integer);
begin
buf:=HStr('33 01 00 00 00 1F 00 00 00'); //zato4ka na 31 slot
WriteD(scrl);
buf:=buf+HStr('01 00 00 00'); //zakrili perenos na panel
SendToServer;

buf:=#$14; //activ zato4ku
WriteD(scrl);
WriteD(0);
SendToServerEx(Name);
buf:=#$58; //vesh vibrali
WriteD(wp);
SendToServerEx(Name);
buf:=#$14; //activ zato4ku tuje samuu
WriteD(scrl);
WriteD(0);
WriteD(wp);
SendToServerEx(Name);
end;

вот этот код нада послать в оффлине ;) а тут как я понял sendtoserver отсылает все это в обход тово места где на все пакеты реакция
не осилю, эх ладна.

VORON
16.12.2007, 15:56
слух. ну ты задавай вопросы- грамотней... чтоб на него ответить можно было легко и просто..
что у тебя не получается?
затормозить в скрипте- послать офлине- ето терминология для меня не понятна...
говори что конкретно не выходит?

скрипт ТОРМОЗИТЬ НЕ МОЖЕТ. офлайн- послать нельзя!

alxabay
24.12.2007, 23:00
вообщем дело такое:
> - от клиента ; < - от сервера

для всех случеев Вынесли на панель заточку

1) - без модема
>активировали заточку
<от сервера чтото прилетело не важное
>выбор веши (сама заточка)
<resultat

2) - с модемом
>активировали заточку
<от сервера чтото прилетело не важное
+модем выключел (стэндби)
>выбор веши (и ок)
>активировали заточку
>выбор веши (просто ок)
+модем включил (онлине)
<resultat (приходит 2 раза как будто точил 2 раза)
п.с. пуха точится 2 раза 1 точкой
Хотелось бы автаматизировать:) ну думаю такие бг гденибудь еще проявятся

VORON
25.12.2007, 00:04
alxabay, сори но я неумею работать с инвентарем еслиб умел бы помог.. сложность скрипта твоего в том чтоб узнать ИД всех заточек которые хранятся у тебя в инвенторе.. многие люди ето делали уже не раз.. например когда делали скрипт на то чтоб БАНКА с ХП выпивалась когда надо.. а я вот ето делать неумеюю.. такчто сори.. я несмагу помоч.

alxabay
25.12.2007, 00:14
VORON id как заточки так и вещи известны за основу я юзаю скрипт заточки каторый работает на ура.
но вот как бы вот так передать серверу это два раза скриптом:(

VORON
25.12.2007, 00:18
ну пакет исходящий USEITEM состоит из ИД(пакета 1 байт) + ИД (вещи 4 байта) отправляеш его серверу и заточка активируется..

alxabay
25.12.2007, 00:28
да и там одинаково
Сейчас далеко от модема а тогда не сохранял ну они повторные пакеты от меня идут это точно с одинаковыми вещами как точки так и вещи.

это к примеру не реальные цифры:
useitem=objid=1111
enchant=objid=3343
useitem=objid=1111
enchant=objid=3343

и выписка им приходит success enchant +1 +2 вещи 3343

Добавлено спустя 3 минуты 25 секунд:
я пробывал 2 раза послать пакет он пишет вы отказались энчатить и вы заточилили
тоесть надо и нетпинг и все что можно блокировать,
записал переменую булерную на время посылки своих 2 пакетов сделал на это эвент
все пакиты за буферил после отсыдки точек все пакеты раскидал не сработало

VORON
25.12.2007, 00:46
нет некатит у 2-х одинаковых заточек в инвенторе разные ИД.. в етом то и сложность ИД нужно знать для каждой заточки.. а не 1 и тотжэ использовать..

alxabay
25.12.2007, 00:52
VORON будет вам видео и логи, но не согодня
я понимаю что заточка пропадает после энчанта но она не пропадает и id ее не куда не ищезает какоето время (конкретный сброс даже если точнулась 2 раза если рестарт сделать в игре) а так около 10минут id заточки живет и почему бы ей не точить:)) VORON ну ты удали пожалуст это все. Я потом иначе какнибудь спрошу. Если что irc

PS
пакеты идут которые срабатывают 2 раза с одинаковым id сервер не знаю видет это или нет но он принимает 2 энчанта 1 id точки

QaK
25.12.2007, 09:11
я понимаю что заточка пропадает после энчанта но она не пропадает и id ее не куда не ищезает какоето время
Хмм ты уверен? Может это просто на твоем серваке так?

NLObP
25.12.2007, 10:40
Вот так не прокатит?
const
scrl=123456;
wpn=234567;
...
begin
//не обрабатываем пакеты
pck='';
UseItem(Scrl);
RequesEnchantItem(Wpn);
RequesEnchantItem(Wpn);
...
//повторить столько сколько надо/успеем, может в цикле попробовать :)
end.

ЗЫЖ
названия функций из моего скрипта заточки для PVP сервера

alxabay
25.12.2007, 13:42
IQaKI может у меня такой серв msk проверял на своем сервере у него не сработала.
NLobP не получается пишет вы отменили энчант и вы заточили +1 :(
сервер у нас pvp ява интерлюде

NLObP
25.12.2007, 15:02
А может по другому надо сделать? В клиенте жмем что положено, а пакетхак собирает пакеты и какие нужно отсылает, все прочие киляет.

Попробуй еще так
const
scrl=123456;
wpn=234567;
...
begin
//не обрабатываем пакеты
pck='';
UseItem(Scrl);
RequesEnchantItem(Wpn);
UseItem(Scrl);
RequesEnchantItem(Wpn);
... то есть одну и туже заточку активировать и пробовать снова точить ту же вещь

Добавлено спустя 7 минут 43 секунды:
Re:
NLobP не получается пишет вы отменили энчант и вы заточили +1 :(
сервер у нас pvp ява интерлюде
как клиент узнает, что заточку отменили, мы же удаляем все пакеты от сервера?

QaK
25.12.2007, 16:08
А может по другому надо сделать? В клиенте жмем что положено, а пакетхак собирает пакеты и какие нужно отсылает, все прочие киляет.

Попробуй еще так
const
scrl=123456;
wpn=234567;
...
begin
//не обрабатываем пакеты
pck='';
UseItem(Scrl);
RequesEnchantItem(Wpn);
UseItem(Scrl);
RequesEnchantItem(Wpn);
... то есть одну и туже заточку активировать и пробовать снова точить ту же вещь

Добавлено спустя 7 минут 43 секунды:
Re:
NLobP не получается пишет вы отменили энчант и вы заточили +1 :(
сервер у нас pvp ява интерлюде
как клиент узнает, что заточку отменили, мы же удаляем все пакеты от сервера?

может через Timer отсылку
UseItem(Scrl);
RequesEnchantItem(Wpn);
организовать а не просто так?
Например - по соц действию "да" активировать таймер ... как-нить так?

alxabay
25.12.2007, 17:24
я вот так попробывал

UseItem(Scrl); //otkrili okno enchanta
sbuf:=1; //status 4to ya na4al perexvat paketov ot servera
RequesEnchantItem(Wpn);
UseItem(Scrl);
RequesEnchantItem(Wpn);
sbuf:=2; //zakon4ili perexvat
.........
//tut lovim paketi это у меня в разделе сработать на все пакеты
if FromServer and (sbuf=1) then pck:=''; //поидеи любой пакет убит от сервера
//также пробывал и сохранять все пакеты от сервера пока sbuf=1 потом отправлял когда sbuf=2 и ставил sbuf:=3 прирывая этот случай;
//всеравно он писал в обоих случаях что энчант прерван и второй энчант +1


lQaKl если можешь напиши :oops:

Добавлено спустя 1 минуту 57 секунд:
ugadayKto, а чем скрипт на заточку вещей не подходит? бижа это не вещь?

dmitry501
26.12.2007, 06:43
вообщем дело такое:
> - от клиента ; < - от сервера

для всех случеев Вынесли на панель заточку

1) - без модема
>активировали заточку
<от сервера чтото прилетело не важное
>выбор веши (сама заточка)
<resultat

2) - с модемом
>активировали заточку
<от сервера чтото прилетело не важное
+модем выключел (стэндби)
>выбор веши (и ок)
>активировали заточку
>выбор веши (просто ок)
+модем включил (онлине)
<resultat (приходит 2 раза как будто точил 2 раза)
п.с. пуха точится 2 раза 1 точкой
Хотелось бы автаматизировать:) ну думаю такие бг гденибудь еще проявятся

Жесть....
И это работает?

QaK
26.12.2007, 10:45
lQaKl если можешь напиши
примерно так

var SocialID,Status:integer;
Timer1:TTimer;

procedure Init;
begin
Status:=1;
Timer1:=TTimer.Create(nil);
Timer1.OnTimer:=@OnTimer1;
Timer1.enabled:=false;
Timer1.interval:=15000; //интервал таймера в милисекундах (задать свой).
end;

procedure Free;
begin Timer1.Free;
end;

procedure OnTimer1(Sender: TObject);
begin UseItem(Scrl);
RequesEnchantItem(Wpn);
inc(Status);
end;

begin
if fromserver and pck='' then exit; //не обрабатываем пакеты нулевой длины
if fromserver and (status<>0) then pck:=''; //глушим пакеты от сервака, если точим
if FromClient and (pck[1]=#$1B) then
begin
SocialID:=ReadD(2);
case SocialID of
6:begin Status:=1;
Timer1.Enabled:=true;//начали точить
end;
5:begin Status:=0;
Timer1.Enabled:=false;//закончили точить
end;
end;
end;



Вотьэто не готовый скрипт, это просто часть, которую надо добавить к основному. Скрипт для С4. Начало - социалДА, конец - социалНет.

NLObP
28.12.2007, 01:04
Как сделать так, чтобы можно было с помощью скрипта на рыбалку рыбачить в 2 окна, т.е. чтобы 2 перса рыбачили.
Найди мой скрипт на рыбалку в теме "Д будет бот", он как раз подойдет.

Dr.XoR
31.03.2008, 00:46
возможно ли реализовать скриптик, который открывал бы нужными ключами из рюкзака Treasure Box, если тот находится в определенном радиусе от персонажа? :)

QaK
31.03.2008, 10:29
возможно ли реализовать скриптик, который открывал бы нужными ключами из рюкзака Treasure Box, если тот находится в определенном радиусе от персонажа?
Возможно.

jew
27.04.2008, 14:51
товарищи, а можно попросить простейший пример скрипта? следование одного чара за другим.потихоньку изучаю тему "да будет бот", но чужие скрипты пока вызывают много вопросов..мне бы примерчик простейший, отталкиваясь от которого я развивал бы тему дальше....
в перспективе нужен скрипт "котовод ходит за хавком и бафает кошкой", почти готовые решения в теме "да будет бот" присутствуют...но хотелось бы сделать самостоятельно)

NLObP
27.04.2008, 15:39
следование одного чара за другим
Это организуется двойным таргетом на чаре, как в клиенте. И кот станет ходить за хозяином.

Attacker - ObjectID хозяина
MyXpos, MyYpos, MyZpos - координаты кота

//***********************************************
//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ShiftFlag)
procedure Target(Attacker: Integer);
begin
buf:=#$04;
WriteD(Attacker);
WriteD(MyXpos);
WriteD(MyYpos);
WriteD(MyZpos);
WriteC(00);
SendToServerEx(Name);
end;

//********************************
procedure TargetAttacker(Attacker: Integer);
begin
Target(Attacker);
delay(1000);
Target(Attacker);
end;

jew
27.04.2008, 16:12
Ага, с этим более менее разобрался.
А ритмичное тыканье раз в секунду в Хозяина на протяжении длительного времени не вызовет вопросы при подозрении и проверке чара на бота?

Добавлено через 11 минут
Кстати) обнаружил еще один забавный нюанс такого способа "цепляния к хозяину". Если чар паравоз флагнутый, то ассистент начинает колотить ведомого палкой)))))))

NLObP
27.04.2008, 16:49
Достаточно два раза кликнуть и он будет бегать. Это ведь по типу атаковать чара. Вот он поэтому и атакует флагнутого. =)

Можно организовать следование по другому принципу. Так как они оба на одном компе и пакетхак видит все пакеты обоих чаров, то можно определять координаты куда бежит основной и на основании этого с небольшим разбегом, чтобы в одном месте не оказались, бежать туда же.

jew
27.04.2008, 17:32
Вот в перспективе я и хотел попытаться сделать что то вроде предложенного второго варианта, посмотрел, в FS вроде есть что то вроде генератора случайных чисел,(procedure Randomize, function Random: Extended)
вот с его помощью можно задавать задержку реакции ассистента, а так же немного рандомно изменять координаты на которые пошел паравоз. Если постараться и помучатся с настройкой, то на бота будет очень не похоже....
К сожалению пока моих знаний языка не достаточно для реализации подобного скрипта)

NLObP
27.04.2008, 17:47
На форуме достаточно много скриптов ботов и ассистенов. Возми за образец и исправь под свои нужды.

QaK
15.05.2008, 07:11
Подскажите нообу плиз, как айди предметов то узнавать ?))))Пакет от сервера InventoryInit - там вся инфа о предметах в инвентаре, смотри топик про рыбалку от NLObP - у него подробно описано, как юзать итемы.

Grinch
15.05.2008, 07:55
Вот в перспективе я и хотел попытаться сделать что то вроде предложенного второго варианта, посмотрел, в FS вроде есть что то вроде генератора случайных чисел,(procedure Randomize, function Random: Extended)
вот с его помощью можно задавать задержку реакции ассистента, а так же немного рандомно изменять координаты на которые пошел паравоз. Если постараться и помучатся с настройкой, то на бота будет очень не похоже....
К сожалению пока моих знаний языка не достаточно для реализации подобного скрипта)

на бота не мохож дестр :) а рандом задаётся пингом, если у тя задержка 500 мс то задержка будет примерно 500 -500+пинг

QaK
30.05.2008, 14:17
Как будет выгледить пакет от сервера Sey 2 с текстом: qwerty от персонажа: BINGOOO?
Или как его вычислить?смотри файлик Packet.ini - там формат всех пакетов, ну или почти всех =)

Grinch
30.05.2008, 14:53
Как будет выгледить пакет от сервера Sey 2 с текстом: qwerty от персонажа: BINGOOO?
Или как его вычислить?
как вычислить как не трудно догадаться пакет Say2 приходит от сервера по загадочной причине просто персонаж BINGOOO пишет в чат сообщение с текстом: qwerty
т.е. немного усилий через пнх отлавливаем любой пакет Say2 И меняем его под себя в программке есть даже инструмент что бы текст переводить в хекс.
и Sey2 ну нет в природе разве ты под себе замутил пакет.ини файлик.

Добавлено через 9 минут
Не ну я знаю что он начинается на 4A а сам текст то как прописать?

procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;

PanAm
30.05.2008, 14:53
4A=Say2:h(ObjectID)d(Type)s(From)s(Message)
qwerty - 71 00 77 00 65 00 72 00 74 00 79 00
BINGOOO - 20 00 42 00 49 00 4E 00 47 00 4F 00 4F 00 4F 00
начинаем
4A - Say2
XX XX XX XX - ObjectID - ID говорящего, похоже клиенту на него пофиг
00 00 00 08 - тип сообщения, в тех задании не указан, поставил трейд )))
20 00 42 00 49 00 4E 00 47 00 4F 00 4F 00 4F 00 00 00 - BINGOOO с 2 закрывающими нулями
71 00 77 00 65 00 72 00 74 00 79 00 00 00 - qwerty с 2 закрывающими нулями
Получаем
4A XX XX XX XX 00 00 00 08 20 00 42 00 49 00 4E 00 47 00 4F 00 4F 00 4F 00 00 00 71 00 77 00 65 00 72 00 74 00 79 00 00 00

Grinch
30.05.2008, 15:23
Не ну я знаю что он начинается на 4A а сам текст то как прописать?=1D 04 35 04 20 00 3D 04 43 04 20 00 4F 04 20 00 37 04 3D 04 30 04 4E 04 20 00 47 04 42 04 3E 04 20 00 3E 04 3D 04 20 00 3D 04 30 04 47 04 38 04 3D 04 30 04 35 04 42 04 41 04 4F 04 20 00 3D 04 30 04 20 00 34 00 41 00 20 00 30 04 20 00 41 04 30 04 3C 04 20 00 42 04 35 04 3A 04 41 04 42 04 20 00 42 04 3E 04 20 00 3A 04 30 04 3A 04 20 00 3F 04 40 04 3E 04 3F 04 38 04 41 04 30 04 42 04 4C 04 3F 00 20 00

Добавлено через 20 минут
вкладка дополнительно окошко преобразование уникод ставишь и усё вот тебе текст в хексе

IQI
06.06.2008, 16:06
а кто-нибудь может подсказать как заставиьт работать l2phx, просто после того как я его запускаю и запускаю игру, он у меня находит l2.exe, пишет что он успешно пропатчен, а вот в списке соединений он пишет 0 - пусто, 1 - пусто, хотя должен писать 0 - мой_ник
что нужно сделать или как-то настроить?

Grinch
06.06.2008, 22:32
а кто-нибудь может подсказать как заставиьт работать l2phx, просто после того как я его запускаю и запускаю игру, он у меня находит l2.exe, пишет что он успешно пропатчен, а вот в списке соединений он пишет 0 - пусто, 1 - пусто, хотя должен писать 0 - мой_ник
что нужно сделать или как-то настроить?
а что у тебя за версия пнх? вот это стоило указать, а то у каждой свои глюки

Добавлено через 1 минуту
помему тупо все галочки стоят убери галочку не дешифровать трафик

IQI
06.06.2008, 22:34
la2phx 3.1.8 by xkor
серв Интерлюд
что посоветуете? как заставить работать?

QaK
06.06.2008, 22:41
Скорее всего на твоем серваке изменена оригинальная шифрация - ут только писать собственную дллку, для шифрования трафика.

IQI
06.06.2008, 23:13
эх... я не силен в программировании

DashKAaa
07.06.2008, 09:06
а какой сервер?

IQI
07.06.2008, 13:09
la2.volgodom.ru

-=Ma}{imuS=-
08.06.2008, 13:52
меня интересуюет как задавать время посылки пакетов в скриптах, чтобы через определенное время посылать тот или иной пакет

кароче в частности как заставить БД танцевать танцы через каждые 2 минуты, и юзать селфы через каждые 20 минут?

-=Ma}{imuS=-
08.06.2008, 13:55
begin
buf:=HStr('2F 0F 01 00 00 00 00 00 00 00'); //денс на атаку
SendToServer;
end;

вот как заставить посылать етот пакет каждые 2 минуты?

Grinch
08.06.2008, 14:14
в теме да будет бот 3-4 скрипта по этому вопросу!!! почитай вообще тему очень много скриптов.

-=Ma}{imuS=-
08.06.2008, 16:32
прочитал уже давно... как бы обьяснить в написании скриптов я полный нуб и времени учить язык нету. все на что меня хвататет - посматреть какой пакет приходит от сервера и потом его отправить :) вот только сейчас столкнулся с мыслью автроотправки пакетов, поэтому если не сложно напишите плиз решение для моего примера а дальше уж я сам как нибудь)

Grinch
08.06.2008, 17:45
там решений куча в теме, с чего ты взял что если у тябя нет времени учить язык программирования скриптов, то у кого то другого будет время спецом для тебя писать скрипт :confused:. направление поиска указал ищи там есть готовые скрипты для бд и свса

-=Ma}{imuS=-
08.06.2008, 18:26
В том то и дело что мне не нужны готовые скрипты, я хочу сам разобратся. Вот я полный нуб обьясни мне где в этом скрипте строчка которая отвчеает за то чтоб через каждые 2 минуты танцевал?!

//Скрипт на БД чтобы танцевал каждые 2 минуты и бегал за командиром
const //Dance
d1='2F 11 01 00 00 00 00 00 00 00'; // Dance of Mystic
d2='2F 15 01 00 00 00 00 00 00 00'; // Dance of Light
d4='2F 10 01 00 00 00 00 00 00 00'; // Inspirations
d3='2F 12 01 00 00 00 00 00 00 00'; // Dance of Fire
d5=''; // Dance of Concentration

var
IDPartyMember, IDAssistTarget: String; //ИД командира и ИД его таргета и Собственный ИД
CoordBDX, CoordBDY, CoordBDZ :String; //координаты бота
NameBD, NameKomandos : String; // Имена
x: integer;
timerBD: TTimer;
timerBD1: TTimer;

procedure OnTimerBD(Sender: TObject);
begin
Case x of
1: begin
buf:=hstr(d1);
SendToServerEx(NameBD);
x:=x+1;
end;
2: begin
buf:=hstr(d2);
SendToServerEx(NameBD);
x:=x+1;
end;
3: begin
bRun;
x:=0;
timerBD.enabled:=false;
end;
end;
end;

procedure OnTimerBD1(Sender: TObject);
begin
timerBD.enabled:=true;
x:=1;
end;

procedure bRun;
begin
if (CoordBDX <> '') and (IDPartyMember <> '') then
begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDPartyMember + CoordBDX + CoordBDY + CoordBDZ + hstr('00');
SendToServerEX(NameBD);
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDPartyMember + CoordBDX + CoordBDY + CoordBDZ + hstr('00');
SendToServerEX(NameBD);
end;
end;

procedure Init; //Вызывается при включении скрипта
begin
NameBD:='НИК БД;
NameKomandos:='НИК КОМАНДИРА';
timerBD:=TTimer.Create(nil);
timerBD.OnTimer:=@OnTimerBD;
timerBD.enabled:=false;
timerBD.interval:=2000;
x:=0;
timerBD1:=TTimer.Create(nil);
timerBD1.OnTimer:=@OnTimerBD1;
timerBD1.enabled:=false;
timerBD1.interval:=120000;
end;

procedure Free; //Вызывается при выключении скрипта
begin
timerBD.Free;
timerBD1.Free;
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if pck='' then exit;

//если от сервака принят пакет с ИД и Координатами членов пати то
if FromServer and (pck[1]=#$a7) then
begin
//запоминаем ИД командира
IDPartyMember:=pck[6] + pck[7] + pck[8] + pck[9];
end;

//если принят пакет от клиента с кординатами бд то
if FromClient and (ConnectName=NameBD) and (pck[1]=#$48) then
begin
//запоминаем координаты
CoordBDX:= pck[6] + pck[7] + pck[8] + pck[9];
CoordBDY:= pck[10] + pck[11] + pck[12] + pck[13];
CoordBDZ:= pck[14] + pck[15] + pck[16] + pck[17];
end;


//далее идут управляющие команды

//если КОМАНДИР пишет в любой чат цифру "1" то
if FromClient and (ConnectName=NameKomandos)and (pck[1]=#$38) then
if (pck[2]=#$31) and (pck[3]=#$00) then
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';
//БД БЕЖИТ за КОМАНДИРОМ
bRun;

//выйти из рабочей части скрипта чтобы другие услови не проверяли убитый пакет нулевой длинны
exit;
end;
// запускаем танцы
if FromClient and (ConnectName=NameKomandos)and (pck[1]=#$38) then
if (pck[2]=#$38) and (pck[3]=#$00) then
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';

// бафы
timerBD1.enabled:=true;
timerBD.enabled:=true;
x:=1;
exit;
end;

// остановить танцы
if FromClient and (ConnectName=NameKomandos)and (pck[1]=#$38) then
if (pck[2]=#$39) and (pck[3]=#$00) then
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';

timerBD1.enabled:=false;
exit;
end;
end.

Grinch
08.06.2008, 20:53
procedure Init; //Вызывается при включении скрипта
begin
NameBD:='НИК БД;
NameKomandos:='НИК КОМАНДИРА';
timerBD:=TTimer.Create(nil);
timerBD.OnTimer:=@OnTimerBD;
timerBD.enabled:=false;
timerBD.interval:=2000;
x:=0;
timerBD1:=TTimer.Create(nil);
timerBD1.OnTimer:=@OnTimerBD1;
timerBD1.enabled:=false;
timerBD1.interval:=120000;
end;
вот она

-=Ma}{imuS=-
10.06.2008, 14:37
можно поподробней узнать как работает процедура таймера, и привести для примера рабочий скрипт, который бы отправлял определенный пакет каждые 2 минуты?

AHAPXNCT
10.06.2008, 14:48
Вообщем собсно такой вопросец.
Имееться сервер С4, не ява. Куча багов пофиксено, но и много осталось.
Где то я читал за подмену ID предмета. Ну тоесть покупаеш один предмет, а получаешь совершенно другой.
Поскольку я не понимаю в Л2ПХ ничерта, обьясните мне возможно ли это. И если можна подкиньте скриптик для такой подмены.

QaK
10.06.2008, 14:52
Вот смотри: сначала описываем таймер и бафы:

const //Dance
d1='2F 11 01 00 00 00 00 00 00 00'; // Dance of Mystic
d2='2F 15 01 00 00 00 00 00 00 00'; // Dance of Light
d4='2F 10 01 00 00 00 00 00 00 00'; // Inspirations
d3='2F 12 01 00 00 00 00 00 00 00'; // Dance of Fire
d5=''; // Dance of Concentration
var TimerBD:TTimer;

procedure INIT;
begin
timerBD:=TTimer.Create(nil);
timerBD.OnTimer:=@OnTimerBD;
timerBD.enabled:=false;
timerBD.interval:=120000;
end;
потом пишешь что будет делаться каждые 120000 милисекунд или 2 минуты.
procedure OnTimerBD(Sender: TObject);
begin
Case x of
1: begin
buf:=hstr(d1);//сюда баф
SendToServerEx(NameBD);
x:=x+1;
end;
2: begin
buf:=hstr(d2);//сюда баф
SendToServerEx(NameBD);
x:=x+1;
end;
3: begin
buf:=hstr(d3);//сюда баф
x:=0;
timerBD.enabled:=false;
end;
end;
end;
и наконец - при каком-либо условии включаем таймер баффов:
TimerBD.Enabled:=true;
Вот и все - дальше - сам разбирайся =) а лучше книжку купи или скачай по основам дельфи/паскаля.

-=Ma}{imuS=-
12.06.2008, 12:29
вылазит ошибка в самом конце, у последнего слова end "Begin expected"
и вобще скрипт не запускается когда ставлю на нем галочку

Grinch
12.06.2008, 12:59
вылазит ошибка в самом конце, у последнего слова end "Begin expected"
и вобще скрипт не запускается когда ставлю на нем галочку

нам всё понятно, фотографию свою дай мы по фотографии скрипт посмотрим, без неё не видим ни хрена экстрасенсы из нас хреновые.

-=Ma}{imuS=-
12.06.2008, 13:03
подскажите что в этом скрипте не так, ставлю галочку но он не танцует, и через 2 минуты тоже не танцует:

var
Timer1 : TTimer;
q : Integer; // счетчик
procedure Init;
begin
Timer1 := TTimer.Create(nil);
Timer1.Interval := 120000; // задержка таймера 12к мс
Timer1.Enabled := False;
Timer1.OnTimer := @OnTimer; // имя процедуры, которая будет выполнятся при проходе таймера
end;
procedure Free;
begin
Timer1.Free;
end;
procedure OnTimer;
begin
buf:=HStr('2F 0F 01 00 00 00 00 00 00 00'); //attack
SendToServer;

buf:=HStr('2F 13 01 00 00 00 00 00 00 00'); //haste
SendToServer;

buf:=HStr('2F 12 01 00 00 00 00 00 00 00'); //focus
SendToServer;
Inc(q);
if q = 4 then // если выполнилось уже 4 раза, то останавливаем таймер
Timer1.Enabled := False;
end;
begin
begin
Timer1.Enabled := True;
q := 0; //счетчик ставим у 0
end;
end.

-=Ma}{imuS=-
12.06.2008, 13:05
вобщем я чето немогу понять как работает условие выполнения скрипта
Timer1.Enabled := True;

NLObP
12.06.2008, 13:23
вобщем я чето немогу понять как работает условие выполнения скрипта
Timer1.Enabled := True;

надо было полностью скрипт копировать, вот что было:
begin
if {умова запуска таймера} then
begin
Timer1.Enabled := True;
q := 0; //счетчик ставим у 0
end;
end.
Вот эта строчка и есть условие if {умова запуска таймера} then

Можно написать к примеру if myHP<1000 then

PS: пойди книги почитай, сколько можно основы разжевывать =(

-=Ma}{imuS=-
12.06.2008, 14:32
спс сорь, тупанул я думал это комент))

-=Ma}{imuS=-
12.06.2008, 15:50
вот кое как слепил такой скрипт):

const //Dance
d1='2F 0F 01 00 00 00 00 00 00 00'; // Dance of Attack
d2='2F 13 01 00 00 00 00 00 00 00'; // Dance of Haste
d3='2F 12 01 00 00 00 00 00 00 00'; // Focus


var
Timer1 : TTimer;

procedure Init;
begin
Timer1 := TTimer.Create(nil);
Timer1.Interval := 120000; // задержка таймера 12к мс
Timer1.Enabled := False;
Timer1.OnTimer := @OnTimer; // имя процедуры, которая будет выполнятся при проходе таймера
end;
procedure Free;
begin
Timer1.Free;
end;
procedure OnTimer;
begin
begin
buf:=hstr(d1); //attack
SendToServer;
end;

begin
buf:=hstr(d2); //haste
SendToServer;
end;

begin
buf:=hstr(d3); //focus
SendToServer;
end;
end;
begin
if FromClient and (pck=HStr('2F 12 01 00 00 00 00 00 00 00')) then
begin
Timer1.Enabled := True;

end;
end.

2 вопроса: 1) танцует когда угодно, но только не через 2 минуты
2) танцует только первый и последний денс. на скорость атаки, который в скрипте между ними почему то пропускает. даже если денсы поменять местами и сделать их штук 6 всегда танцует тока первый и последний.

metalFan
12.06.2008, 17:17
вопрос: как работает оператор XOR? :)

Silmaril
12.06.2008, 18:02
, задержку хоть поставь между танцами, бд ТАК быстро танцевать не умеет ;)

Добавлено через 9 минут
где то здесь поднимался вопрос, как увидеть реальную профу чара, если он на сабе, никто не помнит, чёта не нашел

Добавлено через 4 минуты
metalFan,
0 xor 0 =0
0 xor 1 =1
1 xor 0 =1
1 xor 1 =0

-=Ma}{imuS=-
12.06.2008, 19:12
в таком случае вот такой скрипт:
const //Dance
d1='2F 11 01 00 00 00 00 00 00 00'; // Dance of Mystic
d2='2F 15 01 00 00 00 00 00 00 00'; // Dance of Light
d4='2F 10 01 00 00 00 00 00 00 00'; // Inspirations
d3='2F 12 01 00 00 00 00 00 00 00'; // Dance of Fire
d5=''; // Dance of Concentration
var TimerBD:TTimer;

procedure INIT;
begin
timerBD:=TTimer.Create(nil);
timerBD.OnTimer:=@OnTimerBD;
timerBD.enabled:=false;
timerBD.interval:=120000;
end;
procedure OnTimerBD(Sender: TObject);
begin
Case x of
1: begin
buf:=hstr(d1);
SendToServer;
x:=x+1;
end;
2: begin
buf:=hstr(d2);
SendToServer;
x:=x+1;
end;
3: begin
bRun;
x:=0;
timerBD.enabled:=false;
end;
end;
end;
procedure OnTimerBD1(Sender: TObject);
begin
timerBD.enabled:=true;
x:=1;
end;
end.
я немагу понять чем его закончить?! ошибка у последнего слова "end" хотя вроде бы все правильно.

APXAHGEJI
12.06.2008, 23:05
Ну как минимум не хватаем begin перед end. , а вообще у тебя только три процедуры, а собственно того что их бы запускало нет, как раз между этими begin end.

Добавлено через 17 минут
А вообще канешн жуть понадела что, ты бы не мудорствовал и велосипед не изобретал,а посматрел бы сначало похожее готовое.
У тя дохрена ошибок, я бы даже сказал у тебя мало что правильно.
Не определена переменная x; процедура OnTimerBD1 должна быть без параметра и она нигде не запускается; если даже переделаешь что бы запускалось, то будешь ждать 2 минуты прежде чем первый раз бафнет; бафнет он скорее всего только первый баф, ну может и второй в очередь встанет, но не факт, а третий баф точно не будет кастоваться, т.к. у тебя нету перерыва между отправками пакетов и тд и тп))

metalFan
13.06.2008, 13:08
Silmaril, это вычитание чтоли? :D А xor 1 = 9?

Добавлено через 2 минуты
дайте ктонить калькулятор который ксоры считает a ксор б = ц чтобы простенький такой что то я не понимаю 8)

Silmaril
13.06.2008, 13:57
лин, ксор это ЛОГИЧЕСКАЯ операция, и не вычитания, а исключения
а калькулятор есть в ввинде, он вполне такие операции понимает

metalFan
13.06.2008, 14:59
объяснити поконкретней 8)

Silmaril
13.06.2008, 15:34
Определение: XOR

Exclusive OR – исключающее ИЛИ, неэквивалентность, сложение по модулю 2. Бинарная логическая операция, результат которой истинен только тогда, когда значения операндов не совпадают. Например, (1101 OR 0101) = 1000. Символически иногда обозначается “?”.XOR
Вход 1 Вход 2 Выход
0 0 0
0 1 1
1 0 1
1 1 0

Byrger
13.06.2008, 21:04
Помогите плиз, что не так


const
hp='21 08 E8 5E 39 6B 5B 2B 00';
hp2='21 08 E8 5E 39 6B 5B 2B 00';

begin


buf:=hstr(hp);
SendToServer;
delay(5000);
begin
buf:=hstr(hp2);
SendToServer;
end;


end.


l2phx просто виснет намертво...

Grinch
13.06.2008, 23:10
:confused:Помогите плиз, что не так


const
hp='21 08 E8 5E 39 6B 5B 2B 00';
hp2='21 08 E8 5E 39 6B 5B 2B 00';

begin


buf:=hstr(hp);
SendToServer;
delay(5000);
begin
buf:=hstr(hp2);
SendToServer;
end;


end.


l2phx просто виснет намертво...

не понятно что он вообще кроме этого должен делать :confused:

Byrger
13.06.2008, 23:15
:confused:

не понятно что он вообще кроме этого должен делать :confused:

Что непонятного???
Он должен отправить 1 пакет...подождать 5сек
Затем отправить 2ой пакет и сново начать цикл

Grinch
13.06.2008, 23:23
Что непонятного???
Он должен отправить 1 пакет...подождать 5сек
Затем отправить 2ой пакет и сново начать цикл

это точно весь скрипт? и вообще ты каким синтаксисом пользовался когда писал. просто delay(5000) процедура её нет в скрипте, а та что пнх заложена она основной поток замораживает вроде так я если честно вообще не понимаю как скрипт запустился, кстати говоря, так же нет в скрипте Inin процедуры и процедуры Free.
карчое примерно должно быть так.
procedure Init;
begin

end;

procedure Free;
begin
тут
end;

begin

end.
короче дело к ночи учебник возьми

NLObP
13.06.2008, 23:40
В догонку. При использовании delay(5000); мы останавливаем поток пакетов на 5 секунд. И так при прохождении любого пакета. Поэтому и зависает. Процедуру delay(); лучше пореже использовать и задержки ставить 100 ... 1000 мс не больше.

Byrger
13.06.2008, 23:49
procedure Init;
begin

end;

procedure Free;

const
hp='21 08 E8 5E 39 6B 5B 2B 00';
hp2='21 08 E8 5E 39 6B 5B 2B 00';
begin


buf:=hstr(hp);
SendToServer;
delay(5000);

begin
buf:=hstr(hp2);
SendToServer;
end;


end;


begin

end.
запускаю скрипт...
Ничего не происходит, а когда останавливаю скрипт секунды через 3-4 отправляется hp2

Grinch
13.06.2008, 23:51
ы ты реально подумал что слово "тут" во фри процедуре не опечатка? :D

Byrger
13.06.2008, 23:53
Попробовал поставить задержку 500мс, так же глючит
А после остановки отправляется "hp"

Byrger
14.06.2008, 00:00
Значит вместо "тут" нужно задержку сделать?
Или нет, чтот вообще запутался...

И кстати это не весь скрипт...это "зарисовка" тоесть там будет намного больше пакетов, но смысл останется...меняться будет только задержка между отправкой...

Grinch
14.06.2008, 00:06
возьми пример с танцами БД ) поставь делей 5000 и в последнем пункте поставь типа х:=1 и всё зачем велосипед придумывать.

Byrger
14.06.2008, 00:17
Понимаешь, мне между каждым пакетом нужно разный промежуток времени...а там таймер только есть...или куда там делей пихать?

-=Ma}{imuS=-
14.06.2008, 15:48
у меня тож проблема с Delay, но это пофиг сильно не мешает.
а вопрос собственно в следующем:
вот у меня в L2pch несколько скриптов (таймеров) один на танцы, другой на бафф ПП, другой на бафф СЕ. но если их включить одновременно они никак нехотят работать, работает только один из них :(
что прописать в скрипте чтоб он определял в каком из окон клиента он должен работать и чтоб они работали все одновременно?

NLObP
14.06.2008, 22:44
что прописать в скрипте чтоб он определял в каком из окон клиента он должен работать и чтоб они работали все одновременно?
Const
Name='NLObP'; //имя чара которым управляет скрипт
//************************************************** *************
// сообщения в приват, на сервер не отправляются
//************************************************** *************
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;

begin
//обрабатываем свои пакеты от сервера
if (ConnectName=Name) and FromServer then begin
...
end.

То есть использовать процедуры:
SendToClientEx(Name);
SendToServerEx(Name);
и проверять:
ConnectName=Name

ЗЫЖ поищи в скриптах, именно так в основном и используются они

Byrger
15.06.2008, 01:18
У меня возник ещё 1 вопрос....

Нужен скрипт примерно такой...


отослать пакет
---задержка 200мс---
отослать пакет 2
---задержка 200мс---
отослать пакет 3
....
отослать пакет 9
---задержка 200мс---
Остановить цикл...
Я так понимаю это с помощю таёмеров можно сделать...но как?

Grinch
15.06.2008, 01:59
вот хз как работать тока будет понятия не имею
Var timer: integer;
procedure T(timer);
begin
Timer1 := TTimer.Create(nil);
Timer1.Interval := timer; // задержка таймера 12к мс
Timer1.Enabled := False;
Timer1.OnTimer := @OnTimer; // имя процедуры, которая будет выполнятся при проходе таймера
end;
T(времени)//хз как будет это работать
видимо надо додумать )

Добавлено через 38 секунд
скорей всего не будет

Добавлено через 1 минуту
хотя таймер на баф работает, как это не странно поищи в теме да будет бот ) динамически берётся интервал между бафами

Добавлено через 2 минуты
синтаксис языка явно где то в жопе у меня в данном случае. а эксперементировать влом и несчем модели для разработки нету.

Добавлено через 5 минут
Byrger, а можешь просто конкретно написать что ты этим своим мифическим скриптом хочешь сделать, можешь говорить по русски, типа бафера запрограмить или квест намутить что б представить можно было с чем вообще работать скрипту надо, а то шифровки твои как то анализу не поддаются и мягко сказать влом думать.

Byrger
15.06.2008, 02:09
Надо кроче примерно за 2 секунды кинуть в торг 3 раза одно и тоже кол-во аден...и остановить скрипт (а также пакет на принятие и кидание торга вначале)

Grinch
15.06.2008, 02:16
хм) думаешь сервер будет медленней скрипта) максимум чего добьешься это сервер твои действия поставит в очередь на обработку, хотя ява может и пропустить, но на данном форуме читы не рассматривается по крайней мере администрацией портала.

Byrger
15.06.2008, 02:19
Кто-то говорил о читах? Где? Оо
Мне просто нужно отправить пару пакетов с интервалом...
И закрыть цикл затем...

-=Ma}{imuS=-
15.06.2008, 12:04
выкладываю свой первый нубо-скрипт :D чтоб вы видели что ваши старания и мои консультации не прошли напрасно :D
скрипт для бота-бафера или бд, прошу строго не судить:

//вписать имя бота
//взять командира в таргет
//для запуска скрипта бафнуть (можно только один первый бафф)
const //buffs, dance
Name='bot';
d1='2F B4 04 00 00 00 00 00 00 00'; // WW
d2='2F 2C 04 00 00 00 00 00 00 00'; // might
d3='2F 10 04 00 00 00 00 00 00 00'; //shield
d4='2F 0C 04 00 00 00 00 00 00 00'; //magicbarier
d5='2F 14 04 00 00 00 00 00 00 00'; //regen
d6='2F 15 04 00 00 00 00 00 00 00'; //blessbody
d7='2F 18 04 00 00 00 00 00 00 00'; //blessoul
d8='2F 3E 04 00 00 00 00 00 00 00'; //haste
d9='2F 35 04 00 00 00 00 00 00 00'; //focus
d10='2F DA 04 00 00 00 00 00 00 00'; //crit
d11='2F D8 04 00 00 00 00 00 00 00'; //guidance
d12='2F A7 04 00 00 00 00 00 00 00'; //resist

var
Timer1 : TTimer;

procedure Init;
begin
Timer1 := TTimer.Create(nil);
Timer1.Interval := 1200000; // задержка таймера (для танцев бд 125000)
Timer1.Enabled := False;
Timer1.OnTimer := @OnTimer;
end;

procedure Free;
begin
Timer1.Free;
end;

procedure OnTimer;
begin
begin
buf:=hstr(d1);
SendToServerEx(Name);
delay (3100); //для танцев delay можно сделать меньше
end;

begin
buf:=hstr(d2);
SendToServerEx(Name);
delay (3100);
end;

begin
buf:=hstr(d3);
SendToServerEx(Name);
delay (3100);
end;

begin
buf:=hstr(d4);
SendToServerEx(Name);
delay (3100);
end;

begin
buf:=hstr(d5);
SendToServerEx(Name);
delay (3100);
end;

begin
buf:=hstr(d6);
SendToServerEx(Name);
delay (3100);
end;

begin
buf:=hstr(d7);
SendToServerEx(Name);
delay (3100);
end;

begin
buf:=hstr(d8);
SendToServerEx(Name);
delay (3100);
end;

begin
buf:=hstr(d9);
SendToServerEx(Name);
delay (3100);
end;

begin
buf:=hstr(d10);
SendToServerEx(Name);
delay (3100);
end;

begin
buf:=hstr(d11);
SendToServerEx(Name);
delay (3100);
end;

begin
buf:=hstr(d12);
SendToServerEx(Name);
delay (3100);
end;

begin
buf:=hstr('04');
SendToServerEx(Name);
end;
end;

begin
if FromClient and (pck=HStr('2F B4 04 00 00 00 00 00 00 00')) then
begin
Timer1.Enabled := True;
end;
end.

NLObP
15.06.2008, 15:22
У тебя самого как , работает, не тормозит? Писали же что delay() не надо применять!
Найди скрипт//by mks
//Бот баффер Elven Saint, баффает за 5кк
Ещё заметил что лишние begin end; все время используешь.

-=Ma}{imuS=-
15.06.2008, 23:18
с делаями просто все замирает, но это вроде проблем не доставляет. а так вобще посмотрю, нет предела совершенству :)

NLObP
16.06.2008, 11:06
с делаями просто все замирает, но это вроде проблем не доставляет. а так вобще посмотрю, нет предела совершенству :)

Именно, что всё замирает! Вроде что-то не так в пакетхаке - даже пакеты перестают передаваться. Поэтому надо воздерживаться от использования delay(). Проблем не возникнет, если задержка достаточно маленькая, порядка 1 сек и редко.

pps
16.06.2008, 18:44
выкладываю свой первый нубо-скрипт чтоб вы видели что ваши старания и мои консультации не прошли напрасно
скрипт для бота-бафера или бд, прошу строго не судить:
Ты же этот скрипт делал на основе скрипта на БД? Если да, то там используется 2 таймера, delay лучше убрать. С 2 таймерами всё работает прекрасно и ничего не замирает.
(Скрипт на БД можно посмотреть тут http://coderx.ru/showpost.php?p=1284&postcount=127 )
1 таймер - отсчет времени для ребаффа.
2 таймер - для паузы между баффами.

Timer1.Interval := 1200000; // задержка таймера (для танцев бд 125000)
лучше писать так
Timer1.Interval := 20*60*1000; или Timer1.Interval := 2*60*1000; для БД
более читаемо

Byrger
17.06.2008, 15:02
Как запустить скрипт на определённом соединениии? Именно соединение а не имя персонажа...

Допустим "Скрипт 122" работает на 1 соединении
А "Скрипт 112" работает на втором...
И как их можно синхронизировать?Есть ли такая возможность?

QaK
17.06.2008, 15:11
Именно соединение а не имя персонажа...имя соединения это и есть имя персонажа, только вроде если релог на одном акке сделать то исмя соединения останется именем первого чара

Допустим "Скрипт 122" работает на 1 соединении
А "Скрипт 112" работает на втором...
И как их можно синхронизировать?Есть ли такая возможность?
я вижу только 1 способ - объединить эти 2 скрипта в один
в ПНХ есть условие if ConnectName='что-нибудь' вот отсюда и надо танцевать.

Byrger
17.06.2008, 19:30
QaK, понимаешь, мне нужно чтоб соединения в скрипте назывались 1,2,3.... а не по никам...

Добавлено через 3 часа 26 минут
Почему не хочет отправлять 3 пакета с промежутком 200мс между каждым...и задержкой в 5минут в конце цикла?

(Скрипт любезно предоставлен NLObP)

const
packet1='CF 66 33 31 57 89 A1 3E 40 A0 86 01 00';
packet2='FF 35 57 A0 C1 7B CE 1B 40 A0 86 01 00';


var
status:boolean;
timer1: TTimer;
timer2: TTimer;
x: integer;

procedure UseBuff(buffID:string; id:integer);
begin
buf:=HStr(buffID);
SendToServerEX(ConnectNameByID(id)); //переходим от ID к Name
end;

procedure OnTimer;
begin
case x of
0: begin
usebuff(packet1,1);
inc(x);
end;
1: begin
usebuff(packet2,0);
inc(x);
end;
2: begin
usebuff(packet1,1);
inc(x);
status:=true;
timer1.interval:=300000; //5 минут
end;
end;
end;
procedure OnTimer2;
begin
end;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=false;
timer1.interval:=200; //200 миллисекунд
x:=0;
status:=false;

timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timer2.interval:=300000; //5 минут
x:=0;
status:=false;
end;

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

begin
end.

NLObP
17.06.2008, 21:41
На работе кончился инет, поэтому не договорил, как лучше сделать.
Попробуй так:
{
Социальное действие YES - включить
Социальное действие NO - выключить
}
const
packet1='CF 66 33 31 57 89 A1 3E 40 A0 86 01 00';
packet2='FF 35 57 A0 C1 7B CE 1B 40 A0 86 01 00';

var
timer1 : TTimer;
x : integer;

procedure UseBuff(buffID:string; id:integer);
begin
buf:=HStr(buffID);
SendToServerEX(ConnectNameByID(id)); //переходим от ID к Name
end;

procedure OnTimer;
begin
case x of
0: begin
usebuff(packet1,1);
inc(x);
end;
1: begin
usebuff(packet2,0);
inc(x);
end;
2: begin
usebuff(packet1,1);
inc(x);
// timer1.interval:=300000; //5 минут
//откл.
timer1.enabled:=false;
end;
end;
end;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=false;
timer1.interval:=200; //200 миллисекунд
x:=0;
end;

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

begin
if pck='' then exit;
if FromClient then begin
case pck[1] of
#$1B: begin
case ReadD(2) of
//социальное действие Yes для начала
$06: begin
//не передаем серверу
pck:='';
x:=0;
//вкл.
timer1.enabled:=true;
end;
//социальное действие No для окончания
$05: begin
//не передаем серверу
pck:='';
//откл.
timer1.enabled:=false;
end;
end;
end;
end;
end;
end.

Добавлено через 1 минуту
Почему не хочет отправлять 3 пакета с промежутком 200мс между каждым...и задержкой в 5минут в конце цикла?

Потому что таймер выключен и нигде не включается.

Byrger
17.06.2008, 22:23
На работе кончился инет, поэтому не договорил, как лучше сделать.
Попробуй так:
{
Социальное действие YES - включить
Социальное действие NO - выключить
}
const
packet1='CF 66 33 31 57 89 A1 3E 40 A0 86 01 00';
packet2='FF 35 57 A0 C1 7B CE 1B 40 A0 86 01 00';

var
timer1 : TTimer;
x : integer;

procedure UseBuff(buffID:string; id:integer);
begin
buf:=HStr(buffID);
SendToServerEX(ConnectNameByID(id)); //переходим от ID к Name
end;

procedure OnTimer;
begin
case x of
0: begin
usebuff(packet1,1);
inc(x);
end;
1: begin
usebuff(packet2,0);
inc(x);
end;
2: begin
usebuff(packet1,1);
inc(x);
// timer1.interval:=300000; //5 минут
//откл.
timer1.enabled:=false;
end;
end;
end;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=false;
timer1.interval:=200; //200 миллисекунд
x:=0;
end;

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

begin
if pck='' then exit;
if FromClient then begin
case pck[1] of
#$1B: begin
case ReadD(2) of
//социальное действие Yes для начала
$06: begin
//не передаем серверу
pck:='';
x:=0;
//вкл.
timer1.enabled:=true;
end;
//социальное действие No для окончания
$05: begin
//не передаем серверу
pck:='';
//откл.
timer1.enabled:=false;
end;
end;
end;
end;
end;
end.

Добавлено через 1 минуту


Потому что таймер выключен и нигде не включается.


Хм... А как убрать, что не запускалось по социальным действиям?
А то с этим шифрованием... Просто надо чтоб галочку поставил и всё...

Добавлено через 16 минут
Так попробовал... не работает похоже...
Переделал скрипт под "зашифрованные" действия
После выполнения действия YES ничего не происходит...

Добавлено через 14 минут
Социальное действие YES у меня DC 5D E8 09 CF
NO DC 5E E8 09 CF

Два пакета которые нужно отправлять..
1-0A 23 3A FB 40 76 12 DC 40 A0 86 01 00
2-D1 5A E8 09 CF 85 F4 AC 40 A0 86 01 00

{
Социальное действие YES - включить
Социальное действие NO - выключить
}
const
packet1='0A 23 3A FB 40 76 12 DC 40 A0 86 01 00';
packet2='D1 5A E8 09 CF 85 F4 AC 40 A0 86 01 00';

var
timer1 : TTimer;
x : integer;

procedure UseBuff(buffID:string; id:integer);
begin
buf:=HStr(buffID);
SendToServerEX(ConnectNameByID(id)); //переходим от ID к Name
end;

procedure OnTimer;
begin
case x of
0: begin
usebuff(packet1,1);
inc(x);
end;
1: begin
usebuff(packet2,0);
inc(x);
end;
2: begin
usebuff(packet1,1);
inc(x);
// timer1.interval:=300000; //5 минут
//откл.
timer1.enabled:=false;
end;
end;
end;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=false;
timer1.interval:=200; //200 миллисекунд
x:=0;
end;

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

begin
if pck='' then exit;
if FromClient then begin
case pck[1] of
#$ВС: begin
case ReadD(2) of
//социальное действие Yes для начала
$5D: begin
//не передаем серверу
pck:='';
x:=0;
//вкл.
timer1.enabled:=true;
end;
//социальное действие No для окончания
$5E: begin
//не передаем серверу
pck:='';
//откл.
timer1.enabled:=false;
end;
end;
end;
end;
end;
end.


Всё вроде правильно поставил, что не так то?

NLObP
18.06.2008, 00:06
case pck[1] of
#$ВС: begin

Пишешь #$DC, а проверяешь #$BC

Можешь сразу стартовать свою отсылку пакетов, исправив
procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=true;
timer1.interval:=10000; //10 секунд
x:=0;
end;
посылка пакетов начнется через 10 сек после запуска скрипта,
а здесь сделай так
procedure OnTimer;
begin
case x of
0: begin
usebuff(packet1,1);
inc(x);
timer1.interval:=200; //изменяем время на 200 мс
end;
1: begin
usebuff(packet2,0);
inc(x);
end;
2: begin
usebuff(packet1,1);
inc(x);
//откл.
timer1.enabled:=false;
end;
end;
end;

Byrger
18.06.2008, 08:04
Не я всё правильно заменил, просто на форуме забыл раскладку поменять и всместа DC получилось ВС

И он всё равно не работает...

KeL
18.06.2008, 11:49
Вопрос следуещий, тока что начал разбиратся понемногу в ПНХ, кароче вижу чтобы бот-афер следовал за хозяеном используют выдиления таргета и эмуляциу щелчков мыши по нем, а МОЖНО ли юзать бег по кординатам хазяина, тоесть отсеиваим пакеты МУВ ТУ хозяина и бегаим по ним, если да то сразу 2 вопрос - как зделать чтобы он не "вбегал" в хозяина (тоесть держался на определенном растоянии), возможно - кордината Х=кордината Х+10, например, и Y также???

QaK
18.06.2008, 12:11
Вопрос следуещий, тока что начал разбиратся понемногу в ПНХ, кароче вижу чтобы бот-афер следовал за хозяеном используют выдиления таргета и эмуляциу щелчков мыши по нем, а МОЖНО ли юзать бег по кординатам хазяина, тоесть отсеиваим пакеты МУВ ТУ хозяина и бегаим по ним, если да то сразу 2 вопрос - как зделать чтобы он не "вбегал" в хозяина (тоесть держался на определенном растоянии), возможно - кордината Х=кордината Х+10, например, и Y также???В топе да будет бот хде-то валяется скрипт, если мне память не изменяет, написал Mks, там реализовано все то, что ты хочешь.

Byrger
18.06.2008, 20:44
Добавлено через 8 минут
ВИдимо не хочет работать...

procedure UseBuff(buffID:string; id:integer);
begin
buf:=HStr(buffID);
SendToServerEX(ConnectNameByID(id)); //переходим от ID к Name
end;

Добавлено через 9 минут
Кстате скрипт почемуто и без социальных действий начинает работать...
Тоесть запускаю и через 10 секунд отправляется 3 пакета...
Но пакеты отправляются на соединение №0, всё 3 штуки :(
И ещё если переключить соединение на №1 то пакеты всё равно шлёт на №0 (все 3 пакета туда)

--------------
--------------
--------------
--------------
--------------
--------------

NLObP
19.06.2008, 00:40
Добавлено через 8 минут
ВИдимо не хочет работать...

procedure UseBuff(buffID:string; id:integer);
begin
buf:=HStr(buffID);
SendToServerEX(ConnectNameByID(id)); //переходим от ID к Name
end;

Добавлено через 9 минут
Кстате скрипт почемуто и без социальных действий начинает работать...
Тоесть запускаю и через 10 секунд отправляется 3 пакета...
Но пакеты отправляются на соединение №0, всё 3 штуки :(
И ещё если переключить соединение на №1 то пакеты всё равно шлёт на №0 (все 3 пакета туда)

Мне кажется вся беда в шифровании трафика.

ЗЫЖ
Кто ни будь знает, есть ли команда типа SendToServer(ConnectID)?

QaK
19.06.2008, 08:22
Кто ни будь знает, есть ли команда типа SendToServer(ConnectID)?Нет, но можно написать самому =)

procedure SendToServByID(ConID:integer);
var temp:integer;
begin temp:=ConnectID;
ConnectID:=ConID;
SendToServer;
ConnectID:=Temp;
end;

(c) Xkor

KeL
20.06.2008, 01:34
Начал воть разбиратся с ПНХ, но уже 1 проблема - любой скрипт какой не пошлю (включу/выполню) даже самый примитивный, типа сказать чтолибо в чат - приводит к дисконекту =(
Да это ужас, решил со скриптов вернутся назад до пакетов. ппц я посылаю пакеты фильтрах все норм поставил - оно не ловит их =(, я посылаю 1 пакеты уже из ПНХ, а мне в систем чате в ла2 пишет вобще другое (например - послал просто сказать 1 букву, оно мне написало что я не али лидер и не могу чтото зделать, и не могу войну обьявить ибо нету такого клана), а када врубал скрипт на тайтл-бегущей строкой, то тоже писало типа мол на щет али на щет какойто ерунды а потом дисконект как и во всех случаях.
Кароче фигня все что не отправлю приводит к дисконетку если не сразу то через некоторое время =(

QaK
20.06.2008, 08:18
KeL, скорее всего изменена шифрация, еще вопрос, ты как скрипты запускаешь? Опиши последовательность действий.

KeL
20.06.2008, 11:31
QaK, ну там типа скрипт. сохранил его, потом галочку ставлю, и понеслась (или еще дополнительно там кнопку старт нажать). Изменена шифрация? и что делать??? Да еще, када ПНХ к клиенту подсойдиняю, вместо логина, как в боте, у мну в выборе соидинений идут непонятные символы =(, часто не перехватывает мои пакеты (если клиент) =(

QaK
20.06.2008, 16:50
Изменена шифрация? и что делать???Пытаться разгадать алгоритм шифрования, править newxor.dll.

-=Ma}{imuS=-
23.06.2008, 15:33
немогу понять, как реализовать чтобы бот брал в таргет персонажа с определенным ником? (для бафера, чтоб бафал бот локомотив и его помошника)

QaK
23.06.2008, 16:56
немогу понять, как реализовать чтобы бот брал в таргет персонажа с определенным ником? (для бафера, чтоб бафал бот локомотив и его помошника)пакет Action от клиента.

-=Ma}{imuS=-
24.06.2008, 05:03
04 7A 26 40 48 DB 96 02 00 7A C8 FF FF 3C F4 FF FF 00

-вот такой вид имеет пакет Action когда я выделяю кого либо в таргет, проблема в том что при каждом новом запуске игры он разный даже для одного и того же перса. вот мне интересно как связать это дело с его ником?

Grinch
24.06.2008, 09:30
04 7A 26 40 48 DB 96 02 00 7A C8 FF FF 3C F4 FF FF 00

-вот такой вид имеет пакет Action когда я выделяю кого либо в таргет, проблема в том что при каждом новом запуске игры он разный даже для одного и того же перса. вот мне интересно как связать это дело с его ником?

h ObjectID: 0x4840267A
d OriginX: 169691
d OriginY: -14214
d OriginZ: -3012
b ActionID: 0
ну и чё создаёшь массив с 5-ю данными изменяемый и заполняемый по пакетам 03 и перемещение персов ну и берёшь по нику данные h ObjectID:, OriginX:, d OriginY:, d OriginZ: и формируешь пакет актион на перса.
Не вижу проблемы очень много примеров как это делать. а как это сделать смотри в теме да будет бот и подобные.

VORON
28.06.2008, 18:15
04 7A 26 40 48 DB 96 02 00 7A C8 FF FF 3C F4 FF FF 00

-вот такой вид имеет пакет Action когда я выделяю кого либо в таргет, проблема в том что при каждом новом запуске игры он разный даже для одного и того же перса. вот мне интересно как связать это дело с его ником?

в ЕКШН ПАКЕТЕ УКАЗЫВАЕТСЯ ид цели с которой нужно произвести дефолтовое действие.. для моба/нпц етим действие является - "ВЗЯТЬ В ТАРГЕТ" в случае повторного использования пакета по таргету- "ДВИГАТЬСЯ К ЦЕЛИ и АТАКОВАТЬ ФИЗИКОЙ" в случае если вместо нпц/моба используется предмет на полу то- "ПОДОЙТИ И СОБРАТЬ"
пакет выглядит всегда разным потомучто ИД всех предметов и нпц- разные..
также в етом пакете используются координаты собственные.. которые тоже всегда разные.. на последнем месте в пакете указывается ФЛАГ на то что зажат ШИФТ или нет.. и или контрол
04 7A 26 40 48 DB 96 02 00 7A C8 FF FF 3C F4 FF FF 00
04- ид пакета
7A 26 40 48 - ИД ЦЕЛИ с которой нужно произвести дефолтовое действие
DB 96 02 00 - икс координата собственная
7A C8 FF FF игрик
3C F4 FF FF зет
00флаг на то что ты не зажимаеш шифт или контрол.. в случае с шифтом там будет 01 в случае с контролом чета другое..
.. P/S : я вот подумал а что будет если и шифт и контрол зажать?? ответ: переключение на АНГЛ ЯЗЫК-)

Добавлено через 2 часа 22 минуты
ДРУЗЬЯ! помагите советом= ХКОР- незнает в чем причина..
ПОРОЙ ПАКЕТХАК тормозить начинает ппц как... а порой норм.... когда тормозит симптомы такие: играю в окне лог пакетов не ведется.. скрипты никакие не запущены.. пакетхак при етом тупо тормозит.. задержка пакетов достигает 15-30 секунд
при етом если запущено второе окно без пакехака (без перехвата) то оно летает , всё видит риал тайм.. а перехваченное окно пакетхаком видит всё происходящеее с задержкой на пол минуты порой...
КОР посоветовал повысить приоритет задач на ПАКУЕТХАК... ето не помагло...
какие причины таково лага?

Stasrus
29.06.2008, 17:07
Подскажите почему не работает?

begin
if FromClient and (ConnectName='SokolA')
and (pck=HStr('1b 04 00 00 00')) then begin
buf:=HStr('45 00 00 00 00 00 00 00 00 00');
SendToServerEx('SokolB');
pck:='';
end;
end.

п.с. Имена менял

Если посылать отдельно 1b 04 00 00 00 и 45 00 00 00 00 00 00 00 00 00 работает, сам скрипт нет, может потому что интерлюдия?

NLObP
29.06.2008, 22:53
Подскажите почему не работает?

begin
if FromClient and (ConnectName='SokolA')
and (pck=HStr('1b 04 00 00 00')) then begin
buf:=HStr('45 00 00 00 00 00 00 00 00 00');
SendToServerEx('SokolB');
pck:='';
end;
end.

п.с. Имена менял

Если посылать отдельно 1b 04 00 00 00 и 45 00 00 00 00 00 00 00 00 00 работает, сам скрипт нет, может потому что интерлюдия?

Так делал?

При получении от клиента играющего за чара с ником SokolA пакета 1b 04 00 00 00 (социальное действие "Victory") непропустит этот пакет и отправит пакет 45 00 00 00 00 00 00 00 00 00 (команда сесть) от имени клиента играющего за чара с ником SokolB, тоесть играете вы в два окна, в одном SokolA, в другом SokolB, нажимаете в первом Victory, и SokolB садится.

Stasrus
30.06.2008, 01:10
Именно так и делал, на одном нажимал виктори теоретически второе должно было сесть, но оно не садится(

Grinch
30.06.2008, 11:23
Именно так и делал, на одном нажимал виктори теоретически второе должно было сесть, но оно не садится(

имена должны соответствовать полностью в том числе и регистр букв, проверь ещё раз

liferus
04.07.2008, 12:00
var
CheckPointList: TList;
Point: array[0..2] of integer;
begin
CheckPointList:=TList.Create;
Point[0]:=111;
CheckPointList.Add(Point);
Point[0]:=222;
CheckPointList.Add(Point);
//
end;
Вопрос: array(CheckPointList[0])[0] равно ли array(CheckPointList[1])[0] ?
то есть по сути: Добавление элемента в список происходит по ссылке или по значению? Другими словами: копируется ли массив при добавлении в список или туда ложится ссылка на него?
Читал мануал - не нашел этого.

Aniks
04.07.2008, 12:07
Массив не копируется, только указатель

liferus
04.07.2008, 14:13
получается что каждый раз нужно создавать новый массив чтоб запихнуть в список. Так?
если Point указатель, то как ему присвоить новый массив в теле процедуры?
Point:= array[0..2] of integer - ошибка синтаксиса

Добавлено через 8 минут
ошибся
CheckPointList.Add(TObject(Point)); //вроде так правильно добавлять в список массив

но как теперь его вытащить оттуда?
Point1:= Array of integer(CheckPointList[0]);
Point1:= (Array of integer)(CheckPointList[0]);
Point1:= Array(CheckPointList[0]);
все ошибки синтаксиса....

Добавлено через 26 минут
Вроде бы нашел решение
обявлять так
Point,Point1: Variant;
CheckPointList:TList;
использовать так
Point:=VarArrayCreate([0, 2], varInteger);
Point[0]:=12344;
Point[1]:=62456;
Point[2]:=-2344;

...
CheckPointList.Add(Point);
...
Point1:= CheckPointList[0];

как это работает посморю вечером

VORON
10.07.2008, 05:53
var
CheckPointList: TList;
Point: array[0..2] of integer;
begin
CheckPointList:=TList.Create;
Point[0]:=111;
CheckPointList.Add(Point);
Point[0]:=222;
CheckPointList.Add(Point);
//
end;
Вопрос: array(CheckPointList[0])[0] равно ли array(CheckPointList[1])[0] ?
то есть по сути: Добавление элемента в список происходит по ссылке или по значению? Другими словами: копируется ли массив при добавлении в список или туда ложится ссылка на него?
Читал мануал - не нашел этого.

м.. поднимался вопрос месяца 2 назад про двумерные и 3-х мерные и т.д. массивы.. но пришли к выводу вроде что нельзя ето на фаст скрипт создать.. но кто то вроде придумал какото муляж 2-у мерного масива.. array of array типа того... но хз чем експеримент закончился.. епомню в какой теме ето обсуждалось.. но помню что синтаксис объявления двумерного массива от дельфи тут некатит..
щас вот подумал.. а может RECORD создать? типа x[1].y[2]= xxxx

Time Trasher
18.07.2008, 14:25
Решил написать свой первый скрипт
const
UseCP='2F 2C 05 00 00 01 00 00 00 00 '; \\Пакет на использование скила
CP='27 01 00 02 00 04 00 5D 32 10 40 D8 15 00 00 33 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 '; \\Пакет на получения банок
RelogReq='46'; \\Запрос релога
CharSel='0D 00 00 00 00'; \\Выбор чара

begin
buf:=hstr(UseCP); \\Посылаем запрос на юзание скила
SendToServer;
end.;
if FromServer and (pck=27 01 00 02 00 04 00 5D 32 10 40 D8 15 00 00 33 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00) then \\получаем банки
begin
buf:=hstr(RelogRec); \\посылаем запрос на релог
SendToServer;
end;
if FromServer and (pck=5F 01 00 00 00 6F 00 6B 00 20 00 6D 00 65 00 72 00 6F 00 6E 00 67 00 7E 00 20 00 6B 00 68 00 61 00 68 00 61 00 00 00) then \\получаем подтверждение релога
begin
buf:=hstr(CharSel); \\Посылаем выбор чара
SendToServer;
end;
end.
Думаю ошибок в коде оОченнь много :) после получения цп банок, скрипт начинает постоянно посылать пакеты на юзание скила, вместо того чтобы делать релогин(

QaK
18.07.2008, 14:51
Time Trasher, у тебя не стоит условие на юзанье банок, поэтому скрипт при приходе какого-либо пакета пытается юзнуть скилл.

Time Trasher
18.07.2008, 15:06
QaK, а if FromServer and (pck=27 01 00 02 00 04 00 5D 32 10 40 D8 15 00 00 33 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00) then \\получаем банки
разве не условие? или надо его как-то по другому оформить?

QaK
18.07.2008, 15:08
begin
buf:=hstr(UseCP);* *\\Посылаем запрос на юзание скила
SendToServer;
end; Вот тут где у тебя условие?

NLObP
18.07.2008, 15:50
Решил написать свой первый скрипт

begin
buf:=hstr(UseCP); \\Посылаем запрос на юзание скила
SendToServer;
end.;
Вот ошибка!
END. (энд с точкой) - может быть только в конце программы!
Дальше программа не будет выполняться.
if FromServer and (pck=27 01 00 02 00 04 00 5D 32 10 40 D8 15 00 00 33 01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00) then \\получаем банки
begin
buf:=hstr(RelogRec); \\посылаем запрос на релог
SendToServer;
end;
if FromServer and (pck=5F 01 00 00 00 6F 00 6B 00 20 00 6D 00 65 00 72 00 6F 00 6E 00 67 00 7E 00 20 00 6B 00 68 00 61 00 68 00 61 00 00 00) then \\получаем подтверждение релога
begin
buf:=hstr(CharSel); \\Посылаем выбор чара
SendToServer;
end;
end.

QaK
18.07.2008, 16:17
А с помощью этой программы можно копировать вещи?нет.

QaK
18.07.2008, 16:19
Тоесть эта программа делает те вещи что можно и самому сделать?именно =)

Time Trasher
18.07.2008, 17:52
если поставить после енд точку с запятойbegin
buf:=hstr(UseCP); \\Посылаем запрос на юзание скила
SendToServer;
end; то ПакетХак ругается на синтаксис, мол нет точки после енда :(

Добавлено через 2 минуты
Вот тут где у тебя условие?

а как сделать, чтобы условия небыло? т.е. чтобы без всяких условий посылался пакет

Добавлено через 15 минут
кстати после релогина подключение остается, т.е. скрипт будет выполняться после релогина?

NLObP
18.07.2008, 17:54
если поставить после енд точку с запятойbegin
buf:=hstr(UseCP); \\Посылаем запрос на юзание скила
SendToServer;
end; то ПакетХак ругается на синтаксис, мол нет точки после енда :(

С чего ты решил, что там должен быть END?
Почитай книжки по Паскалю.

PanAm
27.07.2008, 01:28
Вот пробую напмсать скрипт автопринятие пати с задержкой
Var
Timer : TTimer;

procedure Init;
begin
timer :=TTimer.Create(nil);
timer.OnTimer :=@AnswerJoinParty;
timer.enabled :=false;
timer.interval :=3000;
end;

procedure Free;
begin
timer.Free;
end;

procedure AnswerJoinParty(Sender: TObject);
begin
timer.enabled :=false;
buf:=hstr('2A 01 00 00 00');
SendToServer;
end;

begin
if FromServer and (pck[1]=#$39) then begin
pck :='';
timer.enabled :=true;
end;
end.
на вид все верно, но когда из первого окна (чар1) создаю пати со вторым окном (чар2), у чара1 пишет что чар1 принят в пати :confused: а во втором вообще ничего не происходит. Что не так?

MHz
27.07.2008, 17:26
Вот пробую напмсать скрипт автопринятие пати с задержкой ... на вид все верно. Что не так?

Даже на вид все неверно.
Раз у тебя запущено 2 клиента то отправляй пакеты именно в те соединия какие надо, а не во все, т.е. юзай ф-ции SendToServerEx. И принимай тоже не все пакеты а именно с того соединения которого ожидаешь, т.е. должны быть проверки ConnectionName = ...

Я в общем сильно в твой скрипт не всматривался, но он режет глаз даже при беглом просмотре

PanAm
27.07.2008, 19:45
тоесть в AnswerJoinParty не определено куда будет посылать пакет?
Надо панимать что 1 скрипт работает в одном адресном пространстве на все соединения?

MakeThis
28.07.2008, 04:07
Народ помогите плз исправить этот скриптик на кристализацию вещей, чтобы только скупать и бить на кристаллы, вот ссылка http://coderx.ru/showthread.php?p=63...E0%ED#post6357

QaK
28.07.2008, 10:09
Надо панимать что 1 скрипт работает в одном адресном пространстве на все соединения?угу,
нужно сдклать типа следующее:
If FromServer and (ConnectName='тот, кто должен принять пати') and (pck[1]=#$39) and ('тот,кто должен кинуть пати'=ReadS(2)) then Timer.Enabled:=True;

procedure AnswerJoinParty(Sender: TObject);
begin
buf:=hstr('2A 01 00 00 00');
SendToServerEx('тот, кто должен принимать пати');
timer.enabled :=false;
end;

-=Ma}{imuS=-
28.07.2008, 23:11
это снова я)
наткнулся на простенький скрипт на авто подачу НР-бутылок:
//by 6yDDucT
//автоматическое использование НР пробирок
var MyID:Word;
OID:String;

begin
if FromServer and (pck[1]=#$27) and (ReadD(12)=1060) then
OID:=pck[8]+pck[9]+pck[10]+pck[11]; //1060 - idItem'a который мы хотим юзать, в данном случае Lesser Healing Potion

if FromServer and (pck[1]=#$04) then MyID:=ReadD(18);
if FromServer and (pck[1]=#$0e) and (ReadD(2)=MyID) then
if ReadD(6)=4 then
if (ReadD(14)<=400) then //400 - кол-во ХП при котором начнется пьянка.
begin
buf:=#$14+OID+#$00#$00#$00#$00;
SendToServer;
end;
end. чето не вдупляю как заставить его пить МР бутылки вместо НР ?? (играю на эбисе) если я не ошибаюсь юзается пакет charinfo, как его расшифровать? обьясните плиз русским языком чтоб я понял...

metalFan
28.07.2008, 23:53
надо всего лишь поменять 1060 на айди мана драга ивсе, а чар инфо тебе не нужен

Добавлено через 23 минуты
фу неправда нужен еще как, вот наваял
//by 6yDDucT
//edit by metalFan (Mana)
//автоматическое использование Mana Drug
const name=('metalFan');
var MyID:Word;
OID:String;
begin
if (FromServer) and (ConnectName=name) and (pck[1]=#$27) and (ReadD(12)=726) then
OID:=pck[8]+pck[9]+pck[10]+pck[11];
if FromServer and (ConnectName=name) and (pck[1]=#$04) then MyID:=ReadD(18);
if FromServer and (ConnectName=name) and (pck[1]=#$0e) and (ReadD(2)=MyID) then
if ReadD(6)=4 then
if (ReadD(82)<=351) then //400 - кол-во MP при котором начнется пьянка.
begin
buf:=#$14+OID+#$00#$00#$00#$00;
SendToServerEx(name);
end;
end.
жду пасипки :)

NLObP
28.07.2008, 23:55
надо всего лишь поменять 1060 на айди мана драга ивсе, а чар инфо тебе не нужен

Что-то ты не то говоришь. В скрипте проверяется ХП, чем оно поможет при питье бутылок маны?

Используется пакет
0E=StatusUpdate:h(ObjectID)d(AttribCount)d(AttrID) d(AttrValue)

ЗЫЖ если поюзать поиск, то можно найти и другие реализации

procedure StatusUpdate; //обновление данных о себе
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do
case pck[i*8+10] of
#$09: MyHP:=ReadD(i*8+14);
#$0A: MyMaxHP:=ReadD(i*8+14);
#$0B: MyMP:=ReadD(i*8+14);
#$0C: MyMaxMP:=ReadD(i*8+14);
end;
if (MyMP<'значение') then
begin
.... //юзать бутылку
end;
end;

Adventurer
29.07.2008, 00:00
С чего ты решил, что там должен быть END?
Почитай книжки по Паскалю.

дико извиняюсь за оффтоп.. пакет хак еще не начинал осваивать.. увидел мессагу про паскаль.. глянул на код.. бля.. а ведь и вправду знакомо!!!

язык паскаля на 100% совпадает или только основа?

NLObP
29.07.2008, 00:04
дико извиняюсь за оффтоп.. пакет хак еще не начинал осваивать.. увидел мессагу про паскаль.. глянул на код.. бля.. а ведь и вправду знакомо!!!

язык паскаля на 100% совпадает или только основа?

В Пакетхаке используется FastScript для поддержки скриптов. FastScript понимает паскаль - можно пользоваться и несколько других языков, в частности си, которые нельзя применять в пакетхаке. Вот ссылка на сайт FastScript (http://www.fast-report.com), там можно взять мануал.

metalFan
29.07.2008, 00:07
NLObP, фу неправда нужен еще как
:)

Добавлено через 32 секунды
я его уже на 10альфе проверил :)

Добавлено через 1 минуту
там надо было сдвиг поменять

OMxxxxx
30.07.2008, 20:31
Как получить Время, восколько получен определенный пакет.
и отправить его себе текстом.

PanAm
30.07.2008, 21:22
DateTimeToStr(Time);
DateTimeToStr(Now)

-=Ma}{imuS=-
15.08.2008, 17:24
всем привет, у меня появилась идея создать своеобразного мини-бота для рифта, который бы ассистил по указоному нику.

я пробовал вписывать ник командира в скрипт "воин помошник" но ничего не происходит, хотел сделать скрипт сам, но не нашел пакета на ассист, когда нажимаю на ассист приходит обычный пакет на выделение и атаку того или иного моба :confused:

вобщем прошу помощи, от чего мне хотя бы оттолкнутся? или напишите примерно как будет выглядеть скрипт :pardon:

Grinch
15.08.2008, 21:44
хм ) там пакетик есть в нём ид кто и кого выделяют пакет популярный т.к. идёт для всех и вся т.е. надо отлавливать пакет через фильтр выделять обжект ид цели и её кординаты потом мутить пакет актион ) так работает клиент. сори что не пишу пакеты и разборку их. но скрипт похерил этот а в 11:45 влом отлавливать его.

Breadfan
21.08.2008, 14:27
А вот созрел для такого вопроса: если все часто используемые процедуры типа StatusUpdate, CreateItemBase и т.п. объеденить в отдельный файл и в скрипте подключать его командой Uses '.\Scripts\DLL.txt'; Возможно ли такое использование для одновременной работы нескольких скриптов?

QaK
21.08.2008, 14:33
Возможно ли такое использование для одновременной работы нескольких скриптов?хз вроде да.

PanAm
21.08.2008, 15:38
Возможно ли такое использование для одновременной работы нескольких скриптов?
Можно
даже больше
Если создать такой скрипт
Uses '.\Scripts\CharInfo.txt';
begin
end.
только скрипт Char Info надо переименовать в CharInfo, то запустив этот скрипт будет работать и CharInfo.

Emocean
25.08.2008, 20:07
Здрасте. Помогите со скриптом. Вот часть моего скрипта, которая должна автоматически применять харвестр на проманоренном мобе:
const
Name ='Name';
Harvester_IID =5125;
//================================================== ================================================== ================================
var
MainOID,TargetOID,temp1,temp2,for1,hoid:integer;
//================================================== ================================================== ================================
procedure Init;
begin
buf:=#$0F; SendToServerEx(Name);
end;
//================================================== ================================================== ================================
begin
if FromServer then
case ConnectName of
Name:
begin
case pck[1] of
//================================================== ================================================== ================================
// ItemListPacket:w(window)w(ListCount)w(itemType1)d( ObjectID)i(ItemID)d(count)w(itemType2)w(CustType1) w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustType2 )d(Augment)d(--)
//================================================== ================================================== ================================
#$1B: if MainOID=0 then begin
temp1:=ReadH(4);
for for1:=1 to temp1 do begin
temp2:=ReadD(36*for1-24);
case temp2 of
Harvester_IID: hoid:=ReadD(36*for1-28);
end;
end;
pck:='';
end;
//================================================== ================================================== ================================
// MyTargetSelected:h(ObjectID)w(color)
//================================================== ================================================== ================================
#$A6: TargetOID:=readd(2);
//================================================== ================================================== ================================
// TargetUnselected:h(targetID)d(X)d(Y)d(Z)d(d)
//================================================== ================================================== ================================
#$2A: TargetOID:=0;
//================================================== ================================================== ================================
// Die:d(CharID)d(d)d(HAsHideout)d(HasCastle)d(flags) d(sweepable)d(access)
//================================================== ================================================== ================================
#$06: if readd(2)=TargetOID then if hoid<>0 then begin
buf:=#$14;
WriteD(hoid);
WriteD(0);
SendToServer;
end;
//================================================== ================================================== ================================
end;
end;
end;
end.
По идее должно работать так: берешь моба в таргет, сажаешь семечко, убиваешь, и сразу после этого должен автоматически использоваться харвестр для сбора фруктов при условии, что таргет остался на убитом мобе.
Однако почему-то оно работает не всегда, и часть мобов пропускает. В чем может быть дело?

Breadfan
25.08.2008, 22:58
У меня по такому подобию сделан автосвип, так же иногда не свипал пока
buf:=#$14;
WriteD(hoid);
WriteD(0);
SendToServer; не заменил на вызов процедуры с таймером в 200мс, хз почему так

Byrger
26.08.2008, 20:34
А как сделать задержку без delay а то с ним скрипт виснет...
скрипт такой...
const
r1='2B 7E 75 74 6F 6A 71 32 00 6C 00 61 00 63 00 6B FB 27 75 11 6F 0B 71 04 00 68 00 00 00';
r2='2B 7E 75 74 6F 6A 71 32 00 6C 00 61 00 63 00 6B FB 27 75 11 6F 0B 71 04 00 68 00 00 00';
r3='ляляляля';
r4='ляляляля';
r5='ляляляля';
begin


buf:=HStr(r1);
SendToServer;
delay(2000);
buf:=HStr(r2);
SendToServer;
delay(2000);
buf:=HStr(r3);
SendToServer;
delay(2000);
buf:=HStr(r4);
SendToServer;
delay(2000);
buf:=HStr(r5);
SendToServer;
delay(2000);

end.

NLObP
26.08.2008, 20:37
А как сделать задержку без delay а то с ним скрипт виснет...
Через таймер сделай. Найди скрипты баферов, там именно так сделано.

Byrger
26.08.2008, 20:50
понел что в переменных нужно прописывать timer1: TTimer а как его использовать я не понел :(

Добавлено через 1 минуту
потом задаём сам таймер
procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=true;
timer1.interval:=2000;
end;
А как его использовать между отправками не понимаю...

Breadfan
26.08.2008, 20:54
В блоке инициализации прописываешь
crashz:=TTimer.Create(nil); //- создание таймера
crashz.OnTimer:=@crash1;//- объявление процедуры выполняемой при срабатывании таймера
crashz.enabled:=false;//- исходное состояние таймера
crashz.interval:=5000;//- интервал срабатывания в мс
после этого создаешь нужную процедуру, и управляешь в скрипте ее включением\выключением флагом crashz.enabled (crashz - условное название, может быть любым)

Byrger
26.08.2008, 20:58
извини но я в этом очень плохо разбираюсь... Можешь показать на моём примере?

Breadfan
26.08.2008, 21:22
На твоем примере показать абсолютно не смогу, скрипт абсолютно нежизнеспособен ) Кстати уже был выложен скрипт на бд-бота

Byrger
26.08.2008, 21:27
ПОчему не жизнеспособен???
Он без делеев работает на ура...
только через 10сек дисконнект так как очень быстро

Breadfan
26.08.2008, 22:02
//основная часть скрипта
//вызывается при приходе каждого пакета если включен
begin
end.
Получается что при получении любого пакета от сервера или клиента он тут же начинает слать пакет на танец, вот тебе и дисконнект, вот тебе и жизнь;) ищи скрипт на бд, где то был (http://coderx.ru/showthread.php?p=7318&highlight=%F0%E5%E4%E5%ED%F1%E0#post7318)<<<---ткни сюда - попадешь на ветку где есть скрипт на бд

Byrger
26.08.2008, 22:14
Блин не понимаю я тебя....

NLObP
26.08.2008, 23:07
Блин не понимаю я тебя....

Что не понятного в том, что тебе предлагают посмотреть, как правильно скрипт написать? Там примеры есть готовые.

Breadfan
26.08.2008, 23:15
Может непонятно при чем тут БД? Так ведь принцип одинаков, вобщем посмотришь-поймешь

-=Ma}{imuS=-
27.08.2008, 00:53
нашел скрипт на авто подачу МР-банок:
const
Name='';

var MyID:Word;
OID:String;

begin
if (FromServer) and (pck[1]=#$27) and (ReadD(12)=726) then
OID:=pck[8]+pck[9]+pck[10]+pck[11];

if FromServer and (pck[1]=#$04) then MyID:=ReadD(18);
if FromServer and (pck[1]=#$0e) and (ReadD(2)=MyID) then
if ReadD(6)=4 then
if (ReadD(82)<=400) then //400 - кол-во MP при котором начнется пьянка.
begin
buf:=#$14+OID+#$00#$00#$00#$00;
SendToServerEx(Name);
end;
end.
работает каряво, постоянно пьет МР банки пока не зальет полностю, на "400 - кол-во MP при котором начнется пьянка " даже не смотрит.
кроме того пьет не через каждые 15 сек а постоянно систем чат аж разрывается...

помогите разобратся, надо чтобы пил только при определенном кол-ве МП, предполагаю что ошибка здесь: if (ReadD(82)<=400), возможно вместо 82 другая цифра должна быть и скрипт просто не туда смотрит, но пакет UserInfo настолько большой я не смог найти там CurrentMP, да и вобще не знаю как искать конкретный кусок :(

и еще как зделать чтобы пил через 15 секунд?

NLObP
27.08.2008, 02:09
возможно вместо 82 другая цифра должна быть и скрипт просто не туда смотрит, но пакет UserInfo настолько большой я не смог найти там CurrentMP, да и вобще не знаю как искать конкретный кусок

Скачай 4 версию пакетхака. Там для своего чара можно посмотреть смещение для MP. Смещение зависит от длины имени, поэтому разное.

PS: в версии 3.3.2 кстати, теперь тоже можно.

Byrger
27.08.2008, 09:02
const
r1='2B 7E 75 74 6F 6A 71 32 00 6C 00 61 00 63 00 6B FB 27 75 11 6F 0B 71 04 00 68 00 00 00';
r2='2B 7E 75 74 6F 6A 71 32 00 6C 00 61 00 63 00 6B FB 27 75 11 6F 0B 71 04 00 68 00 00 00';
r3='ляляляля';
r4='ляляляля';
r5='ляляляля';
var
timer1:=TTimer.
x1:integer;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=false;
timer1.interval:=2000;
x1:=1;
end;

procedure OnTimer(Sender:TObject);
begin case x1 of
1:begin buf:=HStr(r1);
SendToServer;
inc(x1);
end;
2:begin buf:=HStr(r1);
SendToServer;
inc(x1);
end;
3:begin buf:=HStr(r1);
SendToServer;
inc(x1);
end;
4:begin buf:=HStr(r1);
SendToServer;
timer1.enabled:=false;
x1:=1;
end;

end;
end;
begin //здесь пишешь какое-нить условие, при котором делаешь Timer1.enabled:=true;

end.


А как таймек запустить между отправками вот что я не понимаю...примеры я смотрел, но многое мне не понятно...вот и прошу показать на моём скрипте...

QaK: Поправил твой скрипт, а вообще в топе "Да будет бот", туева хонна примерофф, так что нефиг, учи матчасть, как гриццо.

PanAm
27.08.2008, 16:31
тут только один момент - если используются несколько окон, то в OnTimer неопределенность куда посылать пакет, надо использовать SendToServerExt и явно указывать соединение

Byrger
27.08.2008, 16:55
А как сделать мой скрипт бесконечным?
Ну и остановить скрипт вконце...по условию

-=Ma}{imuS=-
27.08.2008, 18:11
Скачай 4 версию пакетхака. Там для своего чара можно посмотреть смещение для MP. Смещение зависит от длины имени, поэтому разное.

PS: в версии 3.3.2 кстати, теперь тоже можно.
где можно скачать? в файловом архиве я не нашел, можно ссылочку :)

Grinch
27.08.2008, 19:37
Byrger, http://coderx.ru/showthread.php?t=15 вот тема, и вот небольшая подборка идей и скриптов http://coderx.ru/showthread.php?t=14&page=29 учи матчасть

NLObP
27.08.2008, 23:06
где можно скачать? в файловом архиве я не нашел, можно ссылочку

Здесь кусочек L2PHX4 (http://coderx.ru/showthread.php?t=677), а здесь модификация 3.2.0 (http://coderx.ru/showthread.php?t=618)

-=Ma}{imuS=-
28.08.2008, 01:21
ок, спс.
вот тока я не понимаю как старые скрипты типа "Бот - локомотив", или скрипт на бутылки НР определяют это самое смещение, причем я их включаю на разных персах с разными именами и всегда работает

Breadfan
28.08.2008, 11:10
Хроники Камаель
Столкнулся с тем что команда в пакете RequestBypassToServer все время разная, и передается в предыдущем пакете от сервера NpcHtmlInfo. Вот сваял процедуру запоминающую содержимое и количество этих команд.
const
name='';
var
kolvocmd,j,x:integer; //-kolvocmd- итоговое количество команд j,x- вспомогательные переменные
CmdNpc:array[1..50] of string; //массив с командами, 50 - взято с большим запасом
// у телепортеров обычно примерно всего 20 команд
findt,oldpck:string; //вспомогательные переменные
//---------------------
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(Name);
end;
//---------------------
procedure CmdNpcParc;
Begin
kolvocmd:=0;
for j:=1 to 50 do begin // предварительная очистка массива
CmdNpc[j]:='';
end;

for j:=1 to length(oldpck) do begin // побуквенная проверка строки oldpck
for x:=0 to 9 do begin
findt:=findt+oldpck[j+x];
end;
if findt='bypass -h ' then begin
for x:=10 to 25 do begin
CmdNpc[kolvocmd+1]:=CmdNpc[kolvocmd+1]+oldpck[j+x];
end;
kolvocmd:=kolvocmd+1;
end;
findt:='';
end;
end;
//---------------------------------
begin
if fromserver and (pck[1]=#$19) then
begin // в процедуру передается содержимое пакета NpcHtmlInfo
oldpck:=ReadS(6);
CmdNpcParc;
SendMsg('Количество- '+inttostr(kolvocmd));
for j:=1 to kolvocmd do begin
SendMsg(inttostr(j)+'ая- '+CmdNpc[j]);
end;
end;
end.

Не зная точно команд работы с частью строки сделал все через циклы, может как то подправить\сократить?

Time Trasher
28.08.2008, 20:20
знаю, что уже обсуждалось, но немогу никак найти :( подскажите как убить пакет от сервера к клиенту

QaK
29.08.2008, 07:48
if FromServer then pck:='';

Breadfan
31.08.2008, 03:56
Как определяется игровое время, это время указанное на карте или показываемое командой /time ?

Breadfan
07.09.2008, 22:43
Возник вопрос: делал ли кто нибуть скрипт, для ассистента-"сливателя" (слив дестров)? Принцип: команда в чат -> атака пишушего -> анализ остатка хп ->если меньше X то дважды кликнуть по самому себе (остановить атаку). Может кто выложит наработки?

VORON
08.09.2008, 06:34
Возник вопрос: делал ли кто нибуть скрипт, для ассистента-"сливателя" (слив дестров)? Принцип: команда в чат -> атака пишушего -> анализ остатка хп ->если меньше X то дважды кликнуть по самому себе (остановить атаку). Может кто выложит наработки?

учитывая то что етот вопрос задан в етой теме ( а не в "ДАА БУДЕТ БОТ") отвечу так.. я имею порядка 30-40 хз их сколько скриптов разных для всех случаев жизни.. самые основные их них я выложил в тему "ДА БУДЕТ БОТ" далее чтоб набросать скрипт вроде твоего я просто беру создаю новый скрипт.. полностью чистый.. и вствляю в него процедуры которые мне пригодятся в новом скрипте.. типа конструктора.. для твоего скрипта нужно определить ИД всех участников (всех или тока одного, пох есть отдельные кусочки кода которые делают ето), запомнить координаты у всех (для етого тоже масса процедурок в готовых скриптах моих.. и не тока моих) , потом нужно туда добавить процедуру котороая за таргетом следит (тоже все готово) , потом нужно что выполнять команды при нажатии на кнопку и останавливать ее при нажатии на другую кнопку...
вапще написание скрипта как я понял блоковое занятие.. и что интересно каждый из наиболее применяющихся скриптов- для работы требует одних и тех же блоков..
сам принцип таков:
при запуске скрипта ниче не делать.. но растопырев уши скрипт слушает трафик и выбирает из него нужную информацию для дольнейшей работы.. как тока вся необходимая информация для работы скрипта собрана из трафика то можно начинать ее пользоваться с помощью процедур и таймеров..
в данной смысле я имею ввиду не полновесную процедуру- обработчик, а условие IF
с помощью IF в линяге мы можем отреагировать на событие в игре.. даже на такое которого не видно на екране (порой).. реакция от скрипта будет вполне адекватной.. за рамки правил- вылезти нельзя!.. некоторые моменты обойти можно.. например..
"у вас 10 окон расставлены как артилерия на поле.. хаотично или по порядку.. вы можете с етих окон сделать РЕДИРЕКТ ИНФЫ на основного чара об том где кто ково видет.. и на основном чаре ты станеш видеть всё поле! прикинь! и ето реально сделать! город на осаде окружить трупами- хотябы 3-4 чарами.. и редирект сделать!
и ты станеш виедеть за 3 километра всех кто там в замке- бегает... жесть"
вопщем твой скрипт собрать из готовых кусочков некуй делать

Breadfan
08.09.2008, 22:26
Согласен. Может кто выложит наработки? - была надежда что мб кто поделится пока я на работе :) чтож буду писать

А по поводу темы Планируется сюда собрать всю разбросанную по разным топам инфу про полезных ботов и скрипты к ним.. и обсуждение перенести сюда чтоб по кусочкам с разных топов информацию не черпать. - хз, на мой взгляд там выкладывать уже готовые\разрабатываемые скрипты, а не вопросы у кого и что имеется

VORON
10.09.2008, 00:47
"у вас 10 окон расставлены как артилерия на поле.. хаотично или по порядку.. вы можете с етих окон сделать РЕДИРЕКТ ИНФЫ на основного чара об том где кто ково видет.. и на основном чаре ты станеш видеть всё поле! прикинь! и ето реально сделать! город на осаде окружить трупами- хотябы 3-4 чарами.. и редирект сделать!
и ты станеш виедеть за 3 километра всех кто там в замке- бегает... жесть"

сам свою мысль продолжу.. таково еще я неделал но думаю ето несложно.. думаю хорошобы 4 трупа вокруг замка вплотную к стене уложить и сних инфу РЕДИРЕКТИТЬ на основного чара.. а еще думаю во время осады сделать РЕНЕЙМ НИКОВ ВАРОВ.. те налету на основном чаре переделывать ник (либо подпись) в что то типа ПРОФА,ШМОТ, и возможно состояние- типа УД.. удобно было бы.. видиш толпу мясо на осаде а в подписях у всех профа написана.. и буква означающая А или Б или Ы сет.. сразу видно кто папко а кто нет.. имхо удобно..
также думаю было бы неплохо какнибудь автоматизировать процес выделения в таргет варов.. ну не автоматически конечно но хотябы както.. лично у меня большая проблема во время осады с тем что в толпе мяса где вары со своими в перемешку- таргет взять врага.. думаю можно над бошкой стрелочку рисовать которая укажет направление откуда по тебе нанесли удар.. а также в дополнение к етому запрограмировать какоето социальное действие на то чтобы взять в таргет того кто по тебе нанес удар- последним.. если по тебе сразу 2-3 бьют то стрелочка над головой будет крутиться и показывать направление последнего удара.. и при желании нажав на социальное действия тот кто бил последним возьмется в таргет.. думаю ето удобно было бы.. также думаю что еще необходимо выделить както тех кто по тебе стреляет.. типа их НИК или подпись переделывать в что то типа "!!АХТУНГ!!" и плюс к етому состояние ПК вешать на него чтоб ник красным был , чтоб он в толпе не потерялся.. на него укажет и стрелочка и ник будет изменен и прижелании нажав кнопку- выделится в таргет
щаз ету мысль в топе "ДА БУДЕТ БОТ ОТПИШУ".. она там уместней..

Mithras
23.11.2008, 17:42
хочу сдлать скрипт, который будет заменять имя в пакете 0x32(UserInfo)
Собственно идея в том, чтобы заставить l2contlol видеть другой ник чара. Не уверен пока что что это вообще возможно...

Вот кусочек кода:

if(FromServer)and(pck[1]=#$32)and(CharName=ReadS($16)) then
begin
buf:=copy(pck,1,$16-1);
WriteS(NewName);
delete(pck,1,$16+l{типа длина ника в байтах}-1);
buf:=buf+pck;
pck:='';
SendToClient;
end;

Вообщем он вообще не выполняется, но и ошибок ни каких не выдает, не могу въехать почему...

QaK
24.11.2008, 09:08
Вообщем он вообще не выполняется, но и ошибок ни каких не выдает, не могу въехать почему..Объясни практичность данных действий? Чего ты хочешь достичь, изменяя имя чара, все равно на серваке ничего не поменяется.
l{типа длина ника в байтах}сюда чего поставил? (Length(CharName)+1)*2 ?

NLObP
24.11.2008, 13:26
сюда чего поставил? (Length(CharName)+1)*2 ?

Вроде надо (Length(CharName)*2+2). Один символ - два байта, плюс терминатор из двух нулей.

QaK
24.11.2008, 13:27
Вроде надо (Length(CharName)*2+2). Один символ - два байта, плюс терминатор из двух нулей. а чем отличается твой результат от моего? =)

Vebstor23
04.12.2008, 12:09
народ подскажити я позьзуюсь l2phx.3.4.1.61 всё работало кул пока непошол на серв l2woa. Запускаю l2phx вхожу в игру и когда ввожу ак игра просто зависает хотя когда играл на других серваках всё норм работало даже на офф норм прошло. подскажити в чём проблема? эт типо там защита такая? пробывал запускать l2phx на выборе чара тоже самое зависает при нажатии кнопки старт. Эт возможно какнить исправить?

QaK
04.12.2008, 14:31
народ подскажити я позьзуюсь l2phx.3.4.1.61 всё работало кул пока непошол на серв l2woa. Запускаю l2phx вхожу в игру и когда ввожу ак игра просто зависает хотя когда играл на других серваках всё норм работало даже на офф норм прошло. подскажити в чём проблема? эт типо там защита такая? пробывал запускать l2phx на выборе чара тоже самое зависает при нажатии кнопки старт. Эт возможно какнить исправить? Почитай ФАК. Скорее всего поменяли шифрацию, может еще что-нить, посмотри в просмотре, до какого момента принимаются пакеты.

Vebstor23
04.12.2008, 17:55
вот мои действия:
1-Запускаю игру
2- запускаю l2phx
3- ввожу ак
4- жму войти
и нечё непроисходит просто тупо какбудто зависает но музыка идёт жму например выйти тоже нечё непроисходит тоже самое если запущу игру до выбора сервера смотрю в пакеты пакетов ваще непринятых неотправленых нету( вот и немогу врубится чё за фигня( ещё ненаодном сервере на который конектился спомощью l2phx небыло такого

PanAm
04.12.2008, 18:59
1-Запускаю игру
2- ввожу ак
3- жму войти
4- запускаю l2phx
5- выбираю сервер

Vebstor23
04.12.2008, 21:32
1-Запускаю игру
2- ввожу ак
3- жму войти
4- запускаю l2phx
5- выбираю сервер
это я тоже описывал в своём посте
как я понял это происходит из-за патч а именно чёто сделали с папкой system т.к. я вставлял папку систем от сервака на котором всё работало на ура и всё так и работает на ура а если вне вставить l2.ini то работает всё норм но до момента когда выбираеш сервер зависает также как было описано( а если вставить папку систем в которой ваще неработает зависает( как было выше описано) и заменить l2.ini от сервака на котором всё работает то происходит аналогичное зависание при нажатии какой либо кнопки( кто знает вчём может заключаться проблема? вот если кто хочет посмотреть какое зависание проиходит патч от сервака http://la2single.com/downloads/Interlude/La2Spatch_1.1.rar если кто узнает как исправить эту брду отпишити pliz заранее благодарю ато уже такое на двух серваках случилось(

Shizo
11.12.2008, 00:23
GG убить пробовал?

Xelat
11.12.2008, 07:02
это я тоже описывал в своём посте
как я понял это происходит из-за патч а именно чёто сделали с папкой system т.к. я вставлял папку систем от сервака на котором всё работало на ура и всё так и работает на ура а если вне вставить l2.ini то работает всё норм но до момента когда выбираеш сервер зависает также как было описано( а если вставить папку систем в которой ваще неработает зависает( как было выше описано) и заменить l2.ini от сервака на котором всё работает то происходит аналогичное зависание при нажатии какой либо кнопки( кто знает вчём может заключаться проблема? вот если кто хочет посмотреть какое зависание проиходит патч от сервака http://la2single.com/downloads/Interlude/La2Spatch_1.1.rar если кто узнает как исправить эту брду отпишити pliz заранее благодарю ато уже такое на двух серваках случилось(

Боже, ни одного знака препинания! :confused: Как вообще можно понять то, что вы написали?

Shizo
11.12.2008, 11:11
Боже, ни одного знака препинания! :confused: Как вообще можно понять то, что вы написали?

+1 чувак как я пишет :D тока я потом перечитываю и растовляю! :p

prostotak
19.12.2008, 10:04
Где можно взять ПОЛНОЕ описание пакетов. Суть то такова. На офе: Запуская l2ph 3.4.1.64, запуская l2, логинюсь...выбираю чара, пишу все пакеты. Затем мне нужно выловить скажем все пакеты "Action" - но их в логе просто нет :confused: Вопрос: Где я :fool:?

QaK
19.12.2008, 10:12
пишу все пакеты.это что значит? поясни.

prostotak
19.12.2008, 10:21
Т.е. не ставлю никаких фильтров. Пишу не я, а пакетхак :sorry:

QaK
19.12.2008, 10:25
скачай последнюю версию ПНХ - l2ph 3.4.1.68 вроде, там есть расшифровка пакетов для руоффа.

prostotak
19.12.2008, 10:44
Нужно собственно сделать скрипт на прохождение квеста. Т.е. хочу отловить все пакеты на передвижение чара, диалоги (запрос-ответ) с НПЦ. Потому и нужно мне знать какие пакеты фильтровать из всего трафика как от сервера, так и от клиента, а то уж лог сильно пузатый получается. Хочу переделать скрипт от NLObP на рыбалку.

NLObP
19.12.2008, 12:02
Нужно собственно сделать скрипт на прохождение квеста. Т.е. хочу отловить все пакеты на передвижение чара, диалоги (запрос-ответ) с НПЦ. Потому и нужно мне знать какие пакеты фильтровать из всего трафика как от сервера, так и от клиента, а то уж лог сильно пузатый получается. Хочу переделать скрипт от NLObP на рыбалку.

Это ты должен сам определиться, что нужно/ненужно из пакетов показывать. Делаешь окно клиента поменьше, распологаешь рядом пакетхак и смотришь какие пакеты идут при действиях с клиентом. Ненужные пакеты, типа движение, социальные действия и т.п. пакеты фильтруй.

prostotak
19.12.2008, 17:39
NLObP откуда в твоем скрипте "Автоматизация движения по маршруту by NLObP для L2PacketHack v.3.1.8" берутся типы переменных TTimer, TObject? Где можно посмотреть описание этих типов и ф-ий, таких как msg.Lines.Add.

NLObP
19.12.2008, 18:52
NLObP откуда в твоем скрипте "Автоматизация движения по маршруту by NLObP для L2PacketHack v.3.1.8" берутся типы переменных TTimer, TObject?

Это стандартные Делфёвые типы и они изначально встроены в пакетхак. Вроде вместе с фастскриптом идут. Посмотри описание на фастскрипт.

Где можно посмотреть описание этих типов и ф-ий, таких как msg.Lines.Add.

Это также стандартное - добавить строку в мемо-поле.

PS: я брал из других скриптов-образцов и использовал, сам не заморачивался как и почему.

PanAm
22.12.2008, 13:59
prostotak,

prostotak
22.12.2008, 14:29
Спасибо с этим я разобрался....Всё таки попробую обойтись без TTimer в скрипте. И попутно вопрос: Отсылаю пакет на перемещение чара из точки А в точку Б. Подскажите как выполнить проверку что чар дошел до нужной точки, чтобы избежать повторного "долбления" сервера моими пакетами?

QaK
22.12.2008, 14:36
Есть формула путь = скорость * время, путь посчитай из координат начала и конца, скорость - в пакете ЮзерИнфо, время надо найти, вот через это время чар дойдет (теоретически) до цели + иногда бывает отставание еще надо посчитать, на единицу пути.

Xelat
22.12.2008, 14:39
Есть формула путь = скорость * время, путь посчитай из координат начала и конца, скорость - в пакете ЮзерИнфо, время надо найти, вот через это время чар дойдет (теоретически) до цели + иногда бывает отставание еще надо посчитать, на единицу пути.

Проверял я эту формулу... не верна она... Либо есть какие-то доп. модификаторы, либо хз...

QaK
22.12.2008, 17:10
хз, я проверял - работало, все равно доп. модификатор - вроде, величина линейно зависимая от данной формулы, хотя где как, опять же.

prqe
01.01.2009, 21:10
нужен скрипт на авто разбитие шмота на кри
или любая помощь в этом вопросе

QaK
03.01.2009, 21:37
нужен скрипт на авто разбитие шмота на кри
или любая помощь в этом вопросескрипт за тебя никто писать не будет,это во-первых, во-вторых: орпеделись какие хроники, какой сервер и какая помошь тебе нужна? Паскаль/дельфи знаешь? Что такое пакет знаешь?

Essential
07.01.2009, 15:55
QaK,
Вот смотри есть пакет
72 F8 95 15 40 01 00 00 00
Его структура:
Tип: 0x72 (RequestCrystallizeItem:)
Pазмер: 9+2

0002 d ObjectID: 1075156472 (0x401595F8)
0006 d Count: 1 (0x00000001)

Нужен скрипт, который бы лишь менял ObjrctID с разницей в "-1". Т.е. после кристализации вещи, ObjectID которой = 1075156472, кристализовалась следующая вещ, ObjectID которой =1075156471.
Вроде бы это не сложно, но моих знаний паскаля нехватило, ибо не так давно начал изучать...
Было бы вообще супер, если бы начальный ObjectID и конечный, вписывался бы вручную.

QaK
07.01.2009, 19:34
Нужен скрипт, который бы лишь менял ObjrctID с разницей в "-1". Т.е. после кристализации вещи, ObjectID которой = 1075156472, кристализовалась следующая вещ, ObjectID которой =1075156471.бред, obj ID для каждого предмета свой, и врятли буде разница в 1.

Добавлено через 1 минуту
тебе нужны пакеты InventoryInit и InvenrotyUpdate, оттуда выдираешь обджект ид нужных тебе вещей и пихаешь в пакет на кристализацию.

Essential
09.01.2009, 16:41
бред, obj ID для каждого предмета свой, и врятли буде разница в 1.

Может и похоже на бред, но obj id в данном случае это id вещи в инвертаре, и если пустой инвертарь постоянно набивать одними и теми же вещами (в моём случае ц-шные пушки), то obj id будет измется с постоянным алгоритмом = -1
Я проверил ;)
Я лишь просил помощи в составлении скрипта, который бы отправлял на сервер одни и те же пакеты, но с разными obj id, изменяющиеся с шагом в -1, где можно было бы заполнять вручную конечные значения obj id (т.е. первое и последнее).

QaK
09.01.2009, 19:51
obj id в данном случае это id вещи в инвертареObjectID - уникальный идентификатор вещи/перса/моба и т.д. на сервере, шанс, что в инвентаре окажется несколько, даже хотя бы 2 предмета, с Обдж ИД отличающимся на 1 очень сильно мала. Если просишь помоши в создании скрипта - выложи наработку с покажи где что не получается, с нуля за тебя никто ничего бесплато делатьне будет, ну или почти никто.

Xelat
10.01.2009, 01:53
QaK, Нет, он прав.
Когда ты при покупке помещаешь 20 шмоток в окно торговли, и жмёшь кнопку "Купить", им всем выдаются подряд идущие айдишники, и это логично, т.к. покупаются они все фактически одновременно. Просто он не хочет всё усложнять различными проверками, ему проще купить сразу всю пачку, и её обработать.