Ir para conteúdo
  • Cadastre-se

[TIBIA] Diagonal com Dragon


Posts Recomendados

Const

Wanted='Dragon';// whice monster to keep diagnoling

AttackAt = 25

RampsID = [1950, 1952, 1954, 1956, 385, 1947, 434, 414, 604]

var

x,Bla:Integer;

Looting: boolean;

function IsCreatureBesideYou(c: TCreature): boolean;

begin

UpdateWorld;

if (abs(c.X-self.X) <= 1) and (abs(c.Y-self.Y) <= 1) then begin

if c.Z = self.Z then

begin

Result := True;

Exit;

end;

end;

Result := False;

end;

function GetTileFromXYZ(X, Y, Z: integer): TTile;

begin

Result := nil;

if abs((Self.X - 7) - X) > 14 then Exit;

if abs((Self.Y - 5) - Y) > 11 then Exit;

if Self.Z <> Z then Exit;

Result := Screen.Tile[abs((Self.X - 7) - X), abs((Self.Y - 5) - Y)];

end;

function IsTileWalkable(Tile: TTile): boolean;

begin

Result := True;

for Z := 0 to Tile.Count - 1 do

begin

if Tile.Item[Z].Properties.Hole then

begin

Result := False;

end

else if Tile.Item[Z].Properties.Stairs then

begin

Result := False;

end

else if not Tile.Item[Z].Properties.Walkable then

begin

OutputDebugString('Not Walk: ' + IntToStr(Tile.Item[Z].ID));

Result := False;

end;

else

begin

for x := low(RampsID) to high(RampsID) do

begin

if Tile.Item[Z].ID = RampsID[x] then Result := False;

end;

end;

end;

end;

function GetCreatureBesideYou: TCreature;

begin

UpdateWorld;

Result := Nil;

for x := 0 to Creatures.Count - 1 do

begin

UpdateWorld;

if (Creatures.Creature[x].Name=Wanted) then

if IsCreatureBesideYou(Creatures.Creature[x]) then

begin

if Creatures.Creature[x].ID <> Self.ID then

begin

UpdateWorld;

Result := Creatures.Creature[x];

Exit;

end;

end;

end;

end;

var

Moved:boolean;

begin

updateworld;

G:=false;

T:=false;

while not terminated do

begin

Bla:=Self.Containers.Count;

updateworld;

Creature:=GetCreatureBesideYou;

if Creature<>nil then

if Creatures.Creature[x].Health>AttackAt then

begin

if (Self.X<>Creature.X) and (Self.Y=Creature.Y) then

begin

Tile:=GetTileFromXYZ(Self.x,Self.y-1,self.z);

if Tile<>nil then

if IsTileWalkable(Tile) then

begin

Self.MoveUp;

Moved:=true;

end;

If (Moved=False) then

begin

Tile:=GetTileFromXYZ(Self.x,Self.y+1,self.z);

if Tile<>nil then

if IsTileWalkable(Tile) then

Self.MoveDown;

end;

end;

Moved:=false;

if (Self.X=Creature.X) and (Self.Y<>Creature.Y) then

begin

Tile:=GetTileFromXYZ(Self.x-1,Self.y,self.z);

if Tile<>nil then

if IsTileWalkable(Tile) then

begin

Self.MoveLeft;

Moved:=true;

end;

If (Moved=False) then

begin

Tile:=GetTileFromXYZ(Self.x+1,Self.y,self.z);

if Tile<>nil then

if IsTileWalkable(Tile) then

Self.MoveRight;

end;

end;

end;

sleep(1000);

end;

end;

Creditos:SkolFsN

Editado por SkolFsN (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo