Yoko
http://forum.yoko.com.ua/

Скрипт на лут (ПВМ и ПВП).
http://forum.yoko.com.ua/viewtopic.php?f=15&t=16872
Page 1 of 2

Author:  Mirage [ 2012-01-16 14:28:59 ]
Post subject:  Скрипт на лут (ПВМ и ПВП).

Все-таки пересилил себя и довел до более менее конечного результата скрипт на лут.
Используются наработки и идеи большого количества людей с данного форума и не только. Извините, всех не буду перечислять - потерял в аналах истории авторов всех кусочков.
Идея перемещения предметов мне досталась от моего старого знакомого и коллеги по шарду Антарес - Максима.
Конечный вариант в том виде в котором выложил тут - моя сборка.
Скрипт тестировался на сферовых серверах 51, 55R и 56b. Основной полигон тестирования Антарес. Дополнительный подгоны - Бест. Немного на стандартной дефолтовой сфере 56b.

Чтобы скрипт работал как задумывалось необходимо произвести настройки:
1) Файл скрипта должен называться autoload.sc и находится в папке с инжектом (либо с клиентом - зависит от версии инжекта).
2) В MAIN окне инжекта должна быть включена галочка "Autostart" (в середине окна)
3) В паке игрока должны быть ножницы и кинжал. После резки тела в руки берется оружие которое было на момент запуска скрипта.
4) Запускать REZ - для порезки или Loot для лута тела.
5) Если лут прервать принудительно то нужно запускать Lootrunning() для обновления константы. Иначе резать будет, лутать - нет.
6) В планируемых доработках - сделать чтобы стакующиеся предметы складывались в кучу, не стакующиеся в рядок.

Описание процедур скрипта:
autostart() - автозапуск. Задает константу для защиты от повторного срабатывания скрипта на лут и добавляет фильтр фастлута.
REZ() - резка трупа кинжалом, после резки автоматически запускает лут.
Lootrunning() - назначает константу для защиты от повторного срабатывания скрипта на лут. Можно запускать руками при необходимости.
Loot() - основной скрипт лута. В нем используются все последующие функции.
findcorps() - определяет что будем лутить - скелет или труп животного.
IgnorHair(corpse) - игнорирует волосы в трупе игрока (баг на 55-56 сферах)
Ignor(corpse) - игнорирует реагенты в трупах (пример как добавлять не нужные для лута вещи)
GrabLoot(corps) - функция лута первоочередных предметов.
Scissors() - порезка кожи в рюкзаке персонажа. Срабатывает когда игрок в тени.
PUTLoot2(Type1, Type2, Color, SourceContainer, TargetContainer,X,Y,Z) - процедура перемещения массива объектов.
PUTLoot(Type, Color, SourceContainer, TargetContainer,X,Y,Z) - процедура перемещения одного объекта.
DeleteJournal(msg) - очищает журнал.
checklag() - чеклаг (динамическая пауза).

Code:
### Контейнеры ###
VAR Meshok   = '0x0E76';   тип мешка
VAR Deed     = '0x14EF';   свиток ресурсов
VAR body     = '0x2006';   труп (не разделанный)
##################

### Инструменты ###
VAR Dagger   = '0x0F51';   кинжал (резка трупа)
VAR Scissors = '0x0F9E';   ножницы
##################

### Сырье ###
VAR hides    = '0x1078';   шкура животного
VAR leather  = '0x1067';   готовая кожа
##################

### Вспомогательные константы ###
VAR lootwait = 50;         пауза
VAR printcolour  = '1069'; цвет сообщений
##################

### Переменные ###
VAR MeshSer, d, LastTimer, timemove
VAR Type, TType, Type1, Type2, Color, SourceContainer, TargetContainer
VAR corpse, a, hair, reg, colhides
##################

Sub autostart()
   Lootrunning()
   UO.filterspeech('clear')
   UO.filterspeech('add','[Surprize ! Fast loot detected!]')
   UO.filterspeech('on')
end sub
Sub REZ()
   UO.Set('quiet','1')
   uo.set('finddistance', '3')
   ;uo.ignorereset()
   uo.findtype(body, -1, 'ground')
   if uo.findcount() and Uo.GetDistance( 'finditem' ) < 3  then
      var x = uo.GetGraphic(uo.ObjAtLayer('Rhand'))
      var y = uo.GetGraphic(uo.ObjAtLayer('Lhand'))
      uo.warmode(0)
      wait(500)
      corpse = uo.getSerial("finditem")
      UO.WaitTargetObject(corpse)
      UO.UseType(dagger)
      wait(500)
      uo.Equipt('Rhand',x)
      uo.Equipt('Lhand',y)
      if x <> uo.GetGraphic(uo.ObjAtLayer('Rhand')) or y <> uo.GetGraphic(uo.ObjAtLayer('Lhand')) then
         UO.UseType(x)
         wait(100)
         UO.UseType(y)
         wait(100)
      endif
      Loot()
      uo.warmode(1)
   endif
   UO.Set('quiet','0')
end sub
sub Lootrunning()
   uo.setGlobal('running',1)
end sub
Sub Loot()
   ;uo.ignorereset()
   DIM G[7]
   G[1] = '0x0EED';   деньги
   G[2] = '0x0E76';   мешки
   G[3] = '0x09AA';   пандоры
   G[4] = '0x1BFB';   болты
   G[5] = '0x0F3F';   стрелы
   G[6] = '0x1087';   серьги
   G[7] = '0x108A';   кольца
   UO.Set('quiet','1')
   if val(uo.getGlobal('running'))==1 then
      uo.setGlobal('running',2)
      uo.set('finddistance', '3')
      corpse = '0x00000000'
      corpse = findcorps()
      if corpse<>'0xffffffff' and corpse<>'0x00000000' then
         IF uo.findcount() and Uo.GetDistance( 'finditem' ) <= 4 then
            uo.deletejournal()
            uo.useobject(corpse)
            wait(300)
            if NOT uo.injournal("You can't do it here") then
               GrabLoot(corpse)
               IgnorHair(corpse)
               ;Ignor(corpse)
               PUTLoot('-1', '-1', corpse, 'backpack','','','')
            endif
            UO.Hide(corpse)
            UO.Ignore(corpse)
         endif
      else
         For a=1 to 7
            PUTLoot(G[a], '-1', 'ground', 'backpack',30,150,0)
         next
      endif
      Scissors()
      uo.setGlobal('running',1)
   endif
   UO.Set('quiet','0')
end sub
Sub findcorps()
   DIM body[2]
   body[1] = '0x0ECA';
   body[2] = '0x2006';
   For a = 1 to 2
      UO.FindType(body[a], -1, 'ground')
      if UO.FindCount() then
         return uo.getSerial('finditem')
      endif
   next
end sub
Sub IgnorHair(corpse)
   For hair = 0x203B to 0x204D
      UO.FindType(hair, -1, corpse)
      if UO.FindCount() then
         UO.Ignore('finditem')
      endif
   next
end sub
Sub Ignor(corpse)
   For reg = 0xF7A to 0xF7B
      UO.FindType(reg, -1, corpse)
      if UO.FindCount() then
         UO.Ignore('finditem')
      endif
   next
   For reg = 0xF84 to 0xF86
      UO.FindType(reg, -1, corpse)
      if UO.FindCount() then
         UO.Ignore('finditem')
      endif
   next
   For reg = 0xF88 to 0xF88
      UO.FindType(reg, -1, corpse)
      if UO.FindCount() then
         UO.Ignore('finditem')
      endif
   next
   For reg = 0xF8C to 0xF8D
      UO.FindType(reg, -1, corpse)
      if UO.FindCount() then
         UO.Ignore('finditem')
      endif
   next
end sub
Sub GrabLoot(corps)
   var pack = 'backpack'
   ;uo.charprint(printcolour,'лутим типы')
   PUTLoot('0x1869', '0', corps, pack,'','','');   ЭНЧАНТ шарики
   PUTLoot('0x09AA', '0x0834', corps, pack,'','','');   Пандора 10 Лв.
   PUTLoot('0x09AA', '0x0833', corps, pack,'','','');   Пандора 9 Лв.
   PUTLoot('0x09AA', '0x0832', corps, pack,'','','');   Пандора 8 Лв.
   PUTLoot('0x09AA', '0x08EA', corps, pack,'','','');   Пандора 7 Лв.
   PUTLoot('0x09AA', '0x08C1', corps, pack,'','','');   Пандора 6 Лв.
   PUTLoot('0x13B1', '0x099F', corps, pack,'150','170','0');   Exc.Rangers Bow
   PUTLoot('0x13B1', '0x05D8', corps, pack,'150','160','0');   Rangers bow
   PUTLoot('0x0A3E', '0', corps, pack,'160','170','0');   шкатулка
   PUTLoot(-1, '0x086C', corps, pack,'','','');   хантер вещи
   PUTLoot(-1, '0x099F', corps, pack,'','','');   ренжер вещи
   PUTLoot(-1, '0x0358', corps, pack,'','','');   рат вещи
   PUTLoot2(0x1869, 0x1870, '-1', corps, pack,'','','');   шарики
   PUTLoot('0x0EED', '0', corps, pack,'','','');   золото
   PUTLoot2(0x1E88, 0x1E89, '-1', corps, pack,'','','');   мясо драконов и демонов
   PUTLoot2(0x1E8E, 0x1E8F, '-1', corps, pack,'','','');   жаренное мясо драконов и демонов
   PUTLoot('0x09B5', '0', corps, pack,'','','');   змеиные яйца
   PUTLoot('0x0EE3', '0', corps, pack,'','','');   паутинка
   PUTLoot2(0x1085, 0x108b, '-1', corps, pack,'','','');   бижутерия
   PUTLoot2(0x1f05, 0x1f0a, '-1', corps, pack,'','','');   бижутерия
   PUTLoot2(0xf0f, 0xf30, '-1', corps, pack,'','','');   камни
   PUTLoot2(0x1f5d, 0x1f6c, '0', corps, pack,'','','');   scroll 7-8
   PUTLoot(-1, '0x0991', corps, pack,'','','');   руины
   PUTLoot('0x9aa', '-1', corps, pack,10,170,0);   пандоры
   PUTLoot(-1, '0x0482', corps, pack,'','','');   серебрянные вещи
end sub
Sub Scissors()
   If UO.Hidden() and UO.Count ( Scissors ) > 0 Then
      UO.FindType(hides, -1, 'backpack')
      While UO.FindCount()
         colhides = uo.getColor('finditem')
         UO.WaitTargetObject('finditem')
         uo.usetype( Scissors )
         wait(300)
         UO.FindType(leather, colhides, 'backpack')
         if UO.FindCount() then
            UO.MoveItem('finditem', 0, 'backpack', 30, 150, 0)
            wait(300)
         endif
         UO.FindType(hides, -1, 'backpack')
      wend
   EndIf
end sub
Sub PUTLoot2(Type1, Type2, Color, SourceContainer, TargetContainer,X,Y,Z)
   ;uo.ignorereset()
   for TType = Type1 to Type2
      PUTLoot(TType, Color, SourceContainer, TargetContainer,X,Y,Z)
   next
end sub
Sub PUTLoot(Type, Color, SourceContainer, TargetContainer,X,Y,Z)
   ;uo.ignorereset()
   UO.FindType(Type, Color, SourceContainer)
   while UO.FindCount()
      if (TargetContainer=='ground') then
         uo.MoveItem('finditem',0,TargetContainer,uo.GetX('self'),uo.GetY('self'),uo.GetZ('self'))
      else
         timemove=UO.Timer()
         while UO.ContainerOf( UO.GetSerial('finditem') )==SourceContainer && timemove+20>UO.Timer()
            uo.MoveItem('finditem',0,TargetContainer,X,Y,Z)
            wait(lootwait)
         wend
      end if
      UO.FindType(Type, Color, SourceContainer)
   wend
end sub
Sub DeleteJournal(msg)
   While UO.InJournal(msg)
      UO.SetJournalLine(UO.InJournal(msg) - 1,'')
   wend
end sub
Sub checklag()
   DeleteJournal("ackpack")
   UO.Click("backpack")
   repeat
      wait(100)
   until UO.InJournal("ackpack")
end sub

Attachment:
File comment: для удобства нужно переименовать в
autoload.sc и поместить в папку с инжектом.

Loot.txt [6.68 KiB]
Downloaded 875 times


Сори за немного кривоватое форматирование - добавил с красивыми отступами в файл вложение.
Жду критики тестеров, вопросы и советы по оптимизации.
:roll:

Author:  ZeroDX [ 2012-01-16 15:05:27 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

Хоть кто-то ещё делает что-то на инжекте.
Есть мнение, что лучше при резке трупа запоминать оружие по id :roll:

PS а никаких проверок, порезался ли труп нету
:twisted:

Author:  Mirage [ 2012-01-16 18:06:48 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

Хм... Интуитивно понимаю что ты вроде как бы прав. И я как бы даже так изначально и делал. Но вот сейчас полчаса проверял с 3 луками в паке. Берет всегда именно тот который был в руках на момент запуска скрипта. Видимо какой-то не заметный глюк :)

Author:  ZeroDX [ 2012-01-16 19:30:03 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

Я просто не знаю, как инжект хранит данные. Тот лук, что был в руках, его id меньше, чем у остальных?

Author:  Mirage [ 2012-01-16 21:18:18 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

взял 3 разных лука. Но одного типа.
1) простой деревянный
2) с клада магический
3) профессиональный - ренджерский
беру 1, стреляю, режу. Взялся в руки первый.
беру 2 стреляю, режу, берет второй.
беру 3...
Хотя должен вроде как рендомно брать - TYPE одинаковые. Разные цвета только.

Author:  Sirocco [ 2012-01-16 22:51:50 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

а ты думаешь как массив предметов формируется? :!:
сидите тут уже 15 лет, а то что ваши игноры в циклах нахер не нужны не догадываетесь... :lol:

Author:  Mirage [ 2012-01-17 06:28:00 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

Ну во первых не 15 :)
Во вторых если бы все было так как с луками то кожа порезанная всегда ложилась бы в угол, но иногда она соскакивает. Хотя может быть связанно с лагом.
В третьих игноры в циклах были нужны для 1 конкретного предмета, точнее набора предметов. Волос. Которые как бы есть в трупе (В теле 1 предмет), но передвинуть его нельзя. И инжект умирал.
Первично я лутил конкретный список требующихся предметов (чар был прокачан и не нуждался). После нескольких вайпов решил что собирать нужно все, оставляя необходимые вещи, остальные продавать. Но чтобы собрать все надо выкинуть то что НЕЛЬЗЯ изза криворукости админа слутать. Так и пришлось задействовать игноры :mrgreen:
Если бы инжект умел работать по нормальному с игнорами не пришлось бы так извращаться :) Но вот такая программа.

Author:  texx3x [ 2012-03-02 01:30:25 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

Вопрос может ужасно глупый .. но Как сделать разовое действие на открытие всех трупов в зоне досягаемости ?

Author:  Mirage [ 2012-03-02 07:15:22 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

Code:
Sub Loot()
      uo.set('finddistance', '3')
      corpse = '0x00000000'
      corpse = findcorps()
      if corpse<>'0xffffffff' and corpse<>'0x00000000' then
         IF uo.findcount() and Uo.GetDistance( 'finditem' ) <= 4 then
            uo.useobject(corpse)
            wait(300)
            UO.Ignore(corpse)
         endif
      endif
end sub

Author:  Gromiz [ 2012-04-21 08:02:05 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

hello :)

Code:
sub ltscssrs()
    VAR hides= '0x1078'
   Var Scissors='0x0F9E'
   VAR leather='0x1067'
   If  UO.Count ( Scissors ) > 0 Then
      UO.FindType(hides, -1, '0x402C1257')
      While UO.FindCount()
         UO.WaitTargetObject('finditem')
         uo.usetype( Scissors )
         wait(300)
         UO.FindType(leather, '-1', 'backpack')
         if UO.FindCount() then
            UO.MoveItem('finditem', 0, '0x402C1257')
            wait(500)
         endif
      wend
   EndIf
end sub


Mirage, я тут твой срипт разбираю на части и вопрос по блоку резки кожи:

суть работы такова:
нашли кожу в трупе
перенесли ее в мешок
в мешке порезали и она упала в пак
из пака перенесли обратно в мешок

работает, но пытается 2 раза разрезать

Quote:
What do you want to use this on?
You put the Cut up Troll Leather in your pack.
What do you want to use this on?
Use scissors on hair or cloth to cut


не критично, конечно, т.к. работает, но напрягает играть, зная что есть косяк

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

Author:  Mirage [ 2012-04-21 09:42:45 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

у тебя очередность нарушилась. Смотри что делает твой скрипт:

Code:
      UO.FindType(hides, -1, '0x402C1257') 
      While UO.FindCount()
         UO.WaitTargetObject('finditem')
         uo.usetype( Scissors )
         wait(300)
         UO.FindType(leather, '-1', 'backpack')
         if UO.FindCount() then
            UO.MoveItem('finditem', 0, '0x402C1257')
            wait(500)
         endif
      wend

нашли кожу
пока кожа в контейнере *!!!!
ножницами по коже
ищем порезанную кожу (инжект запоминает объект!)
если найдено
передвигаем
конец если
конец цикла

Там где звездочка - цикл обрабатывает объект. Первый круг - не порезанная кожа, второй уже порезанная. Надо после endif добавить поиск не порезанной кожи. Посмотри как у меня сделано - ты потерял одну строку.

Author:  Gromiz [ 2012-04-21 12:47:36 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

да, спасибо. Не хватало строчки:
Code:
UO.FindType(hides, -1, 'backpack')

Author:  Gromiz [ 2012-07-01 07:13:31 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

а можно как-то задать правило лута вещей, т.е.
есть тип "0x13C7", а если мы укажем "0x13**", то будет лутать все, что начинается с этих знаков.

п.с. пытался "*" и "?" вместо значений поставить- не вышло.

для чего? есть арм состоящий из 6 частей, так лучше прописать одну строчку, вместо 6. (а армов много, удобно для сокращения скрипта и возможности игнора последущего, когда не надо собирать)

другая мысль была по названию лутить(по части названия), и где что-то подобное на форуме видел, правда, пока не нашел.

Author:  Mirage [ 2012-07-01 12:31:16 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

PUTLoot2(0x1f5d, 0x1f6c, '0', corps, pack,'','',''); scroll 7-8
свитки идущие подряд лутаются поочередно. задаются 2 крайние точки.

Author:  Mirage [ 2013-01-07 18:41:06 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

В скрипте есть небольшой но малоприятный глюк который я не особо замечал потому что использовал скрипт без особого геноцида.
Если завалить сразу много монстров или игроков и они упадут в 1 тайл то ЕСТЬ МАЛЕНЬКИЙ ШАНС что скрипт порежет один труп, а лутить начнет другой. Придется ресендить и запускать скрипт несколько раз (если требуется собрать лут процесса порезки - кожу, мясо, кровь...).
Постараюсь исправить...

Author:  N1nTen90 [ 2014-12-01 22:50:19 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

Увожаемые скриптёры пожалуйста помогите мне !!!! :(

Мне очень нужен скрипт простой на резку кожи !!!!

Режет труп
лутит кожу
режет кожу ножницами

За ранее благодарен !!!!

Author:  Mirage [ 2014-12-01 23:06:49 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

надо кусок в Sub Loot() поправить вот так:
Code:
            if NOT uo.injournal("You can't do it here") then
               ;GrabLoot(corpse) ; <-----------  тут кавычки в начале
               IgnorHair(corpse)
               ;Ignor(corpse)
               PUTLoot('0x1078', '-1', corpse, 'backpack','','','') ; <-------------- тут тип кожи прописал
            endif

Будет резать и лутать только кожу.

Можно переделать под новый инжект, там пара штук оптимизировано. Надо собраться с духом и перебороть одну черту характера :roll:

Author:  N1nTen90 [ 2014-12-01 23:45:41 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

Mirage wrote:
надо кусок в Sub Loot() поправить вот так:
Code:
            if NOT uo.injournal("You can't do it here") then
               ;GrabLoot(corpse) ; <-----------  тут кавычки в начале
               IgnorHair(corpse)
               ;Ignor(corpse)
               PUTLoot('0x1078', '-1', corpse, 'backpack','','','') ; <-------------- тут тип кожи прописал
            endif

Будет резать и лутать только кожу.

Можно переделать под новый инжект, там пара штук оптимизировано. Надо собраться с духом и перебороть одну черту характера :roll:


Инжа 1403.09 V
Пожалуйста пропиши целый готовый скрипт я в них практически не разбираюсь =\ просто резал с Лизардмэна кидал в пак и ножницами в Leather перерезал =\

Author:  Gromiz [ 2015-10-03 20:39:29 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

блин, банальный вопрос:

Code:
Sub ltscssrs() 
   VAR hides= '0x1078'
   Var Scissors='0x0F9E'
   VAR leather='0x1067'
   If  UO.Count ( Scissors ) > 0 Then
      UO.FindType(hides, -1, sumkaloot)
      While UO.FindCount()
         UO.WaitTargetObject('finditem')
         uo.usetype( Scissors )
         wait(700)
         UO.FindType(leather, '-1', 'backpack')
         if UO.FindCount() then
            UO.MoveItem('finditem', 0, sumkaloot)
            wait(500)
         endif
         UO.FindType(hides, -1, 'backpack')
      wend
   EndIf
end sub


можно зациклить одной строчкой, типо репит и тд, чтобы резало пока в сумке есть кожа?

Author:  Mirage [ 2015-10-03 21:23:51 ]
Post subject:  Re: Скрипт на лут (ПВМ и ПВП).

Gromiz wrote:
UO.FindType(hides, -1, sumkaloot)
While UO.FindCount()

резало пока в сумке есть кожа

:roll:

Page 1 of 2 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/