PDA

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


Lelee
12.12.2008, 14:07
ребят подскажите что не так? или я слепая. но при включении скарипта "пнх" выдает ошибку.

const
count:integer; //- счетчик
procedure Init; //вызывается при включении скрипта
begin
count:=1;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1; //
timer1.enabled:=false; //
timer1.interval:=1000;
end;

procedure Free; //вызывается при выключении скрипта
begin
timer1.Free;
end;
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
SendToClientEx(Name);
end;

procedure OnTimer1(Sender: TObject);
begin
if count=1 then
begin
buf:=hstr('19 2A 42 30 10 00 00 00 00');
count:=2;
end
else begin
buf:=hstr('D0 51');
count:=1;
end;
SendToServerEx(Namе);
end;
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
//чоц дейтсвие "да" для начало спама пакетов
if FromClient and (ConnectName=Name) and (pck=HStr('34 06 00 00 00')) then begin
Say('Старт!!!');
timer1.enabled:=true;
end;
// соц действие "нет" для отключения спама
if FromClient and (ConnectName=Name) and (pck=HStr('34 05 00 00 00')) then begin
Say('Стопï!!!');
timer1.enabled:=false;
end;
end.
то есть после того как выдал ошибку скрипт не отключается, при нажатии на чоц действие "да" он пишит в пм что старт все нормально, а пакеты отпралять не хочет. :eek:

QaK
12.12.2008, 14:14
Какую ошибку пишет? Поправил твой скрипт.

Lelee
12.12.2008, 14:19
http://s39.radikal.ru/i083/0812/e2/1e921cd0fd23t.jpg (http://radikal.ru/F/s39.radikal.ru/i083/0812/e2/1e921cd0fd23.jpg.html)

QaK
12.12.2008, 14:22
хз, попробуй скачай последнюю версию ПНХ. ненаю из-за чего, честно.

Lelee
12.12.2008, 14:42
QaK,
скачивала с вашего форума.
выше этой версии не нашла, если не сложно напишите ссылку, пожалйуста, потмоу что искать в яндексе боюсь, до этого был "пнх" но весь вирусный, заразил мне всю винду, пришлось переустанавливать.
терь доверяю тока вашему форуму

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

Добавлено через 6 минут
скачала последнию версию .....68
ошибки не выдает, но пакеты не отправляет ( буду опять голову ломать)

NLObP
12.12.2008, 14:52
ребят подскажите что не так? или я слепая. но при включении скарипта "пнх" выдает ошибку.

У меня на правильность скрипта ругается. Точка с запятой не поставлена в нужном месте и где не нужно стоит.

PS: Синтаксическую ошибку исправил. Сам скрипт нет возможности проверить. Визуально скрипт правильный. Может время повторения побольше поставить?

PPS: Что за пакеты клиента 19 и D0?

Lelee
12.12.2008, 14:57
NLObP,
пасиб большое, помогло

kamil
12.12.2008, 15:09
Может какая то разница в протоколах и прочего, но у меня пакеты на соц действие ДА и Нет такие
1B 06 00 00 00 //да
1B 05 00 00 00 //нет

Поискал пакет $#19 в пакетсах, нашел в T1.
Переделал под свои пакеты (packetsc5) все нормально работает.
Видимо надо другой packets...

ПС. Кстати попробуйте создать у себя такой скрипт только спамом антидотов и при count=2 SocialWaiting. Запустил за гнома выглядит ппц классно. Собрать несколько персов и будет настоящее диско...

Lelee
12.12.2008, 15:17
NLObP,
19- открыть точку
D0- поместить оружие в окно заточки

сервер Грация парт 2 Ява

NLObP
12.12.2008, 18:03
И что, этот скрипт позволяет точить? А как же id предметов/скроллов?

kamil
12.12.2008, 20:16
ну вот и выяснили) Воспользуйся готовыми функциями для пользования инвентарем... там в коментах все понятно расписано, дкмаю сможешь сделать
http://coderx.ru/showthread.php?t=15

Витя
13.12.2008, 09:59
ребят подскажите что не так? или я слепая. но при включении скарипта "пнх" выдает ошибку.

const
Name='lLelee'; // свой ник
var
timer1: TTimer;
count:integer; //- счетчик
procedure Init; //вызывается при включении скрипта
begin
count:=1;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1; //
timer1.enabled:=false; //
timer1.interval:=1000;
end;

procedure Free; //вызывается при выключении скрипта
begin
timer1.Free;
end;
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;

procedure OnTimer1(Sender: TObject);
begin
if count=1 then
begin
buf:=hstr('19 2A 42 30 10 00 00 00 00');
count:=2;
end
else begin
buf:=hstr('D0 4F 00 AC F4 30 10');
count:=1;
end;
SendToServerEx(Name);
end;
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
//чоц дейтсвие "да" для начало спама пакетов
if FromClient and (ConnectName=Name) and (pck=HStr('34 06 00 00 00')) then begin
Say('Старт!!!');
timer1.enabled:=true;
end;
// соц действие "нет" для отключения спама
if FromClient and (ConnectName=Name) and (pck=HStr('34 05 00 00 00')) then begin
Say('Стопï!!!');
timer1.enabled:=false;
end;
end.
то есть после того как выдал ошибку скрипт не отключается, при нажатии на чоц действие "да" он пишит в пм что старт все нормально, а пакеты отпралять не хочет. :eek:
у меня получилось посылать пакеты после социального действия, но проблема в том что надо изменить какой то пакет чтобы точка останавливалась, вот сам скрипт если найдете способ остановки заточки поделитесь
const
Name='/свое имя/';
var
timer:TTimer;
procedure Init;
begin
timer:=TTimer.Create(nil);
timer.interval:=700;
timer.OnTimer:=@fireTimer;
timer.enabled:=false;
end;
procedure Free;
begin
timer.Free;
end;
procedure fireTimer(Sender: TObject);
begin
buf:=hstr('/пакет открытия точки/');
SendToServer;
buf:=hstr('/пакет вещи в слот/');
SendToServer;
buf:=hstr('/пакет завершения точки (для ускорения процеса)/');// необезательно
SendToServer;
end;
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
//социальное действие yes для начало точки
if FromClient and (ConnectName=Name) and (pck=HStr('5A 06 00 00 00')) then begin


timer.enabled:=true;
end;
//************************************************** **************************
//социальное действие no для начало точки
if FromClient and (ConnectName=Name) and (pck=HStr('5A 05 00 00 00 ')) then begin

timer.enabled:=false;
end;

if FromServer and (ConnectName=Name) and (pck = HStr('/Сюда пакет с нужной заточкой пухи!(это важно нада пральный пакет)/')) then begin
timer.enabled:=false;
end;
end.

Lelee
13.12.2008, 13:25
Витя,
cудя по тем действияс как ты выложил скрипт, не работает остановка (
надо юзать Инвентарь

PanAm
13.12.2008, 19:51
попробуйте в таймере использовать SendToServerExt и отпровлять по 1-2 пакета.

Витя
13.12.2008, 22:53
Витя,
cудя по тем действияс как ты выложил скрипт, не работает остановка (
надо юзать Инвентарь

вот тут
if FromServer and (ConnectName=Name) and (pck = HStr('/Сюда пакет с нужной заточкой пухи!(это важно нада пральный пакет)/')) then begin
timer.enabled:=false;

надо поставить какойто пакет где показан уровень заточки чтоб скрипт при получении такого пакета останавливал таймер, но пробывал вставить изменены пакет InventoryUpdate но все ровно игнорирует

NLObP
13.12.2008, 23:51
Для РУОФФ попробуйте правленный скрипт из первого сообщения
const
Name='lLelee'; // свой ник
MaxEnchLvl=5;
var
Inventory: array[0..79,0..9] of integer;
timer1: TTimer;
count:integer; //- счетчик
procedure Init; //вызывается при включении скрипта
var
i :integer;
begin
count:=1;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=false;
timer1.interval:=1000;
end;

procedure InventoryCreate;
var
i,k: integer;
begin
for i:=0 to 79 do
if (i<ReadH(4)) then begin
Inventory[i,1]:=ReadD(i*76+8); // ObjectId
Inventory[i,2]:=ReadD(i*76+12); // ItemID
Inventory[i,3]:=ReadD(i*76+20); // count
Inventory[i,4]:=ReadH(i*76+24); // itemType2
Inventory[i,5]:=ReadH(i*76+26); // CustType1
Inventory[i,6]:=ReadH(i*76+28); // isEquipped
Inventory[i,7]:=ReadD(i*76+30); // BodyPart
Inventory[i,8]:=ReadH(i*76+34); // EnchantLevel
Inventory[i,9]:=ReadH(i*76+36); // CustType2
end else
for k:=0 to 9 do Inventory[i,k]:=0; // забиваем нулями
end;

procedure InventoryUpdate;
var
i,j,k: integer;
begin
for j:=0 to (ReadH(2)-1) do begin
case pck[j*78+4] of //1add2mod3remove
#$01: k:=0; // add item, запишет на пустую ячейку
#$02: k:=ReadD(j*78+8); // mod item
#$03: begin // remove item, обнулит ячейки удаленного предмета
k:=ReadD(j*78+8);
for i:=0 to 79 do
if (Inventory[i,0]=k) then begin
for k:=0 to 9 do Inventory[i,k]:=0;
exit;
end;
end;
end;
for i:=0 to 79 do
if (Inventory[i,1]=k) then begin
Inventory[i,0]:=ReadH(j*78+6); // itemType1
Inventory[i,1]:=ReadD(j*78+8); // ObjectId
Inventory[i,2]:=ReadD(j*78+12); // ItemID
Inventory[i,3]:=ReadD(j*78+20); // count
Inventory[i,4]:=ReadH(j*78+24); // itemType2
Inventory[i,5]:=ReadH(j*78+26); // CustType1
Inventory[i,6]:=ReadH(j*78+28); // isEquipped
Inventory[i,7]:=ReadD(j*78+30); // BodyPart
Inventory[i,8]:=ReadH(j*78+34); // EnchantLevel
Inventory[i,9]:=ReadH(j*78+36); // CustType2
break;
end;
end;
end;

function GetInv(obj,up,down:integer): integer; // up и down не проверяются
var // 0-itemType1, 1-ObjectId, 2-ItemID, 3-count, 4-itemType2, 5-CustType1, 6-isEquipped, 7-BodyPart, 8-EnchantLevel, 9-CustType2
i: integer;
begin
for i:=0 to 79 do
if (Inventory[i,up]=obj) then begin
Result:=Inventory[i,down];
end;
Result:=-1;
end;

procedure Free; //вызывается при выключении скрипта
begin
timer1.Free;
end;
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;

procedure OnTimer1(Sender: TObject);
begin
if count=1 then
begin
buf:=hstr('19 2A 42 30 10 00 00 00 00');
count:=2;
end else begin
buf:=hstr('D0 4F 00 AC F4 30 10');
count:=1;
end;
SendToServerEx(Name);
end;

begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
if FromServer then case pck[1] of
#$11: InventoryCreate;
#$21: InventoryUpdate;
end;
// 0-itemType1, 1-ObjectId, 2-ItemID, 3-count, 4-itemType2, 5-CustType1, 6-isEquipped, 7-BodyPart, 8-EnchantLevel, 9-CustType2
if GetInv(271643820,1,8)=MaxEnchLvl then // использовала object id
begin
Say('Заточилось!!!');
timer1.enabled:=false;
end;
//************************************************** **************************
//чоц дейтсвие "да" для начало спама пакетов
if FromClient and (ConnectName=Name) and (pck=HStr('34 06 00 00 00')) then begin
Say('Старт!!!');
timer1.enabled:=true;
end;
// соц действие "нет" для отключения спама
if FromClient and (ConnectName=Name) and (pck=HStr('34 05 00 00 00')) then begin
Say('Стоп!!!');
timer1.enabled:=false;
end;
end.

В packetst1.ini замените 11 и 21 пакет от сервера на вот эти:
11=ItemList:h(ShowWindow)h(ListSize:Loop.01.0022)h (ItemType1)d(ObjectID)d(ItemID:Get.Func01)d(Locati onSlot)d(Count)h(ItemType2)h(CustomType1)h(isEquip ped)d(BodyPart)h(EnchantLevel)h(CustType2)d(Augmen tationID)d(Mana)d(AttackAttrElement)d(AttackAttrEl ementVal)d(DefAttrFire)d(DefAttrWater)d(DefAttrWin d)d(DefAttrEarth)d(DefAttrHoly)d(DefAttrUnholy)d(? )
21=InventoryUpdate:h(Count:Loop.1.0023)h(1add2mod3 remove)h(ItemType1)d(ObjectID)d(ItemID:Get.Func01) d(Location)d(Count)h(ItemType2)h(CustomType1)h(isE quipped)d(BodyPart)h(EnchantLevel)h(CustType2)d(Au gmentationBonus)d(Mana)d(AttackAttrElement)d(Attac kAttrElementVal)d(DefAttrFire)d(DefAttrWater)d(Def AttrWind)d(DefAttrEarth)d(DefAttrHoly)d(DefAttrUnh oly)d(?)

Витя
15.12.2008, 22:31
почемуто он не останавливаеться

NLObP
15.12.2008, 23:00
почемуто он не останавливаеться

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

PS:
1. Проверяйте данные с помощью сообщений в чат и смотрите какими данными скрипт оперирует.
2. правьте скрипт и снова смотрите п.1.
3. и всё это до тех пор, пока не заработает правильно.

Lelee
16.12.2008, 04:02
NLObP,
дкло в том что в системнон чате не пишится уровень заточки после точения, там пшится лишь "выберети предмет для заточки"
поэтому думаю с систмным чатом пролетаем, я уже думала про это (

NLObP
16.12.2008, 04:46
В чате будет писаться то, что ты пожелаешь.
Писать типа такого в чат
Say('i='+inttostr(i)+' ItemBase[1,i]='+IntToStr(ItemBase[1,i])+' ItemBase[2,i]='+IntToStr(ItemBase[2,i])+' ItemBase[3,i]='+IntToStr(ItemBase[3,i]));
или в лог пакетхака с помощью
sendMSG('i='+inttostr(i));