Postado Fevereiro 24, 2012 13 anos Citar 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 Fevereiro 24, 2012 13 anos por SkolFsN (veja o histórico de edições)
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.