Скриптинг Форум посвещенный созданию скриптов для L2PacketHack
29.05.2008, 19:29
#1
Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
Скрипт на заточку
Автоматизация заточки предметов до необходимого уровня by NLObP
Возможности скрипта
--------------------
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим. Один предмет всегда остаётся.
Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей, степень заточки значения не имеет
Скрипт распространяется как есть, и я не несу ответственности за то, что ВЫ натворили у себя, его используя.
by NLObP
для С4 и Интерлюдии можно взять здесь
для Грации можно взять здесь
by Breadfan
скрипт переделанный под камаель (с автопокупкой).
by Shadow
Скрипт заточки предметов с их закупкой при необходимости
Этот скрипт помогает в рутине, когда разрешено пользователям 100% точить до большой величины, скажем до +200, ручками то замучаешься точить.
PS: скрипты - это облегчение рутинной работы человека.
Миниатюры
Вложения
breadfan_enchant.rar (5.9 Кб, 4225 просмотров)
credo_enchant.rar (2.7 Кб, 2345 просмотров)
enchant_by_NLObP_01.zip (7.4 Кб, 2860 просмотров)
enchant_by_NLObP_02.zip (71.6 Кб, 1454 просмотров)
enchant_by_NLObP_03.zip (71.8 Кб, 1259 просмотров)
enchant_by_NLObP_04.zip (73.3 Кб, 1588 просмотров)
enchant_by_NLObP_06.zip (9.4 Кб, 1262 просмотров)
enchant_by_NLObP_07.zip (9.4 Кб, 1567 просмотров)
enchant_by_NLObP_08.rar (6.3 Кб, 1855 просмотров)
enchant_by_NLObP_09.rar (6.3 Кб, 5535 просмотров)
shadow_enchant.rar (9.6 Кб, 3668 просмотров)
Последний раз редактировалось NLObP, 31.08.2009 в 01:20 .
За это сообщение NLObP нажился 114 спасибками от:
4erteg ,
4iter ,
8tomat8 ,
abyabar ,
Agat ,
Alan ,
AlexStar ,
Alta1r ,
AoWpwnz ,
aSeSSoR ,
BEJIEC ,
bestar ,
BimSkaLaBim ,
BioDread ,
BOTt ,
Breadfan ,
BuKbI4 ,
C0derxWarr1or ,
cadaver ,
catchy ,
ChiterEPT ,
coffee ,
Comedylife ,
CriticalError ,
Crypto ,
Dagon ,
DarthShelL ,
DARTY ,
David ,
DeadForz ,
dfackk ,
dmitrix ,
Doberman ,
dyh9l ,
dynda2000 ,
eGoIST ,
Elfinit ,
ERASE ,
esk71 ,
Fer123 ,
Fvbkm ,
Ga6pueL ,
GanGsta0 ,
GANsss ,
givemexxx ,
Gray314 ,
Green ,
Grinch ,
Gurg ,
HooleeCheeter ,
Hwoarang ,
idkfa ,
Imperial2008 ,
Irritant ,
iSee ,
jiroo ,
KPOT^^ ,
KrasX ,
LamerOK ,
LeroI ,
leto ,
Leviy ,
lodek ,
LostQ ,
LoveCoderX ,
lPomalSveNl ,
maxstro ,
Meth0d ,
micoach ,
MONDBLITZ ,
Necrolity ,
Nerevar ,
Niksan ,
nneett ,
Op4er ,
Paulo ,
Pinko ,
Piter ,
Pitkin ,
Porcupine ,
Porshesh ,
Random-al ,
ReaGeN ,
ReiN ,
Ribnadzor ,
RinZo ,
RODMAN91 ,
rubela ,
saidbek ,
SELLER ,
Sergey ,
SexGuru ,
Shadow ,
Siberia ,
skaner ,
someonce1 ,
Source ,
TAMBIK ,
Tanuxa ,
tiranosaur ,
Tos ,
Tzio 7 ,
vahes ,
VanTG ,
VasQ ,
winer ,
WOLf! ,
Xelat ,
YssurTiger ,
zotrussia ,
Виталий ,
Витя ,
Р0ма ,
®ennie™
07.08.2008, 17:35
#31
Новичок
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Использовал функцию проверки итемов для подсчета денег. Приспособил для вывода окошко Stats. Теперь впринципе можно когда кончаются деньги обменивать их у кота. И опять все дело в таргете.
2 NLObP
В каком месте скрипта правильно всетаки поставить закупку заточек?
И еще, как лучше сделать вызов процедуры на закупку, чтобы из переменных подставлялись значения итема, чтобы оперативно изменять что покупать. Типа - Закупка(СкроллЫ);
а в СкроллЫ(СкроллА,Б,С) прописано listID, EntryId и Count этих свитков? А то я второй день в этих скриптах ковыряюсь, уже голова набекрень =)
Подсчет аден:
delphi Код:
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 ;
__________________
Shadows anywhere...
07.08.2008, 17:49
#32
Новичок
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Цитата:
Сообщение от
NLObP
Для таргета нужно знать ObjectId продавцов. Вот их отловить и есть небольшая проблема. В рыбалке есть, как отлавливать фишерманов.
delphi Код:
//***************************************************************
//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, откуда она берется?
__________________
Shadows anywhere...
07.08.2008, 18:21
#33
Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
Цитата:
Сообщение от
Shadow
Смотрел пакеты, ОбджектИД и координаты продавцов известны. Выше в куске скрипта в процедуре Roy. Что за переменные MyX, и тд? Я так понимаю это координаты моего чара. Что за переменная Attacker, откуда она берется?
MyX,MyY,MyZ - координаты чара. Сервер проверяет расстояние и если ты далеко, то отвергает запрос.
Attacker - ObjectId. Осталось так исторически из скриптов бота. Поменял в выше отписанном сообщении.
Добавлено через 13 минут
Цитата:
Сообщение от
Shadow
В каком месте скрипта правильно всетаки поставить закупку заточек?
И еще, как лучше сделать вызов процедуры на закупку, чтобы из переменных подставлялись значения итема, чтобы оперативно изменять что покупать. Типа - Закупка(СкроллЫ);
а в СкроллЫ(СкроллА,Б,С) прописано listID, EntryId и Count этих свитков? А то я второй день в этих скриптах ковыряюсь, уже голова набекрень =)
delphi Код:
//***************************************************************
//s10=SellList:d(Money)h(ListID)w(ListCount)w(ItemType1)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(ObjectID)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(Amount)
//продаем по одному типу
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: Вы свои скрипты сюда выкладывайте, когда отладите. Я их в первый пост выложу.
Последний раз редактировалось NLObP, 07.08.2008 в 18:21 .
Причина: Добавлено сообщение
За это сообщение NLObP нажился 2 спасибками от:
07.08.2008, 18:54
#34
Новичок
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Что я имел ввиду по поводу закупки.
У нас есть процедура на закупку RequestMultiSellItem(ListId,EntryID,Count:integer) ;
Далее есть база переменных, в которых прописано:
скролл А арм имеет листид=... еид=... каунт=...
И я типа пишу процедуру BuyItems(ScrollA);
и там как-то нада подставить значения скролла А. и вызвать рекуестмультиселл с этими значениями.
А в идеале мы создаем базу итемИД в которой данные по листИД и тд на итемы. Потом получаем значение итемИД из чекбокса используемых заточек и шмоток, ищем в базе, подставляем в мультиселл и покупаем именно их. Тоесть не нужно в ручную прописывать значения заточек которые используются в данный момент.
__________________
Shadows anywhere...
08.08.2008, 20:09
#35
Новичок
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Изменил способ покупки, как мне кажется элегантно получилось, но в задумках еще лучше =) Хочу брать ItemID из той переменной что в комбобокс подставляется. Тоесть какой вид заточек мы выбрали, такой он и будет закупать.
delphi Код:
{ 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.
Как проверить сколько свободных слотов в инвентаре? Это чтобы закупать выбранную шмотку под завязку, или можно сделать поле для ввода количества.
Кстати переделал подсчет денег:
delphi Код:
//Пробегаем по Инвентарю и сохраняем 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 Все
Помогите сделать ТАРГЕТ!
__________________
Shadows anywhere...
За это сообщение Shadow нажился спасибкой от:
08.08.2008, 20:53
#36
Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
Цитата:
Сообщение от
Shadow
Хочу брать ItemID из той переменной что в комбобокс подставляется. Тоесть какой вид заточек мы выбрали, такой он и будет закупать.
Я тоже так решил для закупки крючков. Оставлял одну вещь и шел покупать. Правда исходил из того, чтоб ObjectID новый не запоминать.
Цитата:
Сообщение от
Shadow
Откуда брать 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 минуту
Цитата:
Сообщение от
Shadow
Как проверить сколько свободных слотов в инвентаре? Это чтобы закупать выбранную шмотку под завязку, или можно сделать поле для ввода количества.
Я за ранее ставил размер инвентаря чара в переменную
max=250; //количество слотов в инвентаре чара
Добавлено через 2 минуты
Цитата:
Сообщение от
Shadow
Таргет так и не прикрутил... у меня аж ПХ вылетает.
Где именно проблема?
NpcId мы знаем. Вот по нему и надо отслеживать пакеты NPCInfo, где брать NpcObjectID. Уходишь подальше и возвращаешся назад, сервер шлет NpcInfo. Пользуешься таргетом.
Добавлено через 2 минуты
Цитата:
Сообщение от
Shadow
В планах: расширить окно, добавить бокс для изменения задержек на покупку, да и общий для таймера например. Поставить чекбоксы: закупать заточки, закупать итемы, менять деньги. Но это потом, когда закупку нормально сделаю.
Успехов! Будет интересно посмотреть.
PS: а вещи ты покупать планируешь, или только заточки?
Последний раз редактировалось NLObP, 08.08.2008 в 20:53 .
Причина: Добавлено сообщение
За это сообщение NLObP нажился 2 спасибками от:
08.08.2008, 23:51
#37
Новичок
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Цитата:
Сообщение от
NLObP
Я тоже так решил для закупки крючков. Оставлял одну вещь и шел покупать. Правда исходил из того, чтоб 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;
Вот что-то типа этого. Направление мыслей вообще правильное?
__________________
Shadows anywhere...
09.08.2008, 00:23
#38
Новичок
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Вот созрел извращенный вариант:
delphi Код:
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 соотвественно берутся из формы.
__________________
Shadows anywhere...
09.08.2008, 02:35
#39
Местный
Регистрация: 29.04.2008
Сообщений: 830
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
Кстати отступление: на одном пвп сервере получил бан перса - из за того что понедомыслию поставил скупку точек по одной после прихода инфы о результате заточке ). Пояснение админа: " быстро и часто покупал заточки" ))
11.08.2008, 13:44
#40
Новичок
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Shadow Edition v3.5
Скрипт под моей редакцией. Версия 3.5 =)
Что сделал:
Добавлены кнопки на закупку и обмен (но выбирать магазин нада вручную, не работает таргет =))
Подсчет свободных слотов, и закупка в них выбраной шмотки через кнопку
Автозакупка свитков после каждой заточки (можно менять задержку, чтобы эмулировать человека )
Считалка денег. Считает коэф. для обмена, сколько свитков можно купить на эти деньги, и хватит ли денег на автозакупку.
Отключение и включение кнопок в зависимости от текущей операции (Закупка и обмен отключаются когда идет заточка, и когда невозможно закупить или обменять, а старт когда он нажат)
База по ID шмоток и свитков - LID, EID (Свитки в базе все, шмот только тот что пока проверял)
И первая стадия автономности - Автозакупка шмота когда нечего точить. Сделана на скорую руку, перед сном =)
Как работает:
Обновление инвентаря срабатывает только после 2 нажатий стоп. Как сделать правильно, хз.
Автозакупка сделана криво, через цикл. Сначала проходит мультиселл по циклу на свободные слоты, потом скрипт долго думает, потом начинает добавлять шмот в базу. При этом аж подвисает ПХ.
Вообщем точит по сути пока не закончаться деньги. И еще все время один свиток тратит сразу, и только после этого начинает затачивать. Видимо нада пораньше закупку поставить.
Еще пытался реализовать схему закупки - если диалог открыт, значит сразу посылать мультисел, если нет, открыть и поставить значение открыт. Это чтобы он не посылал запросы байпасс постоянно. Но чет не получилось, оставил как было.
Как должно быть:
Автозакупку через чекбокс. Причем чтобы добавление происходило на каждую шмотку, без тормозов, и он всегда подсчитывал сколько еще слотов свободно.
Адекватная реакция всех кнопок на происходящее. А то у меня сейчас видимо не в тех местах расставлено, и кнопки включаются когда не должны.
Ну и таргет наконец. Тогда он сможет и закупать все, и деньги менять сам. Полностью автономный скрипт =) Вот бы еще клиент не вылетал с ним переодически.
delphi Код:
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.Strings[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(CustType1)w(isEquipped)d(BodyPart)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];
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(itemType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(cusType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(cusType2)-(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);
Где его по нормальному нада ставить?
__________________
Shadows anywhere...
Последний раз редактировалось Shadow, 11.08.2008 в 15:19 .
За это сообщение Shadow нажился 2 спасибками от:
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 02:37 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!