Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 11.02.2010, 02:19   #1
Пользователь
 
Регистрация: 11.02.2010
Сообщений: 31
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
ogogo пока неопределено
По умолчанию Кристаллизация

Код:
//----------------------------------------------------------------
const
  ItemID = 9455; // ItemID шмотки
  myname = 'ник;
//----------------------------------------------------------------
var
  ItemBase: array of integer;
  Crystal: boolean;                                             
  //------------------------------------------------------------------
procedure SendMsg2(msg:string);
begin 
  buf:=#$4A;
  WriteD(0);
  WriteD(10);
  WriteS('');
  WriteS(msg);
  SendToClientEx(myname);
end;
//----------------------------------------------------------------
procedure Init; //Вызывается при включении скрипта
begin
  SendMsg2('Начало инициализации скрипта, откройте инвентарь' );
  Crystal:=false;
end;
//-----------------------------------------------------------------
procedure Free; //Вызывается при выключении скрипта
begin

end;

//----------------------------------------------------------------
procedure CreateItemBase; //Создает базу ObjectID и ItemID, опять же не проверяет пакет на правильность для экономия ресурсов
var
  i,j: integer;
begin
  j:=8;
  SetLength(ItemBase,int((length(pck)-5)/14)); //1ый байт - идентификатор пакета, следующие 4 байта хз, далее для каждого итема отводится 28 байт, размер массива должен быть в 2 раза больше, чем итемов.
  for i:=0 to int(Length(ItemBase)/2-1) do begin
    ItemBase[i*2]:=ReadD(j);
    ItemBase[i*2+1]:=ReadD(j);
    j:=j+40;
  end;
end;
//---------------------------------------------------------
procedure UpdateItemBase; //Удаляет без проверки, использовать аккуратно
var
  i: integer;
begin
  for i:=0 to int(Length(ItemBase)/2-1) do
    if (ItemBase[i*2]=ReadD(8)) or (ItemBase[i*2+1]=ReadD(12)) then begin
      ItemBase[i*2]:=0;
      ItemBase[i*2+1]:=0;
      Exit;
    end
end;
//---------------------------------------------------------
function GetObjID(ItemID:integer): integer; //Выдает ObjectID по его ItemID, если ItemID не найден в базе, выдает -1
var
  i: integer;
begin
  for i:=0 to int(Length(ItemBase)/2-1) do
    if (ItemBase[i*2+1]=ItemID) then begin
      Result:=ItemBase[i*2];
      Exit;
    end;
  Result:=-1;
  end;
//-----------------------------------------------------------
procedure Crystallize(ObjectID: integer);
begin
  buf:=#$2F;
  WriteD(ObjectID);
  WriteF(1);
  SendToServer;
end;
//---------------------------------------------------------
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен

begin
  if FromServer and (pck[1]=#$11) then CreateItemBase; //создание базы предметов
  if (length(ItemBase)=0) then exit; // если нет базы итемов, скрипт дальше не пустит
  if FromServer and (pck[1]=#$21) and (pck[4]=#$31) then begin
    UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета
   

 if Crystal and (GetObjID(ItemID)>0) then Crystallize(GetObjID(ItemID))
    else begin
      Crystal:=false;
      SetLength(ItemBase,0);
      SendMsg('Весь шмот кристаллизован');
    end;
  end;
  if FromClient and (pck=HStr('56 0C 00 00 00 00 00 00 00 00 ')) then 
  begin
    SendMsg('Панеслася!!!');
    if (GetObjID(ItemID)>0) then begin
      Crystal:=true;
      Crystallize(GetObjID(ItemID));
    end else SendMsg('Нужная шмотка не найдена');

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

Последний раз редактировалось ogogo, 12.02.2010 в 23:31.
ogogo вне форума   Ответить с цитированием
Старый 16.02.2010, 02:28   #2
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Можно пакетом
delphi Код:
//RequestItemList вызываем инвентарь   buf:=hstr('14');   SendToServerEx(Name);
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 17:48.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!