SlackFisher
Code: Select all
Program SlackFisher;
{
Autor: Half-Life;
Description: Скрипт для фишера-мага с лодкой. Всё что нужно сделать это кинуть лодку так что бы она всегда плыла беспрепятственно по прямой. Убивает мобов, хилится/курится, всякое говно скидывает в мусорку (желательно в луне или другом городе), а всякое не говно скидывает в банк.
UOStealthClientVersion: 6.2.1;
Warning! Будьте бдительны! - Администрация многих игровых серверов враждебно относится к использованию стелс клиента на своих серверах. Заподозрив вас в использовании стелс клиента и других неправославных программ они начинают сатанеть и в порыве слепой ярости могут попасть по вам Банхаммером;
}
const
BankBox=$403D6F7F; // ID Банка
FishingPoleType=$0DC0; // Тип удочки
ShipKey=$41C7FEC1; // ID ключа по которому реколимся на лодку.
TillerMan=$3E55; // Тип Джека Воробья
Runebook=$402F03B7; // ID рунабуки
RBGumpID=$554B87F3; // ID гампа рунабуки. Получается он просто: открываете РБ и вводите команду -infogump там будет в самом верху ID
RuneButton='41'; // Номер кнопки рунки в РБ, отвечающей за рекол к трешу/банку. Как получить: нажимаете на кнопку рекола для нужной рунки и вводите -infogump, в самом низу будет что то типа Previous gump reply: Button id: 9 Где цифра искомый номер.
TrashType=$0E77; // Тип треша, за чем нужен не помню, но нужен.
Trash=$40550426; // ID треша в который скидывается мусор
WaitTime=500;
WaitLag=10000;
var
CatchTypes,SeaCreaturesType,RewardsType:array of Word; // CatchTypes - шлак который идёт в отходы, SeaCreaturesType - те кого мы будем убивать, RewardsType - то что идёт в банк. Всё это заполняется внизу, напротив соответствующих коментариев.
FishingPole:Cardinal;
procedure CheckDead;
begin
if Dead then begin
AddToSystemJournal('Ты умер.');
Halt;
end;
end;
procedure RecallToTrash;
var
X,Xs,Y,Ys:Word;
begin
FindDistance:=3;
if FindType(TrashType,ground)=Trash then Exit;
X:=GetX(Self);
Y:=GetY(Self);
While TargetPresent do CancelTarget;
UseObject(RuneBook);
Wait(WaitTime);
CheckLag(WaitLag);
If not IsGump or (GetGumpID(GetGumpsCount-1)<>RBGumpID) then RecallToTrash;
WaitGump(RuneButton);
Wait(WaitTime*4);
CheckLag(WaitLag);
Xs:=GetX(Self);
Ys:=GetY(Self);
if ((X=Xs) or (Y=Ys)) then RecallToTrash;
end;
Procedure Drop(DropArray:Array of Word;WhereTo:Cardinal);
var
ItemCount:Byte;
begin
CheckLag(WaitLag);
if WhereTo=BankBox then begin
UOSay('Bank');
Wait(WaitTime*2);
end;
for ItemCount:=0 to Length(DropArray)-1 do begin
if Dead or not Connected then Exit;
CheckLag(WaitLag);
FindType(DropArray[ItemCount], Backpack);
while FindCount > 0 do begin
if Dead or not Connected then Exit;
CheckLag(WaitLag);
Wait(WaitTime);
MoveItem(Finditem, GetQuantity(Finditem), WhereTo, 0, 0, 0);
FindType(DropArray[ItemCount], Backpack);
end;
end;
end;
procedure RecallToShip;
var
X,Xs,Y,Ys: Word;
begin
FindDistance := 5;
FindType(TillerMan, ground);
if FindItem>0 then Exit;
X:=GetX(Self);
Y:=GetY(Self);
While TargetPresent do CancelTarget;
Wait(WaitTime);
CheckLag(WaitLag)
WaitTargetObject(ShipKey);
Cast('Recall');
Wait(WaitTime*4);
CheckLag(WaitLag);
Xs:=GetX(Self);
Ys:=GetY(Self);
if ((X=Xs) or (Y=Ys)) then RecallToShip;
CancelWaitTarget;
end;
procedure SetFishingPole;
begin
FishingPole:=FindType(FishingPoleType, backpack);
if FishingPole=0 then begin
AddToSystemJournal('Нету удочек.');
Halt;
end;
end;
procedure CheckState;
begin
if MaxWeight < Weight + 60 then begin
CheckDead;
RecallToTrash;
Drop(CatchTypes,Trash);
Drop(RewardsType,BankBox);
RecallToShip;
end;
end;
procedure CheckMobs;
var
SeaCreature:Integer;
c:Byte;
begin
FindDistance:=10;
for c:=0 to Length(SeaCreaturesType)-1 do begin
SeaCreature:=FindType(SeaCreaturesType[c],ground);
if SeaCreature<>0 then PlayWav('c:\windows\media\tada.wav');
while GetHP(finditem)<>0 do begin
WaitTargetObject(SeaCreature);
Cast('Fireball');
Wait(WaitTime*2);
WaitTargetObject(SeaCreature);
Cast('Magic Arrow');
Wait(WaitTime);
UOSay('forward one');
end;
while HP<>MaxHP do begin
WaitTargetObject(Self);
if poisoned then begin
Cast('Cure');
end
else begin
Cast('Heal');
end;
Wait(WaitTime);
CheckLag(WaitLag);
end;
SeaCreature:=FindType(SeaCreaturesType[c],ground);
end;
end;
procedure Fishing;
var
Tile,X,Y: Word;
Z:ShortInt;
StartTime:TDateTime;
begin
while True do begin
X:=GetX(Self)+3;
Y:=GetY(Self);
Z:=GetZ(Self)+3;
CheckDead;
if HP<>MaxHP then begin
CancelWaitTarget;
While TargetPresent do CancelTarget;
while HP<>MaxHP do begin
WaitTargetObject(Self);
if poisoned then begin
Cast('Cure');
end
else begin
Cast('Heal');
end;
Wait(WaitTime);
CheckLag(WaitLag);
end;
CancelWaitTarget;
While TargetPresent do CancelTarget;
Wait(WaitTime);
end;
UseObject(FishingPole);
CheckLag(WaitLag);
WaitForTarget(WaitLag);
if TargetPresent then begin
StartTime:=Now;
TargetToTile(Tile, X, Y, Z);
CheckLag(WaitLag);
if InJournalBetweenTimes('The fish don''t seem to be biting here', StartTime, Now) > 0 then begin
UOSay('forward one');
Wait(WaitTime*4);
ClearJournal;
Fishing;
end;
CheckState;
Wait(9000);
CheckMobs;
end
else begin
Fishing;
end;
end;
end;
begin
if not Connected then begin
Connect;
Wait(10000);
end;
While IsGump do CloseSimpleGump(GetGumpsCount-1);
CatchTypes:=[$1711,$170D,$170B,$170F,$4302,$44C4,$4302,$44C6,$4303,$4302,$44C3,$44C4,$4303,$4307,$09CD,$09CC,$09CD,$09CE,$0DD6,$09CF,$44C5,$4306]; // Шлак который идёт в отходы.
SeaCreaturesType:=[$0096,$0010,$004D]; // Те кого мы будем убивать.
RewardsType:=[$3196,$099F,$0DCA,$14EC]; // То что идёт в банк.
RecallToTrash;
Drop(CatchTypes,Trash);
RecallToShip;
UseObject(Self);
SetFishingPole;
while True do begin
CheckDead;
if not Connected then begin
Connect;
Wait(10000);
Continue;
end;
Fishing;
end;
end.