Помогите подправить

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
son
Posts: 43
Joined: 2006-12-16 14:44:01

Помогите подправить

Post by son »

Здравствуйте,есть крипт на ламбер,скрипт отличный все хорошо работает(Огромное спасибо Mirage за доработку).Вот только есть малююююсенькое "НО"Можно ли подправить скрипт чтобы при появлении сообщения "There are no logs left here to chop" сразу же переходил к следующему дереву,а то стоит и пытается ударить дерево то колличество раз которое заданно.Спасибо.

Code: Select all


############################################
###    Lumberjacking / Рубка деревьев  v3.7  ###
############################################
###   Шард Dragon World / www.drw.ru 
############################################
###  Реавтор этого скрипта: BETEP [WOD]  or BETEPAH ###
############################################
############################################
### Оформление дополнений cOoler [Sw!Ne$]###
############################################
###
#############################
###  Описание и настройка ###
#############################
###
### Чар бегает от дерева к дереву(координаты деревьев берет из файла).
### Вырубит, бежит к следующему,при логах 700 штук в паке порталится домой скидывает логи в сундук,
### после реколится обратно бежит к последнему дереву и продолжает рубить.
### Пример: В файле 100 деревьев, вы вырубив 74 дошли до придела в 700 логов сработала система рекола
### и вы "порталитесь" домой и складываете логи в сундук,после вы реколитесь обратно в лес и бежите к 75 дереву.
### Дойдя до 100 дерева (тоесть последнего в списке) чар перейдет к 1ому дереву.(Цикличность)
###
### Для тех то кто им пользуется сообщаю, переделал, доработал, отредактировал.!
###
### Нововведения:
### 1 )Логи складываются не на пол а в сундук. (BETEPAH)
### 2 )Рекол в лес и домой по РУНБУКЕ (а не по рункам). (BETEPAH)
### ВНИМАНИЕ!!! В СКРИПТЕ РУНБУКИ НАСТРОЕНЫ ПОД DRW (шард)
### 3 )Система Автомарка Убрана ,и переделана в сомостоятельное маркирование деревьев
### (раньше чар сам бегал по лесу и очень долго марчил деревья)теперь бегаем сами и просто прицелом по деревам
### (марчим также,как и раньше в руках кирка). (BETEPAH)
### 4 )Увеличен придел замаркированых деревьев да 500 шт. (BЕТЕРАН)
### 5 )Улучшна система Хайда (ходим, не бегаем). (BЕТЕРАН)
### 6 )Добавлена система InfoLogs. (Mguai, доработана BETEPAH)
### 7 )Добавлен выбор кирки.(cOoler,доработана BETEPAH)
### 8 )Система реконекта (выложаная сверху),хорошо сочетается с скриптом лумбер. (Fox M)
###
### !!! Чтобы скрипт заработал ВНИМАТЕЛЬНО прочтите настройки.!!!!
###
### Работает в 2ух режимах:
### 1)Маркировка
### 2)Рубка
###
###################################
###    Режимы работы скрипта     ###   
###################################
### Режим первый - "Маркировка".###
###################################
###
### Этот режим отвечает за Маркирование(записывание координат) деревьев.
### Включается переменной var GetFromFile=0 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента.
### То есть если GetFromFile=0 координаты деревьев собиратся из клиента.
###
### Маркировка происходит так.
### Поставте переменную GetFromFile равную 0 (GetFromFile=0 ). Положите в суммку к себе Топор,Рунбук(с Рунами домой и в лес) и !!Кирку!!.
### Идите в лес в котором вы хотите рубить.Запустите Скрипт main(),Инжект попросит вас указать Топор
### (появится прицел,прицелом на топор который вы с собой взяли),потом инжект попросит вас указать Рунбук(появится прицел,прицелом на него).
### Инжект сообщит вам что ('Собираем координаты деревьев в округе...'). Чар автоматом возмет в руки кирку и появится прицел.
### Теперь вы должны в любом порядке САМИ прицелом указать координаты (достаточно просто нажать прицелом на дерево).
### Если вы не промахнулись и "нажали" на дерево то инжект сообщит вам об этом (Найдено дерево "координаты дерева").
### Причем что если даже вы нажмете два раза на одно дерево то он не "запомнит" его повторно.
### Ходите по лесу и марчите деревья,после того как вы "наберете" достаточное количество деревьев.
### Инжект напишет вам сообщение ('Анализ закончен, координаты деревьев записаны в файл C:\trees3.dat') и создаст файл на диске С:\ куда запишет
### координаты деревьев.Система марка зависит от Времени и переменной Area.При Area = 1,
###марк продлится примерно 20-25 мин.Остоновить марк нельзя, можно только дождатся его конца.
###500 .Это ПРИДЕЛ (можно хоть 10,хоть 499),но если вы замарчите 501 дерево то скрипт повиснет.
### После этого чар пойдет по координатам и будет вырубать деревья.
###
##############################
### Режим Второй - "Рубка".###
##############################
###
### Этот режим соответственоо отвечает за рубку.
### Включается переменной var GetFromFile=1 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента
### То есть если GetFromFile=1 координаты деревьев будут считыватся из файла. И вам не надо будет сново марчить деревья.
###
### Рубка происходит так,Поставте переменную GetFromFile равную 1 ( GetFromFile=1 ).
### Положите в суммку к себе Топор и Рунбук(с Рунами домой и в лес).
### Внимание!!! В РУНБУКЕ РУНА В 1ом слоте ДОМОЙ,в 9ом В лес.После установок рун в РУНБУК.
### ВНИМАНИЕ!!! В СКРИПТЕ НОМЕРА РУН В РУНБУКЕ НАСТРОЕНЫ ПОД DRW (шард).
###
### Настройте скрипт под себя при помощи переменных.
###################
### Переменные: ###
###################
### 1)var TryHiding=1 ## 1 - перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет
### 2)var LogsQty=700 ## Количество логов, добыв которое надо реколиться домой.
### 3)var TryRecall=1 ## 1 - после того как соберет LogsQty логов, будет пытаться реколиться домой,складывать логи в сундук и реколиться обратно
### (нужно указать Рунбук в которой,1 ая руна домой, а 9 ая в лес), 0 - не будет реколится домой и выключит скрипт.
### 4)VAR Meshok='0x401C1142'## - Айди сундука в который должен складывать Логи.(айди сундука можно узнать написав ,info и прицелом на сундук
### (в данном случие этот Айди 0x401C1142).Переменная находится ниже в скрипте (примерно в районе 327 строки).
###
### После настройки:
###
### Идите в лес в котором вы хотите рубить.Запустите Скрипт Lumberjacking(),Инжект попросит вас указать Топор
### (появится прицел,прицелом на топор который вы с собой взяли),потом инжект попросит вас указать Рунбук(появится прицел,прицелом на него).
### После этого чар пойдет по координатам и будет вырубать деревья.
###########
### Код ###
###########
sub Lumberjacking()
var i=0,j=0,k=0,r=0,q=0,ii,jj
var TopX=324,TopY=65
dim TreeX[500], TreeY[500],TreeT[500]
dim TreeTile[10]
var flag=0,treeCount=0,clicks=0,flag2=0
######################
### Меню / Options ###
######################
############################################################################################
var f=file("D:\trees2.dat") ## - Путь к файлу в котором будут хранится координаты Деревьев.
###
var Area=1 ## Размер обрабатываемой территории, можно менять от 1 до 4.
###
var TryHiding=0 ## 1 - Перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет .
###
var TryRecall=0 ## 1 - После того как соберет LogsQty логов, будет пытаться реколиться домой,
# складывать логи в сундук и реколиться обратно (нужно указать Рунбук в которой,1 ая руна домой, а 9 ая в лес), 0 - не будет.
###
var LogsQty=2000 ## Количество логов, добыв которое надо реколиться домой.
###
var GetFromFile=1 ## 1 - Координаты деревьев будут считыватся из файла, 0 - собиратся из клиента
#(сначала соберите а потом считывайте из файла).
###
uo.exec("set norbcheck 1")# Для рекола.
###
uo.exec("set norbcalc 1") # Для рекола .
###
############################################################################################ 
########################
### Графика деревьев ###
########################
TreeTile[0]=3283
TreeTile[1]=3277
TreeTile[2]=3293
TreeTile[3]=3296
TreeTile[4]=3302
TreeTile[5]=3299
TreeTile[6]=3290
TreeTile[7]=3288
TreeTile[8]=3286
TreeTile[9]=3280

uo.exec("filterspeech on")
uo.exec("filterspeech add 'Where do you want to use the pickaxe?'")

uo.print('Выбери топор: ')
uo.exec('addobject axe')
while uo.targeting()
wait(100)
wend

if TryRecall==1 then
uo.print('Выбери PунБук: ')
uo.exec('addobject Runebook')
while uo.targeting()
wait(100)
wend
end if
#####################################
### Загружаем координаты из файла ###
#####################################
if GetFromFile==1 then
uo.print('Загружаем координаты из файла...')
f.open()
TreeCount=safe call f.readNumber()
for i=1 to TreeCount
TreeT[i]=safe call f.ReadNumber()
TreeX[i]=safe call f.ReadNumber()
TreeY[i]=safe call f.ReadNumber()
next
f.close()
else
######################################
### Собираем координаты из клиента ###
######################################
uo.print('Выбери Кирку: ')
uo.exec('addobject Pickaxe')
while uo.targeting()
wait(100)
wend
uo.print('Собираем координаты деревьев в округе...')
for q=1 to Area
if q==2 then
gotoxy(uo.getx()+20,uo.gety()-10)
end if
if q==3 then
gotoxy(uo.getx(),uo.gety()+20)
end if
if q==4 then
gotoxy(uo.getx()-20,uo.gety())
end if
for r=0 to 3
if r==1 then
gotoxy(uo.getx()+10,uo.gety())
end if
if r==2 then
gotoxy(uo.getx(),uo.gety()+10)
end if
if r==3 then
gotoxy(uo.getx()-10,uo.gety())
end if
for j=0 to 8
for i=0 to 8
clicks=0
flag=0
uo.DeleteJournal()
#######################
### Кликаем на тайл ###
#######################
uo.useobject('Pickaxe')
waitForTarget()
uo.DeleteJournal()

WaitForTryRock()

###############################
### Проверяем дерево ли это ###
###############################
flag=0
for k=0 to 9
if uo.LastTile(0)==TreeTile[k]+1 then
flag=2
end if
next
if flag==0 then
for k=0 to 9
if uo.LastTile(0)==TreeTile[k] then
flag=1
end if
next
end if
#########################
### Кликнули на ствол ###
#########################
if flag==1 then
flag2=0
if treeCount>0 then
for ii=1 to treeCount
if treeX[ii]==uo.lastTile(1) AND treeY[ii]==uo.lastTile(2) then
flag2=1
end if
next
end if
if flag2==0 then
treeCount=treeCount+1
TreeX[treeCount]=uo.LastTile(1)
treeY[treeCount]=uo.lastTile(2)
TreeT[treeCount]=uo.LastTile(0)
uo.print('Найдено дерево: x='+str(uo.lasttile(1))+' y='+str(uo.lastTile(2)))
end if
end if
##########################
### Кликнули по листве ###
##########################
if flag==2 then
flag2=0
if treeCount>0 then
for ii=1 to treeCount
if treeX[ii]==uo.lastTile(1) AND treeY[ii]==uo.lastTile(2) then
flag2=1
end if
next
end if
if flag2==0 then
treeCount=treeCount+1
TreeX[treeCount]=uo.LastTile(1)
treeY[treeCount]=uo.LastTile(2)
TreeT[treeCount]=uo.LastTile(0)-1
uo.print('Найдено дерево: x='+str(uo.lasttile(1))+' y='+str(uo.lastTile(2)))
end if
end if
next
next
next
next
uo.exec("filterspeech off")
uo.print('Анализ закончен, координаты деревьев записаны в файл C:\trees3.dat')
SaveToFile(treeCount,TreeX,TreeY,TreeT)
end if
uo.print('Деревьев найдено: '+str(treeCount))
wait(2000)
######################################
### Ходим по собранным координатам ###
######################################
while 1==1
if treeCount>0 then
for i=1 to treeCount
if TryRecall==1 AND uo.Count('ZLK')>=LogsQty then
ToRecall()
end if
uo.print('Идем к дереву '+str(i)+': x='+str(treex[i])+' y='+str(treey[i]))
infologs()
flag=gotoxy(treex[i],treey[i])
if flag==1 then
if TryHiding==1 then
ToHide()
end if
GetTree(str(treeT[i]),str(treeX[i]),str(TreeY[i]),str(uo.getz()))
end if
next
end if
wend
end sub

sub GetTree(type,x,y,z)
var i
uo.print('Начинаем рубку дерева...')
for i=0 to 3
if uo.warmode()==1 then
return 0
end if
wait(200)
uo.deletejournal()
uo.WaitTargetTile(Type,X,Y,Z)
uo.UseType(0x0F43)
if WaitForChange()==1 then
return 1
end if
next
return 0

end sub

sub ToRecall()
VAR Meshok='0x401C1142' ## - ID сундука в который чар должен складывать логи
RecallToHome()
wait(500)
uo.press(36)
wait(500)
uo.press(36)
wait(500)
repeat
wait(500)
repeat
wait(500)
repeat
wait(500)
repeat
wait(600)
UO.SetReceivingContainer(Meshok)
uo.findtype('ZLK')
wait(500)
UO.Grab('all','finditem')
infologs()
wait(500)
until uo.GetQuantity('finditem')==0
UO.UnSetReceivingContainer()
UO.SetReceivingContainer(Meshok)
uo.findtype('ZLK')
wait(500)
UO.Grab('all','finditem')
infologs()
wait(500)
until uo.GetQuantity('finditem')==0
UO.UnSetReceivingContainer()
UO.SetReceivingContainer(Meshok)
uo.findtype('ZLK')
wait(500)
UO.Grab('all','finditem')
infologs()
wait(500)
until uo.GetQuantity('finditem')==0
UO.UnSetReceivingContainer()
RecallToLumber()
end sub

sub RecallToHome()
UO.Print("!!Прыгаем ДоМОЙ!!")
uo.exec("recall Runebook 21")
wait(10000)
end sub

sub RecallToLumber()
UO.Print("!!Прыгаем в ЛЕС!!")
uo.exec("recall Runebook 1025")
wait(10000)
end sub

sub ToHide()
while not UO.Hidden()
uo.print('Пытаемся уйти в хайд...')
uo.deletejournal()
UO.UseSkill("Stealth")
wait(4100)
wend
wait(100)
end sub


sub WaitForRecall()
var Text1=uo.getname()+": The spell fizzles."
var mess='',lastX=uo.getX(),lastY=uo.getY()
for var i=0 to 200
mess=uo.journal(0)
if uo.Journal(0)==Text1 then
return 0
end if
if uo.getX()<>lastX OR uo.getY()<>LastY then
return 1
end if
wait(50)
next
return 0
end sub

sub WaitForHide()
var Text1=uo.getname()+": You have hidden yourself well"
var Text2=uo.getname()+": You can't seem to hide here."
var mess
for var i=0 to 200
mess=uo.journal(0)
if uo.Journal(0)==Text1 then
return 1
end if
if uo.Journal(0)==Text2 then
return 0
end if
wait(50)
next
return 0
end sub

sub WaitForChange()
var Text1=uo.getname()+': You hack at the tree for a while, but fail to produce any useable wood.'
var Text2='There are no logs here to chop.'
var Text3="You can't reach this."
var mess
for var i=0 to 200
mess=uo.journal(0)
if uo.Journal(0)==Text2 OR uo.Journal(0)==Text3 then
return 1
end if
if uo.Journal(0)==Text1 then
return 0
end if
if mess[0]=='Y' AND mess[1]=='o' AND mess[2]=='u' AND mess[4]=='p' AND mess[5]=='u' AND mess[6]=='t' then
return 0
end if
wait(50)
next
return 0
end sub

sub WaitForTryRock()
var Text1="That is too far away."
var Text2="Try mining in rock."
var Text3="There is no ore here to mine."
var Text4="You have no line of sight to that location"
var Text5="You can't see the target"
for var i=0 to 50
if uo.Journal(0)==Text1 OR uo.Journal(0)==Text2 OR uo.Journal(0)==Text3 OR uo.Journal(0)==Text4 OR uo.Journal(0)==Text5 then
return 1
end if
wait(200)
next
return 0
end sub

sub WaitForTarget()
for var i=0 to 50
if uo.Targeting()==1 then
return 1
end if
wait(200)
next
return 0
end sub

sub WaitForChangeXY(myX,myY,lastX,lastY)
for var i=1 to 50
if lastX<>myX OR lastY<>myY then
return 1
end if
wait(200)
next
return 0
end sub

sub gotoXY(x,y)
var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0
for i=1 to 60
MyX=uo.getX();
MyY=uo.getY();
if LastX==MyX AND LastY==MyY then
halt=halt+1
else
halt=0
end if
if halt>=10 then
if uo.GetDir()==1 then
for z=0 to 8
uo.press(40)
next
end if
if uo.GetDir()==3 then
for z=0 to 8
uo.press(37)
next
end if
if uo.GetDir()==5 then
for z=0 to 8
uo.press( 38 )
next
end if
if uo.GetDir()==7 then
for z=0 to 8
uo.press(39)
next
end if
halt=15
end if
if abs(x-myX)<=1 AND abs(y-myY)<=2 then
return 1
end if
if x<=MyX then
if y<=MyY then
for z=0 to 3
uo.press( 38 )
next
else
for z=0 to 3
uo.press(37)
next
end if
else
if y<=MyY then
for z=0 to 3
uo.press(39)
next
else
for z=0 to 3
uo.press(40)
next
end if
end if
lastX=myX
lastY=myY
wait(200)
next
return 0
end sub

sub abs(num)
if num>=0 then
return num
else
return num*(-1)
end if
end sub

sub SaveToFile(TreeCount,TreeX,TreeY,TreeT)
var f=file("D:\trees2.dat")
var s=0,i=0
f.open()
f.create()
s=safe call f.writeln(TreeCount)
for i=1 to TreeCount
s=safe call f.writeln(str(TreeT[i])+' '+str(treeX[i])+' '+str(TreeY[i]))
next
f.close()
end sub

sub infologs()
UO.Print('У вас всего '+Str(UO.Count('0x1BDD'))+' логов в сумке')
UO.Print('Из них '+Str(UO.Count('0x1BDD','0x0000'))+' простых и ' +str(uo.count('0x1BDD')-uo.count('0x1BDD','0x0000'))+' цветных')
end sub

sub OneClick()

dim reindex[8]
reindex[0] = 11
reindex[1] = 12
reindex[2] = 13
reindex[3] = 10
reindex[4] = 16
reindex[5] = 14
reindex[6] = 17
reindex[7] = 15
var GumpID = 0
var ButtonID = 0
var ButtonText
var i = 18

if uo.LastGump('text', 4) <> "0" then
i = 19
end if
GumpID = val(Mid(uo.LastGump('command', i), 16, 4))
ButtonID = reindex[GumpID-2225]
ButtonText = uo.LastGump('command', ButtonID)
uo.LClick(Val(Mid(ButtonText, 7, 3)), Val(Mid(ButtonText, 11, 3)))
wait(300)

end sub

sub AntiMacro()

while not uo.Dead()
if not uo.LastGump('replyed') then
if uo.LastGump('text', 0) == 'Antimacros System' then
OneClick()
end if
endif
wait(500)
wend

end sub

sub ExtrimalRecall()
var rune='0x400C5998'
  uo.Usetype('0x0F08','0x07F2') ; Invisibility
  wait(100)
  uo.waittargetobject(Rune)
  uo.Usetype('0x1F4C','0x0000') ;Recall
end sub

sub Gong(times) ; play wav-file
   VAR i
   for i=1 to times
      UO.Exec("playwav d:\Alert")
      wait(1200) ; time to play sample at once
   next
end sub


sub Alarm()
   VAR CharHP=150
   while 1==1
      wait(1000)
      if UO.Life<136 then
         gong(1)
      endif     
   wend
end sub



##############################################################
### ВНИМАНИЕ!!! В СКРИПТЕ РУНБУКИ НАСТРОЕНЫ ПОД DRW (шард) ###
##############################################################
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Помогите подправить

Post by Mirage »

1) Если расставить отступы (моя подпись 2 строка) то видно что в процедуре ToRecall() ошибка в циклах - не закрыт repeat. => скрипт рано или поздно крашнет.
2) то что ты спрашиваешь по всей видимости находится вот тут:

Code: Select all

   sub WaitForChange()
      var Text1=uo.getname()+': You hack at the tree for a while, but fail to produce any useable wood.'
      var Text2='There are no logs here to chop.'
      var Text3="You can't reach this."
      var Text4="no logs left here"
      var mess
      for var i=0 to 200
         mess=uo.journal(0)
         if uo.Journal(0)==Text2 OR uo.Journal(0)==Text3 OR uo.Journal(0)==Text4 then
            return 1
         end if
         if uo.Journal(0)==Text1 then
            return 0
         end if
         if mess[0]=='Y' AND mess[1]=='o' AND mess[2]=='u' AND mess[4]=='p' AND mess[5]=='u' AND mess[6]=='t' then
            return 0
         end if
         wait(50)
      next
      return 0
   end sub

Хотя в принципе достаточно было заменить var Text2='There are no logs here to chop.'
3) Я не пользуюсь такими скриптами так что чисто мое имхо - фразы нафиг не надо делать полными с регистром и знаками препинания. Админко шарда убирает точку из фразы и твой скрипт машет тебе лапкой умирая на цикле.
4) Мне больше нравится вот такой вариант:

Code: Select all

##################################################################
###   Лесоруб                                                  ###
##################################################################
sub LumderStat()
   var X, Y, LastTimer, MaxRange = 3, MaxVes = 620, k
   var allmsg ='древесина кончилась|дрова|Logs|положили|nothing|ou put|ударили по дереву|ou hack at the tree|ут нечего рубить|no logs|ы не можете до этого достать|ou can|reach this|ерево слишком далеко|hat is too far away|do much|то кажется свободным для вашего удара|t appears immune to your blow|атакует'
   var endmsg ='древесина кончилась|ут нечего рубить|nothing|no logs|ou can|ы не можете до этого достать|ерево слишком далеко|too far away|свободным для вашего удара'
   VAR axe1 = '0x0F43'
   VAR axe2 = '0x0F44'
   for Y = -MaxRange to MaxRange
      for X = -MaxRange to MaxRange
         if Tree(UO.GetX()+X, UO.GetY()+Y) then
            repeat
               UO.Set('quiet','0')
               UO.DeleteJournal()
               k = 0
               UO.Warmode(0)
               wait(100)
               UO.WaitTargetTile(Tree(UO.GetX()+X, UO.GetY()+Y), UO.GetX()+X, UO.GetY()+Y, UO.GetZ())
               ;ToHide()
               ;********************************
               if UO.Count(axe1) || UO.Count(axe2) then
                  if UO.Count(axe1) then
                     UO.UseType(axe1); <-- Топор
                  else
                     UO.UseType(axe2); <-- Топор
                  endif
               else
                  UO.Set('quiet','0')
                  UO.Print('А топора то нет!')
                  return
               endif
               ;********************************
               k=k+1
               LastTimer=UO.Timer()
               repeat
                  wait(100)
               until UO.InJournal( allmsg ) || UO.Timer()>LastTimer+600 ; время надо настраивать относительно 1 удачного выруба = примерно 6 секунд.
               UO.Set('quiet','0')
               if k>10 then
                  UO.Print('Что-то крепкое попалось!')
                  return
               endif 
               If UO.Weight > MaxVes Then
                  UO.Print('Перегруз!22')
                  return 0
               endif
               If UO.Life < Uo.Str/10 then
                  UO.Print('А мы умираем!33')
                  return 0
               endif
            until UO.InJournal( endmsg )
         endif
      next
   next
   return 0
end sub
Sub Tree(X,Y)
   var i
   DIM  R[34]
   R[1] = 3274;
   R[2] = 3275;
   R[3] = 3276;
   R[4] = 3277;
   R[5] = 3280;
   R[6] = 3283;
   R[7] = 3286;
   R[8] = 3288;
   R[9] = 3290;
   R[10] = 3293;
   R[11] = 3296;
   R[12] = 3299;
   R[13] = 3302;
   R[14] = 3320;
   R[15] = 3323;
   R[16] = 3326;
   R[17] = 3329;
   R[18] = 3393;
   R[19] = 3394;
   R[20] = 3395;
   R[21] = 3396;
   R[22] = 3415;
   R[23] = 3416;
   R[24] = 3417;
   R[25] = 3418;
   R[26] = 3419;
   R[27] = 3438;
   R[28] = 3439;
   R[29] = 3440;
   R[30] = 3441;
   R[31] = 3442;
   R[32] = 3460;
   R[33] = 3461;
   R[34] = 3462;
   for i = 1 to 34
      if uo.privategettile( x, y, -1, R[i], R[i]) then
         return R[i]
      endif
   next
   return false
end sub

Это модуль вырубки всего до чего чар дотянется стоя на 1 месте. Если будет вокруд 15 стволов - запустив 1 раз эту процедуру вырубит все. Соответственно достаточно прописать координаты не СТВОЛОВ а точек перемещения между ними => файл сократиться раз в 5-7 и можно будет рубить даже те стволы которые игрок в принципе не видит (но не значит что их нет :roll: ). Ну и в конце концов мне в мой вариант удобнее вносить корректировки.

PS только не проси дать полный скрипт - его просто нет. :mrgreen:
son
Posts: 43
Joined: 2006-12-16 14:44:01

Re: Помогите подправить

Post by son »

Спасибо большое мой скрипт теперь не втупливает на месте,твой модуль буду тестить.СПАСИБО :D :D :D
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Помогите подправить

Post by ZeroDX »

А чем плох этот? С небольшой доработкой получается вполне приличный автопоиск.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Помогите подправить

Post by Mirage »

Ничем :)
Мой скрипт есть модификация под мои нужны по алгоритму Дестракшена. Я у него впервые заметил выноску сообщений в отдельную переменную. Просто чтото из его скрипта не нужно мне, чтото я добавил по своим потребностям.

Смысл в том что у нас с Дестракшеном используется всего 2 сообщения. В котором перечисляются все возможные варианты и в котором только конечные. В скрипте автора туча сообщений и с наскока не ясно где что и куда чтото вставлять.


PS в моем примере про МОЙ копирайт писать глупо - в нем собраны функции с 4-5 разных скриптов, притом что до пары я додумался сам, хотя в последствии обнаружил их на этом форуме :mrgreen:
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Помогите подправить

Post by ZeroDX »

Mirage wrote:
Смысл в том что у нас с Дестракшеном используется всего 2 сообщения. В котором перечисляются все возможные варианты и в котором только конечные. В скрипте автора туча сообщений и с наскока не ясно где что и куда чтото вставлять.


Я тоже подсмотрел это у дестракшена, и это мне очень понравилось. Ещё нравится заменять большие массивы длинными строками + GetWord(). Вот например кусок из мининга по координатам:

Code: Select all

Sub Mining()
  var a, Coor = '2559 496 2560 491 2560 487 2564 484 2565 479 2568 476 2573 476 2578 476 2579 481 2578 485 2573 485 2574 481 2569 481 2568 486 2571 489 2570 489 2565 489 2564 493 '
  While true
    For a = 1 to 18
      Walker(val(GetWord(Coor, (a * 2) - 1)), val(GetWord(Coor, a * 2)), 0)
      Wait(100)
      Mining_Around()
    Next
    Wait(1000 * 60 * 15)
  Wend
Endsub

Это не плохо укорачивает скрипт, и колёсико мышки можно меньше крутить =)

Про копирайты не понял, к чему это?)
Post Reply