PDA

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


Niksan
12.01.2009, 20:43
Вообщем у меня вопрос:
вот у меня есть пакет на покупку нескольоких Ы блес вип точек, вот пакет:

1F 90 13 00 00 0E 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00 B1 19 00 00 01 00 00 00

дальше вот обмен кола на аденки

A7 47 F4 10 00 40 0D 03 00 01 00 00 00 00 00 00 00 00 00 00 00

вопрос номер 1.
Что нужно написать в скрипте что бы это выполнялось.
я хочу совместить скрипт на автоматическую заточку оружия, с автомотической обмена КОЛоф на аденки и покупкой Ы вип свитков

вот сам собственно скрипт на заточку оружия:


//Автоматизация заточки предметов до необходимого уровня
program zatochka_IL;

{Затачиваем поочереди все предметы с WeaponID пока не переломаем или не заточим

Работа проверена на локальном Интерлюда сервере

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

Социальное действие YES - начать заточку предметов
Социальное действие NO - остановиться

Enjoy!

Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя.}

const
Name='Niksan'; //Вписать сюда имя чара
ScrollID=6577; //957 ScrollID скролла заточки
ItemID=6580; //129 ItemIDID затачиваемого предмета
MaxEnchLvl=15; //уровень заточки который требуется достич
max=200; //количество слотов в инвентаре чара, максимально - 250

var
ItemBase: array[1..2,1..max] of integer; //ItemID ObjID, lvl
ScrollBase: array[1..max] of integer; //Scroll
add: boolean; //прошла заточка?
timer: TTimer;
CurEnchLvl, ColvoItem, ColvoScrl, CurItem, CurScrl: integer;
SocialID:integer; // вспомогательная

procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimerHP;
timer.enabled:=false;
timer.interval:=1500; //время задержки
add:=false;
for i:=1 to max do begin
//очищаем масив
//Say('очищаем масив');
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
end;

//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;

//************************************************** ****************************
procedure Free; //Вызывается при выключении скрипта
begin
ItemBase:=nil;
ScrollBase:=nil;
timer.Free;
end;

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

//************************************************** ****************************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
var
i, ss, ww, j, ObjID, ItmID, lvl, ListCount: integer;
begin
ss:=1; //индекс в массиве скроллов
ww:=1; //индекс в массиве предметов
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
if ListCount>max then ListCount:=max;
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
for i:=1 to ListCount do begin
ObjID:=ReadD(j); //ObjectID
ItmID:=ReadD(j); //ItemID
j:=j+14;
Lvl:=ReadD(j); //Level
case ItmID of
ScrollID: begin
ScrollBase[ss]:=ObjID;
inc(ss);
Say('ColvoScrl='+IntToStr(ss));
end;
ItemID: begin
ItemBase[1,ww]:=ObjID;
ItemBase[2,ww]:=lvl;
inc(ww);
Say('ColvoItem='+IntToStr(ww));
end;
end;
j:=j+10;
end;
ColvoItem:=ww-1;
ColvoScrl:=ss-1;
Say('>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl));
end;

//************************************************** ****************************
procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, ss, ww, ObjID, ItmID, Lvl, ListCount, UpdType: integer;
begin
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - Lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
// Say('Апдейт базы!');
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItmID:=ReadD(j);
j:=j+14;
Lvl:=ReadH(j);
Say('Предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
case UpdType of
1:case ItmID of
ItemID: begin
ColvoItem:=ColvoItem+1;
Say('Добавили предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
for ii:=1 to max do
if ItemBase[1,ii]=0 then begin ItemBase[1,ii]:=ObjID; ItemBase[2,ii]:=lvl; end;
end;
ScrollID: begin
ss:=ss+1;
Say('Добавили скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID));
for ii:=1 to max do if ScrollBase[ii]=0 then ScrollBase[ii]:=ObjID;
end;
end;
2:case ItmID of
ItemID:
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then ItemBase[2,ii]:=lvl;
ScrollID:
Say('Внимание! Изменения в скролле!?');
end;
//удален
3:case ItmID of
ItemID: begin
ColvoItem:=ColvoItem-1;
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then begin ItemBase[1,ii]:=0; ItemBase[2,ii]:=0; end;
Say('Удаляем предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
end;
ScrollID: begin
ColvoScrl:=ColvoScrl-1;
for ii:=1 to max do
if ScrollBase[ii]=ObjID then ScrollBase[ii]:=0;
Say('Удаляем скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID));
end;
end;
end;
j:=j+10; //следующее смещение для действия с предметом 1-добавлен 2-изменен 3-удален
end;
Say('>>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl));
end;

//************************************************** ****************************
function GetNextItemID: integer;
//Выдает ObjID предмета, если не найден в базе, выдает -1,
//достигли макс уровня заточки -2, подбираем минимальный текущий уровень заточки -3
var
i: integer;
begin
Result:=-1;
if CurEnchLvl>=MaxEnchLvl then begin
Result:=-2;
exit;
end;
for i:=1 to max do begin
//находим первый подходящий предмет
if (ItemBase[1,i]<>0) and (ItemBase[2,i]<=CurEnchLvl) then begin
Result:=ItemBase[1,i];
exit;
end;
end;
inc(CurEnchLvl);
Result:=-3;
end;

//************************************************** ****************************
function GetNextScroll: integer;
//Выдает ObjID скролла, если предмет не найден в базе, выдает -1
var
i: integer;
begin
Result:=-1;
for i:=1 to max do begin
//находим первый подходящий предмет
if (ScrollBase[i]<>0) then begin
Result:=ScrollBase[i];
exit;
end;
end;
end;

//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;

//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServerEx(Name);
end;

//************************************************** ****************************
procedure OnTimerHP(Sender: TObject);
var
Item, scrl:integer;
begin
if ColvoScrl=0 then begin
Say('Кончились скроллы! Прервано!');
timer.enabled:=false;
exit;
end;
if ColvoItem=1 then begin
Say('Остался последний предмет! Прервано!');
timer.enabled:=false;
exit;
end;
Scrl:=GetNextScroll;
if scrl=-1 then begin
Say('Нет такой заточки! Прервано!');
timer.enabled:=false;
exit;
end;
Item:=GetNextItemID;
case Item of
-1: begin
Say('Нет такого предмета! Прервано!');
timer.enabled:=false;
exit;
end;
-2: begin
Say('Достигли максимальный уровень заточки! Прервано!');
timer.enabled:=false;
exit;
end;
-3: begin
Say('Подбираем текущий уровень заточки!');
timer.enabled:=true;
exit;
end;
end;
//************************************************
UseItem(Scrl);
RequestEnchantItem(Item);
//************************************************
Say('Заточили предмет! ItemID='+IntToStr(Item));
end;

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

//************************************************** **************************
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
SocialID:=ReadD(2);
case SocialID of
//социальное действие Yes для начала затачивания
6: begin
CurEnchLvl:=0;
Say('Команда Старт!!!');
timer.enabled:=true;
exit;
end;
//социальное действие No для окончания
5: begin
Say('Команда Стоп!!!');
timer.enabled:=false;
exit;
end;
end;
end;

//************************************************** **************************
if FromServer then
case pck[1] of
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27: UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета
end;

end.

теперь вопрос номер 2. как это осуществить.
Я думаю что по истечению заточек (я точу тоьлко блэзами) нужно что бы КОЛы поменялись на аденки, а на аденки купились точки, и потом снова началось заточка оружия.... Зацикливание если будет, мне как то это мало волнует...))) (думаю в коцне скрипта (уже после очередной закупки точек) можно поставить соц действия YES , и он о5 начнет точить)

8tomat8
16.02.2009, 00:26
//Автоматизация заточки предметов до необходимого уровня
program zatochka_IL;

{Затачиваем поочереди все предметы с WeaponID пока не переломаем или не заточим

Работа проверена на локальном Интерлюда сервере

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

Социальное действие YES - начать заточку предметов
Социальное действие NO - остановиться

Enjoy!

Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя.}

const
Name='Niksan'; //Вписать сюда имя чара
ScrollID=6577; //957 ScrollID скролла заточки
ItemID=6580; //129 ItemIDID затачиваемого предмета
MaxEnchLvl=15; //уровень заточки который требуется достич
max=200; //количество слотов в инвентаре чара, максимально - 250

var
ItemBase: array[1..2,1..max] of integer; //ItemID ObjID, lvl
ScrollBase: array[1..max] of integer; //Scroll
add: boolean; //прошла заточка?
timer: TTimer;
CurEnchLvl, ColvoItem, ColvoScrl, CurItem, CurScrl: integer;
SocialID:integer; // вспомогательная

procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimerHP;
timer.enabled:=false;
timer.interval:=1500; //время задержки
add:=false;
for i:=1 to max do begin
//очищаем масив
//Say('очищаем масив');
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
end;

//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;

//************************************************** ****************************
procedure Free; //Вызывается при выключении скрипта
begin
ItemBase:=nil;
ScrollBase:=nil;
timer.Free;
end;

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

//************************************************** ****************************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
var
i, ss, ww, j, ObjID, ItmID, lvl, ListCount: integer;
begin
ss:=1; //индекс в массиве скроллов
ww:=1; //индекс в массиве предметов
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
if ListCount>max then ListCount:=max;
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
for i:=1 to ListCount do begin
ObjID:=ReadD(j); //ObjectID
ItmID:=ReadD(j); //ItemID
j:=j+14;
Lvl:=ReadD(j); //Level
case ItmID of
ScrollID: begin
ScrollBase[ss]:=ObjID;
inc(ss);
Say('ColvoScrl='+IntToStr(ss));
end;
ItemID: begin
ItemBase[1,ww]:=ObjID;
ItemBase[2,ww]:=lvl;
inc(ww);
Say('ColvoItem='+IntToStr(ww));
end;
end;
j:=j+10;
end;
ColvoItem:=ww-1;
ColvoScrl:=ss-1;
Say('>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl));
end;

//************************************************** ****************************
procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, ss, ww, ObjID, ItmID, Lvl, ListCount, UpdType: integer;
begin
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - Lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
// Say('Апдейт базы!');
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItmID:=ReadD(j);
j:=j+14;
Lvl:=ReadH(j);
Say('Предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
case UpdType of
1:case ItmID of
ItemID: begin
ColvoItem:=ColvoItem+1;
Say('Добавили предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
for ii:=1 to max do
if ItemBase[1,ii]=0 then begin ItemBase[1,ii]:=ObjID; ItemBase[2,ii]:=lvl; end;
end;
ScrollID: begin
ss:=ss+1;
Say('Добавили скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID));
for ii:=1 to max do if ScrollBase=0 then ScrollBase[ii]:=ObjID;
end;
end;
2:case ItmID of
ItemID:
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then ItemBase[2,ii]:=lvl;
ScrollID:
Say('Внимание! Изменения в скролле!?');
end;
//удален
3:case ItmID of
ItemID: begin
ColvoItem:=ColvoItem-1;
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then begin ItemBase[1,ii]:=0; ItemBase[2,ii]:=0; end;
Say('Удаляем предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
end;
ScrollID: begin
ColvoScrl:=ColvoScrl-1;
for ii:=1 to max do
if ScrollBase[ii]=ObjID then ScrollBase[ii]:=0;
Say('Удаляем скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID));
end;
end;
end;
j:=j+10; //следующее смещение для действия с предметом 1-добавлен 2-изменен 3-удален
end;
Say('>>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl));
end;

//************************************************** ****************************
function GetNextItemID: integer;
//Выдает ObjID предмета, если не найден в базе, выдает -1,
//достигли макс уровня заточки -2, подбираем минимальный текущий уровень заточки -3
var
i: integer;
begin
Result:=-1;
if CurEnchLvl>=MaxEnchLvl then begin
Result:=-2;
exit;
end;
for i:=1 to max do begin
//находим первый подходящий предмет
if (ItemBase[1,i]<>0) and (ItemBase[2,i]<=CurEnchLvl) then begin
Result:=ItemBase[1,i];
exit;
end;
end;
inc(CurEnchLvl);
Result:=-3;
end;

//************************************************** ****************************
function GetNextScroll: integer;
//Выдает ObjID скролла, если предмет не найден в базе, выдает -1
var
i: integer;
begin
Result:=-1;
for i:=1 to max do begin
//находим первый подходящий предмет
if (ScrollBase[i]<>0) then begin
Result:=ScrollBase[i];
exit;
end;
end;
end;

//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;

//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServerEx(Name);
end;

//************************************************** ****************************
procedure OnTimerHP(Sender: TObject);
var
Item, scrl:integer;
begin
if ColvoScrl=0 then begin
///Say('Кончились скроллы! Прервано!');
timer.enabled:=false;
buf:=('A7 47 F4 10 00 40 0D 03 00 01 00 00 00 00 00 00 00 00 00 00 00 ') /// покупает Адену (продает 1 КОЛ)
SendToServer;
buf:=('Пакет на покупку скролов');
SendToServer;
exit;
end;
if ColvoItem=1 then begin
Say('Остался последний предмет! Прервано!');
timer.enabled:=false;
exit;
end;
Scrl:=GetNextScroll;
if scrl=-1 then begin
Say('Нет такой заточки! Прервано!');
timer.enabled:=false;
exit;
end;
Item:=GetNextItemID;
case Item of
-1: begin
Say('Нет такого предмета! Прервано!');
timer.enabled:=false;
exit;
end;
-2: begin
Say('Достигли максимальный уровень заточки! Прервано!');
timer.enabled:=false;
exit;
end;
-3: begin
Say('Подбираем текущий уровень заточки!');
timer.enabled:=true;
exit;
end;
end;
//************************************************
UseItem(Scrl);
RequestEnchantItem(Item);
//************************************************
Say('Заточили предмет! ItemID='+IntToStr(Item));
end;

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

//************************************************** **************************
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
SocialID:=ReadD(2);
case SocialID of
//социальное действие Yes для начала затачивания
6: begin
CurEnchLvl:=0;
Say('Команда Старт!!!');
timer.enabled:=true;
exit;
end;
//социальное действие No для окончания
5: begin
Say('Команда Стоп!!!');
timer.enabled:=false;
exit;
end;
end;
end;

//************************************************** **************************
if FromServer then
case pck[1] of
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27: UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета
end;

end.


Так Должно работать, токо я не понимаю что это за странный пакет?Оо чото в нем не правильно. Купи на 1 КОЛ столько сколько возможно точек и выложи пакет сюда, только покупай за 1 раз, а не по одной! :diablo:

[I]Добавлено через 1 минуту
Этот скрипт не закончеН!!! там надо поставить пакет на покупку, жду

Niksan
26.02.2009, 21:11
Ура =)) мне ответили ))

суть вот в чем ) там точки покупаются не на колы, а на Аденки.. А аденки можно получить только когда обменяю колы на них (1 кол = 1кккк аден) в инвтаре там место типо мало ) я решил проблему на счет закупки заточек))... у меня теперь другая проблема =)))


как сделать так, чтобы он точил до 4 обычной точкой, а после 4 блэзовской ?? имеется в виду срипте как это сделать =))) то етсь в скрипте уже не надо предусматривать автоматической закпуки точек))


p.s. осуществил заупку точек и обмен колов с помощью посылки пакетов через определенное время)) просто умножил кол-во точек которое можно купить на время задержки)) и норм получилось

QaK
27.02.2009, 08:29
Niksan, в разделе "жесткий скриптинг" есть тема "Автоматизация заточки" - там поищи.

Добавлено через 1 минуту
как сделать так, чтобы он точил до 4 обычной точкой, а после 4 блэзовской смотри по ИтемИД заточки и уровню заточеной весчи из пакетов InventoryInit,InventoryUpdate.