Page 1 of 3

Autoloot, Autoheal, FastRecall

Posted: 2005-04-24 09:55:34
by Beyonder
В общем я здесь новенький, инжектом пользуюсь около 2-ух недель но решил выложить пару своих скриптов.
I'm new in here, using Injection for only 2 weeks, but still considered to put few of my scripts here.

1) Автолут.
Скрипт умеет:
+ Лутить все трупы на определенном расстоянии до персонажа
+ Лутить подсумки и их подсумки и т.д.
+ Отбор сделан не через поиск каждого вида вещи (которых может быть за 100) а через отбор существующих вещей, что ускоряет процесс лута.
+ Подбираемые вещи сделаны вида от ID до ID, тоесть если все вещи с началом 0x1FF вам нужны, то хватает указать от 0x1FF до 0x1FFF.
+ Также лутит вещи на земле. Лут на земле долго работает при большом количестве окружающих обьектов. Лут оптимизирован под трупы.

1) Autoloot
Script can:
+ Loot all corpses around
+ Loot containers
+ Searching for items is made not by searching every item, but by checking ID's of excisting items that makes it faster to loot.
+ The way of selecting needed items is made as selecting bounds FromID and ToID and every item between this ID's will be taken.
+ Script can also loot on the ground. It is little slow when there is a lot of items there, but it was optimized for corpses


Code: Select all

##################################
### AutoLoot v 3.1 by Beyonder ###
##################################

###Запускать auto_loot()
###Run the function auto_loot()

### Нужна любая функция CheckLag()
### Any CheckLag() function is needed for script

# Время достаточное для открытия контейнера
# Time enough for container to open
var OpenContWait=300
# Время между лутом вещей
# Delay after looting each item
var LootItemWait=300

### Основная функция лута # ContainerID - ID контейнера # BagID - ID мешка куда складывать вещи
### Main looting function # Container ID - ID of the container to loot # BagID - bag where to put
sub loot_container(ContainerID,BagID)
  var ContCnt=2
  var NeedCnt=7
  dim ContFr[10]
  dim ContTo[10]
  dim NeedFr[20]
  dim NeedTo[20]
  dim NeedTypes[20]

  var ItemGr
  var ItemID
  var FCnt
  var iItem
##### Настройка вещей
##### Item config
  #### Контейнеры
  #### Containers
  ContFr[0]='0x0E70'
  ContTo[0]='0x0E80'
  #
  ContFr[1]='0x09B0'
  ContTo[1]='0x09B0'
  #### Вещи
  #### Items
  #### Gold
  NeedFr[0]='0x0EED'
  NeedTo[0]='0x0EED'
  #### Gems
  NeedFr[1]='0x0F00'
  NeedTo[1]='0x0F30'
  #### Scrolls
  NeedFr[2]='0x1F10'
  NeedTo[2]='0x1FFF'
  #### Jewerly
  NeedFr[3]='0x1F05'
  NeedTo[3]='0x1F0F'
  NeedFr[4]='0x1080'
  NeedTo[4]='0x108F'
  ####
  #### Bandages
  NeedFr[5]='0x0E20'
  NeedTo[5]='0x0E21'
  #### Arrows
  NeedFr[6]='0x0F3F'
  NeedTo[6]='0x0F3F'
  ####
  NeedTypes[0]=1
  NeedTypes[1]=1
  NeedTypes[2]=1
  NeedTypes[3]=1
  NeedTypes[4]=1
  NeedTypes[5]=1
  NeedTypes[6]=0
#####
#### Getting items up
  repeat
    UO.FindType(-1,-1,ContainerID)
    FCnt=UO.FindCount()
    if UO.FindCount()>0 then
      ItemGr=UO.GetGraphic('finditem')
      ItemID=UO.GetSerial('finditem')
      #UO.Print('Serial is: '+ItemID)
      ## Scanning for bags
      iItem=0
      while iItem<ContCnt
          if IsDip(ItemGr,ContFr[iItem],ContTo[iItem]) then
            UO.UseObject(ItemID) ## Opening container
            wait(OpenContWait)
            loot_container(ItemID,BagID)
            UO.Hide(ItemID) ## Closing opened container
            iItem=ContCnt
          end if
        iItem=iItem+1
      wend
      ## Scanning for items
      iItem=0
      while iItem<NeedCnt
        if NeedTypes[iItem] AND IsDip(ItemGr,NeedFr[iItem],NeedTo[iItem]) then
          UO.MoveItem(ItemID,0,BagID)
          wait(LootItemWait)
          iItem=NeedCnt
        end if
        iItem=iItem+1
      wend
      UO.Ignore(ItemID)
    end if
  until FCnt==0
end sub

### Функция возвращает следующий труп на определенном расстоянии
### Function returns next corpse on given distance
sub next_corpse(max_len)
  var CorpseID
  var VectorLen

  repeat
    UO.FindType('0x2006',-1,'ground') ### Finding corpse
    CorpseID=UO.GetSerial('finditem')
    VectorLen=UO.GetDistance(CorpseID)
    if VectorLen>max_len then
      UO.Ignore(CorpseID)
      CorpseID=77 ## Too far
    end if
    if UO.FindCount()==0 then
      CorpseID=0 ## No more corpses
    end if
  until CorpseID==0 or not CorpseID==77
  return CorpseID
end sub

### Проверка на принадлежность значения диапазону
### Check for a value being between bounds
sub IsDip(x,f,t)
  var i_x=UO.Hex2Int(x)
  var i_f=UO.Hex2Int(f)
  var i_t=UO.Hex2Int(t)
  if i_x>=i_f AND i_x<=i_t then
    return true
  else
    return false
  end if
end sub


### Функция лутящая все трупы вокруг
### All corpse looting function
sub auto_loot()
  dim Corpses[50]
  var CorpseCnt=0
  var CorpseNum
  var CorpseID
  var maxlen=2
  var BagID='0x400FA5DE'
 
  UO.IgnoreReset()

#### Закомментируйте эту функцию если не хотите лутить на земле (сначала проверьте)
#### Comment this function if you dont want to loot on ground (test it first)
  loot_container('ground',BagID) #
##################################

  UO.IgnoreReset()

  ## Searching Corpses
  CorpseID=next_corpse(maxlen*maxlen)
  while CorpseID
  Corpses[CorpseCnt]=CorpseID
  CorpseCnt=CorpseCnt+1
  CorpseID=next_corpse(maxlen*maxlen)
  UO.Ignore(CorpseID)
  wend
 
  ## Looting corpses
  if (CorpseCnt>1) then
    for CorpseNum=0 to CorpseCnt-1
      UO.UseObject(Corpses[CorpseNum])
      wait(OpenContWait)
      loot_container(Corpses[CorpseNum],BagID)
    next
  end if
 
  UO.IgnoreReset()
end sub


2) Автохил
Скрипт состоит из 4-ех скриптов - autoheal, HideAndHeal, Hide, bandage_and_arm
bandage_and_arm - лечиться 1 раз восстанавливая одетое оружие
autoheal - лечиться до позеленения, также отмывает бинты
Hide - прячеться до посерения
HideAndHeal - сначала Hide потом autoheal

2) Autoheal
Script contains of 4 scripts - autoheal, HideAndHeal, Hide, bandage_and_arm
bandage_and_arm - heals 1 time and then picks up the weapon
autoheal - heal until full health, also cleans bandages
Hide - hides until hidden
HideAndHeal - Hide() and then autoheal()

Code: Select all

sub bandage_and_arm()
UO.SetArm("Start_script_arm")
UO.BandageSelf()
Wait(500)
UO.Arm("Start_script_arm")
end sub

sub autoheal()
UO.DeleteJournal()
UO.SetArm("Start_script_arm")
while not UO.InJournal('need healing')
   UO.DeleteJournal()
   UO.BandageSelf()
   CheckLag()
   UO.FindType('0x0E21')
   if (UO.FindCount()==0) then
      UO.WaitTagetType('0x1008')
      UO.UseType('0x0E20')
      wait(200)
   end if
   while not UO.InJournal('You apply') and not UO.InJournal('You put the') and not UO.InJournal("You don't need healing")
      wait(100)
   wend
wend
Wait(500)
UO.Arm("Start_script_arm")
end sub

sub HideAndHeal()
Hide()
autoheal()
end sub

sub Hide()
UO.WarMode(0)
UO.DeleteJournal()
while not UO.InJournal('You have hidden')
   UO.DeleteJournal()
   UO.UseSkill('Hiding')
   CheckLag()
   while not UO.InJournal('You have hidden') and not UO.InJournal("You can't seem to hide")
   wait(100)
   wend
wend
end sub


3) FastRecall
Полезен ньюбам любых видов. При запуске функции порталиться домой по рунке в рунбуке. Скрипт настроен под ДРВ но может работает и на других шардах.

3) FastRecall
Usefull for noobs of any kind. When launched - teleports home by rune in runebook.

Code: Select all

var SelfName='Beyonder' ## Your name without clan name
var rune_num=1 ## Rune number in runebook

sub recall_home()
UO.DeleteJournal()
uo.UseObject('0x401908D7')
wait(100)
while not UO.InJournal(SelfName+': Kal Ort Por')
uo.LClick(135, rune_num*15+55)
wait(200)
wend
end sub


Жду комментариев.
I'm waiting for your comments.

Posted: 2005-04-24 11:06:57
by Unreal Pro Bw
обьясни принцип рaботы последнего скриптa...я улетaю по рунебуке по регaм,и мне для этого хвaтaет комaнды в хоткеях

Posted: 2005-04-24 11:40:14
by Beyonder
Скрипт я сделал для ДРВ а там через рунбуковскую комманду recall не работает. По крайней мере я перепробовал номера рун до 20 и она не работала. А этот скрипт вызывает рунбук и жмет на рунку вручную. Причем жмет пока персонаж не начнет колдовать (полезно если бежишь).

Если ты тоже на ДРВ, то буду рад получить нормальную комманду :).

Posted: 2005-04-24 14:19:10
by Destruction
Рунбука - в любом случае гамп.

http://yoko.netroof.net/forum/viewtopic.php?t=3753

ПС: Неплохо для новчика :!:

Posted: 2005-04-24 17:51:15
by I'm
Beyonder wrote:Скрипт я сделал для ДРВ а там через рунбуковскую комманду recall не работает. По крайней мере я перепробовал номера рун до 20 и она не работала. А этот скрипт вызывает рунбук и жмет на рунку вручную. Причем жмет пока персонаж не начнет колдовать (полезно если бежишь).

Если ты тоже на ДРВ, то буду рад получить нормальную комманду :).


UO.ReCall неработает на Dr.W. несмеши :lol:
Рекол работает везде 8)

Code: Select all

#   ReCall                 -=#=-                     -=#=-                                     # 
Var RuneBookID               =   "0x4000FB87"          # RuneBook ID.                          #
Var RuneBookSlot             =        "21"              # RuneBook Gump.                        #
;.................
#######################
sub RuneBookRecall() #############################################################################
#######################
# Чар реколится по рунбуке.
#
    UO.warmode(0)
    UO.UseSkill('Hiding')
    UO.Recall(RuneBookID, RuneBookSlot)
end sub

В скрипте на реколл задействованна уникальная система а именно сперва начинается каст а затем почти сразу чар встает в хайд это дает нам илюзию отлета (при этом каст нефизлится) для других (ака скорость руны если небыстрее) что вводит в замешательство неудачников охотников.
Также ищем тему в разделе шарды "DRW" кажется я там расписал все слоты в рунбуке.

Posted: 2005-04-24 21:00:58
by Beyonder
Я гампы только до 20-ого попробовал =).
Будем знать, спасибо.

А что насчет Автолута?

Posted: 2005-04-24 21:19:18
by Destruction
Длинный какой-то, рассматривать долго, но вероятно надежный :wink:

Posted: 2005-04-24 22:04:33
by I'm
Beyonder wrote:Я гампы только до 20-ого попробовал =).
Будем знать, спасибо.

А что насчет Автолута?

Выглядит страшно :lol:
Завтро посмотрю.

Posted: 2005-04-24 23:24:46
by Vanger69
Так... ну что могу заметить по автолуту.

Во-первых: надо ограничить дальность лута. Так как скрипт пытаеться лутать в каждом уголке экрана.
Во-вторых: не помешало бы добавить функцию резанья трупа ножом.
В-третих: иногда скрипт заклиниваеться с ошибкой Invalid Object: 0xFFFFFFFF

А так замечательный скрипт, подобных я ещё не встречал.

Posted: 2005-04-25 00:56:57
by Destruction
1. - uo.set('finddistance',3)
Пихаешь в начало и наслаждаешся!

Posted: 2005-04-25 07:43:20
by Beyonder
Вот та ошибка с Invalid Object у меня один раз появилась, но потом бесследно исчезла и отловить ее так и не удалось. Если кто проверит, то скажите при каком условии она вылазит?

Posted: 2005-04-25 07:44:51
by Beyonder
Да, и еще, зачем резать труп ножом? Какой это несет смысл?
Если смысл чтобы могли лутнуть и другие, то и так ничего уже не останеться, а если поиздеваться над PC то какой снова-же в этом смысл?

Posted: 2005-04-25 12:30:50
by Destruction
Beyonder wrote:Да, и еще, зачем резать труп ножом? Какой это несет смысл?
Если смысл чтобы могли лутнуть и другие, то и так ничего уже не останеться, а если поиздеваться над PC то какой снова-же в этом смысл?

Есть смысл, например на моем шарде если это делать, ну точнее на том где я играю;)

У нас стоит задержка на лут из трупа, а задержки на с земли нет, при этом как с земли, так и с трупа лутят все кому не лень, так, что каждому свое, а мне фастлут :roll:

Posted: 2005-04-25 13:47:04
by Qualis Eram
Beyonder wrote:Да, и еще, зачем резать труп ножом? Какой это несет смысл?
Если смысл чтобы могли лутнуть и другие, то и так ничего уже не останеться, а если поиздеваться над PC то какой снова-же в этом смысл?

Режут для того что:
1. Чтобы не реснули
2. И когда лутишь в момент когда поднимают с бинта может крашнуть!

Posted: 2005-04-25 13:55:15
by Beyonder
Ок, пожелания приняты и будут введены в силу после того как я допишу свою ходилку :) .

Posted: 2005-04-25 15:15:43
by Vanger69
Destruction
Спасибо, просто язык я не до конца знаю. :oops:
Beyonder
Во-первых: Инвалид объект как я понел происходит когда вещей очень много. Я не уверен но у меня тока в таком случае бывают.
Во-вторых: Лично мне резалка нужна что бы резать трубы змей. У нас на шарде из их шкур делаеться арм. А так лучше будет сделать этот скрипт по желанию.

З.Ы. И ещё не мог бы кто нибуть подсказать как лутить всё, т.к. установка диопазона 0х0000 - 0хFFFF не дала должного результата. И ещё не подскажете как тырить с земли контейнеры и мешочки.

Posted: 2005-04-25 16:22:18
by Destruction
Сделай через переменную!

Code: Select all

var rezalka=true

if rezalka==true then
режем
else
не режем
endif

Posted: 2005-04-26 21:17:22
by Vanger69
Хотел как бы напомнить о своей проблемки. Всё таки как заставить этот скрипт лутать всё. С долго мудилься но нечего не вышло. :cry:

Posted: 2005-04-27 07:15:27
by Beyonder
Переделанная первая часть первой функции. Сразу скажу что обязательно выключи лут на полу, так как он будет пытаться забрать все окружающие предметы:

Code: Select all

sub loot_container(ContainerID,BagID) 
  var ContCnt=2
  var NeedCnt=0
  dim ContFr[10]
  dim ContTo[10]
  dim NeedFr[20]
  dim NeedTo[20]
  dim NeedTypes[20]

  var ItemGr
  var ItemID
  var FCnt
  var iItem
##### Настройка вещей
##### Item config
  #### Контейнеры
  #### Containers
  ContFr[0]='0x0E70'
  ContTo[0]='0x0E80'
  #
  ContFr[1]='0x09B0'
  ContTo[1]='0x09B0'
  #### Вещи
  #### Items
  NeedFr[0]='0x0000'
  NeedTo[0]='0xFFFF'

  NeedTypes[0]=1
#####
#### Getting items up

Posted: 2005-04-27 07:21:50
by Beyonder
А вообще я ща через пол часа новую версию выложу, там все есть :).