PDA

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


wimax
08.01.2011, 15:56
Вот короче скрипт который при получения пакета запускает таймер01 и таймер03 который по окончанию запускает таймер02 который
в свою очередь начинает спам пакетом каждые 0.1 в секу после спамит до окончания времени таймера03 когда interval в нем офф то он
отрубает таймер02 и себя.

суть проблемы хули не пашыт?)))

var
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;

procedure Init; //первый таймер активирует второй
begin
Timer01:=TTimer.Create(nil); //выделяем памать и т.п.
Timer01.OnTimer:=@OnTimer01; //привязываем процедуру к событию
Timer01.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer01.interval:=29000; //29000 интервал(в милисекундах) как часто таймер срабатывает
Timer02:=TTimer.Create(nil); //выделяем памать и т.п.
Timer02.OnTimer:=@OnTimer02; //привязываем процедуру к событию
Timer02.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer02.interval:=10; //30000интервал(в милисекундах) как часто таймер срабатывает
Timer03:=TTimer.Create(nil); //выделяем памать и т.п.
Timer03.OnTimer:=@OnTimer03; //привязываем процедуру к событию
Timer03.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer03.interval:=31000; //310000интервал(в милисекундах) как часто таймер срабатывает
end;

procedure OnTimer01(Sender: TObject);
begin
Timer01.enabled:=False;
Timer02.enabled:=True;
end;

procedure OnTimer02(Sender: TObject);
begin
pck:='';
buf:=HStr('C6 BF 07 00 00 01 00 00 00 03 00 00 00');
SendToServer;
end;

procedure OnTimer03(Sender: TObject);
begin
Timer03.enabled:=False;
Timer02.enabled:=False;
end;

begin
IF FromServer and (pck[1]=#$4A) and (ReadS(12)=('CTF: Старт через 5 мин. для уровней 76-85.') then
begin
Timer01.enabled:=True;
Timer03.enabled:=True;
end;
end.

dyh9l
08.01.2011, 16:20
IF FromServer and (pck[1]=#$4A) and (ReadS(12)=('CTF: Старт через 5 мин. для уровней 76-85.') then
Я один не вижу смысл этой скобки?
еще добавь procedure Free; где бы было освобождение памяти у 3 таймеров, и еще попробуй сделать SendToServerEx

J-Fobos
09.01.2011, 02:24
3 таймера, это ж ппц :)

supernewbie
09.01.2011, 04:50
скрипт явно ахренителен

wimax
10.01.2011, 17:05
/при получения пакета таймеры1,3,4 врубаются
/после того как таймер 1 офф сам он выключается, и врубает таймер2
/таймер 2 начинает спамить пока таймер 3 его не вырубит
/как тока таймер 4 включается сразу офаетса
отправление на сервер пакет на проверку локацыии если приходит пакет
что находится тамто то делает что нибудь.

Помогите доделать objid итема а то чот не хрена не получается и ищо
как можна зделоть чтоб пакет отпровлялся не на 1 ник а на которые я напишу
const
name='fghfgh';
name1='gdfgdfg'
name2='asdasd'
name3=name+name2+name3
SendToServerEx(name3);
так будет похать?


SHOWTOGROUPS="Местный"]
Const
ScrollID=7134;

var
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;
Timer04: TTimer;

procedure Init; //первый таймер активирует второй
begin
Timer01:=TTimer.Create(nil); //выделяем памать и т.п.
Timer01.OnTimer:=@OnTimer01; //привязываем процедуру к событию
Timer01.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer01.interval:=27000; //27000 интервал(в милисекундах) как часто таймер срабатывает
Timer02:=TTimer.Create(nil); //выделяем памать и т.п.
Timer02.OnTimer:=@OnTimer02; //привязываем процедуру к событию
Timer02.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer02.interval:=10; //10интервал(в милисекундах) как часто таймер срабатывает
Timer03:=TTimer.Create(nil); //выделяем памать и т.п.
Timer03.OnTimer:=@OnTimer03; //привязываем процедуру к событию
Timer03.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer03.interval:=32000; //32000интервал(в милисекундах) как часто таймер срабатывает
Timer04:=TTimer.Create(nil); //выделяем памать и т.п.
Timer04.OnTimer:=@OnTimer04; //привязываем процедуру к событию
Timer04.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer04.interval:=90000; //31000интервал(в милисекундах) как часто таймер срабатывает
end;

procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
Timer04.free;
end;


procedure CreateItemBase;
var j,ItmID,ObjID,Scroll:integer;
begin
ObjID:=ReadD(j);
ItmID:=ReadD(j);
case ItmID of
ScrollID:
begin
Scroll:=ObjID;
end;
end;
end;

procedure UpdateItemBase;
var j,ObjID,ItmID,Scroll:integer;
begin
ObjID:=ReadD(j);
ItmID:=ReadD(j);
case ItmID of
ScrollID: begin
Scroll:=ObjID;
end;
end;
end;

procedure OnTimer01(Sender: TObject);
begin
Timer01.enabled:=False;
Timer02.enabled:=True;
end;

procedure OnTimer02(Sender: TObject);
begin
pck:='';
buf:=HStr('C6 BF 07 00 00 01 00 00 00 03 00 00 00');
SendToServer;
end;

procedure OnTimer03(Sender: TObject);
begin
Timer03.enabled:=False;
Timer02.enabled:=False;
end;

var
Scroll:integer;

procedure OnTimer04(Sender: TObject);
begin
Timer04.enabled:=False;
begin
pck:='';
buf:=HStr('B3 00 00 00 00');
SendToServer;
end;
IF FromServer and (pck=HStr('62 9C 03 00 00') then
pck:='';
buf:=hstr('19');
WriteD(Scroll);
SendToServer;
end;
begin
IF FromServer and (pck[1]=#$4A) and (ReadS(12)='CTF: Старт через 5 мин. для уровней 76-85.') then
begin
Timer01.enabled:=True;
Timer03.enabled:=True;
Timer04.enabled:=True;
end;
end.

[/SHOWTOGROUPS]

Breadfan
10.01.2011, 20:36
зачем городить миллион таймеров, если можно использовать один, по необходимости меняя Timer.interval ?

wimax
10.01.2011, 20:45
можно не спорю но так быстрей дошло как написать лутше, потскажы как objid узнать а то там чота не так я епу чо.....
и хотя нет нельзя надо имено 4 таймера

Breadfan
10.01.2011, 20:47
1. еще как можно
2. модули разбирающие итемлист и итемапдейт - есть в соседних темах.

J-Fobos
10.01.2011, 20:50
wimax, 4 таймера, я плакаю
Напишите чего хотите добиться, а я выдам алгоритм, может все решается гораздо проще :)

wimax
10.01.2011, 23:01
При получении пакета (pck[1]=#$4A) and (ReadS(12)='CTF: Старт через 5 мин. для уровней 76-85.') ждать 4 мин 40 секунд начинать спамить пакетом
('C6 BF 07 00 00 01 00 00 00 03 00 00 00'); каждую 0.1секунду в течении 30 секунд через 15 минут делоть проверку где мы находимся ('B3 00 00 00 00');
команда /loc смотрим если мы в теретории адены (pck=HStr('62 9C 03 00 00') тогда юзае скрол тп в руну(иногда на евенте проста не портует) в руну потомучто с колизея обычный скрол не катит а писать чтоб обегал дополнительный геморой .... вот щас 1 проблема ето узнать как работает узнавание ObjID

J-Fobos
10.01.2011, 23:32
Зачем делать привязку к "CTF: Старт через 5 мин. для уровней 76-85."? Просто сделайте ответ "да" на запрос диалогового окна участия эвента.

Зачем проверять локацию? Просто при приходе пакета на тп чара подождать заданное время и заюзать сое.

Как узнать ObjID можете посмотреть в скрипте автозаточки NLObp.

wimax
11.01.2011, 00:09
да тут пролемка выходит такая шняга как пинг есть вот смотри народу на евент зарегатса хочет многа все с киликерами ботами и т.д а я получетса если спамю я регаюсь быстрей даже до прихода собщения согласны ли вы на регу
а проверка локацыии ет для економии на сое)))

Добавлено через 2 минуты
да смотрел я все ети проверки вот чтота наклюкал

procedure CreateItemBase;
var j,ItmID,ObjID,Scroll:integer;
begin
ObjID:=ReadD(j);
ItmID:=ReadD(j);
case ItmID of
ScrollID:
begin
Scroll:=ObjID;
end;
end;
end;

procedure UpdateItemBase;
var j,ObjID,ItmID,Scroll:integer;
begin
ObjID:=ReadD(j);
ItmID:=ReadD(j);
case ItmID of
ScrollID: begin
Scroll:=ObjID;
end;
end;
end;

но к сожылению не пашыт(

NLObP
11.01.2011, 00:17
но к сожылению не пашыт

И не будет пахать. Ты внимательно смотрел эти процедуры?

wimax
11.01.2011, 00:52
так если не пашыт значет плохо смотрел я проста вобще не допераю как оно работает у тебя проста не по itemid идет а на общии тоесть все что есть в инвентаре выводитса в бокс а я етого не могу раздуплить.... толи вобще тупым стал толи хз, бошка не соображает вообще как оно работает если можыш обьясни )

Breadfan
11.01.2011, 01:16
1) В таком случае можно бросить-поднять нужное сое и считать его оид - чтоб не воевать со сканом всего инвентаря
2) остальное вполне можно вырезать из стародавнего скрипта на сдачу манора - там есть и таймер, и привязка на событие (в том случае это сообщение о старте олимпиады, но это условие легко переделать)

wimax
11.01.2011, 01:48
1) В таком случае можно бросить-поднять нужное сое и считать его оид - чтоб не воевать со сканом всего инвентаря
2) остальное вполне можно вырезать из стародавнего скрипта на сдачу манора - там есть и таймер, и привязка на событие (в том случае это сообщение о старте олимпиады, но это условие легко переделать)

1-сое в руну не падает обычным сое толку тп нету ибо ты в колизеие варьянт отваливаетса
2-ет все уже написано осталось запара с objid всем в падлу выложыть скрипт на 1 итем чтоб тока вписать itemid и все?))

//Breadfan: при чем тут впадлу\невпадлу - скрипты такие - давно выложены, причем - скрипт на 1 и на 10 итемов - практически одинаковы - в обоих случаях листается весь инвентарь, ты предлагаешь еще тут наплодить дублей? Не хочешь так - делай через итемапдейт - вариантов - море чтоб этот оид выяснить. Не выбрасывается? А просто скинуть в вх - религия запретила? Тебе ж при этом все равно придет оид предмета, число которого изменяется.
21=InventoryUpdate:h(Count:Loop.1.0024)h(UpdateTyp e:01-add,02-modify,03-remove)d(ObjectID)d(ItemID:Get.Func01)d(LocationSl ot)q(Quantity)h(It emType2)h(CustomType1)h(Equipped)d(BodyPart)h(Ench antLevel )h(CustType2)d(AugmentID:Get.AugmentID)d(Mana)h(At tackElement)h(AttackElementPower)h(FreyaUnknown)h( FireDefElementPower)h(WaterDefElementPower)h(Win dDefElementPower)h(EarthDefElementPower)h(HolyDefE lementPower)h(Unh olyDefElementPower)d(RemainingTime)d(FreyaUnknown)

dyh9l
11.01.2011, 09:16
wimax, вот так я себе узнавал ObjectID банки маны c помощью ее ID (728), мб поможет.., сразу говорю, пакеты с с4, так что не надейся с копипастить :)
const
name = '*' ;
MPlimit = 50;
var
Invertory:array[1..80,1..2] of integer;
i:word;
MP:integer;

procedure Init;
begin
buf:=#$0F;
SendToServerEx(name);
end;

procedure Free;
begin

end;

procedure MPpotion;
begin
for i:=1 to 80 do
begin
Invertory[i,1]:=0;
Invertory[i,2]:=0;
end;
for i:=1 to 80 do
begin
Invertory[i,1]:=ReadD(i*28+8);
Invertory[i,2]:=ReadD(i*28+12);
if Invertory[i,2]=728 then MP:=Invertory[i,1];
end;

end;

procedure MPUse;
begin
buf:=#$14;
WriteD(MP);
WriteD(0);
SendToServerEx(name);
end;

procedure MPcheck;
begin
if (ReadD(6)=2) and (ReadD(10)=11) and (ReadD(14)<ReadD(22)/100*MPlimit) then MPUse;
end;

begin
if FromServer then
case pck[1] of
#$1B: MPpotion;
#$0E: MPcheck;
end;
end.

wimax
11.01.2011, 12:51
вот спасибо можна ищо скинуть пакет updateinvetory от ит я кажысь допер расположения байтов разные и их общие количество щас будем что та думать доперать как говаритса с таймерами было попроще =)))

supernewbie
11.01.2011, 12:53
я один не понимаю о чём он говорит?

dyh9l
11.01.2011, 12:55
Эм., а нах те этот пакет, ты оид сое из инвертаря считать сможешь

wimax
11.01.2011, 13:26
begin
for i:=1 to 80 do //количество слотов в инвентаре? как я понемаю
Invertory[i,1]:=0; // objid
Invertory[i,2]:=0; // itemid
begin
for i:=1 to 80 do //количество слотов в инвентаре? как я понемаю
Invertory[i,1]:=ReadD(i*28+8); // ето не очень понемаю количество слотов умножаетса на 28+8 либо ето байты тогда почему *28+8? и как ето будет для фреии+ 12 ето номер байта itemid а 28 ет что?
Invertory[i,2]:=ReadD(i*28+12); ето не очень понемаю количество слотов умножаетса на 28+8 либо ето байты тогда почему *28+12? и как ето будет для фреии +12 ето номер байта objid а 28 ет что?
if Invertory[i,2]=728 then MP:=Invertory[i,1]; // если id... тогда objid будет такойта
end;

dyh9l
11.01.2011, 13:47
я если чесно нечерта тебя не разобрал, но 28 это размер блока в байтах) что там как будет для фреи я даже понятия не имею)
i - ячейка
28 - кол-во байтов в блоке
8/12 - под 8 байтом в первом блоке идет ObjectID, а под 12 байтом в первом блоке идет ItemID вот от этого я все и умножал
т.е у 5 ячейки ты умножаешь 5*28+8 = ObjectID вещи в 5 ячейке, 5*28+12 = ItemID вещи в 5 ячейке

supernewbie
11.01.2011, 13:48
нам нужен переводчик, расшифровать что он говорит еще реально, но объяснить 100% не получится)
PS для фреи - 68

wimax
11.01.2011, 15:18
0B72 d ObjectID: 279046416 (0x10A1E910)
0B76 d ItemID: Свиток Телепорта: Руна ID:7134 (0x1BDE) (0x00001BDE)
0B7A d LocationSlot: 0 (0x00000000)
0B7E q Amount: 88
0B86 h ItemType2: 5 (0x0005)
0B88 h CustomType1: 0 (0x0000)
0B8A h isEquipped: 0 (0x0000)
0B8C d BodyPart: 0 (0x00000000)
0B90 h EnchantLevel: 0 (0x0000)
0B92 h CustType2: 0 (0x0000)
0B94 d AugmentID: 0 (0x00000000)
0B98 d Mana: -1 (0xFFFFFFFF)
0B9C h AttackElement: 64537 (0xFC19)
0B9E h AttackElementPower: 65535 (0xFFFF)
0BA0 h FreyaUnknown: 65534 (0xFFFE)
0BA2 h FireDefElementPower: 0 (0x0000)
0BA4 h WaterDefElementPower: 0 (0x0000)
0BA6 h WindDefElementPower: 0 (0x0000)
0BA8 h EarthDefElementPower: 0 (0x0000)
0BAA h Hol yDefElementPower: 0 (0x0000)
0BAC h UnholyDefElementPower: 0 (0x0000)
0BAE d RemainingTime: 0 (0x00000000)
0BB2 d FreyaUnknown: 0 (0x00000000)

походу в етом проблема пакет читается не тока как ид а название+ид

dyh9l
11.01.2011, 15:20
как сказал бы
supernewbie, *facepalm* . Название твое вобще в инишнике хранится ты хоть на х*й его поменяй и оно итем с ИД 7134 будет писать что это х*й..., нету в пакете название предмета...

wimax
11.01.2011, 15:29
цук тупанул не подумал что читается с items.ini епт( значет руки крюки решить не как (

перед етим отправка запроса itemlist

IF FromServer and (pck=HStr('11')) then
begin
for i:=1 to 100 do
begin
Invertory[i,1]:=0; //itemid
Invertory[i,2]:=0; //objid
end;
for i:=1 to 100 do
begin
Invertory[i,1]:=ReadD((i+1)*68+8);
Invertory[i,2]:=ReadD((i+1)*68+12);
if Invertory[i,2]=7134 then scroll:=Invertory[i,1];
end;

end;

вот так будет работать?)

dyh9l
11.01.2011, 15:37
ты осознаешь что у тебя первая ячейка не сосканится?

Добавлено через 5 минут
циклить с 0-ля!!1

wimax
11.01.2011, 15:47
та толку серавно цук юзает итем с objid=0

supernewbie
11.01.2011, 15:50
я нихера не понял, включи мозг и объясни что должен делать скрипт

человеческим языком, можешь какой-нибудь транслитер\переводчик юзать чтоли

wimax
11.01.2011, 15:58
Короче часть скрипта которая у меня не пашыт такова
После окончания таймера4 делать проверку локацыии(если мы в локацыии адены) то юзать itemid=7134 скрол телепорта в город вот и все а блин я не могу написать так чтобы узнавался objid

supernewbie
11.01.2011, 16:04
щас выложу рабочий на фрее скрипт скана инвентаря
PS
мой друг недоволен твоей орфографией - http://imglink.ru/pictures/29-09-10/0ca6a257b1a7675a7bf2309aa126bfb1.jpg

dyh9l
11.01.2011, 16:06
ты кста хоть инвертарь открываешь?)

supernewbie
11.01.2011, 16:40
короче как-то так
const
Name='';
offset=68;

var
Inventory:array of variant;

procedure Init; //Вызывается при включении скрипта
begin
buf:=#$14;
SendToServerEx(Name);
SetLength(Inventory,0);
end;

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

end;

procedure ItemList;
var
i:integer;
v:variant;
begin
SetLength(Inventory,0);
if ReadH(4)<1 then exit;
for i:=0 to ReadH(4)-1 do
begin
v:=[0,1,2];
v[0]:=ReadD(i*offset+6); //0 - OID
v[1]:=ReadD(i*offset+10); //1 - ItemID
v[2]:=ReadQ(i*offset+18); //2 - Count
SetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
end;

procedure InventoryUpdate;
var
i,j:integer;
v:variant;
begin
if ReadH(2)<1 then exit;
for i:=0 to ReadH(2)-1 do
begin
v:=[0,1,2];
v[0]:=ReadD(i*offset+6);
v[1]:=ReadD(i*offset+10);
v[2]:=ReadQ(i*offset+18);
case ReadH(i*offset+4) of
1: begin
SetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
2: begin
j:=FindItemByParams(v,0);
if j=-1 then exit;
Inventory[j]:=v;
end;
3: begin
j:=FindItemByParams(v,0);
if j=-1 then exit;
if (j<>length(Inventory)-1) then Inventory[j]:=Inventory[length(Inventory)-1];
SetLength(Inventory,length(Inventory)-1);
end;
end;
end;
end;

function FindItemByParams(v:variant;p:byte) : integer;
var
i:integer;
tempv:variant;
begin
result:=-1;
for i:=0 to length(Inventory)-1 do
begin
tempv:=Inventory[i];
if tempv[p]=v[p] then
begin
result:=i;
exit;
end;
end;
end;

function Say2 : boolean;
var
i:integer;
v:variant;
begin
result:=true;
case ReadS(2) of
'how': CreatureSay('Всего вещей '+inttostr(length(Inventory)));
'say all' :
for i:=0 to length(Inventory)-1 do
begin
v:=Inventory[i];
CreatureSay(IntToStr(i+1)+'. OID='+inttostr(v[0])+'; ItemID='+inttostr(v[1])+'; Count='+inttostr(v[2]));
end;
else result:=false;
end;
if result then pck:='';
end;

procedure CreatureSay(s:string);
begin
buf:=#$4A;
WriteMask('ddss',[0,3,'Инфо',s]);
SendToClientEx(Name);
end;


//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList;
#$21: InventoryUpdate;
end;
if FromClient and (ConnectName=Name) then
case pck[1] of
#$49: Say2;
end;


end.

wimax
11.01.2011, 20:16
if (v[1])=7134 then v[0]=OID
ет куда вписать то ?)))
извени конеш реально но не могу выехать у тебя идет проверка всех итемов а как зделоть из твоего скрипта на 1 ид?

supernewbie
11.01.2011, 20:37
поиск конечно извращен, но пали че делаешь

var
v:variant;
i:integer;

begin
v:=[0,1,2];
v[1]:=7134;
i:=FindItemByParams(v,1);
Inventory[i] <--- это и будет вещь ИтемИДом 7134, если она существует.
end;

или просто добавль эту функцию

function FindItemByItemID(ItemId:integer) : integer;
var
i:integer;
tempv:variant;
begin
result:=-1;
for i:=0 to length(Inventory)-1 do
begin
tempv:=Inventory[i];
if tempv[1]=ItemId then
begin
result:=i;
exit;
end;
end;
end;

wimax
11.01.2011, 21:17
Const
Name='BloodOfEva';
offset=68;
ItemID=7134;
var
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;
Timer04: TTimer;
Inventory:array of variant;
v:variant;
i:integer;

procedure Init;
begin
buf:=#$11;
SendToServerEx(Name);
SetLength(Inventory,0);
Timer01:=TTimer.Create(nil); //выделяем памать и т.п.
Timer01.OnTimer:=@OnTimer01; //привязываем процедуру к событию
Timer01.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer01.interval:=2000; //280000 интервал(в милисекундах) как часто таймер срабатывает
Timer02:=TTimer.Create(nil); //выделяем памать и т.п.
Timer02.OnTimer:=@OnTimer02; //привязываем процедуру к событию
Timer02.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer02.interval:=10; //10интервал(в милисекундах) как часто таймер срабатывает
Timer03:=TTimer.Create(nil); //выделяем памать и т.п.
Timer03.OnTimer:=@OnTimer03; //привязываем процедуру к событию
Timer03.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer03.interval:=3000; //310000 интервал(в милисекундах) как часто таймер срабатывает
Timer04:=TTimer.Create(nil); //выделяем памать и т.п.
Timer04.OnTimer:=@OnTimer04; //привязываем процедуру к событию
Timer04.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer04.interval:=6000; //1200000 интервал(в милисекундах) как часто таймер срабатывает
end;

procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
Timer04.free;
end;

procedure ItemList;
var
i:integer;
v:variant;
begin
SetLength(Inventory,0);
if ReadH(4)<1 then exit;
for i:=0 to ReadH(4)-1 do
begin
v:=[0,1,2];
v[0]:=ReadD(i*offset+6); //0 - OID
v[1]:=ReadD(i*offset+10); //1 - ItemID
v[2]:=ReadQ(i*offset+18); //2 - Count
SetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
end;

procedure InventoryUpdate;
var
i,j:integer;
v:variant;
begin
if ReadH(2)<1 then exit;
for i:=0 to ReadH(2)-1 do
begin
v:=[0,1,2];
v[0]:=ReadD(i*offset+6);
v[1]:=ReadD(i*offset+10);
v[2]:=ReadQ(i*offset+18);
case ReadH(i*offset+4) of
1: begin
SetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
2: begin
j:=FindItemByParams(v,0);
if j=-1 then exit;
Inventory[j]:=v;
end;
3: begin
j:=FindItemByParams(v,0);
if j=-1 then exit;
if (j<>length(Inventory)-1) then Inventory[j]:=Inventory[length(Inventory)-1];
SetLength(Inventory,length(Inventory)-1);
end;
end;
end;
end;

function FindItemByParams(v:variant;p:byte) : integer;
var
a:integer;
tempv:variant;
begin
result:=-1;
for a:=0 to length(Inventory)-1 do
begin
tempv:=Inventory[a];
if tempv[p]=v[p] then
begin
result:=a;
exit;
end;
end;
end;

function FindItemByItemID(ItemId:integer) : integer;
var
i:integer;
tempv:variant;
begin
result:=-1;
for i:=0 to length(Inventory)-1 do
begin
tempv:=Inventory[i];
if tempv[1]=ItemID then
begin
result:=i;
exit;
end;
end;
end;


procedure OnTimer01(Sender: TObject);
begin
Timer01.enabled:=False;
Timer02.enabled:=True;
end;

procedure OnTimer02(Sender: TObject);
begin
pck:='';
buf:=HStr('C6 BF 07 00 00 01 00 00 00 03 00 00 00');
SendToServerEx(Name);
end;

procedure OnTimer03(Sender: TObject);
begin
Timer03.enabled:=False;
Timer02.enabled:=False;
end;

procedure OnTimer04(Sender: TObject);
begin
Timer04.enabled:=False;
begin
pck:='';
buf:=HStr('B3 00 00 00 00');
SendToServerEx(Name);
end;
end;

procedure Use;
begin
buf:=#$19;
WriteD(i);
WriteD(0);
SendToServerEx(Name);
end;

procedure Localchek;
begin
if (ReadD(2)=924) then Use;
end;

begin
IF FromServer and( pck[1]=#$4A) and (ReadS(12)='CTF: Старт через 5 мин. для уровней 76-85.')begin
Timer01.enabled:=True;
Timer03.enabled:=True;
Timer04.enabled:=True;
end;
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList;
#$21: InventoryUpdate;
#$62: Localchek;
end;
end.

почините кто небуть я не могу уже мозги выносит жесть(((

supernewbie
12.01.2011, 12:41
короче учи паскаль, задолбал

wimax
12.01.2011, 14:47
та блин пытаюсь както учить...... проблема тока в objid вроде все правильно написал и все равно....не хочет он вписывать его... все пашыт кроме етого епаного юза скрола... он его юзает тока вот с objid 0.....что там не так я уже хз...

dyh9l
12.01.2011, 15:01
кароче делай проще, при юзе клиентом скрола сое, запоминать его ОИД

wimax
12.01.2011, 15:02
епт а как бот будет юзать сое?.....

dyh9l
12.01.2011, 15:16
1 раз юзнул сое руками, он просканил пакет инвертарь апдейта и запомнил его ObjID и все

wimax
12.01.2011, 15:17
вы лучше скажите почему он не вписывает оид правильно вить прописано же все правильно или нет?.... скажите где там ошибочка

Добавлено через 51 секунду
так епт у меня 40 ботов ет мне для каждого оид запоминать?...) яж заепусь) та и скрипт не маленкии получетса

wimax
12.01.2011, 16:07
ы=) ну ет проста ппц я не могу понять почему он не считывает прописал все правильно но чтота не так какая та мелочь, сам скрипт работает отлично а вот objid не узнает(

Добавлено через 29 минут
короче все забейте пропишу для каждого бота свой objid и не буду больше мучатса всем биг спс за помощь

sandor
22.01.2011, 13:34
Играю на пвп серваке и точек море хочу заточиться но скриптами пользоваться немогу расскажите что куда и как

червь
02.02.2011, 12:35
я по-своему писал эту функцию, работает исправно, кстати на том же серваке что и у автора:)

if fromserver and (ConnectName = bot1) and (pck[1] = #$11) and (ID = 0)
then
begin
for i := 12 to 9999 do
begin
if readd(i) = 728 then
begin
ID := readd(i - 8);
exit;
end;
if readd(i) <> 728 then
i := i + 64;
end;
end;

ID типа integer, туда сохранится ObjId. 728-ID мп банок, замени на нужный и все.

supernewbie
02.02.2011, 20:34
http://danieldefo.ru/forum/images/smilies/smilee/facepalm.png