Скрипт собирает золото убивая слабых монстров.
Скрипт удобно использовать как шаблон для своих ботов.
идет по точкам ищет мобов убивает собирает лут. лут тоже может быть какой угодно для удобства все сделано через динамические массивы.
так же в боте заложена функция самоодевания. можно кинуть в сумку пару наборов брони и штук 10 оружия он сам будет их одевать при поломке. юзает бинты если есть. Так же есть возможность юзать рунбуку , много чего просто закомментировано. ну короче сами разбирайтесь. тестил на RunUO.
и еще у кого нету мозга - я на нем заработал порядка 50 000 000. кто не умеет думать это его проблемы.
P.S. на Abyss он уже запрещен (((( увидят дадут банан.
Code: Select all
Program Golden_Boy;
const
money=30000;//кол-во денег после которого чар понесет их домой
homeX=2655 ;//Координата Х где встать для разгрузки
homeY= 534; //Координата У где встать для разгрузки
buttonHome=51;
buttonSkelet=50;
FindDistanceMob=75; //Дистанция поиска мобов
Helm= $2B10 ; //Тип шлема
gorget= $2B0E ; //Тип горжетки
legs = $2B06 ; //Тип штанов
perchatki=$2B0C ; //Тип перчаток
Lokti=$2B0A ; //Тип локтей Arms
Cloak = $2B04 ; //Плащь
Sandali=$2B13 ;//Сандали
Bracer =$1086 ;//Браслет
Ring=$108A ;//кольцо
Breastplate =$2B08 ;//Грудь
Shild=$1B76 ; //Тип щита
Weapon=$1405 ; //Тип оружия
runebook= $4003B326 ;//ИД рунбуки
bankbox=$408428E8 ;
goldcoin=$0EED; //ГП
clean_bandages = $0E21; //бинты
kolvodot=10; //кол-во точек которые будем обходить
bagAll=$401335C7 ;//Ид сумки в которой лежат все остальные подсумки
bagweapon= $4020EB4D; //ид сундука откуда брать оружие и щит
bagarmor= $4020F6D6 ; //ид сундука откуда брать броню
bugMoney= $40212441 ;//ид сундука куда класть бабки
bugreagent=$40117D52 ;//ID bag reagent
BagRing=$40212437 ; //ИД сумки куда класть кольцами
BagBrace=$40212440 ;//ИД сумки куда класть браслеты
var
//brockenItem:cardinal;
monstro:array of word;
bodymonstro:array of word;
checkheal,k,hhh,mmn,checkmobss,dotResp:integer;
telo,TargetZ: cardinal;
ctime: TDateTime;
grabmas:array of word;
dot:array [0..10] of TFoundTile;
ctimeq:TDatetime;
procedure Init;
begin
monstro:=[$0003,$0099,$0038,$0032,$0094,$001A ];// типы монстров которых надо бить. вписывать через запятую
grabmas:=[$0EED];
//,$0F88,$0F78,$0F86,$0F8D,$0F7B,$0F8C,$0F7E ,$0F8E,$0F8A,$0F7D,$0F84,$0F7A,$0F85,$0F84,$0F7D,$0F8F ] ; //$1F06,$1086-Браслеты.$1F09,$108A - кольца
{skeleton Type: $0032
ghoul Type: $0099
}
FindVertical := 5;
moveOpenDoor := True;
bodymonstro:=[$2006];// типы трупов монстров которые надо обыскивать
ctimeq := Now;
checkheal:=0;
SetPauseScriptOnDisconnectStatus(True);
SetARStatus(True);
mmn:=0;
dotResp:=0;
ctimeq := Now;
dot[0].X:=3679; //точки которые будем обходить
dot[0].Y:=2481;
dot[1].X:=3654;
dot[1].Y:=2480;
dot[2].X:=3619;
dot[2].Y:=2482;
dot[3].X:=3597;
dot[3].Y:=2452;
dot[4].X:=3619;
dot[4].Y:=2507;
dot[5].X:=3643;
dot[5].Y:=2514;
dot[6].X:=3640;
dot[6].Y:=2512;
dot[7].X:=3637;
dot[7].Y:=2539;
dot[8].X:=3658;
dot[8].Y:=2537;
dot[9].X:=3661;
dot[9].Y:=2512;
dot[10].X:=548;
dot[10].Y:=969;
end;
procedure tele(kuda:Integer);
var
agump:Word;
ctime:TDatetime;
begin
{
waitgump(kuda);
wait(1000) ;
UseObject(runebook);
wait (1000);
CloseSimpleGump(0);
}
ctime := Now;
repeat
AddToSystemJournal('1');
if InJournalBetweenTimes('The spell fizzles|needs time to recharge|location is blocked', ctime, Now)>=0 then
begin
AddToSystemJournal('Ждем 10 сек');
wait(10000);
end;
if InJournalBetweenTimes('More reagents are needed', ctime, Now)>=0 then
begin
AddToSystemJournal('Нет реагентов для рекола.должите реагентов');
wait(60000);
end;
ctime := Now;
checklag(60000);
agump := GetGumpsCount;
UseObject(runebook);
//If IsGump then
while agump = GetGumpsCount do
Wait(50);
//NumGumpTextEntry(GetGumpsCount-1,513, '30');
NumGumpButton(GetGumpsCount-1,kuda);
wait(6000);
checklag(60000);
AddToSystemJournal('2');
until (InJournalBetweenTimes('The spell fizzles|This book needs time to recharge|That location is blocked|More reagents are needed', ctime, Now)<0) or dead;
AddToSystemJournal('3');
end;
procedure equip_tool(type_of_tool:word;layer:Byte);
begin
while (GetType(ObjAtLayer(layer))<>type_of_tool) and (not dead) do
begin
{ while (GetType(ObjAtLayer(layer))<>0) or (not dead) do
begin
checklag(60000);
unequip(layer);
wait(1000);
end; }
checklag(60000);
equipt(layer,type_of_tool);
wait(1000);
end;
end;
function podhod(targetk:Cardinal):Boolean;
begin
AddToSystemJournal('Жертва: '+GetName(targetk)+'.ID: '+inttohex(targetk,8)+'.Х: '+inttostr(GetX(targetk))+'.Y: '+inttostr(GetY(targetk))+'.Z:'+inttostr(GetZ(targetk))+'. дистанция: ' +inttostr(GetDistance(targetk)));
checklag(60000);
AddToSystemJournal('My person: '+GetName(Self)+'.Х: '+inttostr(GetX(Self))+'.Y: '+inttostr(GetY(Self))+'.Z:'+inttostr(GetZ(Self)));
checklag(60000);
if (GetX(targetk)>3686) and (GetY(targetk)>2501) and (GetX(targetk)<3701) and (GetY(targetk)<2521) then result:=False
else
result:= NewMoveXY(GetX(targetk),GetY(targetk),true,1,true);
//wait(500);
end;
procedure Heal;// хилимcя
var
m:integer;
begin
if (gethp(self) < (getmaxhp(self)*0.7))and (not dead)and(ctimeq<now) then
//if (gethp(self) < 98) and (not dead) then
// while (gethp(self) < (getmaxhp(self))) and (not dead) do
begin
ctimeq := now+EncodeTime(0,0,7,0);
AddToSystemJournal('Хилимся');
checklag(60000);
UseObject(FindType(clean_bandages,Backpack));
checklag(60000);
WaitTargetObject(Self);
{ m:=0;
if (InJournalBetweenTimes('You finish applying the bandages|You apply the bandages, but they barely help', ctimeq, Now)>= 0) then
begin
checkheal:=0;
ctimeq := Now;
end;
if ctimeq+EncodeTime(0,1,0,0)<Now then
checkheal:=0;
// while (CountEx(clean_bandages,$0000,backpack) < 1) and (not dead) do
if (CountEx(clean_bandages,$0000,backpack) < 1) and (not dead) then
begin
AddToSystemJournal('Нет бинтов');
wait(1000);
end
else
if (InJournalBetweenTimes('You finish applying the bandages|You apply the bandages, but they barely help', ctimeq, Now)< 0)and(not dead) and( (checkheal=0)) then
begin
AddToSystemJournal('Хилимся');
checklag(60000);
UseObject(FindType(clean_bandages,Backpack));
checklag(60000);
WaitTargetObject(Self);
checkheal:=1;
ctimeq := Now;
end; }
end;
end;
procedure checkwar; //включаем вармоде
begin
if IsWarMode(self) then
begin
setWarMode(false);
end;
end;
function Fight(zertva:cardinal):integer ; //Бьем цель
var
KolVoZahod:integer;
begin
if (gethp(self) < (getmaxhp(self)*0.7)) and not dead then
Heal;
//AddToSystemJournal('ghj 56');
KolVoZahod:=0;
//Cast('Evasion');
while (GetHP(zertva)<>0) and (KolVoZahod<2) do
begin
AddToSystemJournal('GetHP(zertva) = '+inttostr(GetHP(zertva)));
//if IsActiveSpellAbility( 'Lightning Strike') = false then Cast('Lightning Strike');
//AddToSystemJournal('ghj 3');
setWarMode(true);
//if GetActiveAbility <> 'Lightning Strike' then
//Cast('Lightning Strike');
// AddToSystemJournal('GetActiveAbility='+GetActiveAbility);
//AddToSystemJournal('16');
Attack (zertva);
Heal;
//AddToSystemJournal('17');
if podhod(zertva)=false then
begin
// AddToSystemJournal('Нет прохода');
KolVoZahod:=KolVoZahod+1;
end;
//AddToSystemJournal('18');
result:=KolVoZahod;
end;
Heal;
end;
//function checkshmot:Boolean;//проверяем поломана ли вещь если да то глобальная переменная примет значение поломанной вещи
//begin
//brockenItem:= ;
//end;
procedure Stock;//выгружаем loot
var
ppp:integer;
lootReg:array of word;
lootRing:array of word;
lootBrace:array of word;
begin
lootReg:=[$0F8D,$0F84,$0F8A,$0F88,$0F86,$0F7B,$0F7D,$0F8A,$0F8C,$0F78,$0F8E,$0F7A ,$0F8F,$0F7E,$0F85 ];
lootRing:=[$1F09,$108A];
lootBrace:=[$1F06,$1086];
checklag(60000);
UseObject(bagAll);
wait(1000);
//AddToSystemJournal('606 Заработал ГП : '+ inttostr(CountEx(GoldCoin,$0000,backpack)));
checklag(60000);
UseObject(bugMoney);
wait(1000);
begin
while (Count(goldcoin) > 0) and not dead do
begin
checklag(60000);
FindType (goldcoin,Backpack) ;
MoveItem(FindItem,0,bugMoney,0,0,0);
wait(600);
end;
end;
begin
while (Count(clean_bandages) > 0) and not dead do
begin
checklag(60000);
FindType (clean_bandages,Backpack) ;
MoveItem(FindItem,0,bagAll,0,0,0);
wait(600);
end;
end;
checklag(60000);
UseObject(bugreagent);
wait(1000);
for ppp:=0 to (GetArrayLength(lootReg)-1) do
begin
while (Count(lootReg[ppp]) > 0) and not dead do
begin
checklag(60000);
FindType (lootReg[ppp],Backpack) ;
MoveItem(FindItem,0,bugreagent,0,0,0);
wait(600);
end;
end;
checklag(60000);
UseObject(BagRing);
wait(1000);
for ppp:=0 to (GetArrayLength(lootRing)-1) do
begin
while (Count(lootRing[ppp]) > 0) and not dead do
begin
checklag(60000);
FindType (lootRing[ppp],Backpack) ;
MoveItem(FindItem,0,BagRing,0,0,0);
wait(600);
end;
end;
checklag(60000);
UseObject(BagBrace);
wait(1000);
for ppp:=0 to (GetArrayLength(lootBrace)-1) do
begin
while (Count(lootBrace[ppp]) > 0) and not dead do
begin
checklag(60000);
FindType (lootBrace[ppp],Backpack) ;
MoveItem(FindItem,0,BagBrace,0,0,0);
wait(600);
end;
end;
end;
procedure checkweapon;
begin
{
AddToSystemJournal('srtghtrr'+inttostr(GetLayer($400A6BD5 )));
equip_tool(Ring,RingLayer);
AddToSystemJournal('1');
equip_tool(Breastplate,TorsoLayer);
AddToSystemJournal('2');
equip_tool(Bracer,BraceLayer);
AddToSystemJournal('3');
equip_tool(Sandali,ShoesLayer);
AddToSystemJournal('4');
equip_tool(Cloak,CloakLayer);
//AddToSystemJournal('5');
equip_tool(Lokti,ArmsLayer);
//AddToSystemJournal('6');
equip_tool(perchatki,GlovesLayer);
//AddToSystemJournal('7');
equip_tool(legs,PantsLayer);
//AddToSystemJournal('8');
equip_tool(gorget,NeckLayer);
//AddToSystemJournal('9');
equip_tool(Helm,HatLayer);
//AddToSystemJournal('10'); }
//AddToSystemJournal('Shild');
equip_tool(Shild,LhandLayer);
//AddToSystemJournal('Weapon');
equip_tool(Weapon,RhandLayer);
//AddToSystemJournal('все');
end;
procedure Zagruzka_regov;// запасаемся реагентами
var
pppp:integer;
RegZag:array of word;
begin
RegZag:=[$0F7B ,$0F7A ,$0F86 ];
checklag(60000);
UseObject(bagAll);
wait(1000);
begin
while (Count(clean_bandages) < 80) and not dead do
begin
checklag(60000);
FindType (clean_bandages,bagAll) ;
MoveItem(FindItem,100,Backpack,0,0,0);
wait(600);
end;
end;
checklag(60000);
UseObject(bugreagent);
wait(1000);
for pppp:=0 to (GetArrayLength(RegZag)-1) do
begin
while (Count(RegZag[pppp]) < 20) and not dead do
begin
checklag(60000);
FindType (RegZag[pppp],bugreagent) ;
MoveItem(FindItem,20,Backpack,0,0,0);
wait(600);
end;
end;
end;
function targetzertva:cardinal;
var
//bad_list:array [0..400] of cardinal;
distance,mob:integer;
cur_mob:cardinal;
begin
distance := 9999999;
FindDistance:=FindDistanceMob;
for mob:=0 to (GetArrayLength(monstro)-1) do
while FindType(monstro[mob],Ground) <> 0 do
begin
AddToSystemJournal('function targetzertva '+inttohex(FindItem,8));
if GetDistance(FindItem) < distance then
begin
distance := GetDistance(FindItem) ;
cur_mob := FindItem;
end;
Ignore(FindItem);
end;
IgnoreReset;
//AddToSystemJournal('Жертва: '+GetName(cur_mob)+'. координата Х: '+inttostr(GetX(cur_mob))+'. координата Y: '+inttostr(GetY(cur_mob))+'. дистанция: ' +inttostr(GetDistance(cur_mob)));
//if (GetX(cur_mob) in [3686..3701]) and (GetY(cur_mob) in [2502..2521]) then cur_mob:= 0;
if (GetX(cur_mob)>3686) and (GetY(cur_mob)>2502) and (GetX(cur_mob)<3701) and (GetY(cur_mob)<2521) then cur_mob:=0;
result:= cur_mob; //получаем сериал ближнего моба
end;
Procedure PutMoneyBank;
begin
checklag(60000);
AddToSystemJournal('606 Заработал ГП : '+ inttostr(CountEx(goldcoin,$0000,backpack)));
begin
while (CountEx(goldcoin,$0000,backpack) > 0) and not dead do
begin
checklag(60000);
FindTypeEx (goldcoin,$0000,Backpack,True) ;
checklag(60000);
MoveItem(FindItem,0,bankbox,0,0,0);
wait(2000);
end;
end;
end;
begin
IgnoreReset;
AddToSystemJournal('Init');
init;
//tele(buttonSkelet);
while not dead do
if (Weight < (MaxWeight-50)) then
begin //Бой в городе
begin
checkmobss:=0 ;
// checkwar;
TargetZ:=targetzertva;
checkweapon;
AddToSystemJournal('TargetZ = '+inttohex(TargetZ,8));
if (Fight(TargetZ)>1) or (TargetZ=0) then
begin
if dotResp=kolvodot-1 then dotResp:=0;
//AddToSystemJournal('Точка: '+inttostr(dotResp));
if (NewMoveXY(dot[dotResp].X,dot[dotResp].Y,true,1,true))= true then
dotResp:=dotResp+1
else
begin
// tele(buttonSkelet);
//dotResp:=0;
dotResp:=0;
NewMoveXY(dot[dotResp].X,dot[dotResp].Y,true,1,true);
end;
end;
for k:=0 to (GetArrayLength(bodymonstro)-1) do
begin
FindDistance:=2;
FindType(bodymonstro[k],Ground);
if (Findcount > 0) then
begin
telo:=finditem; //telo - ИД убитый монстр
checklag(60000);
if NewMoveXY(GetX(telo),GetY(telo),true,1,true) = false then
//tele(buttonSkelet);
begin
// tele(buttonSkelet);
dotResp:=0;
NewMoveXY(dot[dotResp].X,dot[dotResp].Y,true,1,true);
end;
checklag(60000);
ctime := Now;
UseObject(telo);
if WaitJournalLine(ctime,'not earn the right to loot this creature', 500) = false then
begin
for hhh:=0 to (GetArrayLength(grabmas)-1) do
begin
if CountEx(grabmas[hhh],$FFFF,telo)>0 then
begin
checklag(60000);
Grab(findItem,telo);
wait(600);
end;
end ;
end;
ignore(telo);
end ;
end ;
end ;
end
else
begin //Рекол домой и разгрузка
{tele(buttonHome);
NewMoveXY(homeX,homeY,true,1,true);
Stock;
Zagruzka_regov;
tele(buttonSkelet);
checkweapon; }
// SetARStatus(false);
//Disconnect;
checklag(60000);
NewMoveXY(3494,2571,true,1,true);
checklag(60000);
uosay('bank');
wait(1000);
UseObject(bankbox);
PutMoneyBank;
end;
end.