PDA

Просмотр полной версии : BuffBot


Amorality
29.07.2008, 05:44
Сложно ли написать программу , которая работала бы без клиента вот так:
1. Появляется окошко 200 на 200 с формой логина и пароля и кнопкой Вход
2. После нажатия кнопки вход открывается выбор сервера
3. Выбор персоонажа
4. Окошко 100 на 100 , где 3 картинки-кнопки , 1 отправляет пакет на данс Mystic другая Concentration 3я Siren..

Все , больше ничего не нужно ..

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

QaK
29.07.2008, 09:01
Так сложно ли написать такую программу? Может кто-то напишет что-то подобное и выложит исходники , просто хотелось бы покапаться в исходниках подобной проги и настроить под себя и понять как это будет работать , заранее спасибо за ответы ..ПРограмму написать можно, исходники врятли кто выложит, т.к. это уже полноценный бот получается, останется обработку пакетов присобачить и все. А теоретически можно и с ПНХ такую весч сделать, на благо реализована работа с дллками. Воть.

Amorality
29.07.2008, 16:26
Это точно не полноценный бот .. Всего 3 функции , он даже ничего видеть не будет , стоять на месте и отправлять 3 пакета , а разве ПНХ работает без клиента? Дело в том , что мне нужна программа потому что компьютер не тянет окна , если я для этого буду клиент запускать , то мне она нафиг не нужна будет ..

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

QaK
29.07.2008, 16:27
в 3.2.0 и выше есть процедурка отцепления от клиента.читай описание проги и смотри топ до будект бот.

Amorality
29.07.2008, 16:35
3.2.0 он не на Камаел разве 0_~

Добавлено через 1 минуту
Да и в какой программе вы смотрите сорцы? В дельфи 6 вообще не могу поглядеть сорцы xkor'a

QaK
29.07.2008, 16:35
3.2.0 он не на Камаел разве 0_~он не только на каму, он с поддержкой камы.

Добавлено через 16 секунд
Дельфа 2006

Amorality
29.07.2008, 16:44
Запустила программу , так и не нашла там новых функций(только галочка Kamael) .. В теме ссылка на инструкцию , но она битая , где новые функции искать то?

QaK
29.07.2008, 16:50
http://forum.coderx.ru/viewtopic.php?f=9&t=4

xkor
29.07.2008, 16:50
QaK, не путай человека, без клиента l2phx на сервак не зайдёт сам...

Amorality
29.07.2008, 16:51
http://forum.coderx.ru/viewtopic.php?f=9&t=4

Ты сам то посмотри куда ссылка даешь?!

Добавлено через 43 секунды
QaK, не путай человека, без клиента l2phx на сервак не зайдёт сам...

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

QaK
29.07.2008, 16:52
я не говорил, что можно без клиента, я сказалесть процедурка отцепления от клиента.

Добавлено через 38 секунд
Ты сам то посмотри куда ссылка даешь?!у меня все норм открывается, гайд.
З.Ы. Я всегда смотрю, куда ведуд ссылки, так что ненадо ляля - биби задавит:)

Amorality
29.07.2008, 16:55
я не говорил, что можно без клиента, я сказал

Добавлено через 38 секунд
у меня все норм открывается, гайд.
З.Ы. Я всегда смотрю, куда ведуд ссылки, так что ненадо ляля - биби задавит:)

Информация

Форум переехал на http://coderx.ru
---
У меня такое по ссылке выдает , нет там никакого гайда :( (ФФ3)

А чем отличается тобой от моего сказанного ? Объясни , я что-то запуталась

QaK
29.07.2008, 16:56
Что нужно знать для написания скриптов

xkor 14 авг 2007, 11:18
Прежде всего вам понадобится умение программирования на Object Pascal (или Delphi, что примерно тоже самое) и для манипуляций с пакетами естественно понадобится знать что они из себя представляют, о пакетах подробнее можно почитать в соответствующем разделе.

В этой теме я лиш приведу описания внутренних функций и переменных программы.

Описание FastScript: (это скриптовой движек использованный в программе)
http://forum.coderx.ru/uploads/fs.rtf

Доступные переменные:
pck (string) - текущий обрабатываемый пакет (без первых двух байт с размером)
FromClient (boolean) - пакет (pck) пришел от клиента (всёравно что not FromServer)
FromServer (boolean) - пакет (pck) пришел от сервера (всёравно что not FromClient)
buf (string) - буфер, используемый некоторыми функциями
ConnectName (string) - имя чара от или к которому идёт пакет (v. 3.1.3+)
ConnectID (integer) - номер соединения для которого выполняется скрипт

Доступные функции:
ShowTab и HideTab - для отображения/скрытия панели (UserTab), управлять которой можно из скрипта
Для рисования на ней контролов надо указывать UserTab в качестве родителя
SendToClient - отправляет клиенту содержимое переменной buf
SendToServer - отправляет серверу содержимое переменной buf
SendToClientEx(CharName: string) - отправляет клиенту с именем CharName содержимое переменной buf (v. 3.1.3+)
SendToServerEx(CharName: string) - отправляет серверу с именем CharName содержимое переменной buf (v. 3.1.3+)
(к пакету buf автоматически добавляются 2 байта длины)

NoFreeOnClientDisconnect - запрещает закрытие соединения при дисконекте клиента (v. 3.1.9+)
NoFreeOnServerDisconnect - запрещает закрытие соединения при дисконекте сервера (v. 3.1.9+)
YesFreeOnClientDisconnect - разрешает закрытие соединения при дисконекте клиента (v. 3.1.9+)
YesFreeOnServerDisconnect - разрешает закрытие соединения при дисконекте сервера (v. 3.1.9+)
(по умолчанию закрытия разрешены)
DisconnectServer - закрывает соединение с сервером (v. 3.2.0+)
DisconnectClient - закрывает соединение с клиентом (v. 3.2.0+)

ConnectNameByID(id:integer):string - возвращает имя соединения по его ID (v. 3.2.0+)
ConnectIDByName(name:string):integer - возвращает ID соединения по его имени (v. 3.2.0+)
SetName(Name:string) - устанавливает имя соединения (v. 3.2.0+)

ReadC(var index:integer):byte - читает из переменной pck байт
ReadH(var index:integer):word - читает из переменной pck число (2 байта) (v. 3.1.8+)
ReadD(var index:integer):integer - читает из переменной pck число (4 байта)
ReadF(var index:integer):double - читает из переменной pck число c плавающей запятой(8 байт) (v. 3.1.8+)
ReadS(var index:integer):string - читает из переменной pck строку (в пакете строка unicode нультерминированная, а результирующая строка обычная паскалевская)
Index - начальная позиция чтения, которая модифицируется функцией (сдвигается на число считанных байт)

HStr(h:string):string - преобразует строку в HEX-последовательность
К примеру, HStr('AA 00 BB 00 CC 00') вернёт цепочку байт #$AA#$00#$BB#$00#$CC#$00. Можно передавать строку как с пробелами, так и без них; регистр символов не имеет значения.

WriteC(v:byte; ind:integer=0) - пишет в переменную buf один байт
WriteH(v:word; ind:integer=0) - пишет в переменную buf число (2 байта) (v. 3.1.8+)
WriteD(v:integer; ind:integer=0) - пишет в переменную buf число (4 байта)
WriteF(v:double; ind:integer=0) - пишет в переменную buf число c плавающей запятой(8 байт) (v. 3.1.8+)
WriteS(v:string) - пишет в переменную buf строку (автоматический перевод в unicode)
В первых четырёх процедурах присутствует необязательный параметр ind. Если параметр не указан, то переменная buf дополняется байтом/числом, иначе модифицируется часть буфера.

LoadLibrary(LibName:String):Integer - подгружает к программе библиотеку LibName и возвращает указатель на неё (v. 3.1.8+)
FreeLibrary(LibHandle:Integer):Boolean - выгружает из памяти программы библиотеку (v. 3.1.8+)
CallFunction(LibHandle:integer;FunctionName:String ;Count:Integer;Params:array of variant):variant - вызывает функцию FunctionName из зарание подгруженной библиотеки с указателем LibHandle и параметрами перечисленными в Params (v. 3.1.8+)

Пример:
buf=HStr('AA BB CC DD EE');
Если вызвать функцию WriteD(10,1), то получим buf=[0A 00 00 00 EE].
А если просто WriteD(10), то [AA BB CC DD EE 0A 00 00 00].

Например скрипт:
Код: Выделить всё
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 садится.

Пример вызова функций из системных библиотек:
Код: Выделить всё
var
lib,Lib1:Integer;
Res:variant;
ar:array of variant;
begin
lib := loadLibrary('User32.dll');
lib1 := loadLibrary('GDI32.dll');
Res := CallFunction(lib,'MessageBoxW',4,[nil,'Text1','text2',0]);
Res := CallFunction(lib,'GetDC',1,[0]);
CallFunction(lib1,'LineTo',3,[Res,100,100]);
CallFunction(lib,'ReleaseDC',2,[0,Res]);
FreeLibrary(lib);
FreeLibrary(lib1);
end.


На вкладке Скрипты:
Процедура OnConnect(WithClient: Boolean) вызывается при установке соединения, флаг WithClient указывает с клиентом ли произошло соединение (v. 3.1.9+)
Процедура OnDisconnect(WithClient: Boolean) вызывается при потере соединения (v. 3.1.9+)
Процедура Init вызывается когда вы устанавливаете рядом со скриптом галочку.
Процедура Free вызывается когда вы убираете рядом со скриптом галочку.
Основное тело скрипта (между begin и end) вызывается каждый раз при получении пакета от сервера или клиента если скрипт отмечен галочкой.

На вкладке Дополнительно:
Основное тело скрипта (между begin и end) вызывается по нажатию кнопки Выполнить, и прекращается либо по нажатию Стоп, либо по окончанию работы скрипта.

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

Amorality
29.07.2008, 16:58
DisconnectServer - закрывает соединение с сервером (v. 3.2.0+)
DisconnectClient - закрывает соединение с клиентом (v. 3.2.0+)
Все равно не понимаю как эти 2 вещи работают?

Добавлено через 34 секунды
Точнее чем они мне могут помочь ?:)

xkor
29.07.2008, 17:07
Amorality, ничем, ибо чтоб их заюзать надо сначало чтобы клиент создал соединение...
короче чтоб самому таку прогу сделать тебе придётся изрядно попотеть и поучиться), хотя в гугле впринципе найдёш всё для этого нужное)

Amorality
29.07.2008, 17:13
Amorality, ничем, ибо чтоб их заюзать надо сначало чтобы клиент создал соединение...
короче чтоб самому таку прогу сделать тебе придётся изрядно попотеть и поучиться), хотя в гугле впринципе найдёш всё для этого нужное)
Ну а когда он создаст соединение , я войду в игру , то можно будет уже работать без клиента? Если так , то нафиг мне своя прога , вполне устроит и это :) Еще же можно будет скрипты юзать

QaK
29.07.2008, 17:13
Все равно не понимаю как эти 2 вещи работают?Ну смотри:
в процедуре Инит пишешь:
procedure init;
begin
NoFreeOnClientDisconnect:=true;
end;
воть, это мы сказали ПНХ , чтоб он при отключении клиента не разрывал соединение;
А теперь, по какому-нить событию отрубаем клиент, например там пришел пакет на выбор чара, например, и вызываем DisconnectClient;
ну или просто срубить клиент, воть, пнх продолжит принимать пакеты от сервака, и , если написан скрипт - то обрабатывать некоторые пакеты.Воть.

Amorality
29.07.2008, 17:27
QaK,
Более менее понятно , сейчас потестирую :)

Добавлено через 8 минут
if FromClient and (ConnectName='Amorality')
and (pck=HStr('1b 04 00 00 00')) then begin
DisconnectClient:=true;
end;

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

А на счет твоего скрипта разве после begin - end закрывается не точкой? Просто у тебя закрыто ";" или не имеет значение?

xkor
29.07.2008, 17:46
Amorality, неправильно у тя только то что DisconnectClient это процедура, так что ":=true" после неё лишние...

А на счет твоего скрипта разве после begin - end закрывается не точкой? Просто у тебя закрыто ";" или не имеет значение?точкой заканчивается только основной блок программы а блоки процедур и другие точкой с запятой...

PanAm
29.07.2008, 17:52
и не забудте реагировать на NetPing/

PanAm
29.07.2008, 18:03
Кстати, вот пример почти бот )

Amorality
29.07.2008, 19:23
procedure init;
begin
NoFreeOnClientDisconnect:=true;
end;
if FromClient and (ConnectName='Amorality')
and (pck=HStr('1b 04 00 00 00')) then begin
DisconnectClient;
end;

---
Значит такой код получается?

На счет Ему проги , если исходники то гляну , как скачаю дельфи 2006 , спасибо :)

xkor
29.07.2008, 19:40
Amorality, скорее такой:
procedure init;
begin
NoFreeOnClientDisconnect:=true;
end;

begin
if FromClient and (ConnectName='Amorality')
and (pck=HStr('1b 04 00 00 00')) then begin
DisconnectClient;
end;
end.

Amorality
29.07.2008, 21:11
Теперь другая проблема , как я говорила выше 3.2.0 работает у меня только под Камаель , в общем пытюась зайти на сервер La2.theabyss.ru , запускаю ПНХ , снимаю все галочки , кроме первой и второй , запускаю клиент , логинюсь чаром , разворачиваю ПНХ , в списке соединений везде пусто , на вкладке просмотр ни одного пакета нету :(

NLObP
29.07.2008, 22:52
Я от клиента отключаюсь так:

var
NetPing: string; // здесь запомним Нетпинг от клиента, будем сами его посылать
LogOutOk: boolean; // флаг показывающий, что мы отключили клиент
begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//************************************************** **
#$D3: begin // D3=NetPing:d(kID) на Нетпинг сервера шлем сохранённый пакет Нетпинга от клиента
msg.Lines.Add('S>Пакет NetPing #$D3');
if LogOutOk then begin
buf:=NetPing;
SendToServerEx(Name);
msg.Lines.Add('C>Пакет NetPing #$A8');
end;
end;
end;
end;
//************************************************** **
if (ConnectName=Name) and FromClient then begin
case pck[1] of
#$09: begin //C>09=LogoutRequest - выходим ручками из клиента
msg.Lines.Add('S>Пакет LogoutRequest #$09');
// вроде не надо тут их ставить?
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
pck:='';
// шлем s7E=LogOutOk, для отключения клиента
msg.Lines.Add('S>Пакет LogOutOk #$7E');
buf:=#$7E;
SendToClientEx(Name);
LogOutOk:=true;
end;
#$A8: begin // C>A8=NetPing:d(kID)d(PING)d(dta)
msg.Lines.Add('C>Пакет NetPing #$A8');
NetPing:=pck; // запомним его
pck:='';
end;
end;
end;
end.

Теперь другая проблема , как я говорила выше 3.2.0 работает у меня только под Камаель , в общем пытюась зайти на сервер La2.theabyss.ru , запускаю ПНХ , снимаю все галочки , кроме первой и второй , запускаю клиент , логинюсь чаром , разворачиваю ПНХ , в списке соединений везде пусто , на вкладке просмотр ни одного пакета нету :(

На TheAbyss x300 работает, только что проверил.

Добавлено через 29 минут
Кстати, вот пример почти бот )

Где вы такое берете? Ссылку плиз.

Amorality
29.07.2008, 23:04
Разобралась почему не работал 3.2.0 , попробовала прошлый скрипт , он не пашет , не признается часть :=true .. А вот последний скрипт похоже будет работать , чуть позже попробуем , спасибо :)

Добавлено через 11 минут
ПС в твоем скрипте вместо Name Надо подставлять ник? или оставить все как есть?

NLObP
29.07.2008, 23:10
Разобралась почему не работал 3.2.0 , попробовала прошлый скрипт , он не пашет , не признается часть :=true .. А вот последний скрипт похоже будет работать , чуть позже попробуем , спасибо :)

Добавлено через 11 минут
ПС в твоем скрипте вместо Name Надо подставлять ник? или оставить все как есть?

Это константа, её надо описать в начале программы
const
name='имя чара';

а можно сразу вписать имя чара, если скрипт небольшой.

Сразу предупрежу. Отключать клиент не безопастно. Делай на свой страх и риск. Клиент шлет много пакетов, которые надо будет за него посылать скриптом. В частности NetPing, ValidatePosition и т.п.

Amorality
29.07.2008, 23:13
msg.Lines.Add
ругается на это , конкретно на "Msg" :(

Не работает , что не так?

NLObP
29.07.2008, 23:17
ругается на это , конкретно на "Msg" :(

Не работает , что не так?

Убери эти строчки. Я взял этот кусок скрипта из своей рыбалки, там есть, куда выводить сообщения.

Amorality
30.07.2008, 01:38
Супер , отлично работает.. А что там еще кроме NetPing'a нужно посылать? можешь сказать? :) Просто боюсь чара забанят , жалко бд ..

Добавлено через 1 минуту
А вот еще вопрос , можно ли сделать так , чтобы от ника Amorality этот выгруженный клиент сразу принимал пати . а при команде в пати чат '-dance' танцевал 2 дансА?

NLObP
30.07.2008, 01:48
Супер , отлично работает.. А что там еще кроме NetPing'a нужно посылать? можешь сказать? :) Просто боюсь чара забанят , жалко бд ..

Если стоять, то вроде кроме NetPing'а ничего не надо, но это не 100%. В панели просмотр можно выяснить, что шлет клиент.

А вот еще вопрос , можно ли сделать так , чтобы от ника Amorality этот выгруженный клиент сразу принимал пати . а при команде в пати чат '-dance' танцевал 2 дансА?

Если я зык Паскаль знаешь, то всё можно сделать. Посмотри форум. По изучай скрипты. Много готовых решений можно позаимствовать.

Amorality
30.07.2008, 02:15
Ну впринципе он будет стоять , принимать пати , дансать .. впринципе на счет команды в пати чат есть идеи , а вот на счет авто приема пати в зависимости от ника вообще хз , знаю в волкере реализовано , но как , может приведешь пример?

PanAm
30.07.2008, 03:38
А вот еще вопрос , можно ли сделать так , чтобы от ника Amorality этот выгруженный клиент сразу принимал пати Примерно так
begin
if FromServer and (pck[1]=#$39) then //от сервера получен пакет $39 AskJoinParty
if ReadS(2) = 'Amorality' begin //проверяем от кого
pck :=''; //убиваем этот пакет
buf:=hstr('2A 01 00 00 00'); //Создаем пакет "принять пати"
SendToServer; //Отправляем его на сервер
end;
end.

Добавлено через 13 минут
ой, нет
В вашем случае, когда клиент уже выгружен, надо так
begin
if FromServer and (pck[1]=#$39) then begin //от сервера получен пакет $39 AskJoinParty
if ReadS(2) = 'Amorality' then //проверяем от кого
buf:=hstr('2A 01 00 00 00'); //Создаем пакет "принять пати"
else
buf:=hstr('2A 00 00 00 00'); //Создаем пакет "Отказать в пати"
pck :=''; //убиваем этот пакет
SendToServer; //Отправляем его на сервер
end;
end.
и кстати, тоже надо сделать с приемом трейда, и другими действиями, на которые клиент сам отвечает через определенный промежуток времени. Ибо консперация.:D

Amorality
30.07.2008, 04:58
PanAm,
Спасибо .. Только лучше наверно сделать так , чтобы БД никак не отвечал на запросы от других ников , а то слишком заметно , что бот .. Просто нужно убрать Else и строчку под ним? А хотя нет , клиент же выгружен , а можно поставить в Else так , чтобы через несколько секунд отвечал НЕТ , как клиент?

Добавлено через 28 минут
Вроде же так получается:
begin
if FromServer and (pck[1]=#$39) then begin //от сервера получен пакет $39 AskJoinParty
if ReadS(2) = 'Amorality' //проверяем от кого
buf:=hstr('2A 01 00 00 00'); //Создаем пакет "принять пати"
else
delay(5000)
buf:=hstr('2A 00 00 00 00'); //Создаем пакет "Отказать в пати"
pck :=''; //убиваем этот пакет
SendToServer; //Отправляем его на сервер
end;
end.

----
Это ведь будет задержка 5 секунд? Кто кстати знает сколько точно ждет клиент перед тем как ответить нет?

QaK
30.07.2008, 08:54
Amorality, посмотри, есть еще пакет ValidatePosition от клиента, поделай все действия, которые хочешь реализовать в боте и посмотри, когда шлется этот пакет, хотя не критично, но по логам мона спалиться.

Amorality
30.07.2008, 12:51
А где вы берете все эти пакеты , их ID , структуру и описание? Мне бы так было намного проще писать скрипты , самой ловить и расшифровывать надоело ..

PanAm
30.07.2008, 14:34
Для начала http://fursoffers.narod.ru/Packets.htm
А вообще я б посоветовал не выключать клиент, Проще сделать копию папки систем, например SystemBot, в ней можно сделать окно линейки поменьше 800х600 или еще меньше, поставить низкие детали, можно еще найти патчи на отключение текстур, и спокойно ботить, в 2++ окон. :)

Amorality
30.07.2008, 15:16
PanAm,
:) На висте с 512 мб боюсь даже так не получится , а я бы хотела открывать 5 окон с баферами :)

Добавлено через 8 минут
А как по той ссылке что ты дал определить ID пакета для использования скриптов?

PanAm
30.07.2008, 15:23
ID пакета- это его первый байт
так же можно (нужно) посмотреть Packets.ini в корне ПХ, там (почти) все пакеты, которые ПХ расшифровывет, а также хорошо иметь под рукой T2packets.ini из wpf саурона.
512 мб... а не проще еще хотяб 1 планку прикупить?

Amorality
30.07.2008, 17:07
Решила написать сама условие о сообщение в пати , помогите разобраться с пакетом , смотрю формат пакета say2:
Формат:
XX XX // Длина
4A // Тип
Дальше все ясно ..
Как указывать длину? И как использовать тип в скрипте?

Добавлено через 52 секунды
А след строка тоже не понятна:
XX XX XX XX // Object Id того чара, от кого это сообщение
Как определить Obj.Id чара?

Добавлено через 48 минут
Оказывается object.id чара всегда разный?! Тогда как написать постоянный скрипт на проверку сообщения от чара?

PanAm
30.07.2008, 17:28
4A=Say2:h(ObjectID)d(Type)s(From)s(Message)
ObjectID - Пропускаем
Type - можно пропустить
From - Ник написавшего, то что надо
Message - сообщение
Все строки передаются в формате UNICode, тоесть например "Amorality" будет - "41 00 6D 00 6F 00 72 00 61 00 6C 00 69 00 74 00 79 00" + "00 00"
ReadS() считывает эту строку уже в формате String "Amorality" = "41 6D 6F 72 61 6C 69 74 79"
Теперь попробуем написать скрипт
var
i:integer;
begin
In FromServer and (pck[1]=#$4A) then begin
i := 10; //Имя с 10 байта
if ReadS(i) = 'Amorality' then //Считываем, сравниваем и увеличиваем i на длину ника
if ReadS(i) = 'dence me plz' then //Считываем, сравниваем сообщение
....И понеслось
end;
end.
Вот примерно так
это не совсем рабочий пример
Например - написав сообщение, вы получите этот пакет в оба окна, надо вставлять еще проверку на соединение (ConnectName)

Amorality
30.07.2008, 18:09
Блин , сама хотела написать , ну спасибо :)) Допишу еще , конект нейм и тип пати и буду использовать еще раз спасибо :)

Добавлено через 13 минут
var
i:integer;
o:integer;
begin
If FromServer and (ConnectName='BDGirl') and (pck[1]=#$4A) then begin
i := 10; //Имя с 10 байта
if ReadS(i) = 'Amorality' then //Считываем, сравниваем и увеличиваем i на длину ника
if ReadS(i) = '-dance' then //Считываем, сравниваем сообщение
buf:=hstr('2F 11 01 00 00 00 00 00 00 00');
SendToServer;
end;
If FromServer and (ConnectName='BDGirl') and (pck[1]=#$4A) then begin
i:= 10; //Имя с 10 байта
o:=11; //ник вроде как 11 длинной
if ReadS(o) = 'Amorality2' then //Считываем, сравниваем и увеличиваем i на длину ника
if ReadS(o) = '-dance' then //Считываем, сравниваем сообщение
buf:=hstr('2F 11 01 00 00 00 00 00 00 00');
SendToServer;
end;
end.

---
Я немного видоизменила скрипт , верен ли он? Задача скрипта .. Бд с ником BDGirl танцует , если в чат Amorality или Amorality2 напишет -dance

PanAm
30.07.2008, 18:52
Не правильно ReadS(i) автоматом увеличивает i на длину строки
o:integer просто лишне.
длина "Amorality2" 10*2+2
тело внитри условия одинаково, лучше тогда так
var
Commandir : string;
.......
i := 10; //Имя с 10 байта
Commandir := ReadS(i); //Сохранили ник написавшего и увеличиваем i на длину ника
if (Commandir = 'Amorality') or (Commandir = 'Amorality2') then //сравниваем
if ReadS(i) = '-dence' then begin//Считываем, сравниваем сообщение
buf:=hstr('2F 11 01 00 00 00 00 00 00 00');
SendToServer;
end;
........


Добавлено через 4 минуты
Вот и начинается интересное :D
вы получили один танец на команду, теперь есть 2 пути -
1. В лоб размножить скрипт и давать отдельную команду на каждый танец.
2. Подумать как танцевать серию танцев
Для примера можно почитать тут
http://coderx.ru/showthread.php?t=14
и тут http://coderx.ru/showthread.php?t=397

Amorality
30.07.2008, 19:03
Вот и начинается интересное
вы получили один танец на команду, теперь есть 2 пути -
А так нельзя?
buf:=hstr('2F 11 01 00 00 00 00 00 00 00');
SendToServer;
buf:=hstr('2F 14 01 00 00 00 00 00 00 00');
SendToServer;
----

ПС А на счет варианта твоего последнего скрипта , будет ли правильно , что ты не описал переменную i в разделе Var?

xkor
30.07.2008, 19:06
А так нельзя?
buf:=hstr('2F 11 01 00 00 00 00 00 00 00');
SendToServer;
buf:=hstr('2F 14 01 00 00 00 00 00 00 00');
SendToServer;нет, сервер максимум два подряд идущих пакета на юз скил обработает и в результате выполнит тока первый и последний если будет больше двух...

ПС А на счет варианта твоего последнего скрипта , будет ли правильно , что ты не описал переменную i в разделе Var?а он там и не скрипт указал а тока новые или измененные части так что i естесно надо обьявлять)

Amorality
30.07.2008, 19:34
var
i,x : integer;
Commandir : string;
Bissy : Boolean;
begin
case x of
1: begin //Блок магического танца начался
buf:=hstr('2F 11 01 00 00 00 00 00 00 00'); //Dance Of Mystic
SendToServer;
inc(x);
Bissy:=true;
end;
2: begin
buf:=hstr('2F 14 01 00 00 00 00 00 00 00'); //Dance Of Concentration
SendToServer;
inc(x);
Bissy:=false;
end;
3: begin //Блок воинского танца начался
buf:=hstr('2F 0F 01 00 00 00 00 00 00 00'); //Dance Of Warrior
SendToServer;
inc(x);
Bissy:=true;
end;
4: begin
buf:=hstr('2F 13 01 00 00 00 00 00 00 00'); //Dance Of Fury
SendToServer;
inc(x);
Bissy:=true;
end;
5: begin
buf:=hstr('2F 12 01 00 00 00 00 00 00 00'); //Dance Of Fire
SendToServer;
inc(x);
Bissy:=false;
end;
end;
end.

begin
If FromServer and (pck[1]=#$4A) then begin
i := 10; //Имя с 10 байта
Commandir := ReadS(i); //Сохранили ник написавшего и увеличиваем i на длину ника
if (Commandir = 'Amorality') or (Commandir = 'Amorality2') then //сравниваем
if ReadS(i) = '-mdance' then begin //Считываем, сравниваем сообщение
if not Bissy then begin
x:=1; //Ссылка на блок с магическим дансом
end;
end;
end;
end;
end;

begin
If FromServer and (pck[1]=#$4A) then begin
i := 10; //Имя с 10 байта
Commandir := ReadS(i); //Сохранили ник написавшего и увеличиваем i на длину ника
if (Commandir = 'Amorality') or (Commandir = 'Amorality2') then //сравниваем
if ReadS(i) = '-wdance' then begin //Считываем, сравниваем сообщение
if not Bissy then begin
x:=3; //Ссылка на блок с воинским дансом
end;
end;
end;
end;
end;


Вот написала скрипт , его задача, если чар Amorality или Amorality2 пишет в чат -mdance , То BDGirl бафает 2 данса: Mystic и Concentration , а есле -wdance , то BDGirl бафает 3 данса : Fury,warrior,fire.

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

PanAm
30.07.2008, 21:57
да, к сожелению. все неверно...

Amorality
30.07.2008, 22:19
:( Совсем все? Ну ладно если это уже не поправить , то буду водить ботов макросами в пати чат , туда вроде нету ограничений :(

Добавлено через 5 минут
Хм , сунула скрипт в l2phx , ошибок нету , запускается , но попробовать на деле к сожалению не могу .. Может все таки его можно исправить?

PanAm
31.07.2008, 04:01
все можно исправить...
протестируйте
const
NickName = 'BDGirl'; // Ник сменить на ник БД

var
timer1 : TTimer;
i, x : integer;
Bissy: Boolean;
Commandir, Command : string;

procedure OnTimer; //Последовательность танцев
begin
case x of
1: begin
buf:=hstr('2F 11 01 00 00 00 00 00 00 00'); //Dance Of Mystic
SendToServerEx(NickName);
inc(x);
end;
2: begin
buf:=hstr('2F 14 01 00 00 00 00 00 00 00'); //Dance Of Concentration
SendToServerEx(NickName);
x:=0; //Последовательность сбрасываем
Bissy:=False; //БД свободен
timer1.enabled:=false; //таймер отключаем
end;
3: begin
buf:=hstr('2F 0F 01 00 00 00 00 00 00 00'); //Dance Of Warrior
SendToServerEx(NickName);
inc(x);
end;
4: begin
buf:=hstr('2F 13 01 00 00 00 00 00 00 00'); //Dance Of Fury
SendToServerEx(NickName);
inc(x);
end;
5: begin
buf:=hstr('2F 12 01 00 00 00 00 00 00 00'); //Dance Of Fire
SendToServerEx(NickName);
x:=0;
Bissy:=False;
timer1.enabled:=false;
end;
end;
end;

procedure Init;
begin
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=false;
timer1.interval:=2000; //интервал между танцами 2 сек
Bissy :=false;
x:=0;
end;

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

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer and (ConnectName=NickName) and (pck[1]=#$4A) then begin
i := 10; //Имя с 10 байта
Commandir := ReadS(i); //Сохранили ник написавшего и увеличиваем i на длину ника
Command := ReadS(i); //Сохранили комманду
if (Commandir = 'Amorality') or (Commandir = 'Amorality2') then //Проверяем что комманда от начальника
if not Bissy then begin //проверяем, что БД не занят
case Command of
'-mdance' : x :=1; //последовательность танцев 1-2
'-wdance' : x :=3; //последовательность танцев 3-4-5
end;
timer1.enabled:=true; //запускаем таймер
Bissy := true; //у БД теперь есть чем занятся
end; //not Bissy
end; //FromServer and (pck[1]=#$4A)
end.

Добавлено через 4 часа 30 минут
А вот еще немножко подумав...
ваш чар и бот находятся на одном компе, зачем палится и посылать команды в чат через сервер? чтоб админу было легче ботов вычислить?
Значит надо отлавливать не 4A пакет с сервера, а пакет 38 с клиента, обрабатывать его и удалять, чтоб на сервер он не шел...
и сного переписываем основной скрипт :D
begin
if FromClient and (pck[1]=#$38) then //say2 От клиента (боты не говорят)
if not Bissy then begin //проверяем, что БД не занят
case ReadS(2) of //Считываем команду
'-mdance' : begin
x :=1; //последовательность танцев 1-2
pck :=''; //не палимся
timer1.enabled:=true; //запускаем таймер
Bissy := true; //у БД теперь есть чем занятся
end;
'-wdance' : begin
x :=3; //последовательность танцев 3-4-5
pck :=''; //не палимся
timer1.enabled:=true; //запускаем таймер
Bissy := true; //у БД теперь есть чем занятся
end;
end; //case
end; //not Bissy
end.
вот примерно так
заодно убираем в начале описание Commandir, Command - теперь они не нужны.
тока я все это не тестю. т. к. не особо ботовод, и БД у мну нет :(

Amorality
02.08.2008, 02:08
Абис заработал , ПНХ тоже , удалось потестить , все отлично работает..
Собираюсь еще написать скрипт для ЕЕшки , но вот вопрос , как заставить чара с ником EvasS взять ассист(проще говорю взять тот же таргет) на моего мейна (Amorality) ?
Порылась в описаниях к пакетам нашла несколько:
A6=MyTargetSelected
29=TargetSelected

Потом решила выделить чара и поймать пакет , поймался пакет Action , Решила я его разобрать , но ник там вроде не указывается , хотя можно попробовать (я думаю) реализовать через ObjectID , состав:
04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ActionID)

Других идей нет , может кто-нибуть подскажет , спасибо заранее :)

Добавлено через 3 минуты
А вот еще что , когда используешь Assist и ловишь пакеты , то от сервера приходит пакет Attack , клиент ничего не посылает , а если у этого чара кто-то выделен и ассист удался , то клиент посылает Action

Добавлено через 28 минут
Ага , все ясно , разобралась с пакетом (04) Action .. Вижу только этот способ реализации того , что я хочу , просто нужно будет запомнить ID человека , выделяемого мейном и составить пакет Action для бота , даже уже знаю как реализовать , хоть 1 скрипт сама напишу :)

PanAm
02.08.2008, 02:13
Вроде все верно ;)
http://coderx.ru/showthread.php?t=14
тут полно скриптов. с примером, как брать в таргет. хотя и реализация. на мой взгляд и не очень, но то первые скрипты :)

Amorality
02.08.2008, 02:34
//Пробный скрипт на ассист by Amorality.
//Поправьте, если что не так!
//Когда Leader берет таргет на кого-то, окно тоже возмет таргет
//по ассисту.

const
Leader='ник'; //Указать имя лидера(мейна)
Okno='ник'; //Указать ник того, кто будет брать ассист на лидера.

var
TarID:String; //Запоминаем сюда ID лидера.

begin
If FromClient and (pck[1]=#$04) and (ConnectName=Leader) then begin
TarID:= pck[6]+pck[7]+pck[8]+pck[9]; //Записываем ID лидера, если он выделил кого-то
If ConnectName=Okno then begin
buf:=hstr('04') + TarID;
SendToServerEX(Okno);
end;
end;
end.

Поправьте плз , если что не так , еще не тестила.

PanAm
02.08.2008, 04:24
нужно знать еще координаты бота
это просто, если бот в клиенте
var
MyXpos, MyYpos, MyZpos : integer;
Begin
if (ConnectName=BotName) and FromClient and pck[1]=#$48 then begin
//ValidatePosition пакет от клиента с кординатами бота
MyXpos:=ReadD(2); //получаю координату х бота
MyYpos:=ReadD(6); //получаю координату у бота
MyZpos:=ReadD(10); //получаю координату z бота
end;
end.без клиента это будет видимо сложнее...

Добавлено через 6 минут
и ID лидира наверно не нужно, отслежмвайте что приходит от лидера, Сразу берите ID таргета + координаты бота от бота + действие (0)

Добавлено через 55 минут
вот заготовка, как я бы это делал
const
Leader ='ник'; //Указать имя лидера(мейна)
Bot ='ник'; //Указать ник того, кто будет брать ассист на лидера.

var
TargetID : integer;
BotX, BotY, BotZ : integer;

begin
//Отлавливаем с сервира пакеты лидера
if (ConnectName=Leader) and FromServer then
case pck[1] of
#$A6 : //MyTargetSelected
begin
TargetID := ReadD(2);
buf :=#$04; //Начинаем формировать пакет 04=Action
WriteD(TargetID); //Вписываем TargetID
WriteD(BotX); //координату х бота
WriteD(BotY); //координату у бота
WriteD(BotZ); //координату z бота
WriteC(0); //и само действие "Взять в таргет"
SendToServerEx(Bot); //отправляем запрос
end
end; //case

//Отлавливаем с клиента пакеты бота
if (ConnectName=Bot) and FromClient then
case pck[1] of
#$48 : //ValidatePosition
begin
BotX :=ReadD(2); //получаю координату х бота
BotY :=ReadD(6); //получаю координату у бота
BotZ :=ReadD(10); //получаю координату z бота
end;
end; //case

////Отлавливаем с сервира пакеты бота
if (ConnectName=Bot) and FromServer then
case pck[1] of
#$A6 : //MyTargetSelected
begin
//бот взял таргет лидера
end;
end; //case
end.
тут пока бот просто берет ассист, и дальше ждет пока таргет сменится, если требуется какое либо действие, то надо подумать вот над чем - боту приходит пакет. что он взял таргет, и можно сразу что-либо делать, например -если бот танк, он может сразу кинуть хейт, или бот должен ждать следующего действия лидера...

Добавлено через 1 минуту
кстати, модераторам довно следует перенести эту тему в скриптинг ;)

Amorality
02.08.2008, 16:51
Странно .. Когда я делала это через полсылку пакета , то я выделяля кого-то лидером , потом брала первые 5 байт из Action (ID + ObjectID) и посылала их от БД , он брал таргет , почему тогда координаты нужны в скрипте? :)

Добавлено через 37 минут
Кстати ни твой ни мой скрипт не работают .. :(

Добавлено через 8 минут
Хм .. да но ValidatePosition шлет вроде только клиент ..А у меня же он выгружен , где бы брать координаты твинка , когда клиент отключен

Добавлено через 4 часа 19 минут
Теперь проверила твой скрипт , не отключая клиент , он работает , но не совсем так , как хотелось .. Мне нужно , чтобы он работал почти как в клиенте , вот я нажала на себя , он меня выделил , еще раз нажала , на себя , если я уже выделена , то он прицепился ко мне , а так он только выделяет а не цепляется , а по идее , если 2 пакета на выделение подряд на 1 и тот же ID , То должно целпяться

PanAm
02.08.2008, 17:43
Смотрите пакеты
у меня на выделение себя дважды получается так
04=Action - запрашиваю выделить себя
A6=MyTargetSelected - ответ, таргет взят
04=Action - запрашиваю еще раз выделить себя
25=ActionFail - Название говорит само за себя

Amorality
02.08.2008, 18:39
Это отлов пакетов или чтО?
Я когда посылаю одинаковый пакет (тоесть в 2 строки) через ПНХ твинк сразу цепляется , не понимаю все равно как это через скрипт сделать :(

NLObP
03.08.2008, 00:29
Переместил тему в скриттинг.

Rackot
03.08.2008, 12:19
Кстати, вот пример почти бот )

А можно поподробнее? а то комменты в сорцах почти отсутствуют:)

PanAm
03.08.2008, 15:10
А можно поподробнее? а то комменты в сорцах почти отсутствуютне мое я только разместил :D

Добавлено через 4 минуты
кстати, вот еще один исходничек
http://panam.jino.ru/files/BotSRC.rar

Amorality
05.08.2008, 16:34
Тут еще такой вопрос , какой пакет обрабатывает инвентарь? Мне нужно вытаскивать кол-во квест итемов при отключенном клиенте.

PanAm
05.08.2008, 18:13
В этой теме есть неплохой скрипт
http://coderx.ru/showthread.php?t=15
конкретно тут
http://coderx.ru/showpost.php?p=56&postcount=5
Вас должны интересовать итемы с itemType2=3.

NLObP
05.08.2008, 23:24
Тут еще такой вопрос , какой пакет обрабатывает инвентарь? Мне нужно вытаскивать кол-во квест итемов при отключенном клиенте.

Пакеты от сервера с данными инвентаря:
1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)d(Augment)d(--)
27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)

Arhangel
17.03.2009, 14:34
Добрый день,хотел использовать скрипт на авто-пати,который есть в этом топике:
begin
if FromServer and (pck[1]=#$39) then begin //от сервера получен пакет $39 AskJoinParty
if ReadS(2) = 'Ник чара' //проверяем от кого
buf:=hstr('2A 01 00 00 00'); //Создаем пакет "принять пати"
else
delay(5000)
buf:=hstr('2A 00 00 00 00'); //Создаем пакет "Отказать в пати"
pck :=''; //убиваем этот пакет
SendToServer; //Отправляем его на сервер
end;
end.

Но замучала ошибка List index out of bounds (8) и соответсвенно скрипт не пашет,как от нее избавиться?

QaK
17.03.2009, 14:37
Arhangel, какие хроники? delay нафиг убери, зачем pck:='' делаешь?

Arhangel
17.03.2009, 14:40
Хроники Камаель СТ1.5

begin
if FromServer and (pck[1]=#$39) then //от сервера получен пакет $39 AskJoinParty
if ReadS(2) = 'ApxaHrel' then begin //проверяем от кого
buf:=hstr('2A 01 00 00 00'); //Создаем пакет "принять пати"
SendToServer; //Отправляем его на сервер
end;
end.

Результат тот же

QaK
17.03.2009, 14:52
Arhangel, с какого перепугу 2A - это ответ на прием? 43 поставь вместо 2А и будет тебе счастье, а может и не будет, в дальнейшем - кури матчасть.

Arhangel
17.03.2009, 14:58
Да с 2а ошибся,точно 43 должно быть...но дела это особо не меняет...ошибка всеравно лезет...может я скрипт не туда вставляю...

QaK
17.03.2009, 15:03
Arhangel, встречный вопрос: куда ты скрипт вставляешь, сколько окон у тебя одновременно запущено?если несколько тогда условие править надо
If Fromserver and (ConnectName='имяперса');
и SendToServerEx('имяперса');

Arhangel
17.03.2009, 15:13
Точно,вставил
If Fromserver and (ConnectName='имяперса');
и SendToServerEx('имяперса');
И ошибка исчезла...скрипт заработал,большое спасибо за помощь.

QaK
17.03.2009, 15:53
Arhangel, you wellcome =)

Arhangel
17.03.2009, 16:26
И еще один такой вопрос,не пойму почему в этом скрипте:

const MainChar = 'ApxaHrel';
BD = 'BD';

var Timer1:TTimer;
actions:array[1..6] of string;
nm:integer;

procedure Init;
begin
nm:=1;

Timer1:=TTimer.Create(nil);
Timer1.OnTimer:=@OnTimer1;
Timer1.enabled:=false;
Timer1.interval:=1000; //задержка 1 сек;

actions[1]:='2A 01 00 00 00';
actions[2]:='2F 13 01 00 00 00 00 00 00 00 ';
actions[3]:='2F 12 01 00 00 00 00 00 00 00 ';
actions[4]:='2F 0F 01 00 00 00 00 00 00 00 ';
actions[5]:='2B';
actions[6]:='04 B2 F9 20 48 24 CB 00 00 45 2B FF FF A6 F3 FF FF 00';
end;

procedure Timer1.OnTimer(Sender:Tobject);
begin if nm>6 then Timer1.Enabled:=false
else begin buff:=Hstr(actions[nm]);
SendToServerEx(BD);
inc(nm);
end;
end;

procedure Free;
begin
Timer1.Free;
end;

begin
if Pck='' then exit;
if FromClient and (ConnectName=MainChar) //посылаю с 1-го окна пакет "SocialActionYes"
and (pck=HStr('1B 06 00 00 00')) then begin
pck:='';
buf:=HStr(actions[nm]);
SendToServerEx(BD);
Timer1.Enabled:=true;
end;
end.


Ругается на то,что выделенно?

QaK
17.03.2009, 16:30
procedure Timer1.OnTimer1(Sender:Tobject);должно быть

Arhangel
17.03.2009, 16:33
Уже пробывал,никак=)

QaK
17.03.2009, 16:34
Arhangel, значит обзов процедуру как-нибудь нейтрально? типа blablabla =)

Amorality
17.03.2009, 16:50
QaK,
Разве можно так делать? Это же реакция на событие OnTimer..

Добавлено через 6 минут
Ошибка кстати связана с пропуском ";", вроде везде все верно стоит, может ПНХ тупит?

QaK
17.03.2009, 16:52
Ладно, я туплю =) Arhangel, просто оставь OnTimer без Timer1.

Amorality
17.03.2009, 16:55
QaK,
Так тоже не выйдет.. Тыж хендл указываешь в Timer1.Ontimer, знач его обяз. надо использовать в процедуре.. Хотя может что-то путаю :(

Arhangel
17.03.2009, 17:01
Да,видимо Timer1.Ontimer надо использовать,но так ругается,а при OnTimer без Timer1 пишет Event handler must be a procedure.

QaK
17.03.2009, 17:01
Amorality, в фаст-скрипте - нет.

Amorality
17.03.2009, 17:02
Да,видимо Timer1.Ontimer надо использовать,т.к. при OnTimer без Timer1 пишет Event handler must be a procedure.
Попробуй изменить @OnTimer1 на @OnTimer .. Хотя не уверена :)

QaK
17.03.2009, 17:04
Timer1:=TTimer.Create(nil);
Timer1.OnTimer:=@OnTimer1;
Timer1.enabled:=false;
Timer1.interval:=1000; //задержка 1 сек;

жирным выделено то, как должна называтья процедурка.

Можно хоть Scukonax назвать.

Arhangel
17.03.2009, 17:06
Попробуй изменить @OnTimer1 на @OnTimer .. Хотя не уверена :)

Да что ты будешь делать=) Всеравно ругается, ";" требует=)

Timer1:=TTimer.Create(nil);
Timer1.OnTimer:=@OnTimer1;
Timer1.enabled:=false;
Timer1.interval:=1000; //задержка 1 сек;

жирным выделено то, как должна называтья процедурка.

Можно хоть Scukonax назвать.

Попробывал просто тупо изменить имя:

Timer1:=TTimer.Create(nil);
Timer1.OnTimer:=@proba;
Timer1.enabled:=false;
Timer1.interval:=1000; //задержка 1 сек;

actions[1]:='43 01 00 00 00';
actions[2]:='39 13 01 00 00 00 00 00 00 00 ';
actions[3]:='39 12 01 00 00 00 00 00 00 00 ';
actions[4]:='39 0F 01 00 00 00 00 00 00 00 ';
actions[5]:='44';
actions[6]:='1F 55 EF 30 48 AF 3D 02 00 75 64 00 00 24 F8 FF FF 00';
end;

procedure proba(Sender:Tobject);
begin if nm>6 then Timer1.Enabled:=false
else begin buf:=Hstr(actions[nm]);
SendToServerEx(BD);
inc(nm);



Ошибки исчезли,но про работе скрипта,когда в игре нажимаешь соц.действ. вылетает ошибка Access violation at address 0056EE30 in module 'l2pbx.exe'. Read of address 00000000.

Amorality
17.03.2009, 17:24
Arhangel,
buff может опискА? переменная buf называется

Добавлено через 1 минуту
А, это я смотрела на старый вариант.. тут все ок

Добавлено через 4 минуты
Ты в переменную BD ник бд верно занес?

Arhangel
17.03.2009, 17:27
Arhangel,
buff может опискА? переменная buf называется

Добавлено через 1 минуту
А, это я смотрела на старый вариант.. тут все ок

Добавлено через 4 минуты
Ты в переменную BD ник бд верно занес?

И begin if nm>6 then Timer1.Enabled:=false
Может лучше begin if nm>=6 then Timer1.Enabled:=false

Ммм,исправил скрипт,что бы пати брал без соц действия,все заработало=) Теперь проблема в том,что из пати выходит слишком быстро и делает только 2 данса=)

Amorality
17.03.2009, 17:28
Arhangel, Timer1.interval:=1000;

ПОставь не 1000, а 2500..

Arhangel
17.03.2009, 17:29
Arhangel, Timer1.interval:=1000;

ПОставь не 1000, а 2500..

Спасибо,уже сам дошел=)
Все вроде работает,всем спасибо за экстренную помощь=)

fragus
17.03.2009, 19:13
А какая реакция будет на пакет GGAuth от сервера?

QaK
17.03.2009, 20:19
fragus, возьми и проверь =)

Arhangel
17.03.2009, 20:57
Весь день сегогодня ковыряюсь с этими скриптами...=)
Есть два рабочих скрипта:
1-ый на БД
const MainChar = 'ApxaHrel';
BD = 'Dancerr';

var Timer2:TTimer;
actions2:array[1..6] of string;
nmm:integer;

procedure Init;
begin
nmm:=1;

Timer2:=TTimer.Create(nil);
Timer2.OnTimer:=@proba;
Timer2.enabled:=false;
Timer2.interval:=2300; //задержка 1 сек;

actions2[1]:='56 00 00 00 00 00 00 00 00 00 ';
actions2[2]:='39 13 01 00 00 00 00 00 00 00 ';
actions2[3]:='39 12 01 00 00 00 00 00 00 00 ';
actions2[4]:='39 0F 01 00 00 00 00 00 00 00 ';
actions2[5]:='44';
actions2[6]:='56 00 00 00 00 00 00 00 00 00 ';
end;

procedure proba(Sender:Tobject);
begin if nmm>6 then Timer2.Enabled:=false;
if nmm>6 then nmm:=1
else begin buf:=Hstr(actions2[nmm]);
SendToServerEx(BD);
nmm:=nmm+1;
end;
end;

procedure Free;
begin
Timer2.Free;
end;

begin

if FromServer and (pck[1]=#$39) and (ConnectName=BD) then begin//посылаю с 1-го окна пакет "SocialActionYes"
buf:=hstr('43 01 00 00 00'); //Создаем пакет "принять пати"
SendToServerEx(BD);
pck:='';
Timer2.Enabled:=true;
end;
end.

2-ой на СВСа:
const MainChar = 'ApxaHrel';
SWS = 'KaHapeuka';

var Timer1:TTimer;
actions:array[1..6] of string;
nm:integer;

procedure Init;
begin
nm:=1;

Timer1:=TTimer.Create(nil);
Timer1.OnTimer:=@proba;
Timer1.enabled:=false;
Timer1.interval:=2000; //задержка 1 сек;

actions[1]:='56 00 00 00 00 00 00 00 00 00 ';
actions[2]:='39 0C 01 00 00 00 00 00 00 00 ';
actions[3]:='39 0D 01 00 00 00 00 00 00 00 ';
actions[4]:='39 0B 01 00 00 00 00 00 00 00 ';
actions[5]:='44';
actions[6]:='56 00 00 00 00 00 00 00 00 00 ';
end;

procedure proba(Sender:Tobject);
begin if nm>6 then Timer1.enabled:=false;
if nm>6 then nm:=1
else begin buf:=Hstr(actions[nm]);
SendToServerEx(SWS);
nm:=nm+1;
end;
end;

procedure Free;
begin
Timer1.Free;
end;

begin

if FromServer and (pck[1]=#$39) and (ConnectName=SWS) then begin//посылаю с 1-го окна пакет "SocialActionYes"
buf:=hstr('43 01 00 00 00'); //Создаем пакет "принять пати"
SendToServerEx(SWS);
pck:='';
Timer1.Enabled:=true;
end;
pck:='';
end.

По отдельность работают без проблем...но вот если активировать их 2 одновременно,то один скрипт работает нормально,а второй выдает ошибку Access violation at address 00550C21 in module 'l2pbx.exe'. Read of address 00000000.

fragus
17.03.2009, 22:35
fragus, возьми и проверь =)

Я имею ввиду что ответит пакетхак с отключенным клиентом на GGAuth? Если ответа не будет - дисконнект ;)

Amorality
17.03.2009, 23:10
Arhangel,
Первый у тебя это сразу 2 скрипта и на бд и на свс в 1.. я думаю в этом и проблема.. Чтобы использовать вместе, создай 2 отд. скрипта и поставь галочки на обоих.

Не знаю как в пнх с многопоточностью, поэтому еще у бд и свса поставить реакции на разные действия.

QaK
18.03.2009, 09:02
Я имею ввиду что ответит пакетхак с отключенным клиентом на GGAuth?пакетхак сам ничего никогда не делает, это вам не терминатор - восстание машин, чего напрограмируешь, так и будет отвечать.

DashKAaa
18.03.2009, 09:39
Весь день сегогодня ковыряюсь с этими скриптами...=)
Есть два рабочих скрипта:
1-ый на БД
const MainChar = 'ApxaHrel';
BD = 'Dancerr';

var Timer2:TTimer;
actions2:array[1..6] of string;
nmm:integer;

procedure Init;
begin
nmm:=1;

Timer2:=TTimer.Create(nil);
Timer2.OnTimer:=@proba;
Timer2.enabled:=false;
Timer2.interval:=2300; //задержка 1 сек;

actions2[1]:='56 00 00 00 00 00 00 00 00 00 ';
actions2[2]:='39 13 01 00 00 00 00 00 00 00 ';
actions2[3]:='39 12 01 00 00 00 00 00 00 00 ';
actions2[4]:='39 0F 01 00 00 00 00 00 00 00 ';
actions2[5]:='44';
actions2[6]:='56 00 00 00 00 00 00 00 00 00 ';
end;

procedure proba(Sender:Tobject);
begin if nmm>6 then Timer2.Enabled:=false;
if nmm>6 then nmm:=1
else begin buf:=Hstr(actions2[nmm]);
SendToServerEx(BD);
nmm:=nmm+1;
end;
end;

procedure Free;
begin
Timer2.Free;
end;

begin

if FromServer and (pck[1]=#$39) and (ConnectName=BD) then begin//посылаю с 1-го окна пакет "SocialActionYes"
buf:=hstr('43 01 00 00 00'); //Создаем пакет "принять пати"
SendToServerEx(BD);
pck:='';
Timer2.Enabled:=true;
end;
end.

2-ой на СВСа:
const MainChar = 'ApxaHrel';
SWS = 'KaHapeuka';

var Timer1:TTimer;
actions:array[1..6] of string;
nm:integer;

procedure Init;
begin
nm:=1;

Timer1:=TTimer.Create(nil);
Timer1.OnTimer:=@proba;
Timer1.enabled:=false;
Timer1.interval:=2000; //задержка 1 сек;

actions[1]:='56 00 00 00 00 00 00 00 00 00 ';
actions[2]:='39 0C 01 00 00 00 00 00 00 00 ';
actions[3]:='39 0D 01 00 00 00 00 00 00 00 ';
actions[4]:='39 0B 01 00 00 00 00 00 00 00 ';
actions[5]:='44';
actions[6]:='56 00 00 00 00 00 00 00 00 00 ';
end;

procedure proba(Sender:Tobject);
begin if nm>6 then Timer1.enabled:=false;
if nm>6 then nm:=1
else begin buf:=Hstr(actions[nm]);
SendToServerEx(SWS);
nm:=nm+1;
end;
end;

procedure Free;
begin
Timer1.Free;
end;

begin

if FromServer and (pck[1]=#$39) and (ConnectName=SWS) then begin//посылаю с 1-го окна пакет "SocialActionYes"
buf:=hstr('43 01 00 00 00'); //Создаем пакет "принять пати"
SendToServerEx(SWS);
pck:='';
Timer1.Enabled:=true;
end;
pck:='';
end.

По отдельность работают без проблем...но вот если активировать их 2 одновременно,то один скрипт работает нормально,а второй выдает ошибку Access violation at address 00550C21 in module 'l2pbx.exe'. Read of address 00000000.

хммм...
пользуюсь немножко другими скриптами, из раздела да будет БОТ! (переделал скрипт по поводу буффа ота варка)
т.е у меня и кидает пати ему, дансит и выходит, ну и так круглые суточки...

Не идеально но всеже...
А твой скрипт я как понимаю берем в пати он танцует и усе?

fragus
18.03.2009, 15:13
пакетхак сам ничего никогда не делает, это вам не терминатор - восстание машин, чего напрограмируешь, так и будет отвечать.

Конечно. Ктото знает как сделать этот пакет?

QaK
18.03.2009, 15:20
fragus, возьми ПНХ и клиент и посмотри, что отвечает клиент на тот пакетик.
З.Ы. Вкладка просмотр, надавить батон "Запоминать пакеты".

fragus
18.03.2009, 22:57
fragus, возьми ПНХ и клиент и посмотри, что отвечает клиент на тот пакетик.
З.Ы. Вкладка просмотр, надавить батон "Запоминать пакеты".

Это я и сам понимаю, всетаки свой снифер для грации на С++ написал :))

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

PanAm
20.03.2009, 15:39
очень многие хотят знать этот алгоритм ))
а чтоб незапалится, при приходе пакета авторизации ГГ имитируй отваливание клиента :p