05 novembro 2009

Turtle Cave PH [30-40k/h]

0 comentários
Turtle Cave PH

Level requerido: 50+, Skills 70+/70+

Exp/h: 30-40k/h ( dependendo do seu level/skills e quantas pessoas estão online )

Loot:

2-3k Gold/h
  • Gold
  • Crocodile Boots, 3556
  • Turtle Shells, 5899
  • White Pearl, 3026
  • Tortoise Shield, 6131 (Opcional)
  • Tortoise Eggs, 5678 (Opcional)
  • Battle Hammer, 3305 (Opcional, você pode vender por 120gp em PH )

Eu realmente não sei se você vai ter waste e de quanto ele será, pois eu testei o wpt com meu ek lvl 106 ( não usei nada, obviamente ). Levei 4 bps de mp por via das dúvidas.

Vá do depot de PH para a cave ( primeira ss abaixo )
Desça uma vez ( segunda ss )
Execute o bot ( terceira )



Click to view full size
Click to view full size
Click to view full size


1. Você não precisa limpar o respawn antes de colocar o bot. 2. O wpt não está perfeito ainda, não estou com tempo para melhorá-lo. 3. Depois se der faço wpts diversos com os andares da cave

Essa cave tem um problema com os targets. Quando você está de Target All e você sobe um sqm que necessite de rope, o tibia vai dar erro. Pra eliminar esse problema, você deve usar esse Target All Script. Então não ative o Target All!

Código PHP:
Const
List=[
'Dog','Sheep','Deer','Rabbit'];//enter the monsters(in your hunting area)that dont give exp
//so you avoid attacking them and wasting time.
var integerLooting:booleanChecked: array of integerScanXintegerScanYintegerScanItemTItem;

function 
GetTileFromXYZ(XYZinteger): TTilebegin
Result 
:= nil;
if 
abs((Self.7) - X) > 14 then Exit;
if 
abs((Self.5) - Y) > 11 then Exit;
if 
Self.<> Z then Exit; Result := Screen.Tile[abs((Self.7) - X), abs((Self.5) - Y)]; end;

function 
IsTileWalkable(TileTTile): booleanbegin
Result 
:= True;
for 
:= 0 to Tile.Count do begin if Tile.Item[Z].Properties.Hole then
begin
Result 
:= Falseend else if Tile.Item[Z].Properties.Stairs then
begin
Result 
:= Falseend else if not Tile.Item[Z].Properties.Walkable then
begin
Result 
:= Falseendendend;

function 
FindPath(FromXFromYFromZToXToYToZintegerCheckLastTileboolean): boolean;
var 
XloopYloopintegerbegin
Result 
:= False;
if 
FromZ <> ToZ then Exit; Checked[abs(FromX - (Self.7)), abs(FromY - (Self.5))] := True;
for 
Xloop := 0 to 2 do begin for Yloop := 0 to 2 do begin if (((FromX 1) + Xloop) < Self.7) or (((FromX 1) + Xloop) > Self.7then Continue;
if (((
FromY 1) + Yloop) < Self.5) or (((FromY 1) + Yloop) > Self.5then Continue;
if (((
FromX 1) + Xloop) = ToX) and (((FromY 1) + Yloop) = ToYthen
begin 
if IsTileWalkable(GetTileFromXYZ((FromX 1) + Xloop, (FromY 1) + YloopFromZ)) or (not CheckLastTilethen
begin
Result 
:= True;
Exit; 
endend;
if ((
Xloop 1) and (Yloop 1)) then Continue;
if 
Checked[abs(((FromX 1) + Xloop) - (Self.7)), abs(((FromY 1) + Yloop) - (Self.5))] then Continue;
if 
IsTileWalkable(GetTileFromXYZ((FromX 1) + Xloop, (FromY 1) + YloopFromZ)) then
begin 
if FindPath((FromX 1) + Xloop, (FromY 1) + YloopFromZToXToYToZCheckLastTilethen
begin
Result 
:= True;
Exit; 
endendendendend;

function 
IsReachable(XYZinteger); begin
Checked 
:= VarArrayCreate([014010], 11);
for 
InitX := 0 to 14 do begin for InitY := 0 to 1 do begin
Checked
[InitXInitY] := FalseendendResult := FindPath(Self.XSelf.YSelf.ZXYZFalse); end;

function 
InList(Name:String):booleanbegin
result
:=false;
For 
x:=LOW(List) To High(List) do
if 
Name=List[xthen result:=trueend;


function 
Attacking boolean;
var 
integerbegin
Result 
:= False;
for 
:= 0 to Creatures.Count do begin if >= Creatures.Count then Break;
if 
Creatures.Creature[x].Attacking then
begin
Result 
:= True;
Exit; 
endendend;

function 
PlayerOnScreen Boolean;
var 
xintegerbegin
Result 
:= False;
for 
:= 0 to Creatures.Count do begin if >= Creatures.Count then Break;
if 
Creatures.Creature[x].z=self.z then if Creatures.Creature[x].Name<>Self.Name then if not Creatures.Creature[x].NPC then
begin
Result 
:=true;
Exit; 
endendend;

function 
GetCreatureByID(IDinteger): TCreature;
var 
xintegerbegin
Result 
:= nil;
for 
:= 0 to Creatures.Count do begin if >= Creatures.Count then Break;
if 
Creatures.Creature[x].ID ID then
begin
Result 
:= Creatures.Creature[x];
Exit; 
endendend;


function 
FindClosest integer;
var 
ilclosest_numclosest_rangelast_closest_range integerbegin if not attacking then
begin
closest_num 
:= -1last_closest_range := 5000;
for 
:= 0 to Creatures.Count do
if (
InList(Creatures.Creature[i].Name)=falsethen if (Creatures.Creature[i].Self.Zthen if (Creatures.Creature[i].NPC truethen if (IsReachable(Creatures.Creature[i].x,Creatures.Creature[i].y,Creatures.Creature[i].z)) then
begin
closest_range 
:= Round(Sqrt(Sqr(Self.Creatures.Creature[i].X)) + Sqr(Self.Creatures.Creature[i].Y));
if (
closest_range last_closest_rangethen
begin
last_closest_range 
:= closest_rangeclosest_num := iendendResult := closest_num;
Exit; 
endend;

var 
foundBla,SleepTimeintegerbegin
updateworld
Bla:=Self.Containers.CountLooting:=false;
while 
not terminated do begin
UpdateWorld
;
if 
Self.Containers.Count>Bla then Looting:=true;
if (
Looting=truethen
begin
updateworld
X:=self.xy:=self.yrepeat
sleep
(200); updateworlduntil (X<>Self.x) or (y<>self.y); Looting:=falseRepeat sleep(100); updateworlduntil not (Self.Containers.Count>Bla); endupdateworldfound := FindClosest;
if (
found <> -1then if (attacking=false) and (PlayerOnScreen=false) and (Looting=falsethen
Creatures
.Creature[found].Attacking := trueSleep(1000); endend

Se você quiser também pode usar esse script, que fará você atacar alguns monstros primeiro. Eu não vi muita diferença, mas você pode tentar:

Código PHP:
Const Name=['Blood Crab''Crocodile''Tortoise']; SwitchAt=30;// the % of the current attacked monster
            //that if the monster has lass % hp than this, we will NOT change to the stronger monster. 
function GetPlace(st:string):integer;
var 
x:integerbegin
Result
:=1000;
for 
x:=Low(NameTo High(Name) do
  
begin
   
if Name[x]=st then
   Result
:=x;
   
endend;

function 
GetCreatureByID(IDinteger): TCreature;
var
  
xintegerbegin
  Result 
:= nil;
  for 
:= 0 to Creatures.Count do
  
begin
    
if >= Creatures.Count then Break;
    if 
Creatures.Creature[x].ID ID then
    begin
      Result 
:= Creatures.Creature[x];
      Exit;
    
end;
  
endend;

function 
IsCreatureBesideYou(cTCreature): booleanbegin
   UpdateWorld
;
   
Result := False;
   if (
abs(c.X-self.X) <= 1) and (abs(c.Y-self.Y) <= 1then begin
    
if c.self.Z then begin
     Result 
:= True;
    
end;
   
endend;

var 
x:integerb:booleanbegin while not terminated do
  
begin
    b
:=false;
   
updateworld;
   If (
Self.Attacking<>0then
    begin
    Creature
:=GetCreatureByID(Self.Attacking);
     if 
Creature<>nil then
      
if SwitchAt<Creature.Health then
      begin
       
for := 0 to Creatures.Count do
        
begin
        updateworld
;
         if 
b then break;
         if 
>= Creatures.Count then Break;
         if 
Creatures.Creature[x].NPC then
         
if Creatures.Creature[x].z=self.z then
         
if Creatures.Creature[x].Name<>self.name then
         
if Creatures.Creature[x].Attacking false then
         
if IsCreatureBesideYou(Creatures.Creature[x]) then
         
if GetPlace(Creature.Name)>GetPlace(Creatures.Creature[x].Namethen
             begin
               sleep
(100);
                
updateworld;
                
Creatures.Creature[x].attacking:=true;
                 
B:=true;
              
end;
         
end;
       
end;
      
end;
     
Sleep(100);
   
endend

Tenha um bom botiamento XD



0 comentários:

Chat TibiaPronto!