а как будет выглядик скрипт но то чтоб :
1 Покупал 20 итемов пакет =SKIP=
2 Продавал 20 итемов которые купил
просто у нас на сервере ГМ шоп багонутый :P а клацать уже надоело
купить то купит, а продавать замаеца, ибо у купленного будет меняца ID. на Интерлюде яве так по крайней мере.
Добавлено спустя 2 минуты 13 секунд:
Re: ДА БУДЕТ БОТ!
помогите адаптировать скрипт "инвентаризации" выложенный на старом фоурме, под IT яву. неделю уже бь.сь, ниче не поулчается (
зы: VORON , ты обешал как появится свободное время, покопаться в скрипте на автоенчант :oops:
а как будет выглядик скрипт но то чтоб :
1 Покупал 20 итемов пакет =SKIP=
2 Продавал 20 итемов которые купил
просто у нас на сервере ГМ шоп багонутый :P а клацать уже надоело
купить то купит, а продавать замаеца, ибо у купленного будет меняца ID. на Интерлюде яве так по крайней мере.
У вещей ItemID всегда постоянный, а ObjectID разный. Вот по ItemID и надо находить свои вещи в инвентаре.
Есть функция GetObjID(ItemID) или подобная, которая возвращает ObjectID. Сделай перебор в цикле, пока не найдешь все нужные вещи. Сохрани в массиве. Потом с ними будешь работать.
Цитата:
помогите адаптировать скрипт "инвентаризации" выложенный на старом фоурме, под IT яву. неделю уже бь.сь, ниче не поулчается (
зы: VORON , ты обешал как появится свободное время, покопаться в скрипте на автоенчант :oops:
Что конкретно и в каком скрипте, пиши. Может подскажем, что не правильно.
А я выкладывал здесь доработанный скрипт на заточку, который точит все вещи с одним ItemID вне зависимости от ObjectID. Не смотрел?
А я выкладывал здесь доработанный скрипт на заточку, который точит все вещи с одним ItemID вне зависимости от ODjID. Не смотрел?
я именно про него и говорю ) про твой.
Что именно не работатет? Это необходимо поправить под свои условия. У меня на С4 яве точит, не всегда правда с первого раза до необходимого уровня, но у меня и не ПвП сервер.
Добавлено спустя 49 минут 38 секунд:
Re: ДА БУДЕТ БОТ!
Цитата:
при включении скрипта на рыбалку выдается ошибка access violation at address 00528F70 in module 'l2ph.exe'. Read of address 00000000. и что делать я незнаю помочь можешь?
У меня эту ошибку выдает, когда нет подключения к серверу. В списке соединения должно быть имя чара.
Что именно не работатет? Это необходимо поправить под свои условия. У меня на С4 яве точит, не всегда правда с первого раза до необходимого уровня, но у меня и не ПвП сервер.
вот тут http://http://xkorem.net/vbf...?t=221&page=16 мы писали что даже если ID прописать, в ервый запуск он активирует заточку и все, а в впоследующие пишет "нет такого скролла".
Я здесь выкладывал другой скрипт на заточку, он тоже не работатет?
Напиши свои WeaponID, ScrollID, названия предметов, пакеты от сервера 1B, 27
ЗЫЖ
max=250; //max количество предметов в базе (количество ячеек в инвентаре)
я нашёл только 1 :O
Код:
//Автоматизация заточки для PVP серверов... by NLObP
//Работа проверена на 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
Scroll=957; // ItemID Crystall Scroll Enchant Weapon (Grade D)
Weapon=129; // ItemID Sword of Revolution
MaxEnchLvl=5;
var
ItemBase: array of integer;
add: boolean;
ListCount: Integer;
Cmd:String;
timer: TTimer;
procedure Init; //Вызывается при включении скрипта
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimerHP;
timer.enabled:=false;
timer.interval:=1000; //время задержки
add:=false;
SendMsg('Начало инициализации скрипта, откройте инвентарь');
end;
procedure Free; //Вызывается при выключении скрипта
begin
ItemBase:=nil;
timer.Free;
end;
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
procedure CreateItemBase; //Создает базу ObjectID и ItemID, опять же не проверяет пакет на правильность для экономия ресурсов
var
i,j: integer;
begin
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов
SetLength(ItemBase,ListCount*2); //размер массива должен быть в 2 раза больше, чем итемов
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем пары ObjectID - ItemID
for i:=0 to ListCount-1 do begin
ItemBase[i*2]:=ReadD(j); //ObjectID
ItemBase[i*2+1]:=ReadD(j); //ItemID
j:=j+20;
end;
end;
procedure UpdateItemBase; //Создает базу ObjectID и ItemID, опять же не проверяет пакет на правильность для экономия ресурсов
var
i, ii, tmp, j, Count, ObjID, ItID, UpdType: integer;
begin
Count:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - ItemID
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for i:=0 to Count-1 do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItID:=ReadD(j);
if (UpdType=3) then begin
for ii:=0 to ListCount-1 do begin
//находим подходящий предмет
if (ItemBase[ii*2]=ObjID) then begin
ItemBase[ii*2]:=0;
ItemBase[ii*2+1]:=0;
end;
end;
end
else begin
for ii:=0 to ListCount-1 do begin
if (UpdType=1) and (ItemBase[ii*2]=0) then begin
ItemBase[ii*2]:=ObjID;
ItemBase[ii*2+1]:=ItID;
add:=false;
exit;
end else if (UpdType=1) then add:=true;
end;
end;
j:=j+18; //следующее смещение для действия с предметом
end;
if add=true then begin
ListCount:=ListCount+1; //количество итемов
SetLength(ItemBase,ListCount*2); //размер массива должен быть в 2 раза больше, чем итемов
ItemBase[(ListCount-1)*2]:=ObjID;
ItemBase[(ListCount-1)*2+1]:=ItID;
add:=false;
end;
end;
function GetObjID(ItemID:integer): integer; //Выдает ObjectID по его ItemID, если ItemID не найден в базе, выдает -1
var
i: integer;
begin
for i:=0 to ListCount-1 do
//находим первый подходящий предмет
if (ItemBase[i*2+1]=ItemID) then begin
Result:=ItemBase[i*2];
Exit;
end;
Result:=-1;
end;
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServer;
end;
procedure RequesEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServer;
end;
procedure TryEnchantWeapon;
begin
if GetObjID(Scroll)=-1 then begin
SendMsg('Нет такого скролла! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(GetObjID(Scroll));
if GetObjID(Weapon)=-1 then begin
SendMsg('Нет такого оружия! Прервано!');
timer.enabled:=false;
exit;
end;
RequesEnchantItem(GetObjID(Weapon));
end;
procedure OnTimerHP(Sender: TObject);
begin
TryEnchantWeapon;
end;
//******************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
//****************************************************
//социальное действие yes для начало точки
if FromClient and (pck=HStr('1B 06 00 00 00')) then begin
SendMsg('Начинаем точить всё оружие!!!');
timer.enabled:=true;
end;
//социальное действие no для окончания
if FromClient and (pck=HStr('1B 05 00 00 00')) then begin
SendMsg('Окончили точить всё оружие!!!');
timer.enabled:=false;
end;
//ItemList
if FromServer and (pck[1]=#$1B) then CreateItemBase; //создание базы предметов
if (length(ItemBase)=0) then exit; //если нет базы итемов, скрипт дальше не пустит
//если удалились предметы, стираем в базе предметов пары ObjectID - ItemID
if FromServer and (pck[1]=#$27) then UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета
//*****************************************************
//Команды отладки
//*****************************************************
//пакет Say2
if FromClient and (pck[1]=#$38) then begin
Cmd:=ReadS(2);
case Cmd of
'1':
begin
pck:='';
//Dump;
end;
'2':
begin
pck:='';
TryEnchantWeapon;
//Dump;
end;
end;
exit;
end;
//****************************************************
end.
сложно ли модифицировать скрипт, чтобы он точил всего 2 веши блессед заточками. допустим поочереди варяца до 13 , 1ая ломается , и точится только она, пока не станет опять 13, и потом опять поочереди?