Собсно здрасте!)
Я люблю рыбалку... (с) Не помню откуда
Так вот, использую скрипт на рыбалку в таком виде + к ниму скрипт на хилки
Код:
//Автоматизация ловли рыбы by NLObP
//Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS"
//Необходимо затариться удочкой и крючками
//выучить соответствующие скиллы
//Социальное действие YES - начать
//Социальное действие NO - остановиться
//Enjoy!
// Disclaimer of Warranty. Unless required by applicable law or
// agreed to in writing, Licensor provides the Work (and each
// Contributor provides its Contributions) on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
// implied, including, without limitation, any warranties or conditions
// of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
// PARTICULAR PURPOSE. You are solely responsible for determining the
// appropriateness of using or redistributing the Work and assume any
// risks associated with Your exercise of permissions under this License.
const
fish='2F 20 05 00 00 00 00 00 00 00';
pump='2F 21 05 00 00 00 00 00 00 00';
reel='2F 22 05 00 00 00 00 00 00 00';
var
Cmd:String;
timer1: TTimer;
status:boolean;
Attacker, CharID, ObjectID, SocialID, ItemID, CoordX, CoordY, CoordZ: Integer;
procedure Init; //Вызывается при включении скрипта
begin
ItemID:=0;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=false;
timer1.interval:=1800; //время задержки
//SendMsg('Начало ловли рыбы социальное действие Yes');
end;
procedure Free; //Вызывается при выключении скрипта
begin
timer1.Free;
end;
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
procedure TargetAttacker(Attacker: Integer);
begin
SendMsg('AttackerID='+IntToStr(Attacker)+' PlayerID='+IntToStr(CharID));
timer1.enabled:=false;
buf:=#$04;
WriteD(Attacker);
WriteD(CoordX);
WriteD(CoordY);
WriteD(CoordZ);
WriteC(00);
SendToServer;
end;
Procedure SaveCoord;
var
i: integer;
begin
//запоминаем свои координаты
i:=2;
CoordX:=ReadD(i);
CoordY:=ReadD(i);
CoordZ:=ReadD(i);
end;
procedure Fishing;
begin
buf:=HStr(fish);
SendToServer;
end;
procedure FishShot;
begin
buf:=#$14;
WriteD(ItemID);
WriteD(00);
SendToServer;
end;
procedure Pumping;
begin
FishShot;
buf:=HStr(pump);
SendToServer;
end;
procedure Reeling;
begin
FishShot;
buf:=HStr(reel);
SendToServer;
end;
procedure OnTimer1(Sender: TObject);
begin
Fishing;
timer1.enabled:=false;
//SendMsg('Fishing');
end;
//******************************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
//****************************************************************************
//Первым делом включаем Fishing Shot
if FromServer and (pck[1]=#$27) and (ItemID=0) then begin //idItem'a который мы хотим юзать
ItemID:=ReadD(8);
end;
if FromServer and (pck[1]=#$04) then
CharID:=ReadD(18);
if FromClient and (pck[1]=#$1B) then
begin
SocialID:=ReadD(2);
case SocialID of
//социальное действие Yes для начала ловли
6:begin
Status:=true;
Fishing;
end;
//социальное действие No для окончания
5:begin
Status:=false;
timer1.enabled:=false;
end;
end;
end;
if Status=true then begin
//MagicSkillUse 48, Attack 05
if FromServer and ((pck[1]=#$48) or (pck[1]=#$05)) then begin
Attacker:=ReadD(2);
ObjectID:=ReadD(6);
end;
//пакет ValidatePosition с кординатами
if FromClient and (pck[1]=#$48) then SaveCoord;
//Если мы попали в таргет или атакуемся магией
//if (Attacker<>ObjectID) and (CharID=ObjectID) then TargetAttacker(Attacker);
//FishinHPRegen
if FromServer and (pck[1]+pck[2]=#$FE#$16) and (pck[16]=#$00) then Pumping;
if FromServer and (pck[1]+pck[2]=#$FE#$16) and (pck[16]=#$01) then Reeling;
//FishingEnd
if FromServer and (pck[1]+pck[2]=#$FE#$14) then timer1.enabled:=true;
end
else exit;
end.
Рыба ловится не взирая на вылезающих мобов, всё казалось бы зашибись, кроме одного, достаточно часто вылезают 2 моба под ряд (Одного моба протягивает простая хилка), и всёб хорошо, грейтер хилка их протягивает, но я ЖАДНЫЙ и мне не хочется трарить денюжки заработаные не честным путём на то, чтоб заробатывать дальше) Вопрос заключается в следующем: Возможно ли сделать так, чтобы когда значение ХП было ниже максимума, рыба ловиься переставала, и снова начинала при полном восстановлении?
Собсно здрасте!)
Я люблю рыбалку... (с) Не помню откуда
Так вот, использую скрипт на рыбалку в таком виде + к ниму скрипт на хилки
Посмотри в этой теме на 1 странице более свежий скрипт на рыбалку. В нем проверяется количество крючков и шотов. В остальном алгоритм тот же.
Цитата:
Рыба ловится не взирая на вылезающих мобов, всё казалось бы зашибись, кроме одного, достаточно часто вылезают 2 моба под ряд (Одного моба протягивает простая хилка), и всёб хорошо, грейтер хилка их протягивает, но я ЖАДНЫЙ и мне не хочется трарить денюжки заработаные не честным путём на то, чтоб заробатывать дальше) Вопрос заключается в следующем: Возможно ли сделать так, чтобы когда значение ХП было ниже максимума, рыба ловиься переставала, и снова начинала при полном восстановлении?
А это вариант для чаров, которые могут сами себя лечить:
Код:
//Автоматизация ловли рыбы by NLObP
//Возможность работы нескольких одновременных скриптов
//Добавлена проверка на кол-во крючков и шотов.
//Доработанная на предмет лечения самого себя
//Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS" и Protocol 656
//Необходимо затариться удочкой и крючками, шотами
//выучить соответствующие скиллы
//1 одеть и снять: удочку, крючек для определения ObjectID
//2 в процессе рыбалки использовать один раз фишин-шот для определения ObjectID
//3 делаем таргет на себя для лечения
//Социальное действие YES - начать
//Социальное действие NO - остановиться
//Enjoy!
{Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.}
//******************************************************************************
const
Name='NLObP'; //исправить на имя чара
heal=1218; //Greater Battle Heal
fish=1312;
pump=1313;
reel=1314;
//******************************************************************************
var
timer: TTimer;
TimerHP: TTimer;
TimerMOB: TTimer;
status, status2, ScrInUse, UnderAttack: boolean;
Cmd, Lure, ColvoLure, Shot, ColvoShot, CharObjID: Integer;
CurMP, MaxMP, MaxHP, CurHP: integer;
//******************************************************************************
// Вызывается при включении скрипта
//******************************************************************************
procedure Init;
begin
Shot:=0;
UnderAttack:=false;
Status:=false; //в процессе рыбалки или нет?
Status2:=false; //показывает, что скрипт готов к работе
ScrInUse:=false; //скрипт отключен
CharObjID:=0; //идентификатор ловца
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=10000; //время задержки (сделать достаточно большое, чтобы среагировать на атаку моба)
timerHP:=TTimer.Create(nil);
timerHP.OnTimer:=@OnTimerHP;
timerHP.enabled:=false;
timerHP.interval:=5000; //время между попытками лечиться
timerMOB:=TTimer.Create(nil);
timerMOB.OnTimer:=@OnTimerMOB;
timerMOB.enabled:=false;
timerMOB.interval:=60000; //ждем примерно минуту, пока моб нас колбасит
Say('1 одеть и снять: удочку, крючек!');
Say('2 в процессе рыбалки использовать один раз фишин-шот!');
Say('3 сделать таргет на себя для самолечения!');
end;
//******************************************************************************
// Вызывается при выключении скрипта
//******************************************************************************
procedure Free;
begin
timer.Free;
timerHP.Free;
timerMOB.Free;
end;
//******************************************************************************
Function ObjtoColvo(ItemObjID:integer): integer;
var
i: integer;
begin
if ItemObjID=0 then exit;
for i:=0 to ReadD(4)-1 do begin
if ItemObjID=ReadD(i*28+8) then begin
Result:=ReadD(i*28+16); //количество
exit;
end;
end;
Result:=0;
end;
//******************************************************************************
procedure InitStats;
var
i: integer;
begin
//Запоминаем ИД
i:=18;
CharObjID:=ReadD(i);
//смещение переменное, зависит от имени (LenName*2+2)
i:=i+(Length(Name)*2+2)+44;
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
MaxMP:=ReadD(i);
CurMP:=ReadD(i);
if ScrInUse then begin
if not UnderAttack then begin
if (CurHP<MaxHP) then begin
timer.enabled:=false; //выключаем задержку между забросами
Status:=false;
TimerHP.enabled:=true;
TimerMOB.enabled:=true;
UnderAttack:=true;
end
else begin
if status=false then begin
TimerHP.enabled:=false;
timer.enabled:=true; //включаем задержку между забросами
end;
end;
end;
end;
end;
//******************************************************************************
procedure StatsUpdate;
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do begin
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
#$0B: CurMP:=ReadD(i*8+14);
#$0C: MaxMP:=ReadD(i*8+14);
end;
end;
if ScrInUse then begin
if not UnderAttack then begin
if (CurHP<MaxHP) then begin
timer.enabled:=false; //выключаем задержку между забросами
Status:=false;
TimerHP.enabled:=true;
TimerMOB.enabled:=true;
UnderAttack:=true;
end
else begin
if status=false then begin
TimerHP.enabled:=false;
timer.enabled:=true; //включаем задержку между забросами
end;
end;
end;
end;
end;
//******************************************************************************
procedure OnTimer(Sender: TObject);
begin
timer.enabled:=false; //выключаем задержку между забросами
status:=true;
Fishing;
end;
//******************************************************************************
procedure OnTimerMOB(Sender: TObject);
begin
UnderAttack:=false;
end;
//******************************************************************************
procedure OnTimerHP(Sender: TObject);
begin
// timerMOB.enabled:=true; //ждем примерно минуту, пока моб нас колбасит
//таргет на себя надо делать! Можно заранее на себя таргет сделать.
if (CurHP<MaxHP) then MagicSkillUse(heal); //каждые 10 сек лечимся, пока моб нас бъет в тесении 60 сек
end;
//******************************************************************************
procedure Fishing;
begin
if ColvoLure<>0 then MagicSkillUse(fish)
else begin
Status:=false;
ScrInUse:=false;
Say('Кончились крючки!');
end;
end;
//******************************************************************************
//пакет 2F=RequestMagicSkillUse:h(MagicID)d(CtrlPressed)b(ShiftPressed)
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;
//******************************************************************************
procedure UseItem(ObjID:integer);
begin
buf:=#$14;
WriteD(ObjID);
WriteD(00);
SendToServerEx(Name);
end;
//******************************************************************************
//посылаем сообщение, которое видно только в окне бота
//можно использовать для отладки
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//******************************************************************************
procedure Pumping;
begin
if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot);
MagicSkillUse(pump);
end;
//******************************************************************************
procedure Reeling;
begin
if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot);
MagicSkillUse(reel);
end;
//******************************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
//****************************************************************************
//если от сервака принят пакет с UserInfo. Запоминаем собственный ИД
if FromServer and (ConnectName=Name) and (pck[1]=#$04) then CharObjID:=ReadD(18);
//****************************************************************************
{необходимо уточнить ItemID для своего сервера!!!
6519=Green Colored Lure - Low Grade
6520=Green Colored Lure - Medium Grade
6521=Green Colored Lure - High Grade
6522=Purple Colored Lure - Low Grade
6523=Purple Colored Lure - Medium Grade
6524=Purple Colored Lure - High Grade
6525=Yellow Colored Lure - Low Grade
6526=Yellow Colored Lure - Medium Grade
6527=Yellow Colored Lure - High Grade}
//InventoryUpdate(27):w(count)w(1add2mod3remove)w(itemType1)h(ObjectID)i(ItemId)d(Count)
//запоминаем ObjectID Lure и ColvoLure
if FromServer and (ConnectName=Name) and (pck[1]=#$27) and ((ReadD(12)>=6519) and (ReadD(12)<=6527)) then
begin
Lure:=ReadD(8);
ColvoLure:=ReadD(16); //количество крючков
end;
//****************************************************************************
{необходимо уточнить ItemID для своего сервера!!!
6535=Fishing Shot: non-grade
6536=Fishing Shot: D-grade
6537=Fishing Shot: C-grade
6538=Fishing Shot: B-grade
6539=Fishing Shot: A-grade
6540=Fishing Shot: S-grade}
//InventoryUpdate(27):w(count)w(1add2mod3remove)w(itemType1)h(ObjectID)i(ItemId)d(Count)
//запоминаем ObjectID Fishing Shot и ColvoShot
if FromServer and (ConnectName=Name) and (pck[1]=#$27) and ((ReadD(12)>=6535) and (ReadD(12)<=6540)) then
begin
Shot:=ReadD(8);
ColvoShot:=ReadD(16); //количество шотов
end;
//******************************************************************************
if (CharObjID<>0) and (ColvoLure<>0) and not status2 then
begin
Say('Автоматизация ловли рыбы готово к работе!');
status2:=true;
end;
//******************************************************************************
//ItemList
if FromServer and (ConnectName=Name) and (pck[1]=#$1B) and status then
begin
ColvoShot:=ObjtoColvo(Shot); //количество шотов
ColvoLure:=ObjtoColvo(Lure); //количество крючков
end;
//****************************************************************************
//ловим рыбу
if Status and FromServer and (ConnectName=Name) and (CharObjID<>0) then
begin
//FishingEnd
if (pck[1]+pck[2]=#$FE#$14) and (CharObjID=ReadD(4)) then begin
timer.enabled:=true; //ждем N секунд межде рыбалками
end;
//FishinHPRegen
if (pck[1]+pck[2]=#$FE#$16) and (CharObjID=ReadD(4)) and (pck[15]+pck[16]=#$00#$00) then pumping;
if (pck[1]+pck[2]=#$FE#$16) and (CharObjID=ReadD(4)) and (pck[15]+pck[16]=#$00#$01) then reeling;
end;
//******************************************************************************
//UserInfo
if FromServer and (ConnectName=Name) and (pck[1]=#$04) then InitStats;
//******************************************************************************
//StatusUpdate
if FromServer and (ConnectName=Name) and (pck[1]=#$0E) and (CharObjID=ReadD(2)) then StatsUpdate;
//****************************************************************************
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
Cmd:=ReadD(2);
case cmd of
//социальное действие Yes для начала ловли
6: begin
if CharObjID=0 then exit;
ScrInUse:=true;
Status:=true;
Fishing;
end;
//социальное действие No для окончания
5: begin
if CharObjID=0 then exit;
if Status then Fishing;
ScrInUse:=false;
Status:=false;
timer.enabled:=false;
end;
end;
end;
end.
ЗЫЖ
Проблемный момент прервать рыбную ловлю, когда тебя атакуют. :( Поэтому в этом скрипте предполагаем, что моб атакует в промежутке между рыбалками. Время между забросами нужно делать достаточным, чтобы заметить атаку моба. Выжидаем минуту с попытками самолечения и ловим снова. На 100% отладить не могу, в реале я ловлю гномом. Замечания, поправки приветствуются.
я рыбачу гладом в БВ хеви на шок2 самая проблема даже 1 моб когда серв лагает хилки не работают. ЗЫ что б эфективний хилится тайминг на 1000 ставить надо. я этот скрипт юзаю для кача :) просто качал сполера и устал хилки кушать поставил на автомат и кач попёр. интересно в какой линейки автохил сделают как автососки :).
ЗЫ думаю приерепить к гладу хилера, и как рас твой скриптик мне в этом поможет. т.к. не хочу юзать хил пока не исчезнет моб или пока хп глада не упадёт до 1,5к. если сделаю выложу тут.
Внес изменения в рыбалку для работы на Интерлюде. Пробуйте.
Код:
//Автоматизация ловли рыбы для Interlude by NLObP
//возможность нескольких одновременных скриптов
//Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS" и Protocol 656
//Изменения для работы на Интерлюде
//Необходимо затариться удочкой и крючками, шотами
//выучить соответствующие скиллы
//1 одеть и снять: удочку, крючек, мечь, щит для определения ObjectID
//2 в процессе рыбалки использовать один раз фишин-шот для определения ObjectID
//Социальное действие YES - начать
//Социальное действие NO - остановиться
//Enjoy!
{Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.}
const
Name='NLObP'; //изменить на имя чара
fish=1312;
pump=1313;
reel=1314;
var
timer: TTimer;
status, status2, RodInUse: boolean;
Lure, ColvoLure, Shot, ColvoShot, CharObjID: Integer;
SocialID: Integer;
Cmd:string;
//******************************************************************************
//
//******************************************************************************
procedure Init; //Вызывается при включении скрипта
begin
Shot:=0;
Status:=false;
Status2:=false;
RodInUse:=false;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=5000; //время задержки
Say('1 одеть и снять: удочку, крючек, мечь, щит для определения ObjectID!');
Say('2 в процессе рыбалки использовать один раз фишин-шот для определения ObjectID!');
end;
//******************************************************************************
//
//******************************************************************************
procedure Free; //Вызывается при выключении скрипта
begin
timer.Free;
end;
//******************************************************************************
//пакет 2F=RequestMagicSkillUse:h(MagicID)d(CtrlPressed)b(ShiftPressed)
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;
//******************************************************************************
procedure UseItem(ObjID:integer);
begin
buf:=#$14;
WriteD(ObjID);
WriteD(00);
SendToServerEx(Name);
end;
//******************************************************************************
//посылаем сообщение, которое видно только в окне бота
//можно использовать для отладки
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//******************************************************************************
procedure Fishing;
begin
if ColvoLure<>0 then MagicSkillUse(fish)
else begin
Status:=false;
RodInUse:=false;
Say('Кончились крючки!');
end;
end;
//******************************************************************************
procedure Pumping;
begin
if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot);
MagicSkillUse(pump);
end;
//******************************************************************************
procedure Reeling;
begin
if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot);
MagicSkillUse(reel);
end;
//******************************************************************************
//ItemList - Interlude
{
1 1 writeC(0x1B);
2 2 writeH(_showWindow ? 1 : 0);
4 2 writeH(_items.length);
for(L2ItemInstance temp : _items)
6 2 writeH(temp.getItem().getType1()); // item type1
8 4 writeD(temp.getObjectId());
12 4 writeD(temp.getItemId());
16 4 writeD(temp.getCount());
20 2 writeH(temp.getItem().getType2()); // item type2
22 2 writeH(temp.getCustomType1()); // item type3
24 2 writeH(temp.isEquipped() ? 1 : 0);
26 4 writeD(temp.getItem().getBodyPart()); // rev 415 slot 0006-lr.ear 0008-neck 0030-lr.finger 0040-head 0080-?? 0100-l.hand 0200-gloves 0400-chest 0800-pants 1000-feet 2000-?? 4000-r.hand 8000-r.hand
30 2 writeH(temp.getEnchantLevel()); // enchant level
//race tickets
32 2 writeH(temp.getCustomType2()); // item type3
34 4 writeD(0); // augmentation id
38 4 writeD(temp.getLifeTimeRemaining()); // shadow weapon life time
42
}
Function ObjtoColvoIL(ItemObjID:integer): integer;
var
i: integer;
begin
if ItemObjID=0 then exit;
for i:=0 to ReadD(4)-1 do begin
if ItemObjID=ReadD(i*36+8) then begin
Result:=ReadD(i*36+16); //количество
exit;
end;
end;
Result:=0;
end;
//ItemList - C4
{
1 1 writeC(0x1b);
2 2 writeH(0x01);
4 2 writeH(count);
for (L2ItemInstance temp : _items)
6 2 writeH(temp.getItem().getType1()); // item type1
8 4 writeD(temp.getObjectId());
12 4 writeD(temp.getItemId());
16 4 writeD(temp.getCount());
20 2 writeH(temp.getItem().getType2()); // item type2
22 2 writeH(temp.getCustomType1()); // item type3
24 2 writeH(0x01);
26 4 writeD(temp.getItem().getBodyPart()); // rev 415 slot 0006-lr.ear 0008-neck 0030-lr.finger 0040-head 0080-?? 0100-l.hand 0200-gloves 0400-chest 0800-pants 1000-feet 2000-?? 4000-r.hand 8000-r.hand
30 2 writeH(temp.getEnchantLevel()); // enchant level
//race tickets
32 2 writeH(temp.getCustomType2()); // item type3
}
Function ObjtoColvoC4(ItemObjID:integer): integer;
var
i: integer;
begin
if ItemObjID=0 then exit;
for i:=0 to ReadD(4)-1 do begin
if ItemObjID=ReadD(i*28+8) then begin
Result:=ReadD(i*28+16); //количество
exit;
end;
end;
Result:=0;
end;
//******************************************************************************
procedure OnTimer(Sender: TObject);
begin
Fishing;
timer.enabled:=false;
end;
//******************************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
//****************************************************************************
//если от сервака принят пакет с UserInfo. Запоминаем собственный ИД
if FromServer and (ConnectName=Name) and (pck[1]=#$04) then CharObjID:=ReadD(18);
//****************************************************************************
{необходимо уточнить ItemID для своего сервера!!!
6519=Green Colored Lure - Low Grade A
6520=Green Colored Lure - Medium Grade
6521=Green Colored Lure - High Grade
6522=Purple Colored Lure - Low Grade
6523=Purple Colored Lure - Medium Grade
6524=Purple Colored Lure - High Grade
6525=Yellow Colored Lure - Low Grade
6526=Yellow Colored Lure - Medium Grade
6527=Yellow Colored Lure - High Grade}
//InventoryUpdate(27):w(count)w(1add2mod3remove)w(itemType1)h(ObjectID)i(ItemId)d(Count)
//запоминаем ObjectID Lure и ColvoLure
if FromServer and (ConnectName=Name) and (pck[1]=#$27) and ((ReadD(12)>=6519) and (ReadD(12)<=6527)) then begin
Lure:=ReadD(8);
ColvoLure:=ReadD(16); //количество крючков
//Say('Крючков='+inttostr(ColvoLure));
end;
//****************************************************************************
{необходимо уточнить ItemID для своего сервера!!!
6535=Fishing Shot: non-grade
6536=Fishing Shot: D-grade
6537=Fishing Shot: C-grade
6538=Fishing Shot: B-grade
6539=Fishing Shot: A-grade
6540=Fishing Shot: S-grade}
//InventoryUpdate(27):w(count)w(1add2mod3remove)w(itemType1)h(ObjectID)i(ItemId)d(Count)
//запоминаем ObjectID Fishing Shot и ColvoShot
if FromServer and (ConnectName=Name) and (pck[1]=#$27) and ((ReadD(12)>=6535) and (ReadD(12)<=6540)) then begin
Shot:=ReadD(8);
ColvoShot:=ReadD(16); //количество шотов
//Say('Шотов='+inttostr(ColvoShot));
end;
//****************************************************************************
if (CharObjID<>0) and (ColvoLure<>0) and not status2 then begin //(Shot<>0) and (ColvoShot<>0) and
Say('Автоматизация ловли рыбы готово к работе!');
status2:=true;
end;
//******************************************************************************
//ItemList (1B)
if FromServer and (ConnectName=Name) and (pck[1]=#$1B) and status then begin
ColvoShot:=ObjtoColvoIL(Shot); //количество шотов
//Say('Shot='+inttostr(ColvoShot));
ColvoLure:=ObjtoColvoIL(Lure); //количество крючков
//Say('Lure='+inttostr(ColvoLure));
end;
//****************************************************************************
//ловим рыбу
if Status and FromServer and (ConnectName=Name) and (CharObjID<>0) then begin
//FishingEnd
if (pck[1]+pck[2]=#$FE#$14) and (CharObjID=ReadD(4)) then timer.enabled:=true; //FishingEnd ждем N секунд межде рыбалками
//FishinHPRegen
if (pck[1]+pck[2]=#$FE#$16) and (CharObjID=ReadD(4)) and (pck[15]+pck[16]=#$00#$00) then pumping;
if (pck[1]+pck[2]=#$FE#$16) and (CharObjID=ReadD(4)) and (pck[15]+pck[16]=#$00#$01) then reeling;
end;
//****************************************************************************
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
SocialID:=ReadD(2);
case SocialID of
//социальное действие Yes для начала ловли
6: begin
if CharObjID=0 then exit;
Status:=true;
RodInUse:=true;
Fishing;
end;
//социальное действие No для окончания
5: begin
if CharObjID=0 then exit;
if Status and RodInUse then Fishing;
Status:=false;
RodInUse:=false;
timer.enabled:=false;
end;
end;
end;
end.
Она точно такая же как и та, что здесь на форуме. Измени только смещение в
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
с j:=j+2;
на j:=j+10;
и в
procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID
с j:=j+2;
на j:=j+10;
Ворон, есть предложение все скрипты засунуть в архив, а в первом посту оставить так:
Условное название скрипта - автор (краткое описание)
Например: 1)BOT GNOM SPOILER - VORON
(ДЛЯ АДАПТАЦИИ: NICK- переправить в имя чара бота.
PCK[24] заменить на PCK[xx] в зависимости от того сколько символов в нике персонажа
который будет управлять ботом pck[24]- для имен состоящих из 6 символов.
если ваш главный персонаж 5 символов в нике то будет pck[22], если 6 то pck[24]
если 7 то pck[26], если 8 pck[28] и т.д.
ДЛЯ РАБОТЫ СКРИПТА: БОТ- лидер пати, ГЛАВНЫЙ ПЕРС (командир) - на первом месте в пати после бота
кнопки управления пишутся в ПАТИ ЧАТ
ДЛЯ УПРАВЛЕНИЯ:
цифра 1 в пати чат - означет бежать за командиром
цифра 2 в пати чат - атакавать и спойлить врага по ассисту с коммандиром
свип после смерти моба происходит- автоматически при условии что ТРУП- в таргете у командира)