PDA

Просмотр полной версии : Скрипт на заточку


Страницы : [1] 2 3

NLObP
29.05.2008, 19:29
Автоматизация заточки предметов до необходимого уровня by NLObP

Возможности скрипта
--------------------
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим. Один предмет всегда остаётся.

Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false

Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей, степень заточки значения не имеет

Скрипт распространяется как есть, и я не несу ответственности за то, что ВЫ натворили у себя, его используя.

by NLObP
для С4 и Интерлюдии можно взять здесь (http://coderx.ru/downloads.php?do=file&id=24)
для Грации можно взять здесь (http://coderx.ru/showpost.php?p=22135&postcount=95)

by Breadfan
скрипт переделанный под камаель (с автопокупкой).

by Shadow
Скрипт заточки предметов с их закупкой при необходимости

Этот скрипт помогает в рутине, когда разрешено пользователям 100% точить до большой величины, скажем до +200, ручками то замучаешься точить. :)

PS: скрипты - это облегчение рутинной работы человека.

Denis63RUS
05.06.2008, 09:12
На пульсе ставь задержку 800 мс, это вроде бы оптимальная, меньше уже начитнает пропускать, а больше - дольше:) Ну и как ходят слухи то что маг пухи точяться хуже:) У меня S двуручник заточился до 10 через 30-40 штук примерно, а id лучше смотреть мне кажеться через инвентарь.

Добавлено через 1 минуту
Ещё проще если выкидываешь и поднимаешь вещь, смотришь пакет дропитем, там есть id того что поднял!

Grinch
09.06.2008, 23:10
Народ по делу писать можно и нужно ) если сообщение не будет флудом то оно будет опубликовано и скорей всего сразу будет и ответ
только не надо про шанс точки петь, конкретно в чём проблема и как изменили скрипт, выкладывайте посмотрим

NLObP
24.06.2008, 02:31
Когда запускаю скрипт (поставил там свой ник и максимальное количество вещей в инвенторе (у моего гнома их 80)), то скрипт выдаёт такую ошибку
http://img185.imageshack.us/img185/3347/11900436iy9.jpg (http://imageshack.us)
Если поставлю другое число в количестве слотов в инвенторе то такую
http://img185.imageshack.us/img185/9446/42277236hx4.jpg (http://imageshack.us)

Не 100%, но проведённой проверкой выяснилось, что вся проблемя в itemsid.ini из комплекта пакетхака. Он не соответствует данным клиента. Я выкладываю в архиве со скриптом правленный под себя itemsid.ini. Дополнительно внесены проверки в скрипт для исключения ошибок.

Добавлено через 2 минуты
гы а я думал чё гномик базальт из штанов не достаёт ):D

Это что-то другое. Опиши подробнее.

Добавлено через 10 минут
Простите за глупый вопрос, но подскажите как настроить автозаточку, а точнее скрипт, чтобы точился один weapon, но блесс точками, до определенного значения заточки!

Необходимо затариться оружием, заточками.
1) Name='NLObP'; <---------Вписать сюда имя чара
2) установить константу Interlude в зависимости от типа игры (C4 - false или Интерлюд - true).
3) Сохраняем скрипт и ставим напротив него галочку.
4) Выбираем из списка предмет для заточки и чем точить.
Скрипту всё равно блессед или нет заточка.
5) Ставим напротив галочки, подтверждая выбор (убедитесь в соответствии ItemID и количества!).
6) Жмем кнопку "Start".
Скрипт запускается, если в инвентаре более, чем один выбранный предмет, и точит эти предметы по очереди, до выставленного макс. уровня. В конце всегда остается один предмет.

Добавлено через 4 минуты
NLObP, сделай !пожалуйста! возможность редактирования полей "ID предмета" и "Кол-во"! Иначе косяк на двух серверах, у них в пакете неправильно чтото выставлено, не так как ты определяешь и кол-во определяется неправильно. Да и с ID былобы удобнее! Пожалуйста! А то так невозможно ничего делать.

Смысл скрипта тогда теряется. Используй мой предыдущий скрипт без панели управления.

Если кто-нибудь знает как это сделать в уже существующем коде подскажите пожалуйста! А то он мне показывает просто космические цифры - количество предметов.

Все данные беруться из серверного пакета 1B=ItemListPacket, надо посмотреть что там приходит. Может быть шифрование трафика?

Добавлено через 2 минуты
Какие строки нужно изменять кроме Name и max ?
Нужно ли изменять строки типа этой
ScrollID, ScrollOID:integer;
и если надо, то оставлять параметр integer или как?

Изменять надо только две строчки:
Name='Вписать сюда имя чара';
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false

Как максимум можно увеличить таймер:
timer.interval:=800; //время задержки, уже самый минимум

Всё остальное управление осуществляется с панели.

Добавлено через 1 минуту
Выложил исправленную версию скрипта, и мой itemsid.ini

Добавлено через 18 часов 4 минуты
Miler, попробуй сделать свой собственный из данных клиента itemsid.ini, скрипт сообщает тебе, что нет предметов в его itemsid.ini
Список в комбобоксах один и тот же, он должен соответствовать инвентарю.

Добавлено через 1 минуту
При попытке запуска скрипта вылетает ошибка
http://i032.radikal.ru/0806/aa/b42260576f85t.jpg (http://radikal.ru/F/i032.radikal.ru/0806/aa/b42260576f85.jpg.html)

Скрипт настроил как в описании написано? Если не ошибаюсь константа NAME не определена, она должна быть равна имени твоего чара, для которого запущен скрипт.

Добавлено через 1 минуту
А скрипт тестировался на сервере Kamael?

Нет. Потестируй и расскажи нам. Как минимум packets.ini нет для Камаэля.

Добавлено через 1 час 31 минуту
Выложил скрипт с небольшими исправлениями. Тестируйте.

PS: Проверял скрипт на Абисс х300. Инвентарь видит правильно. Сам процесс точки не проверял, нет столько денег.

Добавлено через 3 минуты
nikolas666, что именно не работает на твоем сервере? Задавай вопросы. Попробую подсказать, что смогу.

Добавлено через 40 минут
народ я чтото немогу понять что у меня не так, вписываю ид итемов в срипт и сразу весь скрипт летит((подскажите плз что надо исправить чтоб я мог точилку включать- сервер http://la2fantasy.net/index.php?id=reg_false

Не понял вопроса.
Куда вписываешь ID?
У тебя сервер Интерлюд или С4?

Надо исправить константу -> Name='вписать имя чара';
и константу, в зависимости от типа сервера -> Interlude=true/false;

Больше ничего в скрипте не надо исправлять!!!
Если конечно понимашь, что делаешь, то можно.

Дальше, запускаешь скрипт и всё управление идет из панельки. Что у тебя не так, какие ошибки или другое что?

PS: Не выкладывай весь текст скрипта, зачем?! Если, что не понятно, выкладывай непонятный кусок, я объясню.

Добавлено через 7 минут
abyabar, попробуй скрипт версии 0.3 с изменениями. Вроде один и тот же предмет раньше точило если маленькая задержка была. Ты таймер не изменял?

Добавлено через 2 минуты
теперь всё норм тока, когда запускаю скрипт один раз точиться пуха, а на второй пишет что я отминил дейсвие заточки. Если тыкаю сам на заточку то пуха автоматом точиться.

Мне не хватает информации, почему так. Сервер интерлюд? Таймер менял?

Добавлено через 26 минут
вот пишет при запуске точилки все сделал как ты сказал все ровно выдает
Access violation at address 0052b420 in module 'l2phx' read of address 2c30392c

Если не ошибаюсь, такая ошибка появляется, если скрипт запущен не для того чара, который в Name прописан, то есть в клиенте один чар, а скрипт для другого.

но открывает точилку и там я ставлю галочки и опять вылетает ошибки
Variant or safe arry index out of bounds

Галочки надо ставить для подтверждения выбора в комбобоксах, а там я как понимаю нечего выбирать, вот и ошибка.
Скриншот клиента и пакетхака с панелью управления кинь, как выше выкладывали (не весь экран, вырежи лишнее). Может и увижу где ошибка.

Добавлено через 3 минуты
PS: Может наоборот слишком маленькое время таймера стоит, у кого один предмет точит. Поставте побольше в этом месте число
timer.interval:=800; //время задержки, уже самый минимум

Добавлено через 53 минуты
nikolas666, я не вижу, чтобы ты клиент запускал, это ведь не бот.
Запускаешь клиент, доходишь до выбора сервера. Запускаешь пакетхак. В клиенте, выбираешь сервер, чара с именем xXxAfinAxXx, покупаешь оружие, заточки. В пакетхаке, ставишь галочку перед скриптом enchant.
Если всё в порядке то в выборе предмет/заточка будет перечислен твой инвентарь. Выбери предмет - поставь галочку, выбери заточку - поставь галочку. В Уровень Макс.: поставь желаемый максимум заточки. Нажми кнопку START. Сиди смотри. После остановки скрипта докупай оружие/заточки. Нажми кнопку START. Пока не заточишь до нужного уровня.

PS: константу MAX сделай равной 250 а не 4! --->>> max=250;

Добавлено через 1 минуту
А сервер у тебя С4? Я к сожалению не проверял на С4 и 100% работы не гарантирую.

nikolas666
24.06.2008, 02:57
http://i007.radikal.ru/0806/05/0104eec2c466.jpg (http://www.radikal.ru)
http://i053.radikal.ru/0806/1a/4b817abb3b6d.jpg (http://www.radikal.ru)
Все делал как ты говорил ((сервер с6 а ошибки одни и те же((

Grinch
24.06.2008, 09:45
Все делал как ты говорил ((сервер с6 а ошибки одни и те же((
в игру войди для начала, инициализируй его и точи.

NLObP
28.06.2008, 00:34
Всё паботает как часы спс огромное.
+ заготовка покупки заточек/вещей;
Это в будущем будеш делать, чтобы сам закупал заданые пухи, точки и точил?

Тебе тоже спасибо. Нашел ошибки в скрипте благодаря тебе. Насчет покупки не знаю. Везде разные продавцы, ИМХО, каждый сам себе должен сделать.

NLObP
29.06.2008, 01:18
а вот со вторым у меня тоже трабла иды вписываемые не инициалятся скриптом и я незнаю почему (может скрипт не понимает что такое династия :D

Должен понимать, скрипту все равно, главное чтобы соответствовало данным от твоего клиента. Выложи кусочек с твоими добавками, гляну.

в общем если можешь выложь скрипт без панельки )
Вот мой старый скрипт для точки одной вещи:
//Автоматизация заточки для PVP серверов... by NLObP
{
Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS"

Необходимо затариться оружием и заточками
Социальное действие YES начать
Социальное действие NO остановиться


Скрипт распространяется как есть, и я не несу ответственности за то,
что ВЫ натворили у себя, его используя.}


const
Scroll=731; // ItemID Crystall Scroll Enchant Weapon (Grade D)
Weapon=81; // ItemID Sword of Revolution
MaxEnchLvl=5;

var
ItemBase: array of integer;
add: boolean; //прошла заточка?
ListCount, CurEnchLvl: Integer;
Cmd:String;
timer: TTimer;

procedure Init; //Вызывается при включении скрипта
begin
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimerHP;
timer.enabled:=false;
timer.interval:=2000; //время задержки
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); //количество итемов
//ItemList:w(window)w(ListCount)w(itemType1:0-wpn/rng/ear/nckl,1-arm/shld,4-itm/qitm/adn)h(ObjectId)i(ItemID)d(count)w(itemType2:0-wpn 1-shld/arm 2-rng/ear/nckl 3-qitm 4-adn 5-itm)w(CustType1)w(isEquipped)h(BodyPart)w(EnchantL evel)w(CustType2)
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
// SendMsg('ObjectID='+IntToStr(ItemBase[i*2])+' ItemID='+IntToStr(ItemBase[i*2+1]));
j:=j+20; //21?
end;
Dump;
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-удален
// SendMsg('UpdateItemBase!');
for i:=0 to Count-1 do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItID:=ReadD(j);
SendMsg('UpdType='+IntToStr(UpdType)+' ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItID));
if (UpdType=3) then begin
for ii:=0 to ListCount-1 do begin
// SendMsg('Проход по ItemBase!');
//находим подходящий предмет
if (ItemBase[ii*2]=ObjID) then begin
ItemBase[ii*2]:=0;
ItemBase[ii*2+1]:=0;
SendMsg('Стираем данные! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItID));
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;
SendMsg('Вносим данные! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItID));
add:=false;
Dump;
exit;
end else if (UpdType=1) then add:=true;
end;
end;
// SendMsg('Проход по UpdateItem!');
j:=j+18; //следующее смещение для действия с предметом 1-добавлен 2-изменен 3-удален
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;
SendMsg('Добавляем данные! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItID));
add:=false;
end;
Dump;
end;

procedure Dump; //показать базу
var
i,j: integer;
begin
for i:=0 to ListCount-1 do
SendMsg('i='+IntToStr(i)+': ObjID='+IntToStr(ItemBase[i*2])+' - ItemID='+IntToStr(ItemBase[i*2+1]));
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));
SendMsg('Scroll='+IntToStr(GetObjID(Scroll)));
if GetObjID(Weapon)=-1 then begin
SendMsg('Нет такого оружия! Прервано!');
timer.enabled:=false;
exit;
end;
RequesEnchantItem(GetObjID(Weapon));
SendMsg('Заточили предмет! Weapon='+IntToStr(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.


И для точки нескольких вещей:
//Автоматизация заточки предметов до необходимого уровня by NLObP
{Затачиваем поочереди все предметы с Weapon ID пока не переломаем или не заточим

Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS"

Необходимо затариться оружием и заточками
Открываем инвентарь для инициализации скрипта
Социальное действие YES начать
Социальное действие NO остановиться

Скрипт распространяется как есть, и я не несу ответственности за то,
что ВЫ натворили у себя, его используя.}

const
Name='NLObP';
Scroll=957; // 957 - ItemID Crystall Scroll Enchant Weapon (Grade D)
Weapon=129; // 129 - ItemID Sword of Revolution
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:=50; //время задержки
add:=false;
for i:=1 to max do begin
//очищаем масив
WpnBase[1,i]:=0;
WpnBase[2,i]:=0;
end;

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;
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; //следующее смещение для действия с предметом 1-добавлен 2-изменен 3-удален
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.

PS: больше мною не поддерживаются

NLObP
04.07.2008, 13:17
NLObP а будет версия где свои ID можно будет вставлять или нет ?

Будет. Просто вчера был мой профессиональный праздник и я был не в себе. Надеюсь в себя я прийду в выходные. ;)

Выложил исправленную версию. Пробуйте. Тестируйте.

Неизвестные вещи пишет без описания.
Добавлять вещи в itemsid.ini можно непосредственно во время игры, если скрипт включить, то описание добавленной вещи появиться в списке.
Если одежду (оружие) одеть/снять, то скрипт напишет в окне сообщений itemid этой вещи.

Для С4, надо внести изменения в procedure CreateItemBase;
...
было --> if interlude then inc(j,12) else inc(j,8);
надо --> if interlude then inc(j,12) else inc(j,4); //для С4 проверено, спасибо Mulder

raid
05.07.2008, 18:40
Несмотрел как ты делал, но вот:
Item:=ItemBase.Strings[ItemBase.IndexOfName(inttostr(id))]

NLObP
06.07.2008, 13:32
Packets.ini поставил от YuLaw, пробовал с l2ph 3.1.8, 3.1.9, 3.2.0.
3.1.8 и 3.2.0 выдают такую ошибку
http://i043.radikal.ru/0807/d7/1362dceaaa99t.jpg (http://radikal.ru/F/i043.radikal.ru/0807/d7/1362dceaaa99.jpg.html)
3.1.9 просто виснет...

В списке соединений я не вижу имени чара. Обычно такая ошибка выскакивает из-за несоответствия соединения и настроек скрипта.
К тому же скрипт проверялся на С4 и Интерлюдии.
Для Камаэля есть несоответсвия в пакетах.
В Интерлюдии 58=RequestEnchantItem:d(ObjectID), а в Камаэле 5F=RequestEnchantItem:d(ObjectID).

eGoIST
15.07.2008, 04:14
Для С4, надо внести изменения в procedure CreateItemBase;
...
было --> if interlude then inc(j,12) else inc(j,8);
надо --> if interlude then inc(j,12) else inc(j,4); //для С4 проверено, спасибо Mulder

Изменил все как указано выше, все точит отлично до +4, после этого пишет заточка прервана, а все из-за того что оно видит в моем инвентаре неправильное количество заточек и оружия. Хотя в инвентаре 60 шт. заточек и 40 шт. оружия, программа видит только 4 шт. заточек и 3 шт. оружия, хотелось бы узнать с чем может быть это связано и как исправить, что бы программа видела правильное количество предметов в инвентаре.
PS: Заранее спасибо ;)

Breadfan
19.07.2008, 00:24
Уважаемы NLObP, а как изменить скрипт чтобы перс докупал точи? Пробовал банально добавить проц-ру
procedure Skupka;
begin
//-------------------------------------------------------------------------------------------------
buf:='21 6E 00 70 00 63 00 5F 00 32 00 36 00 38 00 34 00 37 00 34 00 32 00 34 00 37 00 5F 00 6D 00 75 00 6C 00 74 00 69 00 73 00 65 00 6C 00 6C 00 20 00 36 00 38 00 39 00 00 00';
sendtoserver;
buf:='A7 B1 02 00 00 60 E3 16 00 01 00 00 00 00 00 00 00 00 00 00 00';
SendToServer;
end;
и потом её вызов
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
skupka;
ready:=false;
Но результата нет

NLObP
19.07.2008, 14:31
Уважаемый NLObP, а как сделать чтоб перс сам докупал заточки?

Сделать что бы покупал можно, но это для каждого сервера будет немного по своему, поэтому делать не буду.
Посмотреть, как это сделать самому, можно в рыбалке и в теме алгоритмов.
Немного подскажу. Надо знать ID продавцов. Знать как продается - обычный магазин/мультиселл. Знать bypass из html-менюшки, который посылать для покупки. Нужно запоминать ListID в ответе продавца.

покупка состоит из следующих шагов:
1. таргет на продавце, пауза, снова таргет (c04=Action, c04=Action)
2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d) - берем из него bypass требуемого пункта меню
3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
4. приходит s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemTyp e1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d( ItemBodyPart)... - берем ListID
5. FindItem(ID) найдем OID, Count нужной вещи по ID - это отдельная процедура поиска в инвентаре и здесь не требуется!
6. шлем c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)i(ItemID)d(Count)

На некоторых серверах не обязятельно подходить к продавцу, на других обязательно. Тоже самое с ListID - на некоторых можно 0 ставить.

raid
19.07.2008, 17:17
Сделать что бы покупал можно, но это для каждого сервера будет немного по своему, поэтому делать не буду.
Посмотреть, как это сделать самому, можно в рыбалке и в теме алгоритмов.
Как вариант:
Делаешь функцию настройки скрипта:
В ПМ пишеться: выдели нпц, выбери пункт меню, купи 5 точек, используй одну точку на любом оружие...

Всё довольно просто;) после чего сохраняешь параметры в стринглист тот же и в файл.

PS: Жаль что на l2r.ru сложная шифрация пакетов, которую я одолеть не могу, так бы было много скриптов от меня(автокачающийся ВК был бы точно:D) ну и карту бы закончил в dll.

NLObP
19.07.2008, 17:49
А я могу услышать ответ на свой вопрос, или оно настолько сложный, что даже нечего ответить ?

Скрипт писался под Интерлюд. Пакеты отличаются в С4 и в Интерлюде (в конце вроде 8 байт и 4 байт лишних). Я проверить не могу, так как на сервере сменили защиту (lagam.net). Чем я еще могу помочь? Для всех я тоже не могу проверять и так 9 разных клиентов. Только если ты сам будешь ковыряться и проверишь, какие надо внести изменения в скрипт, чтобы заработало.

Скорее всего это в
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
...
if interlude then inc(j,12) else inc(j,8);
и в
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
...
if interlude then inc(j,10) else inc(j,2);

PS: какой у тебя сервер?

Добавлено через 2 минуты
Как вариант:
Делаешь функцию настройки скрипта:
В ПМ пишеться: выдели нпц, выбери пункт меню, купи 5 точек, используй одну точку на любом оружие...

Всё довольно просто;) после чего сохраняешь параметры в стринглист тот же и в файл.

Может сделаешь? Я ведь не всё умею.

raid
19.07.2008, 18:08
Может сделаешь? Я ведь не всё умею.
http://coderx.ru/showpost.php?p=11661&postcount=545
Для тебе больше важен BufferBot.txt именно сам процес бафа и использования переменной BS - BuffStep.

Идея довольно простая... Учись.

NLObP
20.07.2008, 14:28
Играю я на С4, вообщем изменил значения в procedure CreateItemBase и procedure InventoryUpdate, а именно:
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
..............
if C4 then inc(j,4) else inc(j,8);

procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
..............
if C4 then inc(j,2) else inc(j,10);

И все стало работать отлично ;)

Вроде именно так я и предлагал поменять. :(
CreateItemBase;
if interlude then inc(j,12) else inc(j,4); //для С4 проверено, спасибо Mulder

Эта процедура была правильной:
procedure InventoryUpdate;
if interlude then inc(j,10) else inc(j,2);

NLObP
28.07.2008, 23:29
а как сделать чтоб скрипт точил предмет до определённого уровня и если он ломался то начинал точить следующий?

Как сейчас сделано, больше шанс, что по максимуму заточится. Теоритически можно и по одному сделать, только я уже не буду делать. Посмотри в теме, выложены еще два скрипта, может там как раз то, что надо?

Добавлено через 1 минуту
а есть для камельки такая штука??

Для Камаеля другие пакеты нужны, если напишешь, какие там используются, могу и поправить.

NeRv1k
02.08.2008, 03:23
http://xmages.net/out.php/t18869_.JPG (http://xmages.net/show.php/18869_.JPG.html)
Что делать ??? Запуска на С6 имя прописал

NLObP
03.08.2008, 04:09
Что делать ??? Запуска на С6 имя прописал

Имя соединения и константа Name должны совпадать. Для начала добиться, чтобы нормально показывало имя чара.

:) Извените но я давно играю в Л2 И можно сказать давно знаю про ПНХ.. Но это 1 раз когда я ево скачял.... и в програмировании я не силен.. :) Не могли бы вы мне поподробнее плз обяснить что я не так сделал :)
P.S. Мне то и надо только что бы точить..

В "Список соединений:" должно быть четко написано имя чара, которым ты зашел в клиент. Попробуй поставить/снять галочку "Обход смены XOR ключа". Попробуй пакетхак версии 3.2.0, если тоже самое, то врядли сам сделаешь. Надо разбираться с шифрацией трафика и компилировать новую newxor.dll

Добавлено через 1 минуту
NLObP прив ! слушай а реально ли зделать так : я играю на сервере thecyberland.ru почти копия (основа) la2fantasy.net ! там есть монеты гг 1 монета 500кк ! и зделать так чтоб он покупал точки и когда кончались деньги он бы шёл менял гг на адены ! и шёл опять точил ! и так точил точил пока не заточит на ту точку которую указал !

Теоретически можно всё сделать. Только кто будет делать?! Если сам не сделаешь, то никто не сделает.

Добавлено через 3 часа 25 минут
СПС ! Запустил... Просто на другом чаре заходит а на эточето нет.... Но терь когда я выбераю предмет и точьку, ставлю галочьки и жму старт оно пишет : Прервано !

Попробуй сделать всё, что написано в скрипте, перед запуском.

Breadfan
05.08.2008, 23:20
Может просто в рюкзаке лежит одна вещь затачиваемая, а по умолчанию скрипт будет работать только если затачиваемых вещей минимум две


Вот скрипт переделанный под камаель. Т.к. имеющаяся у меня версия пнх некорректно работает с именами соединений то пришлось убрать возможность работы с определенным подключением.В данном случае изменений минимум, заменены только лишь ИД пакетов и требуемые смещения.
const
Name=''; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
//-------------------------
max=300; //количество слотов в инвентаре чара

//............................................
//Список переменных
var
Item, scrl:integer;
ScrollID, ScrollOID:integer; //ScrollID скролла заточки
ItemID,ItemOID:integer; //ItemID затачиваемого предмета
MaxEnchLvl:integer; //уровень заточки который требуется достичь
ItemBase: array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
ready, add : boolean;
timer : TTimer;
ItemCount, CurEnchLvl: integer;
SocialID : integer; // вспомогательная
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
FormMain : TForm; //Создаваемая форма
Splitter1 : TSplitter;
Splitter2 : TSplitter;
Stats : TMemo;
Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label2 : TLabel;
Label4 : TLabel;
Label12 : TLabel;
Label13 : TLabel;
CheckBoxItem : TCheckBox;
ComboBoxItem : TComboBox;
ButtonStartEnchant : TButton;
ButtonStopEnchant : TButton;
CheckBoxScroll : TCheckBox;
ComboBoxScroll : TComboBox;
EditItemVal : TEdit;
EditScrollVal : TEdit;
EditScrollOID : TEdit;
EditItemOID : TEdit;
Label1 : TLabel;
Label3 : TLabel;
Edit1 : TEdit;
Edit2 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);

ComboBoxItem.Enabled:=false; //выключаем
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
msg.Lines.Add('Команда Старт!!!');
timer.enabled:=true;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!!!');
timer.enabled:=false;
ready:=false;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
// MyHPID:=ExtractIDValues(ComboBoxHPotion.Items.Stri ngs[ComboBoxHPotion.ItemIndex]);
// EditHPotionVal.Text:=Inttostr(FindItem(MyHPID));
// EditHPotionOID.text:=inttostr(ItemBase2[1,1]);
end;
//......................................
//*************************************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant by NLObP v.0.6';
Result.Left := 397;
Result.Top := 233;
Result.Width := 581;
Result.Height := 205;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 573;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 443;
Stats.Top := 0;
Stats.Width := 130;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 65;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 170;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень заточки';
Edit1.ShowHint := TRUE;
Edit1.Text := '65535';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 199;
Edit2.Top := 67;
Edit2.Width := 60;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 90;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 169;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка затачиваемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := TRUE;
ButtonStartEnchant.Hint := '';
ButtonStartEnchant.ShowHint := FALSE;
ButtonStartEnchant.Caption := 'Start';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Stop';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали скролл заточки';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Заточка';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;
//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 90;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 169;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка скролл заточки';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color := clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight := 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Автоматизация заточки by NLObP!');
Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=5000; //время задержки
ready:=false;
add:=false;
//Пакет RequestItemList
buf:=hstr('14');
SendToServer;
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//......................................
//************************************************** ****************************
procedure Free; //Вызывается при выключении скрипта
begin
// ItemBase:=nil; //нельзя так делать с массивом
timer.Free;
StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
end;
//......................................
//************************************************** ****************************
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClient;
end;
//......................................
//************************************************** *************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)d(Augment)d(--)
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
ListCount:=ReadH(j); //количество итемов не должно превышать max!
//if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
for i:=1 to ListCount do begin
itemBase[1,i]:=ReadD(j); //OID
itemBase[2,i]:=ReadD(j); //ItemID
//-------Изменен формат пакета в камаеле
ReadD(j);
//---------------------------------
itemBase[3,i]:=ReadD(j); //кол-во
inc(j,10);
itemBase[4,i]:=ReadH(j);//EnchantLevel
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if interlude then inc(j,44) else inc(j,8); // так же изменены смещения в связи с добавлением новых свойств итемов
msg.Lines.Add('j='+inttostr(j));
end;
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(ItemBase[2,i])+' в itemsid.ini');
end
end;
except;
msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
msg.Lines.Add(inttostr(ItemBase[2,i]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
//......................................
//************************************************** ****************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(8)
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, ItemOID, ItemID, ItemCount, ListCount, UpdType, Itemlvl: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for ii:=1 to ListCount do begin
UpdType:=ReadH(j);
//inc(j,2);
ReadH(j); //ItemType1
ItemOID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
Readd(j);
itemCount:=ReadD(j); //кол-во
inc(j,10);
Itemlvl:=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]:=ItemOID;
ItemBase[2,i]:=ItemID;
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Добавили предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
add:=true;
end;
end;
end;
//изменен
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Изменяем параметры предмета!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
end;
end;
end;
//удален
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
msg.Lines.Add('Удаляем предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
if interlude then inc(j,10) else inc(j,2); //для С4 неправильно?
//msg.Lines.Add('j='+inttostr(j));
end;
end;
//......................................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItem(item:integer; lvl:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
//находим подходящий предмет по ItemID
if (ItemBase[2,i]=item) and (ItemBase[4,i]=lvl) then begin
//если нашли, то возвращаем ObjectID предмета
result:=ItemBase[1,i]; // itemOID
ItemCount:=ItemBase[3,i];
//Itemlvl:=ItemBase[4,i];
//msg.Lines.Add('<item='+inttostr(item)+' lvl='+inttostr(lvl)+'> i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
exit;
end;
end;
//ничего не нашли
result:=0;
end;
//......................................
//************************************************** ****************************
procedure UseItem(ObjectID: integer); //#$19 kamael
begin
buf:=#$19;
WriteD(ObjectID);
WriteD(0);
SendToServer;
end;
//......................................
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i : integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to max do begin
if (ItemBase[2,i]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
// msg.Lines.Add('i='+inttostr(i));
result:=result+ItemBase[3,i];
//inc(result);
end;
end;
end;
//......................................
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer); //5F kamael
begin
buf:=#$5F;
WriteD(ObjectID);
SendToServer;
//*********** использовать чит с петом ************************
{ buf:=#$8B;
WriteD(ObjectID);
writed(1);
SendToServerEx(Name);
} //***********
end;
//......................................
{//************************************************** *************
function ExtractIDValues(sData: string): integer;
var
s: string;
i,j: integer;
begin
i:=0;
s:=sData;
i:=pos('=',s);
if i>=0 then
s:=copy(s,1,i-1);
try
result:=strtoint(s);
except
result:=0;
end;
end;
//............................................}
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нечего точить! Прервано!');
timer.enabled:=false;
exit;
end;
if (sumitem(ItemID)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Прервано!');
timer.enabled:=false;
exit;
end;
ScrollOID:=GetItem(ScrollID,0);
if ScrollOID=0 then begin
msg.Lines.Add('Нет заточки! Прервано!');
timer.enabled:=false;
exit;
end;

UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
// delay(1000);
// RequestEnchantItem(Item);
// delay(1000);
//************************************************
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(Item));
// end;
end;
//......................................
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
if FromServer then
case pck[1] of
//......................................
//Пакет ItemList
#$11: CreateItemBase; //создание базы предметов
//......................................
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$21: InventoryUpdate; //Обновление базы
//......................................
//Пакет ChooseInventory
#$7C: if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItem(ItemID,CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true; //пока в тесте отключаем (вкл. после заточки предмета)
end;
#$87: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
end;
end;
end.

Shadow
06.08.2008, 00:47
Сделать что бы покупал можно, но это для каждого сервера будет немного по своему, поэтому делать не буду.
Посмотреть, как это сделать самому, можно в рыбалке и в теме алгоритмов.
Немного подскажу. Надо знать ID продавцов. Знать как продается - обычный магазин/мультиселл. Знать bypass из html-менюшки, который посылать для покупки. Нужно запоминать ListID в ответе продавца.
Приветствую! Спасибо большое за скрипт!
Если все вручную закупать, то все точит без проблем. Но, вот какая ситуация была. У меня в инвентаре лежали несколько уже заточеных АС+10. В скрипте я поставил точить до +10, и закупил +0 и заточки. Когда он переломал все что точил, то начал точить те самые +10 что уже были. Хорошо хоть не все переломал. На следующем кругу он их точнул до +12. Вот такой небольшой косяк. :D
Далее. Чтобы зайти на мой серв ботом, нужно использовать WP со скриптиком в PPC. Соотвественно когда я пытаюсь подконектится с включенным L2PH, то он рвет то соединение, патчит, и делает новое, но бот уже пишет Link LoginServer failed. Как бы мне L2HP к боту прикрутить? С клиентом работает без проблем.
И последнее, по поводу закупки заточек и шмота. ID продавцов я знаю, скрипт смотрел... но там кусок от рыбалки, и как его прикрутить на ГМшоп, я так и не понял. Чем бы мне посмотреть bypass HTML шопа? Старые боты не конектятся к серву, а новый не работает с HTML Reader'ом WP.
Еще раз спасибо за скрипт!

Shadow
07.08.2008, 11:57
Вообщем начал потихоньку разбираться со скриптами. Прикрутил закупку заточек. Но вот с взятием в таргет так и не разобрался. Автотаргет не работает, так как кот(магазин) меня не атакует.
Вот собственно кусок на закупку:

//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ShiftFlag)
procedure Roy;//(Attacker: Integer);
begin
buf:=#$04;
WriteD(1209014909);
WriteD(107977);
WriteD(218146);
WriteD(-3672);
WriteC(00);
SendToServerEx(Name);
end;
//......................................
//************************************************** *************
//21=RequestBypassToServer:s(Cmd)
procedure RequestByPassToServer(cmd:string);
begin
buf:=#$21;
WriteS(cmd);
SendToServerEx(Name);
end;
//......................................
//************************************************** *************
procedure RequestMultiSellItem(ListId,EntryID,Count:integer) ;
begin
msg.Lines.Add('Покупаем ListID:'+inttostr(ListID)+' EntryID:'+inttostr(EntryID)+' в кол-ве:'+inttostr(count));
buf:=#$A7;
WriteD(ListID);
WriteD(EntryId);
WriteD(Count);
SendToServerEx(Name);
// end;
end;
//************************************************** *************
procedure BuyEnchScroll;
begin
RequestByPassToServer('menu_select?ask=-303&reply=559');
delay(500);
RequestMultiSellItem(559,17,1);
delay(500);
end;
//Дальше в скрипте ------------------
//************************************************
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true; //пока в тесте отключаем (вкл. после заточки предмета)
//*** Закупка ***
delay(250);
RequestMultiSellItem(559,17,1); //Scroll S Weapon
delay(250);
//***
end;
#$81: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
// BuyEnchScroll;
//--------------------------------------

Вообщем закупается одна заточка при открытом диалоговом окне с заточками.
Еще хочу прикрутить проверку кол-ва Аден, и подходить к другому коту и менять их. И дальше точить. Но опять все упирается в таргет.

Код надо в теги [ HIGHLIGHT ] обрамлять (правая решетка с параметром delphi)

NLObP
07.08.2008, 14:17
Пока могу посоветовать в скрипт рыбалки заглянуть. Там реализовано продажа/покупка/мультиселл обмен.

Breadfan
07.08.2008, 14:42
Но вот с взятием в таргет так и не разобрался. Автотаргет не работает, так как кот(магазин) меня не атакует.

А что мешает встать у кота, взять его в таргет и только потом стартовать скрипт? Я делал авто покупку, просто вставив посылку на покупку 50 точек через каждые 50 циклов затачивания.

NLObP
07.08.2008, 15:07
А что мешает встать у кота, взять его в таргет и только потом стартовать скрипт? Я делал авто покупку, просто вставив посылку на покупку 50 точек через каждые 50 циклов затачивания.

А если надо оружие и заточки у двух продавцов покупать, а если они далеко друг от друга? Значит и бег как в рыбалке приделывать?

Shadow
07.08.2008, 16:39
Пока могу посоветовать в скрипт рыбалки заглянуть. Там реализовано продажа/покупка/мультиселл обмен.
Да чет смотрел, там все через Аттакера, а как аттакера прикрутить, я так и не понял.

А что мешает встать у кота, взять его в таргет и только потом стартовать скрипт? Я делал авто покупку, просто вставив посылку на покупку 50 точек через каждые 50 циклов затачивания.
Мешает то что закупка шмота у одного кота, а обмен денег у другого. В моей реализации и так происходит постоянная закупка заточек при открытом диалоге.

А если надо оружие и заточки у двух продавцов покупать, а если они далеко друг от друга? Значит и бег как в рыбалке приделывать?
В принципе это нада бы сделать, но у меня все проще. Мой чар стоит как раз между котами, и только поворачивается при ретаргетинге. Так что передвижения не нужны. Главное таргет кидать.

NLObP
07.08.2008, 17:13
можете выложить полный скрипт с примером на скупку.

Вот здесь (http://www.coderx.ru/showpost.php?p=6796&postcount=1) пример на продажу. По аналогии можно в покупку переделать.

Добавлено через 4 минуты
В принципе это нада бы сделать, но у меня все проще. Мой чар стоит как раз между котами, и только поворачивается при ретаргетинге. Так что передвижения не нужны. Главное таргет кидать.

Для таргета нужно знать ObjectId продавцов. Вот их отловить и есть небольшая проблема. В рыбалке есть, как отлавливать фишерманов.
//************************************************** *************
//16=NpcInfo:d(ObjectID)d(NpcTypeID)d(IsAttackable)d (X)d(Y)d(Z)d(Heading)
//d(d)d(Maspd)d(Paspd)d(runSpd)d(walkSpd)d(swimRSpd) d(swimWSpd)d(flRSpd)
//d(flWSpd)d(FlyRSpd)d(FlyWSpd)f(ProperMul)f(Paspd)f (CollisRadius)
//f(CollisHeight)d(RHand)d(d)d(LHand)b(nameabove)b(i sRun)b(isInFight)
//b(isAlikeDead)b(isSummoned)s(Name)s(Title)d(d)d(d) d(karma)d(abnEffect)
//d(d)d(d)d(d)d(d)b(c)b(Team)f(collisRadius)f(collis Height)d(d)
#$16: begin
msg.Lines.Add('S>Пакет NpcInfo #$16'+inttostr(ReadD(2)));
// OID ID
AppendNpc(ReadD(2), ReadD(6)); //добавляем в базу данных
if (FishermanID=ReadD(6)-kID) then begin
EditFishermanOID.text:=inttostr(ReadD(2));
FishermanOID:=strtoint(EditFishermanOID.text);
if java then begin
//java
getbuylist:='npc_'+inttostr(FishermanOID)+'_Buy 411';
getselllist:='npc_'+inttostr(FishermanOID)+'_Sell' ;
getmultisell:='npc_'+inttostr(FishermanOID)+'_mult isell 009';
end;
end;
end;


потом можно выбирать его
//************************************************** *************
//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ShiftFlag)
procedure Target(ObjectID: Integer);
begin
buf:=#$04;
WriteD(ObjectID);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteC(00);
SendToServerEx(Name);
end;
//......................................
//************************************************** *************
procedure TargetAttacker(Attacker: Integer);
begin
msg.Lines.Add('ObjectID='+IntToStr(Attacker)+' Player='+IntToStr(MyOID));
fishin.enabled:=false;
Target(ObjectID);
delay(800);
Target(ObjectID);
delay(800);
end;
//......................................

Breadfan
07.08.2008, 17:26
Можно отследить по пакету action, ну это можно сделать чтобы раз и навсегда привязаться к определенному продавцу

Shadow
07.08.2008, 17:35
Использовал функцию проверки итемов для подсчета денег. Приспособил для вывода окошко Stats. Теперь впринципе можно когда кончаются деньги обменивать их у кота. И опять все дело в таргете.
2 NLObP
В каком месте скрипта правильно всетаки поставить закупку заточек?
И еще, как лучше сделать вызов процедуры на закупку, чтобы из переменных подставлялись значения итема, чтобы оперативно изменять что покупать. Типа - Закупка(СкроллЫ);
а в СкроллЫ(СкроллА,Б,С) прописано listID, EntryId и Count этих свитков? А то я второй день в этих скриптах ковыряюсь, уже голова набекрень =)

Подсчет аден:

var
Item, scrl:integer;
ItemBase: array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
Adena, CoL: integer;
//-------------------
//изменен
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Изменяем параметры предмета!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if i=13 then begin
Adena:=ItemBase[3,i];
stats.Lines.Add('Адены '+IntToStr(Adena));
end;
if i=25 then begin
CoL:=ItemBase[3,i];
stats.Lines.Add('Coin of Luck '+IntToStr(CoL));
end;
end;
end;
end;

Shadow
07.08.2008, 17:49
Для таргета нужно знать ObjectId продавцов. Вот их отловить и есть небольшая проблема. В рыбалке есть, как отлавливать фишерманов.

//************************************************** *************
//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ShiftFlag)
procedure Target(Attacker: Integer);
begin
buf:=#$04;
WriteD(Attacker);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteC(00);
SendToServerEx(Name);
end;
//......................................
//************************************************** *************
procedure TargetAttacker(Attacker: Integer);
begin
msg.Lines.Add('Attacker='+IntToStr(Attacker)+' Player='+IntToStr(MyOID));
fishin.enabled:=false;
Target(Attacker);
delay(800);
Target(Attacker);
delay(800);
end;
//......................................

Смотрел пакеты, ОбджектИД и координаты продавцов известны. Выше в куске скрипта в процедуре Roy. Что за переменные MyX, и тд? Я так понимаю это координаты моего чара. Что за переменная Attacker, откуда она берется?

NLObP
07.08.2008, 18:21
Смотрел пакеты, ОбджектИД и координаты продавцов известны. Выше в куске скрипта в процедуре Roy. Что за переменные MyX, и тд? Я так понимаю это координаты моего чара. Что за переменная Attacker, откуда она берется?

MyX,MyY,MyZ - координаты чара. Сервер проверяет расстояние и если ты далеко, то отвергает запрос.
Attacker - ObjectId. Осталось так исторически из скриптов бота. Поменял в выше отписанном сообщении.

Добавлено через 13 минут
В каком месте скрипта правильно всетаки поставить закупку заточек?
И еще, как лучше сделать вызов процедуры на закупку, чтобы из переменных подставлялись значения итема, чтобы оперативно изменять что покупать. Типа - Закупка(СкроллЫ);
а в СкроллЫ(СкроллА,Б,С) прописано listID, EntryId и Count этих свитков? А то я второй день в этих скриптах ковыряюсь, уже голова набекрень =)

//************************************************** *************
//s10=SellList:d(Money)h(ListID)w(ListCount)w(ItemTy pe1)h(ObjectID)i(ItemID)d(Count)w(ItemType2)w(h)d( ItemBodyPart)w(EnchantLevel)w(h)w(h)d(refPrice)
//c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectI D)i(ItemID)d(Count)
//продаем по одному типу
procedure RequestSellItem(ItemOID,ItemID,Count:integer);
begin
if ReadyToSell then begin
msg.Lines.Add('Продадим предмет OID:'+inttostr(ItemOID)+' ID:'+inttostr(ItemID)+' в кол-ве:'+inttostr(count));
buf:=#$1E;
WriteD(ListID);
WriteD(1);
WriteD(ItemOID);
WriteD(ItemID);
WriteD(Count);
SendToServerEx(Name);
end;
end;
//......................................
//************************************************** *************
//c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)
//купим по одному типу
procedure RequestBuyItem(ItemID,Count:integer);
begin
if ReadyToBuy then begin
msg.Lines.Add('Купим предмет ID:'+inttostr(ItemID)+' в кол-ве:'+inttostr(count));
buf:=#$1F;
WriteD(ListID);
WriteD(1);
WriteD(ItemID);
WriteD(Count);
SendToServerEx(Name);
end;
end;
//......................................
//************************************************** *************
//cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Am ount)
//продаем по одному типу
procedure RequestMultiSellItem(ListId,EntryID,Count:integer) ;
begin
msg.Lines.Add('Обменяем предмет ListID:'+inttostr(ListID)+' EntryID:'+inttostr(EntryID)+' в кол-ве:'+inttostr(count));
if ReadyToMultiSell then begin
buf:=#$A7;
WriteD(ListID);
WriteD(EntryId);
WriteD(Count);
SendToServerEx(Name);
end;
end;
//......................................

procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нечего точить! Прервано!');
timer.enabled:=false;
exit;
end;
if (sumitem(ItemID)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Прервано!');
timer.enabled:=false;
exit;
end;
ScrollOID:=GetItem(ScrollID,0);
if ScrollOID=0 then begin
msg.Lines.Add('Нет заточки! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
end;
//......................................


В процедуре OnTimer вместо прерывания работы вставь вызовы процедур закупки. Потом снова таймер запускай, для продолжения заточки.


PS: Вы свои скрипты сюда выкладывайте, когда отладите. Я их в первый пост выложу.

Shadow
07.08.2008, 18:54
Что я имел ввиду по поводу закупки.
У нас есть процедура на закупку RequestMultiSellItem(ListId,EntryID,Count:integer) ;
Далее есть база переменных, в которых прописано:
скролл А арм имеет листид=... еид=... каунт=...
И я типа пишу процедуру BuyItems(ScrollA);
и там как-то нада подставить значения скролла А. и вызвать рекуестмультиселл с этими значениями.
А в идеале мы создаем базу итемИД в которой данные по листИД и тд на итемы. Потом получаем значение итемИД из чекбокса используемых заточек и шмоток, ищем в базе, подставляем в мультиселл и покупаем именно их. Тоесть не нужно в ручную прописывать значения заточек которые используются в данный момент.

Shadow
08.08.2008, 20:09
Изменил способ покупки, как мне кажется элегантно получилось, но в задумках еще лучше =) Хочу брать ItemID из той переменной что в комбобокс подставляется. Тоесть какой вид заточек мы выбрали, такой он и будет закупать.

{ EntryID, вид, цена - для моего серва
1 Weapon D - 50 000
3 Armor D - 6 000
5 Weapon C - 110 000
7 Armor C - 15 000
9 Weapon B - 500 000
11 Armor B - 80 000
13 Weapon A - 5 000 000
15 Armor A - 500 000
17 Weapon S - 10 000 000
19 Armor S - 1 000 000
21 Bless Weapon D - 500 000
23 Bless Armor D - 60 000
25 Bless Weapon C - 2 000 000
27 Bless Armor C - 300 000
29 Bless Weapon B - 5 000 000
31 Bless Armor B - 800 000
33 Bless Weapon A - 50 000 000
35 Bless Armor A - 5 000 000
37 Bless Weapon S - 100 000 000
39 Bless Armor S - 10 000 000
}
procedure BuyScroll(BuyEntryID, BuyDelay: integer);
begin
delay(BuyDelay);
RequestMultiSellItem(559, BuyEntryID, 1);
delay(BuyDelay);
end;
//************************************************** ****
#$6F: if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItem(ItemID,CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=false;
//***** Закупка заточек *
BuyScroll(31, 150);
//***********************
timer.enabled:=true; //пока в тесте отключаем (вкл. после заточки предмета)
end;
#$81: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала

Так он стабильнее покупает заточки. Например можно закупить 2, и он будет 1 использовать, и сразу покупать другую. А вторая нужна прозапас, тк иногда из-за лагов он использует, но не покупает.
2 NLObP
Таргет так и не прикрутил... у меня аж ПХ вылетает. Откуда брать ItemID заточки которая в боксе выводится? Хочу создать файл с базой ListID и EntryID заточек. И брать значения по их ItemID.
Как проверить сколько свободных слотов в инвентаре? Это чтобы закупать выбранную шмотку под завязку, или можно сделать поле для ввода количества.
Кстати переделал подсчет денег:

//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
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
// msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if interlude then inc(j,12) else inc(j,4);
//msg.Lines.Add('j='+inttostr(j));
if itemBase[2,i]=57 then begin
Adena:= itemBase[3,i];
stats.Lines.Add('Адены '+IntToStr(Adena));
end;
if itemBase[2,i]=4037 then begin
CoL:= itemBase[3,i];
stats.Lines.Add('Coin of Luck '+IntToStr(CoL));
end;
end;
//вносим изменения в чекбоксы

В планах: расширить окно, добавить бокс для изменения задержек на покупку, да и общий для таймера например. Поставить чекбоксы: закупать заточки, закупать итемы, менять деньги. Но это потом, когда закупку нормально сделаю.

2 Все
Помогите сделать ТАРГЕТ!

NLObP
08.08.2008, 20:53
Хочу брать ItemID из той переменной что в комбобокс подставляется. Тоесть какой вид заточек мы выбрали, такой он и будет закупать.

Я тоже так решил для закупки крючков. Оставлял одну вещь и шел покупать. Правда исходил из того, чтоб ObjectID новый не запоминать.

Откуда брать ItemID заточки которая в боксе выводится? Хочу создать файл с базой ListID и EntryID заточек. И брать значения по их ItemID.
для скролла (где лежит := где берем)
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];

для вещи (где лежит := где берем)
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];

Добавлено через 1 минуту
Как проверить сколько свободных слотов в инвентаре? Это чтобы закупать выбранную шмотку под завязку, или можно сделать поле для ввода количества.

Я за ранее ставил размер инвентаря чара в переменную
max=250; //количество слотов в инвентаре чара

Добавлено через 2 минуты
Таргет так и не прикрутил... у меня аж ПХ вылетает.

Где именно проблема?

NpcId мы знаем. Вот по нему и надо отслеживать пакеты NPCInfo, где брать NpcObjectID. Уходишь подальше и возвращаешся назад, сервер шлет NpcInfo. Пользуешься таргетом.

Добавлено через 2 минуты
В планах: расширить окно, добавить бокс для изменения задержек на покупку, да и общий для таймера например. Поставить чекбоксы: закупать заточки, закупать итемы, менять деньги. Но это потом, когда закупку нормально сделаю.

Успехов! Будет интересно посмотреть.

PS: а вещи ты покупать планируешь, или только заточки?

Shadow
08.08.2008, 23:51
Я тоже так решил для закупки крючков. Оставлял одну вещь и шел покупать. Правда исходил из того, чтоб ObjectID новый не запоминать.

для скролла (где лежит := где берем)
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];

для вещи (где лежит := где берем)
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
Я имею ввиду в каком месте скрипта это правильно сделать?

Я за ранее ставил размер инвентаря чара в переменную
max=250; //количество слотов в инвентаре чара
Общее нам известно. Как узнать сколько не занято? Чтобы потом поставить галку "закупать на полный инвентарь". Тоесть он оставляет место под 6 заточек, а в остальные слоты закупает шмотку.

Где именно проблема?
NpcId мы знаем. Вот по нему и надо отслеживать пакеты NPCInfo, где брать NpcObjectID. Уходишь подальше и возвращаешся назад, сервер шлет NpcInfo. Пользуешься таргетом.
Я использовал процедуры таргет, таргетаттакер, и юсеринфо... и короче ПХ вылетал с ошибкой. Как ловить пакет чтобы юзер инфо выдал координаты?

Успехов! Будет интересно посмотреть.
PS: а вещи ты покупать планируешь, или только заточки?
Стараюсь =) Конечно планирую. Вот как только с таргетом разберусь, смогу закупку прикрутить. Нада бы форму доделать под нее. Я окошки уже расширил, мсг, и статс, нада между ними всунуть чекбоксы, и выпадалки.
У меня уже есть скрипт на закупку, юзаю вручную через окно Дополнительно. Умеет закупать нужное количество по подставленным зачениям, 3 режима закупки - закупка+обмен денег, закупка, обмен.

Посмотри какой алгоритм я вижу на закупку заточек:
Выбираем заточку в главном окне. Там появляется значение ItemID, мы его записываем в другу переменную, например ChoosedScroll(если нада), а это например 730.
После заточки используем процедуру BuyScroll(ChoosedScroll);
Процедура BuyScroll(ChoosedScroll: integer);
В ней некая база. Возможно по такому принципу:
if ChoosedScroll 730 then ListID = 559, EntryID = 15
if ChoosedScroll 6757 then ListID = 559, EntryID = 35
и тд. подствяем их, и отправляем рекмультиселлитем(ListID, EntryID, 1);
end;
Вот что-то типа этого. Направление мыслей вообще правильное?

Shadow
09.08.2008, 00:23
Вот созрел извращенный вариант:

procedure ScrollBase(ChosenScroll: integer, var BuyLID, BuyEID: integer, InBaseID: boolean);
//Base
if ChosenScroll=730 then begin
BuyLID:=559
BuyEID:=15
InBaseID:=true;
end;
if ChosenScroll=6757 then begin
BuyLID:=559
BuyEID:=35
InBaseID:=true;
end;
//тут не знаю как выдать если ничего не нашли...
else
InBaseID:=false;
end;
procedure BuyItem(BuyLID, BuyEID, BuyDelay, ItemCount: integer);
begin
for Cnt:=1 to ItemCount do begin
RequestMultiSellItem(BuyLID, BuyEID, 1);
delay(BuyDelay);
end;
end;
//..................................... код ...............................................
EnchantItem;
//запрос в базу перед покупкой
ScrollBase(ChosenScroll, BuyLID, BuyEID, IDKnown);
if InBaseID BuyItem(BuyLID, BuyEID, BuyDelay, ItemCount) else типа пишем - не найден в базе
timer.enable:=false;

ChosenScroll, BuyDelay, Count соотвественно берутся из формы.

Breadfan
09.08.2008, 02:35
Кстати отступление: на одном пвп сервере получил бан перса - из за того что понедомыслию поставил скупку точек по одной после прихода инфы о результате заточке ). Пояснение админа: " быстро и часто покупал заточки" ))

Shadow
11.08.2008, 13:44
Скрипт под моей редакцией. Версия 3.5 =)
Что сделал:

Добавлены кнопки на закупку и обмен (но выбирать магазин нада вручную, не работает таргет =))


Подсчет свободных слотов, и закупка в них выбраной шмотки через кнопку


Автозакупка свитков после каждой заточки (можно менять задержку, чтобы эмулировать человека ;) )


Считалка денег. Считает коэф. для обмена, сколько свитков можно купить на эти деньги, и хватит ли денег на автозакупку.


Отключение и включение кнопок в зависимости от текущей операции (Закупка и обмен отключаются когда идет заточка, и когда невозможно закупить или обменять, а старт когда он нажат)


База по ID шмоток и свитков - LID, EID (Свитки в базе все, шмот только тот что пока проверял)


И первая стадия автономности - Автозакупка шмота когда нечего точить. Сделана на скорую руку, перед сном =)

Как работает:
Обновление инвентаря срабатывает только после 2 нажатий стоп. Как сделать правильно, хз.
Автозакупка сделана криво, через цикл. Сначала проходит мультиселл по циклу на свободные слоты, потом скрипт долго думает, потом начинает добавлять шмот в базу. При этом аж подвисает ПХ.
Вообщем точит по сути пока не закончаться деньги. И еще все время один свиток тратит сразу, и только после этого начинает затачивать. Видимо нада пораньше закупку поставить.
Еще пытался реализовать схему закупки - если диалог открыт, значит сразу посылать мультисел, если нет, открыть и поставить значение открыт. Это чтобы он не посылал запросы байпасс постоянно. Но чет не получилось, оставил как было.

Как должно быть:
Автозакупку через чекбокс. Причем чтобы добавление происходило на каждую шмотку, без тормозов, и он всегда подсчитывал сколько еще слотов свободно.
Адекватная реакция всех кнопок на происходящее. А то у меня сейчас видимо не в тех местах расставлено, и кнопки включаются когда не должны.
Ну и таргет наконец. Тогда он сможет и закупать все, и деньги менять сам. Полностью автономный скрипт =) Вот бы еще клиент не вылетал с ним переодически.

program Enchant;
//............................................
//Список констант
const
Name='Char'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
//-------------------------
max=100; //количество слотов в инвентаре чара
kID=1023000; //смещение C6
Roy=31228; // Shop ID
Winnie=31229;// Change ID
//............................................
//Список переменных
var
Item, scrl: integer;
ScrollID, ScrollOID: integer; //ScrollID скролла заточки
ItemID,ItemOID: integer; //ItemID затачиваемого предмета
MaxEnchLvl: integer; //уровень заточки который требуется достичь
ItemBase: array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
ready, add, InBase, CanChange, CanBuy: boolean;
timer: TTimer;
BuyDelay, ScriptDelay: integer;
ItemCount, CurEnchLvl: integer;
// Buy Var
Adena, CoL, EmptySlots, CoLChangeCount: integer;
ItemListID, ItemEntryID, BuyItemCount, ItemPrice: integer;
ScrollListID, ScrollEntryID, BuyScrollCount, ScrollPrice: integer;
ItemName, ScrollName: string;
ItemWindowOpened, ScrollWindowOpened: boolean;
MyX, MyY, MyZ, MyOID, ObjectID: integer; //Статы
//
SocialID : integer; // вспомогательная
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
FormMain : TForm; //Создаваемая форма
Splitter1 : TSplitter;
Splitter2 : TSplitter;
Stats : TMemo;
Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label2 : TLabel;
Label4 : TLabel;
Label12 : TLabel;
Label13 : TLabel;
LabelBD : TLabel;
CheckBoxItem : TCheckBox;
ComboBoxItem : TComboBox;
ButtonStartEnchant: TButton;
ButtonStopEnchant : TButton;
ButtonBuyItems : TButton;
ButtonChangeAdena : TButton;
ButtonBuyScroll : TButton; //тестовая кнопка
ButtonChangeWindow: TButton; //тестовая кнопка
CheckBoxScroll : TCheckBox;
ComboBoxScroll : TComboBox;
EditItemVal : TEdit;
EditScrollVal : TEdit;
EditScrollOID : TEdit;
EditItemOID : TEdit;
Label1 : TLabel;
Label3 : TLabel;
Edit1 : TEdit;
Edit2 : TEdit;
Edit3 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
if (EmptySlots>0) then begin
ItemIDBase(InBase);
ButtonBuyItems.Enabled:=True;
ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');
stats.Lines.Add(' >'+IntToStr(Adena-(ItemPrice*EmptySlots)));
end
else begin
ButtonBuyItems.Caption:=('Инвентарь полон');
end;
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);
ComboBoxItem.Enabled:=false; //выключаем
if (ItemID>0) and (ScrollID>0) and CheckBoxScroll.Checked then begin
ButtonStartEnchant.Enabled:=True;
ButtonStartEnchant.ShowHint:=True;
end;
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
ButtonBuyItems.Caption:=('Закупка');
ButtonBuyItems.Enabled:=False;
ButtonStartEnchant.Enabled:=False;
ButtonStartEnchant.ShowHint:=True;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
var
ScrollToBuy: integer;
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
ItemIDBase(InBase);
ScrollToBuy:=Trunc(Adena/ScrollPrice);
stats.Lines.Add('Автозакупка свитков включена');
stats.Lines.Add((ScrollName)+': '+IntToStr(ScrollPrice)+'А.');
stats.Lines.Add('Аден хватит на '+IntToStr(ScrollToBuy)+' свитков');
// проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
if (ItemID>0) and (ScrollID>0) and CheckBoxItem.Checked then begin
ButtonStartEnchant.Enabled:=True;
ButtonStartEnchant.ShowHint:=True;
end;
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
ButtonStartEnchant.Enabled:=False;
ButtonStartEnchant.ShowHint:=True;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
Edit3.Enabled:=False;
Edit3.ReadOnly:=True;
ButtonBuyItems.Enabled:=False;
ButtonBuyItems.Caption:=('Закупка');
ButtonChangeAdena.Enabled:=False;
ButtonChangeAdena.Caption:=('Обмен');
msg.Lines.Add('Команда Старт!');
ButtonStartEnchant.Enabled:=False;
ButtonStartEnchant.ShowHint:=False;
timer.enabled:=true;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!');
timer.enabled:=false;
ready:=false;
buf:=hstr('0F');
SendToServerEx(Name);
Edit3.Enabled:=True;
Edit3.ReadOnly:=False;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if CheckBoxItem.Checked then begin
if (EmptySlots>0) and CanBuy then begin
ButtonBuyItems.Enabled:=True;
ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');
end
else begin
ButtonBuyItems.Enabled:=False;
ButtonBuyItems.Caption:=('Инвентарь полон');
end;
end else begin
ButtonBuyItems.Enabled:=False;
ButtonBuyItems.Caption:=('Закупка');
end;
if not CanChange then begin
ButtonChangeAdena.Enabled:=False;
ButtonChangeAdena.Caption:=('Максимум Аден');
end else begin
ButtonChangeAdena.Enabled:=True;
ButtonChangeAdena.Caption:=('Обменять '+IntToStr(CoLChangeCount*100)+' CoL');
end;
ButtonStartEnchant.Enabled:=True;
ButtonStartEnchant.ShowHint:=True;
ButtonChangeAdena.Enabled:=True;
// ButtonChangeAdena.Caption:=('Обмен');
end;
//......................................
//......................................
//ButtonBuyItems
procedure ButtonBuyItems_Click(Sender: TButton);
//Event : OnClick
begin
stats.Lines.Add('Закупка '+(ItemName));
timer.enabled:=false;
ready:=False;
BuyItems(EmptySlots);
ready:=True;
end;
//......................................
//......................................
//ButtonBuyScroll тестовая
procedure ButtonBuyScroll_Click(Sender: TButton);
//Event : OnClick
begin
ItemIDBase(InBase);
if InBase then BuyScroll;
end;
//......................................
//......................................
//ButtonChangeWindow тестовая
procedure ButtonChangeWindow_Click(Sender: TButton);
var Cnt: integer;
//Event : OnClick
begin
TargetAttacker(ObjectID);
end;
//......................................
//......................................
//ButtonChangeAdena
procedure ButtonChangeAdena_Click(Sender: TButton);
//Event : OnClick
begin
timer.enabled:=false;
ready:=False;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if CanChange then CoLChange;
if not CanChange then begin
ButtonChangeAdena.Enabled:=False;
ButtonChangeAdena.Caption:=('Максимум Аден');
end;
ready:=True;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
//
end;
//......................................
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//......................................
//************************************************** *************
//21=RequestBypassToServer:s(Cmd)
procedure RequestByPassToServer(cmd:string);
begin
buf:=#$21;
WriteS(cmd);
SendToServerEx(Name);
end;
//......................................
//************************************************** *************
procedure RequestMultiSellItem(ListId,EntryID,Count:integer) ;
begin
msg.Lines.Add('Покупаем ListID:'+inttostr(ListID)+' EntryID:'+inttostr(EntryID)+' в кол-ве:'+inttostr(count));
buf:=#$A7;
WriteD(ListID);
WriteD(EntryId);
WriteD(Count);
SendToServerEx(Name);
end;
//************************************************** *************
//************************************************** *************
//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ShiftFlag)
procedure Target(ObjectID: Integer);
begin
buf:=#$04;
WriteD(ObjectID);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteC(00);
SendToServerEx(Name);
end;
//......................................
//************************************************** *************
procedure TargetAttacker(Attacker: Integer);
begin
msg.Lines.Add('ObjectID='+IntToStr(Attacker)+' Player='+IntToStr(MyOID));
timer.enabled:=false;
Target(ObjectID);
delay(800);
Target(ObjectID);
delay(800);
end;
//......................................
//************************************************** *************
procedure ItemIDBase(var InBase: boolean);
begin
//*** Scroll Base ***
if ScrollID=955 then begin
ScrollListID:=559;
ScrollEntryID:=1;
BuyScrollCount:=1;
ScrollName:=('Enchant Weapon (Grade D)');
ScrollPrice:=50000;
InBase:=True;
end;
if ScrollID=956 then begin
ScrollListID:=559;
ScrollEntryID:=3;
BuyScrollCount:=1;
ScrollName:=('Enchant Armor (Grade D)');
ScrollPrice:=6000;
InBase:=True;
end;
if ScrollID=951 then begin
ScrollListID:=559;
ScrollEntryID:=5;
BuyScrollCount:=1;
ScrollName:=('Enchant Weapon (Grade C)');
ScrollPrice:=110000;
InBase:=True;
end;
if ScrollID=952 then begin
ScrollListID:=559;
ScrollEntryID:=7;
BuyScrollCount:=1;
ScrollName:=('Enchant Armor (Grade C)');
ScrollPrice:=15000;
InBase:=True;
end;
if ScrollID=947 then begin
ScrollListID:=559;
ScrollEntryID:=9;
BuyScrollCount:=1;
ScrollName:=('Enchant Weapon (Grade B)');
ScrollPrice:=500000;
InBase:=True;
end;
if ScrollID=948 then begin
ScrollListID:=559;
ScrollEntryID:=11;
BuyScrollCount:=1;
ScrollName:=('Enchant Armor (Grade B)');
ScrollPrice:=80000;
InBase:=True;
end;
if ScrollID=729 then begin
ScrollListID:=559;
ScrollEntryID:=13;
BuyScrollCount:=1;
ScrollName:=('Enchant Weapon (Grade A)');
ScrollPrice:=5000000;
InBase:=True;
end;
if ScrollID=730 then begin
ScrollListID:=559;
ScrollEntryID:=15;
BuyScrollCount:=1;
ScrollName:=('Enchant Armor (Grade A)');
ScrollPrice:=500000;
InBase:=True;
end;
if ScrollID=959 then begin
ScrollListID:=559;
ScrollEntryID:=17;
BuyScrollCount:=1;
ScrollName:=('Enchant Weapon (Grade S)');
ScrollPrice:=10000000;
InBase:=True;
end;
if ScrollID=960 then begin
ScrollListID:=559;
ScrollEntryID:=19;
BuyScrollCount:=1;
ScrollName:=('Enchant Armor (Grade S)');
ScrollPrice:=1000000;
InBase:=True;
end;
if ScrollID=6575 then begin
ScrollListID:=559;
ScrollEntryID:=21;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Weapon (Grade D)');
ScrollPrice:=500000;
InBase:=True;
end;
if ScrollID=6576 then begin
ScrollListID:=559;
ScrollEntryID:=23;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Armor (Grade D)');
ScrollPrice:=60000;
InBase:=True;
end;
if ScrollID=6573 then begin
ScrollListID:=559;
ScrollEntryID:=25;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Weapon (Grade C)');
ScrollPrice:=2000000;
InBase:=True;
end;
if ScrollID=6574 then begin
ScrollListID:=559;
ScrollEntryID:=27;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Armor (Grade C)');
ScrollPrice:=300000;
InBase:=True;
end;
if ScrollID=6571 then begin
ScrollListID:=559;
ScrollEntryID:=29;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Weapon (Grade B)');
ScrollPrice:=5000000;
InBase:=True;
end;
if ScrollID=6572 then begin
ScrollListID:=559;
ScrollEntryID:=31;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Armor (Grade B)');
ScrollPrice:=800000;
InBase:=True;
end;
if ScrollID=6569 then begin
ScrollListID:=559;
ScrollEntryID:=33;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Weapon (Grade A)');
ScrollPrice:=50000000;
InBase:=True;
end;
if ScrollID=6570 then begin
ScrollListID:=559;
ScrollEntryID:=35;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Armor (Grade A)');
ScrollPrice:=5000000;
InBase:=True;
end;
if ScrollID=6577 then begin
ScrollListID:=559;
ScrollEntryID:=37;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Weapon (Grade S)');
ScrollPrice:=100000000;
InBase:=True;
end;
if ScrollID=6578 then begin
ScrollListID:=559;
ScrollEntryID:=39;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Armor (Grade S)');
ScrollPrice:=10000000;
InBase:=True;
end;
//*** Item Base ***
if ItemID=2407 then begin
ItemListID:=565;
ItemEntryID:=75;
BuyItemCount:=1;
ItemName:=('DC Robe');
ItemPrice:=5080000;
end;
if ItemID=6592 then begin
ItemListID:=558;
ItemEntryID:=41;
BuyItemCount:=1;
ItemName:=('AC Haste');
ItemPrice:=20000000;
end;
if InBase=false then begin
stats.Lines.Add('Неизвестный: '+IntToStr(ItemID));
stats.Lines.Add('Неизвестный: '+IntToStr(ScrollID));
end;
end;
//************************************************** ************
procedure BuyScroll;
begin
if InBase then begin
// if ItemWindowOpened then begin
RequestByPassToServer('menu_select?ask=-303&reply=559');
delay(500); // Ждем открытия диалога
// ScrollWindowOpened:=True;
// LabelBD.Caption:='Scroll';
// end;
// if ScrollWindowOpened then begin
delay(BuyDelay);
RequestMultiSellItem(ScrollListID, ScrollEntryID, BuyScrollCount);
delay(BuyDelay);
// ScrollWindowOpened:=True;
// end;
end;
end;
//************************************************** *************
procedure BuyItems(EmptySlots: integer);
var
Cnt: integer;
begin
//ready:=False;
// Диалог закупки оружия
if CanBuy then begin
delay(50);
if InBase then begin
// if ScrollWindowOpened then begin
RequestByPassToServer('menu_select?ask=-303&reply='+IntToStr(ItemListID));
delay(500); // Ждем открытия диалога
// ItemWindowOpened:=True;
// LabelBD.Caption:='Item';
// end;
// if ItemWindowOpened then begin
for Cnt:=1 to EmptySlots do begin
delay(10);
RequestMultiSellItem(ItemListID, ItemEntryID, BuyItemCount);
delay(BuyDelay);
end;
// ItemWindowOpened:=True;
end;
// end;
// ready:=True;
end;
end;
//************************************************** *************
procedure AutoBuy;
var
Cnt: integer;
begin
timer.enabled:=False;
ready:=False;
buf:=hstr('0F');
SendToServerEx(Name);
ItemIDBase(InBase);
RequestByPassToServer('menu_select?ask=-303&reply='+IntToStr(ItemListID));
delay(500); // Ждем открытия диалога
for Cnt:=1 to EmptySlots do begin
delay(10);
RequestMultiSellItem(ItemListID, ItemEntryID, BuyItemCount);
delay(BuyDelay);
end;
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
Edit3.Enabled:=False;
Edit3.ReadOnly:=True;
delay(10000);
timer.enabled:=True;
end;
//************************************************** *************
procedure AdenaCounter(var CoLChangeCount: integer; var CanChange, CanBuy: boolean);
begin
if (Adena>=2000000000) then CanChange:=False;
if (Adena<=1900000000) then begin
CoLChangeCount:=(20-Trunc((Adena/1000000)/100));
CanChange:=True;
end;
if ((Adena-(ItemPrice*EmptySlots))>1) then CanBuy:=True;
end;
//************************************************** *************
procedure CoLChange;
var
ALID, AEID, ACnt: integer;
Cnt, CoLChangeCount: integer;
begin
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
ALID:=576;
AEID:=3;
ACnt:=100;
if CanChange then begin
ButtonChangeAdena.Enabled:=False;
ButtonChangeAdena.Caption:=('Обмениваем '+IntToStr(CoLChangeCount*100)+' CoL');
//Вызов диалога обмена
delay(50);
RequestByPassToServer('menu_select?ask=-303&reply=576');
delay(500); //Ждем открытия диалога
for Cnt:=1 to CoLChangeCount do begin
RequestMultiSellItem(ALID, AEID, ACnt);
delay(BuyDelay);
end;
end;
end;
//************************************************** *************
//************************************************** *************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant (NLObP v.0.7) - Shadow Edition v3.5';
Result.Left := 397;
Result.Top := 233;
Result.Width := 681;
Result.Height := 300;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 573;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 443;
Stats.Top := 0;
Stats.Width := 230;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 115;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Enchant PH Script';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 170;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//LabelBuyDelay
LabelBD := TLabel.Create(Result);
LabelBD.Parent := GroupBox2;
LabelBD.Left := 161;
LabelBD.Top := 98;
LabelBD.Width := 58;
LabelBD.Height := 13;
LabelBD.Visible := TRUE;
LabelBD.Tag := 0;
LabelBD.Enabled := TRUE;
LabelBD.Hint := 'Задержка при закупке';
LabelBD.ShowHint := True;
LabelBD.Caption := 'BDelay:';
LabelBD.Transparent := TRUE;
LabelBD.WordWrap := FALSE;
LabelBD.Alignment := taLeftJustify;
LabelBD.Layout := tlTop;
LabelBD.AutoSize := TRUE;
LabelBD.Align := alNone;
LabelBD.Font.Name := 'Tahoma';
LabelBD.Font.Size := 8;
LabelBD.Font.Color := clWindowText;
LabelBD.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень заточки';
Edit1.ShowHint := TRUE;
Edit1.Text := '10';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 199;
Edit2.Top := 67;
Edit2.Width := 60;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//BuyScrollDelay
Edit3 := TEdit.Create(Result);
Edit3.Parent := GroupBox2;
Edit3.Left := 199;
Edit3.Top := 95;
Edit3.Width := 60;
Edit3.Height := 21;
Edit3.Visible := TRUE;
Edit3.Tag := 0;
Edit3.Enabled := TRUE;
Edit3.Hint := 'Задержка при закупке';
Edit3.ShowHint := TRUE;
Edit3.Text := '150';
Edit3.Font.Name := 'Tahoma';
Edit3.Font.Size := 8;
Edit3.Font.Color := clWindowText;
Edit3.Color := clWindow;
Edit3.TabOrder := 5;
Edit3.TabStop := True;
Edit3.ReadOnly := False;
Edit3.MaxLength := 0;
Edit3.AutoSize := TRUE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 90;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 169;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка затачиваемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := False;
ButtonStartEnchant.Hint := 'Выберите предмет и заточку';
ButtonStartEnchant.ShowHint := True;
ButtonStartEnchant.Caption := 'Начать';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Остановить';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//ButtonBuyItems
ButtonBuyItems := TButton.Create(Result);
ButtonBuyItems.Parent := GroupBox2;
ButtonBuyItems.Left := 265;
ButtonBuyItems.Top := 95;
ButtonBuyItems.Width := 150;
ButtonBuyItems.Height := 25;
ButtonBuyItems.Visible := TRUE;
ButtonBuyItems.Tag := 0;
ButtonBuyItems.Enabled := False;
ButtonBuyItems.Hint := 'Закупка предметов';
ButtonBuyItems.ShowHint := False;
ButtonBuyItems.Caption := 'Закупка';
ButtonBuyItems.Font.Name := 'Tahoma';
ButtonBuyItems.Font.Size := 8;
ButtonBuyItems.Font.Color := clWindowText;
ButtonBuyItems.Font.CharSet := 1;
ButtonBuyItems.TabOrder := 3;
ButtonBuyItems.TabStop := TRUE;
ButtonBuyItems.Cancel := FALSE;
ButtonBuyItems.ModalResult := 0;
ButtonBuyItems.OnClick := @ButtonBuyItems_Click;
//......................................
//......................................
ButtonBuyScroll := TButton.Create(Result);
ButtonBuyScroll.Parent := GroupBox2;
ButtonBuyScroll.Left := 91;
ButtonBuyScroll.Top := 95;
ButtonBuyScroll.Width := 25;
ButtonBuyScroll.Height := 25;
ButtonBuyScroll.Visible := TRUE;
ButtonBuyScroll.Tag := 0;
ButtonBuyScroll.Enabled := TRUE;
ButtonBuyScroll.Hint := '';
ButtonBuyScroll.ShowHint := False;
ButtonBuyScroll.Caption := 'S';
ButtonBuyScroll.Font.Name := 'Tahoma';
ButtonBuyScroll.Font.Size := 8;
ButtonBuyScroll.Font.Color := clWindowText;
ButtonBuyScroll.Font.CharSet := 1;
ButtonBuyScroll.TabOrder := 3;
ButtonBuyScroll.TabStop := TRUE;
ButtonBuyScroll.Cancel := FALSE;
ButtonBuyScroll.ModalResult := 0;
ButtonBuyScroll.OnClick := @ButtonBuyScroll_Click;
//......................................
//......................................
ButtonChangeWindow := TButton.Create(Result);
ButtonChangeWindow.Parent := GroupBox2;
ButtonChangeWindow.Left := 91;
ButtonChangeWindow.Top := 123;
ButtonChangeWindow.Width := 25;
ButtonChangeWindow.Height := 25;
ButtonChangeWindow.Visible := TRUE;
ButtonChangeWindow.Tag := 0;
ButtonChangeWindow.Enabled := TRUE;
ButtonChangeWindow.Hint := '';
ButtonChangeWindow.ShowHint := False;
ButtonChangeWindow.Caption := 'W';
ButtonChangeWindow.Font.Name := 'Tahoma';
ButtonChangeWindow.Font.Size := 8;
ButtonChangeWindow.Font.Color := clWindowText;
ButtonChangeWindow.Font.CharSet := 1;
ButtonChangeWindow.TabOrder := 3;
ButtonChangeWindow.TabStop := TRUE;
ButtonChangeWindow.Cancel := FALSE;
ButtonChangeWindow.ModalResult := 0;
ButtonChangeWindow.OnClick := @ButtonChangeWindow_Click;
//......................................
//......................................
//ButtonChangeAdena
ButtonChangeAdena := TButton.Create(Result);
ButtonChangeAdena.Parent := GroupBox2;
ButtonChangeAdena.Left := 265;
ButtonChangeAdena.Top := 123;
ButtonChangeAdena.Width := 150;
ButtonChangeAdena.Height := 25;
ButtonChangeAdena.Visible := TRUE;
ButtonChangeAdena.Tag := 0;
ButtonChangeAdena.Enabled := True;
ButtonChangeAdena.Hint := '';
ButtonChangeAdena.ShowHint := FALSE;
ButtonChangeAdena.Caption := 'Обменять CoL на Адены';
ButtonChangeAdena.Font.Name := 'Tahoma';
ButtonChangeAdena.Font.Size := 8;
ButtonChangeAdena.Font.Color := clWindowText;
ButtonChangeAdena.Font.CharSet := 1;
ButtonChangeAdena.TabOrder := 3;
ButtonChangeAdena.TabStop := TRUE;
ButtonChangeAdena.Cancel := FALSE;
ButtonChangeAdena.ModalResult := 0;
ButtonChangeAdena.OnClick := @ButtonChangeAdena_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали скролл заточки';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Заточка';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;
//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 90;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 169;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка свиток заточки';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color := clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight := 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Информация по работе скрипта');
stats.Lines.Add('Shadow Edition - Info');
// stats.Lines.Add('Адены '+IntToStr(Adena));
// stats.Lines.Add('Coin of Luck '+IntToStr(CoL));
Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
BuyDelay:=StrToInt(Edit3.Text);
// msg.Lines.Add('Задержка на закупку свитков: '+IntToStr(BuyDelay));
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=795; //время задержки
ButtonBuyItems.Enabled:=False;
// ItemWindowOpened:=True;
// if ItemWindowOpened then LabelBD.Caption:=('Item') else LabelBD.Caption:=('Scroll');
ready:=false;
add:=false;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//......................................
//************************************************** ****************************
procedure Free; //Вызывается при выключении скрипта
begin
// ItemBase:=nil; //нельзя так делать с массивом
timer.Free;
StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
end;
//......................................
//************************************************** ****************************
//************************************************** *************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)d(Augment)d(--)
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
ListCount:=ReadH(j); //количество итемов не должно превышать max!
EmptySlots:=(max-ListCount);
stats.Lines.Add('Свободно слотов: '+IntToStr(EmptySlots));
//if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
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
// msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if interlude then inc(j,12) else inc(j,4);
//msg.Lines.Add('j='+inttostr(j));
if itemBase[2,i]=57 then begin
Adena:=itemBase[3,i];
stats.Lines.Add('Имеется Аден: '+IntToStr(Adena));
// ButtonChangeAdena.Caption:=('Адены '+IntToStr(Adena));
end;
if itemBase[2,i]=4037 then begin
CoL:= itemBase[3,i];
stats.Lines.Add('Имеется Coin of Luck: '+IntToStr(CoL));
end;
end;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if not CanChange then ButtonChangeAdena.Enabled:=False;
if CanChange then ButtonChangeAdena.Caption:=('Обменять '+IntToStr(CoLChangeCount*100)+' CoL');
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(ItemBase[2,i])+' в itemsid.ini');
end
end;
except;
msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
msg.Lines.Add(inttostr(ItemBase[2,i]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
//......................................
//************************************************** ****************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(8)
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, ItemOID, ItemID, ItemCount, ListCount, UpdType, Itemlvl: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for ii:=1 to ListCount do begin
UpdType:=ReadH(j);
//inc(j,2);
ReadH(j); //ItemType1
ItemOID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
itemCount:=ReadD(j); //кол-во
inc(j,10);
Itemlvl:=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]:=ItemOID;
ItemBase[2,i]:=ItemID;
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Добавили предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if ItemID=57 then begin
Adena:=ItemCount;
stats.Lines.Add('Получено '+IntToStr(Adena)+' Аден');
end;
if ItemID=4037 then begin
CoL:=ItemCount;
stats.Lines.Add('Получено '+IntToStr(CoL)+' Coin of Luck');
end;
add:=true;
end;
end;
end;
//изменен
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
ItemBase[2,i]:=ItemID;
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Изменяем параметры предмета!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if ItemID=57 then begin
Adena:=ItemCount;
stats.Lines.Add('Адены '+IntToStr(Adena));
end;
if ItemID=4037 then begin
CoL:=ItemCount;
stats.Lines.Add('Coin of Luck '+IntToStr(CoL));
end;
end;
end;
end;
//удален
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
msg.Lines.Add('Удаляем предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
// if i=13 then begin
// Adena:=ItemBase[3,i];
// end;
end;
end;
end;
end;
if interlude then inc(j,10) else inc(j,2);
//msg.Lines.Add('j='+inttostr(j));
end;
end;
//......................................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItem(item:integer; lvl:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
//находим подходящий предмет по ItemID
if (ItemBase[2,i]=item) and (ItemBase[4,i]=lvl) then begin
//если нашли, то возвращаем ObjectID предмета
result:=ItemBase[1,i]; // itemOID
ItemCount:=ItemBase[3,i];
//Itemlvl:=ItemBase[4,i];
//msg.Lines.Add('<item='+inttostr(item)+' lvl='+inttostr(lvl)+'> i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
exit;
end;
end;
//ничего не нашли
result:=0;
end;
//......................................
//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//......................................
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i: integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to max do begin
if (ItemBase[2,i]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
// msg.Lines.Add('i='+inttostr(i));
result:=result+ItemBase[3,i];
//inc(result);
end;
end;
end;
//......................................
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServerEx(Name);
//*********** использовать чит с петом ************************
{ buf:=#$8B;
WriteD(ObjectID);
writed(1);
SendToServerEx(Name);
} //***********
end;
//......................................
procedure UserInfo; //обновление данных о себе
var
i:word;
begin
MyOID:=ReadD(18);
MyX:=ReadD(2);
MyY:=ReadD(6);
MyZ:=ReadD(10);
i:=22;
ReadS(i);
if interlude then inc(i,48) else inc(i,44);
end;
{//************************************************** *************
function ExtractIDValues(sData: string): integer;
var
s: string;
i,j: integer;
begin
i:=0;
s:=sData;
i:=pos('=',s);
if i>=0 then
s:=copy(s,1,i-1);
try
result:=strtoint(s);
except
result:=0;
end;
end;
//............................................}
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (Adena<=1000000) then begin
msg.Lines.Add('Деньги закончились! Прервано!');
stats.Lines.Add('Деньги закончились!');
timer.enabled:=false;
exit;
end;
if (CurEnchLvl>=StrToInt(Edit1.Text)) then begin
msg.Lines.Add('Нечего точить! Прервано!');
timer.enabled:=false;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
delay(50);
stats.Lines.Add('Свободно слотов: '+IntToStr(EmptySlots));
if (EmptySlots>0) then begin
ButtonBuyItems.Enabled:=True;
ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');
end;
AutoBuy;
// BuyItems(EmptySlots);
// delay(100);
// ready:=True;
// timer.enabled:=True;
// exit;
end;
if (sumitem(ItemID)<=5) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Прервано! Покупаем еще.');
timer.enabled:=false;
buf:=hstr('0F');
SendToServerEx(Name);
delay(50);
AutoBuy;
// exit;
end;
ScrollOID:=GetItem(ScrollID,0);
if (ScrollOID<=2) then begin
stats.Lines.Add('Свитки закончились! Прервано!');
timer.enabled:=False;
//***** Закупка заточек *
RequestByPassToServer('menu_select?ask=-303&reply=559');
delay(500); // Ждем открытия диалога
RequestMultiSellItem(ScrollListID, ScrollEntryID, BuyScrollCount);
delay(BuyDelay);
//***********************
timer.enabled:=True;
//exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
end;
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromServer then
case pck[1] of
//************************************************** *************
#$01: begin // MoveBackwardToLocation
if ReadD(2) = MyOID then begin
MyX := ReadD(18);
MyY := ReadD(22);
MyZ := ReadD(26);
end;
//stats.Lines.Add('X'+IntToStr(MyX)+', Y'+IntToStr(MyY)+', Z'+IntToStr(MyZ));
end;
//************************************************** *************
#$04: begin //пакет с инфой о моём чаре
//msg.Lines.Add('S>Пакет UserInfo #$04');
UserInfo;
end;
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27: InventoryUpdate; //Обновление базы
//......................................
#$16: begin
ObjectID:=(ReadD(2));
stats.Lines.Add('S> OID '+IntToStr(ObjectID)+', ID '+IntToStr(ReadD(6)));
// OID ID
// AppendNpc(ReadD(2), ReadD(6)); //добавляем в базу данных
if (Roy=ReadD(6)-kID) then stats.Lines.Add('Roy OID='+IntToStr(ObjectID));
if (Winnie=ReadD(6)-kID) then stats.Lines.Add('Winnie OID='+IntToStr(ObjectID));
// EditFishermanOID.text:=inttostr(ReadD(2));
// FishermanOID:=strtoint(EditFishermanOID.text);
// end;
end;
//Пакет ChooseInventory
#$6F: if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItem(ItemID,CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=IntToStr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
//***** Закупка заточек *
if InBase then BuyScroll;
//***********************
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true; //пока в тесте отключаем (вкл. после заточки предмета)
end;
#$81: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
end;
end;
end.

2 NLObP
Понатыкал где мог, чтобы обновлять инфу об инвентаре перед закупкой:
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
Где его по нормальному нада ставить?

Shadow
13.08.2008, 11:48
NLObP
Вобщем посмотрел в пакетах ОбджектИД продавцов, и пытался их отловить через скрипт, чтобы понять какой у них ИД, чтобы смещение вычислить. Так ничего и не получилось. Пользуюсь таргетом через явный ОИД. Чего скажешь по скрипту и предыдущему вопросу?

NLObP
13.08.2008, 22:39
Вобщем посмотрел в пакетах ОбджектИД продавцов, и пытался их отловить через скрипт, чтобы понять какой у них ИД, чтобы смещение вычислить. Так ничего и не получилось. Пользуюсь таргетом через явный ОИД. Чего скажешь по скрипту и предыдущему вопросу?

Иди в место где есть 1-2 NPC, там проще будет. Отследи пакеты NpcInfo и сравни NpcID в пришедших пакетах и из npcsid.ini для них же. Разница и будет kID.

Наприме Гиран-харбор, там три Npc:
npcid.ini NpcInfo
7878=Angelina Gatekeeper NpcTypeId: 1030878
7879=Felton Wharf Manager NpcTypeId: 1030879
8573=Monakan Fishermen's Guild Member NpcTypeId: 1031573

kId = 1030878-7878 = 1023000

Пробуешь подсчитать разницу между тем что в NpcInfo и тем что должно быть и это будет kID. Понятно? Как определишь kID, тогда сможишь соотносить NpcID с NpcObjectId.

#$16: begin
msg.Lines.Add('S>Пакет NpcInfo #$16'+inttostr(ReadD(2)));
// OID ID
AppendNpc(ReadD(2), ReadD(6)); //добавляем в базу данных
if (FishermanID=ReadD(6)-kID) then begin
EditFishermanOID.text:=inttostr(ReadD(2));
FishermanOID:=strtoint(EditFishermanOID.text);
end;
end;


По скрипту пока ничего не скажу, проверить работу негде.

Shadow
14.08.2008, 01:34
2 NLObP
Все, спасибо, разобрался. Проблема была в том что у меня были неверные ID продавцов, которые мне выдал IG. Теперь нашел верные, смещение такое же.

Подскажи пожалуйста, как реализовать данный алгоритм:

Вводные: Мы знаем кол-во Аден, цену итема, и кол-во свободных слотов.
К примеру. Есть 2млрд Аден, цена АС 200млн, свободно 40 слотов.

Понятное дело что за раз мы столько не купим, поэтому я как понимаю нужно что-то типа этого:

начало
запрос кол-ва аден
если (ценашмотки*свободслотов<аден) то
закупка по циклу на свободслоты
иначе
цикл до свободслотов
закупка на сколько хватит
обмен денег
конец
конец

Сейчас оно у меня в таком виде:

procedure BuyItems(EmptySlots: integer); //тут видимо вообще не нужно указывать переменную, тк она глобальная
var
Cnt, IoA: integer; //Item on Adena
begin
if InBase then begin
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if CanChange then CoLChange;
TargetAttacker('Roy', RoyOID);
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
IoA:=(trunc(Adena/ItemPrice));
// TargetAttacker(ObjectID);
RequestByPassToServer('menu_select?ask=-303&reply='+IntToStr(ItemListID));
delay(500); // ждем окно
if (IoA>EmptySlots) then begin
for Cnt:=1 to EmptySlots do begin
RequestMultiSellItem(ItemListID, ItemEntryID, BuyItemCount);
delay(BuyDelay);
end;
end else begin
for Cnt:=1 to IoA do begin
RequestMultiSellItem(ItemListID, ItemEntryID, BuyItemCount);
delay(BuyDelay);
end;
end;
end;
end;


И всетаки, как сделать закупку чтобы с каждым итемом база обновлялась? А то происходит вот что:

Удаляем предмет!
i=51 ItemOID=1075255597 ItemID=959 кол-во=1 ItemLVL=0
Деньги закончились! Прервано!
Winnie ObjectID=1209014842 Player=1213259366
Покупаем ListID:576 EntryID:3 в кол-ве:100
{...
...
...}
Покупаем ListID:576 EntryID:3 в кол-ве:100
Roy ObjectID=1209014840 Player=1213259366
Задействовали скролл ScrollID=959 ScrollOID=1075255607
Изменяем параметры предмета!
i=95 ItemOID=1075227868 ItemID=4037 кол-во=3384753 ItemLVL=0
Изменяем параметры предмета!
i=73 ItemOID=1075227891 ItemID=57 кол-во=9691800 ItemLVL=0
{...
...
...}
i=95 ItemOID=1075227868 ItemID=4037 кол-во=3382853 ItemLVL=0
Изменяем параметры предмета!
i=73 ItemOID=1075227891 ItemID=57 кол-во=2089691800 ItemLVL=0
Покупаем ListID:559 EntryID:17 в кол-ве:1
Пробуем улучшить ItemID=6592 ItemOID=1075249921
Изменяем параметры предмета!

Тоесть сначала пробегает цикл, потом он успевает сменить таргет, и только после этого итемы начинают заносится в базу. Из-за этого было переполнение кошелька.

dmitry501
14.08.2008, 07:20
Циклы не используй в главном потоке. Используй сквозное программирование. Учти, твой скрипт вызывается в секунду несколько раз. Не нужно тормозить обмен клиента с сервером.

NLObP
15.08.2008, 03:36
dmitry501, пример реализации можно?

В главной секции begin ... end. должна быть, по возможности, только реакция на приходящие пакеты, то есть вызов соответствующих подпрограмм.

Добавлено через 2 минуты
можно пример для работы на c4?
пожалуйста.

К кому и какому скрипту относится вопрос? Если к моему то там просто настроить его надо. Для этого почитать в начале скрипта описание.

Name='имя_чара'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=false; //Interlude - true, C4 - false

Shadow
15.08.2008, 13:14
2 NLObP
А у меня циклов в главной секции нет. Все циклы в процедурах.
Вообщем ковыряю твою рыбалку на предмет корректной закупки. Вроде суть понял, но есть вопросы:
1. Не понятно как вызывать закупку при поломке шмоток, или когда все заточилось. Предполагаю что в процедуре ОнТаймер ставить ReadyToMultiSell:=True; Но как-то еще нужно считать сколько слотов, сколько можно закупить, и тд.
2. Он будет кидать таргет, байпас, и мультиселл при входе каждого пакета?
3. Например, я поставил оставлять 5 итемов вместо 1, и вот уже в инвентаре есть 5 итемов с нужным уровнем. Как сделать чтобы он оставлял именно те 5 что точил в текущем цикле? Типа есть 5 штук +16, а в текущем (с новой закупки) он заточил только до +10. Нужно считать именно те 5 штук +10 что точили, исключая 5 с заданым уровнем, закупаем еще, и дальше точим.
4. ReadyToMultiSell ловится в главной секции без привязки к конкретным пакетам?

NLObP
15.08.2008, 13:50
Shadow, покупка разорвана на несколько этапов.
покупка состоит из следующих шагов:

1. Мы начинаем покупку установив таргет на продавце:
таргет на продавце, пауза, снова таргет (c04=Action, c04=Action)

2. Потом ждем сообщения от продавца:
приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)

3.Выбираем требуемый пункт:
шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)

4. Опять ждем сообщения от продавца:
приходит s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemTyp e1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d( ItemBodyPart)

5. По нужному ID подсчитывае сколько надо вещей Count, запоминаем ListId.

6. Всё это шлем в пакете покупки:
шлем c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)

Замечание:
Так как в основном цикле приходят пакеты, даже когда мы их не ждём, то надо дополнительно флагами, например ReadyToMultiSell, разрешать отслеживание тех или иных пакетов.

PS: надеюсь понятно.

Shadow
15.08.2008, 14:28
Замечание:
Так как в основном цикле приходят пакеты, даже когда мы их не ждём, то надо дополнительно флагами, например ReadyToMultiSell, разрешать отслеживание тех или иных пакетов.
PS: надеюсь понятно.
Это понятно, сам принцип покупки мне давно известен, и (криво), но реализован в моей версии посредством циклов.
Я говорю вот о чем. Предположим свободно 80 слотов. И получается что все 80 раз будет посылаться таргет, байпасс, и РМС, что не есть хорошо. Хотя нужно послать один раз таргет, один раз байпасс, и 80 раз рекуестмультиселл. При обмене соотвественно таргет на другого кота, байпасс, и нужное количество РМС для обмена.

NLObP
15.08.2008, 22:12
Предположим свободно 80 слотов. И получается что все 80 раз будет посылаться таргет, байпасс, и РМС, что не есть хорошо. Хотя нужно послать один раз таргет, один раз байпасс, и 80 раз рекуестмультиселл. При обмене соотвественно таргет на другого кота, байпасс, и нужное количество РМС для обмена.

Готовь пакет на все 80 предметов
c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)

d(BuyCount) - сколько будет повторов -> i(ItemID)d( Count)

к примеру
id - #$1F
h(ListID) - #$1234567
d(BuyCount) - 80
i(ItemID) - #$123
d( Count) - 1
... ( повторяем в цикле)
i(ItemID) - #$800
d( Count) - 1

Shadow
16.08.2008, 23:47
Готовь пакет на все 80 предметов
c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)

d(BuyCount) - сколько будет повторов -> i(ItemID)d( Count)

к примеру
id - #$1F
h(ListID) - #$1234567
d(BuyCount) - 80
i(ItemID) - #$123
d( Count) - 1
... ( повторяем в цикле)
i(ItemID) - #$800
d( Count) - 1

Так у меня ведь не RequestBuyItem, а RequestMultiSell, тоесть обмен. А там такого нет.

Добавлено через 13 часов 42 минуты
Переделал обменную часть от рыбалки. Но периодически он останавливается. И постоянно слетает коннект. Посмотрите, что я не так сделал:

//************************************************** ****************************
//.................................................. ............................
// Закупка
procedure Shoping(Sender: TObject);
begin
timer.Enabled:=False;
Change.Enabled:=False;
// if ShopMode=1 then begin
if NeedToBuy then exit; //если еще не обменяли предыдущую вещь, то выходим сразу
if (RoyOID=0) then begin //(RoyOID=0) or
Shops.Enabled:=False; //останавливаем торговлю
stats.Lines.Add('Не определены OID! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if (Adena<ItemPrice) then begin
Shops.Enabled:=False; //останавливаем
stats.Lines.Add('Не хватает денег.');
NeedToChange:=True;
// Shops.Enabled:=True;
exit;
end;
if (EmptySlots<=2) then begin //проверка на выход
Shops.Enabled:=False; //останавливаем торговлю
TargetAttacker('Roy', RoyOID); //таргет
msg.Lines.Add('Всё закупили!');
CurEnchLvl:=0;
Edit2.text:=IntToStr(CurEnchLvl);
EditBuyDelay.Enabled:=False;
timer.Enabled:=True;
end
else
begin
msg.Lines.Add('Цель Roy >');
TargetAttacker('Roy', RoyOID); //таргет
msg.Lines.Add('Готовы обменять: '+IntToStr(EmptySlots-2));
NeedToBuy:=True; //готовы обменивать
end;
end;
//.................................................. ............................
//.................................................. ............................
// Обмен
procedure OnChange(Sender: TObject);
begin
timer.Enabled:=False;
Shops.Enabled:=False;
if NeedToChange then exit; //если еще не обменяли предыдущую вещь, то выходим сразу
if (WinnieOID=0) then begin //(RoyOID=0) or
Change.Enabled:=False; //останавливаем торговлю
stats.Lines.Add('Не определены OID! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if (Adena>=1900000000) then begin //проверка на выход
Change.Enabled:=False; //останавливаем
TargetAttacker('Roy', RoyOID); //таргет
msg.Lines.Add('Всё обменяли!');
timer.Enabled:=True;
end
else
begin
msg.Lines.Add('Цель Winnie >');
TargetAttacker('Winnie', WinnieOID); //таргет
msg.Lines.Add('Готовы обменять: '+IntToStr(ColChangeCount));
NeedToChange:=True; //готовы обменивать
end;
end;
//.................................................. ............................
//************************************************** ****************************
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.Text:=IntToStr(SumItem(ItemID));
EditScrollVal.Text:=IntToStr(SumItem(ScrollID));
if (Adena<=99000000) then begin
stats.Lines.Add('Деньги закончились! Меняем...');
timer.Enabled:=False;
NeedToChange:=True;// else exit;
Change.Enabled:=True;
end;
if (CurEnchLvl>=StrToInt(Edit1.Text)) then begin
stats.Lines.Add('Sum '+IntToStr(SumItem(ItemID))+' lvl'+IntToStr(CurEnchLvl)+' Ed'+(Edit1.Text));
timer.enabled:=false;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
delay(50);
stats.Lines.Add('Достигнут требуемый уровень! Закупаем...');
stats.Lines.Add('Свободно слотов: '+IntToStr(EmptySlots));
if (EmptySlots>0) then begin
ButtonBuyItems.Enabled:=True;
ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');
end;
{ if (SumItem(ItemID)>=10) and (CurEnchLvl>=StrToInt(Edit1.Text)) then begin
stats.Lines.Add('Max '+IntToStr(MaxEnchLvl));
stats.Lines.Add('Заточено 10шт '+IntToStr(MaxEnchLvl)+' уровня!');
inc(MaxEnchLvl);
stats.Lines.Add('Увеличиваем уровень: '+IntToStr(MaxEnchLvl));
Edit1.Text:=(IntToStr(MaxEnchLvl));
end; }
NeedToBuy:=True;
Shops.Enabled:=True;
//exit;
end;
if (SumItem(ItemID)<=StrToInt(EditKeepItems.Text)) then begin
timer.enabled:=false;
buf:=hstr('0F');
SendToServerEx(Name);
stats.Lines.Add('Ограничение по поломкам - '+IntToStr(EditKeepItems.Text)+'! Закупаем...');
delay(50);
NeedToBuy:=True;
Shops.Enabled:=True;
end;
ScrollOID:=GetItem(ScrollID,0);
if (ScrollOID<=3) then begin
stats.Lines.Add('Свитки закончились! Покупаем...');
timer.enabled:=False;
//***** Закупка заточек *
BuyScroll;
//***********************
delay(50);
timer.enabled:=True;
//exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
end;
//================================================== ============================
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
Begin
//************************************************** **************************
if pck='' then exit;
//************************************************** **************************
if NeedToChange and (WinnieOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
msg.Lines.Add(IntToStr(ReadD(4)));
if (ReadD(2)=WinnieOID) then begin
delay(350);
RequestByPassToServer('menu_select?ask=-303&reply=576');
msg.Lines.Add('C>Пакет RequestBypassToServer');
end;
end;
#$D0: begin
msg.Lines.Add('S>Пакет MultiSellList #$D0');
delay(350);
RequestMultiSellItem(576, 3, 100);
NeedToChange:=False;
end;
end;
end;
end;
if NeedToBuy and (RoyOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
msg.Lines.Add(IntToStr(ReadD(4)));
if (ReadD(2)=RoyOID) then begin
delay(350);
RequestByPassToServer('menu_select?ask=-303&reply='+IntToStr(ItemListID));
msg.Lines.Add('C>Пакет RequestBypassToServer '+IntToStr(ItemListID));
end;
end;
#$D0: begin
msg.Lines.Add('S>Пакет MultiSellList #$D0');
delay(350);
RequestMultiSellItem(ItemListID, ItemEntryID, ItemCount);
NeedToBuy:=False;
end;
end;
end;
end;
//************************************************** **************************

Может зря я два таймера использовал, и можно на одном это сделать?

NLObP
17.08.2008, 00:57
Shadow, выложи скрипт целиком, в первый свой пост, где скрипт основной, или в конец темы. Тяжело разобраться, где и что должно быть из кусков.

Shadow
17.08.2008, 01:14
Выкладываю полную версию с таймерами на закупку.

//################################################## ############################
program Enchant;
//================================================== ============================
//Константы
const
Name='Char'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
//***
max=100; //количество слотов в инвентаре чара
kID=1023000; //смещение C6
RoyID=8228; // Shop ID 31228
WinnieID=8229;// Change ID 31229
Buffer=8231;
DanSing=8232;
//------------------------------------------------------------------------------
//Список переменных
var
Item, scrl, Cnt: integer;
ScrollID, ScrollOID: integer; //ScrollID скролла заточки
ItemID, ItemOID: integer; //ItemID затачиваемого предмета
MaxEnchLvl: integer; //уровень заточки который требуется достичь
ItemBase: array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
ready, add, InBase, CanChange, CanBuy: boolean;
timer, Shops, Change: TTimer;
BuyDelay, ScriptDelay: integer;
ItemCount, CurEnchLvl: integer;
//------------------------------------------------------------------------------
// Buy Var
RoyOID, WinnieOID: integer;
Adena, CoL, EmptySlots, CoLChangeCount, ShopMode: integer;
ItemListID, ItemEntryID, BuyItemCount, ItemPrice: integer;
ScrollListID, ScrollEntryID, BuyScrollCount, ScrollPrice: integer;
ItemName, ScrollName: string;
NeedToBuy, NeedToChange: boolean;
MyX, MyY, MyZ, MyOID, ObjectID: integer; //Статы
//------------------------------------------------------------------------------
//Вспомогательная
SocialID : integer;
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
//================================================== ============================
//Form
//------------------------------------------------------------------------------
FormMain : TForm;
Splitter1 : TSplitter;
Splitter2 : TSplitter;
Stats : TMemo;
Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label1 : TLabel;
Label2 : TLabel;
Label3 : TLabel;
Label4 : TLabel;
Label12 : TLabel;
Label13 : TLabel;
LabelBD : TLabel;
ButtonStartEnchant: TButton;
ButtonStopEnchant : TButton;
ButtonBuyItems : TButton;
ButtonChangeAdena : TButton;
ButtonBuyScroll : TButton;
ButtonChangeWindow: TButton;
CheckBoxItem : TCheckBox;
ComboBoxItem : TComboBox;
CheckBoxScroll : TCheckBox;
ComboBoxScroll : TComboBox;
CheckAutoBuy : TCheckBox;
CheckAutoChange: TCheckBox;
EditItemVal : TEdit;
EditScrollVal : TEdit;
EditScrollOID : TEdit;
EditItemOID : TEdit;
Edit1 : TEdit;
Edit2 : TEdit;
EditScriptDelay: TEdit;
EditBuyDelay : TEdit;
EditKeepItems : TEdit;
ShowAdena : TEdit;
ShowCoL : TEdit;
StartTime, EndTime: TDateTime;
//------------------------------------------------------------------------------
//================================================== ============================
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//================================================== ============================
//------------------------------------------------------------------------------
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant (NLObP v.0.7) - Shadow Edition v3.7';
Result.Left := 175;
Result.Top := 175;
Result.Width := 700;
Result.Height := 300;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 593;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 445;
Stats.Top := 0;
Stats.Width := 230;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := True;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := False;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := True;
Stats.ScrollBars := ssVertical;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 115;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := True;
Msg.ScrollBars := ssVertical;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Enchant PH Script - SE v3.7';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 167;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//LabelBuyDelay
LabelBD := TLabel.Create(Result);
LabelBD.Parent := GroupBox2;
LabelBD.Left := 159;
LabelBD.Top := 98;
LabelBD.Width := 58;
LabelBD.Height := 13;
LabelBD.Visible := TRUE;
LabelBD.Tag := 0;
LabelBD.Enabled := TRUE;
LabelBD.Hint := 'Задержки в скрипте';
LabelBD.ShowHint := True;
LabelBD.Caption := 'Delays:';
LabelBD.Transparent := TRUE;
LabelBD.WordWrap := FALSE;
LabelBD.Alignment := taLeftJustify;
LabelBD.Layout := tlTop;
LabelBD.AutoSize := TRUE;
LabelBD.Align := alNone;
LabelBD.Font.Name := 'Tahoma';
LabelBD.Font.Size := 8;
LabelBD.Font.Color := clWindowText;
LabelBD.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень заточки';
Edit1.ShowHint := TRUE;
Edit1.Text := '16';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 197;
Edit2.Top := 67;
Edit2.Width := 63;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//Items to Keep
EditKeepItems := TEdit.Create(Result);
EditKeepItems.Parent := GroupBox2;
EditKeepItems.Left := 118;
EditKeepItems.Top := 95;
EditKeepItems.Width := 32;
EditKeepItems.Height := 21;
EditKeepItems.Visible := True;
EditKeepItems.Tag := 0;
EditKeepItems.Enabled := True;
EditKeepItems.Hint := 'Сколько предметов оставлять';
EditKeepItems.ShowHint := True;
EditKeepItems.Text := '5';
EditKeepItems.Font.Name := 'Tahoma';
EditKeepItems.Font.Size := 8;
EditKeepItems.Font.Color:= clWindowText;
EditKeepItems.Color := clWindow;
EditKeepItems.TabOrder := 5;
EditKeepItems.TabStop := True;
EditKeepItems.ReadOnly := False;
EditKeepItems.MaxLength := 4;
EditKeepItems.AutoSize := False;
//......................................
//......................................
//Script Delay
EditScriptDelay := TEdit.Create(Result);
EditScriptDelay.Parent := GroupBox2;
EditScriptDelay.Left := 197;
EditScriptDelay.Top := 95;
EditScriptDelay.Width := 32;
EditScriptDelay.Height := 21;
EditScriptDelay.Visible := True;
EditScriptDelay.Tag := 0;
EditScriptDelay.Enabled := True;
EditScriptDelay.Hint := 'Основная задержка скрипта';
EditScriptDelay.ShowHint := True;
EditScriptDelay.Text := '795';
EditScriptDelay.Font.Name := 'Tahoma';
EditScriptDelay.Font.Size := 8;
EditScriptDelay.Font.Color:= clWindowText;
EditScriptDelay.Color := clWindow;
EditScriptDelay.TabOrder := 5;
EditScriptDelay.TabStop := True;
EditScriptDelay.ReadOnly := False;
EditScriptDelay.MaxLength := 4;
EditScriptDelay.AutoSize := False;
//......................................
//......................................
//Buy Delay
EditBuyDelay := TEdit.Create(Result);
EditBuyDelay.Parent := GroupBox2;
EditBuyDelay.Left := 229;
EditBuyDelay.Top := 95;
EditBuyDelay.Width := 31;
EditBuyDelay.Height := 21;
EditBuyDelay.Visible := True;
EditBuyDelay.Tag := 0;
EditBuyDelay.Enabled := True;
EditBuyDelay.Hint := 'Задержка при закупке';
EditBuyDelay.ShowHint := True;
EditBuyDelay.Text := '195';
EditBuyDelay.Font.Name := 'Tahoma';
EditBuyDelay.Font.Size := 8;
EditBuyDelay.Font.Color:= clWindowText;
EditBuyDelay.Color := clWindow;
EditBuyDelay.TabOrder := 5;
EditBuyDelay.TabStop := True;
EditBuyDelay.ReadOnly := False;
EditBuyDelay.MaxLength := 4;
EditBuyDelay.AutoSize := False;
//......................................
//......................................
//Show Adena
ShowAdena := TEdit.Create(Result);
ShowAdena.Parent := GroupBox2;
ShowAdena.Left := 176;
ShowAdena.Top := 123;
ShowAdena.Width := 45;
ShowAdena.Height := 21;
ShowAdena.Visible := TRUE;
ShowAdena.Tag := 0;
ShowAdena.Enabled := TRUE;
ShowAdena.Hint := 'Адены';
ShowAdena.ShowHint := TRUE;
ShowAdena.Text := 'Адены';
ShowAdena.Font.Name := 'Tahoma';
ShowAdena.Font.Size := 8;
// ShowAdena.Align := Right;
ShowAdena.Font.Color:= clWindowText;
ShowAdena.Color := clWindow;
// ShowAdena.BorderStyle:= 0;
ShowAdena.TabOrder := 5;
ShowAdena.TabStop := True;
ShowAdena.ReadOnly := True;
ShowAdena.MaxLength := 10;
ShowAdena.AutoSize := False;
//......................................
//......................................
//Show Adena
ShowCoL := TEdit.Create(Result);
ShowCoL.Parent := GroupBox2;
ShowCoL.Left := 221;
ShowCoL.Top := 123;
ShowCoL.Width := 39;
ShowCoL.Height := 21;
ShowCoL.Visible := TRUE;
ShowCoL.Tag := 0;
ShowCoL.Enabled := TRUE;
ShowCoL.Hint := 'Coins of Luck';
ShowCoL.ShowHint := TRUE;
ShowCoL.Text := 'CoLs';
ShowCoL.Font.Name := 'Tahoma';
ShowCoL.Font.Size := 8;
ShowCoL.Font.Color:= clWindowText;
ShowCoL.Color := clWindow;
ShowCoL.TabOrder := 5;
ShowCoL.TabStop := True;
ShowCoL.ReadOnly := True;
ShowCoL.MaxLength := 10;
ShowCoL.AutoSize := False;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 88;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 172;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка затачиваемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := False;
ButtonStartEnchant.Hint := 'Выберите предмет и заточку';
ButtonStartEnchant.ShowHint := True;
ButtonStartEnchant.Caption := 'Начать';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Остановить';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//ButtonBuyItems
ButtonBuyItems := TButton.Create(Result);
ButtonBuyItems.Parent := GroupBox2;
ButtonBuyItems.Left := 265;
ButtonBuyItems.Top := 95;
ButtonBuyItems.Width := 150;
ButtonBuyItems.Height := 25;
ButtonBuyItems.Visible := TRUE;
ButtonBuyItems.Tag := 0;
ButtonBuyItems.Enabled := False;
ButtonBuyItems.Hint := 'Закупка предметов';
ButtonBuyItems.ShowHint := False;
ButtonBuyItems.Caption := 'Закупка';
ButtonBuyItems.Font.Name := 'Tahoma';
ButtonBuyItems.Font.Size := 8;
ButtonBuyItems.Font.Color := clWindowText;
ButtonBuyItems.Font.CharSet := 1;
ButtonBuyItems.TabOrder := 3;
ButtonBuyItems.TabStop := TRUE;
ButtonBuyItems.Cancel := FALSE;
ButtonBuyItems.ModalResult := 0;
ButtonBuyItems.OnClick := @ButtonBuyItems_Click;
//......................................
//......................................
ButtonBuyScroll := TButton.Create(Result);
ButtonBuyScroll.Parent := GroupBox2;
ButtonBuyScroll.Left := 91;
ButtonBuyScroll.Top := 95;
ButtonBuyScroll.Width := 25;
ButtonBuyScroll.Height := 25;
ButtonBuyScroll.Visible := TRUE;
ButtonBuyScroll.Tag := 0;
ButtonBuyScroll.Enabled := TRUE;
ButtonBuyScroll.Hint := '';
ButtonBuyScroll.ShowHint := False;
ButtonBuyScroll.Caption := 'S';
ButtonBuyScroll.Font.Name := 'Tahoma';
ButtonBuyScroll.Font.Size := 8;
ButtonBuyScroll.Font.Color := clWindowText;
ButtonBuyScroll.Font.CharSet := 1;
ButtonBuyScroll.TabOrder := 3;
ButtonBuyScroll.TabStop := TRUE;
ButtonBuyScroll.Cancel := FALSE;
ButtonBuyScroll.ModalResult := 0;
ButtonBuyScroll.OnClick := @ButtonBuyScroll_Click;
//......................................
//......................................
ButtonChangeWindow := TButton.Create(Result);
ButtonChangeWindow.Parent := GroupBox2;
ButtonChangeWindow.Left := 91;
ButtonChangeWindow.Top := 123;
ButtonChangeWindow.Width := 25;
ButtonChangeWindow.Height := 25;
ButtonChangeWindow.Visible := TRUE;
ButtonChangeWindow.Tag := 0;
ButtonChangeWindow.Enabled := TRUE;
ButtonChangeWindow.Hint := '';
ButtonChangeWindow.ShowHint := False;
ButtonChangeWindow.Caption := 'W';
ButtonChangeWindow.Font.Name := 'Tahoma';
ButtonChangeWindow.Font.Size := 8;
ButtonChangeWindow.Font.Color := clWindowText;
ButtonChangeWindow.Font.CharSet := 1;
ButtonChangeWindow.TabOrder := 3;
ButtonChangeWindow.TabStop := TRUE;
ButtonChangeWindow.Cancel := FALSE;
ButtonChangeWindow.ModalResult := 0;
ButtonChangeWindow.OnClick := @ButtonChangeWindow_Click;
//......................................
//......................................
//ButtonChangeAdena
ButtonChangeAdena := TButton.Create(Result);
ButtonChangeAdena.Parent := GroupBox2;
ButtonChangeAdena.Left := 265;
ButtonChangeAdena.Top := 123;
ButtonChangeAdena.Width := 150;
ButtonChangeAdena.Height := 25;
ButtonChangeAdena.Visible := TRUE;
ButtonChangeAdena.Tag := 0;
ButtonChangeAdena.Enabled := True;
ButtonChangeAdena.Hint := '';
ButtonChangeAdena.ShowHint := FALSE;
ButtonChangeAdena.Caption := 'Обменять CoL на Адены';
ButtonChangeAdena.Font.Name := 'Tahoma';
ButtonChangeAdena.Font.Size := 8;
ButtonChangeAdena.Font.Color := clWindowText;
ButtonChangeAdena.Font.CharSet := 1;
ButtonChangeAdena.TabOrder := 3;
ButtonChangeAdena.TabStop := TRUE;
ButtonChangeAdena.Cancel := FALSE;
ButtonChangeAdena.ModalResult := 0;
ButtonChangeAdena.OnClick := @ButtonChangeAdena_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали скролл заточки';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Заточка';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;
//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 88;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 172;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка свиток заточки';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color:= clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight:= 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//CheckAutoBuy
CheckAutoBuy := TCheckBox.Create(Result);
CheckAutoBuy.Parent := GroupBox2;
CheckAutoBuy.Left := 419;
CheckAutoBuy.Top := 95;
CheckAutoBuy.Width := 23;
CheckAutoBuy.Height := 23;
CheckAutoBuy.Visible := TRUE;
CheckAutoBuy.Tag := 0;
CheckAutoBuy.Enabled := TRUE;
CheckAutoBuy.Hint := 'Автоматизировать закупку';
CheckAutoBuy.ShowHint := TRUE;
CheckAutoBuy.Caption := 'AB';
CheckAutoBuy.Font.Name := 'Tahoma';
CheckAutoBuy.Font.Size := 5;
CheckAutoBuy.Font.Color := clWindowText;
CheckAutoBuy.Color := clBtnFace;
CheckAutoBuy.TabOrder := 4;
CheckAutoBuy.TabStop := TRUE;
CheckAutoBuy.Checked := True;
CheckAutoBuy.AllowGrayed := FALSE;
CheckAutoBuy.State := cbChecked;
CheckAutoBuy.OnClick := @CheckAutoBuy_Click;
//......................................
//......................................
//CheckAutoChange
CheckAutoChange := TCheckBox.Create(Result);
CheckAutoChange.Parent := GroupBox2;
CheckAutoChange.Left := 419;
CheckAutoChange.Top := 123;
CheckAutoChange.Width := 23;
CheckAutoChange.Height := 23;
CheckAutoChange.Visible := TRUE;
CheckAutoChange.Tag := 0;
CheckAutoChange.Enabled := TRUE;
CheckAutoChange.Hint := 'Автоматизировать обмен';
CheckAutoChange.ShowHint := TRUE;
CheckAutoChange.Caption := 'AC';
CheckAutoChange.Font.Name := 'Tahoma';
CheckAutoChange.Font.Size := 5;
CheckAutoChange.Font.Color := clWindowText;
CheckAutoChange.Color := clBtnFace;
CheckAutoChange.TabOrder := 4;
CheckAutoChange.TabStop := TRUE;
CheckAutoChange.Checked := True;
CheckAutoChange.AllowGrayed := FALSE;
CheckAutoChange.State := cbChecked;
CheckAutoChange.OnClick := @CheckAutoChange_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Информация о заточке');
stats.Lines.Add('Системная Информация');
Result.Show;
end;
//------------------------------------------------------------------------------
//================================================== ============================
//************************************************** ****************************
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
BuyDelay:=StrToInt(EditBuyDelay.Text);
//.................................................. ............................
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.Enabled:=False;
timer.Interval:=(StrToInt(EditScriptDelay.Text)); //время задержки
//.................................................. ............................
Shops:=TTimer.Create(nil);
Shops.OnTimer:=@Shoping;
Shops.Enabled:=False;
Shops.Interval:=BuyDelay; //время задержки
//.................................................. ............................
Change:=TTimer.Create(nil);
Change.OnTimer:=@OnChange;
Change.Enabled:=False;
Change.Interval:=BuyDelay; //время задержки
//.................................................. ............................
StartTime:=time;
// stats.Lines.Add('Время '+TimeToStr(StartTime));
ButtonBuyItems.Enabled:=False;
NeedToChange:=False;
ready:=False;
add:=False;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
// ShopMode:=2;
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
RoyOID:=1209014944;
WinnieOID:=1209014946;
MaxEnchLvl:=(StrToInt(Edit1.Text));
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//************************************************** ****************************
procedure Free; //Вызывается при выключении скрипта
begin
// ItemBase:=nil; //нельзя так делать с массивом
timer.Free;
StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
end;
//.................................................. ............................
//************************************************** ****************************
//================================================== ============================
//Обработчики событий для элементов управления на форме
//.................................................. ............................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
if (EmptySlots>0) then begin
ItemIDBase(InBase);
ButtonBuyItems.Enabled:=True;
ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');
stats.Lines.Add(' >'+IntToStr(Adena-(ItemPrice*EmptySlots)));
end
else begin
ButtonBuyItems.Caption:=('Инвентарь полон');
stats.Lines.Add(' >'+IntToStr(Adena-(ItemPrice*EmptySlots)));
end;
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=IntToStr(ItemOID);
ComboBoxItem.Enabled:=false; //выключаем
if (ItemID>0) and (ScrollID>0) and CheckBoxScroll.Checked then begin
ButtonStartEnchant.Enabled:=True;
ButtonStartEnchant.ShowHint:=True;
end;
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
ButtonBuyItems.Caption:=('Закупка');
ButtonBuyItems.Enabled:=False;
ButtonStartEnchant.Enabled:=False;
ButtonStartEnchant.ShowHint:=True;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//.................................................. ............................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=IntToStr(sumitem(ItemID));
end;
//.................................................. ............................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
var
ScrollToBuy: integer;
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
ItemIDBase(InBase);
ScrollToBuy:=Trunc(Adena/ScrollPrice);
stats.Lines.Add('Автозакупка свитков включена');
stats.Lines.Add((ScrollName)+': '+IntToStr(trunc(ScrollPrice/1000))+'к А.');
stats.Lines.Add('Аден хватит на '+IntToStr(ScrollToBuy)+' свитков');
// проверка

// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=IntToStr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
if (ItemID>0) and (ScrollID>0) and CheckBoxItem.Checked then begin
ButtonStartEnchant.Enabled:=True;
ButtonStartEnchant.ShowHint:=True;
end;
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
ButtonStartEnchant.Enabled:=False;
ButtonStartEnchant.ShowHint:=True;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//.................................................. ............................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=IntToStr(sumitem(ScrollID));
end;
//.................................................. ............................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=IntToStr(CurEnchLvl);
ButtonBuyItems.Enabled:=False;
ButtonBuyItems.Caption:=('Закупка');
ButtonChangeAdena.Enabled:=False;
ButtonChangeAdena.Caption:=('Обмен');
msg.Lines.Add('Команда Старт!');
if (StrToInt(EditScrollOID.Text)<3) and InBase then BuyScroll;
ButtonStartEnchant.Enabled:=False;
ButtonStartEnchant.ShowHint:=False;
CheckAutoBuy.Enabled:=False;
CheckAutoChange.Enabled:=False;
EditBuyDelay.Enabled:=False;
EditScriptDelay.Enabled:=False;
EditKeepItems.Enabled:=False;
timer.enabled:=true;
end;
//.................................................. ............................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!');
timer.Enabled:=False;
Shops.Enabled:=False;
Change.Enabled:=False;
NeedToBuy:=False;
NeedToChange:=False;
ready:=false;
buf:=hstr('0F');
SendToServerEx(Name);
CheckAutoBuy.Enabled:=True;
CheckAutoChange.Enabled:=True;
EditBuyDelay.Enabled:=True;
EditScriptDelay.Enabled:=True;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if CheckBoxItem.Checked then begin
if (EmptySlots>0) then begin
ButtonBuyItems.Enabled:=True;
ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');
end
else begin
ButtonBuyItems.Enabled:=False;
ButtonBuyItems.Caption:=('Инвентарь полон');
end;
end else begin
ButtonBuyItems.Enabled:=False;
ButtonBuyItems.Caption:=('Закупка');
end;
if not CanChange then begin
ButtonChangeAdena.Enabled:=False;
ButtonChangeAdena.Caption:=('Максимум Аден');
end else begin
ButtonChangeAdena.Enabled:=True;
ButtonChangeAdena.Caption:=('Обменять '+IntToStr(CoLChangeCount*100)+' CoL');
end;
ButtonStartEnchant.Enabled:=True;
ButtonStartEnchant.ShowHint:=True;
ButtonChangeAdena.Enabled:=True;
EditKeepItems.Enabled:=True;
// ButtonChangeAdena.Caption:=('Обмен');
end;
//.................................................. ............................
//CheckAutoBuy
procedure CheckAutoBuy_Click(Sender: TCheckBox);
//Event : OnClick
var
i: integer;
begin
if CheckAutoBuy.Checked then begin

end;
end;
//.................................................. ............................
//CheckAutoChange
procedure CheckAutoChange_Click(Sender: TCheckBox);
//Event : OnClick
var
i: integer;
begin
if CheckAutoChange.Checked then begin
// Shops.Enabled:=True;
end;
end;
//.................................................. ............................
//ButtonBuyItems
procedure ButtonBuyItems_Click(Sender: TButton);
//Event : OnClick
begin
stats.Lines.Add('Закупка '+(ItemName));
timer.enabled:=false;
ready:=False;
BuyItems(EmptySlots);
// ready:=True;
end;
//.................................................. ............................

//ButtonBuyScroll
procedure ButtonBuyScroll_Click(Sender: TButton);
//Event : OnClick
var
Cnt, IoA, IoACount: integer;
begin
IoA:=(trunc(2000000000/ItemPrice));
IoACount:=(trunc(EmptySlots/IoA));
stats.Lines.Add('IoA: '+IntToStr(IoA));
stats.Lines.Add('IoA Count: '+IntToStr(IoACount));
//for Cnt:=1 to IoACount do begin
//stats.Lines.Add('Начало: '+IntToStr(Cnt));
CoLChange;
stats.Lines.Add('Был обмен');
delay(100);
// TargetAttacker('Roy', RoyOID);
RequestByPassToServer('menu_select?ask=-303&reply='+IntToStr(ItemListID));
stats.Lines.Add('Ждем открытия диалога');
delay(500); // Ждем открытия диалога
for Cnt:=1 to IoA do begin
RequestMultiSellItem(ItemListID, ItemEntryID, BuyItemCount);
delay(BuyDelay);
end;
//end;
// stats.Lines.Add('Click');
// ItemIDBase(InBase);
// if InBase then BuyScroll;
end;
//.................................................. ............................
//ButtonChangeWindow
procedure ButtonChangeWindow_Click(Sender: TButton);
//Event : OnClick
var
C, IoA: integer;
begin
// NeedToChange:=True;
// Shops.Enabled:=True;
end;
//.................................................. ............................
//ButtonChangeAdena
procedure ButtonChangeAdena_Click(Sender: TButton);
//Event : OnClick
begin
timer.enabled:=false;
ready:=False;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if CanChange then CoLChange;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if not CanChange then begin
ButtonChangeAdena.Enabled:=False;
ButtonChangeAdena.Caption:=('Максимум Аден');
end;
//ButtonStopEnchant_Click;
end;
//.................................................. ............................
//*******************
procedure FormStatus;
begin
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
ItemIDBase(InBase);
if timer.enabled then begin
ButtonStartEnchant.Enabled:=False;
ButtonStopEnchant.Enabled:=True;
ButtonBuyItems.Enabled:=False;
ButtonChangeAdena.Enabled:=False;
ButtonBuyScroll.Enabled:=False;
ButtonChangeWindow.Enabled:=False;
// ButtonChangeAdena.Caption:=('Максимум Аден');
CheckAutoBuy.Enabled:=False;
CheckAutoChange.Enabled:=False;
EditBuyDelay.Enabled:=False;
EditScriptDelay.Enabled:=False;
EditKeepItems.Enabled:=False;
end else begin
ButtonStartEnchant.Enabled:=True;
ButtonStopEnchant.Enabled:=True;
ButtonBuyItems.Enabled:=True;
ButtonChangeAdena.Enabled:=True;
ButtonBuyScroll.Enabled:=True;
ButtonChangeWindow.Enabled:=True;
// ButtonChangeAdena.Caption:=('Максимум Аден');
CheckAutoBuy.Enabled:=True;
CheckAutoChange.Enabled:=True;
EditBuyDelay.Enabled:=True;
EditScriptDelay.Enabled:=True;
EditKeepItems.Enabled:=True;
end;
end;
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
//
end;
//======================== Procedures ==========================================
//.................................................. ............................
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//......................................
//************************************************** ****************************
//21=RequestBypassToServer:s(Cmd)
procedure RequestByPassToServer(cmd:string);
begin
buf:=#$21;
WriteS(cmd);
SendToServerEx(Name);
end;
//......................................
//************************************************** ****************************
procedure RequestMultiSellItem(ListId, EntryID, Count:integer);
begin
msg.Lines.Add('Покупаем ListID:'+IntToStr(ListID)+' EntryID:'+IntToStr(EntryID)+' в кол-ве:'+IntToStr(count));
buf:=#$A7;
WriteD(ListID);
WriteD(EntryId);
WriteD(Count);
SendToServerEx(Name);
end;
//************************************************** ****************************
//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ShiftFlag)
procedure Target(ObjectID: Integer);
begin
buf:=#$04;
WriteD(ObjectID);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteC(00);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure TargetAttacker(Cat: string; AttackerOID: Integer);
var
Roy, Winnie: string;
begin
timer.enabled:=false;
if (Cat='Roy') then begin
if (AttackerOID>0) then begin
msg.Lines.Add((Cat)+' ObjectID='+IntToStr(AttackerOID)+' Player='+IntToStr(MyOID));
Target(RoyOID);
delay(500);
Target(RoyOID);
delay(500);
end else begin
stats.Lines.Add('OID '+(Cat)+' еще не найден');
end;
end;
if (Cat='Winnie') then begin
if (AttackerOID>0) then begin
msg.Lines.Add((Cat)+' ObjectID='+IntToStr(AttackerOID)+' Player='+IntToStr(MyOID));
Target(WinnieOID);
delay(500);
Target(WinnieOID);
delay(500);
end else begin
stats.Lines.Add('OID '+(Cat)+' еще не найден');
end;
end;
end;
//************************************************** ****************************
//2F=RequestMagicSkillUse:dMagicID)d(CtrlPressed)b(S hiftPressed)
procedure MagicSkillUse(MagicID: integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;
//************************************************** ****************************
//........................ Base of Item ID (List, Entry) .......................
procedure ItemIDBase(var InBase: boolean);
begin
//*** Scroll Base ***
if ScrollID=955 then begin
ScrollListID:=559;
ScrollEntryID:=1;
BuyScrollCount:=1;
ScrollName:=('Enchant Weapon (Grade D)');
ScrollPrice:=50000;
InBase:=True;
end;
if ScrollID=956 then begin
ScrollListID:=559;
ScrollEntryID:=3;
BuyScrollCount:=1;
ScrollName:=('Enchant Armor (Grade D)');
ScrollPrice:=6000;
InBase:=True;
end;
if ScrollID=951 then begin
ScrollListID:=559;
ScrollEntryID:=5;
BuyScrollCount:=1;
ScrollName:=('Enchant Weapon (Grade C)');
ScrollPrice:=110000;
InBase:=True;
end;
if ScrollID=952 then begin
ScrollListID:=559;
ScrollEntryID:=7;
BuyScrollCount:=1;
ScrollName:=('Enchant Armor (Grade C)');
ScrollPrice:=15000;
InBase:=True;
end;
if ScrollID=947 then begin
ScrollListID:=559;
ScrollEntryID:=9;
BuyScrollCount:=1;
ScrollName:=('Enchant Weapon (Grade B)');
ScrollPrice:=500000;
InBase:=True;
end;
if ScrollID=948 then begin
ScrollListID:=559;
ScrollEntryID:=11;
BuyScrollCount:=1;
ScrollName:=('Enchant Armor (Grade B)');
ScrollPrice:=80000;
InBase:=True;
end;
if ScrollID=729 then begin
ScrollListID:=559;
ScrollEntryID:=13;
BuyScrollCount:=1;
ScrollName:=('Enchant Weapon (Grade A)');
ScrollPrice:=5000000;
InBase:=True;
end;
if ScrollID=730 then begin
ScrollListID:=559;
ScrollEntryID:=15;
BuyScrollCount:=1;
ScrollName:=('Enchant Armor (Grade A)');
ScrollPrice:=500000;
InBase:=True;
end;
if ScrollID=959 then begin
ScrollListID:=559;
ScrollEntryID:=17;
BuyScrollCount:=1;
ScrollName:=('Enchant Weapon (Grade S)');
ScrollPrice:=10000000;
InBase:=True;
end;
if ScrollID=960 then begin
ScrollListID:=559;
ScrollEntryID:=19;
BuyScrollCount:=1;
ScrollName:=('Enchant Armor (Grade S)');
ScrollPrice:=1000000;
InBase:=True;
end;
if ScrollID=6575 then begin
ScrollListID:=559;
ScrollEntryID:=21;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Weapon (Grade D)');
ScrollPrice:=500000;
InBase:=True;
end;
if ScrollID=6576 then begin
ScrollListID:=559;
ScrollEntryID:=23;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Armor (Grade D)');
ScrollPrice:=60000;
InBase:=True;
end;
if ScrollID=6573 then begin
ScrollListID:=559;
ScrollEntryID:=25;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Weapon (Grade C)');
ScrollPrice:=2000000;
InBase:=True;
end;
if ScrollID=6574 then begin
ScrollListID:=559;
ScrollEntryID:=27;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Armor (Grade C)');
ScrollPrice:=300000;
InBase:=True;
end;
if ScrollID=6571 then begin
ScrollListID:=559;
ScrollEntryID:=29;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Weapon (Grade B)');
ScrollPrice:=5000000;
InBase:=True;
end;
if ScrollID=6572 then begin
ScrollListID:=559;
ScrollEntryID:=31;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Armor (Grade B)');
ScrollPrice:=800000;
InBase:=True;
end;
if ScrollID=6569 then begin
ScrollListID:=559;
ScrollEntryID:=33;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Weapon (Grade A)');
ScrollPrice:=50000000;
InBase:=True;
end;
if ScrollID=6570 then begin
ScrollListID:=559;
ScrollEntryID:=35;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Armor (Grade A)');
ScrollPrice:=5000000;
InBase:=True;
end;
if ScrollID=6577 then begin
ScrollListID:=559;
ScrollEntryID:=37;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Weapon (Grade S)');
ScrollPrice:=100000000;
InBase:=True;
end;
if ScrollID=6578 then begin
ScrollListID:=559;
ScrollEntryID:=39;
BuyScrollCount:=1;
ScrollName:=('Blessed Enchant Armor (Grade S)');
ScrollPrice:=10000000;
InBase:=True;
end;
//### Item Base ###
//*** Stuff ***
if ItemID=4707 then begin
ItemListID:=576;
ItemEntryID:=3;
BuyItemCount:=100;
ItemName:=('Coin of Luck');
ItemPrice:=1000000;
end;
//*** End of Base ***
if InBase=false then begin
stats.Lines.Add('Неизвестный: '+IntToStr(ItemID));
stats.Lines.Add('Неизвестный: '+IntToStr(ScrollID));
end;
end;
//.................................................. ............................
//************************************************** ****************************
procedure BuyScroll;
begin
if InBase then begin
// if not ScrollWindowOpened then begin
RequestByPassToServer('menu_select?ask=-303&reply=559');
delay(500); // Ждем открытия диалога
// ScrollWindowOpened:=True;
// LabelBD.Caption:='Scroll';
// end;
// if ScrollWindowOpened then begin
delay(BuyDelay);
RequestMultiSellItem(ScrollListID, ScrollEntryID, BuyScrollCount);
delay(BuyDelay);
// ScrollWindowOpened:=True;
// end;
end;
end;
//************************************************** ****************************
procedure BuyItems(EmptySlots: integer);
var
Cnt, IoA: integer;
begin
if InBase then begin
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
CoLChange;
TargetAttacker('Roy', RoyOID);
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
IoA:=(trunc(Adena/ItemPrice));
RequestByPassToServer('menu_select?ask=-303&reply='+IntToStr(ItemListID));
delay(500); // Ждем открытия диалога
if (IoA>EmptySlots) then begin
for Cnt:=1 to EmptySlots do begin
RequestMultiSellItem(ItemListID, ItemEntryID, BuyItemCount);
delay(BuyDelay);
end;
end else begin
for Cnt:=1 to IoA do begin
RequestMultiSellItem(ItemListID, ItemEntryID, BuyItemCount);
delay(BuyDelay);
end;
end;
end;
end;
//************************************************** ****************************
procedure AutoBuy;
var
Cnt, IoA, IoACount: integer;
begin
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
IoA:=(trunc(Adena/ItemPrice));
IoACount:=(trunc(EmptySlots/IoA));
stats.Lines.Add('IoA: '+IntToStr(IoA));
delay(100);
TargetAttacker('Roy', RoyOID);
RequestByPassToServer('menu_select?ask=-303&reply='+IntToStr(ItemListID));
// stats.Lines.Add('Ждем открытия диалога');
delay(500); // Ждем открытия диалога
for Cnt:=1 to IoA do begin
RequestMultiSellItem(ItemListID, ItemEntryID, BuyItemCount);
delay(BuyDelay);
end;
CurEnchLvl:=0;
Edit2.text:=IntToStr(CurEnchLvl);
EditBuyDelay.Enabled:=False;
end;
//************************************************** ****************************
procedure AdenaCounter(var CoLChangeCount: integer; var CanChange, CanBuy: boolean);
begin
if (Adena>=2000000000) then CanChange:=False;
if (Adena<=1900000000) then begin
CoLChangeCount:=(20-Trunc((Adena/1000000)/100));
CanChange:=True;
end;
if ((Adena-(ItemPrice*EmptySlots))>1) then CanBuy:=True;
end;
//************************************************** ****************************
procedure CoLChange;
var
ALID, AEID, ACnt: integer;
Cnt, CoLChangeCount: integer;
begin
TargetAttacker('Winnie', WinnieOID);
delay(50);
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
ALID:=576;
AEID:=3;
ACnt:=100;
if CanChange then begin
ButtonChangeAdena.Enabled:=False;
ButtonChangeAdena.Caption:=('Обмениваем '+IntToStr(CoLChangeCount*100)+' CoL');
//Вызов диалога обмена
RequestByPassToServer('menu_select?ask=-303&reply=576');
delay(500); //Ждем открытия диалога
for Cnt:=1 to CoLChangeCount do begin
RequestMultiSellItem(ALID, AEID, ACnt);
delay(BuyDelay);
end;
end;
delay(50);
TargetAttacker('Roy', RoyOID);
end;
//************************************************** ****************************
//.................................................. ............................
// Закупка
procedure Shoping(Sender: TObject);
begin
timer.Enabled:=False;
Change.Enabled:=False;
if NeedToBuy then exit; //если еще не обменяли предыдущую вещь, то выходим сразу
if (RoyOID=0) then begin //(RoyOID=0) or
Shops.Enabled:=False; //останавливаем торговлю
stats.Lines.Add('Не определены OID! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if (Adena<ItemPrice) then begin
Shops.Enabled:=False; //останавливаем торговлю
stats.Lines.Add('Не хватает денег.');
NeedToChange:=True;
// Shops.Enabled:=True;
exit;
end;
if (EmptySlots<=2) then begin //проверка на выход из массива
Shops.Enabled:=False; //останавливаем торговлю
TargetAttacker('Roy', RoyOID); //таргет
msg.Lines.Add('Всё закупили!');
CurEnchLvl:=0;
Edit2.text:=IntToStr(CurEnchLvl);
EditBuyDelay.Enabled:=False;
timer.Enabled:=True;
end
else
begin
msg.Lines.Add('Цель Roy >');
TargetAttacker('Roy', RoyOID); //таргет
msg.Lines.Add('Готовы обменять: '+IntToStr(EmptySlots-2));
NeedToBuy:=True; //готовы обменивать
end;
end;
//.................................................. ............................
//.................................................. ............................
// Обмен
procedure OnChange(Sender: TObject);
begin
timer.Enabled:=False;
Shops.Enabled:=False;
if NeedToChange then exit; //если еще не обменяли предыдущую вещь, то выходим сразу
if (WinnieOID=0) then begin //(RoyOID=0) or
Change.Enabled:=False; //останавливаем торговлю
stats.Lines.Add('Не определены OID! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if (Adena>=2000000000) then begin //проверка на выход из массива
Change.Enabled:=False; //останавливаем торговлю
TargetAttacker('Roy', RoyOID); //таргет
msg.Lines.Add('Всё обменяли!');
timer.Enabled:=True;
end
else
begin
msg.Lines.Add('Цель Winnie >');
TargetAttacker('Winnie', WinnieOID); //таргет
msg.Lines.Add('Готовы обменять: '+IntToStr(ColChangeCount));
NeedToChange:=True; //готовы обменивать
end;
end;
//.................................................. ............................
//************************************************** ****************************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)
//d(count)w(itemType2)w(CustType1)w(isEquipped)d(Bod yPart)w(EnchantLevel)
//w(CustType2)d(Augment)d(--)
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
ListCount:=ReadH(j); //количество итемов не должно превышать max!
EmptySlots:=(max-ListCount);
stats.Lines.Add('Свободно слотов: '+IntToStr(EmptySlots));
//if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
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
// msg.Lines.Add('i='+IntToStr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if interlude then inc(j,12) else inc(j,4);
//msg.Lines.Add('j='+IntToStr(j));
if itemBase[2,i]=57 then begin
Adena:=itemBase[3,i];
if (Adena>1000) then ShowAdena.Text:=(IntToStr(trunc(Adena/1000))+'k');
if (Adena>1000000) then ShowAdena.Text:=(IntToStr(trunc(Adena/1000000))+'m');
// if (Adena>1000000000) then ShowAdena.Text:=(IntToStr(trunc(Adena/10000000))+'g');
end;
if itemBase[2,i]=4037 then begin
CoL:= itemBase[3,i];
if (CoL>1000) then ShowCoL.Text:=(IntToStr(trunc(CoL/1000))+'k');
if (CoL>10000000) then ShowCoL.Text:=(IntToStr(trunc(CoL/1000000))+'m');
end;
end;
AdenaCounter(CoLChangeCount, CanChange, CanBuy);
if not CanChange then ButtonChangeAdena.Enabled:=False;
if CanChange then ButtonChangeAdena.Caption:=('Обменять '+IntToStr(CoLChangeCount*100)+' CoL');
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
msg.Lines.Add('Пропускаем! Нет ItemID='+IntToStr(ItemBase[2,i])+' в itemsid.ini');
end
end;
except;
msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
msg.Lines.Add(IntToStr(ItemBase[2,i]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
stats.Lines.Add('Roy OID: '+IntToStr(RoyOID));
stats.Lines.Add('Winnie OID: '+IntToStr(WinnieOID));
end;
//************************************************** ****************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(8)
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, ItemOID, ItemID, ItemCount, ListCount, UpdType, Itemlvl: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2); //количество итемов
// EmptySlots:=(max-ListCount);
msg.Lines.Add('Свободно слотов: '+IntToStr(EmptySlots));
//Пробегаем по Инвентарю и сохраняем пары ObjectID - lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for ii:=1 to ListCount do begin
UpdType:=ReadH(j);
//inc(j,2);
ReadH(j); //ItemType1
ItemOID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
itemCount:=ReadD(j); //кол-во
inc(j,10);
Itemlvl:=ReadH(j);
case UpdType of
//добавлен
1: begin
dec(EmptySlots);
for i:=1 to max do begin
if (ItemBase[1,i]=0) and (add=false) then begin
ItemBase[1,i]:=ItemOID;
ItemBase[2,i]:=ItemID;
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Добавили предмет!');
msg.Lines.Add('i='+IntToStr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' кол-во='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if ItemID=57 then begin
Adena:=ItemCount;
if (Adena>1000) then ShowAdena.Text:=(IntToStr(trunc(Adena/1000))+'k');
if (Adena>1000000) then ShowAdena.Text:=(IntToStr(trunc(Adena/1000000))+'m');
// if (Adena>1000000000) then ShowAdena.Text:=(IntToStr(trunc(Adena/10000000))+'g');
end;
if ItemID=4037 then begin
CoL:=ItemCount;
if (CoL>1000) then ShowCoL.Text:=(IntToStr(trunc(CoL/1000))+'k');
if (CoL>10000000) then ShowCoL.Text:=(IntToStr(trunc(CoL/1000000))+'m');
end;
add:=true;
end;
end;
end;
//изменен
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
ItemBase[2,i]:=ItemID;
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Изменяем параметры предмета!');
msg.Lines.Add('i='+IntToStr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' кол-во='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if ItemID=57 then begin
Adena:=ItemCount;
if (Adena>1000) then ShowAdena.Text:=(IntToStr(trunc(Adena/1000))+'k');
if (Adena>1000000) then ShowAdena.Text:=(IntToStr(trunc(Adena/1000000))+'m');
// if (Adena>1000000000) then ShowAdena.Text:=(IntToStr(trunc(Adena/10000000))+'g');
end;
if ItemID=4037 then begin
CoL:=ItemCount;
if (CoL>1000) then ShowCoL.Text:=(IntToStr(trunc(CoL/1000))+'k');
if (CoL>10000000) then ShowCoL.Text:=(IntToStr(trunc(CoL/1000000))+'m');
end;
end;
end;
end;
//удален
3: begin
inc(EmptySlots);
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
msg.Lines.Add('Удаляем предмет!');
msg.Lines.Add('i='+IntToStr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' кол-во='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
if interlude then inc(j,10) else inc(j,2);
//msg.Lines.Add('j='+IntToStr(j));
end;
end;
//.................................................. ............................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItem(item:integer; lvl:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
//находим подходящий предмет по ItemID
if (ItemBase[2,i]=item) and (ItemBase[4,i]=lvl) then begin
//если нашли, то возвращаем ObjectID предмета
result:=ItemBase[1,i]; // itemOID
ItemCount:=ItemBase[3,i];
//Itemlvl:=ItemBase[4,i];
//msg.Lines.Add('<item='+IntToStr(item)+' lvl='+IntToStr(lvl)+'> i='+IntToStr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
exit;
end;
end;
//ничего не нашли
result:=0;
end;
//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i: integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to max do begin
if (ItemBase[2,i]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemCol='+IntToStr(ItemBase[3,i])+' EnchantLvl='+IntToStr(ItemBase[4,i]));
// msg.Lines.Add('i='+IntToStr(i));
result:=result+ItemBase[3,i];
//inc(result);
end;
end;
end;
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServerEx(Name);
//*********** использовать чит с петом ************************
{ buf:=#$8B;
WriteD(ObjectID);
writed(1);
SendToServerEx(Name);
} //***********
end;
//.................................................. ............................
//************************************************** ****************************
procedure UserInfo; //обновление данных о себе
var
i: word;
begin
MyOID:=ReadD(18);
MyX:=ReadD(2);
MyY:=ReadD(6);
MyZ:=ReadD(10);
i:=22;
ReadS(i);
if interlude then inc(i, 48) else inc(i, 44);
end;
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.Text:=IntToStr(SumItem(ItemID));
EditScrollVal.Text:=IntToStr(SumItem(ScrollID));
if (Adena<=99000000) then begin
stats.Lines.Add('Деньги закончились! Меняем...');
timer.Enabled:=False;
NeedToChange:=True;
Change.Enabled:=True;
exit;
end;
if (CurEnchLvl>=StrToInt(Edit1.Text)) then begin
stats.Lines.Add('Sum '+IntToStr(SumItem(ItemID))+' lvl'+IntToStr(CurEnchLvl)+' Ed'+(Edit1.Text));
timer.enabled:=false;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
delay(50);
stats.Lines.Add('Достигнут требуемый уровень! Закупаем...');
stats.Lines.Add('Свободно слотов: '+IntToStr(EmptySlots));
if (EmptySlots>0) then begin
ButtonBuyItems.Enabled:=True;
ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');
end;
{ if (SumItem(ItemID)>=10) and (CurEnchLvl>=StrToInt(Edit1.Text)) then begin
stats.Lines.Add('Max '+IntToStr(MaxEnchLvl));
stats.Lines.Add('Заточено 10шт '+IntToStr(MaxEnchLvl)+' уровня!');
inc(MaxEnchLvl);
stats.Lines.Add('Увеличиваем уровень: '+IntToStr(MaxEnchLvl));
Edit1.Text:=(IntToStr(MaxEnchLvl));
end; }
NeedToBuy:=True;
Shops.Enabled:=True;
exit;
end;
if (SumItem(ItemID)<=StrToInt(EditKeepItems.Text)) then begin
timer.enabled:=false;
buf:=hstr('0F');
SendToServerEx(Name);
stats.Lines.Add('Ограничение по поломкам - '+IntToStr(EditKeepItems.Text)+'! Закупаем...');
delay(50);
NeedToBuy:=True;
Shops.Enabled:=True;
end;
ScrollOID:=GetItem(ScrollID,0);
if (ScrollOID<=3) then begin
stats.Lines.Add('Свитки закончились! Покупаем...');
timer.enabled:=False;
//***** Закупка заточек *
BuyScroll;
//***********************
delay(50);
timer.enabled:=True;
//exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
end;
//================================================== ============================
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
Begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
if NeedToChange and (WinnieOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
msg.Lines.Add(IntToStr(ReadD(4)));
if (ReadD(2)=WinnieOID) then begin
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
delay(350);
RequestByPassToServer('menu_select?ask=-303&reply=576');
msg.Lines.Add('C>Пакет RequestBypassToServer');
end;
end;
//sD0=MultiSellList:d(listId)d(page_beg)d(page_end)d (onpage)d(entrycount)d(EntryId)b(?)w(prodcount)w(i temcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iIte mId)w(itype2)d(icount)w(ienchant)
#$D0: begin
msg.Lines.Add('S>Пакет MultiSellList #$D0');
delay(350);
RequestMultiSellItem(576, 3, 100);
NeedToChange:=False;
end;
end;
end;
end;
if NeedToBuy and (RoyOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if (ReadD(2)=RoyOID) then begin
delay(350);
RequestByPassToServer('menu_select?ask=-303&reply='+IntToStr(ItemListID));
msg.Lines.Add('C>Пакет RequestBypassToServer '+IntToStr(ItemListID));
end;
end;
//sD0=MultiSellList:d(listId)d(page_beg)d(page_end)d (onpage)d(entrycount)d(EntryId)b(?)w(prodcount)w(i temcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iIte mId)w(itype2)d(icount)w(ienchant)
#$D0: begin
msg.Lines.Add('S>Пакет MultiSellList #$D0');
delay(350);
RequestMultiSellItem(ItemListID, ItemEntryID, ItemCount);
NeedToBuy:=False;
end;
end;
end;
end;
//************************************************** **************************
if FromServer then case pck[1] of
//************************************************** **************************
#$01: begin // MoveBackwardToLocation
if ReadD(2) = MyOID then begin
MyX := ReadD(18);
MyY := ReadD(22);
MyZ := ReadD(26);
end;
//stats.Lines.Add('X'+IntToStr(MyX)+', Y'+IntToStr(MyY)+', Z'+IntToStr(MyZ));
end;
//************************************************** ************************
#$04: begin //пакет с инфой о моём чаре
//msg.Lines.Add('S>Пакет UserInfo #$04');
UserInfo;
end;
//************************************************** ************************
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//************************************************** ************************
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27: InventoryUpdate; //Обновление базы
//************************************************** ************************
#$16: begin
ObjectID:=(ReadD(2));
//stats.Lines.Add('S> OID '+IntToStr(ObjectID)+' ID '+IntToStr(ReadD(6)-kID));
// OID ReadD2 ID ReadD6
if (RoyID=ReadD(6)-kID) then begin
RoyOID:=ObjectID;
stats.Lines.Add('Roy OID: '+IntToStr(RoyOID));
end;
if (WinnieID=ReadD(6)-kID) then begin
WinnieOID:=ObjectID;
stats.Lines.Add('Winnie OID: '+IntToStr(WinnieOID));
end;
end;
//Пакет ChooseInventory
#$6F: if ready then begin //and (readd(2)=itemid)
timer.enabled:=False; //отключаем пока не найдем предмет для заточки
//***** Закупка заточек *
if InBase then BuyScroll;
//ищем подходящий предмет для заточки
repeat
ItemOID:=GetItem(ItemID, CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.Text:=IntToStr(CurEnchLvl);
end;
until ItemOID<>0;
//.................................................. .................
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=False;
timer.enabled:=True; //пока в тесте отключаем (вкл. после заточки предмета)
end;
#$81: if ReadD(2)=0 then CurEnchLvl:=0; //начнем с начала
end;
End.
//################################################## ############################

NLObP
17.08.2008, 02:20
А ты его проверял на корректность кода?
Ошибка в строке
stats.Lines.Add('Ограничение по поломкам - '+IntToStr(EditKeepItems.Text)+'! Закупаем...');

IntToStr не надо делать, там и так строка.

Shadow
17.08.2008, 02:53
А ты его проверял на корректность кода?
Ошибка в строке
stats.Lines.Add('Ограничение по поломкам - '+IntToStr(EditKeepItems.Text)+'! Закупаем...');

IntToStr не надо делать, там и так строка.
Это я тут уже вписал. В скрипте все исправлено.

cler
17.08.2008, 14:20
тоесть, этот скрипт закупает нам нужные вещи, и точит. Закончилось, закупает и точит. так?

Shadow
17.08.2008, 19:07
тоесть, этот скрипт закупает нам нужные вещи, и точит. Закончилось, закупает и точит. так?
По сути так он и должен работать. Но он иногда останавливается. И закупает только то что есть в базе, тк нужно знать ListID и EntryID шмоки.

Витя
19.08.2008, 14:34
По сути так он и должен работать. Но он иногда останавливается. И закупает только то что есть в базе, тк нужно знать ListID и EntryID шмоки.

А возможно добавить в скрипт возможность продавать кристаллы в определенном количестве по очереди пока они не кончаться?

NLObP
23.08.2008, 16:57
Q:Как точить одну вещь?
A:В скрипте найди процедуру
procedure OnTimer(Sender: TObject);
begin
...
в ней найди
if (sumitem(ItemID)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
измени на
// if (sumitem(ItemID)<=1) then begin
if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
и сохрани. Станет точить только одну вещь.

Silverlight Guest
06.09.2008, 20:54
NLObP, пасиба большое. Но возникла проблема. У меня не видно никакого оружия. =( Может это связано с ITem Id.ini в программе? ( Помогите, пожалуйста.

Да это связанно с itemid.ini. Я так понимаю не вижно оружия ikarus итп веще которые не предусмотрены в чистом La2 а добавлены админами со сторонних сайтов. тч добавлять придется самому или просто на угад(как я) :)

Витя
14.09.2008, 19:15
Цитата:
Сообщение от Pitkin Посмотреть сообщение
Есть ли возможность в скрипте сделать так,чтобы количество заточеных предметов оставалось не 1 шт а то скока мне нуна.Подскажите плиз чего нуна поддправить в срипете для этого
Для этого нужна только удача.

Питкин найди в скрипте вот такую страку if (sumitem(ItemID)<=1) then begin и меняй цифру и все

Pitkin
20.09.2008, 01:21
Использую скрипт на заточку от Shadow и получается следующее: при старте скрипта всё идёт нормально,заточки закупаются автоматом.Но как только доходит очередь до закупки оружия то сразу в логе выдаёт то что на картинке. После чего клиента(С4) сразу вырубает через дисконект,а пакетхак виснет...Как можна поправить это дело??? Подскажите плиз

Shadow
01.10.2008, 01:42
Использую скрипт на заточку от Shadow и получается следующее: при старте скрипта всё идёт нормально,заточки закупаются автоматом.Но как только доходит очередь до закупки оружия то сразу в логе выдаёт то что на картинке. После чего клиента(С4) сразу вырубает через дисконект,а пакетхак виснет...Как можна поправить это дело??? Подскажите плиз

Закупка толком не сделана, так что увы. К тому же тестировал только на С6.

wanick
04.10.2008, 12:31
зависает потомучто для Item -ов где покупать описано только вот

if ItemID=4707 then begin
ItemListID:=576;
ItemEntryID:=3;
BuyItemCount:=1;
ItemName:=('Coin of Luck');
ItemPrice:=1000000;
end;


у мня для Арки

if ItemID=4707 then begin
ItemListID:=558;
ItemEntryID:=13;
BuyItemCount:=1;
ItemName:=('Arcana Mace [acumen]');
ItemPrice:=1;
end;


вобще чтоб не парится с прописыванием всех параметров для точек для пушек и вобще для выбора Npc , можно столеть контрольные закупки , типа пишет выбирите NPc , хоп id запомнили дальше выбирите диалог закупки точек... купите точку
и также с пушкой
потом кнопка старт и поперли :).

Sn00pu
06.10.2008, 15:59
Я загружаю L2PacketHack 3.3.2, потом захожу в игру La2 interlude сворачиваю ее, в L2PacketHack загружаю скрипт уже с измененным именем и количеством слотов в инвентаре, ставлю на против скрипта галочку и вылазит окно где нужно вписывать ID. захожу снова в игру и только открываю инвентарь вылазить ошиба!!!

NLObP
08.10.2008, 01:00
Я загружаю L2PacketHack 3.3.2, потом захожу в игру La2 interlude сворачиваю ее, в L2PacketHack загружаю скрипт уже с измененным именем и количеством слотов в инвентаре, ставлю на против скрипта галочку и вылазит окно где нужно вписывать ID. захожу снова в игру и только открываю инвентарь вылазить ошиба!!!

Попробовать взять версию по новее и обратить внимание на имя соединения (что-то с ним не так).

Grinch
08.10.2008, 18:48
NLObP, имхо надо убарть галочку смены XOR ключа обычно ил начинает работать

Sn00pu
09.10.2008, 18:50
Попробовать взять версию по новее и обратить внимание на имя соединения (что-то с ним не так).
В смысле версию по новее??? Скрипта или L2PacketHack??? пробовал на другом сервере там в списке соединений все нормально с именем чара, но как только ставлю на против скрипта галочку то все...програмка виснет((( ХЗ что делать!!!
А есть скрипты на Kamael??? если есть то плиз скинь сылку на обновленные скрипты,очень прошу!!! И почему я стучусь тебе в аську а ты не отвечаешь???

NLObP
10.10.2008, 01:56
В смысле версию по новее??? Скрипта или L2PacketHack??? пробовал на другом сервере там в списке соединений все нормально с именем чара, но как только ставлю на против скрипта галочку то все...програмка виснет((( ХЗ что делать!!!
А есть скрипты на Kamael??? если есть то плиз скинь сылку на обновленные скрипты,очень прошу!!! И почему я стучусь тебе в аську а ты не отвечаешь???

Более новую версию пакетхака. Скрипт надо самому исправлять/писать.

PS: я устал в аське отвечать на одни и теже вопросы, делом из-за этого некогда заниматься, сорри.

Pitkin
10.10.2008, 23:31
Чёрт побери!!!!!!!У меня заработала автозакупка оружия!!!!спс wanick за то,что подсказал где копать!!!Действительно подставил в эти строчки:if ItemID=4707 then begin
ItemListID:=558;
ItemEntryID:=13;
BuyItemCount:=1;
ItemName:=('Arcana Mace [acumen]');
ItemPrice:=1;
end;свои значения и всё пошло как нуна!!!

Shadow
13.10.2008, 13:09
NLObP, не могу понять почему происходит так:
В таймере есть проверка на поломки,

procedure OnTimer(Sender: TObject);
begin
if (Adena<=99000000) then begin
timer.Enabled:=False;
stats.Lines.Add('Деньги закончились! Меняем...');
if CheckAutoChange.Checked then Change.Enabled:=True else exit;
end;
ScrollOID:=GetItem(ScrollID,0);
if (ScrollOID<3) then begin
stats.Lines.Add('Свитки закончились! Покупаем...');
timer.enabled:=False;
//***** Закупка заточек *
TargetAttacker(RoyOID);
BuyScroll;
BuyScroll;
BuyScroll;
//***********************
delay(50);
timer.enabled:=True;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
if (CurEnchLvl>=StrToInt(Edit1.Text)) then begin
stats.Lines.Add('Sum '+IntToStr(SumItem(ItemID))+' lvl'+IntToStr(CurEnchLvl)+' Ed'+(Edit1.Text));
timer.enabled:=false;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
delay(50);
stats.Lines.Add('Достигнут требуемый уровень! Закупаем...');
stats.Lines.Add('Свободно слотов: '+IntToStr(EmptySlots));
if (EmptySlots>0) then begin
ButtonBuyItems.Enabled:=True;
ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');
end;
if CheckAutoBuy.Checked then Shops.Enabled:=True else exit;
end;
if (SumItem(ItemID)<=StrToInt(EditKeepItems.Text)) then begin
timer.enabled:=false;
stats.Lines.Add('Ограничение по поломкам - '+(EditKeepItems.Text)+'! Закупаем...');
if CheckAutoBuy.Checked then Shops.Enabled:=True else exit;
end;
EditItemVal.Text:=IntToStr(SumItem(ItemID));
EditScrollVal.Text:=IntToStr(SumItem(ScrollID));
end;

и как я понимаю даже при команде timer.Enabled:=False; цикл таймера всеравно доходит до конца. Поэтому я переставил функцию заточки ДО проверки условий, чтобы проверялось уже после заточки. Иначе получается что по условию нужно оставить к примеру 9 штук, условие останавливает таймер, но таймер доходит до конца где еще раз затачивает эту последнюю штуку, которую с успехом может сломать. Вроде бы так должно работать нормально...
НО.
Заметил что он всеравно после того как сработало условие, и собственно перед тем как начинается закупка, он точит еще одну штуку. А если она ломается, то сводится на нет весь предыдущий цикл заточки.
От чего так происходит?

Shizo
11.12.2008, 12:16
Что нада добавить в скрипт, чтобы он каждые 3000 мсек отпрвлял пакет который я ему задам
например (что нада сюда добавить)
begin
buf:=hstr('ХХ ХХ ХХ ХХ');
SendToServer;
buf:=hstr('Х1 Х1 Х1 Х1');
SendToServer;
end;
потом как привязать сюда остановку по нажатию *1*
например вот это
begin
if FromClient and (ConnectName=Name)and (pck[1]=#$38) then
if (pck[2]=#$31) and (pck[3]=#$00) then
begin
pck:='';
bStop;
exit;
end;
или луче не 1 а пакет от сервера например *Соц.Да*
('5A 06 00 00 00')

Xelat
11.12.2008, 16:33
Shizo,
что-то в этом роде.

var
timer:TTimer;
procedure Init;
begin
timer:=TTimer.Create(nil);
timer.interval:=3000;
timer.OnTimer:=@fireTimer;
timer.enabled:=true;
end;
procedure Free;
begin
timer.Free;
end;
procedure fireTimer(Sender: TObject);
begin
buf:=hstr('ХХ ХХ ХХ ХХ');
SendToServer;
buf:=hstr('Х1 Х1 Х1 Х1');
SendToServer;
end;
begin
if FromClient and (ConnectName=Name) and (pck = HStr('5A 06 00 00 00')) then begin
timer.enabled:=false;
end;
end.

Shizo
11.12.2008, 17:42
Значит так я немного подкоректировал и уааля!

Заточка для грации 2



//Автоматизация заточки предметов до необходимого уровня.
//мини-скрипт идея, доработка Shizo.
//by Xelat
const
Name='/свое имя/'; //без этого не останавливал timer.enabled:=false;
var
timer:TTimer;
procedure Init;
begin
timer:=TTimer.Create(nil);
timer.interval:=2000;
timer.OnTimer:=@fireTimer;
timer.enabled:=true;
end;
procedure Free;
begin
timer.Free;
end;
procedure fireTimer(Sender: TObject);
begin
buf:=hstr('/пакет открытия точки/');
SendToServer;
buf:=hstr('/пакет вещи в слот/');
SendToServer;
buf:=hstr('/пакет завершения точки (для ускорения процеса)/');
SendToServer;
end;
begin
if FromServer and (ConnectName=Name) and (pck = HStr('/Сюда пакет с нужной заточкой пухи!(это важно нада пральный пакет)/')) then begin
timer.enabled:=false;
end;
end.

спасибо за помощь все работает проверено на грации 2

Vebstor23
12.12.2008, 20:16
народ подскажити я пользуюсь скриптом заточки с этого серва зашол на серв там когда дотачиваеш до 10 эт 100% и когда точиш на +11 и т.д. там не 100% ну вот когда например затачиваемая вещ ломается на +13 кпримеру то затачиваемая вещ необнуляется до 0 а делается сразу +10 а в логах типо пишет что обнулилась до 10 и вот когда идёт продолжение скрипта то l2phx почемуто зацикливается и зависает без всякой ошибки также зависает клиент( вчём может быть причина? и как сделать чтоб начинал точить не с 0 а сразу с +10?

maxstro
14.12.2008, 16:52
Я понел в чем проблема. Скрипт пислася под простые заточки да? А у меня на серваке блессед заточки. И вобшем после каждого фейла он исключает предыдушую из списка как я понел. И когда фэйлится последняя шмотка он не понимает че делать, т.к. остались еше шмоти и зависает. Помогите исправить плз.

народ подскажити я пользуюсь скриптом заточки с этого серва зашол на серв там когда дотачиваеш до 10 эт 100% и когда точиш на +11 и т.д. там не 100% ну вот когда например затачиваемая вещ ломается на +13 кпримеру то затачиваемая вещ необнуляется до 0 а делается сразу +10 а в логах типо пишет что обнулилась до 10 и вот когда идёт продолжение скрипта то l2phx почемуто зацикливается и зависает без всякой ошибки также зависает клиент( вчём может быть причина? и как сделать чтоб начинал точить не с 0 а сразу с +10?

Кстате на этом же серваке играю.

NLObP
27.12.2008, 00:01
проверял на 1 С4 сервере,запустил всё нормально точит...Но не 100%
Так и должно быть. Нет 100% заточки.

Добавлено через 1 минуту
Сколько пух перекупил (Потому что скрипт 1 пуху не точит,после того как все переломались) Или я как то неправильно всё делаю,или я смысл скрипта не понял...!

Так и задумано, чтобы осталась одна вещь. Если надо точить одну вещь, то надо поправить скрипт, в нем есть место, где описан как это сделать.

NLObP
27.12.2008, 01:51
А что он такого особенного делает тогда!?Я и сам могу так точить...)

Ничего такого не делает, кроме автоматизации самого процесса заточки.

freeworld
31.12.2008, 20:48
Спасибо NLobP за скрипт...НО почему в грации 2...при запуске скрипта и старте заточки пишет "Нет такой заточки! Заточка прервана" хотя itemeid беру из Itemlist пакета...заточка как и шмотка затачиваемая в итем листе видна...Подскажите плз в чем проблема..P.S особенности серверка заточки в одном слоте все итемы при неудаче не ломаются

NLObP
01.01.2009, 03:29
Для Грации надо менять ID пакетов.
Под свои сервера меняйте скрипт сами.

freeworld
01.01.2009, 14:50
ID я менял...ведь нужно из поменять всеголишь здесь :
Scroll=961;Weapon=9866; а в остальном теле скрипта там уж работа идет с присвоением и считыванием и я думаю там нечего менять...только я нимагу понять за что отвечает этот пакет : procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
Использую скрипт by NLObP Адаптированая под Gracia by CreaDo

Ashtaret
01.01.2009, 18:02
Вот вообщем делал под себя .. но может комуто еще пригодится ...
кароче после того как затачивает оружие сразу покупает заточку и снова точит (а не например как в скрипте таргет=>штмл=>мультисел=>точка=>тарегт=>штмл=>мультисел=>точка и тд)
вообщем в списке констант добавить пакет на покупку заточки а далее все как обычно!
(на некоторых ПТС нужно будет раз открыть диалог и купить точку И не менять тарегТ!)
//Автоматизация заточки предметов до необходимого уровня by NLObP
//version 0.7 от 20.07.2008г. add buy enchant packet by [PAMA^^] Aka ashtaret
program Enchant;
{************************************************* *******************************
Возможности скрипта:
--------------------
0.1
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим, один предмет всегда остаётся;
0.2
+ исправлен выбор названий предметов из инвентаря;
+ небольшая правка кода;
0.3
+ Проверено на theAbyss (все предметы инвентаря чара видит);
+ исправлена ошибка кода выбора скроллов;
+ исправлена ошибка подсчета суммы предметов;
0.4
+ специально для Miler проверено на La2Titan (затачивал Mantikore Skin Shirt до +7);
+ исправлена процедура InventoryUpdate;
+ изменена логика затачивания;
+ заготовка покупки заточек/вещей;
0.5
+ проверено на L2Fantasy;
+ добавлена проверка, если заточка сбрасывается в 0 без поломки вещи;
+ добавлен код, если надо точить одну вещь (опционально);
0.6
+ изменил выборку ItemId;
0.7
+ исправлено смещение в CreateItemBase для С4, спасибо Mulder
0.8
+Добавлен пакет на покупку заточки
(затачивает вещь затем сразу покупает заточку) by [PAMA^^] aka Ashtaret


================================================== ==================
Работа скрипта проверялась на локальном Интерлюда сервере,
для С4 не проверялась и поддерживаться далее не будет.
================================================== ==================

Необходимо затариться оружием, заточками и валерьянкой.
Name='53124'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
buyench='A7 2F 02 00 00 25 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00'; //Пакет который покупает заточку в ГМ шопе

Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.

Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя.

Узнать пакет покупки заточки можно в снифере пакет от клиента к серверу RequestMooltisellChoose


MyICQ 402988808
************************************************** ******************************}

//............................................
//Список констант
const
Name='DeathKnight'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
buyench='A7 2F 02 00 00 25 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00'; //Пакет который покупает заточку в ГМ шопе
//-------------------------
max=80; //количество слотов в инвентаре чара

//............................................
//Список переменных
var
Item, scrl:integer;
ScrollID, ScrollOID:integer; //ScrollID скролла заточки
ItemID,ItemOID:integer; //ItemID затачиваемого предмета
MaxEnchLvl:integer; //уровень заточки который требуется достичь
ItemBase: array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
ready, add : boolean;
timer : TTimer;
ItemCount, CurEnchLvl: integer;
SocialID : integer; // вспомогательная
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
FormMain : TForm; //Создаваемая форма
Splitter1 : TSplitter;
Splitter2 : TSplitter;
Stats : TMemo;
Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label2 : TLabel;
Label4 : TLabel;
Label12 : TLabel;
Label13 : TLabel;
CheckBoxItem : TCheckBox;
ComboBoxItem : TComboBox;
ButtonStartEnchant : TButton;
ButtonStopEnchant : TButton;
CheckBoxScroll : TCheckBox;
ComboBoxScroll : TComboBox;
EditItemVal : TEdit;
EditScrollVal : TEdit;
EditScrollOID : TEdit;
EditItemOID : TEdit;
Label1 : TLabel;
Label3 : TLabel;
Edit1 : TEdit;
Edit2 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);

ComboBoxItem.Enabled:=false; //выключаем
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
msg.Lines.Add('Команда Старт!!!');
timer.enabled:=true;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!!!');
timer.enabled:=false;
ready:=false;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
// MyHPID:=ExtractIDValues(ComboBoxHPotion.Items.Stri ngs[ComboBoxHPotion.ItemIndex]);
// EditHPotionVal.Text:=Inttostr(FindItem(MyHPID));
// EditHPotionOID.text:=inttostr(ItemBase2[1,1]);
end;
//......................................
//*************************************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant by NLObP v.0.7';
Result.Left := 397;
Result.Top := 233;
Result.Width := 581;
Result.Height := 205;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 573;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 443;
Stats.Top := 0;
Stats.Width := 130;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 65;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 170;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень заточки';
Edit1.ShowHint := TRUE;
Edit1.Text := '65535';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 199;
Edit2.Top := 67;
Edit2.Width := 60;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 90;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 169;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка затачиваемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := TRUE;
ButtonStartEnchant.Hint := '';
ButtonStartEnchant.ShowHint := FALSE;
ButtonStartEnchant.Caption := 'Start';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Stop';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали скролл заточки';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Заточка';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;

//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 90;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 169;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка скролл заточки';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color := clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight := 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Автоматизация заточки by NLObP!');
Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=1000; //время задержки
ready:=false;
add:=false;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//......................................
//************************************************** ****************************
procedure Free; //Вызывается при выключении скрипта
begin
// ItemBase:=nil; //нельзя так делать с массивом
timer.Free;
StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
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
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)d(Augment)d(--)
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
ListCount:=ReadH(j); //количество итемов не должно превышать max!
//if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
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
// msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if interlude then inc(j,12) else inc(j,4);
//msg.Lines.Add('j='+inttostr(j));
end;
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(ItemBase[2,i])+' в itemsid.ini');
end
end;
except;
msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
msg.Lines.Add(inttostr(ItemBase[2,i]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
//......................................
//************************************************** ****************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(8)
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, ItemOID, ItemID, ItemCount, ListCount, UpdType, Itemlvl: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for ii:=1 to ListCount do begin
UpdType:=ReadH(j);
//inc(j,2);
ReadH(j); //ItemType1
ItemOID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
itemCount:=ReadD(j); //кол-во
inc(j,10);
Itemlvl:=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]:=ItemOID;
ItemBase[2,i]:=ItemID;
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Добавили предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
add:=true;
end;
end;
end;
//изменен
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Изменяем параметры предмета!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
end;
end;
end;
//удален
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
msg.Lines.Add('Удаляем предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
if interlude then inc(j,10) else inc(j,2);
//msg.Lines.Add('j='+inttostr(j));
end;
end;
//......................................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItem(item:integer; lvl:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
//находим подходящий предмет по ItemID
if (ItemBase[2,i]=item) and (ItemBase[4,i]=lvl) then begin
//если нашли, то возвращаем ObjectID предмета
result:=ItemBase[1,i]; // itemOID
ItemCount:=ItemBase[3,i];
//Itemlvl:=ItemBase[4,i];
//msg.Lines.Add('<item='+inttostr(item)+' lvl='+inttostr(lvl)+'> i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
exit;
end;
end;
//ничего не нашли
result:=0;
end;
//......................................
//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//......................................
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i : integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to max do begin
if (ItemBase[2,i]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
// msg.Lines.Add('i='+inttostr(i));
result:=result+ItemBase[3,i];
//inc(result);
end;
end;
end;
//......................................
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServerEx(Name);
//*********** использовать чит с петом ************************
{ buf:=#$8B;
WriteD(ObjectID);
writed(1);
SendToServerEx(Name);
} //***********
end;
//......................................
{//************************************************** *************
function ExtractIDValues(sData: string): integer;
var
s: string;
i,j: integer;
begin
i:=0;
s:=sData;
i:=pos('=',s);
if i>=0 then
s:=copy(s,1,i-1);
try
result:=strtoint(s);
except
result:=0;
end;
end;
//............................................}
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нечего точить! Прервано!');
timer.enabled:=false;
exit;
end;
if (sumitem(ItemID)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Прервано!');
timer.enabled:=false;
exit;
end;
ScrollOID:=GetItem(ScrollID,0);
if ScrollOID=0 then begin
msg.Lines.Add('Нет заточки! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
// delay(1000);
// RequestEnchantItem(Item);
// delay(1000);
//************************************************
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(Item));
// end;
end;
//......................................
//************************************************** *************
// Вся торговля здесь!!!
//************************************************** *************
{procedure OnTrade1(Sender: TObject);
begin
case trade of
//-------------------------------------------------
//покупаем у Misc Trader из массива TradeBuyItem1
//-------------------------------------------------
100: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
//-------------------------------------------------
//покупаем у Armor Trader из массива TradeBuyItem2
//-------------------------------------------------
200: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
end;
end;
end;
}//......................................
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
//покупка состоит из следующих шагов:
//1. таргет на продавце, пауза, снова таргет c04=Action, c04=Action
//2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
//3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
//4. приходит s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemTyp e1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d( ItemBodyPart)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)
//************************************************** **************************
{ if ReadyToBuy and (FishermanOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//после того как мы взяли в таргет продавца приходит этот пакет
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if ReadD(2)=FishermanOID then begin
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
delay(1000);
RequestByPassToServer(getbuylist);
msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (sell)');
end;
end;
//после выбора пункта - продажа, приходит этот пакет
//s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemTyp e1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d( ItemBodyPart)
#$11: begin
msg.Lines.Add('S>Пакет BuyList #$11');
ListID:=ReadD(6); //запоминаем, он все время разный
msg.Lines.Add('ListID='+inttostr(ListID));
//шлем запрос на продажу
//1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(C ount)
msg.Lines.Add('C>Пакет RequestBuyItem #$1F');
//продадим первый из списка
msg.Lines.Add('Item: ID:'+IntToStr(TradeBuyItem[Trd])+' Count:'+IntToStr(NeedBuy));
delay(1000);
RequestBuyItem(TradeBuyItem[Trd],NeedBuy);
ReadyToBuy:=false;
end;
end;
end;
end;
} //......................................
//************************************************** **************************
if FromServer then
case pck[1] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27: InventoryUpdate; //Обновление базы
//......................................
//Пакет ChooseInventory
#$6F: if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItem(ItemID,CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true; //пока в тесте отключаем (вкл. после заточки предмета)
begin
buf:=HStr('buyench'); //покупаем BEW(S)
SendToServer;
end;

end;
#$81: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
end;
end;
end.

abyabar
03.01.2009, 22:14
Здраствуй .. ! я играю на сервере http://www.tcl-game.ru/ (не примите как рекламу... )! Мне нужно бы переделать чуть скрипт ! ТАк как там когда точиш ... и если не затачивается сразу сбрасывается до +10 ! И скрипт после того как сбросилось на +10 больше не точить ! Кто сможет помогите ! Что убрать =)

freeworld
03.01.2009, 23:28
Помогите настроить под сервак http://rulineage.com...ибо я совсем запутался...все уже поменял а результата 0...за рабочий скрипт готов даже заплатить

NLObP
04.01.2009, 00:12
abyabar, создай новую тему и в ней задавай конкретные вопросы, а не просто помогите.
freeworld, то же самое и укажи конкретно цену работы, может быть кто и возмется.

ЗЫЖ изучайте скрипты выложеные на форуме, читайте больше по программированию и о пакетах, пользуйтесь гуглом/яндексом, не возможно всем помочь, своих дел выше крыши, сорри.

-=[B1@©k}{ac]{e®]=-™
07.01.2009, 09:59
NLObP, не мог бы ты написать небольшой кусок скрипта, что бы можно было купить, и сразу продать эту пуху... с покупкой вроде разобрался...
TargetAttacker('Holly', RoyOID);
RequestByPassToServer('menu_select?ask=-303&reply=1201');
delay(500); // Ждем открытия диалога
for Cnt:=1 to IoA do begin
RequestMultiSellItem(1201, 7, 1);
delay(BuyDelay);
end;
особенность сервера, где я играю, пуху покупаешь за 20кк, продаешь рядом стоящему нпц за 24кк... дальше я сам все сделаю=)... заранее спс...

NLObP
08.01.2009, 22:36
{e®]=-™;21001']NLObP, не мог бы ты написать небольшой кусок скрипта, что бы можно было купить, и сразу продать эту пуху... с покупкой вроде разобрался...


{e®]=-™;21001']особенность сервера, где я играю, пуху покупаешь за 20кк, продаешь рядом стоящему нпц за 24кк... дальше я сам все сделаю=)... заранее спс...

Читай моё предыдущее сообщение.

GANsss
15.01.2009, 09:52
by Breadfan
Вот скрипт переделанный под камаель.
Т.к. имеющаяся у меня версия пнх некорректно работает с именами соединений то пришлось убрать возможность работы с определенным подключением.В данном случае изменений минимум, заменены только лишь ИД пакетов и требуемые смещения.
скачал этот скрипт, выбрал предмет точки, нажал точить точит, но
1) если 2-3 предмета точить блесами он не останавливается и точит пока не кончаться блессы
2) если 2-3 точить обычными он 1 точит пока не сломает а далее не может выбрать предмет для затачивания
Помогите сделать чтоб он останавливался на определеной точке

GANsss
15.01.2009, 23:32
const
Name=''; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
//-------------------------
max=300; //количество слотов в инвентаре чара

//............................................
//Список переменных
var
Item, scrl:integer;
ScrollID, ScrollOID:integer; //ScrollID скролла заточки
ItemID,ItemOID:integer; //ItemID затачиваемого предмета
MaxEnchLvl:integer; //уровень заточки который требуется достичь
ItemBase: array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
ready, add : boolean;
timer : TTimer;
ItemCount, CurEnchLvl: integer;
SocialID : integer; // вспомогательная
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
FormMain : TForm; //Создаваемая форма
Splitter1 : TSplitter;
Splitter2 : TSplitter;
Stats : TMemo;
Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label2 : TLabel;
Label4 : TLabel;
Label12 : TLabel;
Label13 : TLabel;
CheckBoxItem : TCheckBox;
ComboBoxItem : TComboBox;
ButtonStartEnchant : TButton;
ButtonStopEnchant : TButton;
CheckBoxScroll : TCheckBox;
ComboBoxScroll : TComboBox;
EditItemVal : TEdit;
EditScrollVal : TEdit;
EditScrollOID : TEdit;
EditItemOID : TEdit;
Label1 : TLabel;
Label3 : TLabel;
Edit1 : TEdit;
Edit2 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);

ComboBoxItem.Enabled:=false; //выключаем
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
msg.Lines.Add('Команда Старт!!!');
timer.enabled:=true;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!!!');
timer.enabled:=false;
ready:=false;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
// MyHPID:=ExtractIDValues(ComboBoxHPotion.Items.Stri ngs[ComboBoxHPotion.ItemIndex]);
// EditHPotionVal.Text:=Inttostr(FindItem(MyHPID));
// EditHPotionOID.text:=inttostr(ItemBase2[1,1]);
end;
//......................................
//*************************************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant by NLObP v.0.6';
Result.Left := 397;
Result.Top := 233;
Result.Width := 581;
Result.Height := 205;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 573;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 443;
Stats.Top := 0;
Stats.Width := 130;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 65;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 170;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень заточки';
Edit1.ShowHint := TRUE;
Edit1.Text := '65535';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 199;
Edit2.Top := 67;
Edit2.Width := 60;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 90;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 169;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка затачиваемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := TRUE;
ButtonStartEnchant.Hint := '';
ButtonStartEnchant.ShowHint := FALSE;
ButtonStartEnchant.Caption := 'Start';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Stop';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали скролл заточки';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Заточка';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;
//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 90;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 169;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка скролл заточки';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color := clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight := 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Автоматизация заточки by NLObP!');
Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=5000; //время задержки
ready:=false;
add:=false;
//Пакет RequestItemList
buf:=hstr('14');
SendToServer;
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//......................................
//************************************************** ****************************
procedure Free; //Вызывается при выключении скрипта
begin
// ItemBase:=nil; //нельзя так делать с массивом
timer.Free;
StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
end;
//......................................
//************************************************** ****************************
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClient;
end;
//......................................
//************************************************** *************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)d(Augment)d(--)
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
ListCount:=ReadH(j); //количество итемов не должно превышать max!
//if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
for i:=1 to ListCount do begin
itemBase[1,i]:=ReadD(j); //OID
itemBase[2,i]:=ReadD(j); //ItemID
//-------Изменен формат пакета в камаеле
ReadD(j);
//---------------------------------
itemBase[3,i]:=ReadD(j); //кол-во
inc(j,10);
itemBase[4,i]:=ReadH(j);//EnchantLevel
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if interlude then inc(j,44) else inc(j,8); // так же изменены смещения в связи с добавлением новых свойств итемов
msg.Lines.Add('j='+inttostr(j));
end;
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(ItemBase[2,i])+' в itemsid.ini');
end
end;
except;
msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
msg.Lines.Add(inttostr(ItemBase[2,i]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
//......................................
//************************************************** ****************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(8)
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, ItemOID, ItemID, ItemCount, ListCount, UpdType, Itemlvl: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for ii:=1 to ListCount do begin
UpdType:=ReadH(j);
//inc(j,2);
ReadH(j); //ItemType1
ItemOID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
Readd(j);
itemCount:=ReadD(j); //кол-во
inc(j,10);
Itemlvl:=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]:=ItemOID;
ItemBase[2,i]:=ItemID;
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Добавили предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
add:=true;
end;
end;
end;
//изменен
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Изменяем параметры предмета!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
end;
end;
end;
//удален
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
msg.Lines.Add('Удаляем предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
if interlude then inc(j,10) else inc(j,2); //для С4 неправильно?
//msg.Lines.Add('j='+inttostr(j));
end;
end;
//......................................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItem(item:integer; lvl:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
//находим подходящий предмет по ItemID
if (ItemBase[2,i]=item) and (ItemBase[4,i]=lvl) then begin
//если нашли, то возвращаем ObjectID предмета
result:=ItemBase[1,i]; // itemOID
ItemCount:=ItemBase[3,i];
//Itemlvl:=ItemBase[4,i];
//msg.Lines.Add('<item='+inttostr(item)+' lvl='+inttostr(lvl)+'> i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
exit;
end;
end;
//ничего не нашли
result:=0;
end;
//......................................
//************************************************** ****************************
procedure UseItem(ObjectID: integer); //#$19 kamael
begin
buf:=#$19;
WriteD(ObjectID);
WriteD(0);
SendToServer;
end;
//......................................
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i : integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to max do begin
if (ItemBase[2,i]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
// msg.Lines.Add('i='+inttostr(i));
result:=result+ItemBase[3,i];
//inc(result);
end;
end;
end;
//......................................
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer); //5F kamael
begin
buf:=#$5F;
WriteD(ObjectID);
SendToServer;
//*********** использовать чит с петом ************************
{ buf:=#$8B;
WriteD(ObjectID);
writed(1);
SendToServerEx(Name);
} //***********
end;
//......................................
{//************************************************** *************
function ExtractIDValues(sData: string): integer;
var
s: string;
i,j: integer;
begin
i:=0;
s:=sData;
i:=pos('=',s);
if i>=0 then
s:=copy(s,1,i-1);
try
result:=strtoint(s);
except
result:=0;
end;
end;
//............................................}
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нечего точить! Прервано!');
timer.enabled:=false;
exit;
end;
if (sumitem(ItemID)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Прервано!');
timer.enabled:=false;
exit;
end;
ScrollOID:=GetItem(ScrollID,0);
if ScrollOID=0 then begin
msg.Lines.Add('Нет заточки! Прервано!');
timer.enabled:=false;
exit;
end;

UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
// delay(1000);
// RequestEnchantItem(Item);
// delay(1000);
//************************************************
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(Item));
// end;
end;
//......................................
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
if FromServer then
case pck[1] of
//......................................
//Пакет ItemList
#$11: CreateItemBase; //создание базы предметов
//......................................
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$21: InventoryUpdate; //Обновление базы
//......................................
//Пакет ChooseInventory
#$7C: if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItem(ItemID,CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true; //пока в тесте отключаем (вкл. после заточки предмета)
end;
#$87: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
end;
end;
end.
вот этот скрипт работает на камаэле но он не точет до определоной точки что поменять кто-нибудь знает

roah
20.01.2009, 07:43
Значит так я немного подкоректировал и уааля!

Заточка для грации 2



//Автоматизация заточки предметов до необходимого уровня.
//мини-скрипт идея, доработка Shizo.
//by Xelat
const
Name='/свое имя/'; //без этого не останавливал timer.enabled:=false;
var
timer:TTimer;
procedure Init;
begin
timer:=TTimer.Create(nil);
timer.interval:=2000;
timer.OnTimer:=@fireTimer;
timer.enabled:=true;
end;
procedure Free;
begin
timer.Free;
end;
procedure fireTimer(Sender: TObject);
begin
buf:=hstr('/пакет открытия точки/');
SendToServer;
buf:=hstr('/пакет вещи в слот/');
SendToServer;
buf:=hstr('/пакет завершения точки (для ускорения процеса)/');
SendToServer;
end;
begin
if FromServer and (ConnectName=Name) and (pck = HStr('/Сюда пакет с нужной заточкой пухи!(это важно нада пральный пакет)/')) then begin
timer.enabled:=false;
end;
end.

спасибо за помощь все работает проверено на грации 2

всё бы хорошо но вылазиет ошибка "List index out of bounds (2999)."

че с этим сделать ?

сорри я туплю.. увеличил макс размер лога.. все кул..

и ещё при высоком пинге пакет на проверку неуспевает проверять и отправляет следущий пакет на точку ))

а так все отлично .. пойду искать заранее вариант как как зайти на забан акк..чтобы помто можно было всё это снять )

YssurTiger
21.01.2009, 03:16
Значит так я немного подкоректировал и уааля!

Заточка для грации 2


const
Name='/свое имя/'; //без этого не останавливал timer.enabled:=false;
begin
if FromServer and (ConnectName=Name) and (pck = HStr('/Сюда пакет с нужной заточкой пухи!(это важно нада пральный пакет)/')) then begin
timer.enabled:=false;
end;
end.

я попробовал на своем серве gracia part 2 когда использовал без // работало отлично только не останавливало,а с // сразу пишет l2...чето ошибка какаето и ниже зеленым по синему написано Читер?? читерить плохо(ну походу админ посторался на славу)как можно преодолеть ету трудность?:(
Сюда пакет с нужной заточкой пухи - с этим чучуть непонял,у меня по завершению точения приходит 2 пакета один 87 02 00 00 00 00 00
02 как я понял ур заточки даной вещи,а вот что за второй пакет фиг знает.
можно удалить мое сообшение..сам во всем разобрался,просто немного затупил..нету версию юзал а там пакет под другим названием был=)))

Spozi
25.01.2009, 20:58
const
Name='/свое имя/'; //без этого не останавливал timer.enabled:=false;
begin
if FromServer and (ConnectName=Name) and (pck = HStr('/Сюда пакет с нужной заточкой пухи!(это важно нада пральный пакет)/')) then begin
timer.enabled:=false;
end;
end.

в этой хм я вставляю пакет с нужной заточкой...(87 09 00 00 00 00 00 00 00 00 00 00 00)
но он все равно продолжает точить дальше...
подскажите в чем ошибка у меня?

Spozi
25.01.2009, 21:19
YssurTiger о_О такаяже фигня..2 пакета один с ур заточки второй хз с чем...
версия 3.4.1.81 ...обьясни пожалуйста как ты сделал?

Gradens
26.01.2009, 01:43
Ребят подскажите я хочу заточить себе шмот на +20 , мне нужно именно чтоб он до +20 заточил и остановился , может кто то помочь?Если можно то настроенный скрипт дайте , а лучше стукните в асю очень прошу...8 803 759...Спасибо

NLObP
26.01.2009, 02:53
Помогите плз когда запускаю скрипт

не показивает веши чистые строчки
как зделать што-бы показивалося?
Взарание спасибо!

ItemID Кол-во
"Предмет: 0 833696309

Необходимо исправить ItemsID.ini в комплекте пакетхака. Можно попробовать добавить строчку со своими вещами, по типу там описанных, а ещё лучше найти/сделать самому именно такой, какой нужно для твоего сервера.

NLObP
26.01.2009, 06:25
>>>//Автоматизация заточки предметов до необходимого уровня by NLObP для Грации
//version 0.8 от 26.01.2009г.
program Enchant_gracia;
{************************************************* *******************************
Возможности скрипта:
--------------------
- Панель управления;
- Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим, один предмет всегда остаётся;

================================================== ==================
Работа скрипта проверялась на локальном Грация сервере
================================================== ==================

1) Необходимо затариться оружием, заточками и валерьянкой.
2) Вписать в константу Name имя своего чара.
3) Поставить количество слотов в инвентаре чара в константу maxitems.
4) Сохранить и запустить скрипт установив напротив него галочку.

Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей,
степень заточки значения не имеет.

Скрипт распространяется как есть, и я не несу ответственности за то,
что ВЫ натворили у себя, его используя.

MyICQ 402988808
************************************************** ******************************}

//............................................
//Список констант
const
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
//-------------------------
maxitems=250; //количество слотов в инвентаре чара
debug=false; //если не хотим видеть отладочной информации

//............................................
//Список переменных
var
Item, scrl: integer;
ScrollID, ScrollOID: integer; //ScrollID скролла заточки
ItemID, ItemOID, ItemEnch: integer; //ItemID затачиваемого предмета
MaxEnchLvl: integer; //уровень заточки который требуется достичь
//ITEMs
BaseItems: array[1..maxitems, 1..12] of integer; //все предметы в инвентаре

StartTime, EndTime: TDateTime;
good, broken: integer;
ready: boolean;
timer, showinf : TTimer;
ItemCount, CurEnchLvl: integer;
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
FormMain : TForm; //Создаваемая форма
Splitter1, Splitter2 : TSplitter;
Stats, Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label1, Label2, Label3, Label4, Label12, Label13 : TLabel;
ComboBoxItem, ComboBoxScroll : TComboBox;
CheckBoxItem, CheckBoxScroll : TCheckBox;
ButtonStartEnchant, ButtonStopEnchant : TButton;
EditItemVal, EditScrollVal, EditScrollOID, EditItemOID, Edit1, Edit2 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=BaseItems[ComboBoxItem.ItemIndex+1,2];
ItemID:=BaseItems[ComboBoxItem.ItemIndex+1,3];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);

ComboBoxItem.Enabled:=false; //выключаем
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=BaseItems[ComboBoxItem.ItemIndex+1,2];
ItemID:=BaseItems[ComboBoxItem.ItemIndex+1,3];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=BaseItems[ComboBoxScroll.ItemIndex+1,2];
ScrollID:=BaseItems[ComboBoxScroll.ItemIndex+1,3];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=BaseItems[ComboBoxScroll.ItemIndex+1,2];
ScrollID:=BaseItems[ComboBoxScroll.ItemIndex+1,3];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
msg.Lines.Add('Команда Старт!!!');
timer.enabled:=true;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!!!');
timer.enabled:=false;
ready:=false;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
// MyHPID:=ExtractIDValues(ComboBoxHPotion.Items.Stri ngs[ComboBoxHPotion.ItemIndex]);
// EditHPotionVal.Text:=Inttostr(FindItem(MyHPID));
// EditHPotionOID.text:=inttostr(ItemBase2[1,1]);
end;
//......................................
//*************************************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant by NLObP v.0.8';
Result.Left := 397;
Result.Top := 233;
Result.Width := 581;
Result.Height := 205;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 573;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 443;
Stats.Top := 0;
Stats.Width := 130;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 65;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 170;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень улучшения';
Edit1.ShowHint := TRUE;
Edit1.Text := '65535';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 199;
Edit2.Top := 67;
Edit2.Width := 60;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 90;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 169;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка улучшаемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := TRUE;
ButtonStartEnchant.Hint := '';
ButtonStartEnchant.ShowHint := FALSE;
ButtonStartEnchant.Caption := 'Start';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Stop';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали свиток улучшения';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Свиток';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;
//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 90;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 169;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка свиток улучшения';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color := clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight := 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Автоматизация заточки by NLObP для Грации!');
Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=500; //время задержки

ShowInf:=TTimer.Create(nil);
ShowInf.OnTimer:=@OnShowInfo;
ShowInf.enabled:=true;
ShowInf.interval:=1000; //время задержки

StartTime:=time;
good:=0;
broken:=0;
ready:=false;
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//.................................................. ............................
procedure Free; //Вызывается при выключении скрипта
begin
BaseItems:=nil; //нельзя так делать с массивом
ShowInf.Enabled:=false; ShowInf.Interval:=0; ShowInf.Free; ShowInf.OnTimer:=nil;
timer.Enabled:=false; timer.Interval:=0; timer.Free; timer.OnTimer:=nil;

StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
end;
//.................................................. ............................
procedure ShowInfo;
var
i: integer;
begin
stats.Lines.Clear;
stats.Lines.Add('Имя чара :'+Name);
stats.Lines.Add('Время старта :'+TimeToStr(starttime));
stats.Lines.Add('Время ловли :'+TimeToStr(time-starttime));
stats.Lines.Add('Улучшили: '+IntToStr(good));
stats.Lines.Add('Сломали: '+IntToStr(broken));
end;
//......................................
//************************************************** *************
procedure OnShowInfo(Sender: TObject); //выводим в форму
begin
ShowInfo;
end;
//.................................................. ............................
//послать сообщение в чат
//use: SendMessage(msg);
procedure SendMessage(msg:string); //отправка системных сообщений клиенту
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(Name);
end;
//.................................................. ............................
procedure debugMsg(msg: string);
begin
if debug then begin
sendMSG(msg);
SendMessage(msg);
end;
end;
//.................................................. ............................
procedure ItemList;
{Создаем базу Items}
//11=ItemList:h(ShowWindow)h(ListSize:Loop.01.0021)h (ItemType1)d(ObjectID)
// d(ItemID:Get.Func01)d(LocationSlot)d(Count)h(ItemT ype2)h(CustomType1)
// h(isEquipped)d(BodyPart)h(EnchantLevel)h(CustType2 )d(AugmentationID)
// d(Mana)d(AttackAttrElement)d(AttackAttrElementVal) d(DefAttrFire)
// d(DefAttrWater)d(DefAttrWind)d(DefAttrEarth)d(DefA ttrHoly)d(DefAttrUnholy)
var
i, j, k: integer;
ListCount: integer;
begin
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
for i:=1 to maxitems do
if (i<=ListCount) then begin
BaseItems:=ReadH(j); //ItemType1
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); //Count
BaseItems[i,6]:=ReadH(j); //ItemType2
BaseItems[i,7]:=ReadH(j); //CustomType1
BaseItems[i,8]:=ReadH(j); //isEquipped
BaseItems[i,9]:=ReadD(j); //BodyPart
BaseItems[i,10]:=ReadH(j); //EnchantLevel
BaseItems[i,11]:=ReadH(j); //CustType2
BaseItems[i,12]:=ReadD(j); //AugmentationID
//debugmsg('OID='+inttostr(BaseItems[i,2])+' ID='+inttostr(BaseItems[i,3]));
inc(j,40);
end else for k:=1 to 12 do BaseItems[i,k]:=0; // забиваем нулями
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(BaseItems[i,3])]); //записываем название вещей из инвентаря
except;
//msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(BaseItems[i,3])+' в itemsid.ini');
end
end;
except;
//msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
//msg.Lines.Add(inttostr(BaseItems[i,3]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
//.................................................. ............................
procedure InventoryUpdate; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, k, ListCount, UpdType : integer;
ItemType1, ObjectID, ItemID, LocationSlot, Count, ItemType2, CustomType1,
isEquipped, BodyPart, EnchantLevel, CustType2, AugmentationID :integer;
additem : boolean;
begin
additem:=true;
ListCount:=ReadH(2); //количество итемов
// debugmsg('ListCount='+inttostr(ListCount));
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
ItemType1:=ReadH(j);
ObjectID:=ReadD(j);
ItemID:=ReadD(j);
LocationSlot:=ReadD(j);
Count:=ReadD(j);
ItemType2:=ReadH(j);
CustomType1:=ReadH(j);
isEquipped:=ReadH(j);
BodyPart:=ReadD(j);
EnchantLevel:=ReadH(j);
CustType2:=ReadH(j);
AugmentationID:=ReadD(j);
case UpdType of
1: k:=0; //добавлен новый предмет
2: k:=ObjectID; //изменен предмет в инвентаре
3: begin //удален
for ii:=1 to maxitems do
if (BaseItems[ii,2]=ObjectID) then begin
//debugmsg('удаляем OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3]));
for k:=1 to 12 do BaseItems[ii,k]:=0;
break;
end;
end;
end;
for ii:=1 to maxitems do begin
if (BaseItems[ii,2]=k) then begin
BaseItems[ii,1]:=ItemType1;
//BaseItems[ii,2]:=ObjectID;
BaseItems[ii,3]:=ItemID;
BaseItems[ii,4]:=LocationSlot;
BaseItems[ii,5]:=Count;
BaseItems[ii,6]:=ItemType2;
BaseItems[ii,7]:=CustomType1;
BaseItems[ii,8]:=isEquipped;
BaseItems[ii,9]:=BodyPart;
BaseItems[ii,10]:=EnchantLevel;
BaseItems[ii,11]:=CustType2;
BaseItems[ii,12]:=AugmentationID;
//debugmsg('доб/изм OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3]));
break;
end;
end;
inc(j,38);
end;
end;
//.................................................. ............................
function GetItem(ID, FieldIn, FieldOut : integer): integer;
{GetInv(по чему будем искать, номер того по чему будем искать, номер того что надо найти)
где:
ID - искомый код;
FieldIn - по какому полю ищем;
FieldOut - какое поле возвращаем;
1=ItemType1; 2=ObjectID;3=ItemID;4=LocationSlot;5=Count;6=ItemT ype2;7=CustomType1;
8=isEquipped;9=BodyPart;10=EnchantLevel;11=CustTyp e2;12=AugmentationID;
ex1: GetInv(6408,2,1) - вернет ObjectID свадебного платья, если онное лежит в
инвентаре, иначе вернет -1
ex2: GetInv(6408,2,8) - вернет уровень заточки первого попавшегося в инвентаре
свадебного платья, если свадебного платья нет, то вернет -1
}
var
i: integer;
begin
for i:=1 to maxitems do
if (BaseItems[i,FieldIn]=ID) then begin
Result:=BaseItems[i,FieldOut];
//debugmsg('Нашли='+inttostr(result));
exit;
end;
Result:=-1;
end;
//.................................................. ............................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItemEnchant(item,lvl:integer) : integer;
var
i : integer;
begin
//ничего не нашли
result:=0;
for i:=1 to maxitems do
if (BaseItems[i,3]=item) and (BaseItems[i,10]=lvl) then begin
ItemEnch:=BaseItems[i,10];
Result:=BaseItems[i,2];
//debugmsg('Нашли='+inttostr(result));
exit;
end;
// Result:=-1;
end;
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i : integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to maxitems do begin
if (BaseItems[i,3]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
// msg.Lines.Add('i='+inttostr(i));
result:=result+BaseItems[i,5]; //count
//inc(result);
end;
end;
end;
//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$19;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$5F;
WriteD(ObjectID);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (strtoint(Edit2.text)>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нет подходящих предметов для улучшения! Прервано!');
timer.enabled:=false;
exit;
end;
if (sumitem(ItemID)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Предметов для улучшения должно быть больше двух! Прервано!');
timer.enabled:=false;
exit;
end;

if ready then exit;

ScrollOID:=GetItem(ScrollID,3,2);//найдем OID скролла
if ScrollOID=-1 then begin
msg.Lines.Add('Кончились свитки! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали свиток ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
end;
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
if FromServer then
case pck[1] of
//......................................
#$11: begin
//debugmsg('S>C Пакет ItemListPacket #$11');
ItemList;
end;
//......................................
#$21: begin
//debugmsg('S>C Пакет InventoryUpdate #$21');
InventoryUpdate;
end;
//......................................
//Пакет ChooseInventory
#$7C: begin
if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItemEnchant(ItemID, CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нет подходящих предметов для улучшения! Прервано!');
msg.Lines.Add('Достигли MaxEnchLvl!');
timer.enabled:=false;
ready:=false;
delay(500);
RequestEnchantItem(-1);
exit;
end else begin
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true;
end;
end;
end;
#$87: begin
if readd(2)=0 then begin
msg.Lines.Add('Улучшили ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(good);
end else begin
msg.Lines.Add('Сломали ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(broken);
end;
// CurEnchLvl:=0; //начнем с начала. Расскоментировать для блессет скроллов
end;
end;
end.
<<<

Пробуйте. Пишите замечания.

[I]Добавлено через 5 минут
в этой хм я вставляю пакет с нужной заточкой...(87 09 00 00 00 00 00 00 00 00 00 00 00)
но он все равно продолжает точить дальше...
подскажите в чем ошибка у меня?

Ошибка в том, что в этом пакете нет уровня заточки, там только результат: 0 -заточил/1-сломал/2-в 0 сбросил

YssurTiger
26.01.2009, 08:20
Ошибка в том, что в этом пакете нет уровня заточки, там только результат: 0 -заточил/1-сломал/2-в 0 сбросил
ты не прав
вот мой конец скрипта
begin
if FromServer and (ConnectName=Name) and (pck = HStr('87 19 00 00 00 00 00 00 00 00 00 00 00')) then begin
timer.enabled:=false;
end;
где 19 это уровень заточки .если перевести из байтов получается 25.
на 25 спокойно останавливается.
самое главное правильно все сделать

//Автоматизация заточки предметов до необходимого уровня.
//мини-скрипт идея, доработка Shizo.
//by Xelat
const
Name='CJIADKA9'; //без этого не останавливал timer.enabled:=false;
var
timer:TTimer;
procedure Init;
begin
timer:=TTimer.Create(nil);
timer.interval:=1000;
timer.OnTimer:=@fireTimer;
timer.enabled:=true;
end;
procedure Free;
begin
timer.Free;
end;
procedure fireTimer(Sender: TObject);
begin
buf:=hstr('0C 02 30 03 10 00 00 00 00 ');скрол Ы виапон.если заточки остаются в котомке.то пакет не меняется
SendToServer;
buf:=hstr('43 4F 00 C9 A3 D2 10 ');вещь
SendToServer;
buf:=hstr('0C 02 30 03 10 00 00 00 00 ');
SendToServer;
buf:=hstr('43 4F 00 98 A4 D2 10 ');
SendToServer;
buf:=hstr('0C 02 30 03 10 00 00 00 00 ');
SendToServer;
buf:=hstr('43 4F 00 C9 A3 D2 10 ');
SendToServer;
buf:=hstr('0C 02 30 03 10 00 00 00 00 ');
SendToServer;
buf:=hstr('43 4F 00 98 A4 D2 10 ');
SendToServer;
buf:=hstr('0C 02 30 03 10 00 00 00 00 ');
SendToServer;
buf:=hstr('43 4F 00 15 A5 D2 10 ');
SendToServer;
buf:=hstr('68 A3 5F 01 00 16 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ');покупка 5 заточек
SendToServer;
end;
begin
if FromServer and (ConnectName=Name) and (pck = HStr('87 19 00 00 00 00 00 00 00 00 00 00 00')) then begin
timer.enabled:=false;
end;
end.

в пм не писать,у кого не получается точите руками и не мучайте остальных.vlineage.ru очень баганный сервер.просто нужно правильно использовать баги.

DarkMageCV
26.01.2009, 17:22
использовал твой скрипт NLObP, при его включении сразу дисконект сервера и невидит заточек и оружыя в инвентаре, прошу помощи че делать,пасиб)

Spozi
26.01.2009, 23:23
Спасибо..все замечательно точит...только одна проблема..частенько тупо зависает..но наверное это уже изза сервера

NLObP
27.01.2009, 00:31
Спасибо..все замечательно точит...только одна проблема..частенько тупо зависает..но наверное это уже изза сервера

Попробуй увеличить до 1000 или больше. Это время между заточками предметов.
timer.interval:=500; //время задержки

bloody
27.01.2009, 14:33
Привет. У меня вот такая проблемка: когда я запускаю скрипт NLObР выскакивает табличка, где по сути нужно выбрать затачиваемое оружие и точки, но когда я нажимаю на стрелочку ComboBoxItem то у меня там пусто... хотя, на сколько я понял, должен быть мой инвентарь.
ЗЫ: в списке соеденения выбрал сой ник, а так же изменил количество слотов в тексте самого скрипта, макс. точку поставил 25 более ничего не трогал...
З.Ы.Ы: скрипт что выложил YssurTiger работает...
Вот скрин. http://coderx.ru/images/attach/jpg.gif

Заранее спасибо за помощь.
ICQ 419074382

NLObP
27.01.2009, 21:58
bloody, а ты его на Грации запускаешь?

Spozi
28.01.2009, 02:58
Проблема вот в чем..это зависание появляется только когда использую блесед точи...при обычных точках все впорядке...

NLObP
28.01.2009, 03:17
Проблема вот в чем..это зависание появляется только когда использую блесед точи...при обычных точках все впорядке...

Попробуй в самом конце скрипта удалить две наклонные палочки - слэшь
в этой строке:
// CurEnchLvl:=0; //начнем с начала

salamjik
28.01.2009, 13:53
ты не прав
вот мой конец скрипта
begin
if FromServer and (ConnectName=Name) and (pck = HStr('87 19 00 00 00 00 00 00 00 00 00 00 00')) then begin
timer.enabled:=false;
end;
где 19 это уровень заточки .если перевести из байтов получается 25.
на 25 спокойно останавливается.
самое главное правильно все сделать


я ставлю 06 вместо 19 (чтоб точило до 6) 87 06 00 00 00 00 00 00 00 00 00 00 00, оно не останавливается((( пробывал разные варианты вообще не але, в чем проблема? помогите

NLObP
28.01.2009, 22:06
я ставлю 06 вместо 19 (чтоб точило до 6) 87 06 00 00 00 00 00 00 00 00 00 00 00, оно не останавливается((( пробывал разные варианты вообще не але, в чем проблема? помогите

Проверь при ручной точке, как меняются в этом пакете указанные тобой значения. Мне кажеться, что вы ошибаетесь и используете не тот пакет для проверки. Я использую пакет 11=ItemList и 21=InventoryUpdate в которых есть уровень заточки вещи.

something
28.01.2009, 23:44
Скорее всего (ConnectName=Name) не срабатывает, в самом начале скрипта ник свой напиши правильно

Spozi
29.01.2009, 02:04
нет он делает все правильно...я смотрел этот скрипт..и этот пакет ..при заточке на нем меняется только две вторые цифры..т.е заточки..они просто исчисляются по страной системе(из системы dec переводятся в hex)...у меня даже останавливалась пару раз...и еще многие ( в том числе и я в первые разы ) вставляют скрипт в правильный раздел..НО нажимают тест инит....если ты делаеш так...то оно и неостановится...если в чемто ошибаюсь поправте меня то я тоже совсем недолго с ней работаю

briz16041
29.01.2009, 03:00
Доброго времени суток!
Подскажите пожалуйста как решить проблему.
Точу одну вещь, поменял в скрипте что указано, скрипт запускается выбираю предмет все ок, ставлю галку.
Дальше выбираю скролл энчата и сразу выдается ошибка
http://s40.radikal.ru/i087/0902/e4/0e43a4c254e2.jpg (http://www.radikal.ru)

salamjik
29.01.2009, 14:43
Скорее всего (ConnectName=Name) не срабатывает, в самом начале скрипта ник свой напиши правильно

да вроде правильно все написано((

Проверь при ручной точке, как меняются в этом пакете указанные тобой значения. Мне кажеться, что вы ошибаетесь и используете не тот пакет для проверки. Я использую пакет 11=ItemList и 21=InventoryUpdate в которых есть уровень заточки вещи.

я проверял, вручную точил и сравнивал пакеты, в зависимости от уровня точки и меня ется это значение в пакете "87 02 00 00 00 00 00 00 00 00 00 00 00", подскажи может что изменить или напиши готовый пакет я попробую, заранее спасибо.

ridlle
29.01.2009, 21:05
чот у меня не робить
http://s49.radikal.ru/i123/0901/82/01ae836f945d.jpg
PS мой преведущий пост удалите

bloody
30.01.2009, 18:23
Попробуй в самом конце скрипта удалить две наклонные палочки - слэшь
в этой строке:

Да, когда убираешь тут слэшь то оно не зависает, но получается другая проблема: когда,допустим, ис 5 пух 2 пухи на +8, а те сломались, то скрипт не будет их точить пока те 3 пухи не заточатся на +8, но выходит так что, из этих 3 пух, одна +6, то она так же не заточится, пока те 2 не будут +6...вообщем выходит так, что впринципе те две пухи на +8 не точатся, потому что до них очередь не доходит...Так что луче точить с лагом. Надеюсь вы поняли весь этот каламбур что я написал. (Я имел ввиду когда точат блес точками, как работает с обычными я незнаю)

jjjjj10
31.01.2009, 02:34
у меня есть 1 вопрос. вот этот скрипт у меня(нтерлюд) хорошо работает, когда нада вовремя останавливается даж с блесами и тд. но дело все в том, что играю я на серве где минимальня точка 10 и когда пуха ломается хоть и написано в чате что заточено неудачно на 0, всеравно точка сбрасывается до 10, и после зависает и прога и клиент. можно ли исправить это чтобы например, когда точишь минимум был уже 10 и точка заного с 10 начиналась при поломке, или что то подобное сделать? заранее спасибо.

YssurTiger
31.01.2009, 05:46
Скорее всего (ConnectName=Name) не срабатывает, в самом начале скрипта ник свой напиши правильно

Ты прав,я часа 2 тупил почему у меня не останавливалось..а потом дошло что чара я то сменил а имя не сменил:D
на vlineage.ru 87 это пакет лвл заточки,
все работает прекрасно,а для других серваков нужно отлавливать пакет когда у тебя пуха заточилась.
хотелось бы спросить,как можно спалить тех кто так точит? плз в пм=)

salamjik
31.01.2009, 12:50
Писал правильно, проверял нессколько раз, нифига((((( изза чего он может не срабатывать еще? =(

Проверь при ручной точке, как меняются в этом пакете указанные тобой значения. Мне кажеться, что вы ошибаетесь и используете не тот пакет для проверки. Я использую пакет 11=ItemList и 21=InventoryUpdate в которых есть уровень заточки вещи.

А проверял, я в ручную точил выловил его,при каждой новой точке я ловил пакет и сравнивал это цисло, оно меня естя в зависимости от уровня точке все совпадает. но почему то не останавливает на этом пакете(( может не срабатывает это сравнение, уже голову сломал((((

Я использую пакет 11=ItemList и 21=InventoryUpdate в которых есть уровень заточки вещи.

а не мог бы ты его в готовом виде написать я попробую, просто я новичок в этом деле(

jjjjj10
31.01.2009, 14:23
а все разобрался, в старом скрипте заработало. просто в старом при указании хотябы пары вещей и любого количества точек, в начале точки, проверяет уровень заточки предмета что позволяет точить при поломке на 0 или 10 и тд. а в новом с панелькой этого нет поэтоиму с 1 или множеством затачиваемых вещей при поломке на 10 просто виснит:o.

NLObP
02.02.2009, 04:16
briz16041, еще раз кинь скрин ошибки.

Добавлено через 1 минуту
ridlle, попробуй на последней версии пакетхака, в нём твои предметы видно.

Добавлено через 5 минут
Скорее всего (ConnectName=Name) не срабатывает, в самом начале скрипта ник свой напиши правильно

Он там совсем не нужет, потому, что используется команда SendToServer. Удалите все его упоминания.

Добавлено через 1 минуту
А проверял, я в ручную точил выловил его,при каждой новой точке я ловил пакет и сравнивал это цисло, оно меня естя в зависимости от уровня точке все совпадает. но почему то не останавливает на этом пакете(( может не срабатывает это сравнение, уже голову сломал

Запиши в пакетхаке лог ручной точки и вышли его мне в ПМ, я посмотрю, что за пакеты идут и с какими данными.

Добавлено через 3 минуты
а не мог бы ты его в готовом виде написать я попробую, просто я новичок в этом деле

В скрипте (http://coderx.ru/showpost.php?p=22135&postcount=95) который я выложил эти пакеты используются.

gmb
07.02.2009, 11:42
Как сделать , что бы не по очереди точило , а сначала одну заточила , потом вторую?

emrik
08.02.2009, 16:42
почему после того как все оружия поломались скрипт виснет? :mad:

NLObP
09.02.2009, 01:22
Как сделать , что бы не по очереди точило , а сначала одну заточила , потом вторую?

Могу предложить только, покупать одну вещь и точить её.

Добавлено через 1 минуту
почему после того как все оружия поломались скрипт виснет? :mad:

В чём это выражается? У меня останавливается в зависимости от условий с соответствующим сообщением.

emrik
09.02.2009, 16:53
Просто после того как переломалось все оружие l2phx просто виснет и все и в игре тоже не могу пошевелится....приходится выключать прогу через диспетчер задач и потом заново заходить.... подскажи плиз :(

Zealot
11.02.2009, 11:54
У меня вот такая проблема!
http://cs1931.vkontakte.ru/u12971405/34141812/x_2b9d6c30.jpg

Жму старт и ничего непроисходит! Сервер Vlineage.ru

YssurTiger
11.02.2009, 17:37
прога просто зависает,у меня седня из ла2 выкинуло(ну сначало прога зависла)когда деньги в катомке кончились(стояло покупка заточек)
пришлось комп на 20 минут вырубить,чтоб включился,а то висел=)

DOBA
12.02.2009, 21:58
Стоит ИЛ сборка РТ 1.3. Вкл Phx,Всё сделал привильно(вписал имя, и поставил Тру) включил скрипт видно итемы, выбрал всё как надо поставил галки, нажимаю старт выбивает в логах:
Команда Старт!!!
Прервано!
и всё) но когда вместо вепона или армора ставишь соски или другою лабуду) клиент пишет 4то эту фигню зато4ить нельзя)

SkylMan
13.02.2009, 20:06
подскажите решение проблеммы. Использую l2ph 3.4.1.61 и скрипт на авто - заточку для грации.
после выбора предметов в комбоксе и запуске, показывается такая вещь:
Команда Старт!!!
Задействовали свиток ScrollID=959 ScrollOID=268563150.
и все дальше все просто стоит, точек столько же остается ну и соотвественно шмота тоже, ничего не меняется ничего не точится.

onetruezmey
16.02.2009, 00:32
1.История такая - загружаю пнх потом ла2ехе загружаеться ла2 вхожу персонажем покупаю точку и драк лук к примеру
2.Загружаю скрипт меняю нейм ,клиент на интерлюд , слоты в инвентаре на 80 ,Выбераю в комбоксах Драк лук и Точку ставлю галки всё отлично заисключением одного .
3.Нажав на Старт Получаеться ( Команда:Старт... Прервано )
4.Очень хочеться погледеть на это произведение авто точения )
Подскажи(те) :( что я нетак делаю !?

YKCYC
16.02.2009, 03:16
А на Хеллбоунде какой скрипт использовать? Вроде ля грации подходит но вещей и Свитков в комбо боксах не видно.
Если есть у кого Свежий ItemID скиньте на файлообменник плз.

ЗЫ используется l2phx.3.4.1.81, если есть свежее назовите номер версии

SkylMan
16.02.2009, 23:12
добрый вечер. Пытаюсь уже второй день разобраться с автозаточкой, помогите плиз. После запуска скрипта в окне соеденений вылетаеттакая надпись:WSA no error 10038/0. Но в комбоксе можно выбирать предметы и точки, нажимаю старт и ничего не происходит.

Slaventy
18.02.2009, 00:58
if FromServer and (ConnectName=Name) and (pck = HStr('87 1 28 00 00 00 00 00 00 00 00 00 00 ')) then begin
timer.enabled:=false;
Проблема с проверкой 16 вродибы павильно.
Просьба обяснить как ведутса подщеты в пакете..
Иногда при точке на +4 -получался такой рез "87 AF 28 00 00 00 00 00 00 00 00 00 00" Почему????

bibox
18.02.2009, 17:07
У меня вот такая проблемма - использую скрипт на заточку для Камаэля, все работет вроде бы нормально но... скрипт точит только 1 вешь и когда я ставлю что ее надо заточить на 7 он продолжает точить дальше ( В чем может быть причина?

Dimidrol34
20.02.2009, 13:44
При вводе всех данных в скрипт...скрипт сам жалуется на ID точки...что делать не подскажете?
http://s47.radikal.ru/i117/0902/9c/3aece5f0882b.jpg (http://www.radikal.ru)
Серв грация парт 2..

SkylMan
22.02.2009, 12:47
а на грацию парт 2 будет скрипт? там вроде как способ заточки сменился и тем скриптом который выложен(на парт 1 как я понял) ничего не точится

NLObP
25.02.2009, 02:10
Дальше выбираю скролл энчата и сразу выдается ошибка
Не уверен на 100% правильно. Возможно ты не выбирал в списке свиток, а сразу ставил галочку? Фича скрипта, что выбирать в списках надо обязательно вещь и свиток, а только потом ставить галочку.

Добавлено через 4 минуты
При вводе всех данных в скрипт...скрипт сам жалуется на ID точки...что делать не подскажете?


Необходимо затариться оружием, заточками.
Name='NLObP'; //Вписать сюда имя чара

Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей,
степень заточки значения не имеет.


Добавлено через 1 минуту
а на грацию парт 2 будет скрипт? там вроде как способ заточки сменился и тем скриптом который выложен(на парт 1 как я понял) ничего не точится

Лично мне и предыдущие не нужны были, поэтому придётся писать самим.

Добавлено через 16 минут
Zealot, пробуй на версии пакетхака 3.4.1.83. Если не отображается имя, то это значит надо исправлять itemsid.ini под свой сервер.

Добавлено через 4 минуты
У меня вот такая проблемма - использую скрипт на заточку для Камаэля, все работет вроде бы нормально но... скрипт точит только 1 вешь и когда я ставлю что ее надо заточить на 7 он продолжает точить дальше ( В чем может быть причина?

Для камаеля-хелбаунд-грации подойдет скрипт версии 0.8. Я не знаю в чём причина. Возможно в отличии пакетов для разных серверов. Скрипт проверялся на локальном ява сервере, вроде бы, сейчас уже не вспомню точно, от http://l2jserver.com/.

Добавлено через 16 минут
onetruezmey, DOBA, SkylMan, может вы одну вещь точите? Для скрипта надо не меньше двух, либо надо исправить условие проверки
if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь

Добавлено через 4 минуты
После запуска скрипта в окне соеденений вылетаеттакая надпись:WSA no error 10038/0.

Похоже связь рвется с сервером. Скрипт шлет на сервер пакет запрос инвентаря и видимо это не нравиться серверу. Может используешь не тот скрипт для своих хроник?

Добавлено через 5 минут
PS: Примите во внимание, что я не играю в линагу и у меня нет столько средств чтобы отлаживать скрипт на игровом сервере. Тем более я не могу проверить на различных серверах работу скрипта.

Добавлено через 2 минуты
PPS: всегда старайтесь использовать последнюю версию программы, на данный момент это 3.4.1.83, брать здесь (http://l2phx.pp.ru/arhive/)

SkylMan
25.02.2009, 14:42
NLObP, ну читать я умею)) я прочитал что вещей надо несколько, пакет хак последней версии тоже скачал, все отображается ошибка больше не вылетает но скрипт по прежнему не точит(использовал несколько версий скриптов)( так же как и у Zealota. Пишет старт.. задействован свиток.. и все... Может это от того что Part 2 стоит? и с чем следует в скрипте пошаманить если в этом проблема?

NLObP, кстате соедение с сервом не рвется, зависаний в игре не наблюдается.. точнее вообще ничего в игре не наблюдается)) чар в онлайне но действий по отношению к заточке ноль) кстате Zealot я думаю о том же говорил, оба на серве Vlineage.ru

Niksan
27.02.2009, 19:05
NLObP, А как реализовать так, что бы он точил предмет сначала обычыми точками, а потом блезовсками ? ))

KaBuKi
03.03.2009, 14:44
Вопрос следующий: что нужно подправить в скрипте на заточку с автопокупкой, если у меня не работает автопокупка?
Я вычислил смещение :

npcid.ini NpcInfo
7878=Angelina Gatekeeper NpcTypeId: 1030878
kId = 1030878-7878 = 1023000

Далее определяю:

NpcTypeId: Mysterious Woman ID:1031750 (НПС, у которого должна производиться покупка). Отсюда нахожу:

NpcObjectId=NpcTypeId-kId=1031750-1023000=8750 ( равняется значению в npcid.ini, неужели :D )

Далее подставляю значение в RoyID. Что еще нужно сделать или что я сделал не так?

Apocalipcis
09.03.2009, 06:37
Access violation at address 132346E5 in module 'l2pbx.exe'. Read of address 00000000.

Вот эта ошибка при попытке запуска скрипта.
Потом получается такое окошко как и нада только предметов нету.
Играю На Интерлюдии, всё написал правильно Ник/Интерлюд Тру/инвентарь.
Использую l2phx 3.4.1.83

Maxima
09.03.2009, 17:59
Приветсвую всех тк мой первый пост, пользуясь возможностью хочу поблагодарить модеров и всех учавствующих в этом пректрасном проекте.

Ну а теперь собственно вопрос в основном к НЛОбу ну если кто прошарит буду тоже рад ответу:

Играю на Грации евро, пользуюсь пакетхаком версии 34183 и твоим скриптом от 6.01.2009 (см код снизу) его я чуть чуть подправил, те изменил пакеты UseItem, RequestItemList и ChooseInventory так как они у меня отличаются от тех что в скрипте были, и чуток с таймингом поэксперементировал. Скрипт заработал и даже точит ровно если не много айтемов инвентаре, сейчас пытаюсь заточить 175 пух до 20 лвл. Проблема в том что:

исходная ситуация: 170 пух по +2 и +3 лвл энчанта
Такая картина: скрипт открывает точку отсылает пакет RequestEnchantItem , в окошке пишет скрипта прибавляется колво сломанных айтемов, цикл повторяется снова и снова по 80 или 100 раз, потом вдруг какбы не взначай точит одну пуху, потом этот (пустой) цикл снова повторяется, иногда скрипт просто останавливается не обрываясь, нажимаю стоп потом старт все начинается снова...
может будет полезна еще последовательность пакетов при заточке без скрипта:
c>s UseItemn (19 03 22 6A 10 00 00 00 00 )
s>c SystemMessage Типо "Выбирите предмет для улучшения"(62 2F 01 00 00 00 00 00 00)
s>c ChooseInventory (7C B3 03 00 00)
c>s RequestEnchantItem(5F 05 2E 9D 10 )
s>c EnchantResult(87 00 00 00 00 00 00 00 00 00 00 00 00 )
s>c StatusUpdate(18 E0 93 84 10 01 00 00 00 0E 00 00 00 94 59 08 00)
s>c ItemList(11 00 ...... размер Pазмер: 13533+2)в просмотре пакетов страшно просматривать ПХ зависает на 2 3 секунды
s>c UserInfo(32 .... размер 702+2)

ето фсе не пойму где здесь
InventoryUpdate, поставил в скрипте по умолчанию 21, вообще он приходит когда пуха ломается, короче стоит 21!
ЗЫ Хотя (пустой) цикл был и когда я начал точить эти пухи с лвл енчанта 0, затем дойдя до значения поломок 100 слих..м начал вроде точить каждую подряд, но подтормаживая клиент, заточив на +2 +3 завис, кнрт альт дель рулят!)

Вот код:


//Автоматизация заточки предметов до необходимого уровня by NLObP для Грации
//version 0.8 от 26.01.2009г.
program Enchant_gracia;
{************************************************* *******************************
Возможности скрипта:
--------------------
- Панель управления;
- Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим, один предмет всегда остаётся;

================================================== ==================
Работа скрипта проверялась на локальном Грация сервере
================================================== ==================

1) Необходимо затариться оружием, заточками и валерьянкой.
2) Вписать в константу Name имя своего чара.
3) Поставить количество слотов в инвентаре чара в константу maxitems.
4) Сохранить и запустить скрипт установив напротив него галочку.

Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей,
степень заточки значения не имеет.

Скрипт распространяется как есть, и я не несу ответственности за то,
что ВЫ натворили у себя, его используя.

MyICQ 402988808
************************************************** ******************************}

//............................................
//Список констант
const
Name='Щас Как Точну!'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
//-------------------------
maxitems=200; //количество слотов в инвентаре чара
debug=false; //если не хотим видеть отладочной информации

//............................................
//Список переменных
var
Item, scrl: integer;
ScrollID, ScrollOID: integer; //ScrollID скролла заточки
ItemID, ItemOID, ItemEnch: integer; //ItemID затачиваемого предмета
MaxEnchLvl: integer; //уровень заточки который требуется достичь
//ITEMs
BaseItems: array[1..maxitems, 1..12] of integer; //все предметы в инвентаре

StartTime, EndTime: TDateTime;
good, broken: integer;
ready: boolean;
timer, showinf : TTimer;
ItemCount, CurEnchLvl: integer;
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
FormMain : TForm; //Создаваемая форма
Splitter1, Splitter2 : TSplitter;
Stats, Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label1, Label2, Label3, Label4, Label12, Label13 : TLabel;
ComboBoxItem, ComboBoxScroll : TComboBox;
CheckBoxItem, CheckBoxScroll : TCheckBox;
ButtonStartEnchant, ButtonStopEnchant : TButton;
EditItemVal, EditScrollVal, EditScrollOID, EditItemOID, Edit1, Edit2 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=BaseItems[ComboBoxItem.ItemIndex+1,2];
ItemID:=BaseItems[ComboBoxItem.ItemIndex+1,3];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);

ComboBoxItem.Enabled:=false; //выключаем
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=BaseItems[ComboBoxItem.ItemIndex+1,2];
ItemID:=BaseItems[ComboBoxItem.ItemIndex+1,3];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=BaseItems[ComboBoxScroll.ItemIndex+1,2];
ScrollID:=BaseItems[ComboBoxScroll.ItemIndex+1,3];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=BaseItems[ComboBoxScroll.ItemIndex+1,2];
ScrollID:=BaseItems[ComboBoxScroll.ItemIndex+1,3];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
msg.Lines.Add('Команда Старт!!!');
timer.enabled:=true;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!!!');
timer.enabled:=false;
ready:=false;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
// MyHPID:=ExtractIDValues(ComboBoxHPotion.Items.Stri ngs[ComboBoxHPotion.ItemIndex]);
// EditHPotionVal.Text:=Inttostr(FindItem(MyHPID));
// EditHPotionOID.text:=inttostr(ItemBase2[1,1]);
end;
//......................................
//*************************************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant by NLObP v.0.8';
Result.Left := 397;
Result.Top := 233;
Result.Width := 581;
Result.Height := 205;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 573;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 443;
Stats.Top := 0;
Stats.Width := 130;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 65;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 170;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень улучшения';
Edit1.ShowHint := TRUE;
Edit1.Text := '65535';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 199;
Edit2.Top := 67;
Edit2.Width := 60;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 90;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 169;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка улучшаемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := TRUE;
ButtonStartEnchant.Hint := '';
ButtonStartEnchant.ShowHint := FALSE;
ButtonStartEnchant.Caption := 'Start';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Stop';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали свиток улучшения';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Свиток';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;
//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 90;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 169;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка свиток улучшения';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color := clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight := 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Автоматизация заточки by NLObP для Грации!');
Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=1000; //время задержки

ShowInf:=TTimer.Create(nil);
ShowInf.OnTimer:=@OnShowInfo;
ShowInf.enabled:=true;
ShowInf.interval:=1000; //время задержки

StartTime:=time;
good:=0;
broken:=0;
ready:=false;
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//.................................................. ............................
procedure Free; //Вызывается при выключении скрипта
begin
BaseItems:=nil; //нельзя так делать с массивом
ShowInf.Enabled:=false; ShowInf.Interval:=0; ShowInf.Free; ShowInf.OnTimer:=nil;
timer.Enabled:=false; timer.Interval:=0; timer.Free; timer.OnTimer:=nil;

StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
end;
//.................................................. ............................
procedure ShowInfo;
var
i: integer;
begin
stats.Lines.Clear;
stats.Lines.Add('Имя чара :'+Name);
stats.Lines.Add('Время старта :'+TimeToStr(starttime));
stats.Lines.Add('Время ловли :'+TimeToStr(time-starttime));
stats.Lines.Add('Улучшили: '+IntToStr(good));
stats.Lines.Add('Сломали: '+IntToStr(broken));
end;
//......................................
//************************************************** *************
procedure OnShowInfo(Sender: TObject); //выводим в форму
begin
ShowInfo;
end;
//.................................................. ............................
//послать сообщение в чат
//use: SendMessage(msg);
procedure SendMessage(msg:string); //отправка системных сообщений клиенту
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(Name);
end;
//.................................................. ............................
procedure debugMsg(msg: string);
begin
if debug then begin
sendMSG(msg);
SendMessage(msg);
end;
end;
//.................................................. ............................
procedure ItemList;
{Создаем базу Items}
//11=ItemList:h(ShowWindow)h(ListSize:Loop.01.0021)h (ItemType1)d(ObjectID)
// d(ItemID:Get.Func01)d(LocationSlot)d(Count)h(ItemT ype2)h(CustomType1)
// h(isEquipped)d(BodyPart)h(EnchantLevel)h(CustType2 )d(AugmentationID)
// d(Mana)d(AttackAttrElement)d(AttackAttrElementVal) d(DefAttrFire)
// d(DefAttrWater)d(DefAttrWind)d(DefAttrEarth)d(DefA ttrHoly)d(DefAttrUnholy)
var
i, j, k: integer;
ListCount: integer;
begin
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
for i:=1 to maxitems do
if (i<=ListCount) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); //Count
BaseItems[i,6]:=ReadH(j); //ItemType2
BaseItems[i,7]:=ReadH(j); //CustomType1
BaseItems[i,8]:=ReadH(j); //isEquipped
BaseItems[i,9]:=ReadD(j); //BodyPart
BaseItems[i,10]:=ReadH(j); //EnchantLevel
BaseItems[i,11]:=ReadH(j); //CustType2
BaseItems[i,12]:=ReadD(j); //AugmentationID
//debugmsg('OID='+inttostr(BaseItems[i,2])+' ID='+inttostr(BaseItems[i,3]));
inc(j,40);
end else for k:=1 to 12 do BaseItems[i,k]:=0; // забиваем нулями
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(BaseItems[i,3])]); //записываем название вещей из инвентаря
except;
//msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(BaseItems[i,3])+' в itemsid.ini');
end
end;
except;
//msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
//msg.Lines.Add(inttostr(BaseItems[i,3]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
//.................................................. ............................
procedure InventoryUpdate; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, k, ListCount, UpdType : integer;
ItemType1, ObjectID, ItemID, LocationSlot, Count, ItemType2, CustomType1,
isEquipped, BodyPart, EnchantLevel, CustType2, AugmentationID :integer;
additem : boolean;
begin
additem:=true;
ListCount:=ReadH(2); //количество итемов
// debugmsg('ListCount='+inttostr(ListCount));
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
ItemType1:=ReadH(j);
ObjectID:=ReadD(j);
ItemID:=ReadD(j);
LocationSlot:=ReadD(j);
Count:=ReadD(j);
ItemType2:=ReadH(j);
CustomType1:=ReadH(j);
isEquipped:=ReadH(j);
BodyPart:=ReadD(j);
EnchantLevel:=ReadH(j);
CustType2:=ReadH(j);
AugmentationID:=ReadD(j);
case UpdType of
1: k:=0; //добавлен новый предмет
2: k:=ObjectID; //изменен предмет в инвентаре
3: begin //удален
for ii:=1 to maxitems do
if (BaseItems[ii,2]=ObjectID) then begin
//debugmsg('удаляем OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3]));
for k:=1 to 12 do BaseItems[ii,k]:=0;
break;
end;
end;
end;
for ii:=1 to maxitems do begin
if (BaseItems[ii,2]=k) then begin
BaseItems[ii,1]:=ItemType1;
//BaseItems[ii,2]:=ObjectID;
BaseItems[ii,3]:=ItemID;
BaseItems[ii,4]:=LocationSlot;
BaseItems[ii,5]:=Count;
BaseItems[ii,6]:=ItemType2;
BaseItems[ii,7]:=CustomType1;
BaseItems[ii,8]:=isEquipped;
BaseItems[ii,9]:=BodyPart;
BaseItems[ii,10]:=EnchantLevel;
BaseItems[ii,11]:=CustType2;
BaseItems[ii,12]:=AugmentationID;
//debugmsg('доб/изм OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3]));
break;
end;
end;
inc(j,38);
end;
end;
//.................................................. ............................
function GetItem(ID, FieldIn, FieldOut : integer): integer;
{GetInv(по чему будем искать, номер того по чему будем искать, номер того что надо найти)
где:
ID - искомый код;
FieldIn - по какому полю ищем;
FieldOut - какое поле возвращаем;
1=ItemType1; 2=ObjectID;3=ItemID;4=LocationSlot;5=Count;6=ItemT ype2;7=CustomType1;
8=isEquipped;9=BodyPart;10=EnchantLevel;11=CustTyp e2;12=AugmentationID;
ex1: GetInv(6408,2,1) - вернет ObjectID свадебного платья, если онное лежит в
инвентаре, иначе вернет -1
ex2: GetInv(6408,2,8) - вернет уровень заточки первого попавшегося в инвентаре
свадебного платья, если свадебного платья нет, то вернет -1
}
var
i: integer;
begin
for i:=1 to maxitems do
if (BaseItems[i,FieldIn]=ID) then begin
Result:=BaseItems[i,FieldOut];
//debugmsg('Нашли='+inttostr(result));
exit;
end;
Result:=-1;
end;
//.................................................. ............................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItemEnchant(item,lvl:integer) : integer;
var
i : integer;
begin
//ничего не нашли
result:=0;
for i:=1 to maxitems do
if (BaseItems[i,3]=item) and (BaseItems[i,10]=lvl) then begin
ItemEnch:=BaseItems[i,10];
Result:=BaseItems[i,2];
//debugmsg('Нашли='+inttostr(result));
exit;
end;
// Result:=-1;
end;
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i : integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to maxitems do begin
if (BaseItems[i,3]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
// msg.Lines.Add('i='+inttostr(i));
result:=result+BaseItems[i,5]; //count
//inc(result);
end;
end;
end;
//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$19;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$5F;
WriteD(ObjectID);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (strtoint(Edit2.text)>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нет подходящих предметов для улучшения! Прервано!');
timer.enabled:=false;
exit;
end;
if (sumitem(ItemID)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Предметов для улучшения должно быть больше двух! Прервано!');
timer.enabled:=false;
exit;
end;

if ready then exit;

ScrollOID:=GetItem(ScrollID,3,2);//найдем OID скролла
if ScrollOID=-1 then begin
msg.Lines.Add('Кончились свитки! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали свиток ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
end;
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
if FromServer then
case pck[1] of
//......................................
#$11: begin
//debugmsg('S>C Пакет ItemListPacket #$11');
ItemList;
end;
//......................................
#$21: begin
//debugmsg('S>C Пакет InventoryUpdate #$21');
InventoryUpdate;
end;
//......................................
//Пакет ChooseInventory
#$7C: begin
if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItemEnchant(ItemID, CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нет подходящих предметов для улучшения! Прервано!');
msg.Lines.Add('Достигли MaxEnchLvl!');
timer.enabled:=false;
ready:=false;
delay(500);
RequestEnchantItem(-1);
exit;
end else begin
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true;
end;
end;
end;
#$87: begin
if readd(2)=0 then begin
msg.Lines.Add('Улучшили ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(good);
end else begin
msg.Lines.Add('Сломали ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(broken);
end;
// CurEnchLvl:=0; //начнем с начала. Расскоментировать для блессет скроллов
end;
end;
end.

RinZo
10.03.2009, 03:02
скрипт прикрутил.. все работает Спасибо! но вот проблема...
на сервере стоит мин заточка +10 и ниже этого не скидывается! когда скриптом точим то мин значение поднимается... а итемы все заканчиваются(точим блесами, только они в ГМ шопе), скрипт зависает вместе с l2phx... поделитесь мыслями как это исправить?
слотов 280, заточки блесы

Дими
12.03.2009, 16:41
Вот ребята столкнулся с такой проблемой.
1 сервер игры l2evolution.net
2 программы юзал от l2phx.3.4.1.61 и до l2phx.3.4.1.83
3 Проблема когда запускаю скрипт на заточку выдает ошибку Access violation at address 132ABF00 in module 'l2pbx.exe'. Read of address 00000000. не в одной из етих программ не видно моего чара и немогу выбрать в комбо боксе ни точки ни оружие там все поля пустые. Как было написано ранше дето в постах не похожие ItemsID.ini де достать ItemsID.ini или как его совместить с тем что на сервере.

Плиз ребята помогите сутки сижу голову ломаю на серве макс точка 1к и того нуна заточить 15 итемов а ето 15 тысяч точек в ручную ето нереально )) да еше Гейм гвард убил:confused:

NLObP
14.03.2009, 05:48
когда запускаю скрипт на заточку выдает ошибку Access violation at address 132ABF00 in module 'l2pbx.exe'. Read of address 00000000

Про
Name='Щас Как Точну!'; //Вписать сюда имя чара?
не забыл?

Добавлено через 1 минуту
на сервере стоит мин заточка +10 и ниже этого не скидывается

Попробуйте эту строчку
// CurEnchLvl:=0; //начнем с начала. Расскоментировать для блессет скроллов
заменить на
CurEnchLvl:=10; //начнем с начала. Расскоментировать для блессет скроллов

Добавлено через 3 минуты
Access violation at address 132346E5 in module 'l2pbx.exe'. Read of address 00000000.

Вот эта ошибка при попытке запуска скрипта.
Потом получается такое окошко как и нада только предметов нету.
Играю На Интерлюдии, всё написал правильно Ник/Интерлюд Тру/инвентарь.
Использую l2phx 3.4.1.83

Такая ошибка сразу наводит на мысль, что не соответствует имя в переменной Name, тому чару для которого запущен скрипт. Ещё, в переменную Name надо писать ник с соблюдением регистра, так как в игре.

Добавлено через 3 минуты
NLObP, А как реализовать так, что бы он точил предмет сначала обычыми точками, а потом блезовсками ? ))

Писать новый скрипт, где проверять когда и какими свитками точить.

Добавлено через 23 минуты
>>>
//Автоматизация заточки предметов до необходимого уровня by NLObP
//version 0.9 от 30.01.2009г.
program Enchant_gracia;
{************************************************* *******************************
Возможности скрипта:
--------------------
- Панель управления;
- Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим, один предмет всегда остаётся;

================================================== ==================
Работа скрипта проверялась на локальном Грация сервере
================================================== ==================

Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара

Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей,
степень заточки значения не имеет.

Скрипт распространяется как есть, и я не несу ответственности за то,
что ВЫ натворили у себя, его используя.

MyICQ 402988808
************************************************** ******************************}

//............................................
//Список констант
const
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
//-------------------------
maxitems=250; //количество слотов в инвентаре чара
debug=false; //если не хотим видеть отладочной информации

//............................................
//Список переменных
var
Item, scrl: integer;
ScrollID, ScrollOID: integer; //ScrollID скролла заточки
ItemID, ItemOID, ItemEnch: integer; //ItemID затачиваемого предмета
MaxEnchLvl: integer; //уровень заточки который требуется достичь
//ITEMs
BaseItems: array[1..maxitems, 1..12] of integer; //все предметы в инвентаре

StartTime, EndTime: TDateTime;
good, broken: integer;
ready: boolean;
timer, showinf : TTimer;
ItemCount, CurEnchLvl: integer;
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
FormMain : TForm; //Создаваемая форма
Splitter1, Splitter2 : TSplitter;
Stats, Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label1, Label2, Label3, Label4, Label12, Label13 : TLabel;
ComboBoxItem, ComboBoxScroll : TComboBox;
CheckBoxItem, CheckBoxScroll : TCheckBox;
ButtonStartEnchant, ButtonStopEnchant : TButton;
EditItemVal, EditScrollVal, EditScrollOID, EditItemOID, Edit1, Edit2 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=BaseItems[ComboBoxItem.ItemIndex+1,2];
ItemID:=BaseItems[ComboBoxItem.ItemIndex+1,3];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);

ComboBoxItem.Enabled:=false; //выключаем
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=BaseItems[ComboBoxItem.ItemIndex+1,2];
ItemID:=BaseItems[ComboBoxItem.ItemIndex+1,3];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=BaseItems[ComboBoxScroll.ItemIndex+1,2];
ScrollID:=BaseItems[ComboBoxScroll.ItemIndex+1,3];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=BaseItems[ComboBoxScroll.ItemIndex+1,2];
ScrollID:=BaseItems[ComboBoxScroll.ItemIndex+1,3];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
msg.Lines.Add('Команда Старт!!!');
timer.enabled:=true;
ButtonStartEnchant.Enabled := false;
ButtonStopEnchant.Enabled := TRUE;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!!!');
timer.enabled:=false;
ready:=false;
ButtonStartEnchant.Enabled := true;
ButtonStopEnchant.Enabled := false;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
// MyHPID:=ExtractIDValues(ComboBoxHPotion.Items.Stri ngs[ComboBoxHPotion.ItemIndex]);
// EditHPotionVal.Text:=Inttostr(FindItem(MyHPID));
// EditHPotionOID.text:=inttostr(ItemBase2[1,1]);
end;
//......................................
//*************************************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant by NLObP v.0.9';
Result.Left := 397;
Result.Top := 233;
Result.Width := 581;
Result.Height := 205;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 573;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 443;
Stats.Top := 0;
Stats.Width := 130;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 65;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 170;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень улучшения';
Edit1.ShowHint := TRUE;
Edit1.Text := '65535';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 199;
Edit2.Top := 67;
Edit2.Width := 60;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 90;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 169;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка улучшаемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := TRUE;
ButtonStartEnchant.Hint := '';
ButtonStartEnchant.ShowHint := FALSE;
ButtonStartEnchant.Caption := 'Start';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Stop';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали свиток улучшения';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Свиток';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;
//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 90;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 169;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка свиток улучшения';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color := clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight := 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Автоматизация заточки by NLObP для Грации!');
Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=500; //время задержки

ShowInf:=TTimer.Create(nil);
ShowInf.OnTimer:=@OnShowInfo;
ShowInf.enabled:=true;
ShowInf.interval:=1000; //время задержки

StartTime:=time;
good:=0;
broken:=0;
ready:=false;
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;

ButtonStartEnchant.Enabled := true;
ButtonStopEnchant.Enabled := false;

end;
//.................................................. ............................
procedure Free; //Вызывается при выключении скрипта
begin
BaseItems:=nil; //нельзя так делать с массивом
ShowInf.Enabled:=false; ShowInf.Interval:=0; ShowInf.Free; ShowInf.OnTimer:=nil;
timer.Enabled:=false; timer.Interval:=0; timer.Free; timer.OnTimer:=nil;

StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
end;
//.................................................. ............................
procedure ShowInfo;
var
i: integer;
begin
stats.Lines.Clear;
stats.Lines.Add('Имя чара :'+Name);
stats.Lines.Add('Время старта :'+TimeToStr(starttime));
stats.Lines.Add('Время работы :'+TimeToStr(time-starttime));
stats.Lines.Add('Улучшили: '+IntToStr(good));
stats.Lines.Add('Сломали: '+IntToStr(broken));
end;
//......................................
//************************************************** *************
procedure OnShowInfo(Sender: TObject); //выводим в форму
begin
ShowInfo;
end;
//.................................................. ............................
//послать сообщение в чат
//use: SendMessage(msg);
procedure SendMessage(msg:string); //отправка системных сообщений клиенту
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(Name);
end;
//.................................................. ............................
procedure debugMsg(msg: string);
begin
if debug then begin
sendMSG(msg);
SendMessage(msg);
end;
end;
//.................................................. ............................
procedure ItemList;
{Создаем базу Items}
//11=ItemList:h(ShowWindow)h(ListSize:Loop.01.0021)h (ItemType1)d(ObjectID)
// d(ItemID:Get.Func01)d(LocationSlot)d(Count)h(ItemT ype2)h(CustomType1)
// h(isEquipped)d(BodyPart)h(EnchantLevel)h(CustType2 )d(AugmentationID)
// d(Mana)d(AttackAttrElement)d(AttackAttrElementVal) d(DefAttrFire)
// d(DefAttrWater)d(DefAttrWind)d(DefAttrEarth)d(DefA ttrHoly)d(DefAttrUnholy)
var
i, j, k: integer;
ListCount: integer;
begin
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
for i:=1 to maxitems do
if (i<=ListCount) then begin
BaseItems:=ReadH(j); //ItemType1
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); //Count
BaseItems[i,6]:=ReadH(j); //ItemType2
BaseItems[i,7]:=ReadH(j); //CustomType1
BaseItems[i,8]:=ReadH(j); //isEquipped
BaseItems[i,9]:=ReadD(j); //BodyPart
BaseItems[i,10]:=ReadH(j); //EnchantLevel
BaseItems[i,11]:=ReadH(j); //CustType2
BaseItems[i,12]:=ReadD(j); //AugmentationID
//debugmsg('OID='+inttostr(BaseItems[i,2])+' ID='+inttostr(BaseItems[i,3]));
inc(j,40);
end else for k:=1 to 12 do BaseItems[i,k]:=0; // забиваем нулями
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(BaseItems[i,3])]); //записываем название вещей из инвентаря
except;
//msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(BaseItems[i,3])+' в itemsid.ini');
end
end;
except;
//msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
//msg.Lines.Add(inttostr(BaseItems[i,3]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
//.................................................. ............................
procedure InventoryUpdate; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, k, ListCount, UpdType : integer;
ItemType1, ObjectID, ItemID, LocationSlot, Count, ItemType2, CustomType1,
isEquipped, BodyPart, EnchantLevel, CustType2, AugmentationID :integer;
additem : boolean;
begin
additem:=true;
ListCount:=ReadH(2); //количество итемов
// debugmsg('ListCount='+inttostr(ListCount));
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
ItemType1:=ReadH(j);
ObjectID:=ReadD(j);
ItemID:=ReadD(j);
LocationSlot:=ReadD(j);
Count:=ReadD(j);
ItemType2:=ReadH(j);
CustomType1:=ReadH(j);
isEquipped:=ReadH(j);
BodyPart:=ReadD(j);
EnchantLevel:=ReadH(j);
CustType2:=ReadH(j);
AugmentationID:=ReadD(j);
case UpdType of
1: k:=0; //добавлен новый предмет
2: k:=ObjectID; //изменен предмет в инвентаре
3: begin //удален
for ii:=1 to maxitems do
if (BaseItems[ii,2]=ObjectID) then begin
//debugmsg('удаляем OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3]));
for k:=1 to 12 do BaseItems[ii,k]:=0;
break;
end;
end;
end;
for ii:=1 to maxitems do begin
if (BaseItems[ii,2]=k) then begin
BaseItems[ii,1]:=ItemType1;
//BaseItems[ii,2]:=ObjectID;
BaseItems[ii,3]:=ItemID;
BaseItems[ii,4]:=LocationSlot;
BaseItems[ii,5]:=Count;
BaseItems[ii,6]:=ItemType2;
BaseItems[ii,7]:=CustomType1;
BaseItems[ii,8]:=isEquipped;
BaseItems[ii,9]:=BodyPart;
BaseItems[ii,10]:=EnchantLevel;
BaseItems[ii,11]:=CustType2;
BaseItems[ii,12]:=AugmentationID;
//debugmsg('доб/изм OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3]));
break;
end;
end;
inc(j,38);
end;
end;
//.................................................. ............................
function GetItem(ID, FieldIn, FieldOut : integer): integer;
{GetInv(что ищем, № поля где ищем, № поля что возвращать)
где:
ID - искомый код;
FieldIn - по какому полю ищем;
FieldOut - какое поле возвращаем;
1=ItemType1; 2=ObjectID;3=ItemID;4=LocationSlot;5=Count;6=ItemT ype2;7=CustomType1;
8=isEquipped;9=BodyPart;10=EnchantLevel;11=CustTyp e2;12=AugmentationID;
ex1: GetInv(6408,2,1) - вернет ObjectID свадебного платья, если онное лежит в
инвентаре, иначе вернет -1
ex2: GetInv(6408,2,8) - вернет уровень заточки первого попавшегося в инвентаре
свадебного платья, если свадебного платья нет, то вернет -1
}
var
i: integer;
begin
for i:=1 to maxitems do
if (BaseItems[i,FieldIn]=ID) then begin
Result:=BaseItems[i,FieldOut];
//debugmsg('Нашли='+inttostr(result));
exit;
end;
Result:=-1;
end;
//.................................................. ............................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItemEnchant(item,lvl:integer) : integer;
var
i : integer;
begin
//ничего не нашли
result:=0;
for i:=1 to maxitems do
if (BaseItems[i,3]=item) and (BaseItems[i,10]=lvl) then begin
ItemEnch:=BaseItems[i,10];
Result:=BaseItems[i,2];
//debugmsg('Нашли='+inttostr(result));
exit;
end;
// Result:=-1;
end;
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i : integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to maxitems do begin
if (BaseItems[i,3]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
// msg.Lines.Add('i='+inttostr(i));
result:=result+BaseItems[i,5]; //count
//inc(result);
end;
end;
end;
//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$19;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$5F;
WriteD(ObjectID);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (strtoint(Edit2.text)>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нет подходящих предметов для улучшения! Прервано!');
ButtonStartEnchant.Enabled := true;
ButtonStopEnchant.Enabled := false;
timer.enabled:=false;
exit;
end;
if (sumitem(ItemID)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
ButtonStartEnchant.Enabled := true;
msg.Lines.Add('Предметов для улучшения должно быть больше двух! Прервано!');
ButtonStartEnchant.Enabled := true;
ButtonStopEnchant.Enabled := false;
timer.enabled:=false;
exit;
end;

if ready then exit;

ScrollOID:=GetItem(ScrollID,3,2);//найдем OID скролла
if ScrollOID=-1 then begin
msg.Lines.Add('Кончились свитки! Прервано!');
ButtonStartEnchant.Enabled := true;
ButtonStopEnchant.Enabled := false;
timer.enabled:=false;
exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали свиток ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
end;
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
if FromServer then
case pck[1] of
//......................................
#$11: begin
//debugmsg('S>C Пакет ItemListPacket #$11');
ItemList;
end;
//......................................
#$21: begin
//debugmsg('S>C Пакет InventoryUpdate #$21');
InventoryUpdate;
end;
//......................................
//Пакет ChooseInventory
#$7C: begin
if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItemEnchant(ItemID, CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нет подходящих предметов для улучшения! Прервано!');
msg.Lines.Add('Достигли MaxEnchLvl!');
timer.enabled:=false;
ready:=false;
delay(500);
RequestEnchantItem(-1);
exit;
end else begin
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true;
end;
end;
end;
#$87: begin
if readd(2)=0 then begin
msg.Lines.Add('Улучшили ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(good);
end else begin
msg.Lines.Add('Сломали ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(broken);
end;
// CurEnchLvl:=0; //начнем с начала
end;
end;
end.
<<<

[I]Добавлено через 7 минут
c>s UseItemn (19 03 22 6A 10 00 00 00 00 )
s>c SystemMessage Типо "Выбирите предмет для улучшения"(62 2F 01 00 00 00 00 00 00)
s>c ChooseInventory (7C B3 03 00 00)
c>s RequestEnchantItem(5F 05 2E 9D 10 )
s>c EnchantResult(87 00 00 00 00 00 00 00 00 00 00 00 00 )
s>c StatusUpdate(18 E0 93 84 10 01 00 00 00 0E 00 00 00 94 59 08 00)
s>c ItemList(11 00 ...... размер Pазмер: 13533+2)в просмотре пакетов страшно просматривать ПХ зависает на 2 3 секунды
s>c UserInfo(32 .... размер 702+2)

Именно эти пакеты и используются в скрипте - 19, 7C, 5F, 87 (использую, но может быть не правильно? 0 - прошла точка, иначе - не прошла), 11, (21 как вспомогательный, в скрипте не нужен)

Добавлено через 5 минут
Такая картина: скрипт открывает точку отсылает пакет RequestEnchantItem , в окошке пишет скрипта прибавляется колво сломанных айтемов, цикл повторяется снова и снова по 80 или 100 раз, потом вдруг какбы не взначай точит одну пуху, потом этот (пустой) цикл снова повторяется, иногда скрипт просто останавливается не обрываясь, нажимаю стоп потом старт все начинается снова...

Лог скинь, который скрипт в окошке выводит. Что за сервер, хроники?

GMaster
15.03.2009, 01:07
http://img7.imageshack.us/img7/2253/whatidonewrongaaa.jpg
:confused: :confused: :confused: в комбобоксе нет вещей, что я сделал не так?

X30n
15.03.2009, 16:01
Проблема такая: с утра все было норм скрипт работал... часика через 2 что случилось и больше скрипт не работал... пишет:
Автоматизация заточки by NLObP!
Команда Старт!!!
Прервано!

в чем может быть проблема, помогите плз!

менял чаров, переустонавливал пнх, в скрипте ник написан норм...

Maxima
15.03.2009, 19:37
Про
Name='Щас Как Точну!'; //Вписать сюда имя чара?
не забыл?

Имя стоит(другое:)), иначе бы сразу ошибка выскакивала

Именно эти пакеты и используются в скрипте - 19, 7C, 5F, 87 (использую, но может быть не правильно? 0 - прошла точка, иначе - не прошла), 11, (21 как вспомогательный, в скрипте не нужен)
да, так и есть. У меня вначале запарка с чем то была, я думал в пакетах, начал исправлять оказывается наисправлялся, что пришел к тем же что у тебя и стояли(недавано только с твоим оригинальным скриптом сверил) :D .

Лог скинь, который скрипт в окошке выводит. Что за сервер, хроники?
Играю на сервере с 12 протоколом, Грация часть вторая со всеми фишками. Вот ип сервака (8/5.14.219.81) называется (Des.pe.rion):D

вот лог
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938463 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938463 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938463 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938463 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Улучшили ItemID=10449 ItemOID=279938463 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Улучшили ItemID=10449 ItemOID=279938465 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938466 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938466 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938466 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938466 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938466 ItemEnchLvl=5
Задействовали свиток ScrollID=959 ScrollOID=279450213
Сломали ItemID=10449 ItemOID=279938466 ItemEnchLvl=5

Когда точил это оружие с нуля все в целом было нормально, потом остановил скрипт на пяти(макс. безопасный энчант) поставил задержку вместо 500 на 1500. В итоге начало проскакивать пишет будто сломалось , а на самом деле просто проскакивает оружие не точа не ломая, в общем как я писал сверху. Зтем поменял тайминг снова на 500, затем начало точить нормально. С чем это может быть связано?

Изменял я задержку здесь

timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=500; //âðåìÿ çàäåðæêè


Еще вопрос, между чем изменяется задержка в этом месте и есть ли еще возможность изменить задержку в скрипте, например между заточкой оружия или открытием точки и подтверждением заточки?
Спасибо заранее!:)

Забыл напомнить, последний скрипт который ты здесь выклал от 30.01.09

RinZo
16.03.2009, 03:33
Сообщение от RinZo
на сервере стоит мин заточка +10 и ниже этого не скидывается

Попробуйте эту строчку
Код:
// CurEnchLvl:=0; //начнем с начала. Расскоментировать для блессет скроллов
заменить на
CurEnchLvl:=10; //начнем с начала. Расскоментировать для блессет скроллов

поэксперементировал со всеми 3мя строчками. результатов не дало. всеравно зависание идет и приходится закрывать пакетхак.
результат незначительный получился в строчке
ready:=false;
timer.enabled:=true; //пока в тесте отключаем
при значение
ready:=false;
timer.enabled:=false; //пока в тесте отключаем
скрипт после каждой воткнутой заточки останавливается и нажимаю еще раз Start и втыкается следующая заточка, добился этим только точения 1 кнопкой... а хотелось бы полной автоматизации процесса =)
сервер Chaos-world.ru x1200 вот там я эксперементирую со скриптом.
зарание спасибо за помощь ;)

Nord
17.03.2009, 04:57
1.История такая - загружаю пнх потом ла2ехе загружаеться ла2 вхожу персонажем покупаю точку и драк лук к примеру
2.Загружаю скрипт меняю нейм ,клиент на интерлюд , слоты в инвентаре на 80 ,Выбераю в комбоксах Драк лук и Точку ставлю галки всё отлично заисключением одного .
3.Нажав на Старт Получаеться ( Команда:Старт... Прервано )
4.Очень хочеться погледеть на это произведение авто точения )
Подскажи(те) :( что я нетак делаю !?

аналогичнейшая проблема...
Старт!
Прервано.

Ума не приложу в чем косяк... Подскажите, кто больше меня понимает в этом скрипте...

OneD
28.03.2009, 18:55
Нельзя ли сделать чтоб скрипт не точил все по +1, потом всё по +2, и т.д, а брал 1 предмет, точил его пока не сломается(или до макс точки) и потом брался за следующий. А то когда точит с 5 на 6 25 раз подряд и всё в сейф, сразу немножко раздражаешся)

Может вы можете обосновать свою точку зрения про то что так шанс выше, но лично мне кажется что к рандому 1 к 3, плюсуется ещё и "рандом" скрипта.

3xdimon
02.04.2009, 18:22
Меня вот что интереусет:
Когда заточка удачна то оно идет дальше затачиватся до тех пор пока не выполнятся условия...
А когда заточка неудачна - то куда идет дальше процес, на какую строку кода?

И какой код нужно ввести, чтоб перед началом заточки (после того как заточка прошла неудачно) - оно проверяло текущий уровень заточки?
Т.к. там где сбрасывается до 10, это очень важно...

LBEST
02.04.2009, 22:15
Variant or safe array index out of bounds.
Как с этим бороца помогите плиз!!!:(

NLObP
03.04.2009, 12:58
Меня вот что интереусет:
Когда заточка удачна то оно идет дальше затачиватся до тех пор пока не выполнятся условия...
А когда заточка неудачна - то куда идет дальше процес, на какую строку кода?

И какой код нужно ввести, чтоб перед началом заточки (после того как заточка прошла неудачно) - оно проверяло текущий уровень заточки?
Т.к. там где сбрасывается до 10, это очень важно...

Напиши алгоритм, по которому ты предполагаешь, что должно точить, тогда я могу что-то в коде менять.

Смотрим скрипт для Грации (другие я не буду рассматривать). Сейчас алгоритм такой:
кратко – точим все предметы по очереди, пока не останется один или достигнем требуемого уровня.
подробнее –
По таймеру, раз в N мс, выполняем действия:

1. Проверяем, текущий уровень заточки больше или равен требуемому уровню заточки?
2. да, выход к п.п. 15
3. Проверяем, осталась одна вещь?
4. да, выход к п.п. 15
5. Проверяем флаг «готовы затачивать» на true
6. да, выход к п.п. 15
7. Проверяем, остались свитки?
8. нет, выход к п.п. 15
9. Задействовали свиток
10. устанавливаем флаг «готовы затачивать» в true
11. выход

В основном теле программы:
1. Пришел пакет $7C = ChooseInventory?
2. нет, выход к п.п. 9
3. Есть предмет для улучшения, с текущим уровнем заточки?
4. нет, «текущий уровень» + 1, к п.п. 3
5. Проверяем, текущий уровень заточки больше или равен требуемому уровню заточки?
6. да, отменяем использование свитка заточки (шлем соответствующий пакет), выход к п.п. 9
7. Шлем пакет на заточку предмета
8. устанавливаем флаг «готовы затачивать» в false
9. Выход

1. Пришел пакет $87 = EnchantResult?
2. нет, выход к п.п. 8
3. Проверяем второй байт пакета
4. Равен 0?
5. да, улучшение прошло, выход к п.п. 8
6. Равен 1?
7. да, улучшение не прошло, выход к п.п. 8
8. Выход

Добавлено через 3 минуты
Variant or safe array index out of bounds.
Как с этим бороца помогите плиз!!!:(

Была в старых версиях скрипта, связана с тем, что itemsid.ini из комплекта пакетхака не соответствует данным клиента. Приведи в соответствие свой itemsid.ini.

3xdimon
03.04.2009, 13:40
Напиши алгоритм, по которому ты предполагаешь, что должно точить, тогда я могу что-то в коде менять.
Я щас пытаюсь сделать под Interlude -> точу одну шмотку ->при неудачно оно сбрасывает на 10+.
Вот он:

by NLObP
для С4 и Интерлюдии можно взять здесь (http://coderx.ru/downloads.php?do=file&id=24)

Хочу сделать чтоб когда:
>>3. Проверяем второй байт пакета
>>4. Равен 0?
>>5. да, улучшение прошло, выход к п.п. 8
>>6. Равен 1?
>>7. да, улучшение не прошло, выход к п.п. 8

То если неудачно то оно шло к п.п. 8, проверяло сколько сейчас заточено, и потом начинало опять точить...

Или выкидывало на самое начало и сново проверяло сколько заточено, сколько точек и т.д. и затем начинало точить как будто старт нажал.


А на интерлюде пойдет скрипт грации???
А то на интерлюде слегка отличается он...

NLObP
03.04.2009, 14:32
Попробуй эту часть

#$87: begin
if readd(2)=0 then begin
msg.Lines.Add('Улучшили ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(good);
end else begin
msg.Lines.Add('Сломали ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(broken);
end;
// CurEnchLvl:=0; //начнем с начала. Расскоментировать для блессет скроллов
end;
end;

заменить на эту

#$87: begin
if readd(2)=0 then begin
msg.Lines.Add('Улучшили ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(good);
end else begin
msg.Lines.Add('Сломали ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(broken);
CurEnchLvl:=10; //выставляем текущий уровень при фэйле и при точке блесседами
end;
end;
end;

3xdimon
03.04.2009, 18:01
Все)
Совместил
#$87: begin
if readd(2)=0 then begin
msg.Lines.Add('Улучшили ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(good);
end else begin
msg.Lines.Add('Сломали ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(broken);
CurEnchLvl:=10; //выставляем текущий уровень при фэйле и при точке блесседами
end;
end;
end;

С интерлюдовским кодом, еще кучу всякой фигни поставлял) Терь не виснет) И Если надо заточить на 20, то надо вводить максимальную заточку 19) т.е. вводить на 1 меньше)

DzumoHu4
04.04.2009, 00:20
Все)
Совместил
#$87: begin
if readd(2)=0 then begin
msg.Lines.Add('Улучшили ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(good);
end else begin
msg.Lines.Add('Сломали ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(broken);
CurEnchLvl:=10; //выставляем текущий уровень при фэйле и при точке блесседами
end;
end;
end;

С интерлюдовским кодом, еще кучу всякой фигни поставлял) Терь не виснет) И Если надо заточить на 20, то надо вводить максимальную заточку 19) т.е. вводить на 1 меньше)
Будь добра опубликуй исправленный код.Очень нужно

3xdimon
04.04.2009, 23:15
//Автоматизация заточки предметов до необходимого уровня by NLObP
//version 0.7 от 20.07.2008г.
program Enchant;
{************************************************* *******************************
Возможности скрипта:
--------------------
0.1
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим, один предмет всегда остаётся;
0.2
+ исправлен выбор названий предметов из инвентаря;
+ небольшая правка кода;
0.3
+ Проверено на theAbyss (все предметы инвентаря чара видит);
+ исправлена ошибка кода выбора скроллов;
+ исправлена ошибка подсчета суммы предметов;
0.4
+ специально для Miler проверено на La2Titan (затачивал Mantikore Skin Shirt до +7);
+ исправлена процедура InventoryUpdate;
+ изменена логика затачивания;
+ заготовка покупки заточек/вещей;
0.5
+ проверено на L2Fantasy;
+ добавлена проверка, если заточка сбрасывается в 0 без поломки вещи;
+ добавлен код, если надо точить одну вещь (опционально);
0.6
+ изменил выборку ItemId;
0.7
+ исправлено смещение в CreateItemBase для С4, спасибо Mulder

================================================== ==================
Работа скрипта проверялась на локальном Интерлюда сервере,
для С4 не проверялась и поддерживаться далее не будет.
================================================== ==================

Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false

Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.

Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя.

MyICQ 402988808
************************************************** ******************************}

//............................................
//Список констант
const
Name='Name'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
//-------------------------
max=80; //количество слотов в инвентаре чара

//............................................
//Список переменных
var
Item, scrl:integer;
ScrollID, ScrollOID:integer; //ScrollID скролла заточки
ItemID,ItemOID:integer; //ItemID затачиваемого предмета
MaxEnchLvl:integer; //уровень заточки который требуется достичь
ItemBase: array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
ready, add : boolean;
timer : TTimer;
ItemCount, CurEnchLvl: integer;
SocialID : integer; // вспомогательная
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
FormMain : TForm; //Создаваемая форма
Splitter1 : TSplitter;
Splitter2 : TSplitter;
Stats : TMemo;
Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label2 : TLabel;
Label4 : TLabel;
Label12 : TLabel;
Label13 : TLabel;
CheckBoxItem : TCheckBox;
ComboBoxItem : TComboBox;
ButtonStartEnchant : TButton;
ButtonStopEnchant : TButton;
CheckBoxScroll : TCheckBox;
ComboBoxScroll : TComboBox;
EditItemVal : TEdit;
EditScrollVal : TEdit;
EditScrollOID : TEdit;
EditItemOID : TEdit;
Label1 : TLabel;
Label3 : TLabel;
Edit1 : TEdit;
Edit2 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);

ComboBoxItem.Enabled:=false; //выключаем
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
msg.Lines.Add('Команда Старт!!!');
timer.enabled:=true;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!!!');
timer.enabled:=false;
ready:=false;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
// MyHPID:=ExtractIDValues(ComboBoxHPotion.Items.Stri ngs[ComboBoxHPotion.ItemIndex]);
// EditHPotionVal.Text:=Inttostr(FindItem(MyHPID));
// EditHPotionOID.text:=inttostr(ItemBase2[1,1]);
end;
//......................................
//*************************************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant by NLObP v.0.7';
Result.Left := 397;
Result.Top := 233;
Result.Width := 581;
Result.Height := 205;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 573;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 443;
Stats.Top := 0;
Stats.Width := 130;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 65;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 170;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень заточки';
Edit1.ShowHint := TRUE;
Edit1.Text := '65535';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 199;
Edit2.Top := 67;
Edit2.Width := 60;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 90;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 169;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка затачиваемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := TRUE;
ButtonStartEnchant.Hint := '';
ButtonStartEnchant.ShowHint := FALSE;
ButtonStartEnchant.Caption := 'Start';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Stop';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали скролл заточки';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Заточка';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;
//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 90;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 169;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка скролл заточки';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color := clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight := 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Автоматизация заточки by NLObP!');
Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=1000; //время задержки
ready:=false;
add:=false;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//......................................
//************************************************** ****************************
procedure Free; //Вызывается при выключении скрипта
begin
// ItemBase:=nil; //нельзя так делать с массивом
timer.Free;
StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
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
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)d(Augment)d(--)
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
ListCount:=ReadH(j); //количество итемов не должно превышать max!
//if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
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
// msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if interlude then inc(j,12) else inc(j,4);
//msg.Lines.Add('j='+inttostr(j));
end;
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(ItemBase[2,i])+' в itemsid.ini');
end
end;
except;
msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
msg.Lines.Add(inttostr(ItemBase[2,i]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
//......................................
//************************************************** ****************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(8)
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, ItemOID, ItemID, ItemCount, ListCount, UpdType, Itemlvl: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for ii:=1 to ListCount do begin
UpdType:=ReadH(j);
//inc(j,2);
ReadH(j); //ItemType1
ItemOID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
itemCount:=ReadD(j); //кол-во
inc(j,10);
Itemlvl:=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]:=ItemOID;
ItemBase[2,i]:=ItemID;
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Добавили предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
add:=true;
end;
end;
end;
//изменен
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Изменяем параметры предмета!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
end;
end;
end;
//удален
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
msg.Lines.Add('Удаляем предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
if interlude then inc(j,10) else inc(j,2);
//msg.Lines.Add('j='+inttostr(j));
end;
end;
//......................................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItem(item:integer; lvl:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
//находим подходящий предмет по ItemID
if (ItemBase[2,i]=item) and (ItemBase[4,i]=lvl) then begin
//если нашли, то возвращаем ObjectID предмета
result:=ItemBase[1,i]; // itemOID
ItemCount:=ItemBase[3,i];
//Itemlvl:=ItemBase[4,i];
//msg.Lines.Add('<item='+inttostr(item)+' lvl='+inttostr(lvl)+'> i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
exit;
end;
end;
//ничего не нашли
result:=0;
end;
//......................................
//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//......................................
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i : integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to max do begin
if (ItemBase[2,i]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
// msg.Lines.Add('i='+inttostr(i));
result:=result+ItemBase[3,i];
//inc(result);
end;
end;
end;
//......................................
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServerEx(Name);
//*********** использовать чит с петом ************************
{ buf:=#$8B;
WriteD(ObjectID);
writed(1);
SendToServerEx(Name);
} //***********
end;
//......................................
{//************************************************** *************
function ExtractIDValues(sData: string): integer;
var
s: string;
i,j: integer;
begin
i:=0;
s:=sData;
i:=pos('=',s);
if i>=0 then
s:=copy(s,1,i-1);
try
result:=strtoint(s);
except
result:=0;
end;
end;
//............................................}
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нечего точить! Прервано!');
timer.enabled:=false;
exit;
end;
if (sumitem(ItemID)<=0) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Прервано!');
timer.enabled:=false;
exit;
end;
ScrollOID:=GetItem(ScrollID,0);
if ScrollOID=0 then begin
msg.Lines.Add('Нет заточки! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
// delay(1000);
// RequestEnchantItem(Item);
// delay(1000);
//************************************************
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(Item));
// end;
end;
//......................................
//************************************************** *************
// Вся торговля здесь!!!
//************************************************** *************
{procedure OnTrade1(Sender: TObject);
begin
case trade of
//-------------------------------------------------
//покупаем у Misc Trader из массива TradeBuyItem1
//-------------------------------------------------
100: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
//-------------------------------------------------
//покупаем у Armor Trader из массива TradeBuyItem2
//-------------------------------------------------
200: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
end;
end;
end;
}//......................................
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
//покупка состоит из следующих шагов:
//1. таргет на продавце, пауза, снова таргет c04=Action, c04=Action
//2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
//3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
//4. приходит s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemTyp e1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d( ItemBodyPart)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)
//************************************************** **************************
{ if ReadyToBuy and (FishermanOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//после того как мы взяли в таргет продавца приходит этот пакет
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if ReadD(2)=FishermanOID then begin
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
delay(1000);
RequestByPassToServer(getbuylist);
msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (sell)');
end;
end;
//после выбора пункта - продажа, приходит этот пакет
//s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemTyp e1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d( ItemBodyPart)
#$11: begin
msg.Lines.Add('S>Пакет BuyList #$11');
ListID:=ReadD(6); //запоминаем, он все время разный
msg.Lines.Add('ListID='+inttostr(ListID));
//шлем запрос на продажу
//1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(C ount)
msg.Lines.Add('C>Пакет RequestBuyItem #$1F');
//продадим первый из списка
msg.Lines.Add('Item: ID:'+IntToStr(TradeBuyItem[Trd])+' Count:'+IntToStr(NeedBuy));
delay(1000);
RequestBuyItem(TradeBuyItem[Trd],NeedBuy);
ReadyToBuy:=false;
end;
end;
end;
end;
} //......................................
//************************************************** **************************
if FromServer then
case pck[1] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27: InventoryUpdate; //Обновление базы
//......................................
//Пакет ChooseInventory
#$6F: if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItem(ItemID,CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true; //пока в тесте отключаем (вкл. после заточки предмета)
end;


#$81: begin
if readd(2)=0 then begin
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true;
end else begin
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
CurEnchLvl:=10; //выставляем текущий уровень при фэйле и при точке блесседами
end;
end;
end;
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Чаво тачить? Заточено!!');
timer.enabled:=false;
exit;
end;
end;




{#$81: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
end;}
end.





Сразу говорю могут выбивать ошибки, просто нажимать ОК и все)
Вводить нужное число заточек но меньше на 1...
т.е. если надо на 25, ставить 24.

Сделал как понимал) Т.к. разбираюсь тока с С++
Если что то не так или какая то фигня можеш подправить)

DzumoHu4
05.04.2009, 12:47
//Автоматизация заточки предметов до необходимого уровня by NLObP
//version 0.7 от 20.07.2008г.
program Enchant;
{************************************************* *******************************
Возможности скрипта:
--------------------
0.1
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим, один предмет всегда остаётся;
0.2
+ исправлен выбор названий предметов из инвентаря;
+ небольшая правка кода;
0.3
+ Проверено на theAbyss (все предметы инвентаря чара видит);
+ исправлена ошибка кода выбора скроллов;
+ исправлена ошибка подсчета суммы предметов;
0.4
+ специально для Miler проверено на La2Titan (затачивал Mantikore Skin Shirt до +7);
+ исправлена процедура InventoryUpdate;
+ изменена логика затачивания;
+ заготовка покупки заточек/вещей;
0.5
+ проверено на L2Fantasy;
+ добавлена проверка, если заточка сбрасывается в 0 без поломки вещи;
+ добавлен код, если надо точить одну вещь (опционально);
0.6
+ изменил выборку ItemId;
0.7
+ исправлено смещение в CreateItemBase для С4, спасибо Mulder

================================================== ==================
Работа скрипта проверялась на локальном Интерлюда сервере,
для С4 не проверялась и поддерживаться далее не будет.
================================================== ==================

Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false

Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.

Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя.

MyICQ 402988808
************************************************** ******************************}

//............................................
//Список констант
const
Name='Name'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
//-------------------------
max=80; //количество слотов в инвентаре чара

//............................................
//Список переменных
var
Item, scrl:integer;
ScrollID, ScrollOID:integer; //ScrollID скролла заточки
ItemID,ItemOID:integer; //ItemID затачиваемого предмета
MaxEnchLvl:integer; //уровень заточки который требуется достичь
ItemBase: array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
ready, add : boolean;
timer : TTimer;
ItemCount, CurEnchLvl: integer;
SocialID : integer; // вспомогательная
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
FormMain : TForm; //Создаваемая форма
Splitter1 : TSplitter;
Splitter2 : TSplitter;
Stats : TMemo;
Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label2 : TLabel;
Label4 : TLabel;
Label12 : TLabel;
Label13 : TLabel;
CheckBoxItem : TCheckBox;
ComboBoxItem : TComboBox;
ButtonStartEnchant : TButton;
ButtonStopEnchant : TButton;
CheckBoxScroll : TCheckBox;
ComboBoxScroll : TComboBox;
EditItemVal : TEdit;
EditScrollVal : TEdit;
EditScrollOID : TEdit;
EditItemOID : TEdit;
Label1 : TLabel;
Label3 : TLabel;
Edit1 : TEdit;
Edit2 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);

ComboBoxItem.Enabled:=false; //выключаем
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
msg.Lines.Add('Команда Старт!!!');
timer.enabled:=true;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!!!');
timer.enabled:=false;
ready:=false;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
// MyHPID:=ExtractIDValues(ComboBoxHPotion.Items.Stri ngs[ComboBoxHPotion.ItemIndex]);
// EditHPotionVal.Text:=Inttostr(FindItem(MyHPID));
// EditHPotionOID.text:=inttostr(ItemBase2[1,1]);
end;
//......................................
//*************************************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant by NLObP v.0.7';
Result.Left := 397;
Result.Top := 233;
Result.Width := 581;
Result.Height := 205;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 573;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 443;
Stats.Top := 0;
Stats.Width := 130;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 65;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 170;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень заточки';
Edit1.ShowHint := TRUE;
Edit1.Text := '65535';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 199;
Edit2.Top := 67;
Edit2.Width := 60;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 90;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 169;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка затачиваемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := TRUE;
ButtonStartEnchant.Hint := '';
ButtonStartEnchant.ShowHint := FALSE;
ButtonStartEnchant.Caption := 'Start';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Stop';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали скролл заточки';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Заточка';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;
//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 90;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 169;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка скролл заточки';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color := clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight := 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Автоматизация заточки by NLObP!');
Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=1000; //время задержки
ready:=false;
add:=false;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//......................................
//************************************************** ****************************
procedure Free; //Вызывается при выключении скрипта
begin
// ItemBase:=nil; //нельзя так делать с массивом
timer.Free;
StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
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
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)d(Augment)d(--)
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
ListCount:=ReadH(j); //количество итемов не должно превышать max!
//if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
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
// msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if interlude then inc(j,12) else inc(j,4);
//msg.Lines.Add('j='+inttostr(j));
end;
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(ItemBase[2,i])+' в itemsid.ini');
end
end;
except;
msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
msg.Lines.Add(inttostr(ItemBase[2,i]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
//......................................
//************************************************** ****************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(8)
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, ItemOID, ItemID, ItemCount, ListCount, UpdType, Itemlvl: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for ii:=1 to ListCount do begin
UpdType:=ReadH(j);
//inc(j,2);
ReadH(j); //ItemType1
ItemOID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
itemCount:=ReadD(j); //кол-во
inc(j,10);
Itemlvl:=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]:=ItemOID;
ItemBase[2,i]:=ItemID;
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Добавили предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
add:=true;
end;
end;
end;
//изменен
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Изменяем параметры предмета!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
end;
end;
end;
//удален
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
msg.Lines.Add('Удаляем предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
if interlude then inc(j,10) else inc(j,2);
//msg.Lines.Add('j='+inttostr(j));
end;
end;
//......................................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItem(item:integer; lvl:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
//находим подходящий предмет по ItemID
if (ItemBase[2,i]=item) and (ItemBase[4,i]=lvl) then begin
//если нашли, то возвращаем ObjectID предмета
result:=ItemBase[1,i]; // itemOID
ItemCount:=ItemBase[3,i];
//Itemlvl:=ItemBase[4,i];
//msg.Lines.Add('<item='+inttostr(item)+' lvl='+inttostr(lvl)+'> i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
exit;
end;
end;
//ничего не нашли
result:=0;
end;
//......................................
//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//......................................
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i : integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to max do begin
if (ItemBase[2,i]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
// msg.Lines.Add('i='+inttostr(i));
result:=result+ItemBase[3,i];
//inc(result);
end;
end;
end;
//......................................
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServerEx(Name);
//*********** использовать чит с петом ************************
{ buf:=#$8B;
WriteD(ObjectID);
writed(1);
SendToServerEx(Name);
} //***********
end;
//......................................
{//************************************************** *************
function ExtractIDValues(sData: string): integer;
var
s: string;
i,j: integer;
begin
i:=0;
s:=sData;
i:=pos('=',s);
if i>=0 then
s:=copy(s,1,i-1);
try
result:=strtoint(s);
except
result:=0;
end;
end;
//............................................}
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нечего точить! Прервано!');
timer.enabled:=false;
exit;
end;
if (sumitem(ItemID)<=0) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Прервано!');
timer.enabled:=false;
exit;
end;
ScrollOID:=GetItem(ScrollID,0);
if ScrollOID=0 then begin
msg.Lines.Add('Нет заточки! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
// delay(1000);
// RequestEnchantItem(Item);
// delay(1000);
//************************************************
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(Item));
// end;
end;
//......................................
//************************************************** *************
// Вся торговля здесь!!!
//************************************************** *************
{procedure OnTrade1(Sender: TObject);
begin
case trade of
//-------------------------------------------------
//покупаем у Misc Trader из массива TradeBuyItem1
//-------------------------------------------------
100: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
//-------------------------------------------------
//покупаем у Armor Trader из массива TradeBuyItem2
//-------------------------------------------------
200: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
end;
end;
end;
}//......................................
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
//покупка состоит из следующих шагов:
//1. таргет на продавце, пауза, снова таргет c04=Action, c04=Action
//2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
//3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
//4. приходит s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemTyp e1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d( ItemBodyPart)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)
//************************************************** **************************
{ if ReadyToBuy and (FishermanOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//после того как мы взяли в таргет продавца приходит этот пакет
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if ReadD(2)=FishermanOID then begin
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
delay(1000);
RequestByPassToServer(getbuylist);
msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (sell)');
end;
end;
//после выбора пункта - продажа, приходит этот пакет
//s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemTyp e1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d( ItemBodyPart)
#$11: begin
msg.Lines.Add('S>Пакет BuyList #$11');
ListID:=ReadD(6); //запоминаем, он все время разный
msg.Lines.Add('ListID='+inttostr(ListID));
//шлем запрос на продажу
//1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(C ount)
msg.Lines.Add('C>Пакет RequestBuyItem #$1F');
//продадим первый из списка
msg.Lines.Add('Item: ID:'+IntToStr(TradeBuyItem[Trd])+' Count:'+IntToStr(NeedBuy));
delay(1000);
RequestBuyItem(TradeBuyItem[Trd],NeedBuy);
ReadyToBuy:=false;
end;
end;
end;
end;
} //......................................
//************************************************** **************************
if FromServer then
case pck[1] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27: InventoryUpdate; //Обновление базы
//......................................
//Пакет ChooseInventory
#$6F: if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItem(ItemID,CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true; //пока в тесте отключаем (вкл. после заточки предмета)
end;


#$81: begin
if readd(2)=0 then begin
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true;
end else begin
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
CurEnchLvl:=10; //выставляем текущий уровень при фэйле и при точке блесседами
end;
end;
end;
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Чаво тачить? Заточено!!');
timer.enabled:=false;
exit;
end;
end;




{#$81: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
end;}
end.





Сразу говорю могут выбивать ошибки, просто нажимать ОК и все)
Вводить нужное число заточек но меньше на 1...
т.е. если надо на 25, ставить 24.

Сделал как понимал) Т.к. разбираюсь тока с С++
Если что то не так или какая то фигня можеш подправить)

Нет я имел в виду исправленый Interludовский код, уже дожился до такого ппц.
Авто кликер клацает по старту)Скрипт выходит полуавтоматический)

NLObP
05.04.2009, 22:34
Нет я имел в виду исправленый Interludовский код

Он его и выложил - жми строку "Вот оно".

SkaWe
06.04.2009, 10:56
играю на сервере vlineage.com
со скриптом в приницпе разобрался... выбираю оружие, точку. ставлю макс лвл точки, жму старт и пишет прервано... много чего уже перепробывал, нифига не помогло. может кто подскажет что сделать нужно?

SkaWe
06.04.2009, 10:58
i=5 ItemOID=269819590 ItemID=1345 ItemKol=1898 ItemLVL=0
Команда Старт!!!
Прервано!

3xdimon
07.04.2009, 10:46
i=5 ItemOID=269819590 ItemID=1345 ItemKol=1898 ItemLVL=0
Команда Старт!!!
Прервано!

Там есть одно место, где надо указывать или 1 пуху точеш или от 2-х...
У тебя чуствуется там осталось что точить от 2-х предметов.

Попробуй поменять вот эту строку:


if (sumitem(ItemID)<=1) then begin



на вот такую


if (sumitem(ItemID)<=0) then begin

bestar
09.04.2009, 01:17
Помогите плиз что я делаю не так скажите и если есть у каво та норм рабочий скрипт для vlineage.ru то дайте сорри за оффтоп как бы=) если там защита скажите тоже плиз
http://s49.radikal.ru/i125/0904/1e/122eecbe87bb.jpg

rexx
11.04.2009, 21:32
вопрос такого плана, юзаю на камаэле скрипт, все точится, только скрипт неправильно определяет уровень заточки пухи, которую точим, вместо нее показывает itemID заточки кол-во и уровень заточки определяет как 0 все время. и все пухи до бесконечности получается точит, хотя и выставляю макс.значение маленькое.помогите разобраться.скрипт юзаю "by Breadfan
Вот скрипт переделанный под камаель."
Скачать файл скрин.jpg (http://dump.ru/file/2436303)

Tara$
13.04.2009, 21:14
Народ, ответьте пожалуйста, а реально сделать такое, что при неудачной заточке пушка не будет обнулятся и не сгорит, а останется такой, какой была до последнего энчанта?:) :) ("ДА" или "НЕТ") если возможно ====> отпишите)
P.S. Пасяб ;)

NLObP
14.04.2009, 17:11
Народ, ответьте пожалуйста, а реально сделать такое, что при неудачной заточке пушка не будет обнулятся и не сгорит, а останется такой, какой была до последнего энчанта?:) :) ("ДА" или "НЕТ") если возможно ====> отпишите)
P.S. Пасяб ;)

IMHO, нет, если только не блессед скролл.

korp
14.04.2009, 22:54
У мну чёт скрипт не хочет пахать в версии 3.5.1.100 - появляеться окошко и сразу изчезает.
Как исправить?

adrenalin
15.04.2009, 02:40
У мну маленька проблема скрип все пашет только точит один раз и дальше не точит что делать?

Fagi
16.04.2009, 03:50
Болшое спасибо за скрипт. Все работает, только вот невижу итемы которые хочу точить, приходится годать.
Это случайно не связоно с итемсдб.ини? Я искал повсудю не как немогу найти. Я только начял пользаватся пх, пож неругайте :(

kasmm
16.04.2009, 05:17
2 NLObP
Хотел воспользоваться вашим скриптом, возникла проблемка, не отображается список вещей. Как я понял, ItemsID.ini не соответствует тому, который используется сервером. В связи с этим вопрос- как можно его составить самому? При пользовании поиском, данного разъяснения не нашел.

Auromy
19.04.2009, 01:51
Аналогичная проблемка получается.. уже неделю пытаюсь запустить скриптик... дошел до такой проблемы: http://smages.com/i/1a/30/1a30fdaf5d0b81e37751109450ac7428.jpg
Раньше было хуже, пакеты не видел и тп.
Грация парт 2

NLObP
19.04.2009, 19:07
Auromy, тебе скрипт сообщает "itemsid.ini не найден!"

Исправь это место
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;


на это

ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('.\settings\itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;

Auromy
19.04.2009, 20:39
http://smages.com/i/f9/80/f98068f84b03847a0f1668a577577b9a.jpg
Блин мне наверно нужно застрелить :eek:
Поменял, запустил.. итемов не видит...
Может ItemsID.ini нужно другое? Под грацию 2 или под мой сервер...
Вообще не понимаю теперь что не так.

NLObP
19.04.2009, 23:35
Поменял, запустил.. итемов не видит...
Может ItemsID.ini нужно другое? Под грацию 2 или под мой сервер...
Вообще не понимаю теперь что не так.

Вообще то нужно. То что в комплекте с пакетхаком от руоффа.
Но судя по скрину у тебя не определяется инвентарь. Либо ID пакетов изменились, либо пакет инвентаря не приходит при старте скрипта. Инвентарь открывается автоматически или нет при запуске скрипта?

Auromy
20.04.2009, 00:07
Щас проверил, как скрипт включаю инвентарь не открывается автоматов.
Щас в пакетах посмотрел 0х11 itemlist открывается, все просматривается, все расписывается что лежит.
Проблема видать в определении инвенторя..

korp
20.04.2009, 01:43
А как сделать чтоб без Name пахал скрипт?

QaK
20.04.2009, 14:09
А как сделать чтоб без Name пахал скрипт?а смысл?

NLObP
20.04.2009, 15:10
А как сделать чтоб без Name пахал скрипт?
Меняем все
SendToClientEx(Name);
на
SendToClient;
и
SendToServerEx(Name);
на
SendToServer;
еще
if (ConnectName=Name) and FromClient then begin
на
if FromClient then begin

if (ConnectName=Name) and FromServer then begin
на
if FromServer then begin
Правда на работоспособность скрипта не повлияет. Это всё нужно для одновременной работы нескольких скриптов для нескольких чаров.

Nextye
27.04.2009, 01:14
Здравствуйте)Вроде бы как бы всё работает,точит,н бывает тупо прекращает точить,раза 2-3 точит,остановился)открыл инвентарь юзанул точку,продолжило)вытащил точку на быстрый запуск,сделал макрос через задержку в 1с,точит раз 6-7)хотелось бы узнать в чём проблема,
так как 6-7 раз всёравно маловато)хотелось бы поболее=\


Огромное спасибо NloBp,точу конечно намного быстрей других,но хотелось бы чтоб продолжало дальше,таймеры вроде бы пробавал,вроде не то)

NLObP
27.04.2009, 14:22
Здравствуйте)Вроде бы как бы всё работает,точит,н бывает тупо прекращает точить,раза 2-3 точит,остановился)открыл инвентарь юзанул точку,продолжило)вытащил точку на быстрый запуск,сделал макрос через задержку в 1с,точит раз 6-7)хотелось бы узнать в чём проблема,
так как 6-7 раз всёравно маловато)хотелось бы поболее=\

Я думаю в особенностях серваков и скорости прохождения пакетов в тракте сервер-пакетхах-клиент. Ведь стоит не успеть обработать нужный пакет и все встаёт колом. Наверное тонкий тюнинг с задержками поможет. Может быть и в алгоритме ошибка.

ЗЫЖ Похожая проблема в скрипте рыбалки. Посылаем пакет взять в руки удочку/оружие, а клиент не берет, или оружие сняли, а пакетхак думает, что нет. Мучаюсь, пока не решил, как исправить.

Auromy
28.04.2009, 01:25
Да поддерживаю, просто попробуй в частях скрипта на успешную, не успешную заточку вписать delay(50) с таймером поэкспериментируй.
Жаль у меня так он и не заработал...

Nextye
29.04.2009, 01:15
Эх всётаки дело было в таймерах,поставил 650 и работает всё отлично)Закупаюсь точками и пухами и ... валерьянкой=\
Биг спс создателем и помощникам создателя ч0тк0г0 скрипта)

F1rst
29.04.2009, 20:08
а скрипт работает если сам прокси не подключается к серверу?

вот что появляется когда ставлю или убираю галочку!
Access violation at address 00552AED in module 'l2pbx.exe'. Read of address 00000000.

Вписал всё как было указано, поставил галочку и появилась ошибка сперва о том что itemsid.ini не найден! я заменил! в этой части скрипта какраз есть эта строка! и ошибка всё равно остаётся!
пс ошибка выделена жирным шрифтом!


ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('.\settings\itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//.................................................. ............................
procedure Free; //Вызывается при выключении скрипта
begin
BaseItems:=nil; //NLObP:нельзя так делать с массивом //alexteam: а зачем над ним вообще производить операции в онфрее ? лишнее. 2NLObP насколько помниться в пакскрипте вариант используется. оно то присвоиться без ошибки, по идее.. но зачем.. ?..
ShowInf.Enabled:=false; //alexteam:лишнее
ShowInf.Interval:=0; //alexteam:лишнее
ShowInf.Free; //alexteam:этого достаточно
ShowInf.OnTimer:=nil; //alexteam:лишнее. и вообще ? нафига ? особенно после фрии ?.. обьект уже уничтожен. обращение к полю несуществующего объекта = acess violation.


StringList.Clear; //alexteam: StringList.destroy; и очистит и убьет объект. после этого никаких обращений к StringList. ибо опять же аксес виолейшин.
ItemsName.Clear;//alexteam: ItemsName.destroy; тожесамое.

SELLER
10.05.2009, 01:55
Разобрался в проблеме скрипта где ошибка на ItemLVL=0 (не видит уровень заточки и точит бесконечно) (камаэль) by Breadfan
Она появляется в случае если точишь оружие Блесс точками. Если точить обычными то все норм.
Есть ли какая то возможность исправить это?

Denis63RUS
12.05.2009, 19:31
Всем привет, пользуюсь скриптом by Breadfan для заточки, сервер камель ХБ+. У меня этот скрипт работает странно, иногда всё прекрасно, как должен, а иногда неопределяет уровень заточки. Например ДК шапки он точил нормально, а ДКм перчи начал точить по одной т.е. +1,+2,+3, сломал, потом пишет в системном окне игры: "выберите предмет для заточки", в логе программы идут те же самые строчки, т.е. я так понимаю как и в случае SELLER, неопределяется лвл заточки, но если посмотреть лог полностью, то выводит лвл заточки при формировании базы инвентаря правильно. Если кто нить понял что у меня творится, и знает где покопать подскажите плиз.

v0ltag3
04.07.2009, 01:14
Пробуем для ГФ, тестировалось на яве от L2JTW

если NLObP, ты против, то удали :)

Сделал я минимально: он получает итемлист, точит и останавливается когда нужно :)

v0ltag3
20.07.2009, 12:00
Вчера нашёл пару свободных часов и довёл его до ума.

Протестировал на 3 серверах - работало везде. В среднем на один итем уходит 3 секунды, ибо в последних сборках стоит проверка и, если будет точить быстрее - бан.

Планирую сделать точку блессом с n-ого уровня, но времени нету

ps если на вашем сервере не работает - ссылочку в пм :)

enjoy.

kallifan
28.07.2009, 04:46
люди у меня при нажатии на галочку Предмет или Свиток вылазит ошибка Could not convert variant of type (Null) into type (Integer).
што делать?(

v0ltag3
29.07.2009, 13:31
скачать l2phx.3.5.11.118

EnD1
02.08.2009, 19:18
Автоматизация заточки by NLObP!
Команда Старт!!!
Прервано!
Команда Старт!!!
Прервано!
Команда Старт!!!
Прервано!
с чем связано?

Gurg
02.08.2009, 20:49
Скрипт совсем не видет вещи - при его включении инвентарь открывается, но в комбобоксе итемов все равно не видно. В самом скрипте менял только имя чара. В чем может быть проблема?

NLObP
02.08.2009, 21:56
Автоматизация заточки by NLObP!
Команда Старт!!!
Прервано!
Команда Старт!!!
Прервано!
Команда Старт!!!
Прервано!
с чем связано?

Скрипт требует не менее двух одинаковых вещей для их заточки. Ещё, этот скрипт для обычных заточек.

Добавлено через 3 минуты
Скрипт совсем не видет вещи - при его включении инвентарь открывается, но в комбобоксе итемов все равно не видно. В самом скрипте менял только имя чара. В чем может быть проблема?

В разных хрониках разный формат пакетов, поэтому может неправильно определяться инвентарь. Нужно править скрипт.

Может быть ещё и не подходит файл itemid.ini из комплекта пакетхака содержащий описание и ай-ди предметов. Нужно дописать в файл недостающие предметы.

Black_Wolf
15.08.2009, 01:39
Всем привет, пользуюсь скриптом by Breadfan для заточки, сервер камель ХБ+. У меня этот скрипт работает странно, иногда всё прекрасно, как должен, а иногда неопределяет уровень заточки. Например ДК шапки он точил нормально, а ДКм перчи начал точить по одной т.е. +1,+2,+3, сломал, потом пишет в системном окне игры: "выберите предмет для заточки", в логе программы идут те же самые строчки, т.е. я так понимаю как и в случае SELLER, неопределяется лвл заточки, но если посмотреть лог полностью, то выводит лвл заточки при формировании базы инвентаря правильно. Если кто нить понял что у меня творится, и знает где покопать подскажите плиз.

Аналогичная проблема. Только наоборот. Перчатки точились последовательно, а дк шлёмы точились по одному. (то есть
точило до то как сломает, активировало точку и посылало пакет
на уже сломанную вещ) :(

Acdsee
15.08.2009, 09:16
Вчера нашёл пару свободных часов и довёл его до ума.

Протестировал на 3 серверах - работало везде. В среднем на один итем уходит 3 секунды, ибо в последних сборках стоит проверка и, если будет точить быстрее - бан.

Планирую сделать точку блессом с n-ого уровня, но времени нету

ps если на вашем сервере не работает - ссылочку в пм :)

enjoy.

Не запускается скрипт что Ваш, что уважаемого NLObP"а
При попытке запустить выделяет красным SendMSG(msg);
Пробовал менять SendMSG(msg); на SendMSG2(msg); не помогает все равно жалуется на SendMSG2(msg); В чем причина?

Roches
16.08.2009, 09:01
Доброго времени суток. В общем, перечитал 19 страниц темы, но ответа на свой вопрос так и не нашел...
Суть проблемы: играю на сервере L2rx.com (не приймите за рекламу), хроники ХеллБаунд. Перепробовал 0.8 и 0.9 версии программы автоматизации заточки используя пакет хак версии 3.5.11, так и 3.4.1- нигде нехотело видеть содержимое инвентаря: либо пустые поля, либо какой-то бред (неправильно распознает вещи). Файл ItemsId редактировал, добавляя туда ид недостающих вещей. После двух дней практики решил попробовать скрипт "breadfan_enchant" для Kamael. Наконец добился того, что он четко определяет вещь, скролл и их кол-во в инвентаре. Нажимаю кнопку "СТАРТ", и, как видно с скриншота, в логе скрипта пишеться про задействование скролла, а вещь не точиться, тоесть ничего не происходит (это видно даже из системного окошка чата).
Прошу Вас помочь разобраться с этой неувязкой. Буду очень благодарен! :)

NLObP
17.08.2009, 01:12
Не запускается скрипт что Ваш, что уважаемого NLObP"а
При попытке запустить выделяет красным SendMSG(msg);
Пробовал менять SendMSG(msg); на SendMSG2(msg); не помогает все равно жалуется на SendMSG2(msg); В чем причина?

Надо найти в скрипте все вхождения SendMSG и переименовать, например в SendMSG2 (воспользуйся функцией replace text в пакетхаке ctrl+r)

Добавлено через 5 минут
Доброго времени суток. В общем, перечитал 19 страниц темы, но ответа на свой вопрос так и не нашел...
Суть проблемы: играю на сервере L2rx.com (не приймите за рекламу), хроники ХеллБаунд. Перепробовал 0.8 и 0.9 версии программы автоматизации заточки используя пакет хак версии 3.5.11, так и 3.4.1- нигде нехотело видеть содержимое инвентаря: либо пустые поля, либо какой-то бред (неправильно распознает вещи). Файл ItemsId редактировал, добавляя туда ид недостающих вещей. После двух дней практики решил попробовать скрипт "breadfan_enchant" для Kamael. Наконец добился того, что он четко определяет вещь, скролл и их кол-во в инвентаре. Нажимаю кнопку "СТАРТ", и, как видно с скриншота, в логе скрипта пишеться про задействование скролла, а вещь не точиться, тоесть ничего не происходит (это видно даже из системного окошка чата).
Прошу Вас помочь разобраться с этой неувязкой. Буду очень благодарен! :)

Разные хроники - разный формат пакетов. Тем более разные серваки со своими замутами. Плюс, возможно, неправильно закодирован алгоритм заточки. Совет, разберись сам в алгоритме заточки и напиши (исправь готовый) свой скрипт, именно под свой сервер.

Shadow
18.08.2009, 22:17
2 NLObP
Приветствую =)
Тот скрипт что от Breadfan, без начала program и const, и вообще в кучу свалено вместе с моим. В итоге там два раза Begin и End.
//nlobp: видимо попортил при редактировании поста. Исправил.

2 All
Если будет время, доработаю свой вариант скрипта под Хелбаунд.

oNly^^
30.08.2009, 04:26
Доброго времени суток , если у когото есть или же не сложно зделать скрипт на интерлюд чтоб точилось не по принципу 1 точка на 1 пуху, и так по очереди по 1 накидывалось а точила 1 пуху ломалась и перехадила на 2... и конечноже если доточилась к примеру до 15 остоновилась за ранее блогодарен

WhatTheUp
30.08.2009, 05:18
Можно сделать чтобі скрипт точил именно одну вещь не так что 2- ве вещи или оружия и делает типо 1-1 , 2-2 только на 2-ва оружия , а на одно сразу. если кто может переделать выложите тут заранее спасибо большое.

mor
30.08.2009, 15:22
Доброго времени суток. Играю на сервер l2rx.com Hellbound. Использую для заточки нескольких одинаковых пух следующий скрипт:

credo_enchant - расположенный на 1-ой странице

Проблема в том что ограничение на максимальную заточку не работает - скрипт точит бесконечно, пока не сломает пуху и начинает точить ее заного (точу блессед точками), сам скрипт не минял кроме ника,ID скролов ,пушки и времени задержки. Помогите плз!

Sirocco
04.09.2009, 15:47
Здравствуйте в общем у меня проблема, пользуюсь скриптом версии 7, хроники интерлюд.
Сервер при поломки вещи стачивает её на +3
Сначало у меня была проблема:пакетхак точил и через 30 сек примерно зависал, исправил эту проблему путем поднятия delay.
теперь другая проблема: Когда он точит 2 пушки, первая стачивается,он вторую дотачивает, когда 2ая стачивается-он виснит.. не пойму что делать... преходится перезагружать пакетхак и при запуске скрипта пишет что itemsid не найден( исправляется при помощи перезагрузки скрипта)
помогите)

Henri
11.09.2009, 17:04
Привет всем.
Спасибо за твой скрипт NLObP пашет на ура, но вот 1 проблема, есть скрипт что бы точил 1 вещь, проблема достать 2 одинаковых вещи, скрипты от mks'a не работают, твой пашет, но вот проблема в 2 вещах.

Random-al
11.09.2009, 17:32
Привет всем.
Спасибо за твой скрипт NLObP пашет на ура, но вот 1 проблема, есть скрипт что бы точил 1 вещь, проблема достать 2 одинаковых вещи, скрипты от mks'a не работают, твой пашет, но вот проблема в 2 вещах.

Смотри внимательней, в скрипте уже все есть


if (sumitem(ItemID)>=1) then begin
//if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Предметов для улучшения должно быть больше двух! Прервано!');
timer.enabled:=false;
exit;
end;

Henri
12.09.2009, 18:54
Благодарю.

Pizzka
14.09.2009, 01:39
У меня проблема со скриптом((
Точи две пухи нормально но после того как с двоих точка слетает , L2ph 3.4.1.83 зависает и все ноль реакции ...
Играю на Грации парт 2
Поскажите что делать!

Pizzka
18.09.2009, 02:32
Плизз ответьте Я все перечитал не че не помогает((:confused:

Lolshto?
23.09.2009, 23:24
Доброго времени суток.
Помогите пожалуйста со скриптом.
Использую enchant_by_NLobP v 0.7 Для ИЛ.
Каким образом можно реализовать вот такое дополнение к скрипту:
когда выводит в окошке кол-ва заточек сумму заточек равную 4, чтобы на сервер отсылалось два пакета.

как я думаю это выглядет так:
если сумма заточек =4
то послатьнасервер
пакет№1
пакет№2
продолжить точение

Нужно для того чтобы первым пакетом посылать RequestMultiSell для обмена КОЛ на адены, а вторым пакетом - RequestMultiSell покупки некоторого кол-ва заточек.

Сервер такой, что там не нужно выделять в таргет продавца...
Пакеты только на мултиселл ловил и отправлял всё покупает и менят, а вот как это добавить в скрипт я не могу понять, имею представление но не могу...

Буду очень благодарен.

nneett
24.09.2009, 15:25
Доброго времени суток.
Помогите пожалуйста со скриптом.
Использую enchant_by_NLobP v 0.7 Для ИЛ.
Каким образом можно реализовать вот такое дополнение к скрипту:
когда выводит в окошке кол-ва заточек сумму заточек равную 4, чтобы на сервер отсылалось два пакета.

Тоже самое , может даже на одном серве играем -)
Я делаю так, ловлю пакет на обмен колы-адена, ловлю пакет на обмен адена-точки, ставлю оба пакета в посылку и галочку на послыать каждые "n" милисекунд(сам подбираешь под себя) и он точит, пока колы не закончатся, как вшить в скрипт незнаю.

TAMBIK
24.09.2009, 17:11
nneett, как вшить в скрипт незнаю
ручками

хотябы пакеты увидить

Kapriz
26.09.2009, 09:25
в комбобоксе нету ID предметов что я могу сделать ?

Brambum
27.09.2009, 20:40
Ребят, а скрипт для С6 хроник под 3.5 версию имеется?
Вобще нигде не нашел

KaK??omg^^
02.10.2009, 17:41
Как сделать так чтобы этот скрипт точил одну вещь?? скажите плз

TAMBIK
03.10.2009, 12:37
Lolshto?,

nneett,
вот так
уже отвечали.тему просмотреть несудьба
http://coderx.ru/showpost.php?p=11649&postcount=14

http://coderx.ru/showpost.php?p=13097&postcount=24

Sirocco
04.10.2009, 22:27
Все)
Совместил
#$87: begin
if readd(2)=0 then begin
msg.Lines.Add('Улучшили ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(good);
end else begin
msg.Lines.Add('Сломали ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(broken);
CurEnchLvl:=10; //выставляем текущий уровень при фэйле и при точке блесседами
end;
end;
end;

С интерлюдовским кодом, еще кучу всякой фигни поставлял) Терь не виснет) И Если надо заточить на 20, то надо вводить максимальную заточку 19) т.е. вводить на 1 меньше)
хэлп, при вставке кода пишет тчо нехватает ;

jpg
06.10.2009, 02:36
NLObP, пожалуйста дайте листайди, у меня его не назодит, пропил путь к ниму в скрипте теперь находит но айтимы не добавляет

TAMBIK
06.10.2009, 03:11
пропил путь к ниму
надо похмелиться

jpg
06.10.2009, 03:19
пропил путь к ниму
надо похмелиться

бугагага, смешно... в все таки помочь? У меня 7 утра я не спал всю ночь пытаясь поставить скрипт.

][_,~][][~][_,
10.10.2009, 17:27
А на парт 2 или Финал идет скрипт?

jpg
11.10.2009, 04:51
][_,~][][~][_,, читать умеем? если да, то читаем первый пост еще раз.

LeroI
12.10.2009, 16:43
народ почему когда я захожу с версией L2phx 3.2.0 у мя с игры вылетает?:(

TAMBIK
12.10.2009, 17:46
LeroI,
версией L2phx 3.2.0
э гм люди вы откуда ?
из доисторических времен ?
в подписи читай качай

alexteam
12.10.2009, 18:28
хех.. что 3.2 что 3.5 без разницы.. у каждой свои глюки, но декрипт трафика в них идентичный.

а вот каким местом вылеты относятся к теме про автозаточку.... непонятно....

LeroI
12.10.2009, 18:41
а че я не могу авто-заточку сделать вроде бы все сделал как ниписано!
нажимаю старт и снизу пишется "прервано" что я сделал не так?

TAMBIK
12.10.2009, 19:00
LeroI,
Тут не форум гадалок, если ты делаешь все правильно и по пунктам - то все должно работать

LeroI
12.10.2009, 19:38
щас отправлю как я сделал!

Добавлено через 2 минуты
//............................................
//Список констант
const
Name='oJkeeee'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
//-------------------------
max=200; //количество слотов в инвентаре чара

//............................................
//Список переменных
var

Добавлено через 54 секунды
я там дальше ни чего не изменял

Добавлено через 1 минуту
клиент Interlude, я играю на сервре http://mordred.ru/
там все по 1 аден

Добавлено через 3 минуты
макс точка 20к и безопасная тоже

Добавлено через 13 минут
че ни кто не знает?:(

TAMBIK
12.10.2009, 20:30
LeroI,
а предметы и свитки видит ?
все выбрал правильно ?

LeroI
12.10.2009, 21:29
не видит свитки и пухи как можно исправить?

TAMBIK
12.10.2009, 21:48
LeroI,
читать тему сначала

LeroI
12.10.2009, 22:04
я не понимаю((я нуб в этом деле
ты подскажи плз!

Добавлено через 12 минут
подскажи а

fulldoon
13.10.2009, 23:53
люди а де взять itemID

kallifan
15.10.2009, 13:49
Народ помогите с сервером L2s.ru

При заппуске там драйвер ещё какойто запускался. ПХ работает только через LSP перехват, обычным перехватом клиент не конектится к серверу.


На остальных серверах скрипт работает замечательно. Вписалкак обычно ник в скрипте, запускаю а инвертать не распознаётся(((

Клиент- Gracia Part2

Хелп ПЛЗ

LeroI
15.10.2009, 17:30
как сделать что бы свитки видел?

TAMBIK
16.10.2009, 02:12
kallifan,
прочитай . твой сервер L2s.ru ?????
http://coderx.ru/showthread.php?t=2500

Добавлено через 2 часа 23 минуты
LeroI,

попробуй другие скрипты

да найди строчку в скрипте
if interlude then inc(j,12) else inc(j,4);
и исправь
if interlude then inc(j,10) else inc(j,4);
может поможет

IHKBi3iTOP
17.10.2009, 01:05
Решил воспользоваться скриптом но столкнулся с вот такой проблемой:
когда нажимаю старт пишет что свиток использовался, но заточки не происходит и из инвентаря свиток тоже не пропадает, вот скрин
http://i058.radikal.ru/0910/c9/876b9f04619dt.jpg (http://radikal.ru/F/i058.radikal.ru/0910/c9/876b9f04619d.jpg.html)
Сервер Интерлюд.

pololo
17.10.2009, 21:51
Блин че такое подскажите плис!
Когда нажимаю на скрипт происходит это http://pic.ipicture.ru/uploads/091014/thumbs/TxQwxdLdLq.jpg (http://ipicture.ru/Gallery/Viewfull/25051485.html)
Списка вещей нет! http://pic.ipicture.ru/uploads/091014/thumbs/ExlZctupqS.jpg (http://ipicture.ru/Gallery/Viewfull/25051607.html)
И вот это! http://pic.ipicture.ru/uploads/091014/thumbs/Y9aatW5P6T.jpg (http://ipicture.ru/Gallery/Viewfull/25051558.html)

alexteam
17.10.2009, 23:16
Красивое имя соединения..

pololo
17.10.2009, 23:39
Красивое имя соединения..
да так у меня всегда)
вы лучше по существу подскажите

alexteam
17.10.2009, 23:47
что я сказал не по существу ?

pololo
17.10.2009, 23:49
что я сказал не по существу ?
Подскажи лучше почему у меня скрипт неработает н азаточку

TAMBIK
18.10.2009, 11:02
Красивое имя соединения..

понял бы.

ПОТОМУ ЧТО НЕТ ТВОЕГО НИКА
а есть ???????????????????????

Добавлено через 2 минуты
pololo,

И пробуй новой версией. а то уте 61

pololo
18.10.2009, 11:21
И пробуй новой версией. а то уте 61
Да я уже все перепробовал, всегда такая фигня.
Попробуйте плис на сервере la2real.net
акк proba123
пасс proba123

alexteam
18.10.2009, 11:48
млять... поиск по форуму по "la2real" не пробовал ?
там навесок в виде шифрации траффика. хрен хоть один нормальный скрипт будет работать. ибо чтобы они работали имя соединения должно быть корректным, в противном случае - скрипт будет слать данные в "пустоту".
и даже если ты вручную обховешь имя соединения - хрен оно у тебя работать будет из за того что пх будет слать данные непонятные серверу.

pololo
18.10.2009, 22:29
То есть ручками точить придется иначе не как???

TAMBIK
19.10.2009, 08:27
То есть ручками точить придется иначе не как???

однозначно.
но ты можешь научиться расшифрововать трафик и тогда скрипт

pololo
19.10.2009, 14:38
однозначно.
но ты можешь научиться расшифрововать трафик и тогда скрипт
хы) а может есть альтернатива хлапе?

alexteam
19.10.2009, 15:03
а, типо, при использовании альтернативы навесок в виде измененной криптовки трафика сам по себе рассосется ?

TAMBIK
19.10.2009, 16:15
alexteam,
сам по себе рассосется ?
это может
Чумак
Кашпировский

neonv1
24.10.2009, 08:35
Вчера нашёл пару свободных часов и довёл его до ума.

Протестировал на 3 серверах - работало везде. В среднем на один итем уходит 3 секунды, ибо в последних сборках стоит проверка и, если будет точить быстрее - бан.
enjoy.
Все замечательно работает спасибо, внес маленькие поправки, но суть такая же), разобрался.
Как сделать чтоб после окончательной заточки он снова запускался без моего ведома пока не заточит на скок мне надо??

TAMBIK
24.10.2009, 10:50
neonv1,
Как сделать чтоб после окончательной заточки
он снова запускался без моего ведома пока не заточит
на скок мне надо??
Что то непонятен вопрос ?
Так же заточил на скоко надо ?
А потом еще на скоко надо что ли ?
то есть два задания для окончания заточки ?

Shadow
25.10.2009, 20:07
Кстати, ктонить пробовал сделать скрипт на заточку скилов? А то книг дофига, но вручную точить уже заманался =)

neonv1
25.10.2009, 21:20
neonv1,
Что то непонятен вопрос ?
Так же заточил на скоко надо ?
А потом еще на скоко надо что ли ?
то есть два задания для окончания заточки ?
Чтоб после завершения максимума заточки снова запускался без нажатия старт.
Кстати, ктонить пробовал сделать скрипт на заточку скилов? А то книг дофига, но вручную точить уже заманался =)
Все уже давно есть ищи.

TAMBIK
25.10.2009, 22:30
neonv1,
Чтоб после завершения максимума заточки снова запускался без нажатия старт.
а что точить должен ?
то что ты выбрал и уже заточено ?

nneett
26.10.2009, 04:46
Приветы всем.
Испольую скрипт NlobP версия 0.7 от 20.07.2008.(Сервер Interlude), дело в том, что вещь при сточке, стачивается не на 0, а на 15, и когда это происходит зависает пакетхак, тему читал, так и не понял как с этим бороться, значения в CurEnchLvl менял на 15, не помогает, все равно зависает, я так понял это у многих, кто-нибудь решил эту проблему?