PDA

Просмотр полной версии : здрасте)


dyh9l
16.07.2010, 16:23
Как можно поставить условие в скрипте что если адены меньше чем 10кк то он в гм шопе обменивает манетку на 2ккк.
Это пакет от ГМ шопа до обменника (меню):
21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 35 00 35 00 38 00 00 00
Это пакет обмена монетки на 2ккк:
A7 2E 02 00 00 43 00 00 00 01 00 00 00

QaK
16.07.2010, 17:20
dyh9l, делаешь некий массив, для интвентаря, где хранится итем Ид, обждект Ид и количчество итемов, ну и при каждом изменении инветнаря проверяешь, если Итем ИД = 87 (Адена, вроде) and Количество <10кк then топаешь к нужному НПЦ, выделяешь его, вызываешь лиалог обмена, меняешь.

Breadfan
16.07.2010, 18:48
да у него там готовые конструкции с подсчетом свитков, по их подобию и под 57 сделать можно

Fer123
17.07.2010, 13:09
Нашел у себя скрипт, только он наоборот при достижении 2ккк меняет их на какой-то слиток наверно. Ну я думаю ты сможешь переделать...

Const
Name='ArchDevil';
Max=300;
var
ItemBase : array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
timer:TTimer;
procedure Init; //Вызывается при включении скрипта
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=true;
timer.interval:=1000; //время задержки
buf:=#$0F;
SendToServerEx(Name);
end;

procedure CreateItemBase;
var
i, j, ListCount: integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //kol-vo
ItemBase[4,i]:=0; //lvl
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
itemBase[1,i]:=ReadD(j); //OID
itemBase[2,i]:=ReadD(j); //ItemID
itemBase[3,i]:=ReadD(j); //кол-во
inc(j,10);
itemBase[4,i]:=ReadH(j);//EnchantLevel
inc(j,12);
end;
end;
//......................................
//************************************************** ****************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, OID, ID, Count, ListCount, UpdType, lvl: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2);
j:=4;
for ii:=1 to ListCount do begin
add:=false; //Ели додумался изза чего не добавляет сразу несколько предметов в базу
UpdType:=ReadH(j);
ReadH(j); //ItemType1
OID:=ReadD(j); //ObjectID
ID:=ReadD(j); //ItemID
Count:=ReadD(j); //кол-во
inc(j,10);
lvl:=ReadH(j);
case UpdType of
1: begin
for i:=1 to max do begin
if (ItemBase[1,i]=0) and (add=false) then begin
ItemBase[1,i]:=OID;
ItemBase[2,i]:=ID;
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
add:=true;
end;
end;
end;
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
end;
end;
end;
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
inc(j,10);
end;
end;

function GetItem(ID, FieldIn, FieldOut : integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if ItemBase[FieldIn,i]=ID then begin
result:=ItemBase[FieldOut,i]; // itemOID
exit;
end;
result:=0;
end;

procedure OnTimer(Sender: TObject);
begin
if GetItem(57,2,3)>2000000000 then begin
buf:=#$A7;
WriteD(9003);
WriteD(100000);
WriteD(1);
WriteD(0);
WriteD(0);
SendToServerEx(name);
end;
end;

begin
if FromServer and (ConnectName=Name) then
case pck[1] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
#$27: InventoryUpdate; //Обновление базы
end; //end от case!!!
end.