Показать сообщение отдельно
Старый 06.04.2008, 19:20   #343
Гость
 
Сообщений: n/a
По умолчанию

Люди помогите плиз, пытался найти этот скрипт переписаный под камаель, не получилось...

delphi Код:
//Автоматизация заточки предметов до необходимого уровня by NLObP //Затачиваем поочереди все предметы с Weapon ID пока не переломаем или не заточим //Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS" //Необходимо затариться оружием, заточками и валерьянкой //Открываем инвентарь для инициализации скрипта //Социальное действие YES начать //Социальное действие NO остановиться //Enjoy! {Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.} //****************************************************************************** const   Name='NLObP';   Scroll=957; // 957 - ItemID Crystall Scroll Enchant Weapon (Grade D)   Weapon=129; // 129 - ItemID Sword of Revolution D-grade   MaxEnchLvl=20; //max уровень заточки   max=250;    //max количество предметов в базе var //  WpnObjID:  array[1..maxwpn,1..maxwpn] of integer;    //Weapon ObjID   WpnBase:  array[1..2,1..max] of integer;    //Weapon ObjID,lvl   ScrlBase:  array[1..max] of integer;    //Scroll ObjID   add: boolean; //прошла заточка?   timer: TTimer;   CurEnchLvl, ColvoWpn, ColvoScrl, CurWpn, CurScrl: integer; //****************************************************************************** procedure Init; //Вызывается при включении скрипта var   i:integer; begin   //Enchant:=false;   CurEnchLvl:=0;   timer:=TTimer.Create(nil);   timer.OnTimer:=@OnTimerHP;   timer.enabled:=false;   timer.interval:=2500; //время задержки   Say('Для инициализации скрипта, откройте инвентарь'); end; //****************************************************************************** procedure Free; //Вызывается при выключении скрипта begin   WpnBase:=nil;   ScrlBase:=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, ItemID, 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      ItemID:=ReadD(j);    //ItemID      j:=j+14;      Lvl:=ReadD(j);    //Level      case ItemID of         scroll: begin             ScrlBase[ss]:=ObjID;             ss:=ss+1;             //Say('ColvoScrl='+IntToStr(ss));         end;         weapon: begin             WpnBase[1,ww]:=ObjID;             WpnBase[2,ww]:=lvl;             ww:=ww+1;             //Say('ColvoWpn='+IntToStr(ww));         end;      end;     j:=j+2; //для С4 //    j:=j+10; //для Интерлюдии   end;   ColvoWpn:=ww-1;   ColvoScrl:=ss-1;   Say('>ColvoWpn='+IntToStr(ColvoWpn)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl)); end; //****************************************************************************** procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID var   i, ii, j, ss, ww, ObjID, ItemID, 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);     ItemID:=ReadD(j);     j:=j+14;     Lvl:=ReadH(j); //    Say('Предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));     case UpdType of       1:case ItemID of           weapon: begin             ColvoWpn:=ColvoWpn+1;             //Say('Добавили предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(weapon));             for ii:=1 to max do               if WpnBase[1,ii]=0 then begin WpnBase[1,ii]:=ObjID; WpnBase[2,ii]:=lvl; end;           end;           scroll: begin             ss:=ss+1;             //Say('Добавили скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(scroll));             for ii:=1 to max do               if ScrlBase[ii]=0 then ScrlBase[ii]:=ObjID;           end;       end;       2:case ItemID of           weapon:             for ii:=1 to max do               if WpnBase[1,ii]=ObjID then WpnBase[2,ii]:=lvl;           scroll:             //Say('Внимание! Изменения в скролле!?');       end;       //удален       3:case ItemID of           weapon: begin              ColvoWpn:=ColvoWpn-1;              for ii:=1 to max do               if WpnBase[1,ii]=ObjID then begin WpnBase[1,ii]:=0; WpnBase[2,ii]:=0; end;               //Say('Удаляем предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(weapon));           end;           scroll: begin              ColvoScrl:=ColvoScrl-1;              for ii:=1 to max do               if ScrlBase[ii]=ObjID then ScrlBase[ii]:=0;               //Say('Удаляем скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(scroll));           end;       end;     end;     j:=j+2; //для С4 //    j:=j+10; //для Интерлюдии   end;   Say('>>ColvoWpn='+IntToStr(ColvoWpn)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl)); end; //****************************************************************************** function GetNextWeapon: 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 (WpnBase[1,i]<>0) and (WpnBase[2,i]=CurEnchLvl) then begin       Result:=WpnBase[1,i];       exit;     end;   end;   CurEnchLvl:=CurEnchLvl+1;   Result:=-3; end; //****************************************************************************** function GetNextScroll: integer; //Выдает ObjID скролла, если  не найден в базе, выдает -1 var   i: integer; begin   Result:=-1;   for i:=1 to max do begin     //находим первый подходящий предмет     if (ScrlBase[i]<>0) then begin       Result:=ScrlBase[i];       exit;     end;   end; end; //****************************************************************************** procedure UseItem(ObjectID: integer); begin   buf:=#$14;   WriteD(ObjectID);   WriteD(0);   SendToServerEx(Name); end; //****************************************************************************** procedure RequesEnchantItem(ObjectID: integer); begin   buf:=#$58;   WriteD(ObjectID);   SendToServerEx(Name); end; //****************************************************************************** procedure OnTimerHP(Sender: TObject); var   wpn, scrl:integer; begin     if ColvoScrl=0 then begin       Say('Кончились скроллы! Прервано!');       timer.enabled:=false;       exit;     end;     if ColvoWpn=1 then begin       Say('Остался последний предмет! Прервано!');       timer.enabled:=false;       exit;     end;     Scrl:=GetNextScroll;     if scrl=-1 then begin       Say('Нет такой заточки! Прервано!');       timer.enabled:=false;       exit;     end;     Wpn:=GetNextWeapon;     case wpn 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);     RequesEnchantItem(Wpn);     //************************************************     Say('Заточили предмет! Weapon='+IntToStr(Wpn)); end; //****************************************************************************** // вызывается при приходе каждого пакета, если скрипт включен //****************************************************************************** begin   //****************************************************************************   //не обрабатываем пустые пакеты   if pck='' then exit;   //****************************************************************************   //социальное действие yes для начало точки   if FromClient and (ConnectName=Name) and (pck=HStr('1B 06 00 00 00')) then begin     CurEnchLvl:=0;     Say('Команда Старт!!!');     timer.enabled:=true;   end;   //****************************************************************************   //социальное действие no для начало точки   if FromClient and (ConnectName=Name) and (pck=HStr('1B 05 00 00 00')) then begin     Say('Команда Стоп!!!');     timer.enabled:=false;   end;   //****************************************************************************   //ItemList   if FromServer and (ConnectName=Name) and (pck[1]=#$1B) then CreateItemBase; //создание базы предметов //  if (ColvoWpn=0) or (ColvoScrl=0) then exit; //если нет базы итемов, скрипт дальше не пустит   //****************************************************************************   //если удалились предметы, стираем в базе предметов пары ObjectID - ItemID   if FromServer and (ConnectName=Name) and (pck[1]=#$27) then UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета end.

При запуске скрипта вылетает табличка Access violation at address 0052B595 in module "l2phx.exe". Read of address 45453338

Последний раз редактировалось Grinch, 21.05.2008 в 16:20. Причина: [ HIGHLIGHT="delphi" ]код[ /HIGHLIGHT ]
  Ответить с цитированием