Вход

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


dyh9l
20.07.2010, 04:15
Вот пытаюсь сделать скрипт, суть проста:
Когда чар танцует - подтверждается торг
через секунду должен закрыться клиент

Пример того что я попробывал набросать но не получилось использовать в деле:

begin
if FromClient and(pck=HStr('1B 0C 00 00 00')) then begin - это пакет танца
buf:=HStr('17 01 00 00 00'); - это пакет подтвеждение торга
delay(600); - 1.5 сек.
buf:=HStr('09'); - это пакет выхода из игры
SendToServerEx('q1w2e3r4a1s2d3f4'); - ник чара
end;
end.

Добавлено через 1 минуту
Торг подтверждается, клиент не вылетает, либо клиент вылетает и торг не подтверждается

Добавлено через 10 минут
begin
if FromClient and(pck=HStr('1B 0C 00 00 00')) then begin
buf:=HStr('17 01 00 00 00');
end;

if FromClient and(pck=HStr('17 01 00 00 00')) then begin
buf:=HStr('09');
end;
SendToServerEx('q1w2e3r4a1s2d3f4');
end.
так тоже не выходит

Добавлено через 6 минут
И еще если у меня пакет aa bb cc dd ff и в нем всегда разное bb можно его какими нить ** заменить, чтоб всегда не смотрело на значение bb

Fer123
20.07.2010, 11:03
if FromClient and(pck=HStr('1B 0C 00 00 00')) then begin - это пакет танца
buf:=HStr('17 01 00 00 00'); - это пакет подтвеждение торга
SendToServerEx('q1w2e3r4a1s2d3f4'); - ник чара
delay(600); - 1.5 сек.
buf:=HStr('09'); - это пакет выхода из игры
SendToServerEx('q1w2e3r4a1s2d3f4'); - ник чара
end;
end.

dyh9l
20.07.2010, 13:07
без бегина?))

Fer123
20.07.2010, 13:09
с бегином

dyh9l
20.07.2010, 13:23
с бегином

Ты вобще молочина :) Просто от всей души тебе спс, а можно что ли сделать когда из пакета aa bb cc dd ff всегда меняется bb т.е не смотрело на его значение

Fer123
20.07.2010, 13:27
да например pck[1]=aa, pck[2]=bb, pck[3]=cc, pck[4]=dd
If FromServer and (pck[1]=aa) and (pck[3]=dd) and .... then

dyh9l
20.07.2010, 13:37
Вот смотри у меня 4 пакета:
12 98 2A 5A 40 01 00 00 00 6E 46 01 00 92 D0 00 00 35 FA FF FF
12 5D C2 58 40 01 00 00 00 71 46 01 00 96 D0 00 00 44 FA FF FF
12 1A 25 5A 40 01 00 00 00 97 46 01 00 72 D0 00 00 35 FA FF FF
12 AE D3 58 40 01 00 00 00 70 46 01 00 9B D0 00 00 42 FA FF FF
Как видиш значения скачут

Добавлено через 3 минуты
Моё условие будет выглядеть так?
if fromserver and (pck[1]=12) and (pck[4]=40) and (pck[5]=01) и т.д.?

Fer123
20.07.2010, 13:37
А что тебе сделать с ними надо ?

dyh9l
20.07.2010, 13:38
Я хочу чтобы при соц действие "Привет" выкинуло лук Shining Bow это пакеты на дроп лука

Fer123
20.07.2010, 13:42
нужно вести базу инвентаря... и по условию if FromClient and(pck=HStr('1B 0C 00 00 00')) then begin - это пакет танца
отсылать пакет RequestDropItem:d(ObjectID)d(Count)d(X)d(Y)d(Z)
ObjectID брать из базы
x,y,z взять 0, тогда выкинет предмет под себя

dyh9l
20.07.2010, 13:43
Тоесть ставив ИД шины и координаты под 0? а если у него пару шин будет?

Fer123
20.07.2010, 13:46
выберется ближайшая из базы
вот так создается база предметов
http://coderx.ru/showpost.php?p=99386&postcount=4
с помощью этой функции GetItem(ид шины,2,1) мы узнаем objID шины

dyh9l
20.07.2010, 13:51
у мну есть ИД от шины) ItemID = 6594 ;

Fer123
20.07.2010, 13:56
Const
Name='ArchDevil'; //имя измени
Max=80; // и ко-лво слотов в инвентаре
var
ItemBase : array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
procedure Init; //Вызывается при включении скрипта
begin
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,4);
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,2);
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;

begin
if FromClient and (ConnectName=Name) and (pck=HStr('1B 0C 00 00 00')) then begin
if GetItem(6594,2,1)<>0 then begin
buf:=#$12;
WriteD(GetItem(6594,2,1));
WriteD(1);
WriteD(0);
WriteD(0);
WriteD(0);
SendToServerEx(Name);
end;
end;
if FromServer and (ConnectName=Name) then
case pck[1] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
#$27: InventoryUpdate; //Обновление базы
end; //end от case!!!
end.

dyh9l
20.07.2010, 14:06
вписал ник, запустил скрипт нечего не произошло, клиент с4)

Fer123
20.07.2010, 14:11
я думал интерлюд... Изменил под с4 попробуй

dyh9l
20.07.2010, 14:42
нехочет выкидывать, говорит типа далеко)

Fer123
20.07.2010, 15:17
хм значит надо реальные координаты... тогда надо еще выдирать координаты из пакета validate position...