Page 1 of 1

Таскание стопки за собой

Posted: 2007-09-16 07:36:57
by Destruction
Собственно вводная - есть стопка (допустим 65к бревён) - нужно по-быстрому перетащить всё за собой.

Т.к. стока за раз поднять не получается - нужно перекладывать по-частям, вобщем незнаю как сказать, попробывал реализовать:

Code: Select all

sub ItemFollower()
   var quantity = 5000 ; по скольку предметов за раз перекидывать
   uo.addObject( "moving item" )
   while uo.targeting()
      wait( 100 )
   wend
   var type = uo.getGraphic( "moving item" )
   var colr = uo.getColor( "moving item" )
   var x, y, z
   uo.ignorereset()
   repeat
      x = uo.getX( "moving item" )
      y = uo.getY( "moving item" )
      z = uo.getZ( "moving item" )
      while uo.getX() == x && uo.getY() == y
         wait( 100 )
      wend
      uo.set( 'finddistance', str( getMax( abs( uo.getX() - x ), abs( uo.getY() - y ) ) ) )
      uo.findtype( type, colr, "ground" )
      while uo.findcount()
         if uo.getX( 'finditem' ) == x && uo.getY( 'finditem' ) == y && uo.getZ( 'finditem' ) == z then
            uo.moveitem( 'finditem', str( quantity ), "ground" )
            while uo.getX( 'finditem' ) == x && uo.getY( 'finditem' ) == y && uo.getZ( 'finditem' ) == z
               wait( 100 )
            wend
         endif
         uo.ignore( 'finditem' )
         uo.findtype( type, colr, "ground" )
      wend
      uo.ignorereset()
      uo.set( 'finddistance', '0' )
      uo.findtype( type, colr, "ground" )
      if not uo.findcount() then
         uo.print( "Oops! Item stealed!" )
         return false
      endif
      uo.addObject( "moving item", uo.getSerial( "finditem" ) )
   until false
endsub

Sub getMax( x, y )
   if x > y then
      return x
   endif
   return y
endsub


Диагноз - слишком медленно, есть идеи ?

Posted: 2007-10-05 15:30:19
by grundick
А чё он у тебя их за собой волокёт? Ты сделай чтоб по направлению движения вперед перекладывал