написал скрипт, но работает нестабильно =(

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
imsohigh
Posts: 27
Joined: 2007-08-09 12:51:12

написал скрипт, но работает нестабильно =(

Post by imsohigh »

Вобщем написал скрипт, который при загрузке отыскивает всех существ человеческого типа в радиусе 50 тайлов, проверяет их на наличие "друзей" и автоматически физлит "врагам" парализ и флеймстрайк. Бывает работает как часы, а бывает кастуют, а он 0 реакции.

Знаю что вам не охота ломать голову и заморачиваться этим скриптом, так как он не из простых, но, тем не менее, если не трудно помогите чем можете =)
sub auto_fizzle()
var i,j,k,m,t,r
var undefined_name,undefined_enemy
DIM Friend[6]
DIM NamEnemy[10]
DIM SerEnemy[10]
DIM Ecount[10]

Friend[1]='SpaceY' ### friends list. names only.
Friend[2]='undefined2'
Friend[3]='undefined3'
Friend[4]='undefined4'
Friend[5]='undefined5'
Friend[6]='undefined6'

uo.deletejournal()
UO.Set('lasttarget','laststatus')

uo.set('finddistance','50') ##### задаём finddistance
for i = 1 to 10
uo.findtype('0x0190','ground','ground')
if uo.getserial('finditem')==SerEnemy[i] then
wait(20)
SerEnemy[i]="undefined_enemy"
NamEnemy[i]="undefined_enemy"
else
SerEnemy[i]=uo.getserial('finditem')
NamEnemy[i]=uo.getname('finditem')
UO.Ignore('finditem')
wait(20)
endif
next
UO.IgnoreReset()

for i = 1 to 10
if SerEnemy[i] == '0x00000000' then
SerEnemy[i]="undefined_enemy"
NamEnemy[i]="undefined_name"
else
uo.print(" ")
uo.print("Char1: "+NamEnemy[i]) ##### выводим результат поиска
wait(10)
endif
next

uo.deletejournal()
while uo.mana>10 ###### непосредственно каст
if uo.injournal('An Ex') or uo.injournal('Kal Vas') then
r=0
m=10
if uo.injournal(Friend[1]) or uo.injournal(Friend[2]) or uo.injournal(Friend[3]) or uo.injournal(Friend[4]) or uo.injournal(Friend[5]) then
wait(100)
uo.deletejournal()
else
for Ecount = 1 to 10
if uo.injournal(NamEnemy[Ecount]) then
uo.waittargetobject(SerEnemy[Ecount])
uo.cast('Feeblemind')
uo.print("Targeting to Enemy")
wait(100)
uo.deletejournal()
for t = 0 to 5
if uo.injournal('The spell') or uo.injournal('in line') or uo.injournal('You can') then ##### если наш каст сфизлился или не удалось пустить
wait(500)
uo.waittargetobject(SerEnemy[Ecount])
uo.cast('Feeblemind')
m=5-r
uo.print('Targeting ones more...')
wait(100)
uo.deletejournal()
for j = 0 to m
wait(260)
next
endif
wait(260)
r=r+1
next
endif
next
wait(50)
endif
endif
wait(50)
wend
end sub
volhram
Posts: 95
Joined: 2004-10-19 16:25:45

Post by volhram »

ну во первых ты ищешь только 0х0190.....а нужно ещё искать и 0х0191, есть женские и мужские чары)
и что то я не уверен по поводу uo.findtype('0x0190','ground','ground')
ты параметр цвета указал гроунд, может инжекту и пофиг но обычно ставят '-1', дальше не разбирался...
если правда, что иногда работает, то вероятно проблема именно в том, что ты не ищешь 0х0191...
imsohigh
Posts: 27
Joined: 2007-08-09 12:51:12

Post by imsohigh »

совсем забыл про это! =) спасибо, буду пробовать =)
ADEPT_ABP
Posts: 223
Joined: 2006-05-12 08:03:45
Contact:

Мининг \ Mining

Post by ADEPT_ABP »

Мининг \ Mining. ХЗ какая версия. Реколится из шахты к дому, разгружается и летит в шахту.

ИСПРАВИЛ!!! Всем спасибо.(случайно наткнулся на сей пост, гы-гы-гы)

Code: Select all

#############################################
## переменные :) ################################
#############################################
var a, Iy, Ix, x, y, kirka, mana, box1, box2, box3, OreBox, HiOreBox, bandagec
box1 = '0x40161FCB'
box2 = '0x4027E94D'
box3 = '0x400AAF6E'
OreBox = '0x401B795D'
HiOreBox = '0x402A3069'
bandagec = '0x0E21'
var idrunehome, RuneHome, idruneShaxta
idruneShaxta = '0x4008FD64'      ;0x404E086D
RuneHome = '0x1F14'
kirka = "0x0E85"

############################################
## Массив с регами (первые три для Recall) ##############
############################################

Sub mreg(reg)
reg[0] = "0x0F7A"       ;Black Pearls
reg[1] = "0x0F7B"       ;Blood Moss
reg[2] = "0x0F86"       ;Mandrake Roots
reg[3] = "0x0F84"      ;Garlic
reg[4] = "0x0F8C"      ;Sulfurous Ash
reg[5] = "0x0F8D"      ;Spider Silk
reg[6] = "0x0F88"      ;Nightshade
reg[7] = "0x0F85"      ;Ginseng
return reg
end sub

#############################################
## Тут в основном проверка на реги, кирку и бинты #########
#############################################

sub main()
dim reg[8]
reg = mreg(reg)
uo.set('finddistance', 5)
uo.findtype("0x0E75", -1, 1)
if not uo.findcount() then  ; если нет мешков, значит мы в шахте :)))
   mine()
end if
   uo.print("Проверим, что имеем:")
   if uo.count("0x19B7") or uo.count("0x19BA") or uo.count("0x19B8") or uo.count("0x19B9") then
   move()
   end if
   if uo.bp < 5 or uo.bm < 5 or uo.mr < 5 then
      uo.print("Регов мало. Будем добирать.")
   for a = 0 to 2
      MoveItem(reg[a], box1,20-uo.count(reg[a]), "Нет регов")
      wait(1000)
   next
   end if
   if uo.b < 20 then
      uo.print("Мало бинтов.")
      MoveItem(bandagec, box1, 50-uo.count(bandagec), "Нет бинтов")
      wait(1000)
   end if
   if not uo.count(kirka) then
      uo.print("Погодь! Кирку не взял.")
      MoveItem(kirka, box2, 1, "Нечем копать!")
   end if
wait(1000)
   if not uo.count(RuneHome) then
      uo.print("Стоять!!! Рунка под диван закатилась.")
      MoveItem(RuneHome, box1, 1, "Надо мартить рунки!")
   end if
   cast2()
end sub

######################################
## Собственно сама функция MoveItem ###########
######################################
Sub MoveItem(item, box, count, print)
   uo.useobject(box)
   wait(700)
   uo.findtype(item,-1,box)
   if uo.findcount() > 0 then
      uo.moveitem('finditem',count)
      wait(1000)
   else
      uo.print(print+ "Скрипт остановлен")
      uo.exec("terminate all")
   end if
end sub

##########################################
## Mining он и в Африке mining :) ###################
##########################################

sub mine()
uo.exec('exec autohide; exec FindMan')
wait(1500)
x = uo.getx()
y = uo.gety()
while UO.Weight < (uo.str*4)+20
    For Iy = y-5 to y+5
      For Ix = x-5 to x+5
      UO.DeleteJournal()
         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.")
            if not uo.hidden() then
              while not uo.injournal("You have hidden")
               wait(200)
              wend
            end if
             UO.WaitTargetTile(-1, Ix, Iy, uo.getz())
            uo.usetype(kirka)
      UO.DeleteJournal()
            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
            if UO.Weight > (uo.str*4)+20 then
               uo.exec('terminate all; exec cast')
            end if
         wend
     next
    next
wend
end sub

#############################################
## Recall домой #################################
#############################################

sub cast()
uo.findtype(RuneHome)
idrunehome = uo.getserial('finditem')
   if UO.mana > 20 then
      mana = uo.mana
      uo.cast("Recall",idrunehome)
uo.deletejournal()
          while mana == uo.mana
             wait(200)
          wend
   endif
if uo.injournal("The spell fizzle") then
cast()
endif
go()
end sub

#############################################
## Recall в шахту ################################
#############################################

sub cast2()
uo.useobject(box3)
uo.deletejournal()
   if UO.mana == uo.int then
      mana = uo.mana
 uo.cast("Recall", idruneShaxta)
          while mana == uo.mana
             wait(200)
          wend
    else
    med()
   endif
if uo.injournal("The spell fizzle") then
cast2()
endif
mine()
end sub

#############################################
## Зайти в дом #################################
#############################################

Sub go()
var f
for f = 0 to 8
uo.press(33)
next
uo.opendoor()
wait(1000)
uo.press(33)
wait(1000)
uo.opendoor()
for a = 0 to 4
uo.press(33)
next
wait(1000)
uo.press(33)
uo.press(33)
wait(1000)
move()
end sub

#############################################
## Выложить руду ################################
#############################################

sub move()
var e
dim a[4]
a[1] = 0x19B7
a[2] = 0x19BA
a[3] = 0x19B8
a[4] = 0x19B9
for e = 1 to 4
uo.findtype(a[e])
while uo.findcount() > 0
uo.moveitem('finditem', 0, OreBox, 50,0,50)
wait(700)
uo.findtype(a[e])
wend
next
moveHi()
wait(1000)
uo.press(35)
wait(200)
uo.press(35)
wait(2000)
cast2()
end sub

#############################################
## Переложить нормальную руду в другой мешок :) #########
#############################################

Sub moveHi()
var e, c
dim a[4],x[19]
a[1] = 0x19B7      ;1 ore
a[2] = 0x19BA      ;2 ore
a[3] = 0x19B8      ;3 ore
a[4] = 0x19B9      ;4 and more ore

x[1] = '0x09A4'      ;Cristaline ore
x[2] = '0x0085'      ;Dragon ore
x[3] = '0x09D3'      ;Steel ore
x[4] = '0x09E6'      ;Elvin ore
x[5] = '0x09F0'      ;Gorgan ore
x[6] = '0x008F'      ;Send rock ore
x[7] = '0x04C2'      ;Blood rock ore
x[8] = '0x09DA'      ;Vulcan ore
x[9] = '0x0028'      ;Obsidian ore
x[10] = '0x08AF'   ;Plutonium ore
x[11] = '0x09EC'   ;Blood crest ore
x[12] = '0x0455'   ;Black rock ore
x[13] = '0x010F'   ;Krynite ore
x[14] = '0x0BA7'   ;Eldar ore
x[15] = '0x00CE'   ;Valorite ore
x[16] = '0x052D'   ;Mitheril ore
x[17] = '0x07D5'   ;Verite ore
x[18] = '0x0060'   ;Aqua ore
x[19] = '0x09B9'   ;Acid ore
uo.useobject(OreBox)
for e = 1 to 4
for c = 1 to 19
uo.findtype(a[e],x[c],OreBox)
while uo.findcount() > 0
uo.moveitem('finditem',0,HiOreBox,50,0,50)
wait(700)
uo.findtype(a[e],x[c],OreBox)
wend
next
next
end sub

#############################################
## Медитация ###################################
#############################################

Sub med()
while uo.mana < uo.int
   UO.UseSkill("Meditation")
UO.DeleteJournal()
   while not uo.injournal("You are at peace") and not UO.InJournal("You lose")
      wait(200)
   wend
wend
cast2()
end sub

############################################
## АвтоХайд ###################################
############################################

Sub autohide()
 while not uo.dead()
  if not uo.hidden() then
   uo.exec("warmode 0")
   uo.useskill("Hiding")
  endif
      while not uo.injournal("You have been revealed|You can't seem")
         wait(100)
      wend
  uo.deletejournal()
 wend
uo.exec("terminate all")
end sub

#############################################
## Поиск чаров #################################
#############################################

sub FindMan()
var name
   UO.Set('finddistance', 20)
   UO.Ignore('self')
UO.FindType('0x0190', -1, 1) ;надо есчё 0х0191 впяхнуть
uo.click('finditem')
wait(500)
   name = uo.getname('finditem')
      uo.print(name)
      wait(1000)
while 1
      If UO.FindCount() > 0 Then
      uo.print(name)
        uo.exec("terminate all; exec cast")
      Else
         wait(500)
      UO.FindType( '0x0190', '-1', '1' )
      Endif
wend
endsub

#############################################
## Перед походом в Дестард ########################
#############################################

sub allregs()
dim reg[8]
reg = mreg(reg)
   for a = 0 to 7
      MoveItem(reg[a],box1,50-uo.count(reg[a]),"Нет регов")
   next
end sub

#############################################
## Ну... это всем известная полезность :)) ################
#############################################

sub DeleteJournal(msg)
   var nom=UO.InJournal(msg)
   if nom>0 then
      UO.SetJournalLine(Nom - 1," ----- 8< ----- ")
      DeleteJournal(msg)
   endif
endsub


Исправить-то исправил, но не тестил. :)
Last edited by ADEPT_ABP on 2009-02-05 16:12:46, edited 4 times in total.
Играю на drw.ru
Использую инжект 505.18 VeNd0r
Начинающий скриптер.
Rivory
Posts: 205
Joined: 2005-01-06 11:49:28

Post by Rivory »

ну например тут

Code: Select all

Sub mreg(reg) 
reg[1] = "0x0F7A"       ;Black Pearls
reg[2] = "0x0F7B"       ;Blood Moss
reg[3] = "0x0F86"       ;Mandrake Roots
reg[4] = "0x0F84"      ;Garlic
reg[5] = "0x0F8C"      ;Sulfurous Ash
reg[6] = "0x0F8D"      ;Spider Silk
reg[7] = "0x0F88"      ;Nightshade
reg[8] = "0x0F85"      ;Ginseng
return reg
end sub
не обьявляется массив dim reg[9] дальше наверное то же самое.. не смотрел
ADEPT_ABP
Posts: 223
Joined: 2006-05-12 08:03:45
Contact:

Post by ADEPT_ABP »

Тоесть если я создал "Sub-массив" из восьми переменных, то мне надо обязательно ставить dim reg[8], а не dim reg[3]? Хмм... Буду знать. :D
Хотя я так и не понял как действует "Sub-массив". И что такое Return(... возвратить? А чего? Куда?)? :oops:
Играю на drw.ru
Использую инжект 505.18 VeNd0r
Начинающий скриптер.
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

в moveHi() есть лишний endif

Code: Select all

sub allregs() 
dim reg[8]
reg = mreg(reg)
   for a = 1 to 8
      MoveItem(reg[a],box1,50-uo.count(reg[a]),"Нет регов")
   next
end sub


Масивы могут передаватся в функцию, причем передается не копия а сам масив, то есть изменения проводимые в нутри функции будут отражатся на масиве.

Функции не умеют возвращять масивы, их можно только передавать.
reg = mreg(reg) -> mreg(reg)

Масив может быть объявлен на 8 элементов и возможно обращение к "8" элементу (reg[8]), все масивы объевляются на 1 элемент больше чем у казывается (реализовано в самом скриптовом модуле, скорее всего "защита от дурака"), но надо стремится к нормальному пониманию происходящего и все таки объевлять как пологается.

Code: Select all

sub main() 
   dim reg[3] #масив объевляется на 3 жлемента (0, 1, 2) в реальности на 4 (0, 1, 2, 3), но в функцию передается где инициализируется в плодь до "8" элемента (в реальности 9-ый), массив должен быть объявлен (по хорошему) dim reg[9]
   reg = mreg(reg) #см выше
   ...
end sub

Sub mreg(reg)
reg[1] = "0x0F7A"       ;Black Pearls
reg[2] = "0x0F7B"       ;Blood Moss
reg[3] = "0x0F86"       ;Mandrake Roots
reg[4] = "0x0F84"      ;Garlic
reg[5] = "0x0F8C"      ;Sulfurous Ash
reg[6] = "0x0F8D"      ;Spider Silk
reg[7] = "0x0F88"      ;Nightshade
reg[8] = "0x0F85"      ;Ginseng
return reg #не допускается массив не может быть возвращен
end sub
ADEPT_ABP
Posts: 223
Joined: 2006-05-12 08:03:45
Contact:

Post by ADEPT_ABP »

Просмотришь свои старые посты, и столько нового узнаешь... :wink:
Играю на drw.ru
Использую инжект 505.18 VeNd0r
Начинающий скриптер.
ADEPT_ABP
Posts: 223
Joined: 2006-05-12 08:03:45
Contact:

Мининг \ Mining

Post by ADEPT_ABP »

Люди, я уже не понимаю чего написал... помогите!!!

Поравил пост. Удалил ходилку что бы пост был поменьше.

По идее копает в шахте Минока. Если увидит злыдня или наберёт макс-вес:
  1. бежит в портал(портал в шахте переносит к банку в Брите)
  2. открывает банк,
  3. ищет там мешок с регами (по типу),
  4. ищет руну домой(по типу),
  5. Реколится по руне
  6. если сфизлит, то повторяет каст(тут проблема была\есть иногда он сфизлит но не повторяет).
Появившись у дома, он
  1. ищет закрытую калитку(по типу)
  2. если находит - открывает,
  3. заходит за забор - закрывает
  4. ищет закрытую калитку
  5. если находит идёт к двери в дом, иначе закрывает
  6. подойдя к двери в дом опять ищет закрытую дверь(по типу)
  7. находит - открывает
  8. заходит в дом
  9. закрывает дверь
  10. ищет закрытую дверь по типу
  11. Не находит закрывает
Открывает Сундук Крафта(CraftChest)
  1. открывает пак для руды
  2. скидывает руду
  3. открывает пак для "выхи"
  4. перекидывает "выху" из пака для руды в пак для "выхи"
Открывает Сундук Мага(MageChest)
  1. ищет мешок с регами
  2. открывает мешок, берёт реги
  3. реколится по найденой руне в шахту
  4. перезапускает скрипт.
И ..., гад, видит того, от кого убежал разгружаться. Хотя его уже нет в "поле зрения". :)
Это переменные

Code: Select all

################################################################
### Переменные #################################################
################################################################
###
### Для начала подготовится, положить в банк мешок(bag) и такой же в MageChest
### В мешки положить реги рекола Black Pearl, Mandrake Root, Blood Moss
### Самое главное выяснить Серийник банка!!!
### В банк положить руны к дому(одного типа!!! Тип рун в банке и в MageChest должны совпадать!!!)
### Положить в MageChest Руны в шахту(одного типа)
###
################################################################
################################################################
################################################################

var kirka, a, name, run, open, MageChest
var myXX, myYY, p
p=1

var x, y, coord
var MCave='2558,501-2578,476'      ; диапозон координат пещеры
var BankBrit='1446,1702-1421,1671'   ; диапозон координат Банка в Брите
var Home='1829,786-1843,800'      ; диапозон координат Дома

var kalitka='0x0847'    ; Тип закрытой калитки
var door='0x06A5'      ; тип закрытой двери в дом

var OreBox, bag, bankbox, rune, CraftChest
var bagreg, chest
bag='0x0E76'            ;тип мешка с регами
bankbox=' '      ;Id банка (для того, что бы узнать ID банка, командой ",info" -
                     ;- на любой предмет и скопировать из полученной

информации -
                     ;- значение C= -> 0x40156896 <-
 
rune='0x1F14'         ; Тип руны может быть 2-х типов
                  ; '0x1F14' и '0x1F15'

CraftChest=' '      ; Сундук Крафта с паками под руду и инготы

MageChest=' '      ; Сундуг Мага с паками и мешком-с-регами для Рекола

kirka = "0x0E85"       ;Тип кирки. 2 вида может "0x0E85" и "0x0E86"

OreBox = " "      ;Контейнер для руды

var text1, text2

text1="There is no ore|You have no line|That is to far away|You can't think|You have no line of|too far

away|mining in rock."

text2="You put the|You loosen some|You can't think|That is to far away|There is no ore|You have no line

of|too far away|mining in rock."

run=118            ; Код клавиши с биндом "AlwesRun"
open=121         ; Код клавиши с биндом "OpenDoor"


Функция запуска( в шахте Минока )

Code: Select all

################################################################
###Функция Main ##########################################
################################################################
sub main()
  uo.exec("exec ressurect")
  uo.exec("exec FindMan")
  uo.exec("exec mine")
end sub


Функция копки

Code: Select all

################################################################
### Функция mine ############################################
################################################################
sub mine()      ; Копание
  uo.ignorereset()
  walker(2571,479,1)
  var pause=0
  myXX=uo.getX(); запоминает место откуда начал копать
  myYY=uo.getY();
  var PX, PY, PZ, IX, IY
  PX = UO.GetX()
  PY = UO.GetY()
  PZ = UO.GetZ()
  while UO.Weight <= uo.str*4
    For Iy=-4 to 4
      For Ix=-4 to 4
        uo.deletejournal()
        while not UO.InJournal(text1) && UO.Weight <= uo.str*4
          if p==1 then
            if not uo.hidden() then
              InJournal('You have hidden',60)
            endif
          endif
          UO.WaitTargetTile(-1,Str(PX+Ix),Str(PY+Iy),Str(PZ))
          uo.usetype(kirka)
          InJournal(text2,0)
          if uo.injournal('You loosen some') then
            pause=pause+1
            if pause>4 then
              wait(10000)
              pause=0
            endif
          else
            pause=0
          endif
        endif
        wait(200)
      wend
    next
    wait(200)
  next
  wait(200)
wend
GoBrit()
end sub


Функция поиска злыдней и нерабочий хайд

Code: Select all

################################################################
### Функция FindMan ########################################
################################################################
Sub FindMan()
uo.ignorereset()
### ID друзей для игнора при поиске ПК и Криминал
var Charon='0x00324C05'
var Buiok='0x000C430F'
var friend3='0x001EEB63'
uo.set('finddistance','20')
var serial, a, b
b=4
uo.ignore('0x00324C05')
uo.ignore('0x000C430F')
uo.ignore('0x001EEB63')
uo.ignore('self')
repeat
 uo.forget('finditem')
    if UO.InJournal("You have been revealed|You can't seem") then
      p=1
      DelTextInJournal("You have been revealed|You can't seem")
      uo.showjournal(20)
    endif
  if p==1 then
     p=0
      if not uo.hidden() then
        uo.warmode(0)
        uo.useskill("Hiding")
      endif
  else
    uo.findman(b)
    wait(500)
    if uo.findcount()>0 || uo.injournal('attacking you') then
      uo.print('ATAC')
      uo.print(uo.getname('finditem')+' '+str(uo.getdistance('finditem')))
      uo.forget('finditem')
      uo.exec('terminate all; exec GoBrit')
    endif
    wait(100)
  endif
  if b==4 then
    b=6
   else
    b=4
  endif
until uo.dead()
end sub


Функция побега в Брит

Code: Select all

################################################################
### Функция GoBrit ############################################
################################################################
Sub GoBrit()
uo.exec('terminate mine')
uo.press(run)
wait(50)
uo.press(34)
 if uo.getrun()==0 then
  uo.press(run)
 endif
walker(2581,480,0)
wait(50)
uo.press(35)
wait(50)
uo.press(35)
wait(50)
uo.press(run)
uo.press(35)
wait(50)
 if uo.getrun()==1 then
  uo.press(run)
 endif
walker(1433,1693,1)
wait(5000)
coord=GetXY('self')
if ComXY(BankBrit,coord)==true then
uo.exec('terminate FindMan; exec GoHome')
else
GoBrit()
endif
end sub


Функция состоящая из функций описаных ниже.

Code: Select all

sub GoHome()
OpenChest()
wait(1000)
GotoHomeT()
move()
wait(5000)
OpenChest()
wait(2000)
uo.exec('terminate all; exec main')
end sub


Функция открытия сундука.

Code: Select all

################################################################
### Функция OpenChest #########################################
################################################################
sub OpenChest()
uo.findtype('0x0E42',-1,'ground')
if uo.findcount()>0 then
  uo.useobject(MageChest)
  chest=MageChest
else
  uo.sayu(' bank ')
  chest=bankbox
endif
wait(1000)
CheckLag()
uo.findtype(bag,-1,chest)
bagreg=uo.getserial('finditem')
uo.useobject(bagreg)
wait(1000)
CheckLag()
FindRune(chest)
end sub


Функция поиска руны в открытом сундуке.

Code: Select all

################################################################
### Функция FindRune ##########################################
################################################################
sub FindRune(b)
var idrune
uo.findtype(rune,-1,b)
idrune=uo.getserial('finditem')
Cast(idrune)
end sub


Функция рекола по найденой руне

Code: Select all

################################################################
### Функция Cast(rune) ############################################
################################################################
Sub Cast(rune)
var a
coord=GetXY('self')
if ComXY(Home,coord)==true then
  a=true
 else
  a=false
endif
MoveReg(bagreg)
var mana
if uo.bm>0 && uo.bp>0 && uo.mr>0 then
cast:
  if uo.mana < 20 then
    med()
    wait(2000)
    goto cast
  endif
    mana=uo.mana
    uo.cast('Recall',rune)
    DelTextInJournal("fizzle")
    while mana <= uo.mana
      wait(200)
    wend
    if ComXY(MCave,coord)==false then
     if ComXY(Home,coord)==a then
     wait(1000)
     CheckLag()
     if uo.injournal("fizzle") then
      MoveReg(bagreg)
      goto cast
     endif
      wait(200)
     endif
    endif
else
  uo.print('Stop')
  uo.closeuo()
endif
wait(1000)
end sub


Функция добора регов на рекол

Code: Select all

################################################################
### Функция Move reg ##########################################
################################################################
sub MoveReg(id)
uo.print('Move Reagents')
wait(1000)
var a
dim reg[3]
reg[0] = "0x0F7A"       ;Black Pearls
reg[1] = "0x0F7B"       ;Blood Moss
reg[2] = "0x0F86"       ;Mandrake Roots

for a=0 to 2
  if uo.count(reg[a])<1 then
    uo.findtype(reg[a],-1,id)
    uo.moveitem('finditem',1,'backpack')
    wait(500)
    CheckLag()
  endif
next
wait(1000)
end sub


Функция медитации.

Code: Select all

################################################################
### Функция meditation #######################################
################################################################
sub med()
uo.print('Meditation')
while uo.mana < uo.int
  UO.UseSkill("Meditation")
  injournal("You are at peace|You lose your concentration",60)
wend
end sub


Функция зайти домой

Code: Select all

################################################################
### Функция Goto Home #########################################
################################################################
sub GotoHomeT()
  uo.set('finddistance',4)
  uo.print('Go to Home')
  if type(kalitka)==true then
    uo.press(open)
    CheckLag()
  else
    wait(200)
  endif
 walker(1831,797,0)
  uo.press(open)
  CheckLag()
  if type(kalitka)==false then
 walker(1831,798,0)
    uo.press(open)
    CheckLag()
  endif
  wait(200)
 walker(1836,798,0)
  if type(door)==true then
    uo.press(open)
    CheckLag()
  else
    wait(200)
  endif
 walker(1836,794,0)
  uo.press(open)
  CheckLag()
  wait(500)
  if type(door)==false then
    uo.press(open)
    CheckLag()
  else
    wait(200)
  endif
  CheckLag()
end sub

Sub type(tip)
uo.findtype(tip,-1,'ground')
if uo.findcount()>0 then
  return true
else
  return false
endif
end sub


Функции выкладывания руды

Code: Select all

################################################################
### Функция MoveOre ##########################################
################################################################
sub move()
uo.useobject(CraftChest)
CheckLag()
uo.print('MOVEORE()')
wait(2000)
var e
dim a[4]
a[0] = 0x19B7
a[1] = 0x19BA
a[2] = 0x19B8
a[3] = 0x19B9
uo.useobject(OreBox)
CheckLag()
for e = 0 to 3
  repeat
    uo.findtype(a[e],-1,'backpack')
    uo.moveitem('finditem',0,OreBox)
    wait(900)
    CheckLag()
  until uo.findcount()==0
next
wait(1000)
MoveHi()
end sub

Sub MoveHi()
var e, c

dim a[4],x[19]
a[0] = 0x19B9      ;4 and more ore
a[1] = 0x19B7      ;1 ore
a[2] = 0x19BA      ;2 ore
a[3] = 0x19B8      ;3 ore

x[0] = '0x09B9'      ;Acid ore
x[1] = '0x09A4'      ;Cristaline ore
x[2] = '0x0085'      ;Dragon ore
x[3] = '0x09D3'      ;Steel ore
x[4] = '0x09E6'      ;Elvin ore
x[5] = '0x09F0'      ;Gorgan ore
x[6] = '0x008F'      ;Send rock ore
x[7] = '0x04C2'      ;Blood rock ore
x[8] = '0x09DA'      ;Vulcan ore
x[9] = '0x0028'      ;Obsidian ore
x[10] = '0x08AF'   ;Plutonium ore
x[11] = '0x09EC'   ;Blood crest ore
x[12] = '0x0455'   ;Black rock ore
x[13] = '0x010F'   ;Krynite ore
x[14] = '0x0BA7'   ;Eldar ore
x[15] = '0x00CE'   ;Valorite ore
x[16] = '0x052D'   ;Mitheril ore
x[17] = '0x07D5'   ;Verite ore
x[18] = '0x0060'   ;Aqua ore
uo.useobject(HiOreBox)
wait(700)
CheckLag()
for e=0 to 3
  for c=0 to 18
    repeat
        uo.findtype(a[e],x[c],OreBox)
      if uo.findcount()>0 then
        uo.moveitem('finditem',0,HiOreBox)
        CheckLag()
        wait(400)
      endif
      wait(100)
    until uo.findcount()==0
  next
next
end sub


Возрождение

Code: Select all

sub ressurect()
repeat
  ; ©dark_kynep
  if UO.Life < 1 then
    uo.exec('terminate mine')
    uo.exec('terminate FindMan')
    uo.useobject('self')
    CheckLag()
    uo.warmode(0)
    UO.LClick(1243,51)
    CheckLag()
    wait(1000)
    UO.LClick(264,305)
    CheckLag()
    wait(1000)
    UO.LClick(177,203)
    CheckLag()
    wait(1000)
    walker(2468,531,1)
    uo.useobject('0x4001D120')
    CheckLag()
    walker(2466,542,0)
    CheckLag()
    walker(2506,542,0)
    Alive()
  else
    wait(1000)
    ; UO.Print("You are Alive!!!")
  endif
until uo.dead()
end sub


Действия после возрождения

Code: Select all

Sub Alive()
OpenChest()
GotoHomeT()
Heal()
OpenChest()
uo.exec('terminate all; exec main')
end sub

sub Heal()
uo.useobject('0x4023D30F')
CheckLag()
wait(500)
uo.findtype('0x0E21',-1,'0x4023D30F')
uo.moveitem('finditem',10,'backpack',10,10,0)
CheckLag()
wait(500)
repeat
  uo.bandageself()
  wait(5000)
until uo.life==uo.str
wait(500)
uo.useobject(CraftChest)
CheckLag()
wait(500)
uo.findtype(kirka,-1,CraftChest)
uo.moveitem('finditem',1,'backpack',100,10,0)
CheckLag()
wait(500)
end sub



Прочии функции

Code: Select all

################################################################
### Функция паузы по проверке журнала или таймера ########
################################################################
Sub InJournal(t,time)
;uo.print('EXEC INJOURNAL(T,TIME)')
var timer=uo.timer()
DelTextInJournal(t)
if time==0 then
  ;uo.print('TIME==0')
  while not uo.InJournal(t)
    wait(200)
  wend
else
  ;uo.print('TIME<>0')
  while not uo.InJournal(t) && uo.timer()<timer+time
    wait(200)
  wend
endif
end sub

################################################################
### Функция удаления из журнала Текста ########################
################################################################
Sub DelTextInJournal(msg) ; msg это параметр, см. выше как его передают
var nom=UO.InJournal(msg) ; ищем сообщение и в переменную его
if nom>0 then
  UO.SetJournalLine(Nom - 1," ") ; подменим сообщение
  DelTextInJournal(msg) ; вызов функцией самой себя, рекурсия
endif
end sub

################################################################
### Функция отклик сервера ###############################
################################################################
Sub CheckLag()
DelTextInJournal("backpack") ; вытрим ТОЛЬКО нужные нам сообщения в журнале
UO.Click('backpack') ; одиночный клик по вашему backpack
InJournal("backpack",0)
end sub

################################################################
### Функция World save now ####################################
################################################################
Sub ws()
if uo.injournal("World is saving now...") then
  InJournal("World data saving",1800)
endif
end sub


#### Тут должна бытьХодилка !!!

Функция получения своих координат и функция сравнения с нужным диапозоном координат

Code: Select all

Sub GetXY(man)
var xy
x=uo.getx(man)
y=uo.gety(man)
xy=str(x)+','+str(y)
return xy
end sub

Sub ComXY(coordinate,coord)
var myx, myy, x1, y1, L, pref, minx, maxx, miny, maxy
L=len(coordinate)
uo.print('Длина строки = '+str(L))
wait(100)
 x1=XY(coordinate,'-',0)
uo.print('Координаты а: '+x1)
wait(100)
 y1=XY(coordinate,'-',1)
uo.print('Координаты б: '+y1)
wait(100)
 minx=XY(x1,',',0)
uo.print('Координата minx: '+minx)
wait(100)
 miny=XY(x1,',',1)
uo.print('Координата miny: '+miny)
wait(100)
 maxx=XY(y1,',',0)
uo.print('Координата maxx: '+maxx)
wait(100)
 maxy=XY(y1,',',1)
uo.print('Координата maxy: '+maxy)
wait(100)
 myx=XY(coord,',',0)
uo.print('Координата myx: '+myx)
wait(1000)
 myy=XY(coord,',',1)
uo.print('Координата myy: '+myy)
 if minx>maxx then
   x=minx
uo.print('X1=MinX='+x1)
wait(100)
   minx=maxx
uo.print('MinX=MaxX='+minx)
wait(100)
   maxx=x
uo.print('maxx=x1='+minx)
wait(100)
 endif
 if miny>maxy then
   y=miny
uo.print('Y1=MinY='+y)
wait(100)
   miny=maxy
uo.print('MinY=MaxY='+miny)
wait(100)
   maxy=y
uo.print('maxy=y1='+maxy)
wait(100)
 endif
 wait(100)
 if myx>minx && myx<maxx && myy>miny && myy<maxy then
   return true
  else
   return false
 endif
end sub

Sub XY(con,d,c)
var pref, L, z
 L=len(con)

 for pref=0 to L
  if con[pref]==d then
   if c==0 then
     z=left(con,pref)
   endif
   wait(50)
   if c==1 then
     z=right(con,L-pref-1)
   endif
  endif
 next
return z
end sub
Last edited by ADEPT_ABP on 2009-02-06 14:51:02, edited 9 times in total.
Играю на drw.ru
Использую инжект 505.18 VeNd0r
Начинающий скриптер.
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

Перед тем как смыться от злыдня, запомни его ID, после того как убежал и злыдня уже не видать на горизонте удали его ID коммандой: UO.Forget(idPK)
ADEPT_ABP
Posts: 223
Joined: 2006-05-12 08:03:45
Contact:

Post by ADEPT_ABP »

GAUHAR wrote:Перед тем как смыться от злыдня, запомни его ID, после того как убежал и злыдня уже не видать на горизонте удали его ID коммандой: UO.Forget(idPK)


Я пост поменял, сделал меньше строк в функции поиска злыдней.
Вот как это выглядело, и там как раз и сделано, "взять серийник злыдня и забыть его". :)

Code: Select all

################################################################
### Функция FindMan ########################################
################################################################
Sub FindMan()
uo.set('finddistance','20')
var serial
uo.ignorereset()
uo.ignore('self')
if p==1 then
  uo.warmode(0)
  uo.useskill("Hiding")
endif
repeat
  if p==1 then
    if UO.InJournal("You have been revealed|You can't seem") then
      DelTextInJournal("You have been revealed|You can't seem")
      if not uo.hidden() then
        uo.warmode(0)
        uo.useskill("Hiding")
      endif
    endif
  else
    uo.findman(4)
    wait(500)
    if uo.findcount()>0 || uo.injournal('attacking you') then
      uo.print('ATAC')
      uo.print(uo.getname('finditem')+' '+str(uo.getdistance('finditem')))
      serial=uo.getserial('finditem')
      uo.forget(serial)
      GoBrit()
      uo.ignorereset()
      uo.ignore('self')
    endif
    uo.findman(6)
    wait(500)
    if uo.findcount()>0 || uo.injournal('attacking you') then
      uo.print('ATAC')
      uo.print(uo.getname('finditem')+' '+str(uo.getdistance('finditem')))
      serial=uo.getserial('finditem')
      uo.forget(serial)
      GoBrit()
      uo.ignorereset()
      uo.ignore('self')
    endif
    wait(100)
  endif
until uo.dead()
end sub
Играю на drw.ru
Использую инжект 505.18 VeNd0r
Начинающий скриптер.
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

Прости, но ты не внимательно прочитал мой пост. Попробуй сделать так:

Code: Select all

serial=uo.getserial('finditem') 
GoBrit()
uo.forget(serial)

Дело в том что пока ты бежищь в Брит, ПК тоже не стоит на месте, хоть ты и не используешь поиск, инжа его уже увидела и запомнила (вот если бы ПК стоял на месте, то все было бы в порядке), соответственно удалять ID движущегося объекта надо тогда когда ты находишься на большом растоянии от него.
ADEPT_ABP
Posts: 223
Joined: 2006-05-12 08:03:45
Contact:

Post by ADEPT_ABP »

А ну я уже понял. :) Просто я действительно невнимателен, но тут так не пойдёт, так как GoBrit обрубает работу всех функций и он не доходит до ForGet . Это я потом так сделал, а вот этот ForGet забыл убрать. Переделал ещё раз поиск злыдней поправил хайд. Вроде пашет. :)
Играю на drw.ru
Использую инжект 505.18 VeNd0r
Начинающий скриптер.
ADEPT_ABP
Posts: 223
Joined: 2006-05-12 08:03:45
Contact:

Мининг \ Mining

Post by ADEPT_ABP »

Поправил: добор регов и ... так и НЕ научил забывать злыдней. :) Вроде всё пока...
Играю на drw.ru
Использую инжект 505.18 VeNd0r
Начинающий скриптер.
Post Reply