Просмотр полной версии : отправка пакетов таймером
ребят подскажите что не так? или я слепая. но при включении скарипта "пнх" выдает ошибку.
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:
Какую ошибку пишет? Поправил твой скрипт.
http://s39.radikal.ru/i083/0812/e2/1e921cd0fd23t.jpg (http://radikal.ru/F/s39.radikal.ru/i083/0812/e2/1e921cd0fd23.jpg.html)
хз, попробуй скачай последнюю версию ПНХ. ненаю из-за чего, честно.
QaK,
скачивала с вашего форума.
выше этой версии не нашла, если не сложно напишите ссылку, пожалйуста, потмоу что искать в яндексе боюсь, до этого был "пнх" но весь вирусный, заразил мне всю винду, пришлось переустанавливать.
терь доверяю тока вашему форуму
Добавлено через 11 минут
все пасиба, нашла )
Добавлено через 6 минут
скачала последнию версию .....68
ошибки не выдает, но пакеты не отправляет ( буду опять голову ломать)
ребят подскажите что не так? или я слепая. но при включении скарипта "пнх" выдает ошибку.
У меня на правильность скрипта ругается. Точка с запятой не поставлена в нужном месте и где не нужно стоит.
PS: Синтаксическую ошибку исправил. Сам скрипт нет возможности проверить. Визуально скрипт правильный. Может время повторения побольше поставить?
PPS: Что за пакеты клиента 19 и D0?
NLObP,
пасиб большое, помогло
Может какая то разница в протоколах и прочего, но у меня пакеты на соц действие ДА и Нет такие
1B 06 00 00 00 //да
1B 05 00 00 00 //нет
Поискал пакет $#19 в пакетсах, нашел в T1.
Переделал под свои пакеты (packetsc5) все нормально работает.
Видимо надо другой packets...
ПС. Кстати попробуйте создать у себя такой скрипт только спамом антидотов и при count=2 SocialWaiting. Запустил за гнома выглядит ппц классно. Собрать несколько персов и будет настоящее диско...
NLObP,
19- открыть точку
D0- поместить оружие в окно заточки
сервер Грация парт 2 Ява
И что, этот скрипт позволяет точить? А как же id предметов/скроллов?
ну вот и выяснили) Воспользуйся готовыми функциями для пользования инвентарем... там в коментах все понятно расписано, дкмаю сможешь сделать
http://coderx.ru/showthread.php?t=15
ребят подскажите что не так? или я слепая. но при включении скарипта "пнх" выдает ошибку.
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.
Витя,
cудя по тем действияс как ты выложил скрипт, не работает остановка (
надо юзать Инвентарь
попробуйте в таймере использовать SendToServerExt и отпровлять по 1-2 пакета.
Витя,
cудя по тем действияс как ты выложил скрипт, не работает остановка (
надо юзать Инвентарь
вот тут
if FromServer and (ConnectName=Name) and (pck = HStr('/Сюда пакет с нужной заточкой пухи!(это важно нада пральный пакет)/')) then begin
timer.enabled:=false;
надо поставить какойто пакет где показан уровень заточки чтоб скрипт при получении такого пакета останавливал таймер, но пробывал вставить изменены пакет InventoryUpdate но все ровно игнорирует
Для РУОФФ попробуйте правленный скрипт из первого сообщения
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(?)
почемуто он не останавливаеться
почемуто он не останавливаеться
Потому, что не правильные данные используете или условия для остановки.
PS:
1. Проверяйте данные с помощью сообщений в чат и смотрите какими данными скрипт оперирует.
2. правьте скрипт и снова смотрите п.1.
3. и всё это до тех пор, пока не заработает правильно.
NLObP,
дкло в том что в системнон чате не пишится уровень заточки после точения, там пшится лишь "выберети предмет для заточки"
поэтому думаю с систмным чатом пролетаем, я уже думала про это (
В чате будет писаться то, что ты пожелаешь.
Писать типа такого в чат
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));
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot