PDA

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


NLObP
11.01.2008, 04:07
Не пишите по несколько раз вопросы. Тема премодерируемая и пока модератор не посмотрит, сообщение не появиться.

Выкладываю мою версию рыбалки: fishing_by_NLObP.zip (http://coderx.ru/downloads.php?do=file&id=21)

//Автоматизация ловли рыбы by NLObP для L2PacketHack v.3.5+ by Xkor
//version 0.10.11 от 26.07.2009г. (http://coderx.ru/showpost.php?p=34557&postcount=51)

Возможности скрипта:

+ Контроль рыбалки с панели управления;
+ Статистика ловли;
+ Может работать одновременно несколько скриптов для разных чаров;
+ При нападении моба может атаковать его и может лечиться бутылками;
+ Потрошит пойманную рыбу;
+ Подбирает выпавшие предметы из убитого моба;
+ Возвращается на место рыбалки после смерти;
+ Когда закончатся крючки, бежит к фишермэну и продает/покупает/обменивает предметы
(продажа Fish Oil и Great Fish Oil не производится, см. ниже);
+ Меняет место ловли при неудачных попытках (в скрипте три места ловли);
+ В процессе рыбалки преобразует Fish Oil в Great Fish Oil, Great Fish Oil в Premium
Fish Oil (требуются соответствующие рецепты);
+ проверка на то, что мы действительно рыбачим, с репозицией;
+ проверка на застревание с возвратом на одну позицию назад;
+ возобновляет рыбалку если моб исчез сам;
+ показывает количество HP напавшего моба;
+ добавил отключение клиента (социал YES);

Спасибо Xkor за пакетхак!
Спасибо участникам форума CoderX.ru за идеи для скрипта!

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

MyICQ 402988808

by APXAHGEJI
Вот попробуй этот, на моем ХБэшном серве работает.
Единственно что, не переделал отключение клиента.
Скрипт не универсален, то есть работает тока под ХБ.

Ниже прикреплены скрипты
Так выглядит панель управления скриптом

NLObP
10.06.2008, 11:52
Я немного неправильно написал мануал. Вот часть с исправлениями.
Готовим маршруты движения:
1) Становимся у фишермэна, выбираем в комбобоксе MestoLovli1, REC, побежали на первое место ловли, добежали, SAVE, бросили что ни будь для ориентира.
2) Выбираем в комбобоксе Reposition1, REC, отбежали немного и снова вернулись на место ловли, SAVE.
3) Выбираем в комбобоксе MestoLovli1, жмем BACK, в автомате возвращаемся к фишермэну.
4) Выбираем в комбобоксе MestoLovli2, REC, побежали на второе место ловли, добежали, SAVE, бросили что ни будь для ориентира.
5) Выбираем в комбобоксе Reposition2, REC, отбежали немного и снова вернулись на место ловли, SAVE.
6) Выбираем в комбобоксе MestoLovli2, жмем BACK, в автомате возвращаемся к фишермэну.
7) Выбираем в комбобоксе MestoLovli3, REC, побежали на третье место ловли, добежали, SAVE, бросили что ни будь для ориентира.
8) Выбираем в комбобоксе Reposition3, REC, отбежали немного и снова вернулись на место ловли, SAVE.
9) Выбираем в комбобоксе MenayemMesto1, REC, побежали на первое место ловли (на ориентир), добежали, SAVE.
10) Выбираем в комбобоксе MenayemMesto2, REC, побежали на второе место ловли (на ориентир), добежали, SAVE.
11) Выбираем в комбобоксе MenayemMesto3, REC, побежали на третье место ловли (на ориентир), добежали, SAVE.
12) SOE, выбираем в комбобоксе AfterDeath, REC, побежали к фишермэну, добежали, SAVE.
13) Все! Маршруты готовы.
14) Лучше почаще кликать, так как каждые (настраиваемо) секунд, возврат на предыдущую точку, для предотвращения остановки при движении по маршруту.

MHz
16.06.2008, 14:58
Респектище тебе NLObP!

Я попробовал рыбачить через бота L2Jes, выявилось, что полностю полагаться на пакет клинета 48 ValidatePosition нельзя, поэтому я поставил дополнительную коррекцию координат чара на пакет сервера 01 МoveBackwardToLocation. Думаю эта проверка не повредит и для реального клиента.

Это кусок (с обрамляющим кодом) который я добавил в обработку серверных пакетов:



//************************************************** **************************
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$01: begin // MoveBackwardToLocation
if ReadD(2) = MyOID then begin
MyX := ReadD(18);
MyY := ReadD(22);
MyZ := ReadD(26);
end;
end;
//************************************************** *************
#$04: begin //пакет с инфой о моём чаре
//msg.Lines.Add('S>Пакет UserInfo #$04');
UserInfo;

NLObP
29.06.2008, 22:18
Почемуто отваливается при долгой работе, просто стоит на месте приходится перезапускать

Насколько долгой? Какие нибудь сообщения пишет?

Stasrus
30.06.2008, 01:20
Максимум что он у меня проработал это 2 часа потом всегда отваливается приходится перезапускать , пробывал прошлые версии везде одно и тоже, после появления n-ого моба убивает его но рыбалку не продолжает хотя в форме написано что все ок продолжаем рыбалку

NLObP
30.06.2008, 22:51
Максимум что он у меня проработал это 2 часа потом всегда отваливается приходится перезапускать , пробывал прошлые версии везде одно и тоже, после появления n-ого моба убивает его но рыбалку не продолжает хотя в форме написано что все ок продолжаем рыбалку

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

Stasrus
02.07.2008, 00:41
Визуально чар не смещается стоит тамже, пробывал разные места везде одно и тоже немного половит и останавливается даже в скрипте по умолчанию гиран харбор

Гостььь
02.07.2008, 03:39
Визуально чар не смещается стоит тамже, пробывал разные места везде одно и тоже немного половит и останавливается даже в скрипте по умолчанию гиран харбор

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

NLObP
02.07.2008, 09:51
Визуально чар не смещается стоит тамже, пробывал разные места везде одно и тоже немного половит и останавливается даже в скрипте по умолчанию гиран харбор

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

На выходных посмотрю, что можно сделать.

PS: А у меня завтра праздник ;)

11111111
04.07.2008, 18:23
Сразу хотелось сказать большое спасибо за скрипты! Пользуюсь, мне очень нравится. Вот есть одна проблема, в каждом идет привязка к определённому месту, т.е. я хочу затарится по полной сосками, крючками, т.д. и уплыть на необитаемый остров (где нет людей и спокойно ловить рыбу без боязни что меня забанят из-за чьего-то скрина). Я нашел более ранний скрипт который просто ловит рыбу без походов в магазин, смен мест ловли при неудачных попытках и т.д. но этот скрипт перестаёт работать если нападает моб (после убийсва моба чар просто стоит и рыбачить не продолжает). Если есть такая возможность - сделай пожалуйста скрипт который будет ловить рыбу в любом, выбранном мною месте, в гиранхарбор бродит очень много народу и честно говоря на ночь чара оставлять страшновато, проснёшься а он забанен)))

NLObP
05.07.2008, 20:21
Выложил новую версию скрипта. Пробуйте.

ЗЫЖ Два часа, полет нормальный.

Добавлено через 16 часов 50 минут
Такая же проблема. После нападения моба, чар его убивает - но стоит на месте и рыбалку не продолжает (это замеченно в более ранних версиях скрипта).

Вот, попробуйте так ие изменения внести:
вместо
#$12: begin
msg.Lines.Add('S>C $12 DeleteObject '+inttostr(ReadD(2)));
DeleteNpc(ReadD(2));
if (AttackerOID=ReadD(2)) and not isDie then begin

написать

#$12: begin
msg.Lines.Add('S>C $12 DeleteObject '+inttostr(ReadD(2)));
DeleteNpc(ReadD(2));
if (AttackerOID=ReadD(2)) then begin

PanAm
26.07.2008, 15:17
fishing_manual желательно делать в TXT или RTF. чтоб MSOffice не тянуть еще за скриптом. :o

NLObP
26.07.2008, 15:19
fishing_manual желательно делать в TXT или RTF. чтоб MSOffice не тянуть еще за скриптом. :o

В мануале немного графики есть, для пояснения процесса создания путей.

Breadfan
07.08.2008, 04:18
По поводу скрипта: играю на ява камаель серве и так была такая беда - если перс был атакован мобом во время рыбалки то просто тупо стоял и втыкался как моб его бьет. Если попадался глупый моб который начал атаковать его в тот момент когда бот еще не начал закидывать удочку то вот тут то скрипт и срабатывал как ему необходимо...По причине багов серва, чаще всего моб, после его вытягивания, какоето время сидит в воде, и лишь потом выпрыгивает к персу, а может так и задуманно изначально. В общем в моем случае это вылечилось небольшой модификацией процедуры использования хеликов

procedure OnShowInfo(Sender: TObject); //выводим в форму
begin
ShowInfo;
if (MyHP<but) and HPuse1 then begin //если разрешено использование бутылок, то используем
if (iii>=5) and (colvohp>0) then begin
UseItem(HPOID); //проверка количества бутылок
iii:=0; //счетчик для личилок, чтобы не спамить
giveweapon;
TargetAttacker(AttackerOID);
underattack:=true;
end else inc(iii)
end;
end;

Breadfan
07.08.2008, 04:24
Еще хотелось бы получить помощь в модернизации скрипта для добавления опции ночной рыбалки ;)

NLObP
07.08.2008, 14:25
По поводу скрипта: играю на ява камаель серве и так была такая беда - если перс был атакован мобом во время рыбалки то просто тупо стоял и втыкался как моб его бьет. Если попадался глупый моб который начал атаковать его в тот момент когда бот еще не начал закидывать удочку то вот тут то скрипт и срабатывал как ему необходимо...По причине багов серва, чаще всего моб, после его вытягивания, какоето время сидит в воде, и лишь потом выпрыгивает к персу, а может так и задуманно изначально. В общем в моем случае это вылечилось небольшой модификацией процедуры использования хеликов

Спасибо. Включу в основной скрипт.
Можно еще паузу по больше между забросами сделать. Было предположение, что моб нападёт сразу, до заброса крючка.

Добавлено через 1 минуту
Еще хотелось бы получить помощь в модернизации скрипта для добавления опции ночной рыбалки ;)

Расскажи, что и как должно быть. Желательно по пунктам действий. Чтобы легче закодить можно было.

NLObP
07.08.2008, 15:15
Достаточно добавить еще один комбобокс для наживок (ночных), и периодически отправлять запрос какое время дня в данный момент. Я начинающий, и сам долго делать буду)

Легко сказать добавить комбобох. :( Так неудобно в готовые формы что нибудь добавлять. Вот с нуля делать гораздо легче, я даже выкладывал для Делфи компонент для работы с формой.

А еще подробнее можно? Какой пакет время в себе несет, какие такие ночные наживки (ID=название)...

NLObP
08.08.2008, 11:50
Задам один вопрос а почему не пользуетесть для рыбалкпи волкером, может я чёто недопонял.

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

NLObP
08.08.2008, 14:58
не проше будет написать скрипты как были на ц4:автохп,рыбалка,патрошиловка. и все норм работало...

Не понятна проблема. Я уже писал такие, можно пользоваться. Нужны? Могу выложить.

PS: А этот мне удобнее использовать.

NLObP
08.08.2008, 19:49
в стандартных файлах на место ловли №3 после точки №25 если начать ловить то чар начинает непонятно бегать туда-сюда, ясное дело он ничего не ловит
и постоянно идет проверка на застревание

Желательно сразу под себя все пути переделать. В гиран-харборе нормальные пути, я ими пользуюсь, а в Талкин-исланд уже и не помню, нормальные или нет.

Для нового места , создаешь папку с понятным для себя названием, копируешь из любой другой папки все пути и после запуска скрипта начинаешь все пути переделывать, как описано в мануале из архива поставки скрипта.
Здесь хранится папка откуда берем пути движения:
RecordFilesPath='.\scripts\fishing\giran_harbor\'; //путь где хранятся наши файлы


Еще одно но. Всегда начинать с той точки ловли, которая указана первой в скрипте: здесь задана первая точка

procedure Init;
begin
...
MestoLovli:=1; //номер места позиции ловли, всего три.
...
end;

NLObP
14.08.2008, 14:15
Работает ли скрипт на л2пх 3.20
Да.
Возможно ли использовать скрипт просто как рыбалку в определенном месте без смены мест ловли
Можно. Надо PMMesto сделать большим.
PMMesto:=50; //количество сорвавшихся рыб, для начала смены места ловли
я так понимаю можно просто проигнорировать ту часть где пути и фешермены
Если скрипт исправить в месте где проверяется количество крючков, то можно.
комп подвисает секунд на 10, потом открывает форму и вылетает ошибка
Какая именно ошибка? Может не все настроил?

При включении скрипт посылает команду:
//$0F - RequestItemList вызываем инвентарь
Обычно ошибка бывает, если нет подключения, что описано в name.
Небольшая задержка при запуске скрипта обусловлена обработкой инвентаря и заполнения комбобоксов.
При ошибках мне помогает кнопка "обновить список".

нпцИД и итемсИД что шли со скриптом переписал поверх оригинальных от л2пх

А вот это ты зря сделал. Там папки специально идут, чтобы в них лежало всё. Наоборот лучше сделать из основной туда скопировать.

PS: Зачем удалил своё сообщение, сам разобрался?

Murdoc
18.08.2008, 18:13
PS: Зачем удалил своё сообщение, сам разобрался?

Да :) Все работает но возникло несколько других вопросов.
1) перекрафт бутылок. Или не работает или я не разобрался. Ставлю галку - в клиенте открывается окно коммон крафта с выучеными рецептами. и все. крафт не происходит.
2) репозиция после боя иногда не происходит.
3) иногда не бьет моба. т.е. берет пуху в руки и стоит лечится.

Jumper888
29.08.2008, 23:36
Пакетхаком пользуюсь давно, но скриптами не пользовался т.к. в них не разбираюсь. Очень заинтересовал скрипт на автоматизацию рыбалки, но у меня возникли проблемы.
Как запускать скрипт? В пакетхаке есть вкладка "Дополнительно", если в этой вкладке запускать, то пакетхак зависает на несколько секунд, а когда отвисает ничего не происходит. Есть вкладка "Скрипты", в ней можно запустить скрипт с помощь кнопки "Тест Init", в этом случае скрипт запускается и появляется панель управления рыбалкой. И тут сразу появилось несколько проблем:
1)не удалось выбрать в комбобоксах удочку, крючки, оружие и т.д. потому что не появляся список выбора предметов, а также не получилось вручную вписать ID предметов;
2)стою в гиране пtред фишерменом, следуя мануалу, нажимаю на кнопку "Go" и программа пишет следующее
Пробуем выйти на путь...
найден ближайший чекпоинт #3 бежим туды
Слишком большая Дельта! Проверить папку с файлами перемещения!
Движение остановлено!
Слишком большая Дельта! Проверить папку с файлами перемещения!
Движение остановлено!
тыкаем ещё раз:|49145|185831|-3512| x:=49145 y:=185831 myx:=0
myy:=0
3) следуя мануалу, пытаюсь создать маршруты движения, но на третьем пункте ( ... 3) Выбираем в комбобоксе MestoLovli1, жмем BACK, в автомате возвращаемся к фишермэну... ), при нажатии кнопки "Back" программа пишет следующее
Пробуем выйти на путь...
чекпоинт не найден
Движение остановлено.

(Играю на Шоке 3х10)
Объясните пожалуйста в чем заключается проблема или что я делаю не так.

NLObP
30.08.2008, 01:18
Как запускать скрипт?

Скаченный скрипт надо сохранить в папке \SCRIPTS.
Запускать скрипт надо так - ставим галочку напротив нужного скрипта, на странице Скрипты.
Про настройку самого скрипта не забудь.

Добавлено через 2 минуты
Слишком большая Дельта! Проверить папку с файлами перемещения!
Это означает, что скорее всего используются пути из папки другого региона. Например мы в гиран-харборе, а пути от Талкин исланд. Или просто не настроил пути движения.

NLObP
31.08.2008, 02:44
Для Breadfan, заготовка формы для скрипта рыбалки. Её следует обработать дизайнер форм (http://coderx.ru/downloads.php?do=file&id=19) для FastScript.

Breadfan
31.08.2008, 05:31
Немного изменил форму...добавил дополнительные элементы...обработал..а там...)) разгребать видимо долго буду получившийся код)) Да и проблема пока по какому времени ориентироватся

NLObP
31.08.2008, 15:49
Камаэль-Грация
При посылке /time
B3 4D 00 00 00
Tип: 0xB3 (RequestUserCommand)
Pазмер: 5+2
Время прихода: 14:30:19:515
0002 d Command: 77 (0x0000004D)

получил строку в чате
The current time is 17:47 AM
и пришел пакет
62 9F 03 00 00 02 00 00 00 01 00 00 00 11 00 00 00 01 00 00 00 2F 00 00 00

Tип: 0x62 (SystemMessage)
Pазмер: 25+2
Время прихода: 14:30:19:578
0002 d MsgID: TIME_S1_S2_IN_THE_DAY ID:927 (0x039F)
0006 d typesCount: 2 (0x00000002)
000A d ?: 1 (0x00000001)
000E d hours: 17 (0x00000011)
0012 d ?: 1 (0x00000001)
0016 d minutes: 47 (0x0000002F)

Значит по пакету message msgid=0x039F можно вычислять время в игре

Breadfan
31.08.2008, 16:18
Это да, просто определялся, какое время требуется, отображаемое на карте или по команде /time.Сегодня администратор сказал что /time, так что буду копать в том направлении

Гость69
06.09.2008, 01:33
Спасибо.
Но все таки:
1. Иногда после боя останавливается навсегда без каких либо сообщений. Так и не смог понять возможных причин или выявить аналогии. А если остановился, то после нажатия на кнопку старт и потом опять боя, останавливается снова.
2. Частенько не дает включать скрипт, то есть после нажатия галочки активации скрипта выскакивает окно, в котором не сгенерены вещи, то есть ошибка. Как я понял лечится заблаговременным заглядыванием в инвентарь несколько раз. Так?
3. Почти никогда не может определить ИД Фишермана. Не смог понять тоже почему да как... это впрочем не мешает...
4. Почти не хочет крафтить бутылки... хотя иногда и крафтит, но как то непостоянно что ли...
5. И еще вопрос, а влияет ли Надежный или Скрытый способ внедрения?
6... использую 0.10.5 на пакетхаке 3.20 и 3.32... 3.32 реже тупит намного по части остановок после боя, но чаще при запуске скрипта

...
В скриптинге не силен, так что извиняйте...

Murdoc
02.10.2008, 16:09
Новая порция вопросов :)
скрипт на хеллбаунде работать будет? Интересует только та часть что просто рыбачить, дерется с мобом, лечится, репозиционируется(о словечко то!!!) после боя
Нужны ли какие то изменения, какие параметры?

NLObP
02.10.2008, 17:37
Новая порция вопросов :)
скрипт на хеллбаунде работать будет? Интересует только та часть что просто рыбачить, дерется с мобом, лечится, репозиционируется(о словечко то!!!) после боя
Нужны ли какие то изменения, какие параметры?

Нужны. Как минимум, ID пакетов другие.

APXAHGEJI
03.10.2008, 04:06
Вот попробуй этот, на моем ХБэшном серве работает.
Единственно что, не переделал отключение клиента.
Скрипт не универсален, то есть работает тока под ХБ.
//Автоматизация ловли рыбы by NLObP для L2PacketHack v.3.1.8+ by Xkor
//version 0.10.7 от 26.07.2008г.
program Fishing_C4_IL;
{ А.Пушкин "Сказка о рыбном четверге"
************************************************** ******************************
Возможности скрипта:
--------------------
0.10.1
- Контроль рыбалки с панели управления;
- Статистика ловли;
- Может работать одновременно несколько скриптов для разных чаров;
- При нападении моба может атаковать его и может лечиться бутылками;
- Потрошит пойманную рыбу;
- Подбирает выпавшие предметы из убитого моба;
- Возвращается на место рыбалки после смерти;
- Когда закончатся крючки, бежит к фишермэну и продает/покупает/обменивает предметы
(продажа Fish Oil и Great Fish Oil не производится, см. ниже);
- Меняет место ловли при неудачных попытках (в скрипте три места ловли);
- В процессе рыбалки преобразует Fish Oil в Great Fish Oil, Great Fish Oil в Premium
Fish Oil (требуются соответствующие рецепты).
0.10.2
+ проверка на то, что мы действительно рыбачим, с репозицией;
+ проверка на застревание с возвратом на одну позицию назад;
0.10.3
+ правильно работает остановка рыбалки (Stop);
+ возобновляет рыбалку если моб исчез сам;
+ исправлено лечение бутылками;
+ исправлена репозиция;
+ показывает количество HP напавшего моба.
0.10.4
+ by MHz: Попробовав юзать твой скрипт с ботом L2Jes столкнулся с тем, что
полностью полагаться на пакет клиента 48 - ValidatePosition нельзя, поэтому
предлагаю дополнительно подтверждать свои координаты из пакета сервера
01 MoveBackwardToLocation.
0.10.5
+ сменил код выбора ItemID предметов;
+ если не выбрали продавца, то по окончанию крючков продовать не бежим;
0.10.6
+ рефакторинг кода;
+ вроде нашел место где после боя останавливается;
0.10.7
+ добавил отключение клиента (социал YES);

================================================== ==============================
Проверялось на TheAbyss.ru x300(interlude) и локальном сервере (interlude)
================================================== ==============================

Перед использованием скрипта изменяем под свой сервер, один раз:
- Name='имя своего чара';
- изменить перемещение к месту ловли (Mestolovli), смена места ловли (MenayemMesto),
репозицию после боя (Reposition);
- изменить константы при необходимости:
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
java=false; //PTS - false, Java - true
debug=false; //если не хотим видеть отладочной информации
//оставить один из них или поставить свой
kID=1000000; //коэфф вычитаемый из NpcID C4 lagam.net
kID=1023000; //коэфф вычитаемый из NpcID C6 theAbyss.ru

1)
- покупаем удочку, крючки и при необходимости фишин-шоты;
- учим соответствующие скилы рыбалки;
- при желании защищаться - купить подходящее оружие, щит, соулшоты.

2) каждый раз для инициализации скрипта:
- запускаем скрипт (ставим галочку);
- ставим галочи в панели управления напротив необходимых позиций;
- становимся перед фишермэном, выбираем первое место ловли, жмем GO;
- чар сам идет на место рыбалки;
- дождавшись прихода на место ловли жмем START;
- при необходимости, включть соулшоты в автоматический режим.

Примечание:
- ловить лучше всего гномом;
- пути движения к местам ловли начинать от фишермэна;
- путь движения после смерти начинается с места появления после смерти.

На Абисе S>Пакет UserInfo #$04 очень тяжело дождаться, а он нужен для инициализации
скрипта. Нужно купить или продать не нужную вещицу и Пакет UserInfo #$04 прийдет от сервера.
На lagam.net(c4) проще, открываем инвентарь, сняли/одели оружие.

Скрипт настроен под определённое место. Для других мест нужно изменить перемещение
к месту рыбалки, смену места рыбалки, репозицию после боя, путь после смерти
(в скрипте зашито три места ловли). Теперь это сделать очень легко! Спасибо Alexsl!

Спасибо Xkor за пакетхак!
Спасибо участникам форума CoderX.ru за идеи для скрипта!

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

MyICQ 402988808
************************************************** ******************************}
const
//имя чара для которого включаем скрипт
Name='НикЧара'; //<------------------------------

//kID=1000000; //коэфф вычитаемый из NpcID C4 lagam.net
kID=1023000; //коэфф вычитаемый из NpcID C6 theAbyss.ru

//сюда вписываем ItemID предметов для автопродажи
TradeSellItem=[7686,7698,7697,6527,6521];
//количество предметов в массиве TradeSellItem
TradeSellItemCount=5;
//-----------------------------TradeBuyItem=[MyLureID];
TradeBuyItemCount=1;
//сюда вписываем ItemID предметов для автообмена
TradeMultiItem=[6908,6909,6910,6911,6912,6913,6914,6915,6916]; //нельзя изменять, собъется обмен!
//количество предметов в массиве TradeMultiItem
TradeMultiItemCount=9;//нельзя изменять, собъется обмен!
FO=6908; //запомним, чтобы отменять обен на пруфы
GFO=6909;

//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
java=false; //PTS - false, Java - true
debug=false; //если не хотим видеть отладочной информации

//эта переменная указывает уничтожить пакет или нет если он обработан
//может данные нужны для других скриптов
EraseCommandFromChat=true;

//************************************************** *************
fish=1312; //ID fishing
pump=1313; //ID pumping
reel=1314; //ID reeling

//************************************************** *****
// RecordFilesPath='.\scripts\fishing\TALKIN_ISLAND\' ; //путь где хранятся наши файлы
RecordFilesPath='.\scripts\fishing\giran_harbor2\' ; //путь где хранятся наши файлы
RecordPathName='Mestolovli1'; //файл по умолчанию
RecordFileExt='.txt';//расширение по умолчанию

RangeToCheckPoint=150;//дистанция до чекпоинта при которой считается , что мы достигли оного
MoveTrigerDelay=1000; //срабатывание таймера на движение 0,8 сек

cmdPrefix='==='; //с этих символов начинается команда
cmdDlm =' '; //разделитель параметров команды, параметры не должены содержать разделитель
//команды в общий чат
//пример
cmdRecordPath='rec'; //в общий чат "===rec giran1"
cmdSavePath='save'; //в общий чат "===save"
cmdMove='go'; //в общий чат "===go giran1"
cmdBack='back'; //в общий чат "===back giran1"
cmdStop='stop'; //останавливает следование по маршруту

maxitems=250; //max количество предметов в базе
maxnpc=50; //max количество контролируемых NPC
go=true; //бежать от продавца на место ловли
back=false; //бежать от места ловли к продавцу
//************************************************** *************
var
getbuylist, getselllist, getmultisell : string;
PercentHP : integer; //при каком количестве HP в % юзать бутылку лечения
WeaponUse1 : boolean; //использовать оружие? true-да, false-нет
ShieldUse1 : boolean; //использовать щит? true-да, false-нет
HPuse1 : boolean; //использовать ли бутылки лечения? true-да, false-нет
ShotUse1 : boolean; //использовать ли фишин-шоты? true-да, false-нет

TradeBuyItem: array[0] of integer; //что надо купить [MyLureID];
NpcBase: array[1..2,1..maxnpc] of integer; //все NPC вокруг
KolvoNpc : integer; //количество Npc в базе
{
1 - OID
2 - ID
}
ItemBase: array[1..4,1..maxitems] of integer; //все предметы в инвентаре
ItemBase2: array[1..4,1..maxitems] of integer; //найденные по ItemID
{
1 - ObjectID
2 - ItemID
3 - ItemCount
4 - IsEquipped
}
MestoLovli, PMMesto, MMesto : integer;
isDie, isFishing, isEquipRod, isEquipLure, isEquipWpn: boolean;
NeedBuy, FishermanOID, ListID, ColvoItm, ColvoItm2, SocialID : integer;
ReadyToBuy, ReadyToSell, ReadyToMultiSell, add, CanFishHere : boolean;
trd, TradeCount, TradeID, EndTradeID, UpdType, ItemOID, ItemID, colv, trade: integer;
lucky1, failed1, fish1, fish2, mob1, death1: integer;

StartTime, EndTime: TDateTime;
fishin, ShowInf, MoveTimer, Trade1, CreatePFO: TTimer;

//здесь ID вещей которыми пользуемся при рыбалке
MyWeaponID : integer; //2500 (Dark Legion's Edge) 295 (Dwarven Trident)
MyShieldID : integer; //0 - не используем!
MyRodID : integer; //6529 (Baby Duck Rod)
MyLureID : integer; //7807 (Green Colored Lure - For Beginners)
MyShotID : integer; //6536 (Fishing Shot: D-grade)
MyHPID : integer; //1060=Lesser Healing Potion
FishermanID : integer; //8573; //Фишерман Monakan в Гиран-харборе

HPOID, ColvoHP, RodOID, LureOID, ColvoLure, ShotOID, ColvoShot : Integer;
iii, i, j: integer;

//защита от мобов
WeaponID, ShieldID, WeaponOID, ShieldOID : Integer;
but: integer ;
Lure1, Rod1, distanciya, status : boolean;
underAttack, HPuse2, Weapon2, Shield2, Lure2, Rod2, Shot2 : boolean;

//movement data
MovePath, //данные по которому мы будем двигатся в данный момент
RecordPath, //данные для записи пути
ItemsName, NpcsName, StringList, StringList2 : TStringList; //названия предметов, имена продавцов
Cmd, //команда на определенное действие 'fishing' 'trade' 'death' 'move'
RecordPathFileName: string; //название файла для записи
PointsCount: integer; //кол-во поинтов в процессе записи пути

SavePathEnabled: boolean; //флаг записи пути

MoveToPathEnabled: boolean; //флаг движения по пути
MoveToForward: boolean; //направление движения да-вперед, нет - назад
MoveStepIndex: integer; //текущ. чекпоинт (куды бежим сейчас)

old_X,old_Y,old_Z,old_time,chk_time: integer;

stop : boolean;

myX,myY,myZ: integer; //наши статы
myOID,myHP,myMP,myMaxHP,myMaxMP: integer;
AttackerID, AttackerOID,AttackerX,AttackerY,AttackerZ,Attacker MaxHP,AttackerHP : integer;

NetPing: string; // здесь запомним Нетпинг от клиента, будем сами его посылать
LogOutOk: boolean; // флаг показывающий, что мы отключили клиент

//............................................
//Список переменных формы
FormMain : TForm; //Создаваемая форма
Splitter1,Splitter2 : TSplitter;
Panel1 : TPanel;
ButtonPathBack,ButtonPathStop,ButtonPathGo,ButtonP athSave,ButtonPathRec,
ButtonFishingStart,ButtonFishingStop : TButton;
GroupBox1,GroupBox2,GroupBox3,GroupBox4 : TGroupBox;
Label1,Label2,Label4,Label5,Label6,Label7,Label12, Label13,Label8,Label9,Label17,
Label10,Label11,Label3,Label14,Label15 : TLabel;
CheckBoxRod,CheckBoxLure,CheckBoxWeapon,CheckBoxSh ield,CheckBoxFShot,CheckBoxFO,CheckBoxPU,
CheckBoxFisherman,CheckBoxHPotion : TCheckBox;
ComboBoxPath,ComboBoxRod,ComboBoxFShot,ComboBoxLur e,ComboBoxWeapon,ComboBoxShield,
ComboBoxFisherman,ComboBoxHPotion : TComboBox;
EditPath,EditRodVal,EditLureVal,EditWeaponVal,Edit ShieldVal,EditFShotVal,
EditLureOID,EditWeaponOID,EditShieldOID,EditFShotO ID,EditRodOID,EditFishermanOID,
EditLure,EditHealt,EditHpotionOID,EditHPotionVal : TEdit;
Stats, Msg : TMemo;
pbMyHP,pbMyMP,pbTargetHP:TProgressBar;
gbMyPanel,gbTargetPanel,gbMyCP,gbMyHP,gbMyMP,gbTar getHP:TGroupBox;

//............................................
//для Пакетхак v.3.1.9+
//************************************************** *************
procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin
// не срабатывает!
// NoFreeOnClientDisconnect;
// NoFreeOnServerDisconnect;
end;
//.....................
//.......................
//************************************************** *************
//Вызывается при включении скрипта
//************************************************** *************
procedure Init;
begin
FormMain:=Create_FormMain;
if not java then begin
//C4 lagam.net и C6 theAbyss.ru
getselllist:='menu_select?ask=-1&reply=8';
getbuylist:='menu_select?ask=-1&reply=0';
getmultisell:='menu_select?ask=-303&reply=517';
//для java getselllist в пакете NpcInfo
end;
PMMesto:=50; //количество сорвавшихся рыб, для начала смены места ловли
MMesto:=0; //здесь будем подсчитывать сорвавшуюся рыбу, для смены позиции
MestoLovli:=1; //номер места позиции ловли 1..3

lucky1:=0;
failed1:=0;
fish1:=0;
fish2:=0;
mob1:=0;
death1:=0;

FishermanOID:=0;
CanFishHere:=true; //здесь можно ловить
ReadyToBuy:=false;
ReadyToSell:=false;
ReadyToMultiSell:=false;
stop:=false; //нажали кнопку STOP?
isFishing:=false; //ловим?

StartTime:=time;
ShotOID:=0;
LureOID:=0;
Status:=false;
rod1:=true;
lure1:=true;

HPuse2:=false; //задействовано true-да, false-нет
weapon2:=false;
shield2:=false;
rod2:=false;
lure2:=false;
Shot2:=false;

underattack:=false; //атакован?

RecordPathFileName:='';

//RequestItemList вызываем инвентарь
buf:=hstr('14');///////////////////////////////////////////////////////////////////////////////////////
SendToServerEx(Name);

RecordPath:=TStringList.Create;
MovePath:=TStringList.Create;
ItemsName:=TStringList.Create;
NpcsName:=TStringList.Create;
StringList:=TStringList.Create;
StringList2:=TStringList.Create;
try
ItemsName.LoadFromFile(RecordFilesPath+'itemsid.in i');
except
msg.Lines.Add(RecordFilesPath+'itemsid.ini не найден!');
exit;
end;
try
NpcsName.LoadFromFile(RecordFilesPath+'npcsid.ini' );
except
msg.Lines.Add(RecordFilesPath+'npcsid.ini не найден!');
exit;
end;
with ComboBoxFisherman do
begin
Items.Clear;
Items.Assign(NpcsName);
ItemIndex:=0;
end;
//таймеры, можно поправить время по обстоятельствам
MoveTimer:=TTimer.Create(nil);
MoveTimer.Enabled:=False;
MoveTimer.Interval:=MoveTrigerDelay;
MoveTimer.OnTimer:=@OnMove;

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

fishin:=TTimer.Create(nil);
fishin.OnTimer:=@OnFishing;
fishin.enabled:=false;
fishin.interval:=3000; //время задержки

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

CreatePFO:=TTimer.Create(nil);
CreatePFO.OnTimer:=@OnCreatePFO;
CreatePFO.enabled:=false;
CreatePFO.interval:=300000; //время задержки 5 мин

WeaponUse1:=false;
ShieldUse1:=false;
HPuse1:=false;
ShotUse1:=false;
//PercentHP:=70;
//здесь ID
MyWeaponID:=0;
MyShieldID:=0;
MyRodID:=0;
MyLureID:=0;
MyShotID:=0;
MyHPID:=0;
FishermanID:=0;
end;
//............................................
//************************************************** *************
//Вызывается при выключении скрипта
//************************************************** *************
procedure Free;
begin
ItemBase:=nil; ItemBase2:=nil;

//таймеры
ShowInf.Enabled:=false; ShowInf.Interval:=0; ShowInf.Free; ShowInf.OnTimer:=nil;
fishin.Enabled:=false; fishin.Interval:=0; fishin.Free; fishin.OnTimer:=nil;
trade1.Enabled:=false; trade1.Interval:=0; trade1.Free; trade1.OnTimer:=nil;
createpfo.Enabled:=false; createpfo.Interval:=0; createpfo.Free; createpfo.OnTimer:=nil;
movetimer.Enabled:=false; movetimer.Interval:=0; movetimer.Free; movetimer.OnTimer:=nil;

WeaponOID:=0; ShieldOID:=0; HPOID:=0; RodOID:=0; LureOID:=0; ShotOID:=0;

ColvoLure:=0; ColvoShot:=0;
if RecordPath<>nil then
try
RecordPath.Free;
except
debugmsg('error free RecordPath');
end;
if MovePath<>nil then
try
MovePath.Free;
except
debugmsg('error free MovePath');
end;
if ItemsName<>nil then
try
ItemsName.Free;
except
debugmsg('error free ItemsName');
end;
if NpcsName<>nil then
try
NpcsName.Free;
except
debugmsg('error free NpcName');
end;
if StringList<>nil then
try
StringList.Free;
except
debugmsg('error free StringList');
end;
if StringList2<>nil then
try
StringList2.Free;
except
debugmsg('error free StringList2');
end;
//достаточно освободить форму
Free_FormMain;
//отключение клиента
YesFreeOnClientDisconnect;
YesFreeOnServerDisconnect;
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 := 'FishingBot by NLObP v.0.10.7';
Result.Left := 397;
Result.Top := 233;
Result.Width := 620;
Result.Height := 730;
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;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 425;
Panel1.Height := 471;
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 := 0;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//=============== My Attr Panel ========
gbMyPanel:=TGroupBox.Create(Panel1);
gbMyPanel.parent:=Panel1;
gbMyPanel.caption:=' ['+Name+'] ';
gbMyPanel.ShowHint:=true;
gbMyPanel.Hint:=' ['+Name+'] ';
gbMyPanel.height:=115;
gbMyPanel.width:=210;
gbMyPanel.left:=1;
gbMyPanel.top:=420;
//......................................
//==================== HP ==============
gbMyHP:=TGroupBox.Create(gbMyPanel);
gbMyHP.parent:=gbMyPanel;
gbMyHP.Color:=clRed;
gbMyHP.caption:=' HP: 0/0 ';
gbMyHP.height:=33;
gbMyHP.width:=200;
gbMyHP.left:=5;
gbMyHP.top:=14;
//......................................
pbMyHP:=TProgressBar.Create(gbMyPanel);
pbMyHP.parent:=gbMyPanel;
pbMyHP.smooth:=true;
pbMyHP.max:=1200;
pbMyHP.min:=0;
pbMyHP.position:=0;
pbMyHP.step:=10;
pbMyHP.height:=16;
pbMyHP.width:=190;
pbMyHP.left:=10;
pbMyHP.top:=26;
//......................................
//==================== MP ==============
gbMyMP:=TGroupBox.Create(gbMyPanel);
gbMyMP.parent:=gbMyPanel;
gbMyMP.Color:=$FF7000;
gbMyMP.caption:=' MP: 0/0 ';
gbMyMP.height:=33;
gbMyMP.width:=200;
gbMyMP.left:=5;
gbMyMP.top:=50;
//......................................
pbMyMP:=TProgressBar.Create(gbMyPanel);
pbMyMP.parent:=gbMyPanel;
pbMyMP.smooth:=true;
pbMyMP.max:=1200;
pbMyMP.min:=0;
pbMyMP.position:=0;
pbMyMP.step:=10;
pbMyMP.height:=16;
pbMyMP.width:=190;
pbMyMP.left:=10;
pbMyMP.top:=62;
//......................................
//================== Target Info Panel =
gbTargetPanel:=TGroupBox.Create(Panel1);
gbTargetPanel.parent:=Panel1;
gbTargetPanel.caption:=' [TargetName] ';
gbTargetPanel.ShowHint:=true;
gbTargetPanel.Hint:=' [TargetName] ';
gbTargetPanel.height:=115;
gbTargetPanel.width:=210;
gbTargetPanel.left:=212;
gbTargetPanel.top:=420;
//......................................
//==================== HP ==============
gbTargetHP:=TGroupBox.Create(gbTargetPanel);
gbTargetHP.parent:=gbTargetPanel;
gbTargetHP.Color:=clRed;
gbTargetHP.caption:=' HP: 0/0 ';
gbTargetHP.height:=33;
gbTargetHP.width:=200;
gbTargetHP.left:=5;
gbTargetHP.top:=14;
//......................................
pbTargetHP:=TProgressBar.Create(gbTargetPanel);
pbTargetHP.parent:=gbTargetPanel;
pbTargetHP.smooth:=true;
pbTargetHP.max:=1200;
pbTargetHP.min:=0;
pbTargetHP.position:=0;
pbTargetHP.step:=10;
pbTargetHP.height:=16;
pbTargetHP.width:=190;
pbTargetHP.left:=10;
pbTargetHP.top:=26;
//......................................
//......................................
//GroupBox1
GroupBox1 := TGroupBox.Create(Result);
GroupBox1.Parent := Panel1;
GroupBox1.Left := 1;
GroupBox1.Top := 343;
GroupBox1.Width := 421;
GroupBox1.Height := 76;
GroupBox1.Visible := TRUE;
GroupBox1.Tag := 0;
GroupBox1.Enabled := TRUE;
GroupBox1.Hint := '';
GroupBox1.ShowHint := FALSE;
GroupBox1.Caption := 'Создание путей движения';
GroupBox1.Align := alNone;
GroupBox1.Color := clBtnFace;
GroupBox1.Font.Name := 'Tahoma';
GroupBox1.Font.Size := 8;
GroupBox1.Font.Color := clWindowText;
GroupBox1.Font.CharSet := 1;
GroupBox1.TabOrder := 0;
GroupBox1.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox1;
Label1.Left := 3;
Label1.Top := 18;
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;
//......................................
//......................................
//ButtonPathBack
ButtonPathBack := TButton.Create(Result);
ButtonPathBack.Parent := GroupBox1;
ButtonPathBack.Left := 265;
ButtonPathBack.Top := 42;
ButtonPathBack.Width := 75;
ButtonPathBack.Height := 25;
ButtonPathBack.Visible := TRUE;
ButtonPathBack.Tag := 0;
ButtonPathBack.Enabled := TRUE;
ButtonPathBack.Hint := '';
ButtonPathBack.ShowHint := FALSE;
ButtonPathBack.Caption := 'Back';
ButtonPathBack.Font.Name := 'Tahoma';
ButtonPathBack.Font.Size := 8;
ButtonPathBack.Font.Color := clWindowText;
ButtonPathBack.Font.CharSet := 1;
ButtonPathBack.TabOrder := 0;
ButtonPathBack.TabStop := TRUE;
ButtonPathBack.Cancel := FALSE;
ButtonPathBack.ModalResult := 0;
ButtonPathBack.OnClick := @ButtonPathBack_Click;
//......................................
//......................................
//ButtonPathStop
ButtonPathStop := TButton.Create(Result);
ButtonPathStop.Parent := GroupBox1;
ButtonPathStop.Left := 343;
ButtonPathStop.Top := 42;
ButtonPathStop.Width := 75;
ButtonPathStop.Height := 25;
ButtonPathStop.Visible := TRUE;
ButtonPathStop.Tag := 0;
ButtonPathStop.Enabled := TRUE;
ButtonPathStop.Hint := '';
ButtonPathStop.ShowHint := FALSE;
ButtonPathStop.Caption := 'Stop';
ButtonPathStop.Font.Name := 'Tahoma';
ButtonPathStop.Font.Size := 8;
ButtonPathStop.Font.Color := clWindowText;
ButtonPathStop.Font.CharSet := 1;
ButtonPathStop.TabOrder := 1;
ButtonPathStop.TabStop := TRUE;
ButtonPathStop.Cancel := FALSE;
ButtonPathStop.ModalResult := 0;
ButtonPathStop.OnClick := @ButtonPathStop_Click;
//......................................
//......................................
//ButtonPathGo
ButtonPathGo := TButton.Create(Result);
ButtonPathGo.Parent := GroupBox1;
ButtonPathGo.Left := 187;
ButtonPathGo.Top := 42;
ButtonPathGo.Width := 75;
ButtonPathGo.Height := 25;
ButtonPathGo.Visible := TRUE;
ButtonPathGo.Tag := 0;
ButtonPathGo.Enabled := TRUE;
ButtonPathGo.Hint := '';
ButtonPathGo.ShowHint := FALSE;
ButtonPathGo.Caption := 'Go';
ButtonPathGo.Font.Name := 'Tahoma';
ButtonPathGo.Font.Size := 8;
ButtonPathGo.Font.Color := clWindowText;
ButtonPathGo.Font.CharSet := 1;
ButtonPathGo.TabOrder := 2;
ButtonPathGo.TabStop := TRUE;
ButtonPathGo.Cancel := FALSE;
ButtonPathGo.ModalResult := 0;
ButtonPathGo.OnClick := @ButtonPathGo_Click;
//......................................
//......................................
//ButtonPathSave
ButtonPathSave := TButton.Create(Result);
ButtonPathSave.Parent := GroupBox1;
ButtonPathSave.Left := 101;
ButtonPathSave.Top := 42;
ButtonPathSave.Width := 75;
ButtonPathSave.Height := 25;
ButtonPathSave.Visible := TRUE;
ButtonPathSave.Tag := 0;
ButtonPathSave.Enabled := TRUE;
ButtonPathSave.Hint := '';
ButtonPathSave.ShowHint := FALSE;
ButtonPathSave.Caption := 'Save';
ButtonPathSave.Font.Name := 'Tahoma';
ButtonPathSave.Font.Size := 8;
ButtonPathSave.Font.Color := clWindowText;
ButtonPathSave.Font.CharSet := 1;
ButtonPathSave.TabOrder := 3;
ButtonPathSave.TabStop := TRUE;
ButtonPathSave.Cancel := FALSE;
ButtonPathSave.ModalResult := 0;
ButtonPathSave.OnClick := @ButtonPathSave_Click;
//......................................
//......................................
//ButtonPathRec
ButtonPathRec := TButton.Create(Result);
ButtonPathRec.Parent := GroupBox1;
ButtonPathRec.Left := 14;
ButtonPathRec.Top := 42;
ButtonPathRec.Width := 75;
ButtonPathRec.Height := 25;
ButtonPathRec.Visible := TRUE;
ButtonPathRec.Tag := 0;
ButtonPathRec.Enabled := TRUE;
ButtonPathRec.Hint := '';
ButtonPathRec.ShowHint := FALSE;
ButtonPathRec.Caption := 'Rec';
ButtonPathRec.Font.Name := 'Tahoma';
ButtonPathRec.Font.Size := 8;
ButtonPathRec.Font.Color := clWindowText;
ButtonPathRec.Font.CharSet := 1;
ButtonPathRec.TabOrder := 4;
ButtonPathRec.TabStop := TRUE;
ButtonPathRec.Cancel := FALSE;
ButtonPathRec.ModalResult := 0;
ButtonPathRec.OnClick := @ButtonPathRec_Click;
//......................................
//......................................
//EditPath
EditPath := TEdit.Create(Result);
EditPath.Parent := GroupBox1;
EditPath.Left := 67;
EditPath.Top := 15;
EditPath.Width := 109;
EditPath.Height := 21;
EditPath.Visible := TRUE;
EditPath.Tag := 0;
EditPath.Enabled := TRUE;
EditPath.Hint := 'Введи имя файла для сохранения пути';
EditPath.ShowHint := TRUE;
EditPath.Text := 'Mestolovli1';
EditPath.Font.Name := 'Tahoma';
EditPath.Font.Size := 8;
EditPath.Font.Color := clWindowText;
EditPath.Color := clWindow;
EditPath.TabOrder := 5;
EditPath.TabStop := TRUE;
EditPath.ReadOnly := FALSE;
EditPath.MaxLength := 0;
EditPath.AutoSize := TRUE;
// EditPath.OnChange := @EditPath_Change;
//......................................
//......................................
//ComboBoxPath
ComboBoxPath := TComboBox.Create(Result);
ComboBoxPath.Parent := GroupBox1;
ComboBoxPath.Left := 187;
ComboBoxPath.Top := 15;
ComboBoxPath.Width := 231;
ComboBoxPath.Height := 21;
ComboBoxPath.Visible := TRUE;
ComboBoxPath.Tag := 0;
ComboBoxPath.Enabled := TRUE;
ComboBoxPath.Hint := 'Выбери из списка путь для движения';
ComboBoxPath.ShowHint := TRUE;
ComboBoxPath.Text := 'Mestolovli1';
ComboBoxPath.Font.Name := 'Tahoma';
ComboBoxPath.Font.Size := 8;
ComboBoxPath.Font.Color := clWindowText;
ComboBoxPath.Color := clWindow;
ComboBoxPath.TabOrder := 6;
ComboBoxPath.TabStop := TRUE;
ComboBoxPath.Sorted := FALSE;
ComboBoxPath.ItemHeight := 13;
ComboBoxPath.OnChange := @ComboBoxPath_Change;
ComboBoxPath.Items.ADD('Mestolovli1');
ComboBoxPath.Items.ADD('Mestolovli2');
ComboBoxPath.Items.ADD('Mestolovli3');
ComboBoxPath.Items.ADD('MenayemMesto1');
ComboBoxPath.Items.ADD('MenayemMesto2');
ComboBoxPath.Items.ADD('MenayemMesto3');
ComboBoxPath.Items.ADD('Reposition1');
ComboBoxPath.Items.ADD('Reposition2');
ComboBoxPath.Items.ADD('Reposition3');
ComboBoxPath.Items.ADD('AfterDeath');
ComboBoxPath.ItemIndex := 0;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := -2;
GroupBox2.Width := 421;
GroupBox2.Height := 195;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Рыбалка';
GroupBox2.Align := alNone;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 1;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 400;
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 := 400;
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;
//......................................
//......................................
//Label5
Label5 := TLabel.Create(Result);
Label5.Parent := GroupBox2;
Label5.Left := 400;
Label5.Top := 67;
Label5.Width := 18;
Label5.Height := 13;
Label5.Visible := TRUE;
Label5.Tag := 0;
Label5.Enabled := TRUE;
Label5.Hint := '';
Label5.ShowHint := FALSE;
Label5.Caption := 'шт.';
Label5.Transparent := TRUE;
Label5.WordWrap := FALSE;
Label5.Alignment := taLeftJustify;
Label5.Layout := tlTop;
Label5.AutoSize := TRUE;
Label5.Align := alNone;
Label5.Font.Name := 'Tahoma';
Label5.Font.Size := 8;
Label5.Font.Color := clWindowText;
Label5.Color := clBtnFace;
//......................................
//......................................
//Label6
Label6 := TLabel.Create(Result);
Label6.Parent := GroupBox2;
Label6.Left := 400;
Label6.Top := 91;
Label6.Width := 18;
Label6.Height := 13;
Label6.Visible := TRUE;
Label6.Tag := 0;
Label6.Enabled := TRUE;
Label6.Hint := '';
Label6.ShowHint := FALSE;
Label6.Caption := 'шт.';
Label6.Transparent := TRUE;
Label6.WordWrap := FALSE;
Label6.Alignment := taLeftJustify;
Label6.Layout := tlTop;
Label6.AutoSize := TRUE;
Label6.Align := alNone;
Label6.Font.Name := 'Tahoma';
Label6.Font.Size := 8;
Label6.Font.Color := clWindowText;
Label6.Color := clBtnFace;
//......................................
//......................................
//Label7
Label7 := TLabel.Create(Result);
Label7.Parent := GroupBox2;
Label7.Left := 400;
Label7.Top := 116;
Label7.Width := 18;
Label7.Height := 13;
Label7.Visible := TRUE;
Label7.Tag := 0;
Label7.Enabled := TRUE;
Label7.Hint := '';
Label7.ShowHint := FALSE;
Label7.Caption := 'шт.';
Label7.Transparent := TRUE;
Label7.WordWrap := FALSE;
Label7.Alignment := taLeftJustify;
Label7.Layout := tlTop;
Label7.AutoSize := TRUE;
Label7.Align := alNone;
Label7.Font.Name := 'Tahoma';
Label7.Font.Size := 8;
Label7.Font.Color := clWindowText;
Label7.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 257;
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 := 333;
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;
//......................................
//......................................
//CheckBoxRod
CheckBoxRod := TCheckBox.Create(Result);
CheckBoxRod.Parent := GroupBox2;
CheckBoxRod.Left := 18;
CheckBoxRod.Top := 18;
CheckBoxRod.Width := 55;
CheckBoxRod.Height := 17;
CheckBoxRod.Visible := TRUE;
CheckBoxRod.Tag := 0;
CheckBoxRod.Enabled := TRUE;
CheckBoxRod.Hint := 'Поставить галочку если выбрали удочку';
CheckBoxRod.ShowHint := TRUE;
CheckBoxRod.Caption := 'Rod';
CheckBoxRod.Font.Name := 'Tahoma';
CheckBoxRod.Font.Size := 8;
CheckBoxRod.Font.Color := clWindowText;
CheckBoxRod.Color := clBtnFace;
CheckBoxRod.TabOrder := 0;
CheckBoxRod.TabStop := TRUE;
CheckBoxRod.Checked := FALSE;
CheckBoxRod.AllowGrayed := FALSE;
CheckBoxRod.State := cbUnchecked;
CheckBoxRod.OnClick := @CheckBoxRod_Click;
//......................................
//......................................
//ComboBoxRod
ComboBoxRod := TComboBox.Create(Result);
ComboBoxRod.Parent := GroupBox2;
ComboBoxRod.Left := 74;
ComboBoxRod.Top := 16;
ComboBoxRod.Width := 169;
ComboBoxRod.Height := 21;
ComboBoxRod.Visible := TRUE;
ComboBoxRod.Tag := 0;
ComboBoxRod.Enabled := TRUE;
ComboBoxRod.Hint := 'Выбери из списка удочку';
ComboBoxRod.ShowHint := TRUE;
ComboBoxRod.Text := 'ComboBoxRod';
ComboBoxRod.Font.Name := 'Tahoma';
ComboBoxRod.Font.Size := 8;
ComboBoxRod.Font.Color := clWindowText;
ComboBoxRod.Color := clWindow;
ComboBoxRod.TabOrder := 1;
ComboBoxRod.TabStop := TRUE;
ComboBoxRod.ItemIndex := -1;
ComboBoxRod.Sorted := FALSE;
ComboBoxRod.ItemHeight := 13;
ComboBoxRod.OnChange := @ComboBoxRod_Change;
//......................................
//......................................
//ComboBoxFShot
ComboBoxFShot := TComboBox.Create(Result);
ComboBoxFShot.Parent := GroupBox2;
ComboBoxFShot.Left := 74;
ComboBoxFShot.Top := 113;
ComboBoxFShot.Width := 169;
ComboBoxFShot.Height := 21;
ComboBoxFShot.Visible := TRUE;
ComboBoxFShot.Tag := 0;
ComboBoxFShot.Enabled := TRUE;
ComboBoxFShot.Hint := 'Выбери из списка фишиншоты';
ComboBoxFShot.ShowHint := TRUE;
ComboBoxFShot.Text := 'ComboBoxFShot';
ComboBoxFShot.Font.Name := 'Tahoma';
ComboBoxFShot.Font.Size := 8;
ComboBoxFShot.Font.Color := clWindowText;
ComboBoxFShot.Color := clWindow;
ComboBoxFShot.TabOrder := 2;
ComboBoxFShot.TabStop := TRUE;
ComboBoxFShot.ItemIndex := -1;
ComboBoxFShot.Sorted := FALSE;
ComboBoxFShot.ItemHeight := 13;
ComboBoxFShot.OnChange := @ComboBoxFShot_Change;
//......................................
//......................................
//ButtonFishingStart
ButtonFishingStart := TButton.Create(Result);
ButtonFishingStart.Parent := GroupBox2;
ButtonFishingStart.Left := 168;
ButtonFishingStart.Top := 159;
ButtonFishingStart.Width := 75;
ButtonFishingStart.Height := 25;
ButtonFishingStart.Visible := TRUE;
ButtonFishingStart.Tag := 0;
ButtonFishingStart.Enabled := TRUE;
ButtonFishingStart.Hint := 'Начать рыбалку';
ButtonFishingStart.ShowHint := TRUE;
ButtonFishingStart.Caption := 'Start';
ButtonFishingStart.Font.Name := 'Tahoma';
ButtonFishingStart.Font.Size := 8;
ButtonFishingStart.Font.Color := clWindowText;
ButtonFishingStart.Font.CharSet := 1;
ButtonFishingStart.TabOrder := 3;
ButtonFishingStart.TabStop := TRUE;
ButtonFishingStart.Cancel := FALSE;
ButtonFishingStart.ModalResult := 0;
ButtonFishingStart.OnClick := @ButtonFishingStart_Click;
//......................................
//......................................
//ButtonFishingStop
ButtonFishingStop := TButton.Create(Result);
ButtonFishingStop.Parent := GroupBox2;
ButtonFishingStop.Left := 306;
ButtonFishingStop.Top := 159;
ButtonFishingStop.Width := 75;
ButtonFishingStop.Height := 25;
ButtonFishingStop.Visible := TRUE;
ButtonFishingStop.Tag := 0;
ButtonFishingStop.Enabled := TRUE;
ButtonFishingStop.Hint := 'Остановить рыбалку';
ButtonFishingStop.ShowHint := TRUE;
ButtonFishingStop.Caption := 'Stop';
ButtonFishingStop.Font.Name := 'Tahoma';
ButtonFishingStop.Font.Size := 8;
ButtonFishingStop.Font.Color := clWindowText;
ButtonFishingStop.Font.CharSet := 1;
ButtonFishingStop.TabOrder := 4;
ButtonFishingStop.TabStop := TRUE;
ButtonFishingStop.Cancel := FALSE;
ButtonFishingStop.ModalResult := 0;
ButtonFishingStop.OnClick := @ButtonFishingStop_Click;
//......................................
//......................................
//CheckBoxLure
CheckBoxLure := TCheckBox.Create(Result);
CheckBoxLure.Parent := GroupBox2;
CheckBoxLure.Left := 18;
CheckBoxLure.Top := 41;
CheckBoxLure.Width := 55;
CheckBoxLure.Height := 23;
CheckBoxLure.Visible := TRUE;
CheckBoxLure.Tag := 0;
CheckBoxLure.Enabled := TRUE;
CheckBoxLure.Hint := 'Поставить галочку если выбрали крючёк';
CheckBoxLure.ShowHint := TRUE;
CheckBoxLure.Caption := 'Lure';
CheckBoxLure.Font.Name := 'Tahoma';
CheckBoxLure.Font.Size := 8;
CheckBoxLure.Font.Color := clWindowText;
CheckBoxLure.Color := clBtnFace;
CheckBoxLure.TabOrder := 5;
CheckBoxLure.TabStop := TRUE;
CheckBoxLure.Checked := FALSE;
CheckBoxLure.AllowGrayed := FALSE;
CheckBoxLure.State := cbUnchecked;
CheckBoxLure.OnClick := @CheckBoxLure_Click;
//......................................
//......................................
//CheckBoxWeapon
CheckBoxWeapon := TCheckBox.Create(Result);
CheckBoxWeapon.Parent := GroupBox2;
CheckBoxWeapon.Left := 18;
CheckBoxWeapon.Top := 64;
CheckBoxWeapon.Width := 55;
CheckBoxWeapon.Height := 22;
CheckBoxWeapon.Visible := TRUE;
CheckBoxWeapon.Tag := 0;
CheckBoxWeapon.Enabled := TRUE;
CheckBoxWeapon.Hint := 'Поставить галочку если выбрали оружие';
CheckBoxWeapon.ShowHint := TRUE;
CheckBoxWeapon.Caption := 'Weapon';
CheckBoxWeapon.Font.Name := 'Tahoma';
CheckBoxWeapon.Font.Size := 8;
CheckBoxWeapon.Font.Color := clWindowText;
CheckBoxWeapon.Color := clBtnFace;
CheckBoxWeapon.TabOrder := 6;
CheckBoxWeapon.TabStop := TRUE;
CheckBoxWeapon.Checked := FALSE;
CheckBoxWeapon.AllowGrayed := FALSE;
CheckBoxWeapon.State := cbUnchecked;
CheckBoxWeapon.OnClick := @CheckBoxWeapon_Click;
//......................................
//......................................
//CheckBoxShield
CheckBoxShield := TCheckBox.Create(Result);
CheckBoxShield.Parent := GroupBox2;
CheckBoxShield.Left := 18;
CheckBoxShield.Top := 92;
CheckBoxShield.Width := 52;
CheckBoxShield.Height := 17;
CheckBoxShield.Visible := TRUE;
CheckBoxShield.Tag := 0;
CheckBoxShield.Enabled := TRUE;
CheckBoxShield.Hint := 'Поставить галочку если выбрали щит';
CheckBoxShield.ShowHint := TRUE;
CheckBoxShield.Caption := 'Shield';
CheckBoxShield.Font.Name := 'Tahoma';
CheckBoxShield.Font.Size := 8;
CheckBoxShield.Font.Color := clWindowText;
CheckBoxShield.Color := clBtnFace;
CheckBoxShield.TabOrder := 7;
CheckBoxShield.TabStop := TRUE;
CheckBoxShield.Checked := FALSE;
CheckBoxShield.AllowGrayed := FALSE;
CheckBoxShield.State := cbUnchecked;
CheckBoxShield.OnClick := @CheckBoxShield_Click;
//......................................
//......................................
//CheckBoxFShot
CheckBoxFShot := TCheckBox.Create(Result);
CheckBoxFShot.Parent := GroupBox2;
CheckBoxFShot.Left := 18;
CheckBoxFShot.Top := 116;
CheckBoxFShot.Width := 52;
CheckBoxFShot.Height := 17;
CheckBoxFShot.Visible := TRUE;
CheckBoxFShot.Tag := 0;
CheckBoxFShot.Enabled := TRUE;
CheckBoxFShot.Hint := 'Поставить галочку если выбрали фишиншоты';
CheckBoxFShot.ShowHint := TRUE;
CheckBoxFShot.Caption := 'FShot';
CheckBoxFShot.Font.Name := 'Tahoma';
CheckBoxFShot.Font.Size := 8;
CheckBoxFShot.Font.Color := clWindowText;
CheckBoxFShot.Color := clBtnFace;
CheckBoxFShot.TabOrder := 8;
CheckBoxFShot.TabStop := TRUE;
CheckBoxFShot.Checked := FALSE;
CheckBoxFShot.AllowGrayed := FALSE;
CheckBoxFShot.State := cbUnchecked;
CheckBoxFShot.OnClick := @CheckBoxFShot_Click;
//......................................
//......................................
//ComboBoxLure
ComboBoxLure := TComboBox.Create(Result);
ComboBoxLure.Parent := GroupBox2;
ComboBoxLure.Left := 74;
ComboBoxLure.Top := 40;
ComboBoxLure.Width := 169;
ComboBoxLure.Height := 21;
ComboBoxLure.Visible := TRUE;
ComboBoxLure.Tag := 0;
ComboBoxLure.Enabled := TRUE;
ComboBoxLure.Hint := 'Выбери из списка крючёк';
ComboBoxLure.ShowHint := TRUE;
ComboBoxLure.Text := 'ComboBoxLure';
ComboBoxLure.Font.Name := 'Tahoma';
ComboBoxLure.Font.Size := 8;
ComboBoxLure.Font.Color := clWindowText;
ComboBoxLure.Color := clWindow;
ComboBoxLure.TabOrder := 9;
ComboBoxLure.TabStop := TRUE;
ComboBoxLure.ItemIndex := -1;
ComboBoxLure.Sorted := FALSE;
ComboBoxLure.ItemHeight := 13;
ComboBoxLure.OnChange := @ComboBoxLure_Change;
//......................................
//......................................
//ComboBoxWeapon
ComboBoxWeapon := TComboBox.Create(Result);
ComboBoxWeapon.Parent := GroupBox2;
ComboBoxWeapon.Left := 74;
ComboBoxWeapon.Top := 64;
ComboBoxWeapon.Width := 169;
ComboBoxWeapon.Height := 21;
ComboBoxWeapon.Visible := TRUE;
ComboBoxWeapon.Tag := 0;
ComboBoxWeapon.Enabled := TRUE;
ComboBoxWeapon.Hint := 'Выбери из списка оружие';
ComboBoxWeapon.ShowHint := TRUE;
ComboBoxWeapon.Text := 'ComboBoxWeapon';
ComboBoxWeapon.Font.Name := 'Tahoma';
ComboBoxWeapon.Font.Size := 8;
ComboBoxWeapon.Font.Color := clWindowText;
ComboBoxWeapon.Color := clWindow;
ComboBoxWeapon.TabOrder := 10;
ComboBoxWeapon.TabStop := TRUE;
ComboBoxWeapon.ItemIndex := -1;
ComboBoxWeapon.Sorted := FALSE;
ComboBoxWeapon.ItemHeight := 13;
ComboBoxWeapon.OnChange := @ComboBoxWeapon_Change;
//......................................
//......................................
//ComboBoxShield
ComboBoxShield := TComboBox.Create(Result);
ComboBoxShield.Parent := GroupBox2;
ComboBoxShield.Left := 74;
ComboBoxShield.Top := 88;
ComboBoxShield.Width := 169;
ComboBoxShield.Height := 21;
ComboBoxShield.Visible := TRUE;
ComboBoxShield.Tag := 0;
ComboBoxShield.Enabled := TRUE;
ComboBoxShield.Hint := 'Выбери из списка щит';
ComboBoxShield.ShowHint := TRUE;
ComboBoxShield.Text := 'ComboBoxShield';
ComboBoxShield.Font.Name := 'Tahoma';
ComboBoxShield.Font.Size := 8;
ComboBoxShield.Font.Color := clWindowText;
ComboBoxShield.Color := clWindow;
ComboBoxShield.TabOrder := 11;
ComboBoxShield.TabStop := TRUE;
ComboBoxShield.ItemIndex := -1;
ComboBoxShield.Sorted := FALSE;
ComboBoxShield.ItemHeight := 13;
ComboBoxShield.OnChange := @ComboBoxShield_Change;
//......................................
//......................................
//CheckBoxFO
CheckBoxFO := TCheckBox.Create(Result);
CheckBoxFO.Parent := GroupBox2;
CheckBoxFO.Left := 18;
CheckBoxFO.Top := 140;
CheckBoxFO.Width := 105;
CheckBoxFO.Height := 17;
CheckBoxFO.Visible := TRUE;
CheckBoxFO.Tag := 0;
CheckBoxFO.Enabled := TRUE;
CheckBoxFO.Hint := 'Поставить галочку если хотим преобразовывать масло';
CheckBoxFO.ShowHint := TRUE;
CheckBoxFO.Caption := 'FO->GFO->PFO';
CheckBoxFO.Font.Name := 'Tahoma';
CheckBoxFO.Font.Size := 8;
CheckBoxFO.Font.Color := clWindowText;
CheckBoxFO.Color := clBtnFace;
CheckBoxFO.TabOrder := 12;
CheckBoxFO.TabStop := TRUE;
CheckBoxFO.Checked := FALSE;
CheckBoxFO.AllowGrayed := FALSE;
CheckBoxFO.State := cbUnchecked;
CheckBoxFO.OnClick := @CheckBoxFO_Click;
//......................................
//......................................
//CheckBoxPU
CheckBoxPU := TCheckBox.Create(Result);
CheckBoxPU.Parent := GroupBox2;
CheckBoxPU.Left := 18;
CheckBoxPU.Top := 163;
CheckBoxPU.Width := 105;
CheckBoxPU.Height := 17;
CheckBoxPU.Visible := TRUE;
CheckBoxPU.Tag := 0;
CheckBoxPU.Enabled := TRUE;
CheckBoxPU.Hint := 'Поставить галочку если хотим потрошить улов';
CheckBoxPU.ShowHint := TRUE;
CheckBoxPU.Caption := 'Потрошить улов';
CheckBoxPU.Font.Name := 'Tahoma';
CheckBoxPU.Font.Size := 8;
CheckBoxPU.Font.Color := clWindowText;
CheckBoxPU.Color := clBtnFace;
CheckBoxPU.TabOrder := 13;
CheckBoxPU.TabStop := TRUE;
CheckBoxPU.Checked := FALSE;
CheckBoxPU.AllowGrayed := FALSE;
CheckBoxPU.State := cbUnchecked;
CheckBoxPU.OnClick := @CheckBoxPU_Click;
//......................................
//......................................
//EditRodVal
EditRodVal := TEdit.Create(Result);
EditRodVal.Parent := GroupBox2;
EditRodVal.Left := 325;
EditRodVal.Top := 16;
EditRodVal.Width := 72;
EditRodVal.Height := 21;
EditRodVal.Visible := TRUE;
EditRodVal.Tag := 0;
EditRodVal.Enabled := TRUE;
EditRodVal.Hint := '';
EditRodVal.ShowHint := FALSE;
EditRodVal.Text := '0';
EditRodVal.Font.Name := 'Tahoma';
EditRodVal.Font.Size := 8;
EditRodVal.Font.Color := clWindowText;
EditRodVal.Color := clWindow;
EditRodVal.TabOrder := 14;
EditRodVal.TabStop := TRUE;
EditRodVal.ReadOnly := TRUE;
EditRodVal.MaxLength := 0;
EditRodVal.AutoSize := TRUE;
//......................................
//......................................
//EditLureVal
EditLureVal := TEdit.Create(Result);
EditLureVal.Parent := GroupBox2;
EditLureVal.Left := 325;
EditLureVal.Top := 40;
EditLureVal.Width := 72;
EditLureVal.Height := 21;
EditLureVal.Visible := TRUE;
EditLureVal.Tag := 0;
EditLureVal.Enabled := TRUE;
EditLureVal.Hint := '';
EditLureVal.ShowHint := FALSE;
EditLureVal.Text := '0';
EditLureVal.Font.Name := 'Tahoma';
EditLureVal.Font.Size := 8;
EditLureVal.Font.Color := clWindowText;
EditLureVal.Color := clWindow;
EditLureVal.TabOrder := 15;
EditLureVal.TabStop := TRUE;
EditLureVal.ReadOnly := TRUE;
EditLureVal.MaxLength := 0;
EditLureVal.AutoSize := TRUE;
//......................................
//......................................
//EditWeaponVal
EditWeaponVal := TEdit.Create(Result);
EditWeaponVal.Parent := GroupBox2;
EditWeaponVal.Left := 325;
EditWeaponVal.Top := 64;
EditWeaponVal.Width := 72;
EditWeaponVal.Height := 21;
EditWeaponVal.Visible := TRUE;
EditWeaponVal.Tag := 0;
EditWeaponVal.Enabled := TRUE;
EditWeaponVal.Hint := '';
EditWeaponVal.ShowHint := FALSE;
EditWeaponVal.Text := '0';
EditWeaponVal.Font.Name := 'Tahoma';
EditWeaponVal.Font.Size := 8;
EditWeaponVal.Font.Color := clWindowText;
EditWeaponVal.Color := clWindow;
EditWeaponVal.TabOrder := 16;
EditWeaponVal.TabStop := TRUE;
EditWeaponVal.ReadOnly := TRUE;
EditWeaponVal.MaxLength := 0;
EditWeaponVal.AutoSize := TRUE;
//......................................
//......................................
//Edit6
EditShieldVal := TEdit.Create(Result);
EditShieldVal.Parent := GroupBox2;
EditShieldVal.Left := 325;
EditShieldVal.Top := 88;
EditShieldVal.Width := 72;
EditShieldVal.Height := 21;
EditShieldVal.Visible := TRUE;
EditShieldVal.Tag := 0;
EditShieldVal.Enabled := TRUE;
EditShieldVal.Hint := '';
EditShieldVal.ShowHint := FALSE;
EditShieldVal.Text := '0';
EditShieldVal.Font.Name := 'Tahoma';
EditShieldVal.Font.Size := 8;
EditShieldVal.Font.Color := clWindowText;
EditShieldVal.Color := clWindow;
EditShieldVal.TabOrder := 17;
EditShieldVal.TabStop := TRUE;
EditShieldVal.ReadOnly := TRUE;
EditShieldVal.MaxLength := 0;
EditShieldVal.AutoSize := TRUE;
//......................................
//......................................
//Edit7
EditFShotVal := TEdit.Create(Result);
EditFShotVal.Parent := GroupBox2;
EditFShotVal.Left := 325;
EditFShotVal.Top := 113;
EditFShotVal.Width := 72;
EditFShotVal.Height := 21;
EditFShotVal.Visible := TRUE;
EditFShotVal.Tag := 0;
EditFShotVal.Enabled := TRUE;
EditFShotVal.Hint := '';
EditFShotVal.ShowHint := FALSE;
EditFShotVal.Text := '0';
EditFShotVal.Font.Name := 'Tahoma';
EditFShotVal.Font.Size := 8;
EditFShotVal.Font.Color := clWindowText;
EditFShotVal.Color := clWindow;
EditFShotVal.TabOrder := 18;
EditFShotVal.TabStop := TRUE;
EditFShotVal.ReadOnly := TRUE;
EditFShotVal.MaxLength := 0;
EditFShotVal.AutoSize := TRUE;
//......................................
//......................................
//EditLureOID
EditLureOID := TEdit.Create(Result);
EditLureOID.Parent := GroupBox2;
EditLureOID.Left := 248;
EditLureOID.Top := 40;
EditLureOID.Width := 72;
EditLureOID.Height := 21;
EditLureOID.Visible := TRUE;
EditLureOID.Tag := 0;
EditLureOID.Enabled := TRUE;
EditLureOID.Hint := '';
EditLureOID.ShowHint := FALSE;
EditLureOID.Text := '0';
EditLureOID.Font.Name := 'Tahoma';
EditLureOID.Font.Size := 8;
EditLureOID.Font.Color := clWindowText;
EditLureOID.Color := clWindow;
EditLureOID.TabOrder := 19;
EditLureOID.TabStop := TRUE;
EditLureOID.ReadOnly := TRUE;
EditLureOID.MaxLength := 0;
EditLureOID.AutoSize := TRUE;
//......................................
//......................................
//EditWeaponOID
EditWeaponOID := TEdit.Create(Result);
EditWeaponOID.Parent := GroupBox2;
EditWeaponOID.Left := 248;
EditWeaponOID.Top := 64;
EditWeaponOID.Width := 72;
EditWeaponOID.Height := 21;
EditWeaponOID.Visible := TRUE;
EditWeaponOID.Tag := 0;
EditWeaponOID.Enabled := TRUE;
EditWeaponOID.Hint := '';
EditWeaponOID.ShowHint := FALSE;
EditWeaponOID.Text := '0';
EditWeaponOID.Font.Name := 'Tahoma';
EditWeaponOID.Font.Size := 8;
EditWeaponOID.Font.Color := clWindowText;
EditWeaponOID.Color := clWindow;
EditWeaponOID.TabOrder := 20;
EditWeaponOID.TabStop := TRUE;
EditWeaponOID.ReadOnly := TRUE;
EditWeaponOID.MaxLength := 0;
EditWeaponOID.AutoSize := TRUE;
//......................................
//......................................
//EditShieldOID
EditShieldOID := TEdit.Create(Result);
EditShieldOID.Parent := GroupBox2;
EditShieldOID.Left := 248;
EditShieldOID.Top := 88;
EditShieldOID.Width := 72;
EditShieldOID.Height := 21;
EditShieldOID.Visible := TRUE;
EditShieldOID.Tag := 0;
EditShieldOID.Enabled := TRUE;
EditShieldOID.Hint := '';
EditShieldOID.ShowHint := FALSE;
EditShieldOID.Text := '0';
EditShieldOID.Font.Name := 'Tahoma';
EditShieldOID.Font.Size := 8;
EditShieldOID.Font.Color := clWindowText;
EditShieldOID.Color := clWindow;
EditShieldOID.TabOrder := 21;
EditShieldOID.TabStop := TRUE;
EditShieldOID.ReadOnly := TRUE;
EditShieldOID.MaxLength := 0;
EditShieldOID.AutoSize := TRUE;
//......................................
//......................................
//EditFShotOID
EditFShotOID := TEdit.Create(Result);
EditFShotOID.Parent := GroupBox2;
EditFShotOID.Left := 248;
EditFShotOID.Top := 113;
EditFShotOID.Width := 72;
EditFShotOID.Height := 21;
EditFShotOID.Visible := TRUE;
EditFShotOID.Tag := 0;
EditFShotOID.Enabled := TRUE;
EditFShotOID.Hint := '';
EditFShotOID.ShowHint := FALSE;
EditFShotOID.Text := '0';
EditFShotOID.Font.Name := 'Tahoma';
EditFShotOID.Font.Size := 8;
EditFShotOID.Font.Color := clWindowText;
EditFShotOID.Color := clWindow;
EditFShotOID.TabOrder := 22;
EditFShotOID.TabStop := TRUE;
EditFShotOID.ReadOnly := TRUE;
EditFShotOID.MaxLength := 0;
EditFShotOID.AutoSize := TRUE;
//......................................
//......................................
//EditRodOID
EditRodOID := TEdit.Create(Result);
EditRodOID.Parent := GroupBox2;
EditRodOID.Left := 248;
EditRodOID.Top := 16;
EditRodOID.Width := 72;
EditRodOID.Height := 21;
EditRodOID.Visible := TRUE;
EditRodOID.Tag := 0;
EditRodOID.Enabled := TRUE;
EditRodOID.Hint := '';
EditRodOID.ShowHint := FALSE;
EditRodOID.Text := '0';
EditRodOID.Font.Name := 'Tahoma';
EditRodOID.Font.Size := 8;
EditRodOID.Font.Color := clWindowText;
EditRodOID.Color := clWindow;
EditRodOID.TabOrder := 23;
EditRodOID.TabStop := TRUE;
EditRodOID.ReadOnly := TRUE;
EditRodOID.MaxLength := 0;
EditRodOID.AutoSize := TRUE;
//......................................
//......................................
//GroupBox3
GroupBox3 := TGroupBox.Create(Result);
GroupBox3.Parent := Panel1;
GroupBox3.Left := 1;
GroupBox3.Top := 270;
GroupBox3.Width := 421;
GroupBox3.Height := 75;
GroupBox3.Visible := TRUE;
GroupBox3.Tag := 0;
GroupBox3.Enabled := TRUE;
GroupBox3.Hint := '';
GroupBox3.ShowHint := FALSE;
GroupBox3.Caption := 'Продать/купить';
GroupBox3.Align := alNone;
GroupBox3.Color := clBtnFace;
GroupBox3.Font.Name := 'Tahoma';
GroupBox3.Font.Size := 8;
GroupBox3.Font.Color := clWindowText;
GroupBox3.Font.CharSet := 1;
GroupBox3.TabOrder := 2;
GroupBox3.TabStop := FALSE;
//......................................
//......................................
//Label8
Label8 := TLabel.Create(Result);
Label8.Parent := GroupBox3;
Label8.Left := 18;
Label8.Top := 44;
Label8.Width := 77;
Label8.Height := 13;
Label8.Visible := TRUE;
Label8.Tag := 0;
Label8.Enabled := TRUE;
Label8.Hint := '';
Label8.ShowHint := FALSE;
Label8.Caption := 'Покупать Lure:';
Label8.Transparent := TRUE;
Label8.WordWrap := FALSE;
Label8.Alignment := taLeftJustify;
Label8.Layout := tlTop;
Label8.AutoSize := TRUE;
Label8.Align := alNone;
Label8.Font.Name := 'Tahoma';
Label8.Font.Size := 8;
Label8.Font.Color := clWindowText;
Label8.Color := clBtnFace;
//......................................
//......................................
//Label9
Label9 := TLabel.Create(Result);
Label9.Parent := GroupBox3;
Label9.Left := 175;
Label9.Top := 44;
Label9.Width := 18;
Label9.Height := 13;
Label9.Visible := TRUE;
Label9.Tag := 0;
Label9.Enabled := TRUE;
Label9.Hint := '';
Label9.ShowHint := FALSE;
Label9.Caption := 'шт.';
Label9.Transparent := TRUE;
Label9.WordWrap := FALSE;
Label9.Alignment := taLeftJustify;
Label9.Layout := tlTop;
Label9.AutoSize := TRUE;
Label9.Align := alNone;
Label9.Font.Name := 'Tahoma';
Label9.Font.Size := 8;
Label9.Font.Color := clWindowText;
Label9.Color := clBtnFace;
//......................................
//......................................
//Label17
Label17 := TLabel.Create(Result);
Label17.Parent := GroupBox3;
Label17.Left := 257;
Label17.Top := 3;
Label17.Width := 29;
Label17.Height := 13;
Label17.Visible := TRUE;
Label17.Tag := 0;
Label17.Enabled := TRUE;
Label17.Hint := '';
Label17.ShowHint := FALSE;
Label17.Caption := 'NpcOID';
Label17.Transparent := TRUE;
Label17.WordWrap := FALSE;
Label17.Alignment := taLeftJustify;
Label17.Layout := tlTop;
Label17.AutoSize := TRUE;
Label17.Align := alNone;
Label17.Font.Name := 'Tahoma';
Label17.Font.Size := 8;
Label17.Font.Color := clWindowText;
Label17.Color := clBtnFace;
//......................................
//......................................
//CheckBoxFisherman
CheckBoxFisherman := TCheckBox.Create(Result);
CheckBoxFisherman.Parent := GroupBox3;
CheckBoxFisherman.Left := 18;
CheckBoxFisherman.Top := 18;
CheckBoxFisherman.Width := 66;
CheckBoxFisherman.Height := 17;
CheckBoxFisherman.Visible := TRUE;
CheckBoxFisherman.Tag := 0;
CheckBoxFisherman.Enabled := TRUE;
CheckBoxFisherman.Hint := 'Поставить галочку если выбрали продавца';
CheckBoxFisherman.ShowHint := TRUE;
CheckBoxFisherman.Caption := 'Fisherman';
CheckBoxFisherman.Font.Name := 'Tahoma';
CheckBoxFisherman.Font.Size := 8;
CheckBoxFisherman.Font.Color := clWindowText;
CheckBoxFisherman.Color := clBtnFace;
CheckBoxFisherman.TabOrder := 0;
CheckBoxFisherman.TabStop := TRUE;
CheckBoxFisherman.Checked := FALSE;
CheckBoxFisherman.AllowGrayed := FALSE;
CheckBoxFisherman.State := cbUnchecked;
CheckBoxFisherman.OnClick := @CheckBoxFisherman_Click;
//......................................
//......................................
//ComboBoxFisherman
ComboBoxFisherman := TComboBox.Create(Result);
ComboBoxFisherman.Parent := GroupBox3;
ComboBoxFisherman.Left := 90;
ComboBoxFisherman.Top := 16;
ComboBoxFisherman.Width := 144;
ComboBoxFisherman.Height := 21;
ComboBoxFisherman.Visible := TRUE;
ComboBoxFisherman.Tag := 0;
ComboBoxFisherman.Enabled := TRUE;
ComboBoxFisherman.Hint := 'Выбери из списка продавца';
ComboBoxFisherman.ShowHint := TRUE;
ComboBoxFisherman.Text := 'ComboBoxFisherman';
ComboBoxFisherman.Font.Name := 'Tahoma';
ComboBoxFisherman.Font.Size := 8;
ComboBoxFisherman.Font.Color := clWindowText;
ComboBoxFisherman.Color := clWindow;
ComboBoxFisherman.TabOrder := 1;
ComboBoxFisherman.TabStop := TRUE;
ComboBoxFisherman.ItemIndex := -1;
ComboBoxFisherman.Sorted := FALSE;
ComboBoxFisherman.ItemHeight := 13;
ComboBoxFisherman.OnChange := @ComboBoxFisherman_Change;
//......................................
//......................................
//EditFishermanOID
EditFishermanOID := TEdit.Create(Result);
EditFishermanOID.Parent := GroupBox3;
EditFishermanOID.Left := 240;
EditFishermanOID.Top := 16;
EditFishermanOID.Width := 72;
EditFishermanOID.Height := 21;
EditFishermanOID.Visible := TRUE;
EditFishermanOID.Tag := 0;
EditFishermanOID.Enabled := TRUE;
EditFishermanOID.Hint := '';
EditFishermanOID.ShowHint := FALSE;
EditFishermanOID.Text := '0';
EditFishermanOID.Font.Name := 'Tahoma';
EditFishermanOID.Font.Size := 8;
EditFishermanOID.Font.Color := clWindowText;
EditFishermanOID.Color := clWindow;
EditFishermanOID.TabOrder := 2;
EditFishermanOID.TabStop := TRUE;
EditFishermanOID.ReadOnly := TRUE;
EditFishermanOID.MaxLength := 0;
EditFishermanOID.AutoSize := TRUE;
// EditFishermanOID.OnClick := @EditFishermanOID_Click;
//......................................
//......................................
//EditLure
EditLure := TEdit.Create(Result);
EditLure.Parent := GroupBox3;
EditLure.Left := 97;
EditLure.Top := 41;
EditLure.Width := 72;
EditLure.Height := 21;
EditLure.Visible := TRUE;
EditLure.Tag := 0;
EditLure.Enabled := TRUE;
EditLure.Hint := 'Введи количество крючков для закупки';
EditLure.ShowHint := TRUE;
EditLure.Text := '300';
EditLure.Font.Name := 'Tahoma';
EditLure.Font.Size := 8;
EditLure.Font.Color := clWindowText;
EditLure.Color := clWindow;
EditLure.TabOrder := 3;
EditLure.TabStop := TRUE;
EditLure.ReadOnly := FALSE;
EditLure.MaxLength := 0;
EditLure.AutoSize := TRUE;
// EditLure.OnClick := @EditLure_Click;
EditLure.OnEnter := @EditLure_Change;
//......................................
//......................................
//GroupBox4
GroupBox4 := TGroupBox.Create(Result);
GroupBox4.Parent := Panel1;
GroupBox4.Left := 1;
GroupBox4.Top := 194;
GroupBox4.Width := 421;
GroupBox4.Height := 78;
GroupBox4.Visible := TRUE;
GroupBox4.Tag := 0;
GroupBox4.Enabled := TRUE;
GroupBox4.Hint := '';
GroupBox4.ShowHint := FALSE;
GroupBox4.Caption := 'Лечение';
GroupBox4.Align := alNone;
GroupBox4.Color := clBtnFace;
GroupBox4.Font.Name := 'Tahoma';
GroupBox4.Font.Size := 8;
GroupBox4.Font.Color := clWindowText;
GroupBox4.Font.CharSet := 1;
GroupBox4.TabOrder := 3;
GroupBox4.TabStop := FALSE;
//......................................
//......................................
//Label10
Label10 := TLabel.Create(Result);
Label10.Parent := GroupBox4;
Label10.Left := 18;
Label10.Top := 44;
Label10.Width := 69;
Label10.Height := 13;
Label10.Visible := TRUE;
Label10.Tag := 0;
Label10.Enabled := TRUE;
Label10.Hint := '';
Label10.ShowHint := FALSE;
Label10.Caption := 'Лечиться при';
Label10.Transparent := TRUE;
Label10.WordWrap := FALSE;
Label10.Alignment := taLeftJustify;
Label10.Layout := tlTop;
Label10.AutoSize := TRUE;
Label10.Align := alNone;
Label10.Font.Name := 'Tahoma';
Label10.Font.Size := 8;
Label10.Font.Color := clWindowText;
Label10.Color := clBtnFace;
//......................................
//......................................
//Label11
Label11 := TLabel.Create(Result);
Label11.Parent := GroupBox4;
Label11.Left := 400;
Label11.Top := 17;
Label11.Width := 18;
Label11.Height := 13;
Label11.Visible := TRUE;
Label11.Tag := 0;
Label11.Enabled := TRUE;
Label11.Hint := '';
Label11.ShowHint := FALSE;
Label11.Caption := 'шт.';
Label11.Transparent := TRUE;
Label11.WordWrap := FALSE;
Label11.Alignment := taLeftJustify;
Label11.Layout := tlTop;
Label11.AutoSize := TRUE;
Label11.Align := alNone;
Label11.Font.Name := 'Tahoma';
Label11.Font.Size := 8;
Label11.Font.Color := clWindowText;
Label11.Color := clBtnFace;
//......................................
//......................................
//Label3
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox4;
Label3.Left := 171;
Label3.Top := 44;
Label3.Width := 11;
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;
//......................................
//......................................
//Label14
Label14 := TLabel.Create(Result);
Label14.Parent := GroupBox4;
Label14.Left := 333;
Label14.Top := 3;
Label14.Width := 35;
Label14.Height := 13;
Label14.Visible := TRUE;
Label14.Tag := 0;
Label14.Enabled := TRUE;
Label14.Hint := '';
Label14.ShowHint := FALSE;
Label14.Caption := 'Кол-во';
Label14.Transparent := TRUE;
Label14.WordWrap := FALSE;
Label14.Alignment := taLeftJustify;
Label14.Layout := tlTop;
Label14.AutoSize := TRUE;
Label14.Align := alNone;
Label14.Font.Name := 'Tahoma';
Label14.Font.Size := 8;
Label14.Font.Color := clWindowText;
Label14.Color := clBtnFace;
//......................................
//......................................
//Label15
Label15 := TLabel.Create(Result);
Label15.Parent := GroupBox4;
Label15.Left := 257;
Label15.Top := 3;
Label15.Width := 33;
Label15.Height := 13;
Label15.Visible := TRUE;
Label15.Tag := 0;
Label15.Enabled := TRUE;
Label15.Hint := '';
Label15.ShowHint := FALSE;
Label15.Caption := 'ItemID';
Label15.Transparent := TRUE;
Label15.WordWrap := FALSE;
Label15.Alignment := taLeftJustify;
Label15.Layout := tlTop;
Label15.AutoSize := TRUE;
Label15.Align := alNone;
Label15.Font.Name := 'Tahoma';
Label15.Font.Size := 8;
Label15.Font.Color := clWindowText;
Label15.Color := clBtnFace;
//......................................
//......................................
//CheckBoxHPotion
CheckBoxHPotion := TCheckBox.Create(Result);
CheckBoxHPotion.Parent := GroupBox4;
CheckBoxHPotion.Left := 18;
CheckBoxHPotion.Top := 16;
CheckBoxHPotion.Width := 52;
CheckBoxHPotion.Height := 17;
CheckBoxHPotion.Visible := TRUE;
CheckBoxHPotion.Tag := 0;
CheckBoxHPotion.Enabled := TRUE;
CheckBoxHPotion.Hint := 'Поставить галочку если выбрали бутылки лечения';
CheckBoxHPotion.ShowHint := TRUE;
CheckBoxHPotion.Caption := 'HPotion';
CheckBoxHPotion.Font.Name := 'Tahoma';
CheckBoxHPotion.Font.Size := 8;
CheckBoxHPotion.Font.Color := clWindowText;
CheckBoxHPotion.Color := clBtnFace;
CheckBoxHPotion.TabOrder := 0;
CheckBoxHPotion.TabStop := TRUE;
CheckBoxHPotion.Checked := FALSE;
CheckBoxHPotion.AllowGrayed := FALSE;
CheckBoxHPotion.State := cbUnchecked;
CheckBoxHPotion.OnClick := @CheckBoxHPotion_Click;
//......................................
//......................................
//EditHealt
EditHealt := TEdit.Create(Result);
EditHealt.Parent := GroupBox4;
EditHealt.Left := 93;
EditHealt.Top := 41;
EditHealt.Width := 72;
EditHealt.Height := 21;
EditHealt.Visible := TRUE;
EditHealt.Tag := 0;
EditHealt.Enabled := TRUE;
EditHealt.Hint := 'Введи процент при котором начинать пить бутылки';
EditHealt.ShowHint := TRUE;
EditHealt.Text := '80';
EditHealt.Font.Name := 'Tahoma';
EditHealt.Font.Size := 8;
EditHealt.Font.Color := clWindowText;
EditHealt.Color := clWindow;
EditHealt.TabOrder := 1;
EditHealt.TabStop := TRUE;
EditHealt.ReadOnly := FALSE;
EditHealt.MaxLength := 0;
EditHealt.AutoSize := TRUE;
// EditHealt.OnClick := @EditHealt_Click;
EditHealt.OnEnter := @EditHealt_Change;
//......................................
//......................................
//ComboBoxHPotion
ComboBoxHPotion := TComboBox.Create(Result);
ComboBoxHPotion.Parent := GroupBox4;
ComboBoxHPotion.Left := 74;
ComboBoxHPotion.Top := 14;
ComboBoxHPotion.Width := 169;
ComboBoxHPotion.Height := 21;
ComboBoxHPotion.Visible := TRUE;
ComboBoxHPotion.Tag := 0;
ComboBoxHPotion.Enabled := TRUE;
ComboBoxHPotion.Hint := 'Выбери из списка бутылку лечения';
ComboBoxHPotion.ShowHint := TRUE;
ComboBoxHPotion.Text := 'ComboBoxHPotion';
ComboBoxHPotion.Font.Name := 'Tahoma';
ComboBoxHPotion.Font.Size := 8;
ComboBoxHPotion.Font.Color := clWindowText;
ComboBoxHPotion.Color := clWindow;
ComboBoxHPotion.TabOrder := 2;
ComboBoxHPotion.TabStop := TRUE;
ComboBoxHPotion.ItemIndex := -1;
ComboBoxHPotion.Sorted := FALSE;
ComboBoxHPotion.ItemHeight := 13;
ComboBoxHPotion.OnChange := @ComboBoxHPotion_Change;
//......................................
//......................................
//EditHpotionOID
EditHpotionOID := TEdit.Create(Result);
EditHpotionOID.Parent := GroupBox4;
EditHpotionOID.Left := 248;
EditHpotionOID.Top := 14;
EditHpotionOID.Width := 72;
EditHpotionOID.Height := 21;
EditHpotionOID.Visible := TRUE;
EditHpotionOID.Tag := 0;
EditHpotionOID.Enabled := TRUE;
EditHpotionOID.Hint := '';
EditHpotionOID.ShowHint := FALSE;
EditHpotionOID.Text := '0';
EditHpotionOID.Font.Name := 'Tahoma';
EditHpotionOID.Font.Size := 8;
EditHpotionOID.Font.Color := clWindowText;
EditHpotionOID.Color := clWindow;
EditHpotionOID.TabOrder := 3;
EditHpotionOID.TabStop := TRUE;
EditHpotionOID.ReadOnly := TRUE;
EditHpotionOID.MaxLength := 0;
EditHpotionOID.AutoSize := TRUE;
//......................................
//......................................
//EditHPotionVal
EditHPotionVal := TEdit.Create(Result);
EditHPotionVal.Parent := GroupBox4;
EditHPotionVal.Left := 325;
EditHPotionVal.Top := 14;
EditHPotionVal.Width := 72;
EditHPotionVal.Height := 21;
EditHPotionVal.Visible := TRUE;
EditHPotionVal.Tag := 0;
EditHPotionVal.Enabled := TRUE;
EditHPotionVal.Hint := '';
EditHPotionVal.ShowHint := FALSE;
EditHPotionVal.Text := '0';
EditHPotionVal.Font.Name := 'Tahoma';
EditHPotionVal.Font.Size := 8;
EditHPotionVal.Font.Color := clWindowText;
EditHPotionVal.Color := clWindow;
EditHPotionVal.TabOrder := 4;
EditHPotionVal.TabStop := TRUE;
EditHPotionVal.ReadOnly := TRUE;
EditHPotionVal.MaxLength := 0;
EditHPotionVal.AutoSize := TRUE;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 428;
Stats.Top := 0;
Stats.Width := 185;
Stats.Height := 471;
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 := 1;
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 := 474;
Msg.Width := 613;
Msg.Height := 112;
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 := 2;
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;
//......................................
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 471;
Splitter1.Width := 613;
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 := 425;
Splitter2.Top := 0;
Splitter2.Width := 3;
Splitter2.Height := 471;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
Result.Show;
msg.Lines.Add('Автоматизация ловли рыбы by NLObP!');
msg.Lines.Add('Для инициализации скрипта снять/одеть удочку, крючки!!!');
end;
//............................................
//************************************************** *************
//Обработчики событий для элементов управления на форме
//************************************************** *************
//ButtonPathBack
procedure ButtonPathBack_Click(Sender: TButton);
//Event : OnClick
begin
//идти в начало пути
RecordPathFileName:=EditPath.text;
try
MovePath.LoadFromFile(RecordFilesPath+RecordPathFi leName+RecordFileExt);
except
SendMsg('файл пути не найден');
exit;
end;
cmd:='move'; GoToPath(back);
end;
//......................................
//......................................
//ButtonPathStop
procedure ButtonPathStop_Click(Sender: TButton);
//Event : OnClick
begin
MoveToPathEnabled:=False;
end;
//......................................
//......................................
//ButtonPathGo
procedure ButtonPathGo_Click(Sender: TButton);
//Event : OnClick
begin
//идти в конец пути
RecordPathFileName:=EditPath.text;
try
MovePath.LoadFromFile(RecordFilesPath+RecordPathFi leName+RecordFileExt);
except
SendMsg('файл пути не найден');
exit;
end;
cmd:='move'; GoToPath(go);
end;
//......................................
//......................................
//ButtonPathSave
procedure ButtonPathSave_Click(Sender: TButton);
//Event : OnClick
begin
StopRecord;
end;
//......................................
//......................................
//ButtonPathRec
procedure ButtonPathRec_Click(Sender: TButton);
//Event : OnClick
begin
RecordPathFileName:=EditPath.text;
StartRecord;
end;
//......................................
//......................................
//EditPath
procedure EditPath_Change(Sender: TEdit);
//Event : OnChange
begin
RecordPathFileName:=EditPath.text;
end;
//......................................
//......................................
//ComboBoxPath
procedure ComboBoxPath_Change(Sender: TComboBox);
//Event : OnChange
begin
EditPath.text:=ComboBoxPath.Items.Strings[ComboBoxPath.ItemIndex];
end;
//......................................
//......................................
//ButtonFishingStart
procedure ButtonFishingStart_Click(Sender: TButton);
//Event : OnClick
begin
if not status then begin
msg.Lines.Add('Скрипт не инициализирован...');
exit;
end;
if not isEquip(MyRodID) then giverod;
if not isEquip(MyLureID) then givelure;
fishin.enabled:=true;
stop:=false; //нажали Sart
msg.Lines.Add('Начнем рыбачить...');
end;
//......................................
//......................................
//ButtonFishingStop
procedure ButtonFishingStop_Click(Sender: TButton);
//Event : OnClick
begin
// Status:=false;
fishin.enabled:=false;
trade1.enabled:=false;
CreatePFO.enabled:=false;
MoveTimer.Enabled:=False;
MoveToPathEnabled:=False;
stop:=true;
if isEquip(MyRodID) and isFishing then MagicSkillUse(fish);
isFishing:=false; //ловим?
msg.Lines.Add('Останавливаем всё! Хватит на сегодня!');
end;
//......................................
//......................................
//CheckBoxRod
procedure CheckBoxRod_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxRod.Checked
then begin
ComboBoxRod.Enabled:=false; //выключаем
end else begin
MyRodID:=0; //отмена
RodOID:=0;
ComboBoxRod.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('14');/////////////////////////////////////////////////////////////////////////////////////////////////////////
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxRod
procedure ComboBoxRod_Change(Sender: TComboBox);
//Event : OnChange
begin
RodOID:=ItemBase[1,ComboBoxRod.ItemIndex+1];
myRodID:=ItemBase[2,ComboBoxRod.ItemIndex+1];
EditRodOID.Text:=Inttostr(myRodID);
EditRodVal.text:=inttostr(sumitem(myRodID));
end;
//......................................
//......................................
//CheckBoxLure
procedure CheckBoxLure_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxLure.Checked
then begin
ComboBoxLure.Enabled:=false; //выключаем
TradeBuyItem[0]:=MyLureID; //что будем покупать?
end else begin
MyLureID:=0; //отмена
LureOID:=0;
TradeBuyItem[0]:=MyLureID; //что будем покупать?
ComboBoxLure.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('14');//////////////////////////////////////////////////////////////////////////////////////////
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxLure
procedure ComboBoxLure_Change(Sender: TComboBox);
//Event : OnChange
begin
LureOID:=ItemBase[1,ComboBoxLure.ItemIndex+1];
myLureID:=ItemBase[2,ComboBoxLure.ItemIndex+1];
EditLureOID.Text:=Inttostr(myLureID);
EditLureVal.text:=inttostr(sumitem(myLureID));
end;
//......................................
//......................................
//CheckBoxWeapon
procedure CheckBoxWeapon_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxWeapon.Checked
then begin
ComboBoxWeapon.Enabled:=false; //выключаем
WeaponUse1:=true;
end else begin
WeaponUse1:=false;
MyWeaponID:=0; //отмена
WeaponOID:=0;
ComboBoxWeapon.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('14');/////////////////////////////////////////////////////////////////////////////////////
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxWeapon
procedure ComboBoxWeapon_Change(Sender: TComboBox);
//Event : OnChange
begin
WeaponOID:=ItemBase[1,ComboBoxWeapon.ItemIndex+1];
myWeaponID:=ItemBase[2,ComboBoxWeapon.ItemIndex+1];
EditWeaponOID.Text:=Inttostr(myWeaponID);
EditWeaponVal.text:=inttostr(sumitem(myWeaponID));
end;
//......................................
//......................................
//CheckBoxShield
procedure CheckBoxShield_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxShield.Checked
then begin
ComboBoxShield.Enabled:=false; //выключаем
ShieldUse1:=true;
end else begin
ShieldUse1:=false;
MyShieldID:=0; //отмена
ShieldOID:=0;
ComboBoxShield.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('14');////////////////////////////////////////////////////////////////////////////
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxShield
procedure ComboBoxShield_Change(Sender: TComboBox);
//Event : OnChange
begin
ShieldOID:=ItemBase[1,ComboBoxShield.ItemIndex+1];
myShieldID:=ItemBase[2,ComboBoxShield.ItemIndex+1];
EditShieldOID.Text:=Inttostr(myShieldID);
EditShieldVal.text:=inttostr(sumitem(myShieldID));
end;
//......................................
//......................................
//CheckBoxFShot
procedure CheckBoxFShot_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxFShot.Checked
then begin
ComboBoxFShot.Enabled:=false; //выключаем
ShotUse1:=true;
end else begin
ShotUse1:=false;
MyShotID:=0; //отмена
ShotOID:=0;
ComboBoxFShot.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('14');//////////////////////////////////////////////////////////////////////////////////////////////////
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxFShot
procedure ComboBoxFShot_Change(Sender: TComboBox);
//Event : OnChange
begin
ShotOID:=ItemBase[1,ComboBoxFShot.ItemIndex+1];
myShotID:=ItemBase[2,ComboBoxFShot.ItemIndex+1];
EditFShotOID.Text:=Inttostr(myShotID);
EditFShotVal.text:=inttostr(sumitem(myShotID));
end;
//......................................
//......................................
//EditLure
//procedure EditLure_Click(Sender: TEdit);
procedure EditLure_Change(Sender: TEdit);
//Event : OnChange
begin
NeedBuy:=strtoint(EditLure.Text);
end;
//......................................
//......................................
//CheckBoxFO
procedure CheckBoxFO_Click(Sender: TCheckBox);
//Event : OnClick
begin
//FO->GFO-PFO
if CheckBoxFO.Checked
then CreatePFO.enabled:=true
else CreatePFO.enabled:=false;

if CreatePFO.enabled then begin
buf:=hstr('39 2A 05 00 00 00 00 00 00 00'); //common craft/////////////////////////////////////////////////////
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//CheckBoxPU
procedure CheckBoxPU_Click(Sender: TCheckBox);
//Event : OnClick
begin

end;
//......................................
//......................................
//CheckBoxFisherman
procedure CheckBoxFisherman_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxFisherman.Checked
then begin
FishermanID:=ExtractIDValues(ComboBoxFisherman.Ite ms.Strings[ComboBoxFisherman.ItemIndex]); //берем ID
ComboBoxFisherman.Enabled:=false; //выключаем
FishermanOID:=strtoint(EditFishermanOID.text);
end else begin
FishermanID:=0; //отмена
FishermanOID:=0;
ComboBoxFisherman.Enabled:=true; //включаем
end;
end;
//......................................
//......................................
//ComboBoxFisherman
procedure ComboBoxFisherman_Change(Sender: TComboBox);
//Event : OnChange
begin
FishermanID:=ExtractIDValues(ComboBoxFisherman.Ite ms.Strings[ComboBoxFisherman.ItemIndex]);
for i:=1 to maxnpc do begin
// msg.Lines.Add('i='+inttostr(i)+'ID='+inttostr(NpcB ase[2,i])+' FishermanID='+inttostr(FishermanID));
if NpcBase[2,i]=FishermanID then begin
EditFishermanOID.text:=inttostr(NpcBase[1,i]);
break;
end;
// else EditFishermanOID.text:='000';
end;
end;
//......................................
//......................................
//EditFishermanOID
procedure EditFishermanOID_Click(Sender: TEdit);
//Event : OnClick
begin

end;
//......................................
//......................................
//CheckBoxHPotion
procedure CheckBoxHPotion_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxHPotion.Checked
then begin
ComboBoxHPotion.Enabled:=false; //выключаем
PercentHP:=strtoint(EditHealt.Text);
ColvoHP:=strtoint(EditHPotionVal.Text);
HPUse1:=true;
end else begin
HPUse1:=false;
MyHPID:=0; //отмена
PercentHP:=0;
HPOID:=0;
ColvoHP:=0;
ComboBoxHPotion.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('14');/////////////////////////////////////////////////////////////////////////
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxHPotion
procedure ComboBoxHPotion_Change(Sender: TComboBox);
//Event : OnChange
begin
HPOID:=ItemBase[1,ComboBoxHPotion.ItemIndex+1];
myHPID:=ItemBase[2,ComboBoxHPotion.ItemIndex+1];
EditHPotionOID.Text:=Inttostr(myHPID);
EditHPotionVal.text:=inttostr(sumitem(myHPID));
end;
//......................................
//......................................
//EditHealt
//procedure EditHealt_Click(Sender: TEdit);
procedure EditHealt_Change(Sender: TEdit);
//Event : OnChange
begin
PercentHP:=strtoint(EditHealt.Text);
end;
//......................................
//......................................
procedure CheckBox11Click(Sender: TObject);
begin
//потрошить улов
end;
//......................................
//......................................
procedure CheckBox7Click(Sender: TObject);
begin
//
end;
//......................................
//......................................
procedure CheckBox8Click(Sender: TObject);
begin
//
end;
procedure CheckBox9Click(Sender: TObject);
begin
//
end;
//......................................
//......................................
procedure ComboBox1Change(Sender: TObject);
begin
//
end;
//......................................
//......................................
procedure ComboBox2Change(Sender: TObject);
begin
//
end;
//......................................
//......................................
procedure ComboBox3Change(Sender: TObject);
begin
//
end;
//......................................
//......................................
procedure ComboBox4Change(Sender: TObject);
begin
//
end;
//......................................
//......................................
procedure ComboBox5Change(Sender: TObject);
begin
//
end;
//......................................
//......................................
procedure ComboBox6Change(Sender: TObject);
begin
//
end;
//......................................
//......................................
procedure ComboBox7Change(Sender: TObject);
begin
//
end;
//......................................
//......................................
procedure ComboBox8Change(Sender: TObject);
begin
//
end;
//......................................
//************************************************** ****************************
procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
//Action:=caNone;
end;
//......................................
//************************************************** *************
procedure debugmsg(msg: string);
begin
if debug then SendMsg(msg);
end;
//......................................
{//************************************************** *************
procedure SendMsg(msg:string); //отправка системных сообщений клиенту
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(Name);
end;
//...................................... }
//************************************************** *************
function GetValue(ValName: string): string;
begin
result:=RecordPath.Values[ValName];
end;
//......................................
//************************************************** *************
procedure SetValue(ValName: string; Value: string);
begin
RecordPath.Values[ValName]:=Value;
end;
//......................................
//************************************************** *************
procedure StartRecord;
begin
if SavePathEnabled then exit;
if MoveToPathEnabled then
begin
SendMsg('Во время следования по маршруту запись не возможна');
msg.Lines.Add('Во время следования по маршруту запись не возможна');
exit;
end;
RecordPath.Clear;
PointsCount:=0;
SendMsg('Начата запись маршрута');
msg.Lines.Add('Начата запись маршрута');
SavePathEnabled:=True
end;
//......................................
//************************************************** *************
procedure StopRecord;
begin
if not SavePathEnabled then exit;
//записываем
RecordPath.SaveToFile(GetRecordFileName);
SendMsg('Запись маршрута завершена');
msg.Lines.Add('Запись маршрута завершена');
SavePathEnabled:=False;
end;
//......................................
//************************************************** *************
function GetRecordFileName: string;
begin
result:=RecordFilesPath+RecordPathFileName+RecordF ileExt;
end;
//......................................
//************************************************** *************
procedure ParseMoveClient;
var
i,x,y,z: integer; s: string;
begin
if not SavePathEnabled then
exit;
i:=2;
x:=readd(i);
y:=readd(i);
z:=readd(i);
inc(PointsCount);
s:='|'+inttostr(x)+'|'+inttostr(y)+'|'+inttostr(z) +'|';
RecordPath.Add(s);
SendMsg('добавлен чекпоинт № '+inttostr(PointsCount));
msg.Lines.Add('добавлен чекпоинт № '+inttostr(PointsCount));
end;
//......................................
//************************************************** *************
function delta(xpos1, ypos1, xpos2, ypos2:extended):integer; //возвращает растоянием между 2 точками
var
dx,dy,summa: extended;
begin
try
dx:=xpos1-xpos2;
dy:=ypos1-ypos2;
summa:=dx*dx+dy*dy;
if summa=0 then result:=0 else result:=Round(sqrt(summa));
debugmsg('delta='+inttostr(result));
except
debugmsg('error in delta');
end;
end;
{function delta(xpos1, ypos1, xpos2, ypos2:extended):integer; //возвращает растоянием между 2 точками
begin
result:= Round(Sqrt(((xpos1-xpos2)*(xpos1-xpos2))+((ypos1-ypos2)*(ypos1-ypos2))));
end;}

//......................................
//************************************************** *************
function GetMinCheckPoint(PointsList: TStringList): integer;
var
i,m,min_dist: integer;
s: string;
x,y,z: integer;
begin
result:=-1;
min_dist:=-1;
//проверка на наличие маршрута
if PointsList.Count=0 then
begin
exit;
MoveTimer.Enabled:=False;
MoveToPathEnabled:=False;
SendMsg('Нет данных по маршруту');
msg.Lines.Add('Нет данных по маршруту');
exit;
end;
try
for i:=0 to PointsList.count-1 do
begin
s:=PointsList[i];
y:=ExtractValue(s,2);
x:=ExtractValue(s,1);
debugMsg('GetMinCheckPoint:'+s+' x:='+inttostr(x)+' y:='+inttostr(y)+' myx:='+inttostr(myx)+' myy:='+inttostr(myy));
m:=delta(x,y,myx,myy);
if m>0 then begin
if (result=-1) then begin
min_dist:=m;
result:=i;
end else
if m<min_dist then begin
min_dist:=m;
result:=i;
end;
end;
end;
except
debugMsg('error in GetMinCheckPoint');
msg.Lines.Add('error in GetMinCheckPoint');
end;//try
end;
//......................................
//************************************************** *************
procedure GoToPath(ToForward: boolean);
var
x,y,z,i: integer;
s: string;
begin
MoveToPathEnabled:=not MoveToPathEnabled;
MoveToForward:=ToForward;
if not MoveToPathEnabled then
begin
MoveTimer.Enabled:=False;
SendMsg('Следование по маршруту остановлено');
msg.Lines.Add('Следование по маршруту остановлено');
exit;
end;
//
//предположительно путь уже прописан в MovePath
//
SendMsg('Пробуем выйти на путь...');
msg.Lines.Add('Пробуем выйти на путь...');
//сперва идем к ближайшему чекпоинту
i:=GetMinCheckPoint(MovePath);
if i<0 then
begin
SendMsg('чекпоинт не найден');
msg.Lines.Add('чекпоинт не найден');
MoveToPathEnabled:=False;
end else
begin
SendMsg('найден ближайший чекпоинт #'+inttostr(i)+' бежим туды');
msg.Lines.Add('найден ближайший чекпоинт #'+inttostr(i)+' бежим туды');
MoveToPathEnabled:=True;
MoveStepIndex:=i;
if debug then SendMsg('checkpoint #'+inttostr(i));
s:=MovePath[MoveStepIndex];
x:=ExtractValue(s,1);
y:=ExtractValue(s,2);
z:=ExtractValue(s,3);
if (old_x<>x) and (old_y<>y) and (old_z<>z) then
begin
MoveTo(x,y,z);
old_x:=x;
old_y:=y;
old_z:=z;
old_time:=0;
end;
end;
MoveTimer.Enabled:=True;
chk_time:=0;
end;
//......................................
//************************************************** ****************
//Идти в точку с координатами x,y,z
procedure MoveTo(TargetX,TargetY,TargetZ:integer);
begin
//проверка на допустимость координат
if not PosInRange(targetx,targety,targetz,5000) then begin
MoveTimer.Enabled:=False;
MoveTimer.Enabled:=False;
SendMsg('Слишком большая Дельта! Проверить папку с файлами перемещения! Движение остановлено!');
msg.Lines.Add('Слишком большая Дельта! Проверить папку с файлами перемещения! Движение остановлено!');
end else begin
//01=MoveBackwardToLocation:d(targetX)d(targetY)d(ta rgetZ)d(originX)d(originY)d(originZ)d(moveByMouse)
buf:=#$0F;
WriteD(targetx); //куда
WriteD(targety);
WriteD(targetz);
WriteD(MyX); //откуда
WriteD(MyY);
WriteD(MyZ);
WriteD(1); //используем 1-мышь 0-клавиатура
SendToServerEx(Name);
end;
end;
//......................................
//************************************************** *************
//Проверка находится ли заданная точка в пределах досягаемости.
function PosInRange(targetx,targety,targetz,distanciya:inte ger):boolean;
begin
if delta(targetx, targety, MyX, MyY)<=distanciya
then result:=true else result:=false;
end;
//......................................
//************************************************** *************
procedure OnMove(Sender: TObject);
var
x,y,z: integer; s: string;
begin
inc(old_time);//счетчик, сколько тиков прошло с последнего клика. исп. при следованию по маршруту
inc(chk_time);//счетчик
if not MoveToPathEnabled then begin
try
TTimer(Sender).Enabled:=False;
except
end;
SendMsg('Движение остановлено');
msg.Lines.Add('Движение остановлено');
exit;
end;
{ //возможно мы пали смертью храбрых, то не дергаемся пока
if myHP<=0 then begin
sendmsg('Die!');
msg.Lines.Add('Умерли!');
MoveToPathEnabled:=False;
exit;
end;}
MoveTimer.Interval:=MoveTrigerDelay;
debugmsg('MoveTrigerDelay:'+inttostr(MoveTimer.Int erval));
try
//проверяем на существ. объекта
//при отладке всякое может быть
MovePath.Count;
except
TTimer(Sender).Enabled:=False;
exit;
end;
s:=MovePath[MoveStepIndex];
x:=ExtractValue(s,1);
y:=ExtractValue(s,2);
z:=ExtractValue(s,3);
if PosInRange(x,y,z,RangeToCheckPoint) then begin
if MoveToForward then begin
if MoveStepIndex=MovePath.Count-1 then begin
MoveToPathEnabled:=False;
//эта точка на месте рыбалки или у фишермэна если после смерти
SendMsg('Мы по идее в конечной точке');
case cmd of
'move': begin {просто идем по маршруту} end;
'fishing': begin //ловим
CanFishHere:=true; //здесь можно ловить
fishin.enabled:=true; //продолжим ловить рыбу
msg.Lines.Add('Продолжим ловить рыбу!!!');
debugmsg('Продолжим ловить рыбу!!!');
end;
'death': begin //продаём
msg.Lines.Add('Мы у фишермэна, бежим рыбачить...');
SendMsg('Мы у фишермэна, бежим рыбачить...');
case MestoLovli of
1: begin cmd:='fishing'; MestoLovli1; end;
2: begin cmd:='fishing'; MestoLovli2; end;
3: begin cmd:='fishing'; MestoLovli3; end;
end;
end;
end;
exit;
end
else begin
inc(MoveStepIndex);
end;
end
else begin
if MoveStepIndex>0 then dec(MoveStepIndex)
else begin
MoveToPathEnabled:=False;
//эта точка у фишермэна
SendMsg('Мы по идее в начальной точке');
case cmd of
'move': begin {просто идем по маршруту} end;
'fishing': begin //ловим
CanFishHere:=true; //здесь можно ловить
fishin.enabled:=true; //продолжим ловить рыбу
msg.Lines.Add('Продолжим ловить рыбу!!!');
SendMsg('Продолжим ловить рыбу!!!');
end;
'trade': begin //продаём
trade:=200;
trade1.enabled:=true;
TradeCount:=0;
msg.Lines.Add('Продадим/купим/обменяем...');
SendMsg('Продадим/купим/обменяем...');
end;
end;
exit;
end;
end;
//мы достигли чекпоинта идем далее
debugMsg('бежим к #'+inttostr(MoveStepIndex));
msg.Lines.Add('бежим к #'+inttostr(MoveStepIndex));
s:=MovePath[MoveStepIndex];
x:=ExtractValue(s,1);
y:=ExtractValue(s,2);
z:=ExtractValue(s,3);
MoveTo(x,y,z);
chk_time:=0; //сбрасываем если дошли до чекпоинта
end else begin
MoveTo(x,y,z); //тыкаем ещё раз, чтобы не стоял
debugMsg('тыкаем ещё раз:'+s+' x:='+inttostr(x)+' y:='+inttostr(y)+' myx:='+inttostr(myx)+' myy:='+inttostr(myy));
msg.Lines.Add('тыкаем ещё раз:'+s+' x:='+inttostr(x)+' y:='+inttostr(y)+' myx:='+inttostr(myx)+' myy:='+inttostr(myy));
end;
//проверка на застревание
if chk_time=7 then //сколько ждем секунд, чтобы решить что застряли
if MoveToForward and (MoveStepIndex>0) then begin
dec(MoveStepIndex);
SendMsg('Проверка на застревание - бежим к #'+inttostr(MoveStepIndex));
msg.Lines.Add('Проверка на застревание - бежим к #'+inttostr(MoveStepIndex));
end else if MoveStepIndex<MovePath.Count then begin
inc(MoveStepIndex);
SendMsg('Проверка на застревание - бежим к #'+inttostr(MoveStepIndex));
msg.Lines.Add('Проверка на застревание - бежим к #'+inttostr(MoveStepIndex));
end;
end;
//......................................
//************************************************** *************
function ExtractValue(sData: string;nIndex: integer): integer;
var
s: string;
i,j: integer;
begin
i:=0;j:=0;s:='';
s:=sData;
while j<nIndex do
begin
i:=pos('|',S);
if i>=0 then
begin
s:=copy(s,i+1,length(s)-i);
inc(j);
end
else
break;
end;
i:=pos('|',s);
if i>=0 then
s:=copy(s,1,i-1);
try
result:=strtoint(s);
except
end;
end;
//......................................
//************************************************** *************
function ExtractIDValues(sData: string): integer;
var
s: string;
i,j: integer;
begin
i:=0;s:='';
s:=sData;
i:=pos('=',s);
if i>=0 then
s:=copy(s,1,i-1);
try
result:=strtoint(s);
except
result:=110;
end;
end;
//......................................
//************************************************** *************
// Все перемещения чара здесь!!!
//************************************************** *************
//1 бежим от фишермана на берег в Гиран-харбор
//-------------------------------------------------
procedure Mestolovli1;
begin
//загружаем маршрут
try
MovePath.LoadFromFile(RecordFilesPath+'Mestolovli1 '+RecordFileExt);
msg.Lines.Add('Место ловли: Mestolovli1');
except
SendMsg('файл пути не найден');
exit;
end;
case cmd of
'fishing': GoToPath(go); //бежим ловить
'trade': GoToPath(back); //бежим продавать
end;
end;
//......................................
//-------------------------------------------------
//2 бежим от фишермана на берег в Гиран-харбор
//-------------------------------------------------
procedure Mestolovli2;
begin
//загружаем маршрут
try
MovePath.LoadFromFile(RecordFilesPath+'Mestolovli2 '+RecordFileExt);
msg.Lines.Add('Место ловли: Mestolovli2');
except
SendMsg('файл пути не найден');
exit;
end;
case cmd of
'fishing': GoToPath(go); //бежим ловить
'trade': GoToPath(back); //бежим продавать
end;
end;
//......................................
//-------------------------------------------------
//3 бежим от фишермана на берег в Гиран-харбор
//-------------------------------------------------
procedure Mestolovli3;
begin
//загружаем маршрут
try
MovePath.LoadFromFile(RecordFilesPath+'Mestolovli3 '+RecordFileExt);
msg.Lines.Add('Место ловли: Mestolovli3');
except
SendMsg('файл пути не найден');
exit;
end;
case cmd of
'fishing': GoToPath(go); //бежим ловить
'trade': GoToPath(back); //бежим продавать
end;
end;
//......................................
//-------------------------------------------------
//1 меняем место
//-------------------------------------------------
procedure MenayemMesto1;
begin
//загружаем маршрут
try
MovePath.LoadFromFile(RecordFilesPath+'MenayemMest o1'+RecordFileExt);
msg.Lines.Add('Меняю место ловли: MenayemMesto1');
except
SendMsg('файл пути не найден');
exit;
end;
GoToPath(go); //бежим ловить
{ MoveToForward:=go;
MoveStepIndex:=0;
MoveToPathEnabled:=True;
MoveTimer.Enabled:=True;
msg.Lines.Add('Репозиция...');
}
end;
//......................................
//-------------------------------------------------
//2 меняем место
//-------------------------------------------------
procedure MenayemMesto2;
begin
//загружаем маршрут
try
MovePath.LoadFromFile(RecordFilesPath+'MenayemMest o2'+RecordFileExt);
msg.Lines.Add('Меняю место ловли: MenayemMesto2');
except
SendMsg('файл пути не найден');
exit;
end;
GoToPath(go); //бежим ловить
end;
//......................................
//-------------------------------------------------
//3 меняем место
//-------------------------------------------------
procedure MenayemMesto3;
begin
//загружаем маршрут
try
MovePath.LoadFromFile(RecordFilesPath+'MenayemMest o3'+RecordFileExt);
msg.Lines.Add('Меняю место ловли: MenayemMesto3');
except
SendMsg('файл пути не найден');
exit;
end;
GoToPath(go); //бежим ловить
end;
//......................................
//-------------------------------------------------
//1 Репозиция на месте рыбалки после боя с мобом
//-------------------------------------------------
procedure Reposition1;
begin
//загружаем маршрут
try
MovePath.LoadFromFile(RecordFilesPath+'Reposition1 '+RecordFileExt);
msg.Lines.Add('->Reposition1');
except
SendMsg('файл пути не найден');
exit;
end;
//GoToPath(go); //бежим ловить
MoveToForward:=go;
MoveStepIndex:=0;
MoveToPathEnabled:=True;
MoveTimer.Enabled:=True;
end;
//......................................
//-------------------------------------------------
//2 Репозиция на месте рыбалки после боя с мобом
//-------------------------------------------------
procedure Reposition2;
begin
//загружаем маршрут
try
MovePath.LoadFromFile(RecordFilesPath+'Reposition2 '+RecordFileExt);
msg.Lines.Add('Репозиция после боя: Reposition2');
except
SendMsg('файл пути не найден');
exit;
end;
// GoToPath(go); //бежим ловить
MoveToForward:=go;
MoveStepIndex:=0;
MoveToPathEnabled:=True;
MoveTimer.Enabled:=True;
end;
//......................................
//-------------------------------------------------
//3 Репозиция на месте рыбалки после боя с мобом
//-------------------------------------------------
procedure Reposition3;
begin
//загружаем маршрут
try
MovePath.LoadFromFile(RecordFilesPath+'Reposition3 '+RecordFileExt);
msg.Lines.Add('Репозиция после боя: Reposition3');
except
SendMsg('файл пути не найден');
exit;
end;
// GoToPath(go); //бежим ловить
MoveToForward:=go;
MoveStepIndex:=0;
MoveToPathEnabled:=True;
MoveTimer.Enabled:=True;
end;
//......................................
//-------------------------------------------------
//Оживаем после боя с мобом
//-------------------------------------------------
procedure AfterDeath;
var
s:string;
x,y,z : integer;
begin
//загружаем маршрут
try
MovePath.LoadFromFile(RecordFilesPath+'afterdeath' +RecordFileExt);
msg.Lines.Add('После смерти: AfterDeath');
except
SendMsg('файл пути не найден');
exit;
end;
//GoToPath(go); //бежим ловить
MoveToForward:=go;
MoveStepIndex:=0;
MoveToPathEnabled:=True;
MoveTimer.Enabled:=True;
msg.Lines.Add('Бежим к фишермэну...');
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);
MyMaxHP:=ReadD(i);
MyHP:=ReadD(i);
MyMaxMP:=ReadD(i); //чисто информативно
MyMP:=ReadD(i);
pbMyHP.max:=MyMaxHP;
pbMyHP.position:=MyHP;
pbMyMP.max:=MyMaxMP;
pbMyMP.position:=MyMP;
gbMyHP.caption:=' HP: '+inttostr(MyHP)+'/'+inttostr(MyMaxHP)+' ';
gbMyMP.caption:=' MP: '+inttostr(MyMP)+'/'+inttostr(MyMaxMP)+' ';
end;
//......................................
//************************************************** *************
procedure StatusUpdate; //обновление данных о себе
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do
case pck[i*8+10] of
#$09: MyHP:=ReadD(i*8+14);
#$0A: MyMaxHP:=ReadD(i*8+14);
#$0B: MyMP:=ReadD(i*8+14);
#$0C: MyMaxMP:=ReadD(i*8+14);
end;
pbMyHP.max:=MyMaxHP;
pbMyHP.position:=MyHP;
pbMyMP.max:=MyMaxMP;
pbMyMP.position:=MyMP;
gbMyHP.caption:=' HP: '+inttostr(MyHP)+'/'+inttostr(MyMaxHP)+' ';
gbMyMP.caption:=' MP: '+inttostr(MyMP)+'/'+inttostr(MyMaxMP)+' ';
if (MyMaxHP<>0) then //вычисляем процентное соотношение хп
begin
PercentHP:=strtoint(EditHealt.Text);
NeedBuy:=strtoint(EditLure.Text);
but:=Round((MyMaxHP/100)*PercentHP); //при каком количестве хп юзать бутылку лечения
end;
end;
//......................................
//************************************************** *************
//04=UserInfo:d(X)d(Y)d(Z)d(Heading)d(ObjectID)s(Nam e)d(Race)d(Sex)d(ClassID)d(Level)f(Exp)d(STR)d(DEX )d(CON)d(INT)d(WIT)d(MEN)d(MaxHP)d(CurHP)d(MaxMP)d (CurMP)d(SP)d(CurLoad)d(MaxLoad)d(d)d(DHair)d(Rear )d(Lear)d(Neck)d(RFinger)d(LFinger)d(Head)d(RHand) d(LHand)d(Gloves)d(Chest)d(Legs)d(Feet)d(Back)d(LR Hand)d(Hair)d(Face)d(DHair)d(Rear)d(Lear)d(Neck)d( RFinger)d(LFinger)d(Head)d(RHand)d(LHand)d(Gloves) d(Chest)d(Legs)d(Feet)d(Back)d(LRHand)d(Hair)d(Fac e)-(0068)d(Patk)d(Paspd)d(Pdef)d(evasion)d(accur)d(cr ithit)d(Matk)d(Maspd)d(Paspd)d(Mdef)d(PvpFlag)d(Ka rma)d(runSpd)d(walkSpd)d(swimRSpd)d(swimWSpd)d(flR Spd)d(flWSpd)d(flyRSpd)d(flyWSpd)f(MoveMul)f(aspdM ul)f(collisRadius)f(collisHeight)d(HairStyle)d(Hai rColor)d(Face)d(AccessLvl)s(Title)d(clanID)d(clanC restId)d(AllyID)d(AllyCrestId)d(ClanLeader)b(Mount )b(shop)b(DwarfCraft)d(PKkills)d(PVPkills)w(cubics )w(cubID)b(findparty)d(abnEffects)b(c)d(clanPrivil )w(RecomLeft)w(RecomHave)d(d)w(InventLimit)d(class Id)d(sEff)d(maxCP)d(curCP)b(Mount)b(Team)d(clanBig CrestId)b(Noble)b(Hero)b(Fishing)d(fishX)d(fishY)d (fishZ)d(NameColor)b(isRun)d(PledgeClass)d(d)d(Tit leColor)d(d)d(CurseWeap)
//03=CharInfo:d(X)d(Y)d(Z)d(Heading)d(ObjectID)s(Nam e)d(Race)d(Sex)h(ClassID)d(DHair)i(Head)i(RHand)i( LHand)i(Gloves)i(Chest)i(Legs)i(Feet)i(Back)i(LRHa nd)i(Hair)i(PvpFlag)d(Karma)d(MSpeed)d(PSpeed)d(Pv pFlag)d(Karma)d(runSpd)d(walkSpd)d(swimRSpd)d(swim WSpd)d(flRunSpd)d(flWalkSpd)d(flyRSpd)d(flyWSpd)f( SpdMul)f(ASpdMul)f(collisRadius)f(collisHeight)d(H airStyle)d(HairColor)d(Face)s(Title)d(clanID)d(cla nCrest)d(allyID)d(allyCrest)d(siegeFlag)b(isStand) b(isRun)b(isInFight)b(isAlikeDead)b(Invis)b(Mount) b(shop)w(cubics)w(cubID)b(findparty)d(abnEffects)b (RecomLeft)w(RecomHave)h(ClassID)d(maxCP)d(curCP)b (isMounted)b(Team)d(clanBigCrestId)b(isNoble)b(isH ero)b(isFishing)d(fishX)d(fishY)d(fishZ)d(NameColo r)b(isRun)d(d)d(PItem)d(PledgeClass)d(PledgeColor) d(TitleColor)d(Cursed)

procedure TargetInfo; //обновление данных о цели
var
i:word;
begin
AttackerOID:=ReadD(18);
AttackerX:=ReadD(2);
AttackerY:=ReadD(6);
AttackerZ:=ReadD(10);
i:=22;
ReadS(i);
if interlude then inc(i,48) else inc(i,44);
AttackerMaxHP:=ReadD(i);
AttackerHP:=ReadD(i);
pbTargetHP.max:=AttackerMaxHP;
pbTargetHP.position:=AttackerHP;
gbTargetHP.caption:=' HP: '+inttostr(AttackerHP)+'/'+inttostr(AttackerMaxHP)+' ';
end;
//......................................
//************************************************** *************
procedure TargetStatusUpdate; //обновление данных о цели
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do
case pck[i*8+10] of
#$09: AttackerHP:=ReadD(i*8+14);
#$0A: AttackerMaxHP:=ReadD(i*8+14);
end;
pbTargetHP.max:=AttackerMaxHP;
pbTargetHP.position:=AttackerHP;
gbTargetHP.caption:=' HP: '+inttostr(AttackerHP)+'/'+inttostr(AttackerMaxHP)+' ';
end;
//......................................
//************************************************** *************
function ParseCmd(cmd: string):boolean;
var
s: string;
i,j,k: integer;
params: array[0..9] of string; //до 10 параметров, должно хватить
begin
result:=False;
try
j:=-1;
i:=pos(cmdPrefix,trim(cmd));
if i=0 then
exit;
debugmsg('start ParseCmd: idx:'+inttostr(i)+' cmd: '+cmd);
result:=true;
k:=length(cmdPrefix);
s:=trim(lowercase(cmd));
s:=trim(copy(s,i+k,length(cmd)-i));
debugmsg('trim:'+s);
repeat
inc(j);
k:=pos(cmdDlm,s);
if k>0 then
begin
params[j]:=copy(s,1,k-1);
s:=trim(copy(s,k+length(cmdDlm),length(s)-k));
debugmsg('extract idx:'+inttostr(j) +' param:'+params[j]);
end
else
begin
params[j]:=s;
debugmsg('parm is one');
end;
until pos(cmdDlm,S)=0;
if j>-1 then
begin
inc(j);
params[j]:=s;
debugmsg('extract idx:'+inttostr(j) +' param:'+params[j]);
end;
if j=-1 then
exit;
//************************************************** *****
//пропарсили команду
//теперь выполняем
//************************************************** *****
if params[0]=cmdRecordPath then
begin
if params[1]<>'' then
RecordPathFileName:=params[1]
else
RecordPathFileName:=RecordPathName;
StartRecord;
end
else
if params[0]=cmdSavePath then
begin
StopRecord;
end
else
if params[0]=cmdMove then
begin
if params[1]='' then
begin
SendMsg('хз куда бежать, укажите имя');
exit;
end;
try
MovePath.LoadFromFile(RecordFilesPath+params[1]+RecordFileExt);
except
SendMsg('файл пути не найден');
exit;
end;
GoToPath(true);
end
else
if params[0]=cmdBack then
begin
if params[1]='' then
begin
SendMsg('хз куда бежать, укажите имя');
exit;
end;
try
MovePath.LoadFromFile(RecordFilesPath+params[1]+RecordFileExt);
except
SendMsg('файл пути не найден');
exit;
end;
GoToPath(false);
end
else
if (params[0]=cmdStop) and MoveToPathEnabled then
MoveToPathEnabled:=False;
except
debugmsg('error in ParseCmd,params='+cmd);
end;
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(fish1));
stats.Lines.Add('Сорвалось: '+IntToStr(fish2));
stats.Lines.Add('Преобр. успешно: '+IntToStr(lucky1));
stats.Lines.Add('Преобр. неуспешно: '+IntToStr(failed1));
stats.Lines.Add('На нас напали: '+IntToStr(mob1)+' раз');
stats.Lines.Add('Погибли: '+IntToStr(death1)+' раз');
stats.Lines.Add('');
stats.Lines.Add('MyMaxHP: '+IntToStr(MyMaxHP));
stats.Lines.Add('MyHP: '+IntToStr(MyHP));
stats.Lines.Add('MyOID: '+IntToStr(MyOID));
stats.Lines.Add('MyXpos: '+IntToStr(MyX));
stats.Lines.Add('MyYpos: '+IntToStr(MyY));
stats.Lines.Add('MyZpos: '+IntToStr(MyZ));
stats.Lines.Add('');
stats.Lines.Add('ReadyToSell: '+VarToStr(ReadyToSell));
stats.Lines.Add('ReadyToBuy: '+VarToStr(ReadyToBuy));
stats.Lines.Add('ReadyToMultiSell: '+VarToStr(ReadyToMultiSell));
stats.Lines.Add('');
stats.Lines.Add('PMMesto: '+IntToStr(PMMesto));
stats.Lines.Add('MMesto: '+IntToStr(MMesto));
stats.Lines.Add('MestoLovli: '+IntToStr(MestoLovli));
stats.Lines.Add('');
stats.Lines.Add('old_time: '+IntToStr(old_time));
stats.Lines.Add('chk_time: '+IntToStr(chk_time));
stats.Lines.Add('CanFishHere: '+VarToStr(CanFishHere));
stats.Lines.Add('');
stats.Lines.Add('but: '+IntToStr(but));
stats.Lines.Add('PercentHP: '+IntToStr(PercentHP));
stats.Lines.Add('Colvohp: '+VarToStr(Colvohp));
stats.Lines.Add('NeedBuy: '+VarToStr(NeedBuy));
stats.Lines.Add('isDie: '+VarToStr(isDie));
stats.Lines.Add('isFishing: '+VarToStr(isFishing));
stats.Lines.Add('iii: '+IntToStr(iii));
stats.Lines.Add('');


if (WeaponUse1=false) then stats.Lines.Add('Юзать оружие?: НЕТ!') else stats.Lines.Add('Юзать оружие?: ДА!');
if (ShieldUse1=false) then stats.Lines.Add('Юзать щит?: НЕТ!') else stats.Lines.Add('Юзать щит?: ДА!');
if (HPuse1=false) then stats.Lines.Add('Юзать бутылки?: НЕТ!') else stats.Lines.Add('Юзать бутылки?: ДА!');
if (ShotUse1=false) then stats.Lines.Add('Юзать фишин-шоты?: НЕТ!') else stats.Lines.Add('Юзать фишин-шоты?: ДА!');
if not CheckBoxPU.Checked then stats.Lines.Add('Потрошим?: НЕТ!') else stats.Lines.Add('Потрошим?: ДА!');
if not CheckBoxFO.Checked then stats.Lines.Add('FO->PFO: НЕТ!') else stats.Lines.Add('FO->PFO?: ДА!');
end;
//......................................
//************************************************** *************
procedure OnShowInfo(Sender: TObject); //выводим в форму
begin
ShowInfo;
if (MyHP<but) and HPuse1 then begin //если разрешено использование бутылок, то используем
if (iii>=5) and (colvohp>0) then begin
UseItem(HPOID); //проверка количества бутылок
iii:=0; //счетчик для личилок, чтобы не спамить
end else inc(iii)
end;
end;
//......................................
//************************************************** *************
procedure OnCreatePFO(Sender: TObject); //выводим в форму
begin
buf:=hstr('B8 A8 02 00 00'); //create GFO///////////////////////////////////////////////////////////////////////////////
SendToServerEx(Name);
delay(2000);
buf:=hstr('B8 A9 02 00 00'); //create PFO ////////////////////////////////////////////////////////////////////////////
SendToServerEx(Name);
end;
//......................................
//************************************************** *************
procedure RequestRestartPoint;
begin
buf:=#$7D;//////////////////////////////////////////////////////////////////////////////////////
WriteD(00);
SendToServerEx(Name);
MoveTimer.Interval:=10000;
end;
//......................................
//************************************************** *************
//21=RequestBypassToServer:s(Cmd)
//посылаем, чтобы получить пакет BuyItem с ListID
procedure RequestByPassToServer(cmd:string);
begin
buf:=#$23;///////////////////////////////////////////////////////////////////////////////////////
WriteS(cmd);
SendToServerEx(Name);
end;
//......................................
//************************************************** *************
//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:=#$37;//////////////////////////////////////////////////////////////////////////////////
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:=#$40;/////////////////////////////////////////////////////////////////////////////////////////////////////////
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:=#$B0;////////////////////////////////////////////////////////////////////////////////////////////
WriteD(ListID);
WriteD(EntryId);
WriteD(Count);
SendToServerEx(Name);
end;
end;
//......................................
//************************************************** *************
procedure UseItem(OID:integer);
begin
buf:=#$19;///////////////////////////////////////////////////////////////////////////////////////////////
WriteD(OID);
WriteD(00);
SendToServerEx(Name);
end;
//......................................
//************************************************** *************
//2F=RequestMagicSkillUse:dMagicID)d(CtrlPressed)b(S hiftPressed)
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$39;//////////////////////////////////////////////////////////////////////////////////
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;
//......................................
//************************************************** *************
procedure Pumping;
begin
if (ShotOID<>0) and (strtoint(EditFShotVal.text)>0) then UseItem(ShotOID)
else if shotuse1 then msg.Lines.Add('Кончились шоты!'); //просто сообщаем, без шотов можно ловить
MagicSkillUse(pump);
end;
//......................................
//************************************************** *************
procedure Reeling;
begin
if (ShotOID<>0) and (strtoint(EditFShotVal.text)>0) then UseItem(ShotOID)
else if shotuse1 then msg.Lines.Add('Кончились шоты!'); //просто сообщаем, без шотов можно ловить
MagicSkillUse(reel);
end;
//......................................
//************************************************** *************
procedure Fishing;
begin
if strtoint(EditLureVal.text)>1 then begin //оставляем один крючек, чтобы не сбился ItemOID
if not CanFishHere then begin
msg.Lines.Add('Здесь нельзя ловить...');
case MestoLovli of
1: begin cmd:='fishing'; Reposition1; end;
2: begin cmd:='fishing'; Reposition2; end;
3: begin cmd:='fishing'; Reposition3; end;
end;
exit;
end;
MagicSkillUse(fish);
end
else begin
msg.Lines.Add('Кончились крючки!');
fishin.enabled:=false;
if CheckBoxFisherman.Checked then begin
case MestoLovli of
1: begin cmd:='trade'; MestoLovli1; end;
2: begin cmd:='trade'; MestoLovli2; end;
3: begin cmd:='trade'; MestoLovli3; end;
end;
msg.Lines.Add('Бежим в магазин...');
end;
end;
end;
//......................................
//************************************************** *************
procedure OnFishing(Sender: TObject);
begin
if not isEquip(MyRodID) then begin giverod; exit; end;
if not isEquip(MyLureID) then begin givelure; exit; end;
fishin.enabled:=false;
Fishing;
isFishing:=true; //ловим
end;
//......................................
//************************************************** *************
//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ShiftFlag)
procedure Target(Attacker: Integer);
begin
buf:=#$1F;/////////////////////////////////////////////////////////////////////////////
WriteD(Attacker);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteC(00);
SendToServerEx(Name);
end;
//......................................
//************************************************** *************
//0A=Attack:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ )b(ShiftFlag)
procedure Attack(Attacker: Integer);
begin
buf:=#$01;////////////////////////////////////////////////////////////////////////////
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;
//......................................
//************************************************** *************
procedure GiveWeapon;
begin
if WeaponOID=0 then exit;
delay(1000);
msg.Lines.Add('Берём='+IntToStr(WeaponOID));
if not isEquip(MyWeaponID) then UseItem(WeaponOID); //попробуем одеть снова
end;
//......................................
//************************************************** *************
procedure GiveShield;
begin
if ShieldOID=0 then exit;
delay(1000);
msg.Lines.Add('Берём='+IntToStr(ShieldOID));
if not isEquip(MyShieldID) then UseItem(ShieldOID); //попробуем одеть снова
end;
//......................................
//************************************************** *************
procedure GiveRod;
begin
if RodOID=0 then exit;
delay(1000);
msg.Lines.Add('Берём='+IntToStr(RodOID));
if not isEquip(MyRodID) then UseItem(RodOID); //попробуем одеть снова
end;
//......................................
//************************************************** *************
procedure GiveLure;
begin
if LureOID=0 then exit;
delay(1000);
msg.Lines.Add('Берём='+IntToStr(LureOID));
if not isEquip(MyLureID) then UseItem(LureOID); //попробуем одеть снова
end;
//......................................
//************************************************** *************
function isEquip(ItemID:integer): boolean;
begin
FindItem(ItemId);
if ItemBase2[4,1]=0 then Result:=false else Result:=true;
end;
//......................................
//************************************************** *************
// Вся торговля здесь!!!
//************************************************** *************
procedure OnTrade(Sender: TObject);
begin
case trade of
//-------------------------------------------------
//продаем фишерману из массива TradeSellItem
//-------------------------------------------------
200: begin
if ReadyToSell then exit; //если еще не продали предыдущую вещь, то выходим сразу
//мы у фишермана, продаем всё ненужное
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if (TradeCount=TradeSellItemCount) then begin //проверка на выход из массива
trade:=300;
msg.Lines.Add('Всё продали!');
msg.Lines.Add('Переход к покупкам...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeSellItem[TradeCount])<>0 then begin //проверка, что предмет есть в инвентаре и его можно продать
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы продать:'+inttostr(TradeSellItem[TradeCount]));
ReadyToSell:=true; //готовы продавать
end else msg.Lines.Add('Нет такого предмета:'+inttostr(TradeSellItem[TradeCount]));
inc(TradeCount); //выбираем следующий предмет
msg.Lines.Add('TradeCount/TradeSellItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeSellItemCount-1));
end;
end;
//-------------------------------------------------
//покупаем у фишермана из массива TradeBuyItem
//-------------------------------------------------
300: 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;
//-------------------------------------------------
//обмениваем у фишермана на пруфы
//-------------------------------------------------
400: begin
if ReadyToMultiSell then exit; //если еще не обменяли предыдущую вещь, то выходим сразу
//мы у фишермана, обмениваем всё на пруфы
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeMultiItemCount then begin //проверка на выход из массива
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Всё обменяли!');
case MestoLovli of
1: begin cmd:='fishing'; MestoLovli1; end;
2: begin cmd:='fishing'; MestoLovli2; end;
3: begin cmd:='fishing'; MestoLovli3; end;
end;
msg.Lines.Add('Бежим на берег...');
TradeCount:=0;
end else begin
if (TradeMultiItem[TradeCount]<>FO) and (TradeMultiItem[TradeCount]<>GFO) then begin
if FindItem(TradeMultiItem[TradeCount])<>0 then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы обменять:'+inttostr(TradeMultiItem[TradeCount]));
ReadyToMultiSell:=true; //готовы обменивать
end else msg.Lines.Add('Нет такого предмета:'+inttostr(TradeMultiItem[TradeCount]));
Trd:=TradeCount;
end;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeMultiItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeMultiItemCount-1));
end;
end;
end;
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 maxitems do begin
//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //кол-во
ItemBase[4,i]:=0; //isEquipped
end;
ColvoItm:=0;
ListCount:=ReadH(4); //количество итемов не должно превышать max!
if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
for i:=1 to ListCount do begin ///////////////////////////////////////////////////////////
itemBase[1,i]:=ReadD((i-1)*72+8); //OID //////////////////////////////////////////////////////////////////////
itemBase[2,i]:=ReadD((i-1)*72+8+4); //ItemID ///////////////////////////////////////////////////////////
itemBase[3,i]:=ReadD((i-1)*72+8+4+4+4); //ItemCount ////////////////////////////////////////////////////////////////////
itemBase[4,i]:=ReadH((i-1)*72+8+4+4+4+4+2+2); //isEquipped ///////////////////////////////////////////////////////////////
//Say('i='+inttostr(i)+' ItemBase[1,i]='+IntToStr(ItemBase[1,i])+' ItemBase[2,i]='+IntToStr(ItemBase[2,i])+' ItemBase[3,i]='+IntToStr(ItemBase[3,i]));
//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)
//собираем ID и OID предметов и оружия
case itemBase[2,i] of
MyWeaponID : begin
WeaponOId:=itemBase[1,i];
WeaponId:=itemBase[2,i];
end;
MyShieldID : begin
ShieldOId:=itemBase[1,i];
ShieldId:=itemBase[2,i];
end;
MyShotID : begin
ShotOID:=itemBase[1,i];
ColvoShot:=itemBase[3,i];
EditFShotVal.Text:=inttostr(itemBase[3,i]);
end;
MyRodID : begin
RodOId:=itemBase[1,i];
end;
MyLureID : begin
LureOId:=itemBase[1,i];
ColvoLure:=itemBase[3,i];
EditLureVal.Text:=inttostr(itemBase[3,i]);
end;
MyHPID : begin
HPOId:=itemBase[1,i];
ColvoHP:=itemBase[3,i];
EditHPotionVal.Text:=inttostr(itemBase[3,i]);
end;
end;
end;
ColvoItm:=ListCount;
if debug then msg.Lines.Add('>ColvoItm='+IntToStr(Colvoitm));
//вносим изменения в массив
StringList.Clear;
try
for i:=1 to ListCount do begin
try
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 CheckBoxRod.Checked then begin //наполняем комбобокс
with ComboBoxRod do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxLure.Checked then begin //наполняем комбобокс
with ComboBoxLure do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxWeapon.Checked then begin //наполняем комбобокс
with ComboBoxWeapon do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxShield.Checked then begin //наполняем комбобокс
with ComboBoxShield do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxFShot.Checked then begin //наполняем комбобокс
with ComboBoxFShot do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxHPotion.Checked then begin //наполняем комбобокс
with ComboBoxHPotion 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)
procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, ObjID, ItemID, ItemCount, ListCount, UpdType, isEquipped: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2); //количество итемов////////////////////////////////////////////////////////////////////
//Пробегаем по Инвентарю и сохраняем пары ObjectID - colv
for i:=1 to ListCount do begin
UpdType:=ReadH((i-1)*74+4); /////////////////////////////////////////////////////////////////////////
ItemOID:=ReadD((i-1)*74+8); //ObjectID///////////////////////////////////////////////////////////////////
ItemID:=ReadD((i-1)*74+12); //ItemID//////////////////////////////////////////////////////////////////////////////
ItemCount:=ReadD((i-1)*74+20); //Count //////////////////////////////////////////////////////////////////////////
isEquipped:=ReadH((i-1)*74+28);
case UpdType of
//добавлен
1: begin
for ii:=1 to maxitems do begin
if (ItemBase[1,ii]=0) and (add=false) then begin
ItemBase[1,ii]:=ItemOID;
ItemBase[2,ii]:=ItemID;
ItemBase[3,ii]:=ItemCount;
ItemBase[4,ii]:=isEquipped;
//msg.Lines.Add('Добавили предмет!');
//msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));
ColvoItm:=ColvoItm+ItemCount;
add:=true;
end;
end;
case ItemID of
6411..6518,7726..7806,8351..8359,8403..8483: begin
if not CheckBoxPU.Checked then exit;
delay(500); //стоит здесь и меньше нельзя
msg.Lines.Add('Потрошим! ObjectID='+IntToStr(ItemOID)+' ItemID='+IntToStr(ItemID)+' ColvoItem='+IntToStr(colv));
UseItem(ItemOID);//потрошим рыбу
end;
7807..7809,6519..6527: begin
if ItemID=MyLureID then begin
LureOID:=ItemOID;
ColvoLure:=ItemCount;
EditLureVal.Text:=inttostr(ItemCount);
end;
end;
6535..6540: begin
if ItemID=MyShotID then begin
ShotOID:=ItemOID;
ColvoShot:=ItemCount;
EditFShotVal.Text:=inttostr(ItemCount);
end;
end;
1060..1061: begin
if not CheckBoxHPotion.Checked then exit;
if ItemID=MyHPID then begin
HPOID:=ItemOID;
ColvoHP:=ItemCount;
EditHPotionVal.Text:=inttostr(ItemCount);
end;
end;
end;
end;
//изменен
2: begin
for ii:=1 to maxitems do begin
if ItemBase[1,ii]=ItemOID then begin
ItemBase[3,ii]:=ItemCount;
ItemBase[4,ii]:=isEquipped;
//msg.Lines.Add('Изменяем параметры предмета!');
//msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));
end;
end;
case ItemID of
6411..6518,7726..7806,8351..8359,8403..8483: begin
if not CheckBoxPU.Checked then exit;
delay(500); //стоит здесь и меньше нельзя
msg.Lines.Add('Потрошим! ObjectID='+IntToStr(ItemOID)+' ItemID='+IntToStr(ItemID)+' ColvoItem='+IntToStr(colv));
UseItem(ItemOID);//потрошим рыбу
end;
7807..7809,6519..6527: begin
if ItemID=MyLureID then begin
LureOID:=ItemOID;
ColvoLure:=ItemCount;
EditLureVal.Text:=inttostr(ItemCount);
end;
end;
6535..6540: begin
if ItemID=MyShotID then begin
ShotOID:=ItemOID;
ColvoShot:=ItemCount;
EditFShotVal.Text:=inttostr(ItemCount);
end;
end;
1060..1061: begin
if ItemID=MyHPID then begin
HPOID:=ItemOID;
ColvoHP:=ItemCount;
EditHPotionVal.Text:=inttostr(ItemCount);
end;
end;
end;
end;
//удален
3: begin
for ii:=1 to maxitems do begin
if ItemBase[1,ii]=ItemOID then begin
//msg.Lines.Add('Удаляем предмет!');
//msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));
ItemBase[1,ii]:=0;
ItemBase[2,ii]:=0;
ItemBase[3,ii]:=0;
ItemBase[4,ii]:=0;
ColvoItm:=ColvoItm-ItemCount;
end;
end;
case ItemID of
7807..7806,6519..6527: begin
if ItemID=MyLureID then begin
LureOID:=ItemOID;
ColvoLure:=ItemCount;
EditLureVal.Text:=inttostr(ItemCount);
end;
end;
6535..6540: begin
if ItemID=MyShotID then begin
ShotOID:=ItemOID;
ColvoShot:=ItemCount;
EditFShotVal.Text:=inttostr(ItemCount);
end;
end;
1060..1061: begin
if ItemID=MyHPID then begin
HPOID:=ItemOID;
ColvoHP:=ItemCount;
EditHPotionVal.Text:=inttostr(ItemCount);
end;
end;
end; /////////////////////////////////////////////////////////////////////////////////////////
end;
end;
end;
end;
//......................................
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i : integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to maxitems 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;
//......................................
//************************************************** ****************************
function FindItem(item:integer) : integer; //находим в инвентаре все предметы с ItemID
var
i, j : integer;
begin
for i:=1 to maxitems do begin
//очищаем масив
ItemBase2[1,i]:=0;
ItemBase2[2,i]:=0;
ItemBase2[3,i]:=0;
ItemBase2[4,i]:=0;
end;
ColvoItm2:=0;
j:=1;
for i:=1 to maxitems do begin
//находим подходящий предмет
if (ItemBase[2,i]=item) then begin
//Say('i='+inttostr(i)+' ItemBase[1,i]='+IntToStr(ItemBase[1,i])+' ItemBase[2,i]='+IntToStr(ItemBase[2,i])+' ItemBase[3,i]='+IntToStr(ItemBase[3,i]));
ItemBase2[1,j]:=ItemBase[1,i];
ItemBase2[2,j]:=ItemBase[2,i];
ItemBase2[3,j]:=ItemBase[3,i];
ItemBase2[4,j]:=ItemBase[4,i];
ColvoItm2:=ColvoItm2+ItemBase[3,i];
inc(j);
end;
end;
result:=colvoitm2;
// msg.Lines.Add('ColvoItm2='+IntToStr(Colvoitm2));
end;
//......................................
//************************************************** *************
procedure AppendNpc(OID, ID : integer);
//добавляем в базу данных мобов с коррекцией расстояния до них
var
i: integer;
ispovtor:boolean;
begin
isPovtor:=false;
for i:=1 to maxnpc do begin
//если нашли в базе, то коректируем его координаты на новые
if (NpcBase[1,i]=OID) and (MyOID<>OID) then begin
NpcBase[2,i]:=ID-kID; //ID
isPovtor:=true;
//msg.Lines.Add('Корректируем координаты Npc '+IntToStr(i)+' OID:'+IntToStr(NpcBase[1,i])+' ID:'+IntToStr(NpcBase[2,i]));
//msg.Lines.Add('KolvoNpc='+inttostr(kolvonpc));
end;
end;
if not isPovtor then
begin //иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового
for i:=1 to maxnpc do begin
if (NpcBase[1,i]=0) and (MyOID<>OID) then begin
//запоминаем моба в свободную ячейку
NpcBase[1,i]:=OID; //OID
NpcBase[2,i]:=ID-kID; //ID
inc(kolvonpc);
//добавляем имя Npc
//msg.Lines.Add('Вносим координаты Npc '+IntToStr(i)+' OID:'+IntToStr(NpcBase[1,i])+' ID:'+IntToStr(NpcBase[2,i]));
break;
end;
end;
end;
end;
//......................................
//************************************************** *************
procedure DeleteNpc(OID : integer); //удаляем Npc
var
i : integer;
begin
for i:=1 to maxnpc do begin
//если нашли в базе, то удаляем его
if (NpcBase[1,i]=OID) then begin
//msg.Lines.Add('Удаляем '+inttostr(NpcBase[1,i])+' '+inttostr(NpcBase[2,i]));
NpcBase[1,i]:=0; //OID
NpcBase[2,i]:=0; //ID
dec(kolvonpc);
//msg.Lines.Add('Удаляем Npc'+' KolvoNpc='+inttostr(kolvonpc));
break;
end;
end;
end;
//......................................
//************************************************** *************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** *************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;

//************************************************** **************************
//проверка на готовность скрипта
if (MyOID<>0) and (LureOID<>0) and (RodOID<>0) and not status then begin
msg.Lines.Add('Скрипт инициализирован!');
status:=true;
end;

//************************************************** **************************
//продажа состоит из следующих шагов:
//1. таргет на продавце, пауза, снова таргет c04=Action, c04=Action
//2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
//3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
//4. приходит 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)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectI D)i(ItemID)d(Count)
//************************************************** **************************
if ReadyToSell and (FishermanOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//после того, как мы взяли в таргет продавца приходит этот пакет (#$0F)
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$19: begin///////////////////////////////////////////////////////////////////////////////////////////
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if ReadD(2)=FishermanOID then begin
delay(1000); //делаем небольшую паузу, чтобы пакеты шли в правильном порядке
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
RequestByPassToServer(GetSellList);
msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (sell)');
end;
end;
//после выбора пункта - продажа, приходит этот пакет (#$10)
//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)
#$06: begin/////////////////////////////////////////////////////////////////////////
delay(1000); //делаем небольшую паузу, чтобы пакеты шли в правильном порядке
msg.Lines.Add('S>Пакет SellList #$10');
ListID:=ReadD(6); //запоминаем, он все время разный
msg.Lines.Add('ListID='+inttostr(ListID));
//шлем запрос на продажу
//c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectI D)i(ItemID)d(Count)
msg.Lines.Add('C>Пакет RequestSellItem #$1E');
//продадим первый из списка
msg.Lines.Add('FindItem: OID:'+IntToStr(ItemBase2[1,1])+' ID:'+IntToStr(ItemBase2[2,1])+' Count:'+IntToStr(ItemBase2[3,1]));
RequestSellItem(ItemBase2[1,1],ItemBase2[2,1],ItemBase2[3,1]);
ReadyToSell:=false; //закончили с предметом
end;
end;
end;
end;
//************************************************** **************************
//покупка состоит из следующих шагов:
//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)
#$19: 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)
#$07: 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;
//************************************************** **************************
//обмен состоит из следующих шагов:
//1. таргет на продавце, пауза, снова таргет c04=Action, c04=Action
//2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
//3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
//4. приходит 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)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Am ount)
//************************************************** **************************
if ReadyToMultiSell and (FishermanOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//после того как мы взяли в таргет продавца приходит этот пакет
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$19: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if ReadD(2)=FishermanOID then begin
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
delay(1000);
RequestByPassToServer(getmultisell);
msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (multisell)');
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');
ListID:=ReadD(2); //запоминаем, он все время разный
msg.Lines.Add('ListID='+inttostr(ListID));
//шлем запрос на обмен
//cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Am ount)
msg.Lines.Add('C>Пакет RequestMultiSellChoose #$A7(ListId:'+IntToStr(ListId)+' EntryId:'+IntToStr(Trd*2+1)+' Count:'+IntToStr(ItemBase2[3,1])+')');
delay(1000);
//в java -> EntryId * k=100000
RequestMultiSellItem(ListId,Trd*2+1,ItemBase2[3,1]);
ReadyToMultiSell:=false;
end;
end;
end;
end;

//************************************************** **************************
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//************************************************** *************
#$2F: begin // MoveBackwardToLocation////////////////////////////////////////////////////////////
if ReadD(2) = MyOID then begin
MyX := ReadD(18);
MyY := ReadD(22);
MyZ := ReadD(26);
end;
end;
//************************************************** *************
#$32: begin //пакет с инфой о моём чаре/////////////////////////////////////////////////////////////
//msg.Lines.Add('S>Пакет UserInfo #$04');
UserInfo;
end;
//************************************************** *************
//05=Attack:d(AttackerID)h(targetID)d(Damage)b(Flags )d(X)d(Y)d(Z)d(ListHits)h(targetID)d(damage)b(flag s)
#$33: begin
msg.Lines.Add('S>Пакет Attack #$05');
if (MyOID=ReadD(6)) and (MyOID<>ReadD(2)) then begin
fishin.enabled:=false;
isFishing:=false; //сейчас не ловим
if MoveToPathEnabled then MoveTimer.Enabled:=false; //если бежали, то остановимся
if not underattack then begin
AttackerOID:=ReadD(2);
msg.Lines.Add('На нас напали! ObjectID='+IntToStr(AttackerOID));
if WeaponUse1 and not isEquip(MyWeaponID) then begin
if ShieldUse1 and not isEquip(MyShieldID) then giveshield;
giveweapon;
end;
TargetAttacker(AttackerOID);
underattack:=true;
inc(mob1);
end;
end;
end;
//************************************************** *************
//пакет Die (моб умер)
//06=Die:h(CharID)d(d)d(HAsHideout)d(HasCastle)d(fla gs)d(sweepable)d(access)
#$00: begin////////////////////////////////////////////////////////////////////
msg.Lines.Add('S>Пакет Die #$06 ObjectID='+IntToStr(ReadD(2)));
if (AttackerOID=ReadD(2)) then begin
pbTargetHP.min:=0;
msg.Lines.Add('Убили моба ObjectID='+IntToStr(AttackerOID)+' в '+TimeToStr(time));
isDie:=true; //мы убили моба
if MoveToPathEnabled then MoveTimer.Enabled:=True; //если бежали, то продолжим путь
underattack:=false;
if not isEquip(MyRodID) then giverod;
if not isEquip(MyLureID) then givelure;
//репозиция
fishin.enabled:=false;
isFishing:=false; //сейчас не ловим
case MestoLovli of
1: begin cmd:='fishing'; Reposition1; end;
2: begin cmd:='fishing'; Reposition2; end;
3: begin cmd:='fishing'; Reposition3; end;
end;
msg.Lines.Add('Репозиция на месте рыбалки после боя с мобом...');
end;
if (MyOID=ReadD(2)) then begin
msg.Lines.Add('Нас убили в '+TimeToStr(time));
underattack:=false;
inc(death1);
fishin.enabled:=false;
isFishing:=false; //сейчас не ловим
RequestRestartPoint; //оживаем после смерти в городе
end;
end;
//************************************************** *************
#$01: begin //пакет Revive
msg.Lines.Add('S>Пакет Revive #$07');
if (MyOID=ReadD(2)) then begin
cmd:='death'; AfterDeath;
end;
end;
//************************************************** *************
//0C=DropItem:h(PlayerID)h(ObjectID)i(ItemID)d(X)d(Y )d(Z)d(Stackable)d(Count)d(d)
#$16: begin
msg.Lines.Add('S>Пакет DropItem #$0C');
if (AttackerOID=ReadD(2)) then begin //дроп только с наших мобов
if (delta(MyX, MyY, ReadD(14), ReadD(18))<=200) then begin
//по ItemID здесь можно отсеивать ненужные предметы
//if ReadD(10)=57 then exit; //не поднимать адену
//msg.Lines.Add('Выпала вещь!!!');
fishin.enabled:=false;
isFishing:=false; //сейчас не ловим
Target(ReadD(6));
msg.Lines.Add(' Пробую поднять дроп!!!');
delay(1000);
fishin.enabled:=true;
end;
end;
end;
//************************************************** *************
#$18: begin////////////////////////////////////////////////////////////////////////////
//msg.Lines.Add('S>Пакет StatusUpdate #$0E');
if (MyOID=ReadD(2)) then StatusUpdate; //обновление информации о хп
if (AttackerOID=ReadD(2)) then TargetStatusUpdate; //обновление информации о хп
end;
//************************************************** *************
//12=DeleteObject:d(ObjectID)d(d)
#$08: begin///////////////////////////////////////////////////////////////////////////////
msg.Lines.Add('S>C $12 DeleteObject '+inttostr(ReadD(2)));
DeleteNpc(ReadD(2));
// if (AttackerOID=ReadD(2)) and not isDie then begin
if (AttackerOID=ReadD(2)) then begin
pbTargetHP.min:=0;
msg.Lines.Add('Исчез напавший на нас ObjectID='+IntToStr(AttackerOID)+' в '+TimeToStr(time));
if MoveToPathEnabled then MoveTimer.Enabled:=True; //если бежали, то продолжим путь
underattack:=false;
if not isEquip(MyRodID) then giverod;
if not isEquip(MyLureID) then givelure;
//репозиция
fishin.enabled:=false;
isFishing:=false; //сейчас не ловим
case MestoLovli of
1: begin cmd:='fishing'; Reposition1; end;
2: begin cmd:='fishing'; Reposition2; end;
3: begin cmd:='fishing'; Reposition3; end;
end;
msg.Lines.Add('Репозиция на месте рыбалки после боя с мобом...');
isDie:=false; //мы убили моба
end;
end;
//************************************************** *************
//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)
#$0C: 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;
//************************************************** *************
//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(--)
#$11: begin//////////////////////////////////////////////////////////////////////
//msg.Lines.Add('S>Пакет ItemListPacket #$1B');
CreateItemBase; //создание базы предметов
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)
#$21: begin // 41(42) для IL, 32(34) для С4///////////////////////////////////////////////////////////////////////
//msg.Lines.Add('S>Пакет InventoryUpdate #$27');
UpdateItemBase; //Обновление базы
end;
//************************************************** *************
#$62: begin//////////////////////////////////////////////////////////////////////////////////////////////////
//msg.Lines.Add('S>Пакет Messages #$64');
if (pck[2]+pck[3]=#$85#$06) then inc(failed1); //ничего не нашли в рыбе
if (pck[2]+pck[3]=#$35#$00) then inc(lucky1);//lucky1:=fish1-failed1; //удачно вскрыли
if (pck[2]+pck[3]=#$B1#$05) then begin //You can't fish here
//репозиция
fishin.enabled:=false;
isFishing:=false; //сейчас не ловим
CanFishHere:=false; //можно тут ловить?
msg.Lines.Add('Здесь нельзя ловить...');
case MestoLovli of
1: begin cmd:='fishing'; Reposition1; end;
2: begin cmd:='fishing'; Reposition2; end;
3: begin cmd:='fishing'; Reposition3; end;
end;
end;
end;
//************************************************** *************
//ловим рыбу
//FE1300=ExFishingStart:h(charOID)d(fishType)d(X)d(Y )d(Z)b(isNightLure)b(c)
//FE1400=ExFishingEnd:h(charObjtId)b(isWin)
//FE1500=ExFishingStartCombat:h(charOID)d(time)d(HP) b(Fighting)b(LureType)b(isFishDeceptive)
//FE1600=ExFishingHpRegen:h(charOID)d(time)d(fish_HP )b(HPstop/rise)b(GoodUse)b(anim)d(penalty)b(BarColor)
#$FE: begin
if Status and (MyOID<>0) then begin
case pck[2] of
//FE1400=ExFishingEnd:h(charObjtId)b(isWin)
#$1F: begin/////////////////////////////////////////////////////////////////////////////////
//msg.Lines.Add('S>Пакет ExFishingEnd #$FE1400');
isFishing:=false; //сейчас не ловим
if MyOID=ReadD(4) then begin
if ReadC(8)=1 then begin
inc(fish1); //счетчик пойманых
msg.Lines.Add('Поймали!');
//MMesto:=0; //сбрасываем готовность смены места
end else begin
if stop then exit; //нажали кнопку стоп!
inc(fish2); //счетчик потеряных
msg.Lines.Add('Сорвалась!');
inc (MMesto); //не пора ли поменять место ловли?
if (MMesto=PMMesto) then begin
MMesto:=0; //сбрасываем готовность смены места
inc(MestoLovli);
if (MestoLovli>3) then MestoLovli:=1;
fishin.enabled:=false;
case MestoLovli of
1: begin cmd:='fishing'; MenayemMesto1; end;
2: begin cmd:='fishing'; MenayemMesto2; end;
3: begin cmd:='fishing'; MenayemMesto3; end;
end;
//moveto1.enabled:=true;
msg.Lines.Add('Бежим на новое место...');
exit;
end;
end;
fishin.enabled:=true;
end;
end;
//FE1600=ExFishingHpRegen:h(charOID)d(time)d(fish_HP )b(HPstop/rise)b(GoodUse)b(anim)d(penalty)b(BarColor)
#$28: begin///////////////////////////////////////////////////////////////////////////////////////////
//msg.Lines.Add('S>Пакет ExFishingHpRegen #$FE1600');
if MyOID=ReadD(4) then begin
if (pck[16]+pck[18]=#$00#$00) then begin
pumping;
//msg.Lines.Add('Pumping!');
end; // else if (pck[16]+pck[17]=#$01#$01) then msg.Lines.Add('Pumping прошёл!');
if (pck[16]+pck[18]=#$01#$00) then begin
reeling;
//msg.Lines.Add('Reeling!');
end; // else if (pck[16]+pck[17]=#$01#$01) then msg.Lines.Add('Reeling прошёл!');
end;
end;
end;
end;
end;
{#$D3: begin // D3=NetPing:d(kID) на Нетпинг сервера шлем сохранённый пакет Нетпинга от клиента
msg.Lines.Add('S>Пакет NetPing #$D3');
if LogOutOk then begin
buf:=NetPing;
SendToServerEx(Name);
msg.Lines.Add('C>Пакет NetPing #$A8');
end;
end;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////
end;
end;
//************************************************** **************************
if (ConnectName=Name) and FromClient then begin
case pck[1] of
{#$00: begin //C>09=LogoutRequest - выходим ручками из клиента////////////////////////////////////////////////////////
msg.Lines.Add('S>Пакет LogoutRequest #$09');
// вроде не надо тут их ставить?
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
pck:='';
// шлем s7E=LogOutOk, для отключения клиента
msg.Lines.Add('S>Пакет LogOutOk #$7E');
buf:=#$7E;
SendToClientEx(Name);
LogOutOk:=true;
end;
#$A8: begin // C>A8=NetPing:d(kID)d(PING)d(dta)
msg.Lines.Add('C>Пакет NetPing #$A8');
NetPing:=pck; // запомним его
pck:='';
end;}
#$0F: ParseMoveClient; //move//////////////////////////////////////////////////////////////////
#$49: //say2///////////////////////////////////////////////////////////////////////////////////////////////////////
//если это команда и она обработана и надо очистить чат
if ParseCmd(ReadS(2)) and EraseCommandFromChat then pck:='';//kill packet
//ValidatePosition пакет от клиента с моими кординатами
#$59: begin
//msg.Lines.Add('C>Пакет ValidatePosition #$48');
MyX:=ReadD(2); //получаю координату х моего чара
MyY:=ReadD(6); //получаю координату у моего чара
MyZ:=ReadD(10); //получаю координату z моего чара
end;
{#$1B: begin
msg.Lines.Add('C>Пакет RequestSicialAction #$1B');
case ReadD(2) of
//социальное действие Yes для начала ловли
6: begin
msg.Lines.Add('Отключили клиент из скрипта...');
//для версии 3.1.9+ можно попробовать отключить клиента
//Варнинг! Опасно для жизни! =)
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
LogOutOk:=true;
buf:=#$7E;
SendToClientEx(Name); // отключаем клиент
msg.Lines.Add('S>Пакет LogOutOk #$7E');
//не передаем серверу социальное действие
pck:='';
end;
end;
end;}
end; //case
end;
end.

Murdoc
07.10.2008, 18:40
Вот попробуй этот, на моем ХБэшном серве работает.
Единственно что, не переделал отключение клиента.
Скрипт не универсален, то есть работает тока под ХБ.



Спасибо за скрипт! Как раз начал сам переделывать, дошел до середины, а тут такой подарок :)
Еще вопрос. Вобщем скрипт у меня работает не с клиентом л2, а с чем то типа бота. Этот бот может заходить на серв, слегка бегать, ну и, главное, показывает чаты. Вот отсюда вытекает и вопрос:
что нужно резать, чтоб эти чаты не забивались фигней типа
16:37] Вы использовали Fishing Shot: D-grade
[16:37] Use 1314
[16:37] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы получили Small Blue Treasure Chest
[16:38] Use 1312
[16:38] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы получили Small Blue Ugly Fish
[16:38] Use 1312

какие пакеты нужно вырезать чтоб клиент этого не видел? Заранее благодарю :)

Гост
08.10.2008, 17:35
Вот попробуй этот, на моем ХБэшном серве работает.
Единственно что, не переделал отключение клиента.
Скрипт не универсален, то есть работает тока под ХБ.


Что есть ХБ ? Хлопчатобумажный ?

NLObP
09.10.2008, 00:13
Что есть ХБ ? Хлопчатобумажный ?

Hellbound это. :)

Grinch
11.10.2008, 08:44
В новой версии L2phx начиная с 3.4.0 надо в скрипте заменить SendMsg на SendMsgR везде нажав "ctrl+F" и воспользовались фичей найти и заменить всё спс NLObP за эту кульную функцию :)

NLObP
11.10.2008, 14:14
В новой версии L2phx начиная с 3.4.0 надо в скрипте заменить SendMsg на SendMsgR везде нажав "ctrl+F" и воспользовались фичей найти и заменить всё спс NLObP за эту кульную функцию :)

Есть ещё "ctrl+R" - замена.
Ещё, можно просто убрать процедуру SendMSG из скрипта и тогда вывод лога будет идти в пакетхак.

Murdoc
14.10.2008, 12:35
Еще вопрос. Вобщем скрипт у меня работает не с клиентом л2, а с чем то типа бота. Этот бот может заходить на серв, слегка бегать, ну и, главное, показывает чаты. Вот отсюда вытекает и вопрос:
что нужно резать, чтоб эти чаты не забивались фигней типа
16:37] Вы использовали Fishing Shot: D-grade
[16:37] Use 1314
[16:37] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы получили Small Blue Treasure Chest

какие пакеты нужно вырезать чтоб клиент этого не видел? Заранее благодарю :)

Сам спросил и сам отвечу :)
вобщем надо вырезать пакеты от серва : Tип: 0x62 (SystemMessage)
Скрипт простейший:
begin
if FromServer then begin
if pck[1]=#$62 then begin
SendMsg('SysMess');
pck := '';
end;
end;
правда кроме ненужных сообщений вырезаются и все остальные ;)

NLObP
14.10.2008, 19:23
строчку по длиннее проверяй, тогда будет то, что надо.

Acdsee
18.10.2008, 05:37
При запуске скрипта вылетает ошибка
Access violation at address 0056BECC in module 'l2pbx.exe'. Read of address 00000000.
После чего соединение с сервером рвется, и линейку приходится рубить из процессов.
Пробовал на l2phx.3.4.1.48 и l2phx.3.4.1.45
Играю на шоках.
Объясните пожалуйста что я делаю не так?
П.Сы. При запуске скрипта на точку происходит тоже самое.

Acdsee
18.10.2008, 14:30
Запускаю в тестовом режиме, тоесть линейка не включена, ошибка остается.
Не могу понять из-за чего такое происходит.
Полазил по форуму, такое только у меня происходит похоже.

Murdoc
20.10.2008, 14:57
Запускаю в тестовом режиме, тоесть линейка не включена, ошибка остается.
Не могу понять из-за чего такое происходит.
Полазил по форуму, такое только у меня происходит похоже.

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

Acdsee
21.10.2008, 14:26
А этот скрипт всегда кучу ошибок сыплет, если его запускать без загруженного перса. входишь в мир, потом запускаешь скрипт, потом от 10 до хз скольки секунд все подвисает(клиент не отвечает, действий не выполняет), потом появляется окошко управления скрипта и все работает
Если чар в игре то ровно все точно так же, запускаю скрипт он выдает ошибку и сервер меня дисконектит.

cdsg
21.10.2008, 15:02
строка 2643
-------------
procedure SendMsg(msg:string); //отправка системных сообщений клиенту
-------------
выдает ошиПку - "Identifier redeclared: "SendMsg"

хелп плиз!

NLObP
21.10.2008, 15:29
строка 2643
-------------
procedure SendMsg(msg:string); //отправка системных сообщений клиенту
-------------
выдает ошиПку - "Identifier redeclared: "SendMsg"

хелп плиз!

Переименуй процедуру и все её вызовы в скрипте на - sendmsg2, к примеру. Клавиша ctrl+R в редакторе скриптов.
Просто в последней версии пакетхака появилась внутренняя команда sendMSG.

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

В скрипте переменная NAME:='имя_чара'; должна быть в точности как имя твоего персонажа, с соблюдением регистра букв. Скрипт включать, когда ты в игре. Начальная инициализация скрипта несколько секунд 10 - 30. Правильностью загрузки скрипта является появление инвентаря в клиенте и списков предметов в форме управления. Мне помогает после ошибки, нажатие кнопки "обновить". Бывает, что можно проигнорировать ошибку. Если не поможет, то скриншот выложи.

NLObP
04.01.2009, 02:57
Исправил скрипт под РУОФФ. Рыбу ловит, потрошит, бегает по точкам, продает, покупает, обменивает, отбивается оружием или магией...

PS: спасибо Xelat за предоставленные инструменты ловли.
PPS: 120 минут полёт нормальный.

FishingBot by NLObP v.0.10.8 for Gracia:

Do6poe3JIO
05.03.2009, 22:49
Исправил скрипт под РУОФФ. Рыбу ловит, потрошит, бегает по точкам, продает, покупает, обменивает, отбивается оружием или магией...
а на интерлюде покатит?

Access violation at address 132ABC98 in module 'l2pbx.exe'. Read of address 00000000.
что ето за ошибка и как ее устранить?

Начата запись маршрута
Запись маршрута завершена
Пробуем выйти на путь...
Нет данных по маршруту
чекпоинт не найден
Движение остановлено

Это почему так выходит?

NLObP
14.03.2009, 05:23
а на интерлюде покатит?

В этом скрипте я фиксил некоторые промахи предыдущего скрипта для С4. Попробуй поменять ID пакетов и смещения в процедурах обработки InventoryUpdate и CreateItemBase. В крайнем случае воспользуйся версией скрипта для C4/Интерлюдии

Добавлено через 1 минуту
Access violation at address 132ABC98 in module 'l2pbx.exe'. Read of address 00000000.
что ето за ошибка и как ее устранить?

Похоже, что содержимое Name не соответствует имени чара для которого запущен скрипт.

Добавлено через 2 минуты
Начата запись маршрута
Запись маршрута завершена
Пробуем выйти на путь...
Нет данных по маршруту
чекпоинт не найден
Движение остановлено

Это почему так выходит?

Не соответствие имени маршрута куда записывал и по которому хочешь идти и в котором нет данных? Без дополнительных подробностей точнее не могу сказать.

StekloReZ
21.03.2009, 01:21
Намучился с версией под интерлюд. Зависание после атаки и постоянно бежит непонятно куда.
-Взял последнюю версию для грации и переделал под интерлюд.

Рыбачил Магом. Никаких стопоров и схождения с маршрута не было.
Покупка/продажа без проблем.
У меня проблема в другом. Каждую поклёвку засчитывает как MMesto и по достижении PMMesto=10 тутже бежит на другое место ловли. Обнуляет счётчики и по-новой. Впринципи притензий нет, скрипт рабочий))
а так всё норм. 2 часа, полёт нормальный.

Пологаю подлянка спрятана после этого
#$FE: begin.
В программировании не силён ни сколько, поэтому не решил проблему.
если кто-нибуть поправит, буду рад)
:drinks:

StekloReZ
19.04.2009, 11:05
Спасибо за скрипт для Аббиса, выложенный тут (http://coderx.ru/showthread.php?t=1465&page=3).
У меня возникает проблема с обменом пойманых вещей на Proof
пакеты от начала даилога с Фишерманом.
Покупка крючков проходит.

................................................

S>Пакет MoveBackwardToLocation #$01
бежим к #2
S>Пакет MoveBackwardToLocation #$01
бежим к #1
S>Пакет MoveBackwardToLocation #$01
бежим к #0
S>Пакет MoveBackwardToLocation #$01
Продадим/купим/обменяем...
S>Пакет MoveBackwardToLocation #$01
Движение остановлено
Нет такого предмета:6904
TradeCount/TradeSellItemCount:1/16
S>Пакет MoveBackwardToLocation #$01
S>Пакет MoveBackwardToLocation #$01
Нет такого предмета:6905
TradeCount/TradeSellItemCount:2/16
S>Пакет MoveBackwardToLocation #$01
S>Пакет MoveBackwardToLocation #$01
Нет такого предмета:6906
TradeCount/TradeSellItemCount:3/16
S>Пакет MoveBackwardToLocation #$01
S>Пакет MoveBackwardToLocation #$01
S>Пакет MoveBackwardToLocation #$01
Нет такого предмета:6907
TradeCount/TradeSellItemCount:4/16
S>Пакет MoveBackwardToLocation #$01
Нет такого предмета:6920
TradeCount/TradeSellItemCount:5/16
S>Пакет MoveBackwardToLocation #$01
S>Пакет MoveBackwardToLocation #$01
Нет такого предмета:6921
TradeCount/TradeSellItemCount:6/16
S>Пакет MoveBackwardToLocation #$01
S>Пакет MoveBackwardToLocation #$01
S>Пакет MoveBackwardToLocation #$01
Нет такого предмета:6922
TradeCount/TradeSellItemCount:7/16
Нет такого предмета:6923
TradeCount/TradeSellItemCount:8/16
Нет такого предмета:6924
TradeCount/TradeSellItemCount:9/16
Нет такого предмета:6925
TradeCount/TradeSellItemCount:10/16
S>C $12 DeleteObject 1242610385
Нет такого предмета:7686
TradeCount/TradeSellItemCount:11/16
Нет такого предмета:7695
TradeCount/TradeSellItemCount:12/16
Нет такого предмета:7696
TradeCount/TradeSellItemCount:13/16
Нет такого предмета:7697
TradeCount/TradeSellItemCount:14/16
Нет такого предмета:7698
TradeCount/TradeSellItemCount:15/16
Нет такого предмета:7699
TradeCount/TradeSellItemCount:16/16
Нет такого предмета:7700
TradeCount/TradeSellItemCount:17/16
Всё продали!
Переход к покупкам...
Готовы купить:6524
Требуется докупит крючков:7
TradeCount/TradeBuyItemCount:1/0
S>Пакет NpcHtmlMessage #$0F
C>Пакет RequestBypassToServer #$23 (buy)
S>Пакет BuyList #$11
ListID=1526608964
C>Пакет RequestBuyItem #$1F
Item: ID:6524 Count:7
Купим предмет ID:6524 в кол-ве:7
Всё купили!
Переход к обмену...
S>Пакет InventoryUpdate #$27
ListCount=2
Изменяем параметры предмета!
i=2 ItemBase[1,ii]=1080456333 ItemBase[2,ii]=6524 ItemBase[3,ii]=8 ItemBase[4,ii]=1
S>Пакет ItemListPacket #$1B
>ColvoItm=69
TradeCount/TradeMultiItemCount:1/8
TradeCount/TradeMultiItemCount:2/8
S>Пакет NetPing #$D3
Нет такого предмета:6910
TradeCount/TradeMultiItemCount:3/8
Нет такого предмета:6911
TradeCount/TradeMultiItemCount:4/8
Нет такого предмета:6912
TradeCount/TradeMultiItemCount:5/8
Нет такого предмета:6913
TradeCount/TradeMultiItemCount:6/8
Нет такого предмета:6914
TradeCount/TradeMultiItemCount:7/8
Нет такого предмета:6915
TradeCount/TradeMultiItemCount:8/8
Готовы обменять:6916
TradeCount/TradeMultiItemCount:9/8
S>Пакет NpcHtmlMessage #$0F
C>Пакет RequestBypassToServer #$23 (multisell)
S>Пакет MultiSellList #$D0
ListID=517
C>Пакет RequestMultiSellChoose #$A7(ListId:517 EntryId:17 Count:24)
Обменяем предмет ListID:517 EntryID:900000 в кол-ве:24
Всё обменяли!
Место ловли: Mestolovli1
Пробуем выйти на путь...
найден ближайший чекпоинт #1 бежим туда
Бежим на берег...
S>Пакет MoveBackwardToLocation #$01
бежим к #2

.................................................. .........

В чём может быть причина?

NLObP
27.07.2009, 05:51
Поправил код под Грацию Финал (специально для Final_World.ru (java server)). И packetsT1.ini для Грации Финал.
Тестируйте.

LiS
16.08.2009, 04:07
NLObP, у тебя в коде есть такое место:

//сюда вписываем ItemID предметов для автообмена
TradeMultiItem=[6908,6909,6910,6911,6912,6913,6914,6915,6916]; //нельзя изменять, собъется обмен!
//количество предметов в массиве TradeMultiItem
TradeMultiItemCount=9;//нельзя изменять, собъется обмен!

Но я не хочу продавать Fish Gem'ы и Shiny Fish Gem'ы.
Что нужно для этого сделать?
Почему нельзя изменять?
Если убрать 6913 и 6914, а TradeMultiItemCount поставить равным 7, не будет работать?
Поясни, пожалуйста.

NLObP
17.08.2009, 01:23
NLObP, у тебя в коде есть такое место:

//сюда вписываем ItemID предметов для автообмена
TradeMultiItem=[6908,6909,6910,6911,6912,6913,6914,6915,6916]; //нельзя изменять, собъется обмен!
//количество предметов в массиве TradeMultiItem
TradeMultiItemCount=9;//нельзя изменять, собъется обмен!

Но я не хочу продавать Fish Gem'ы и Shiny Fish Gem'ы.
Что нужно для этого сделать?
Почему нельзя изменять?
Если убрать 6913 и 6914, а TradeMultiItemCount поставить равным 7, не будет работать?
Поясни, пожалуйста.

Поставь вместо ID предметов, которые хочешь оставить, любое заведомо неподходящее под другие ID предметов число (например 999999 или 1) и оно просто будет пропущено. Причина в вычислении EntryId в пакете MultiSellChoose. ID предметов для обмена идут по порядку и пропускать их нельзя.

LiS
18.08.2009, 07:58
Совет: Добавьте строчку в скрипте, чтобы во время обмена у фишермена очищался контрол msg. Иначе через несколько часов происходит его переполнение и скрипт падает с ошибкой "List index out of bounds (4999)"

//************************************************** *************
// Вся торговля здесь!!!
//************************************************** *************
procedure OnTrade(Sender: TObject);
begin
msg.Lines.Clear();
case trade of
//-------------------------------------------------
//продаем фишерману из массива TradeSellItem
//-------------------------------------------------
200: begin

LiS
19.08.2009, 18:52
Добавление строчки очистки Memo-эдита не помогло.
Все также через несколько часов вылетает ошибка "List index out of bounds (4999)".

Знатоки, подскажете куда смотреть?
Не приходит ничего путного на ум.
Где что может переполняться?

//nlobp: лог сообщений и лог пакетов давай. Выход за пределы массива вроде. Что там у нас на 5000 записей есть?

//LiS: Как только опять упадет - дам. А лог пакетов. Он же нереально большой. Может что-то конкретное надо?

LiS
23.08.2009, 04:03
Сейчас переделываю бота на версию пакетхака 3.5.13.122
Ругается на вот это:

//отключение клиента
//YesFreeOnClientDisconnect;
//YesFreeOnServerDisconnect;

Почему?

//nlodp: по другому называются. Поищи на форуме уже писали.

LiS
23.08.2009, 04:17
Вот скрины при работе в версии пакетхака 3.4.1.83:
Окно бота:
463
http://coderx.ru/attachment.php?attachmentid=463&stc=1&d=1250982845

Лог сообщение в самом боте (после очистки лога при покупке наживки):
464
http://coderx.ru/attachment.php?attachmentid=464&stc=1&d=1250982845

Сообщение об ошибке:
462
http://coderx.ru/attachment.php?attachmentid=462&stc=1&d=1250982845

Сообщение об ошибке полностью:
465
http://coderx.ru/attachment.php?attachmentid=465&stc=1&d=1250982845

Извиняюсь, если ссылки и картинки вставил не так, как надо, но с этим "предмодерированием" одни проблемы :confused:

LiS
23.08.2009, 11:29
Вот часть кода:
В версии 3.4.1.83 работает нормально, а в версии 3.5.13.122 падает на выделенной синим цветом строке.
Если комментирую эту строку, то падает в следующей.
В чем причина? Подскажите, плиз.

//************************************************** *************
//Вызывается при выключении скрипта
//************************************************** *************
procedure Free;
begin
ItemBase:=nil; ItemBase2:=nil;

//таймеры
ShowInf.Enabled:=false; ShowInf.Interval:=0; ShowInf.Free; ShowInf.OnTimer:=nil;
fishin.Enabled:=false; fishin.Interval:=0; fishin.Free; fishin.OnTimer:=nil;
trade1.Enabled:=false; trade1.Interval:=0; trade1.Free; trade1.OnTimer:=nil;
createpfo.Enabled:=false; createpfo.Interval:=0; createpfo.Free; createpfo.OnTimer:=nil;
movetimer.Enabled:=false; movetimer.Interval:=0; movetimer.Free; movetimer.OnTimer:=nil;

LiS
23.08.2009, 12:17
Хм. Видимо проблема была в этом:
ShowInf.OnTimer:=nil;
fishin.OnTimer:=nil;
trade1.OnTimer:=nil;
createpfo.OnTimer:=nil;
movetimer.OnTimer:=nil;

Убрал, и больше не падает при вызове Free.

Но есть другой вопрос.

Компилирую скрипт. Ставлю галочку на запуск скрипта. Все отлично.
Снимаю галочку, форма исчезает. Еще раз ставлю галочку. Скрипт запускается, форма появляется, но в логах пишет:
ошибка в CreateItemBase->StringList.Add()

И еще ошибка такая (вернее не понятная мне вещь).
В версии 3.5.13.122 уже есть встроенный метод SendMsg(string).
В этом скрипте он почему-то не шлет сообщения в клиент.
Пришлось вставить такой метод в скрипт:
//.....................
procedure SendMsg_to_CL(msg:string); // отправка системных сообщений клиенту
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(Name);
end;
и использовать его.

alexteam
23.08.2009, 15:08
Убрал, и больше не падает при вызове Free.
Смотрим порядок действий
ShowInf.Enabled:=false; ShowInf.Interval:=0; ShowInf.Free; ShowInf.OnTimer:=nil;

по русски: отключаем таймер, устанавливаем интервал = 0 (зачем?), высвобождаем таймер (что в принципе подразумевает его останов), пытаемся обнулить привязку процедуры к событию онтаймер.
последний шаг производиться на уже не существующем обьекте, что явно приведет к рантайм эррору.
в принципе, все эти 4 действия сводятся к банальному ShowInf.Free; больше ничего и не надо.

ошибка в CreateItemBase->StringList.Add()
что в статусбаре/еррорлоге написано, и код инит функции с подствеченой строкой на которой выбивает ошибку в студию.

В версии 3.5.13.122 уже есть встроенный метод SendMsg(string).
В этом скрипте он почему-то не шлет сообщения в клиент.
SendMsg встроенный в пх шлет сообщения в ЛОГ пх.

NLObP
23.08.2009, 15:25
alexteam, здесь (http://coderx.ru/showpost.php?p=34557&postcount=51) лежит скрипт под грацию финал с указанными тобой исправлениями, плюс оптимизация кода покупки/продажи.
LiS, попробуй этот скрипт править под себя, мне кажется он получше будет.

LiS
24.08.2009, 13:44
Смотрим порядок действий
...
в принципе, все эти 4 действия сводятся к банальному ShowInf.Free; больше ничего и не надо.

В том-то и дело, что в версии 3.4.1.83 работает нормально :confused:


что в статусбаре/еррорлоге написано, и код инит функции с подствеченой строкой на которой выбивает ошибку в студию.

Никаких ошибок не выбивает. Просто в лог бота пишет эту строку:
"ошибка в CreateItemBase->StringList.Add()"


SendMsg встроенный в пх шлет сообщения в ЛОГ пх.

Спасибо!

LiS
30.08.2009, 06:02
Ребят, очередная непонятная мне вещь.
Пакетхак версии 3.5.13.122
Покупаю персом 2 фиолетовые наживки хай грейда у фишермана Монакана.
Вот что приходит:
21 02 00 02 00 04 00 44 15 35 40 39 00 00 00 FF FF FF FF 8E 7D 2C 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 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 02 00 04 00 67 A2 38 40 7C 19 00 00 0A 00 00 00 04 00 00 00 05 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 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

В окне детальной расшифровки отображается
(то что меня поразило выделено синим цветом):
Тип: 0x21 (InventoryUpdate)
Размер: 151+2
Время прихода: 04:55:57:214
0002 h Count: 2 (0x0002)
[Начало повторяющегося блока 1/2]
0004 h UpdateType: 2 (0x0002)
0006 h ItemType1: 4 (0x0004)
0008 d ObjectID: 1077220676 (0x40351544)
0012 d ItemID: Адена ID:57 (0x0039) (0x00000039)
0016 d LocationSlot: -1 (0xFFFFFFFF)
0020 d Quantity: 2915726 (0x002C7D8E)
0024 h ItemType2: 4 (0x0004)
0026 h CustomType1: 0 (0x0000)
0028 h Equipped: 0 (0x0000)
0030 d BodyPart: 0 (0x00000000)
0034 h EnchantLevel: 0 (0x0000)
0036 h CustType2: 0 (0x0000)
0038 d AugmentationBonus: 0 (0x00000000)
0042 d Mana: 0 (0x00000000)
0046 d AttackAttrElement: -1 (0xFFFFFFFF)
0050 d AttackAttrElementVal: 0 (0x00000000)
0054 d DefAttrFire: 0 (0x00000000)
0058 d DefAttrWater: 0 (0x00000000)
0062 d DefAttrWind: 0 (0x00000000)
0066 d DefAttrEarth: 0 (0x00000000)
0070 d DefAttrHoly: 0 (0x00000000)
0074 d DefAttrUnholy: 0 (0x00000000)
0078 d 0: 262146 (0x00040002)
[Конец повторяющегося блока 1/2]
[Начало повторяющегося блока 2/2]
0082 h UpdateType: 41575 (0xA267)
0084 h ItemType1: 16440 (0x4038)
0086 d ObjectID: 6524 (0x0000197C)
0090 d ItemID: Кинжал ID:10 (0x000A) (0x0000000A)
0094 d LocationSlot: 4 (0x00000004)
0098 d Quantity: 5 (0x00000005)
0102 h ItemType2: 0 (0x0000)
0104 h CustomType1: 256 (0x0100)
0106 h Equipped: 0 (0x0000)
0108 d BodyPart: 0 (0x00000000)
0112 h EnchantLevel: 0 (0x0000)
0114 h CustType2: 0 (0x0000)
0116 d AugmentationBonus: 0 (0x00000000)
0120 d Mana: -1 (0xFFFFFFFF)
0124 d AttackAttrElement: 0 (0x00000000)
0128 d AttackAttrElementVal: 0 (0x00000000)
0132 d DefAttrFire: 0 (0x00000000)
0136 d DefAttrWater: 0 (0x00000000)
0140 d DefAttrWind: 0 (0x00000000)
0144 d DefAttrEarth: 0 (0x00000000)
0148 d DefAttrHoly: 0 (0x00000000)
[Конец повторяющегося блока 2/2]

Какой там нафиг кинжал???
Там должна быть "Фиолетовая наживка - 3".
Да и количество должно быть "2".
Причем в формочке бота список предметов правильный.
С чем связан такой баг в пакетхаке?

NLObP
31.08.2009, 01:41
LiS, исправь в packetsT1.ini

21=InventoryUpdate:h(Count:Loop.1.0022)h(UpdateTyp e:01-add,02-modify,03-remove)h(ItemType1)d(ObjectID)d(ItemID:Get.Func01) d(LocationSlot)d(Quantity)h(ItemType2)h(CustomType 1)h(Equipped)d(BodyPart)h(EnchantLevel)h(CustType2 )d(AugmentationBonus)d(Mana)d(AttackAttrElement)d( AttackAttrElementVal)d(DefAttrFire)d(DefAttrWater) d(DefAttrWind)d(DefAttrEarth)d(DefAttrHoly)d(DefAt trUnholy)

Вот что должно быть

Tип: 0x21 (InventoryUpdate)
Pазмер: 151+2
Время прихода: 00:37:10:706
0002 h Count: 2 (0x0002)
[Начало повторяющегося блока 1/2]
0004 h UpdateType: 2 (0x0002)
0006 h ItemType1: 4 (0x0004)
0008 d ObjectID: 1077220676 (0x40351544)
0012 d ItemID: Адена ID:57 (0x0039) (0x00000039)
0016 d LocationSlot: -1 (0xFFFFFFFF)
0020 d Quantity: 2915726 (0x002C7D8E)
0024 h ItemType2: 4 (0x0004)
0026 h CustomType1: 0 (0x0000)
0028 h Equipped: 0 (0x0000)
0030 d BodyPart: 0 (0x00000000)
0034 h EnchantLevel: 0 (0x0000)
0036 h CustType2: 0 (0x0000)
0038 d AugmentationBonus: 0 (0x00000000)
0042 d Mana: 0 (0x00000000)
0046 d AttackAttrElement: -1 (0xFFFFFFFF)
0050 d AttackAttrElementVal: 0 (0x00000000)
0054 d DefAttrFire: 0 (0x00000000)
0058 d DefAttrWater: 0 (0x00000000)
0062 d DefAttrWind: 0 (0x00000000)
0066 d DefAttrEarth: 0 (0x00000000)
0070 d DefAttrHoly: 0 (0x00000000)
0074 d DefAttrUnholy: 0 (0x00000000)
[Конец повторяющегося блока 1/2]
[Начало повторяющегося блока 2/2]
0078 h UpdateType: 2 (0x0002)
0080 h ItemType1: 4 (0x0004)
0082 d ObjectID: 1077453415 (0x4038A267)
0086 d ItemID: Фиолетовая Наживка - 3 ID:6524 (0x197C) (0x0000197C)
0090 d LocationSlot: 10 (0x0000000A)
0094 d Quantity: 4 (0x00000004)
0098 h ItemType2: 5 (0x0005)
0100 h CustomType1: 0 (0x0000)
0102 h Equipped: 0 (0x0000)
0104 d BodyPart: 256 (0x00000100)
0108 h EnchantLevel: 0 (0x0000)
0110 h CustType2: 0 (0x0000)
0112 d AugmentationBonus: 0 (0x00000000)
0116 d Mana: 0 (0x00000000)
0120 d AttackAttrElement: -1 (0xFFFFFFFF)
0124 d AttackAttrElementVal: 0 (0x00000000)
0128 d DefAttrFire: 0 (0x00000000)
0132 d DefAttrWater: 0 (0x00000000)
0136 d DefAttrWind: 0 (0x00000000)
0140 d DefAttrEarth: 0 (0x00000000)
0144 d DefAttrHoly: 0 (0x00000000)
0148 d DefAttrUnholy: 0 (0x00000000)
[Конец повторяющегося блока 2/2]

tiranosaur
24.10.2009, 13:26
поднимался уже вопрос о безопасности работы рыбака. как можно сделать чтобы при появлении пакета 03 (чаринфо) рыбак покидал игру либо отваливался клиент?

Murdoc
26.10.2009, 14:13
поднимался уже вопрос о безопасности работы рыбака. как можно сделать чтобы при появлении пакета 03 (чаринфо) рыбак покидал игру либо отваливался клиент?

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

sinles
07.12.2009, 17:05
Интересный скрипт, Спасибо автору за идею и реализацию, но к сожалению у меня на сервере изменены некоторые пакеты из за чего скрипт в таком виде работать не желает :(
Честно не знаю даже, это изменены пакеты, их формат, или просто изменены их идентификаторы. Разобраться в этом конечно хочется, но еще больше хочется наловить много рыбы, поэтому я копи-пастом переделал ваш скрипт для работы на моем сервере, при этом я перенес только возможность ловить рыбу и отбиваться от пойманных монстров (тех кто нападет в общем).
Основной проблемой было то что после каждого логина в игру изменялся пакет использования итэмов и я так и не нашел закономерности... Поэтому слегка изменил и способ инициализации и сам процесс где то.

Вот выкладываю вам, может у кого на сервере та же проблема :)


Управление скриптом производится с помощью команд чата.
Что бы рыбачить необходимо выполнить инициализацию, после запуска скрипта.
Как это сделать:
пишем в чат
1)===init weapon
используем оружие (одеваем или снимаем, выставив на панель можно просто кликнуть по нему)
2)===init rod
используем удочку
3)===init lure
используем приманку
4)===init shots
используем соски
Если вы в этой процедуре сделаете что то не так всегда можете повторить любой пункт в любом порядке. Что бы упростить эту процедуру можно написать макрос.

для начала ловли в чат
===start
окончание
===stop

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

Противопоказания:
если вы ввели в чат любую команду вида ===команда и она появилась у вас в чате это значит что либо не включен скрипт, либо что у вас на сервере чат использует пакет с другим идентификатором. (во втором случае можете выкинуть этот скрипт)

З.Ы. приношу свои извинения автору за безбожное коверканье кода.

Lynx
20.12.2009, 20:56
Тоже писал свой скрипт. вопрос
Если рыба начала срываться, хватит только смены наживки, или надо бегать?

sinles
22.12.2009, 14:08
Это зависит от сервера, на моем сервере до последнего обновления на то насколько часто срывается рыба не влияло ни место, ни смена наживок, ни смена мест. Сейчас же влияет частота смена места.

Узнать можно только опытным путем (ИМХО)

Murdoc
28.01.2010, 17:45
Сервачок перешол на ГрациюЭпилог. Попытался запустить скрипт на рыбалку - не правильно определяет все предметы в инвентаре кроме первого. Полез смотреть пакеты и выяснил что формат немножко отличается:
11=ItemList:h(ShowWindow)h(ItemCount:Loop.01.0024) h(ItemTypeID)d(ObjectID)d(ItemID:Get.Func01)d(Loca tionSlot)q(Amount)h(ItemType2)h(CustomType1)h(isEq uipped)d(BodyPart)h(EnchantLevel)h(CustType2)d(Aug mentID:Get.AugmentID)d(Mana)h(AttackElement)h(Atta ckElementPower)h(FireDefElementPower)h(WaterDefEle mentPower)h(WindDefElementPower)h(EarthDefElementP ower)h(HolyDefElementPower)h(UnholyDefElementPower )d(RemainingTime)d(1)h(2)

21=InventoryUpdate:h(Count:Loop.1.0025)h(UpdateTyp e:01-add,02-modify,03-remove)h(ItemType1)d(ObjectID)d(ItemID:Get.Func01) d(LocationSlot)q(Quantity)h(ItemType2)h(CustomType 1)h(Equipped)d(BodyPart)h(EnchantLevel)h(CustType2 )d(AugmentID:Get.AugmentID)d(Mana)h(AttackElement) h(AttackElementPower)h(FireDefElementPower)h(Water DefElementPower)h(WindDefElementPower)h(EarthDefEl ementPower)h(HolyDefElementPower)h(UnholyDefElemen tPower)d(RemainingTime)d(1)h(2)
В конце цикла добавляется 6 нулей. Пакетхак теперь эти пакетики правильно парсит, а вот скрипт для рыбалки все равно не понимает. Скрипт брал тут: ВОТ ОН (http://coderx.ru/showpost.php?p=34557&postcount=51). Ну и вот кусок моего пакета:
11 01 00 29 00 04 00 32 EA 6F 10 27 07 00 00 00 00 00 00 03 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 04 00 68 32 EA 10 B7 0C 00 00 00 00 00 00 01 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 04 00 58 32 EA 10 BF 0C 00 00 00 00 00 00 01 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 04 00 43 32 EA 10 AE 0C 00 00 00 00 00 00 01 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 04 00 27 32 EA 10 35 0C 00 00 00 00 00 00 01 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FE FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00

Imperial2008
04.02.2010, 17:48
Поле того, как инвентарь обновлен все равно не отображаются правильно вещей в этом инвентаре. Как вы думаете: это проблема, связанна с неправильной дешифровкой пакетов или неправильными id предметов. Предметы отображаются, но только 1й из всех правильный.
Хроники: Hellbound

NLObP
04.02.2010, 21:45
Imperial2008, наверное с неправильной обработкой пакета инвентаря и изменения инвентаря.

Breadfan
05.02.2010, 01:04
Раз 1ый верен, то идет сбой считывания в описании 1го же итема - обычно это тип байта указывающего количество...Постоянно встречается разброс типов на разных серверах - то dword то qword...Рассмотри сам пакет ИтемЛист и танцуя от него уже поправь процедуры создания\апдейта итемлиста

Murdoc
05.02.2010, 16:17
Imperial2008, наверное с неправильной обработкой пакета инвентаря и изменения инвентаря.

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

Отчет о проделанной работе :) Вобщем таки пришлось чуть подредактировать процедуры по обработке пакетов ItemList и InventoryUpdate. Вчастности длину блока описывающего 1 вещь. Например в моем случае в процедуре procedure ItemList пришлось поменять inc(j,24) на inc(j,30). В процедуре procedure InventoryUpdate то же самое. Если нет желания разбиратся с форматом пакета под свой серв и искать в нем смещение, можно попробовать и просто перебором значений от 20 до 34(при условии что в пакете (Amount) таки qword если нет то можно столкнуться с тем что предметы определяются правильно, но не правильно определяется признак надетости). Но это для извращенцев :)

ЗЫ. Да-да я сначала тоже пошел путем извращений :)
ЗЫЫ мои значения смещения годятся для сборки от http://www.l2jserver.com/

alxumuk
12.02.2010, 18:41
подскажите пожалуйста
пакет ExFishingEnd
не вычитывается последний 8й байт из-за чего постоянно "сорвалась"
перепробовал всё..
tempi:=1;
msg.Lines.Add('S>Пакет ExFishingEnd #$FE1F00'+' Rez:'+IntToStr(ReadC(tempi))+' Rez:'+IntToStr(ReadC(tempi))+' Rez:'+IntToStr(ReadC(tempi))+' Rez:'+IntToStr(ReadC(tempi))+' Rez:'+IntToStr(ReadC(tempi))+' Rez:'+IntToStr(ReadC(tempi))+' Rez:'+IntToStr(ReadC(tempi))+' Rez:'+IntToStr(ReadC(tempi))+' Rez:'+IntToStr(ReadC(tempi)));
для
FE 1F 00 9A 76 70 48 01
возвращает
$FE1F00 Rez:254 Rez:31 Rez:0 Rez:154 Rez:118 Rez:112 Rez:72 Rez:0 Rez:0
... как обойти?

Murdoc
16.02.2010, 11:20
та же фигня. причем "сорвалось" не всегда а 3 раза из 4х. И при этом рыбу таки вылавливает. полтергейст какой то. жаль у меня сейчас сервак потушен не могу поковырять скрипт, разобраться

NLObP
11.04.2010, 19:27
Xkor починил форум, теперь файлы скачиваются.