Code: Select all
Program Lumber_all;
{$Include 'all.inc'}
const
Procent=90; //процент. При достижении ХП ниже этого процента скрипт начинает спасать чара.
speed=700; //скорость перемещения
hatcher=$0F47 ; // тип топора
logs=$1BDD; // тип логов
Eat=$0C77 ; //ID еды
mesto_sell='64'; //Номер кнопки в рунбуке куда телепортироваться для продажи
mesto_bank='73'; //Номер кнопки в рунбуке банка
Les='88'; //Номер кнопки в рунбуке куда телепортироваться для рубки леса
runebook=$88888888 ; //ID рунбуки
kol_log = 21;
money=$88888888; //ID сумки в банке куда складывать золото
resi=$88888888 ; //ID сумки в банке куда складывать дорогие логи
goldcoin=$0EED; //ГП
clean_bandages = $0E21;//бинты
Vendor=$88888888; //ID вендора которому впариваем логи
l_fizzles='You hack at the tree for a while, but fail to produce any useable wood.';
l_nothing1='There are no logs here to chop.';
l_nothing2='You can''t reach this.';
l_needwait ='You must wait to perform another action';
l_success = 'in your pack.';
l_bad ='Unexpected target info';
l_heavy ='at your feet';
l_far='That is too far away.';
l_elemental ='Ent';
l_see='You have no line of sight to that location';
type
region= record
minX:word;
minY:word;
maxX:word;
maxY:word;
end;
mas_cvet = array[1..kol_log] of Integer; //Создаем массив цветов дров
var
tfta,temp,res_arr:TFoundTilesArray;
RegArr: array [0..10] of region;
TreeTile:array [0..9] of word;
rs,i,j,k,sum,arr_sum:word;
start_p: TFoundTile;
Cvet : mas_cvet;
procedure init;
begin
start_p.X:=GetX(Self); //Стартовая координата игрока
start_p.Y:=GetY(Self); //Стартовая координата игрока
//Tile Tree
TreeTile[0]:=3283;
TreeTile[1]:=3277;
TreeTile[2]:=3293;
TreeTile[3]:=3296;
TreeTile[4]:=3302;
TreeTile[5]:=3299;
TreeTile[6]:=3290;
TreeTile[7]:=3288;
TreeTile[8]:=3286;
TreeTile[9]:=3280;
//Рубить в области +/- 30 клеток от Стартовой координаты игрока
RegArr[0].minX:=start_p.X-30;
RegArr[0].minY:=start_p.Y-30;
RegArr[0].maxX:=start_p.X+30;
RegArr[0].maxY:=start_p.Y+30;
end;
procedure cancel;
begin
CloseMenu;
CancelMenu;
If TargetPresent Then CancelTarget;
end;
procedure Wait_Target(time_ms:Cardinal);
var
TempTime,SumTime:Cardinal;
begin
SumTime:=0;
repeat
checksave;
wait(500);
TempTime:=Timer;
SumTime:=SumTime+(Timer-TempTime);
until ((targetpresent) or (dead) or (not connected) or (SumTime>time_ms));
end;
Procedure speedee(swm:word;srm:word;swu:word;sru:word);
begin
SetWalkMountTimer (swm); //Ходить на лошади
SetRunMountTimer (srm); //Бегать на лошади
SetWalkUnmountTimer (swu); //Ходить пешком
SetRunUnmountTimer (sru); //Бегать пешком
end;
procedure check_war;
begin
if IsWarMode(self) then
begin
setWarMode(false);
end;
end;
procedure check_hide;
begin
cancel;
wait(1000) ;
if Hidden then exit;
if WarMode = true then SetWarMode(false);
repeat
UseSkill('Hiding');
wait(4000);
checksave;
until Hidden or (not Connected);
end;
Procedure sos;
var
proc, max_HP, hp: word; //one - кол-во жизней в 1%. proc-кол во жизней при 70%.
begin
max_hp:= getmaxhp(self);
hp:= gethp(self);
proc:=(max_HP div 100)*Procent;
if proc > hp then
begin
WinExec('E:\Program files\aimp3\AIMP3.exe', 0); //у меня стоит 3 аимп с музыкой в плейлисте. при запуске аимпа он сразу начинает играть. Эту строку можно и закоментрировать.
speedee(400,300,500,400);
check_hide;
newmovexy(GetX(Self)+30,GetY(Self)+30,true,1,false);
check_hide;
while gethp(self) < getmaxhp(self) do
begin
check_hide;
UseObject(FindType(clean_bandages,Backpack));
wait_target(2000);
WaitTargetObject(Self);
wait (5000);
end;
speedee(speed,speed,speed,speed);
end;
end;
function sqr(a:LongInt):LongInt;
begin
result:=a*a;
end;
function vector_length(c_1,c_2:TFoundTile):LongInt;
begin
result:=Round(sqrt(sqr(c_1.X-c_2.X)+sqr(c_1.Y-c_2.Y)));
end;
{ сортировка минимальным маршрутом }
procedure QuickSort(var item:TFoundTilesArray; count:integer; point:TFoundTile);
var
temp_index,temp_value, tempo,i,j:LongInt;
t_c:TFoundTile;
begin
AddToSystemJournal('сортируем '+IntToStr(count)+' деревьев');
//for i:=0 to count-1 do AddToSystemJournal(IntToStr(vector_length(start_p,item[i])));
t_c:=point;
temp_index:=0;
temp_value:=vector_length(t_c,item[temp_index]);
for i:=0 to count-2 do
begin
for j:=i to count-1 do
begin
tempo:=vector_length(t_c,item[j]);
if tempo<temp_value then
begin
temp_index:=j;
temp_value:=tempo;
end;
end;
t_c:=item[temp_index];
item[temp_index]:=item[i];
item[i]:=t_c;
temp_value:=vector_length(item[i],item[i+1]);
end;
AddToSystemJournal('Готово...');
end; { конец сортировки }
procedure equip_tool(type_of_tool:word;layer:Byte);
begin
if (GetType(ObjAtLayer(layer))<>type_of_tool) then
begin
if layer=RhandLayer then unequip(RhandLayer)else unequip(LhandLayer);
wait(500);
if layer=RhandLayer then equipt(RhandLayer,type_of_tool) else equipt(LhandLayer,type_of_tool);
end;
repeat
wait(500);
checksave;
until (GetType(ObjAtLayer(layer))=type_of_tool);
end;
procedure Chop(f_tile:TFoundTile);
var
ctime : TDateTime;
iter_max:integer;
next_lumb,lumb_result,wait_lumb: string;
fizzles:word;
begin
wait_lumb:=l_fizzles+'|'+l_needwait;
next_lumb:=l_nothing1+'|'+l_nothing2+'|'+l_far+'|'+l_see;;
lumb_result:=wait_lumb+'|'+next_lumb+'|'+l_success+'|'+l_elemental+'|'+l_bad+'|'+l_heavy;
fizzles:=0;
repeat
equip_tool(hatcher,LhandLayer);
cancel;
iter_max:=0;
sos;
check_hide;
UseObject(ObjAtLayer(LhandLayer));
check_hide;
sos;
Wait_Target(5000);
ctime := Now;
TargetToTile(f_tile.Tile,f_tile.X,f_tile.Y,f_tile.Z);
sos;
repeat
iter_max:=iter_max+1;
wait(2000);
checksave;
check_war;
check_hide;
sos;
until ((InJournalBetweenTimes(lumb_result, ctime, Now)<>-1) or (iter_max>10));
if (InJournalBetweenTimes(l_fizzles, ctime, Now)<>-1) then fizzles:=fizzles+1;
if (InJournalBetweenTimes('OOPS !!! It isn''t a tree, it''s an Ent!!!|is attacking you|Vas Corp Por|notice', ctime, Now)<>-1) then
begin
sos;
PlayWav('C:\WINDOWS\Media\tada.wav');
sos;
check_hide;
wait(1000);
sos;
alarm;
end;
sos;
until ((InJournalBetweenTimes(next_lumb, ctime, Now)<>-1) or (fizzles>15));
end;
procedure eda(eat:word); //еда
begin
UseType(eat,$0000);
wait(300);
UseType(eat,$0000);
wait(300);
UseType(eat,$0000);
wait(300);
end;
procedure tele(kuda:string);
begin
checksave;
waitgump(kuda);
wait(1000) ;
checksave;
UseObject(runebook);
checksave;
wait(6000);
end;
procedure Cvet_log;
begin
Cvet[1] := $047C; //Oak Logs
Cvet[2] := $0279; //Red Tree Logs
Cvet[3] := $096B ; //Dark Tree Logs
Cvet[4] := $0237; //Swamp Logs
Cvet[5] := $0482; //Silver Leaf Logs
Cvet[6] := $010F; //Keranit Logs
Cvet[7] := $0014; //Perit Logs
Cvet[8] := $03C1; //Petrified Logs
Cvet[9] := $0085; //Dragon Tree Logs
Cvet[10] := $04C2; //Vampire Tree Logs
Cvet[11] := $0033; //Eridan Logs
Cvet[12] := $002B; //Hellios Logs
Cvet[13] := $0071; //Illusions Tree Logs
Cvet[14] := $09A4; //Crystal Logs
Cvet[15] := $0B82; //Dead Tree Logs
Cvet[16] := $00BE ; //Paradise Logs
Cvet[17] := $0035; //Titan Tree Logs
Cvet[18] := $0BB6; //Avalon Logs
Cvet[19] := $0487; //Elven Logs
Cvet[20] := $0498; //Asterxylon Logs
Cvet[21] := $0000; //Logs
end;
procedure podhod;
begin
AddToSystemJournal('Продацец: '+GetName(Vendor)+'. координата Х: '+inttostr(GetX(Vendor))+'. координата Y: '+inttostr(GetY(Vendor))+'. дистанция: ' +inttostr(GetDistance(Vendor)));
NewMoveXY(GetX(Vendor),GetY(Vendor),true,1,false);
repeat
wait(2000);
checksave;
until GetDistance(Vendor)< 3
end;
procedure vendor_sell;
var
i:word;
begin
i:=0;
SetAutoSellDelay(7); //Установить задержку на продажу. Время задается в секундах. По умолчанию - 3 (минимальное значение).
AutoSell(logs,Cvet[1],999);
AutoSell(logs,Cvet[2],999);
AutoSell(logs,Cvet[3],999);
AutoSell(logs,Cvet[4],999);
AutoSell(logs,Cvet[8],999);
AutoSell(logs,Cvet[5],999);
AutoSell(logs,Cvet[6],999);
AutoSell(logs,Cvet[7],999);
AutoSell(logs,Cvet[8],999);
AutoSell(logs,Cvet[9],999);
AutoSell(logs,Cvet[10],999);
AutoSell(logs,Cvet[11],999);
AutoSell(logs,Cvet[12],999);
AutoSell(logs,Cvet[13],999);
AutoSell(logs,Cvet[14],999);
AutoSell(logs,Cvet[15],999);
AutoSell(logs,Cvet[16],999);
AutoSell(logs,Cvet[21],999);
while CountEx(GoldCoin,$0000,backpack) = 0 do
begin
checksave;
UOSay(GetName(Vendor)+'sell guards'); //произнести в игре фразу 'Sell'
wait(10000);
end;
end;
Procedure PutMoneyBank;
begin
checksave;
AddToSystemJournal('Заработал ГП : '+ inttostr(CountEx(GoldCoin,$0000,backpack)));
begin
while CountEx(GoldCoin,$0000,backpack) > 0 do
begin
FindTypeEx (GoldCoin,$0000,Backpack,True) ;
MoveItem(FindItem,0,money,0,0,0);
checksave;
wait(2000);
end;
end;
end;
Procedure PutLogBank;
var
i:word;
begin
checksave;
begin
For i:=17 to 20 do
if CountEx(logs,Cvet[i],backpack) > 0 then
begin
FindTypeEx (logs,Cvet[i],Backpack,True) ;
MoveItem(FindItem,0,resi,0,0,0);
wait(2000);
checksave;
end;
end;
end;
Begin
tele(Les);
check_hide
SetArStatus(true);
speedee(speed,speed,speed,speed);
sos;
init;
sum:=0;
// поиск деревьев и составление массива
arr_sum:=0;
for i:=0 to 9 do
begin
rs:=GetStaticTilesArray(RegArr[j].minX,RegArr[j].minY,RegArr[j].maxX,RegArr[j].maxY,1,TreeTile[i],tfta);
if rs>0 then
for k:=0 to rs-1 do temp[arr_sum+k]:=tfta[k];
arr_sum:=arr_sum+rs;
end;
QuickSort(temp,arr_sum,start_p);
for k:=0 to arr_sum-1 do res_arr[sum+k]:=temp[k];
sum:=sum+arr_sum;
// рубка по составленному массиву
check_hide;
sos;
while not dead do
begin
i:=0;
j:=sum-1;
sos;
eda(eat);
sos;
while (i<j) do
begin
ClearBadLocationList;
sos;
eda(eat);
sos;
cancel;
NewMoveXY(res_arr[i].X,res_arr[i].Y,true,1,false);
sos;
cancel;
check_hide;
sos;
chop(res_arr[i]);
i:=i+1;
if Weight>=300 then
begin
check_hide;
checksave;
tele(mesto_sell);
check_hide;
checksave;
Cvet_log;
checksave;
podhod;
checksave;
vendor_sell;
wait(3000);
checksave;
tele(mesto_bank);
checksave;
wait(5000);
checksave;
uosay('bank guards');
wait(3000);
PutMoneyBank;
wait(3000);
Cvet_log;
wait(3000);
PutLogBank;
wait(3000);
tele(Les);
wait(3000);
end;
end;
end;
End.