Копка скал подскажите как копать тайл по типу ?

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Tyoma
Posts: 18
Joined: 2009-10-15 13:58:29

Копка скал подскажите как копать тайл по типу ?

Post by Tyoma »

собственно данный саб обкапывает всё в округе .. можно ли задать ему копание только по типу тайла ? (скал) или не по типу а какими-то обходнымы путями чтобы копал только скалы ) мб по Z заставить его ? но будет ли он пытаться копать воздух ? =)))
заранее спасибо =)

Code: Select all

sub kopka() 
hiding()
myXX=uo.getX(); запоминает место откуда начал копать
myYY=uo.getY();
var PX, PY, PZ, IX, IY, IZ
    PX=0
    PY=0
    UO.DeleteJournal()
         PX = UO.GetX()
         PY = UO.GetY()
         PZ = UO.GetZ()
    For Iy=-4 to 4
       For Ix=-4 to 4
        For Iz=-4 to -2
   if UO.Weight <= (uo.str*4+20) then
       while not UO.InJournal('There is no ore') and not UO.InJournal("You have no line") and not UO.InJournal("That is to far away") and not UO.InJournal("You can't think") and not UO.InJournal("You have no line of") and not UO.InJournal("too far away") and not UO.InJournal("mining in rock.")
            UO.DeleteJournal()
            if not uo.hidden() then
            autohide()
               while not uo.injournal("You have hidden")
                  wait(200)
               wend
            endif
             ws()
             UO.WaitTargetTile(-1,Str(PX+Ix),Str(PY+Iy),Str(PZ+IZ))
            uo.usetype(kirka)
            while not UO.InJournal("You put the") and not UO.InJournal("You loosen some") and not UO.InJournal("You can't think") and not UO.InJournal("That is to far away") and not UO.InJournal("There is no ore") and not UO.InJournal("You have no line of") and not UO.InJournal("too far away") and not UO.InJournal("mining in rock.")
               Wait(200)
            wend
      wend
   endif       
        UO.DeleteJournal()
         next
      next
     next
       if UO.Weight > (uo.str*4+20) then
      RunebookRecalla(1)
       UO.exec('exec GotoHomeT')
         else
      endif
end sub
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

Что в твоём понятии тип скалы?
Tyoma
Posts: 18
Joined: 2009-10-15 13:58:29

Post by Tyoma »

при инфотайле первое число = тип текстуры = тип тайла . но я только что заметил что у скал и травы там 0 О_о
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Попробуйте, после ручного тыка:
,infotile 'lasttile'

Все равно нуль ?
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Tyoma
Posts: 18
Joined: 2009-10-15 13:58:29

Post by Tyoma »

угумс .. пример последнего -
0 2286 1255 3 что по ласттайлу что так ..

судя по вашему выражению мне надо переделывать скрипт полностью под точные координаты ? по типу не прокатит ?
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Post by Mirage »

я бы предложил воспользоваться uo.privategettile если потянет версия инжекта и через инсайд переписать все типы которые интересны для копания.

Или по 0 Х Y жестко.
Tyoma
Posts: 18
Joined: 2009-10-15 13:58:29

Post by Tyoma »

как это реализовать в моём скрипте ? и наскоко это небезопасно посравнению с точечным копанием ? версия 505.18 гамп фикс в2 и что вобще за приваттаргеттайл ? порылся в поиске и неособо понял его функцию О_о
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Post by Mirage »

попробуй запустить. На 505 вроде работало:

Code: Select all

################ Рудокоп #################
Sub Mine()
   VAR Shovel1 = '0x0F3A'
   VAR Shovel2 = '0x0F39'
   VAR Pickaxe1 = '0x0F39'
   VAR Pickaxe2 = '0x0F39'
   VAR MaxRange = 2
   VAR X, Y, Z, Tiles
   VAR mX, mY, mZ
   VAR MaxVes = 610
   ;   UO.Set('quiet','0')
   UO.Msg(".resync")
   mX = UO.GetX('self')
   mY = UO.GetY('self')
   mZ = UO.GetZ('self')
   for Y = MaxRange - ( MaxRange * 2 ) to MaxRange
      for X = MaxRange - ( MaxRange * 2 ) to MaxRange
         Tiles = MiningTiles(mX+X, mY+Y)
         if Tiles then
            UO.DeleteJournal()
            repeat
               UO.Set('quiet','1')
               UO.DeleteJournal()
               UO.Warmode(0)
               UO.WaitTargetTile(Tiles, mX+X, mY+Y, mZ)
   UO.FindType(Shovel1,-1,'my')
      if UO.FindCount() then
         UO.UseType(Shovel1)
      else
   UO.FindType(Shovel2,-1,'my')
      if UO.FindCount() then
         UO.UseType(Shovel2)
      else
   UO.FindType(Pickaxe1,-1,'my')
      if UO.FindCount() then
         UO.UseType(Pickaxe1)
      else
   UO.FindType(Pickaxe2,-1,'my')
      if UO.FindCount() then
         UO.UseType(Pickaxe2)
      else
         UO.Set('quiet','0')
            UO.Print("ERROR: Нечем копать!!!")
         return
      endif
      endif
      endif
      endif
               LastTimer=UO.Timer()
               repeat
                  wait(100)
               until UO.InJournal("%|destroyed|useable|выкопали|0xAD00|0xA867|0xA2DE|0xAD03|0x5DE0|0x5DE1|0x5DE2|0x5DE3|0x5DE4|0x5DE5|0x5DE6|0x5DE7|Вы положили|put the|is nothing here to mine|Wthere do you|Вам не удалось|У вас нет|have no line|ничего|Тут ничего|Попробуйте|Try mining elsewhere") || UO.Timer()>LastTimer+100 || UO.Weight > MaxVes || UO.Dead()
            until UO.InJournal("%|destroyed|0xAD00|0xA867|0xA2DE|Тут ничего|is nothing here to mine|нет руды|У вас нет|have no line|Попробуйте|Try mining elsewhere") || UO.Timer()>LastTimer+500 || UO.Weight > MaxVes || UO.Dead()
            ############################
            #ПЕРЕГРУЗ!!!#
            ############################
            If UO.Weight > MaxVes Then
               UO.Print('Перегруз!')
               wait(500)
               return
            endif
            ############################
         endif
      next
   next
   UO.Set('quiet','0')
   UO.Print("Все")
   UO.Sound(100)
   return 0
end sub

Sub MiningTiles(X,Y)
   var i
   if UO.PrivateGetTile(X, Y, -1, 616, 618) then
      for i=616 to 618
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 1339, 1363) then
      for i=1339 to 1363
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 2272, 2282) then
      for i=2272 to 2282
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 4963, 4973) then
      for i=4963 to 4973
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 6001, 6012) then
      for i=6001 to 6012
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13121, 13369) then
      for i=13121 to 13369
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13446, 13455) then
      for i=13446 to 13455
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13484, 13492) then
      for i=13484 to 13492
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13625, 13628) then
      for i=13625 to 13628
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   return 0; No Mining Tiles
end sub

Если будет ругаться значит не судьба. Если не будет ругаться то должен и по стенам и по сталактитам и по всему что может содержать руду копать. лопата кирка пофигу какая лишь бы в паке лежала.
Tyoma
Posts: 18
Joined: 2009-10-15 13:58:29

Post by Tyoma »

сначала ругался на ласт таймеры =) я их убрал =) 52-51 строки =) потом на ресинк начал ругаться ) тоже вырубил ) в итоге при запуске скрипта пишет уопринтом "все" и вырубаеться ..
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Mirage, у его тайлов нулевой тайп..

Хрен его знает, как у него копка по скалам вообще работает..

Tyoma, проще будет записать все "правильные" тайлы в табличку и по ней уже проходиться и капать.
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Tyoma
Posts: 18
Joined: 2009-10-15 13:58:29

Post by Tyoma »

Destruction wrote:Mirage, у его тайлов нулевой тайп..

Хрен его знает, как у него копка по скалам вообще работает..

Tyoma, проще будет записать все "правильные" тайлы в табличку и по ней уже проходиться и капать.

я уже так и понял ))) попробую )
Tyoma
Posts: 18
Joined: 2009-10-15 13:58:29

Post by Tyoma »

Code: Select all

var tSeif='000000000' 
var Kirka='0x0E85'

sub main()
 while not uo.dead()
  go(1528,1119,1)#k=1 капаем k<>1 холостой ход
minround()
  go(1528,1120,1)
minround()
  go(1529,1119,0)
  go(1529,1120,1)
minround()
  go(1530,1119,0)
  go(1530,1120,1)
minround()
  go(1531,1119,0)
  go(1531,1120,1)
minround()
  go(1532,1119,0)
  go(1532,1120,1)
minround()
  go(1544,1112,0)#подходим к сундуку
  UnLoad()#выкладываем руду
wend
endsub

sub minround()
VAR Kirka = '0x0F39'
VAR TileNum = '1339'
VAR x, y, t, k
VAR MaxTime = 100 
VAR ms1 = "There is no ore here to mine"
VAR ms2 = "You can't use"
VAR ms3 = "You put the"
VAR ms4 = "You loosen some rocks"
VAR ms5 = "You are too far away"
VAR ms6 = "Try mining in rock"
VAR ms7 = "You can't see that"
var kolr,per
for y=-1 to 1
for x=-1 to 1 
  k = 0
  repeat
    UO.DeleteJournal()
    t = UO.Timer()
    k = k + 1
    if uo.targeting() then
     UO.CancelTarget()
    endif
    CheckLag()
    wait(300)
    UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)
    UO.UseType( Kirka )
    repeat
     wait(300)
    until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR ((t + MaxTime) < UO.Timer())
    uo.findtype('0x19B9','-1','backpack')
    kolr=uo.getquantity('finditem')
    per=uo.str*4+30-uo.weight
    uo.print("kol-vo irona " + str(kolr) + " do perevesa " + str(per))
    if per<=30 then
     uo.exec('terminate all')
     wait(700)
    endif     
  until ( NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms3) OR (k > 10) )
 next
next
endsub

Sub go(x,y,k)
 
end sub



помогите пожалуста переделать под точечную копалку ? в мэйн пример координат .. нужно чтобы там где 1 он копал (именно эти указаные координаты) а там где 0 двигался (собсна как мы щас и имеем) но он обкапывает всё вокруг а надо только ту координату с 1 .. подправьте пожалуста минраунд немного .. заранее спс .. или подскажите как правильно подправить ? а то непонимаю каким образом он может считовать те координаты что я указал с 1 ..
Tyoma
Posts: 18
Joined: 2009-10-15 13:58:29

Post by Tyoma »

всё намано всё сделал ) вопрос номер два .. чёто некоректно работает килялка елементала со скрола ..

Code: Select all

Sub mining_pomos()
repeat
uo.findtype('0x000E','-1','ground')
if uo.findcount() then
uo.waittargetobject('finditem')
wait(500)
uo.usetype('0x1F2D')
wait(2000)
endif
end sub


суть в том чтобы юзнуть на Елементала скрол .. и чем быстрее тем лудше .. если физл то повторить .. что скажите ? =)
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Post by Mirage »

патамушто гладиолус :)

Code: Select all

Sub mining_pomos()
 repeat ; начало цикла
   uo.findtype('0x000E','-1','ground')
   if uo.findcount() then
      uo.waittargetobject('finditem')
      uo.usetype('0x1F2D')
      wait(2000)
   endif
;ни че тут не забыл?
end sub

ps у них там не определяющаяся статика копается (реально скалы с 0 тайлом) - какойто безумный мир :lol:
Tyoma
Posts: 18
Joined: 2009-10-15 13:58:29

Post by Tyoma »

Mirage wrote:патамушто гладиолус :)

Code: Select all

Sub mining_pomos()
 repeat ; начало цикла
   uo.findtype('0x000E','-1','ground')
   if uo.findcount() then
      uo.waittargetobject('finditem')
      uo.usetype('0x1F2D')
      wait(2000)
   endif
;ни че тут не забыл?
end sub

ps у них там не определяющаяся статика копается (реально скалы с 0 тайлом) - какойто безумный мир :lol:


делейт журнала ? ну всёравно как-то я или криво его вставляю или незнаю .. долго юзает .. ор появляеться а он ещё секунд 10 бывает стоит ..

вычислил проблему .. поиск идёт по граунду .. а ор когда появляеться (пока не ударит или ещё чего не сделает/кастанёт) подвешен в воздухе .. есть какие решения ?
Tyoma
Posts: 18
Joined: 2009-10-15 13:58:29

Post by Tyoma »

разобрались тему клоц =) спс миражу :!:
Swint
Posts: 27
Joined: 2009-06-29 13:53:36

Post by Swint »

Меня интересует вопрос: "Что делает этот скрипт"?

Code: Select all

################ Рудокоп ################# 
Sub Mine()
   VAR Shovel1 = '0x0F3A'
   VAR Shovel2 = '0x0F39'
   VAR Pickaxe1 = '0x0F39'
   VAR Pickaxe2 = '0x0F39'
   VAR MaxRange = 2
   VAR X, Y, Z, Tiles
   VAR mX, mY, mZ
   VAR MaxVes = 610
   ;   UO.Set('quiet','0')
   UO.Msg(".resync")
   mX = UO.GetX('self')
   mY = UO.GetY('self')
   mZ = UO.GetZ('self')
   for Y = MaxRange - ( MaxRange * 2 ) to MaxRange
      for X = MaxRange - ( MaxRange * 2 ) to MaxRange
         Tiles = MiningTiles(mX+X, mY+Y)
         if Tiles then
            UO.DeleteJournal()
            repeat
               UO.Set('quiet','1')
               UO.DeleteJournal()
               UO.Warmode(0)
               UO.WaitTargetTile(Tiles, mX+X, mY+Y, mZ)
   UO.FindType(Shovel1,-1,'my')
      if UO.FindCount() then
         UO.UseType(Shovel1)
      else
   UO.FindType(Shovel2,-1,'my')
      if UO.FindCount() then
         UO.UseType(Shovel2)
      else
   UO.FindType(Pickaxe1,-1,'my')
      if UO.FindCount() then
         UO.UseType(Pickaxe1)
      else
   UO.FindType(Pickaxe2,-1,'my')
      if UO.FindCount() then
         UO.UseType(Pickaxe2)
      else
         UO.Set('quiet','0')
            UO.Print("ERROR: Нечем копать!!!")
         return
      endif
      endif
      endif
      endif
               LastTimer=UO.Timer()
               repeat
                  wait(100)
               until UO.InJournal("%|destroyed|useable|выкопали|0xAD00|0xA867|0xA2DE|0xAD03|0x5DE0|0x5DE1|0x5DE2|0x5DE3|0x5DE4|0x5DE5|0x5DE6|0x5DE7|Вы положили|put the|is nothing here to mine|Wthere do you|Вам не удалось|У вас нет|have no line|ничего|Тут ничего|Попробуйте|Try mining elsewhere") || UO.Timer()>LastTimer+100 || UO.Weight > MaxVes || UO.Dead()
            until UO.InJournal("%|destroyed|0xAD00|0xA867|0xA2DE|Тут ничего|is nothing here to mine|нет руды|У вас нет|have no line|Попробуйте|Try mining elsewhere") || UO.Timer()>LastTimer+500 || UO.Weight > MaxVes || UO.Dead()
            ############################
            #ПЕРЕГРУЗ!!!#
            ############################
            If UO.Weight > MaxVes Then
               UO.Print('Перегруз!')
               wait(500)
               return
            endif
            ############################
         endif
      next
   next
   UO.Set('quiet','0')
   UO.Print("Все")
   UO.Sound(100)
   return 0
end sub

Sub MiningTiles(X,Y)
   var i
   if UO.PrivateGetTile(X, Y, -1, 616, 618) then
      for i=616 to 618
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 1339, 1363) then
      for i=1339 to 1363
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 2272, 2282) then
      for i=2272 to 2282
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 4963, 4973) then
      for i=4963 to 4973
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 6001, 6012) then
      for i=6001 to 6012
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13121, 13369) then
      for i=13121 to 13369
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13446, 13455) then
      for i=13446 to 13455
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13484, 13492) then
      for i=13484 to 13492
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13625, 13628) then
      for i=13625 to 13628
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   return 0; No Mining Tiles
end sub


Как я понял,он копает скалы.Но у меня есть проблема,начинает копать,когда выкапывает все из кочки я подхожу к другой,но чето-то не копает...Или он не так работает,а как-то подругому,т.е. принцип скрипта не тот?(= :oops: [/quote]
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Post by Mirage »

то что просил автор выглядит несколько иначе :)

ЭТОТ скрипт копает тайлы перечисленные в нижней части скрипта (например с 6001 по 6012 и так далее). Не копает если нет инструмента, вес больше 500. Одноразовая копка до всего чего можно достать стоя на месте в радиусе 2 тайла от персонажа. Это просто модуль копания. Если ты сам ходишь то надо запускать каждый раз процедуру Mine()

Если хочешь с хождением сделать то надо делать чтото типо этого:

Code: Select all

GoToXY(X1,Y1,0)
Mine()
GoToXY(X2,Y2,0)
Mine()
GoToXY(X3,Y3,0)
Mine()


PS надо переписать типы лопат и кирок - это черновой вариант скрипта.
Swint
Posts: 27
Joined: 2009-06-29 13:53:36

Post by Swint »

Ммм ясно! А какую команду удалить,чтобы он когда выкапывал вырубал скрипт...а то висит он!(
Post Reply