PDA

Просмотр полной версии : Количество денег в инвентаре....


MOHTEP
19.05.2008, 00:23
Помагите или подскажите, в каком пакете идет инфа о количестве денег чара моего. Если чесно пакеты знаю еше плохо что в каком и какие данные, но скрипты уже несложные пишу.

Cucumber
19.05.2008, 00:43
Как и любой другой предмет ItemList($1B), InventoryUpdate($27).

MOHTEP
19.05.2008, 00:50
я ето понял но где в пакете?

Cucumber
19.05.2008, 01:00
1B=ItemList:-(2)w(COUNT)w(itemType1)d(ObjectId)d(ITEMID)d(COUNT _ITEM)w(itemType2)w(CustType1)w(isEquipped)d(BodyP art)w(EnchantLevel)w(CustType2)
27=InventoryUpdate:w(COUNT)w(tip_operacii)w(itemTy pe1)d(ObjectId)d(ITEMID)d(COUNT_ITEM)w(itemType2)w (CustType1)w(isEquipped)d(BodyPart)w(EnchantLevel) w(CustType2)
Проверяешь весь пакет размером COUNT, если ITEMID = 57(для адены) то COUNT_ITEM кол-во адены.

QaK
19.05.2008, 12:45
Проверяешь весь пакет размером COUNTточнее - количество предметов в инвентаре.

Sergey
21.05.2008, 01:02
Вот сваял скрипт (и малость содрал), пишет в приват количество денег в инвентаре.


// скрипт на количество денег в инвентаре

const
name='CTEPBA'; //ник чара
//************************************************** ****************************
var
i,k,l: integer;
//************************************************** ****************************
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//************************************************** ****************************
begin

if FromServer and (ConnectName=name)and (pck[1]=#$27)and (pck[12]=#$39)then
begin
i:=12;
k:=ReadD(i); //item ID
l:=ReadD(i); //количество адены
Say('Мои деньги:');
Say('item ID='+IntToStr(k));
Say('количество адены='+IntToStr(l));
end;

end.


Проверял он пашет. Но правда серв баганутый. Но чет у мя сомнения на правильность работы его....

poizon
21.05.2008, 12:22
Sergey, на вид скрипт не может работать, потомучто при приходе пакета с инвентарём надо создать базу с предметами и их количеством, а потом сканировать базу на предмет 57 (ид адены) и вытаскивать в say количество предмета.а у тебя я както не поййму как работает.я реализовывал такую функцию на основе бота рыбака ( от туда берёшь все процедуры для принятия пакетов о инвентаре) а далее всё просто

NLObP
21.05.2008, 14:22
Он наврное проверял с пустым инвентарём, где только деньги.
В принципи можно без занесения в базу.
1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)
В цикле пока ListCount не закончилось проверяем соответствие на требуемое ItemID и берем count.

Sergey
21.05.2008, 15:21
Скрипт проверял с забитым инвентарем под нехочю. Работает норм, при деиствия с деньгами он пишет в приват скок их. А я его еше подописал и те просто бегаю собираю деньги по достижении 2ккк автоматом обменивает на 1 кол. ;) Просто у мя сомнения на верность


if FromServer and (ConnectName=name)and (pck[1]=#$27)and (pck[12]=#$39)then
begin
i:=12;
k:=ReadD(i); //item ID
l:=ReadD(i); //количество адены
Say('Мои деньги:');
Say('item ID='+IntToStr(k));
Say('количество адены='+IntToStr(l));
end;


есть впечатление что можно сделать подругому,чтоб проверял еше что либо по ID.

poizon
21.05.2008, 15:22
NLObP, ну да можно и без базы, типа цикл проверяет itemid в пакете если находит 57 то считывает d(count) след раз
procedure howmanyadena
var
adena,j,i:integer;
begin
j:=4;
listcount:=readh(j);
for i:=1 to listcount do begin
j:=j+6;
if (readd(j)=57) then begin
adena:=readd(j);
break;
end;
j:=j+26;
end;

if fromserver and (pck[1]:=#$1b) then howmanyadena



вот такой скриптик в adena будет записано кол адены, но запускать надо уже в окне выбора персонажа. скрипт не проверял.это набросок.
+ещё приходит пакет о изменении количества предметов , для него тоже надо писать процедуру.
end;

NLObP
21.05.2008, 19:56
+ещё приходит пакет о изменении количества предметов , для него тоже надо писать процедуру.

Sergey как раз и проверяет этот пакет.

Добавлено через 10 минут
Просто у мя сомнения на верность

Сейчас внимательно посмотрел, вроде всё правильно. В чем у тебя сомнения? Добавь еще проверку пакета 1B и будет то что надо!

ChiterEPT
23.05.2008, 21:13
Сейчас внимательно посмотрел, вроде всё правильно. В чем у тебя сомнения? Добавь еще проверку пакета 1B и будет то что надо!
Незнаю в чем сомнения у Сергея, но у меня есть определенные сомнения...

Скрипт проверяет наличие в двенадцатом байте значения #$39(как я понял HEX ID адены) и только тогда считывает информацию о кол-ве аден. Но ведь не всегда информация об адене идет именно с двенадцатого байта ... ИЛИ Я ОШИБАЮСЬ???

Sergey
24.05.2008, 01:25
На двух сервах все считывается оки а так хз нужно проверять под конкретный серв.

NLObP
24.05.2008, 03:41
Незнаю в чем сомнения у Сергея, но у меня есть определенные сомнения...

Скрипт проверяет наличие в двенадцатом байте значения #$39(как я понял HEX ID адены) и только тогда считывает информацию о кол-ве аден. Но ведь не всегда информация об адене идет именно с двенадцатого байта ... ИЛИ Я ОШИБАЮСЬ???

в пакете #$27 скорее всего может случиться облом, если несколько предметов будет в пакете, но на практике проверять надо, может всегда один предмет описывается.

Петрович
24.05.2008, 20:47
o, я как раз ищу чтобы бот сам когда адены 2ккк бежал покупать колы и обратно, поможете? Этот скрипт волкером можно?

КАКАШОНДЕР
06.07.2008, 14:24
ап ,скрипт не дописан))))))))))

VORON
10.07.2008, 06:27
-) как тут уже сказали в пакете который приходит при нажатии ALT+V перечисляется циклом все итемы.. которые у тебя в инвенторе.. тут надо отметить что нажатие кнопки ТАБ (в интерлюде) не равносильно нажатию ALT+V .. АЛЬТ+В- принудительно вызывает пакет с описанием инвенторя.. а ТАБ непоймеш че.. данные из клииента показывает...
поетой причине в интерлюде мы часто при новой загрузке не видем на себе бижу.. а если нажмем кнопки вышеуказанные то увидем.. чтоб понять как адены прочитать приведу пример скрипта из топика "ДА БУДЕТ БОТ" (моего):

var
Bot1X,Bot1Y,Bot1Z,Bot2X,Bot2Y,Bot2Z,Bot3X,Bot3Y,Bo t3Z,Bot4X,Bot4Y,Bot4Z:string; //координаты баферов
IDAssistTarget:string; //таргет командира
rnd:integer; // вспомогательная для случайного события

bafSE: array [1..100] of string; //список бафов ШЕ
bafPP: array [1..100] of string; //список бафов ПП
bafEE: array [1..100] of string; //список бафов ЕЕ
BafSEApplyChar: array [1..100] of string; //указывает ИД чара на которого нужно наложить баф с помощью ШЕ
BafSEApplyBaf: array [1..100] of string; //указывает какой баф наложить на чара с помощью ШЕ
BafPPApplyChar: array [1..100] of string; //указывает ИД чара на которого нужно наложить баф с помощью ПП
BafPPApplyBaf: array [1..100] of string; //указывает какой баф наложить на чара с помощью ПП
BafEEApplyChar: array [1..100] of string; //указывает ИД чара на которого нужно наложить баф с помощью ЕЕ
BafEEApplyBaf: array [1..100] of string; //указывает какой баф наложить на чара с помощью ЕЕ

NameKom,NameBot1,NameBot2,NameBot3,NameBot4:string ; //имена чаров учавствующих в процессе

MaxHPKom,MaxHPBot1,MaxHPBot2,MaxHPBot3,MaxHPBot4:i nteger; //максимальные уровни ХП (лимиты)
MaxMPKom,MaxMPBot1,MaxMPBot2,MaxMPBot3,MaxMPBot4:i nteger; //максимальные уровни МП (лимиты)
MaxCPKom,MaxCPBot1,MaxCPBot2,MaxCPBot3,MaxCPBot4:i nteger; //максимальные уровни ЦП (лимиты)

CurHPKom,CurHPBot1,CurHPBot2,CurHPBot3,CurHPBot4:i nteger; //текущие значения ХП
CurMPKom,CurMPBot1,CurMPBot2,CurMPBot3,CurMPBot4:i nteger; //текущие значения МП
CurCPKom,CurCPBot1,CurCPBot2,CurCPBot3,CurCPBot4:i nteger; //текущие значения ЦП

IDKomandos,IDbot1,IDbot2,IDbot3,IDbot4:string; // идешники всех

timer3: TTimer; //для создания пати
timer4: TTimer; //мульти-баф, общий как для физика так и для мага.. нужные бафы указываются заранее в конце скрипта

BufEndSE,BufEndPP,BufEndEE:boolean;// используется в таймере (мультибаф) для указания на то что 1 из баферов закончил бафать

tick3,tick4:integer; // используется в таймере бафа для тиков.. каждый тик- новый баф..

OidHPPotion0,OidGCPPotion0,OidGHPPotion0,OidHPLexi r0,OidCPLexir0:string; //обжэкт ИД зелий разных у командира
OidHPPotion1,OidGCPPotion1,OidGHPPotion1,OidHPLexi r1,OidCPLexir1:string; //обжэкт ИД зелий разных у первого бота
OidHPPotion2,OidGCPPotion2,OidGHPPotion2,OidHPLexi r2,OidCPLexir2:string; //обжэкт ИД зелий разных у второго
OidHPPotion3,OidGCPPotion3,OidGHPPotion3,OidHPLexi r3,OidCPLexir3:string; //обжэкт ИД зелий разных
OidHPPotion4,OidGCPPotion4,OidGHPPotion4,OidHPLexi r4,OidCPLexir4:string; //обжэкт ИД зелий разных

i,x:integer;
tempD:integer;
tempS:String;

//**********************МУЛЬТИБАФ******************* ****************************************
procedure OnTimer4(Sender: TObject);
begin
//если очередной баф в списке бафов для бафера = '' (окончание процесса бафа) то значит бафер уже отбафал всё что нужно, хватит бафать..
if (BafPPApplyChar[tick4]='') then BufEndPP:=True;
if (BafSEApplyChar[tick4]='') then BufEndSE:=True;
if (BafEEApplyChar[tick4]='') then BufEndEE:=True;

//если все баферы закончили бафать то выключаем таймер мультибафа
//ну и счетчик тиков ставим в исходное положение
if (BufEndPP=True) and (BufEndSE=True) and (BufEndEE=True) then
begin
tick4:=1;
timer4.enabled:=false;

BufEndSE:=False;
BufEndPP:=False;
BufEndEE:=False;
//раз закончили бафать то не допускаем выполнение нижеследущего кода
exit;
end;

//бафаем чара.. используется переменные BafPPApplyChar[tick4],BafPPApplyBaf[tick4] для ПП и аналогичные для ШЕ и ЕЕ указывающие на то какому баферу ково бафать и каким бафом в текущий ТИК.
//ТИК- (tick4) - ето счетчик, который изменяется на 1 с каждым новым бафом.. т.е. каждые 4 секунды (интервал таймера) тик увеличивается на 1
//ТИКИ нужны чтоб каждый раз новый баф кастовать..
buf:=hstr('04') + BafPPApplyChar[tick4] + Bot2X + Bot2Y + Bot2Z + hstr('00');
if (BufEndPP=False) and (IDbot2<>'') then SendToServerEX(NameBot2);
buf:=BafPPApplyBaf[tick4];
if (BufEndPP=False) and (IDbot2<>'') then SendToServerEX(NameBot2);

buf:=hstr('04') + BafSEApplyChar[tick4] + Bot3X + Bot3Y + Bot3Z + hstr('00');
if (BufEndSE=False) and (IDbot3<>'') then SendToServerEX(NameBot3);
buf:=BafSEApplyBaf[tick4];
if (BufEndSE=False) and (IDbot3<>'') then SendToServerEX(NameBot3);

buf:=hstr('04') + BafEEApplyChar[tick4] + Bot4X + Bot4Y + Bot4Z + hstr('00');
if (BufEndEE=False) and (IDbot4<>'') then SendToServerEX(NameBot4);
buf:=BafEEApplyBaf[tick4];
if (BufEndEE=False) and (IDbot4<>'') then SendToServerEX(NameBot4);


tick4:=tick4+1;
end;

//****************************РАЗДАЧА ПРИГЛАШЕНИЙ НА ВСТУПЛЕНИЕ В ПАТИ*******************
procedure OnTimer3(Sender: TObject);
begin

if tick3 = 1 then
begin
buf:=hstr('2B');
//этот код закоментирован , для того чтобы не разрывать пати.. впринципе хз каму как.. если надо четко стабиильно пати создать быстро из своих ботов-баферов то раскоментить
//а если ты с баферами + другие чары с тобой бегают- то ненадо раскоменчивать.. хотя можно тока баферов раскоментить тогда они свою пати порвут и снова вступят к командиру (если он лидер пати)
// if IDKomandos<>'' then SendToServerEX(NameKom);
// if IDBot1<>'' then SendToServerEX(NameBot1);
// if IDBot2<>'' then SendToServerEX(NameBot2);
// if IDBot3<>'' then SendToServerEX(NameBot3);
// if IDBot4<>'' then SendToServerEX(NameBot4);
end;

if tick3 = 2 then
begin
buf:=hstr('29');
writeS(namebot1);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(NameKom);
end;

if tick3 = 3 then
begin
buf:=hstr('29');
writeS(namebot2);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(NameKom);
end;

if tick3 = 4 then
begin
buf:=hstr('29');
writeS(namebot3);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(NameKom);
end;

if tick3 = 5 then
begin
buf:=hstr('29');
writeS(namebot4);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(NameKom);
end;

tick3:=tick3+1;

//ну когда всем баферам приглашение отправили то вырубаем таймер
if tick3=6 then
begin
tick3:=1;
timer3.enabled:=false;
end;

end;

//*************************БЕЖИМ ЗА ЛИДЕРОМ*******************************************
//процедура заставляет бежать ботов за лидером
procedure BotBeg;
begin
//проверяем условие чтоб координаты ботов небыли равными '' и ИД был перехвачен
if IDKomandos <> '' then
begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
if IDBot1<>'' then SendToServerEX(NameBot1);
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
if IDBot1<>'' then SendToServerEX(NameBot1);

//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
if IDBot2<>'' then SendToServerEX(NameBot2);
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
if IDBot2<>'' then SendToServerEX(NameBot2);

//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDKomandos + Bot3X + Bot3Y + Bot3Z + hstr('00');
if IDBot3<>'' then SendToServerEX(NameBot3);
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDKomandos + Bot3X + Bot3Y + Bot3Z + hstr('00');
if IDBot3<>'' then SendToServerEX(NameBot3);

//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDKomandos + Bot4X + Bot4Y + Bot4Z + hstr('00');
if IDBot4<>'' then SendToServerEX(NameBot4);
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDKomandos + Bot4X + Bot4Y + Bot4Z + hstr('00');
if IDBot4<>'' then SendToServerEX(NameBot4);
end;
end;


procedure Init; //Вызывается при включении скрипта
begin
NameKom:='ИМЯ КОМАНДИРА';
NameBot1:='ИМЯ БИША'; //биш
NameBot2:='ИМЯ ПП'; //пп
NameBot3:='ИМЯ ШЕ'; //ше
NameBot4:='ИМЯ ЕЕ'; //ее

//список бафов:
//само собой вы его можете расширить новыми бафами которых тут нет..
//это те бафы кторые я использую от ПП
bafPP[1]:=hstr('2F 0B 04 00 00 00 00 00 00 00'); // ментал
bafPP[2]:=hstr('2F 10 04 00 00 00 00 00 00 00'); // пд
bafPP[3]:=hstr('2F 2C 04 00 00 00 00 00 00 00'); // па
bafPP[4]:=hstr('2F 35 04 00 00 00 00 00 00 00'); // фокус
bafPP[5]:=hstr('2F 36 04 00 00 00 00 00 00 00'); // кон
bafPP[6]:=hstr('2F 3D 04 00 00 00 00 00 00 00'); // акумен
bafPP[7]:=hstr('2F A7 04 00 00 00 00 00 00 00'); // резист к огню
bafPP[8]:=hstr('2F B4 04 00 00 00 00 00 00 00'); // вв
bafPP[9]:=hstr('2F 26 04 00 00 00 00 00 00 00'); // берс
bafPP[10]:=hstr('2F 14 04 00 00 00 00 00 00 00'); // ХП реген
bafPP[12]:=hstr('2F 3E 04 00 00 00 00 00 00 00'); // хаст
bafPP[13]:=hstr('2F 15 04 00 00 00 00 00 00 00'); // блесс ХП
bafPP[14]:=hstr('2F 0C 04 00 00 00 00 00 00 00'); // маджик барьер
bafPP[15]:=hstr('2F 6C 05 00 00 00 00 00 00 00'); // гритер ПА
bafPP[16]:=hstr('2F 6D 05 00 00 00 00 00 00 00'); // гритер ПД
bafPP[17]:=hstr('2F 70 05 00 00 00 00 00 00 00'); // скаред атак резист
bafPP[18]:=hstr('2F 71 05 00 00 00 00 00 00 00'); // дарк атак резист
bafPP[19]:=hstr('2F A5 04 00 00 00 00 00 00 00'); // резист к ветру
bafPP[20]:=hstr('2F 9E 04 00 00 00 00 00 00 00'); // резист к воде
bafPP[21]:=hstr('2F DA 04 00 00 00 00 00 00 00'); // деф виспер
bafPP[22]:=hstr('2F D8 04 00 00 00 00 00 00 00'); // гвиданс
bafPP[23]:=hstr('2F 18 04 00 00 00 00 00 00 00'); // блесс МП
bafPP[24]:=hstr('2F DB 04 00 00 00 00 00 00 00'); // ЩИТ РЕЙТ

//это от ШЕ бафы
bafSE[1]:=hstr('2F 0B 04 00 00 00 00 00 00 00'); // ментал
bafSE[2]:=hstr('2F 10 04 00 00 00 00 00 00 00'); // ПД
bafSE[3]:=hstr('2F 2C 04 00 00 00 00 00 00 00'); // ПА
bafSE[4]:=hstr('2F F4 04 00 00 00 00 00 00 00'); // ВАМП
bafSE[5]:=hstr('2F 23 04 00 00 00 00 00 00 00'); // ЕМП
bafSE[6]:=hstr('2F 17 05 00 00 00 00 00 00 00'); // М.КРИТ
bafSE[7]:=hstr('2F 35 04 00 00 00 00 00 00 00'); // ФОКУС
bafSE[8]:=hstr('2F DA 04 00 00 00 00 00 00 00'); // ДЕФ ВИСПЕР
bafSE[9]:=hstr('2F D8 04 00 00 00 00 00 00 00'); // гвиданс
bafSE[10]:=hstr('2F B4 04 00 00 00 00 00 00 00'); // ВВ

//это от ЕЕ
//список дополнять аналогично етому коду.. просто строки с новыми бафами добавляйте..
bafEE[1]:=hstr('2F EB 04 00 00 00 00 00 00 00'); // резист ШОК
bafEE[2]:=hstr('2F 3F 04 00 00 00 00 00 00 00'); // ЭВЕЙШН
bafEE[3]:=hstr('2F 75 05 00 00 00 00 00 00 00'); // РАСХОД МАНЫ

//при старте скрипта значения переменных =0
//поетому скрипт подумает что у всех 0 ХП и начнется хаос.. все начнут друг друга хилить без остановки
//чтоб избежать етого выставим начальные значения.. то что ХП у нас- дожопы.. много.. 15к.. т.е. хилить ненадо.
//а потом скрипт сам захватит текущее знасение.. и всё коректно будет...
CurHPKom:=15000;
CurHPBot1:=15000;
CurHPBot2:=15000;
CurHPBot3:=15000;
CurHPBot4:=15000;

//для маны аналогичная ситуация
CurMPKom:=15000;
CurMPBot1:=15000;
CurMPBot2:=15000;
CurMPBot3:=15000;
CurMPBot4:=15000;

//дело в том что скрипт расчитывает хилить или нет в зависимости от % от шкалы.. если вся шкала =0 (по дефолту)
//то ето както некоректно там будет хотя вроде пофиг..
//но для коректности понимания процесса мы пишем что максимальная шкала ХП у нас оч маленькая а текущие значения- оч большие..
//поетому никакие хилы небудут происходить при старте скрипта..
MaxHPKom:=10;
MaxHPBot1:=10;
MaxHPBot2:=10;
MaxHPBot3:=10;
MaxHPBot4:=10;

//тики для таймеров
tick3:=1;
tick4:=1;

BufEndSE:=False;
BufEndPP:=False;
BufEndEE:=False;

//новый баф кастовать через 4 секунды
timer4:=TTimer.Create(nil);
timer4.OnTimer:=@OnTimer4; //
timer4.enabled:=false; //
timer4.interval:=4000;

//в пати баферов пинимать с интервалом 1 сек
timer3:=TTimer.Create(nil);
timer3.OnTimer:=@OnTimer3; //
timer3.enabled:=false; //
timer3.interval:=1000;

// ЗАПРОС НА ОТКРЫТИЕ ИНВЕНТОРЯ!!!! ДЛЯ ЗАХВАТА ИДЕШНИКА!
// чтобы принудительно вызвать от сервера пакет ЮЗЕР ИНФО в котором ИД указан
//а также для того чтобы захвватить ИД банок для питья
buf:=hstr('0F');
SendToServerEX(NameKom);
SendToServerEX(NameBot1);
SendToServerEX(NameBot2);
SendToServerEX(NameBot3);
SendToServerEX(NameBot4);

end;

procedure Free; //Вызывается при выключении скрипта
begin
timer3.Free; // освобождаем память связанную с созданными нами объектами
timer4.Free;
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//для тго чтоб 2-3 скрипта коректно работали одновременно..
if pck='' then exit; // нех пустые пакеты обрабатывать типа


//******************************АВТОСОГЛАШЕНИЕ НА ВСТУПЛЕНИЕ В ПАТИ************************
//******************************ПРИ УСЛОВИИ ЧТО ПАТИ ДАЕТ- КОМАНДИР************************
//ну тут тупо считываем имя кто нам шлет пати из пакета на предложение в него вступить
//ну и если имя- командир то вступаем в ету пати автоматом..
if FromServer then
if ConnectName=NameBot1 then
if pck[1]=#$39 then
if ReadS(2)=NameKom then
begin
buf:=hstr('2A 01 00 00 00');
sendtoserverex(NameBot1);
end;

if FromServer then
if ConnectName=NameBot2 then
if pck[1]=#$39 then
if ReadS(2)=NameKom then
begin
buf:=hstr('2A 01 00 00 00');
sendtoserverex(NameBot2);
end;

if FromServer then
if ConnectName=NameBot3 then
if pck[1]=#$39 then
if ReadS(2)=NameKom then
begin
buf:=hstr('2A 01 00 00 00');
sendtoserverex(NameBot3);
end;

if FromServer then
if ConnectName=NameBot4 then
if pck[1]=#$39 then
if ReadS(2)=NameKom then
begin
buf:=hstr('2A 01 00 00 00');
sendtoserverex(NameBot4);
end;

//*******************ЗАХВАТ КООРДИНАТ***************************************** **********
//если принят пакет от клиента с кординатами бота то
if FromClient then
if ConnectName=NameBot1 then
if pck[1]=#$48 then
begin
//запоминаем координаты
Bot1X:= pck[2] + pck[3] + pck[4] + pck[5];
Bot1Y:= pck[6] + pck[7] + pck[8] + pck[9];
Bot1Z:= pck[10] + pck[11] + pck[12] + pck[13];
end;

//если принят пакет от клиента с кординатами бота то
if FromClient then
if ConnectName=NameBot2 then
if pck[1]=#$48 then
begin
//запоминаем координаты
Bot2X:= pck[2] + pck[3] + pck[4] + pck[5];
Bot2Y:= pck[6] + pck[7] + pck[8] + pck[9];
Bot2Z:= pck[10] + pck[11] + pck[12] + pck[13];
end;

//если принят пакет от клиента с кординатами бота то
if FromClient then
if ConnectName=NameBot3 then
if pck[1]=#$48 then
begin
//запоминаем координаты
Bot3X:= pck[2] + pck[3] + pck[4] + pck[5];
Bot3Y:= pck[6] + pck[7] + pck[8] + pck[9];
Bot3Z:= pck[10] + pck[11] + pck[12] + pck[13];
end;

//если принят пакет от клиента с кординатами бота то
if FromClient then
if ConnectName=NameBot4 then
if pck[1]=#$48 then
begin
//запоминаем координаты
Bot4X:= pck[2] + pck[3] + pck[4] + pck[5];
Bot4Y:= pck[6] + pck[7] + pck[8] + pck[9];
Bot4Z:= pck[10] + pck[11] + pck[12] + pck[13];
end;

//********************ЗАХВАТ OID ЗЕЛИЙ********************************************* ***************
//при старте скрипта отправляется запрос на открытие инвенторя автоматически
//в ответе сервера содержится всё содердимое инвенторя.. ищем доступные для использования зелья там
//и запоминаем их OID для дальнейшего использования.. если какието банки кончились и вы их докупили
//то следует перезапустить скрипт.. чтоб заного ИД захватить..
//тут вот в скобачках 2 байта ето ИТЕМ ИД.. он константа.. с помощью итем ИД клинт знает какую текстуру подстовлять для визуализации и т.д.
//но для использования предмета- есть ОБЖЕКТ ИД.. например у вас 3 пушки одинаковых в инвенторе.. при етом ИТЕМ ИД у всех будет одинаковый..
//вы наденете то одну то другую.. ето еще лучше на примере бижи объяснять.. 3 кольца у вас одинаковых..
//2 надето а 1 в инвенторе лежит.. вы тыкаете по нему.. (по инвентарю- кольцу) и вродебы ничего для вас не происходит..
// но сервер у себя в мозгах меняет одно на другое кольцо..просто они одинаковые на вид и вы етого не видите..
//но на самом деле ИД у всех 3-х колец разный.. вопщем ОБЖЕКТ ИД- ето предмет который можно юзать каким либо способом в игре..
//самостоятельяная единица.. а ИТЕМ ИД- чисто сопостовление что такойто ОБЖЭКТ- визуализировать- такто..
// с помощью манипуляций с етими числами мы можем увидеть что в место НГ пухи у вас будет нарисован- зарич..
//или вместо моба 12 лвл нарисован АНТАРАС.. и вы его геройски убиваете..
//так вот (заболтался) наша задача соспоставить ИТЕМ ИД к ОБЖЭКТ ИД.. (в скобочках там ИТЕМ ИД)
//для етого мы перебираем пакет с инвентарем и ишем там среди кучи предметов тока те которые нас интерисуют и запоминаем их ОБЖЭКТ ИД..
//у командира:
if FromServer then
if ConnectName=NameKom then
if pck[1]=#$1B then
begin
for i:= 0 to round(length(pck)/36) do
begin
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8]; // 2504 - это итем ИД банки с ХП обычной с магазина
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('03 06')) then OidGHPPotion0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('B2 21')) then OidHPLexir0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('BE 21')) then OidHPLexir0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('D8 15')) then OidGCPPotion0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
end
end;

//у БОТА1:
if FromServer then
if ConnectName=NameBot1 then
if pck[1]=#$1B then
begin
for i:= 0 to round(length(pck)/36) do
begin
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion1:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8]; // 2504 - это итем ИД банки с ХП обычной с магазина
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('03 06')) then OidGHPPotion1:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('B2 21')) then OidHPLexir1:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('BE 21')) then OidHPLexir1:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('D8 15')) then OidGCPPotion1:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
end
end;

//у БОТА2:
if FromServer then
if ConnectName=NameBot2 then
if pck[1]=#$1B then
begin
for i:= 0 to round(length(pck)/36) do
begin
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion2:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8]; // 2504 - это итем ИД банки с ХП обычной с магазина
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('03 06')) then OidGHPPotion2:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('B2 21')) then OidHPLexir2:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('BE 21')) then OidHPLexir2:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('D8 15')) then OidGCPPotion2:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
end
end;


//у БОТА3:
if FromServer then
if ConnectName=NameBot3 then
if pck[1]=#$1B then
begin
for i:= 0 to round(length(pck)/36) do
begin
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion3:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8]; // 2504 - это итем ИД банки с ХП обычной с магазина
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('03 06')) then OidGHPPotion3:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('B2 21')) then OidHPLexir3:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('BE 21')) then OidHPLexir3:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('D8 15')) then OidGCPPotion3:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
end
end;

//у БОТА4:
if FromServer then
if ConnectName=NameBot4 then
if pck[1]=#$1B then
begin
for i:= 0 to round(length(pck)/36) do
begin
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion4:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8]; // 2504 - это итем ИД банки с ХП обычной с магазина
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('03 06')) then OidGHPPotion4:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('B2 21')) then OidHPLexir4:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('BE 21')) then OidHPLexir4:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('D8 15')) then OidGCPPotion4:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
end
end;
//********************ОСТСЛЕЖИВАЕМ ТРУПАКИ******************************************* *************
//если кто то умер то приходит пакет DIE.. то хилить его ненадо...
//нефиг трупы хилить...
//для того чтоб трупяков боты не хилили ставим кодом то что ХП (текущее) у них до жопы... т.е. 15к
if FromServer then
if ConnectName=NameKom then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDKomandos then
CurHPKom:=15000;

if FromServer then
if ConnectName=NameBot1 then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDBot1 then
CurHPBot1:=15000;

if FromServer then
if ConnectName=NameBot2 then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDBot2 then
CurHPBot2:=15000;

if FromServer then
if ConnectName=NameBot3 then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDBot3 then
CurHPBot3:=15000;

if FromServer then
if ConnectName=NameBot4 then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDBot3 then
CurHPBot4:=15000;

//*************************УЗНАЕМ ЛИМИТЫ ХП и МП и ИД***********************************************
//из пакета UserInfo который приходит во время бафа и не только
//как тока скрипт начинает свою работу то он на все аки отправляет запрос на открытие ИНВЕНТОРЯ
//вместе с ответом сервера всегда приходит пакет ЮЗЕР ИНФО.. из етого замечательного пакета мы считываем максимальные значения ХП и МП
//а так жэ ИД чара (бота- бафера)

//КОМАНДИР
if FromServer then
if ConnectName = NameKom then
if pck[1]=#$04 then
begin
IDKomandos:=pck[18]+pck[19]+pck[20]+pck[21]; //тут выдергиваем ИД чара
i:=22;
tempS:=readS(i); // ето используем для удобства.. имя типа пропускаем.. потому как каждый раз оно из разного кол-ва букв состоит.. в скобках переменная автоматом увеличивается на кол-во букв (ну там по формуле.. в юникоде 1 буква=2 байта, и символ окончания строки еще 00 00)
i:=i+48; // через 48 байтофъ после имени указывается лимиты и текущие значения для ХП и МП
//запоминаем их.. тут нам не особо важны текущие значения.. хотя лишний раз не помешают
//но важно- максимальное значение- ЛИМИТЫ
MaxHPKom:=readD(i);
CurHPKOM:=readD(i);
MaxMPKom:=readD(i);
CurMPKOM:=readD(i);
MaxCPKom:=round(MaxHPKom/2);
end;

//1-й бот
if FromServer then
if ConnectName = NameBot1 then
if pck[1]=#$04 then
begin
IDBot1:=pck[18]+pck[19]+pck[20]+pck[21];
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPBot1:=readD(i);
CurHPBot1:=readD(i);
MaxMPBot1:=readD(i);
CurMPBot1:=readD(i);
MaxCPBot1:=round(MaxHPBot1/2);
end;

//2-й бот
if FromServer then
if ConnectName = NameBot2 then
if pck[1]=#$04 then
begin
IDBot2:=pck[18]+pck[19]+pck[20]+pck[21];
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPBot2:=readD(i);
CurHPBot2:=readD(i);
MaxMPBot2:=readD(i);
CurMPBot2:=readD(i);
MaxCPBot2:=round(MaxHPBot2/2);
end;

//3-й бот
if FromServer then
if ConnectName = NameBot3 then
if pck[1]=#$04 then
begin
IDBot3:=pck[18]+pck[19]+pck[20]+pck[21];
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPBot3:=readD(i);
CurHPBot3:=readD(i);
MaxMPBot3:=readD(i);
CurMPBot3:=readD(i);
MaxCPBot3:=round(MaxHPBot3/2);
end;

//4-й бот
if FromServer then
if ConnectName = NameBot4 then
if pck[1]=#$04 then
begin
IDBot4:=pck[18]+pck[19]+pck[20]+pck[21];
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPBot4:=readD(i);
CurHPBot4:=readD(i);
MaxMPBot4:=readD(i);
CurMPBot4:=readD(i);
MaxCPBot4:=round(MaxHPBot4/2);
end;

//*************************СЛЕДИМ ЗА ХП и МП******************************************
//а ету часть кода требуется под ваши жэлания настроить..
//тут указываются значения при которых ПП ШШ ЕЕ БИШ будут вам ману лить и ХП заливать и каким именно скилом
//следим за ХП КОМАНДИРА
//отлавливаем СТАТУС АПДЕЙТ!!!!!
//как выяснилось статус апдейта бывает 2 разных..
//1 для ХП, 2 для МП
//етот пакет приходит при любом изменении ХП и МП у чара..
//чтоб их отличить сервак использует индекс.. в 6-м байте присылает либо 4 либо 2..
//если в 6-м байте СТАТУС АПДЕЙТ цифра #$04 то значит реч в етом пакете про ХП
//а если #$02 то реч в етом пакете про МП..
//ДЛЯ ЦП используется дурацкая формула: базовое ХП/2 .. в пакете нигде не указывается максимальное кол-во ЦП поетому мы его вот так вот высчитываем.. спросите почиму дурацкая?.. потомучто бафните от ПП блесс ХП и пипец..
//я долго не мог понять почеу у меня скрипт сам бухал ЦП банки под бафом без надобности.. пока не понял что ЦП от базового ХП расщитывается без учета бафа..
if FromServer then
if ConnectName = NameKom then
if pck[1]=#$0e then
if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDKomandos + #$04) then
begin
//считываем текущее состояние ХП!!-)
CurHPKom:=ReadD(14);
//считываем текущее состояние ЦП!!-)
CurCPKom:=ReadD(30);
//ну собственно ето уже можно править под желания каждого:
//если жизни текущие меньше 0,7 от шкалы (70%) то..
//то биш использует свой любимый скил МАЖОР ХИЛ за спирит оре (в интерлюде) (для ц4 такого скила нету)
if (CurHPKom < round(MaxHPKom*0.7)) then
begin
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
if (IDBot1 <> '') then SendToServerEX(NameBot1);
buf:=hstr('2F 79 05 00 00 00 00 00 00 00'); // МАЖОР ХИЛ БИШ
if (IDBot1 <> '') then SendToServerEX(NameBot1);
end;

if (CurHPKom < round(MaxHPKom*0.4)) then
begin
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
if (IDBot2 <> '') then SendToServerEX(NameBot2);
buf:=hstr('2F F7 03 00 00 00 00 00 00 00'); //ПП ХИЛИТ
if (IDBot2 <> '') then SendToServerEX(NameBot2);
end;

if (CurHPKom < round(MaxHPKom*0.75)) then
begin
buf:=hstr('04') + IDKomandos + Bot4X + Bot4Y + Bot4Z + hstr('00');
if (IDBot4 <> '') then SendToServerEX(NameBot4);
buf:=hstr('2F 79 05 00 00 00 00 00 00 00'); //ЕЕ ХИЛИТ
if (IDBot4 <> '') then SendToServerEX(NameBot4);
end;

if (CurHPKom < round(MaxHPKom*0.6)) then
begin
buf:=hstr('04') + IDKomandos + Bot3X + Bot3Y + Bot3Z + hstr('00');
if (IDBot3 <> '') then SendToServerEX(NameBot3);
buf:=hstr('2F C1 04 00 00 00 00 00 00 00 '); //ШЕ ХИЛИТ
if (IDBot3 <> '') then SendToServerEX(NameBot3);
end;

//КОМАНДИР БУХАЕТ ЗЕЛЬЯ
if (CurHPKom < round(MaxHPKom*0.90)) and (CurCPKom < round(MaxCPKom*0.6)) then
begin
buf:= hstr('14') + OidGHPPotion0 + hstr('00 00 00 00'); // гритер хилку
if (OidGHPPotion0 <> '') then SendToServerEX(NameKom);
end;

if (CurHPKom < round(MaxHPKom*0.8)) then
begin
buf:= hstr('14') + OidHPPotion0 + hstr('00 00 00 00'); // обычную хилку
if (OidHPPotion0 <> '') then SendToServerEX(NameKom);
end;

if (CurHPKom < round(MaxHPKom*0.3)) then
begin
buf:= hstr('14') + OidHPLexir0 + hstr('00 00 00 00'); // лексир ХП
if (OidHPPotion0 <> '') then SendToServerEX(NameKom);
end;

///ТУТ МЕНЯЙТЕ ЗНАЧЕНИЕ ОЧ АКУРАТНО.. 1,0 ето не 100% шкалы изза бафа на блесс ХП..
// поетому ставьте немного меньше с учетом возможного бафа на блес ХП..
if (CurCPKom < round(MaxCPKom*0.6)) then
begin
buf:= hstr('14') + OidGCPPotion0 + hstr('00 00 00 00'); // ГЦП БАНКУ
if (OidGCPPotion0 <> '') then SendToServerEX(NameKom);
end;

if (CurCPKom < round(MaxCPKom*0.1)) then
begin
buf:= hstr('14') + OidCPLexir0 + hstr('00 00 00 00'); // лексир ЦП
if (OidGCPPotion0 <> '') then SendToServerEX(NameKom);
end;


end;



//следим за ХП у БОТ1
//если злой хренко решит наших баферов бить, а потом нас- то мы просто так не сдадимся..
//баферам ХИЛ дадим.. чтоб хренко били били и не убили...
//я сделал тупо- чтоб тока сам себя хилял бафер.. добавьте аналогичные строки сюда и будет так что все баферы будут хилить баф-бота
//ето надо полюбасу- но пока руки не дошли.. и вам немного задачи- доделать скрипт..
//но я етого не сделал еще по одной причине.. в реальных условиях мой командир бегает оч шустро..
//баферы отстают.. если 1 бафер на пвп отстанет- да и хер с ним.. а если етого отстающего бьют..
//и все мои баферы кинутся его хилить (если его бьют) то я через 15 сек буду оч далеко и меня уже баферы не догонят
//и я буду- (командир пати) без хила.. поетому если бафера атакуют то я сделал чтоб он сам себя лечил..
// но чтоб другие не лечили, чтоб другие за мной бежали..
if FromServer then
if ConnectName = NameBot1 then
if pck[1]=#$0e then
if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDbot1 + #$04) then
begin
CurHPbot1:=ReadD(14);
CurCPbot1:=ReadD(30);
//на 70% шкалы хилит бафер сам себя (бишоп) скилом мажор хил
if (CurHPbot1 < round(MaxHPBot1*0.7)) then
begin
buf:=hstr('04') + IDbot1 + Bot1X + Bot1Y + Bot1Z + hstr('00');
if (IDBot1 <> '') then SendToServerEX(NameBot1);
buf:=hstr('2F 79 05 00 00 00 00 00 00 00'); //скил бишопа: можор хил
if (IDBot1 <> '') then SendToServerEX(NameBot1);
end;

//БОТ1 БУХАЕТ ЗЕЛЬЯ
if (CurHPBot1 < round(MaxHPBot1*0.90)) and (CurCPBot1 < round(MaxCPBot1*0.6)) then
begin
buf:= hstr('14') + OidGHPPotion1 + hstr('00 00 00 00'); // гритер хилку
if (OidGHPPotion1 <> '') then SendToServerEX(NameBot1);
end;

if (CurHPBot1 < round(MaxHPBot1*0.8)) then
begin
buf:= hstr('14') + OidHPPotion1 + hstr('00 00 00 00'); // обычную хилку
if (OidHPPotion1 <> '') then SendToServerEX(NameBot1);
end;

if (CurHPBot1 < round(MaxHPBot1*0.3)) then
begin
buf:= hstr('14') + OidHPLexir1 + hstr('00 00 00 00'); // лексир ХП
if (OidHPLexir1 <> '') then SendToServerEX(NameBot1);
end;

if (CurCPBot1 < round(MaxCPBot1*0.6)) then
begin
buf:= hstr('14') + OidGCPPotion1 + hstr('00 00 00 00'); // ГЦП БАНКУ
if (OidGCPPotion1 <> '') then SendToServerEX(NameBot1);
end;

if (CurCPBot1 < round(MaxCPBot1*0.1)) then
begin
buf:= hstr('14') + OidCPLexir1 + hstr('00 00 00 00'); // лексир ЦП
if (OidCPLexir1 <> '') then SendToServerEX(NameBot1);
end;


end;

//следим за ХП у БОТ2
if FromServer then
if pck[1]=#$0e then
if ConnectName = NameBot2 then
if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDbot2 + #$04) then
begin
CurHPbot2:=ReadD(14);
CurCPbot2:=ReadD(30);

if (CurHPbot2 < round(MaxHPBot2*0.7)) then
begin
buf:=hstr('04') + IDbot2 + Bot1X + Bot1Y + Bot1Z + hstr('00');
if (IDBot1 <> '') and (IDBot2 <> '') then SendToServerEX(NameBot1);
buf:=hstr('2F 79 05 00 00 00 00 00 00 00');
if (IDBot1 <> '') and (IDBot2 <> '') then SendToServerEX(NameBot1);
end;

//БОТ2 БУХАЕТ ЗЕЛЬЯ
if (CurHPBot2 < round(MaxHPBot2*0.90)) and (CurCPBot2 < round(MaxCPBot2*0.6)) then
begin
buf:= hstr('14') + OidGHPPotion2 + hstr('00 00 00 00'); // гритер хилку
if (OidGHPPotion2 <> '') then SendToServerEX(NameBot2);
end;

if (CurHPBot2 < round(MaxHPBot2*0.8)) then
begin
buf:= hstr('14') + OidHPPotion2 + hstr('00 00 00 00'); // обычную хилку
if (OidHPPotion2 <> '') then SendToServerEX(NameBot2);
end;

if (CurHPBot2 < round(MaxHPBot2*0.3)) then
begin
buf:= hstr('14') + OidHPLexir2 + hstr('00 00 00 00'); // лексир ХП
if (OidHPLexir2 <> '') then SendToServerEX(NameBot2);
end;

if (CurCPBot2 < round(MaxCPBot2*0.6)) then
begin
buf:= hstr('14') + OidGCPPotion2 + hstr('00 00 00 00'); // ГЦП БАНКУ
if (OidGCPPotion2 <> '') then SendToServerEX(NameBot2);
end;

if (CurCPBot2 < round(MaxCPBot2*0.1)) then
begin
buf:= hstr('14') + OidCPLexir2 + hstr('00 00 00 00'); // лексир ЦП
if (OidCPLexir2 <> '') then SendToServerEX(NameBot2);
end;


end;

//следим за ХП у БОТ3
if FromServer then
if pck[1]=#$0e then
if ConnectName = NameBot3 then
if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDbot3 + #$04) then
begin
CurHPbot3:=ReadD(14);
CurCPbot3:=ReadD(30);

if (CurHPbot3 < round(MaxHPBot3*0.7)) then
begin
buf:=hstr('04') + IDbot3 + Bot3X + Bot3Y + Bot3Z + hstr('00');
if (IDBot3 <> '') then SendToServerEX(NameBot3);
buf:=hstr('2F C1 04 00 00 00 00 00 00 00');
if (IDBot3 <> '') then SendToServerEX(NameBot3);
end;

//БОТ3 БУХАЕТ ЗЕЛЬЯ
if (CurHPBot3 < round(MaxHPBot3*0.90)) and (CurCPBot3 < round(MaxCPBot3*0.6)) then
begin
buf:= hstr('14') + OidGHPPotion3 + hstr('00 00 00 00'); // гритер хилку
if (OidGHPPotion3 <> '') then SendToServerEX(NameBot3);
end;

if (CurHPBot3 < round(MaxHPBot3*0.8)) then
begin
buf:= hstr('14') + OidHPPotion3 + hstr('00 00 00 00'); // обычную хилку
if (OidHPPotion3 <> '') then SendToServerEX(NameBot3);
end;

if (CurHPBot3 < round(MaxHPBot3*0.3)) then
begin
buf:= hstr('14') + OidHPLexir3 + hstr('00 00 00 00'); // лексир ХП
if (OidHPLexir3 <> '') then SendToServerEX(NameBot3);
end;

if (CurCPBot3 < round(MaxCPBot3*0.6)) then
begin
buf:= hstr('14') + OidGCPPotion3 + hstr('00 00 00 00'); // ГЦП БАНКУ
if (OidGCPPotion3 <> '') then SendToServerEX(NameBot3);
end;

if (CurCPBot3 < round(MaxCPBot3*0.1)) then
begin
buf:= hstr('14') + OidCPLexir3 + hstr('00 00 00 00'); // лексир ЦП
if (OidCPLexir3 <> '') then SendToServerEX(NameBot3);
end;

end;

//следим за ХП у БОТ4
if FromServer then
if pck[1]=#$0e then
if ConnectName = NameBot4 then
if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDbot4 + #$04) then
begin
CurHPbot4:=ReadD(14);
CurCPbot4:=ReadD(30);

if (CurHPbot4 < round(MaxHPBot4*0.7)) then
begin
buf:=hstr('04') + IDbot4 + Bot4X + Bot4Y + Bot4Z + hstr('00');
if (IDBot4 <> '') and (IDBot4 <> '') then SendToServerEX(NameBot4);
buf:=hstr('2F 79 05 00 00 00 00 00 00 00');
if (IDBot4 <> '') then SendToServerEX(NameBot4);
end;

//БОТ4 БУХАЕТ ЗЕЛЬЯ
if (CurHPBot4 < round(MaxHPBot4*0.90)) and (CurCPBot4 < round(MaxCPBot4*0.6)) then
begin
buf:= hstr('14') + OidGHPPotion4 + hstr('00 00 00 00'); // гритер хилку
if (OidGHPPotion4 <> '') then SendToServerEX(NameBot4);
end;

if (CurHPBot4 < round(MaxHPBot4*0.8)) then
begin
buf:= hstr('14') + OidHPPotion4 + hstr('00 00 00 00'); // обычную хилку
if (OidHPPotion4 <> '') then SendToServerEX(NameBot4);
end;

if (CurHPBot4 < round(MaxHPBot4*0.3)) then
begin
buf:= hstr('14') + OidHPLexir4 + hstr('00 00 00 00'); // лексир ХП
if (OidHPLexir4 <> '') then SendToServerEX(NameBot4);
end;

if (CurCPBot4 < round(MaxCPBot4*0.6)) then
begin
buf:= hstr('14') + OidGCPPotion4 + hstr('00 00 00 00'); // ГЦП БАНКУ
if (OidGCPPotion4 <> '') then SendToServerEX(NameBot4);
end;

if (CurCPBot4 < round(MaxCPBot4*0.1)) then
begin
buf:= hstr('14') + OidCPLexir4 + hstr('00 00 00 00'); // лексир ЦП
if (OidCPLexir4 <> '') then SendToServerEX(NameBot4);
end;

end;

//следим за МП у КОМАНДИРА (ШЕ следит)
if FromServer then
if pck[1]=#$0e then
if ConnectName = NameKom then
if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDKomandos + #$02) then
begin
CurMPkom:=ReadD(14);
rnd:=round(random*100);
if (CurMPkom < round(MaxMPkom*0.5)) and (rnd<15) then
begin
buf:=hstr('04') + IDKomandos + Bot3X + Bot3Y + Bot3Z + hstr('00');
if (IDBot3 <> '') then SendToServerEX(NameBot3);
buf:=hstr('2F F5 03 00 00 00 00 00 00 00');
if (IDBot3 <> '') then SendToServerEX(NameBot3);
end;
end;

//следим за МП у КОМАНДИРА (ЕЕ следит)
if FromServer then
if pck[1]=#$0e then
if ConnectName = NameKom then
if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDKomandos + #$02) then
begin
CurMPkom:=ReadD(14);
rnd:=round(random*100);
if (CurMPkom < round(MaxMPkom*0.5)) and (rnd<15) then
begin
buf:=hstr('04') + IDKomandos + Bot4X + Bot4Y + Bot4Z + hstr('00');
if (IDBot4 <> '') then SendToServerEX(NameBot4);
buf:=hstr('2F F5 03 00 00 00 00 00 00 00');
if (IDBot4 <> '') then SendToServerEX(NameBot4);
end;
end;

//следим за МП у БИША
//этот кусок кода вполне альтернативный..
if FromServer then
if pck[1]=#$0e then
if ConnectName = NameBot1 then
if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDbot1 + #$02) then
begin
CurMPBot1:=ReadD(14);

if (CurMPBot1 < round(MaxMPBot1*0.9)) then
begin
buf:=hstr('04') + IDBot1 + Bot3X + Bot3Y + Bot3Z + hstr('00');
if (IDBot3 <> '') then SendToServerEX(NameBot3);
buf:=hstr('2F F5 03 00 00 00 00 00 00 00');
if (IDBot3 <> '') then SendToServerEX(NameBot3);
end;
end;

//**********************СЛЕДИМ ЗА ТАРГЕТАМИ****************************************
//КОМАНДИР
//если принят пакет со сменой таргета у командира то
if FromServer then
if ConnectName = NameKom then
if pck[1]=#$A6 then
begin
//запоминаем ИД таргета командира для ассиста
IDAssistTarget:= pck[2]+pck[3]+pck[4]+pck[5];
end;

//**********************САЖАЕМ ВСЮ ПАТИ ЧЕРЕЗ КОНТРОЛ****************************************
//если принят пакет на сажание с контролом то сажаем всю пати
if FromClient then
if (ConnectName = NameKom) then
if (pck[1]+pck[2]+pck[6]=hstr('45 00 01')) then
begin
buf:=hstr('45 00 00 00 00 01 00 00 00 00');
if IDBot1<>'' then SendToServerEX(NameBot1);
if IDBot2<>'' then SendToServerEX(NameBot2);
if IDBot3<>'' then SendToServerEX(NameBot3);
if IDBot4<>'' then SendToServerEX(NameBot4);
end;
//*******************БЕЖИМ ЗА КОМАНДИРОМ ПОСЛЕ ИСПОЛЬЗОВАНИЯ СКИЛА***************************
//ловим пакет МАДЖИКСКИЛЮЗ
if FromServer then
if pck[1] = #$48 then
if (pck[2]+pck[3]+pck[4]+pck[5]=IDBOT1) or (pck[2]+pck[3]+pck[4]+pck[5]=IDBOT2) or (pck[2]+pck[3]+pck[4]+pck[5]=IDBOT3) or (pck[2]+pck[3]+pck[4]+pck[5]=IDBOT4) then
begin
BotBeg;
end;
//**************************УПРАВЛЕНИЕ************** **********************************
//"Bow" (ПОКЛОН)- БЕЖАТЬ за КОМАНДИРОМ
if FromClient then
if ConnectName=NameKom then
if pck[1]+pck[2]=hstr('1B 07') then
begin
pck:='';
BotBeg;
exit;
end;

//ADVANCE- В АТАКУ - пати быстрое создание (3-я кнопка)
if FromClient then
if ConnectName=NameKom then
if pck[1]+pck[2]=hstr('1B 04') then
begin
pck:='';
//сразу рвем пати у всех чаров и командир раздает пати поновому
//чары автоматически принимают пати
//используется таймер т.к. одновременно 2-м чарам пати кинуть нельзя
timer3.enabled:=true;
exit;
end;

//YES- РУТ ПО АССИСТУ (4-я кнопка) либо переделать в какойто дебаф от каждого бафера он свой.. по ассисту все баферы какуюто куйню кинут на цель по ассисту..
if FromClient then
if ConnectName=NameKom then
if pck[1]+pck[2]=hstr('1B 06') then
begin
pck:='';

buf:= hstr('14') + OidgcpPotion0 + hstr('00 00 00 00'); // обычную хилку
if (OidgcpPotion0 <> '') then SendToServerEX(NameKom);


{ buf:=hstr('04') + IDAssistTarget + Bot1X + Bot1Y + Bot1Z + hstr('00');
if NameBot1<>'' then SendToServerEX(NameBot1);
buf:=hstr('04') + IDAssistTarget + Bot2X + Bot2Y + Bot2Z + hstr('00');
if NameBot2<>'' then SendToServerEX(NameBot2);
buf:=hstr('04') + IDAssistTarget + Bot3X + Bot3Y + Bot3Z + hstr('00');
if NameBot3<>'' then SendToServerEX(NameBot3);

buf:=hstr('2F 72 05 00 00 01 00 00 00 00');
if NameBot1<>'' then SendToServerEX(NameBot1);
buf:=hstr('2F B1 04 00 00 01 00 00 00 00');
if NameBot2<>'' then SendToServerEX(NameBot2);
buf:=hstr('2F B1 04 00 00 00 00 00 00 00');
if NameBot3<>'' then SendToServerEX(NameBot3);}
exit;
end;



//NO буф МАГА по ассисту
if FromClient then
if ConnectName=NameKom then
if pck[1]+pck[2]=hstr('1B 05') then
begin

BafPPApplyChar[1]:=IDAssistTarget;
BafPPApplyBaf[1]:=bafPP[24];
BafPPApplyChar[2]:=IDAssistTarget;
BafPPApplyBaf[2]:=bafPP[5];
BafPPApplyChar[3]:=IDAssistTarget;
BafPPApplyBaf[3]:=bafPP[2];
BafPPApplyChar[4]:=IDAssistTarget;
BafPPApplyBaf[4]:=bafPP[6];
BafPPApplyChar[5]:=IDAssistTarget;
BafPPApplyBaf[5]:=bafPP[7];
BafPPApplyChar[6]:=IDAssistTarget;
BafPPApplyBaf[6]:=bafPP[8];
BafPPApplyChar[7]:=IDAssistTarget;
BafPPApplyBaf[7]:=bafPP[9];
BafPPApplyChar[8]:=IDAssistTarget;
BafPPApplyBaf[8]:=bafPP[1];
BafPPApplyChar[9]:=IDAssistTarget;
BafPPApplyBaf[9]:=bafPP[13];
BafPPApplyChar[10]:=IDAssistTarget;
BafPPApplyBaf[10]:=bafPP[14];
BafPPApplyChar[11]:=IDAssistTarget;
BafPPApplyBaf[11]:=bafPP[16];
BafPPApplyChar[12]:=IDAssistTarget;
BafPPApplyBaf[12]:=bafPP[18];
BafPPApplyChar[13]:=IDAssistTarget;
BafPPApplyBaf[13]:=bafPP[19];
BafPPApplyChar[14]:=IDAssistTarget;
BafPPApplyBaf[14]:=bafPP[20];
BafPPApplyChar[16]:='';
BafPPApplyBaf[16]:='';

BafSEApplyChar[1]:=IDAssistTarget;
BafSEApplyBaf[1]:=bafSE[2];
BafSEApplyChar[2]:=IDAssistTarget;
BafSEApplyBaf[2]:=bafSE[2];
BafSEApplyChar[3]:=IDAssistTarget;
BafSEApplyBaf[3]:=bafSE[5];
BafSEApplyChar[4]:=IDAssistTarget;
BafSEApplyBaf[4]:=bafSE[6];
BafSEApplyChar[5]:='';
BafSEApplyBaf[5]:='';

BafEEApplyChar[1]:=IDAssistTarget;
BafEEApplyBaf[1]:=bafEE[2];
BafEEApplyChar[2]:=IDAssistTarget;
BafEEApplyBaf[2]:=bafEE[2];
BafEEApplyChar[3]:=IDAssistTarget;
BafEEApplyBaf[3]:=bafEE[3];
BafEEApplyChar[4]:=IDAssistTarget;
BafEEApplyBaf[4]:=bafEE[1];
BafEEApplyChar[5]:='';
BafEEApplyBaf[5]:='';

timer4.enabled:=true;
pck:='';
exit;
end;

//UNAWARE буф ФИЗИКА по ассисту
if FromClient then
if ConnectName=NameKom then
if pck[1]+pck[2]=hstr('1B 08') then
begin

BafPPApplyChar[1]:=IDAssistTarget;
BafPPApplyBaf[1]:=bafPP[1];
BafPPApplyChar[2]:=IDAssistTarget;
BafPPApplyBaf[2]:=bafPP[2];
BafPPApplyChar[3]:=IDAssistTarget;
BafPPApplyBaf[3]:=bafPP[3];
BafPPApplyChar[4]:=IDAssistTarget;
BafPPApplyBaf[4]:=bafPP[4];
BafPPApplyChar[5]:=IDAssistTarget;
BafPPApplyBaf[5]:=bafPP[7];
BafPPApplyChar[6]:=IDAssistTarget;
BafPPApplyBaf[6]:=bafPP[8];
BafPPApplyChar[7]:=IDAssistTarget;
BafPPApplyBaf[7]:=bafPP[9];
BafPPApplyChar[8]:=IDAssistTarget;
BafPPApplyBaf[8]:=bafPP[22];
BafPPApplyChar[9]:=IDAssistTarget;
BafPPApplyBaf[9]:=bafPP[12];
BafPPApplyChar[10]:=IDAssistTarget;
BafPPApplyBaf[10]:=bafPP[13];
BafPPApplyChar[11]:=IDAssistTarget;
BafPPApplyBaf[11]:=bafPP[14];
BafPPApplyChar[12]:=IDAssistTarget;
BafPPApplyBaf[12]:=bafPP[15];
BafPPApplyChar[13]:=IDAssistTarget;
BafPPApplyBaf[13]:=bafPP[18];
BafPPApplyChar[14]:=IDAssistTarget;
BafPPApplyBaf[14]:=bafPP[19];
BafPPApplyChar[15]:=IDAssistTarget;
BafPPApplyBaf[15]:=bafPP[20];
BafPPApplyChar[16]:=IDAssistTarget;
BafPPApplyBaf[16]:=bafPP[21];
BafPPApplyChar[17]:='';
BafPPApplyBaf[17]:='';

BafSEApplyChar[1]:=IDAssistTarget;
BafSEApplyBaf[1]:=bafSE[4];
BafSEApplyChar[2]:='';
BafSEApplyBaf[2]:='';

BafEEApplyChar[1]:=IDAssistTarget;
BafEEApplyBaf[1]:=bafEE[2];
BafEEApplyChar[2]:=IDAssistTarget;
BafEEApplyBaf[2]:=bafEE[1];
BafEEApplyChar[3]:='';
BafEEApplyBaf[3]:='';


timer4.enabled:=true;
pck:='';
exit;
end;


end.


тут для твоей ситуации почти всё- лишнее но обратить внимание нужно лиш на то как прочитавается ИД банок с определенным названием.. я попробую пояснить ето.. если наполу перед тобой лежит 26 аден и рядом 19 ирон оре, то каждый ихз них считается объектом.. и имеет свой ИД.. для удобства ИД-ОБЖЕКТ.. IDOBJECT.. лежа на полу к примеру "стопка" аден имеет 1 ид подняв их они уничтожаются но в базе даннных к твоим аденам они прибавляются в стопку.. СТОПКА- одинаколвые итемы в одной ячейке (или лежа на полу в одной стопке)... если у тебя в инвенторе небыло вапще аден.. то подняв стопку аден с пола (или стрел= равносильно) то твой инвентарь пополнится новым итемом.. (ИТЕМ- предмет) об етом тебе сервер сообщит в пакете ИНВЕНТОРИ АПДЕЙТ.. далее при желании отобразить и узнать что у тебя в инвентаре ты руками жмеш кнопки (ALT+V) и сервер тебе начинает перечислять всё что у тебя хранится в инвенторе.. на примере вышеуказанного скрипта ето хорошо видно (прокоментировано).. из етоо пакета (перечисление инвенторя) нужно отсортировать то что нас интерисует.. в скрипте нас интерисовали банки разные.. но не их кол-во.. мы узнали что ИТЕМ ИД ТАКОЙТО- имеет сопоставление с ОБЖЕКТ ИД такойто.. т.е. для отображения на екране монитора аден вместо стрел нужно их отличать и ето делает сам клиент колекционируя инфу об окружающих предметах.. каждый раз при виде нового предмета (новый значит на полу лежал и ты к нему прибежал и увидел его) сервер дает тебе ИТЕМ ИД и ОБЖЕКТ ИД и кол-во.. обжект ИД- чистый рандом.. но так как данные о сопоставлении пришли в одном пакете то твой клиент запоминает ето что такойто ОБЖЭЕКТ ИД ето СТРЕЛЫ или АДЕНА.. и помнит ето до тех пор пока не придет пакет об уничтожении предмета.. (т.е. он исчез "ДЕЛЕТ ОБЖЕКТ").. ну отвлекся слегка .. хотя в етм суть.. открыв насильно инвентарь ( насильно- означает отправить серверу запрос на его открытие "ALT+V") тебе приходит длинный пакет в котором циклом перечисляются все предметы которые ты носиш с собой.. ну в начале пакета заголовок типа ИД.. а потом циклом по 36 байт описание каждого итема.. каждый итем в твоём инвентаре описавается несколькими байтами
там указывается ОБЖЕКТ ИД ( я думаю ты уже понял что ето такое)+ ИТЕМ ИД (итем ид- ето то что надо рисовать красками на екране.. адена- имеет фиксированный итем ИД.. также и стрелы фиксированный итем ИД.. всегда 1 и тот же.. ) + колво предметов в стопке + еще какието хрени.. типа: вдруг ето пушка то надо передать сведения об ее заточке и т.д. ну 36 байт там на каждый предмет отводится для его описания.. и по пакету циклом.. сделав простенький скрипт который етот пакет прокрутит циклом и выдернит из него нужные данные ты получиш то что хочеш... в скрипте выше я узновал ид банок при условии что они есть ваще.. а тебе нужно плюс к етому узнать еще кол-во их.. там кол-во рядом гдето перечисляется..

Liiion911
13.10.2009, 22:31
ничетабельно )

QaK
13.10.2009, 22:46
Liiion911, некропостер XD

LionHS
17.10.2009, 03:02
Скрипт проверял с забитым инвентарем под нехочю. Работает норм, при деиствия с деньгами он пишет в приват скок их. А я его еше подописал и те просто бегаю собираю деньги по достижении 2ккк автоматом обменивает на 1 кол. ;) Просто у мя сомнения на верность


if FromServer and (ConnectName=name)and (pck[1]=#$27)and (pck[12]=#$39)then
begin
i:=12;
k:=ReadD(i); //item ID
l:=ReadD(i); //количество адены
Say('Мои деньги:');
Say('item ID='+IntToStr(k));
Say('количество адены='+IntToStr(l));
end;


есть впечатление что можно сделать подругому,чтоб проверял еше что либо по ID.

Не понимаю, как этот скрипт может работать... У меня не работает, да и по коду это наблюдается...
а именно в строчках
Say('item ID='+IntToStr(k));
Say('количество адены='+IntToStr(l));
то есть он будет писать item ID = 57
количество адены = 57.

Пробовал исправить и дошёл максимум до этого:

const
name=''; //ник чара
//************************************************** ****************************
var
i,k,l: integer;
//************************************************** ****************************



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

end;

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

end;

procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(name);
WriteS(msg);
SendToClientEx(name);
end;



//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer and (ConnectName=name) and (pck[12]=#$39) then
begin
i:=12;
k:=ReadD(i); //item ID
l:=k; //количество адены

Say('item ID='+IntToStr(k));
Say('количество адены='+IntToStr(l));



end;
end.

В общем-то здесь не хватает чего, что выдерает из пакета #$39 количество аден. Я не нашёл как сам пакет, так и строчку с аденами в нём...
Помогайте :)

TAMBIK
17.10.2009, 03:21
что выдерает из пакета #$39 количество аден

(pck[12]=#$39) это не пакет

LionHS
17.10.2009, 19:47
Но тем не менее он пишет в личку
item ID = 57
количество адены = 57

Добавлено через 16 часов 20 минут
Ответ не дан и скрипт не работает. Ап-ап ;)

TAMBIK
18.10.2009, 15:07
LionHS,

k:=ReadD(i); //item ID
l:=ReadD(i); //количество адены

все правильно.
это у тебя

k:=ReadD(i); //item ID
l:=k; //количество адены

одно и тоже item ID
те на какие хроники надо
скрипт под interlude
да еще скрипт берет инфу из
пакета InventoryUpdate
можешь выложить пакет
мож поправим

LionHS
18.10.2009, 15:57
это у тебя

k:=ReadD(i); //item ID
l:=k; //количество адены


Исправил, теперь itemID = 57, Количество адены = 0.

Мне под хеллбаунд надо, вот пакет:

Tèï: 0x21 (InventoryUpdate)
Pàçìåð: 77+2
Âðåìÿ ïðèõîäà: 14:48:54:812
0002 h Count: 1 (0x0001)
[Íà÷àëî ïîâòîðÿþùåãîñÿ áëîêà 1/1]
0004 h UpdateType: 2 (0x0002)
0006 h ItemType1: 4 (0x0004)
0008 d ObjectID: 1076184797 (0x402546DD)
000C d ItemID: Àäåíà ID:57 (0x0039) (0x00000039)
0010 d LocationSlot: 0 (0x00000000)
0014 d Quantity: 55134637 (0x034949AD)
0018 h ItemType2: 4 (0x0004)
001A h CustomType1: 0 (0x0000)
001C h Equipped: 0 (0x0000)
001E d BodyPart: 0 (0x00000000)
0022 h EnchantLevel: 0 (0x0000)
0024 h CustType2: 0 (0x0000)
0026 h AugmentID: 0 (0x0000)
0028 h 0: 0 (0x0000)
002A d Mana: -1 (0xFFFFFFFF)
002E d AttackAttrElement: -2 (0xFFFFFFFE)
0032 d AttackAttrElementVal: 0 (0x00000000)
0036 d DefAttrFire: 0 (0x00000000)
003A d DefAttrWater: 0 (0x00000000)
003E d DefAttrWind: 0 (0x00000000)
0042 d DefAttrEarth: 0 (0x00000000)
0046 d DefAttrHoly: 0 (0x00000000)
004A d DefAttrUnholy: 0 (0x00000000)

TAMBIK
18.10.2009, 16:40
//************************************************** ****************************
begin
// при приходе от сервера пакета 21 InventoryUpdate выполнить
if FromServer and (ConnectName=name) and (pck[1]=#$21) then begin
i:=12; // пропускаем
k:=ReadD(i); // считываем
i:=i+4; // пропускаем
if ( k=57) then begin // если к равно ID предмета выполнить
l:=ReadD(i); // считываем
Say('Мои деньги:');
Say('item ID='+IntToStr(k));
Say('количество адены='+IntToStr(l));
end;
end;

LionHS
18.10.2009, 16:47
Спасибо, работает.
А можно с комментариями?

TAMBIK
19.10.2009, 11:02
Спасибо, работает.
А можно с комментариями?

комментарий

LaCocaNostra
21.10.2009, 22:21
Люди у меня проблема....Я в вашей сфере 2 день) с использованием скриптов я разобрался.....а вот с пакетами голову ломаю ппц...! Не могли бы вы мне помочь буду очень благодарен! если кто решится стукните в аську 362-522-298 Заранее Спасибо!