Yoko

All sides of Injection
It is currently 2024-04-16 17:20:28

All times are UTC+02:00




Post new topic  Reply to topic  [ 1 post ] 
Author Message
PostPosted: 2006-11-19 00:42:05 
Offline
User avatar

Joined: 2006-11-06 21:45:23
Posts: 137
Code:
# Версия YokoInjection: 505.18 VeNdOr
# Версия клиента: 2.0.3
# Автор: GAUHAR

#########################################################################
# ПЕРЕМЕННЫЕ которые можно настроить под себя или оставить как есть.    #
#-----------------------------------------------------------------------#
   VAR iX = UO.GetX()+1   # Если перемещать предметы на землю(пол),
   VAR iY = UO.GetY()+1   # то это координаты куда именно перемещать
   VAR iZ = UO.GetZ()     # относительно персонажа.
   VAR QuantityForLargeHeaps = 100   # По сколько предметов перебрасывать
         # неподъемные кучи. Если перебрасывать в пак персонажа, то лучше
         # установить меньшее число, так при загрузке в пак стоит контроль
         # на перевес, и будет взято максимально возможное количество
         # кратное переменной QuantityForLargeHeaps. Максимальный вес
         # расчитывается по формуле UO.Str*42/10.
#-----------------------------------------------------------------------#
#########################################################################

#########################################################################
# ЗАГРУЗКА-РАЗГРУЗКА из контейнера в контейнер                          #
#                                                                       #
# ОПИСАНИЕ процедуру PEREBROS_target():                                 #
# Не всегда нужная но достаточно полезная. Предназначена облегчить      #
# работу крафтера, если у такового возникла необходимость перебросить   #
# кучу предметов одного типа и цвета из одного контейнера в другой.     #
# Может брать 1 предмет из неподъемной кучи.                            #
#                                                                       #
# ЧТО И КАК РАБОТАЕТ:                                                   #
# Если НАДО БРАТЬ (перебрасывать) из бекпака персонажа, то прицелом     #
# щелкаем по перонажу или его бекпаку.                                  #
# Если НАДО БРАТЬ из кучи находящейся на земле(полу), то делаем щелчок  #
# прицелом по земле(полу) или нажимаем [ESC]. Куча или нестакующиеся    #
# предметы должны находится в радиусе 2 клеток от персонажа, иначе их   #
# нельзя достать из-за большого растояния.                              #
# Если НАДО ПОЛОЖИТЬ (перебросить) в бекпак персонажа, то прицелом      #
# щелкаем по персонажу или его бекпку.                                  #
# Если НАДО ПОЛОЖИТЬ (перебросить) на землю(пол), то делаем щелчок      #
# прицелом по земле(полу) или нажимаем [ESC]. Предметы будут выложены   #
# на одну клетку юго-восточней персонажа (можно настраить под себя      #
# изменив переменные: iX, iY, iZ).                                      #
# Иначе делай выбор контейнера откуда брать (он будет открыт, если до   #
# этого был закрыт) и контейнера в который перекладывать.               #
# Указав ЧТО ПЕРЕКЛАДЫВАТЬ, перекладываються предметы только указанного #
# типа и цвета.                                                         #
# КОЛИЧЕСТВО предметов для переброски вводится в окне клиента. Для этого#
# персонаж должен произнести фразу, например: 123 шт                    #
# тогда будет переброшено 123 предмета указанного типа и цвета.         #
#     0 шт - перебрасываем все предметы указанного типа и цвета,        #
#     ЧИСЛО шт - определенное количество предметов.                     #
#                                                                       #
# ПРИМЕЧАНИЕ:                                                           #
# 1. Не стоит бросать на пол в одну точку большое количество не         #
# стакующиеся предметов, иначе вы увидите:                              #
#     Too many items here!                                              #
#     The ground collapses!                                             #
# Короче предметы провалятся под пол и их нельзя будет достать.         #
# 2. Если из неподъемной кучи пытаться перебросить 1 предмет в такую же #
# неподъемную кучу, то будет переброшено 2 предмета.                    #
# 3. Если прицел для указания контейнера был сброшен клавишей [ESC], то #
# в качестве контейнера будет выбрана земля(пол).                       #
# 4. Если тип предмета будет равен 0x0000 (вы указали на землю(пол) или #
# нажали клавишу [ESC]), или равен типу человека, то скрипт прервет     #
# свою работу.                                                          #
# 5. Указывая количество, не забудьте про слово ШТ.                     #
#-----------------------------------------------------------------------#
sub PEREBROS_target()
   VAR TypeItem, ColorItem, CHARname, stroka, chislo
   UO.Click('self')
   PrintInColor("Выбери ОТКУДА брать.",'0x003F')
   UO.DeleteJournal()
   UO.AddObject('CONTAINER_sender')
   while UO.Targeting() and not UO.InJournal("see the target")
      wait(300)
   wend
   if UO.GetSerial('CONTAINER_sender') == '0x00000000' then
      UO.AddObject('CONTAINER_sender','0x00000001')
    else
      if UO.GetSerial('CONTAINER_sender') == UO.GetSerial('self') then
         UO.AddObject('CONTAINER_sender','backpack')
      endif
      OpenContainer('CONTAINER_sender')
   endif
   PrintInColor("Выбери КУДА класть.",'0x003F')
   UO.AddObject('CONTAINER_recipient')
   while UO.Targeting()
      wait(300)
   wend
   if UO.GetSerial('CONTAINER_recipient') == '0x00000000' then
      UO.AddObject('CONTAINER_recipient','0x00000001')
    else
      if UO.GetSerial('CONTAINER_recipient') == UO.GetSerial('self') then
         UO.AddObject('CONTAINER_recipient','backpack')
      endif
   endif
   PrintInColor("Выбери ЧТО перекладывать",'0x003F')
   UO.AddType('ITEM_for_moving')
   while UO.Targeting()
      wait(300)
   wend
   if UO.GetGraphic('ITEM_for_moving') == '0x0000' or UO.GetGraphic('ITEM_for_moving') == '0x0190' or UO.GetGraphic('ITEM_for_moving') == '0x0191' then
      PrintInColor("ПРЕДМЕТ НЕ УКАЗАН.",'0x002b')
      PrintInColor("SCRIPT TERMINATE!",'0x0026')
      return
   endif
   TypeItem = UO.GetGraphic('lasttarget')
   ColorItem = UO.GetColor('lasttarget')
   PrintInColor("Тип предмета: " + TypeItem,'0x0053')
   PrintInColor("Цвет предмета: " + ColorItem,'0x0053')
   wait(2000)
   PrintInColor("СКОЛЬКО ПЕРЕКЛАДЫВАТЬ?",'0x003F')
   wait(2000)
   PrintInColor("Введи в консоли число и слово 'шт'.",'0x003F')
   wait(2000)
   PrintInColor("0 шт - Переложить все предметы.",'0x003F')
   wait(2000)
   PrintInColor("ЧИСЛО шт - Определенное кол-во.",'0x003F')
   wait(2000)
   PrintInColor("И ЖМИ [ENTER]",'0x003F')
   UO.DeleteJournal()
   while not UO.InJournal("шт|ШТ")
      wait(200)
   wend
   stroka = UO.Journal(UO.InJournal("шт|ШТ") - 1)
   chislo = val(mid(stroka,len(UO.GetName())+2,len(stroka)-len(UO.GetName())-1))
   PEREBROS(chislo,'ITEM_for_moving',ColorItem,'CONTAINER_sender','CONTAINER_recipient')
endsub
#-----------------------------------------------------------------------#
#########################################################################

#########################################################################
# ОПИСАНИЕ процедуры PEREBROS:                                          #
# Процедура применяется в скриптах, в которых есть необходимость часто  #
# делать добор каких либо предметов (например: брать слитки металла для #
# ковки, или выгрузить сделанного в отдельный контейнер(мешок)).        #
# Может брать 1 предмет из неподъемной кучи.                            #
#-----------------------------------------------------------------------#
SUB PEREBROS(kolvo,typ,tsvet,konteiner_sklad,konteiner_priemnik)
   # PEREBROSKA_v1(1,'0x0000','0x0000','0x00000000','0x00000000')
   # PEREBROSKA_v1(Количество,Тип,Цвет,ОткудаБерем,КудаКладем)
   # Если использовать в своем скрипте, то устанавливайте максимальный
   # вес загрузки меньше, чем в формуле UO.Str*42/10
#   VAR iX = UO.GetX()+1, iY = UO.GetY()+1, iZ = UO.GetZ()
   VAR k             # k - счетчит количества перебросов в бекпак
   VAR changekolvo   # Дублирует переменную kolvo
   VAR NewWeight = 0, ChangeWeight = 0, InitialWeight =  UO.Weight
   VAR MaxWeight = UO.Str*42/10      # Максимальный вес загрузки.
#   VAR QuantityForLargeHeaps = 100   # По сколько предметов перебрасываем
                                     # неподъемные кучи.
   VAR TotalQuantityInContainer = 0  # Всего предметов данного типа в контейнере
# Бывает так, что в бекпаке вес больше, чем в формуле UO.Str*42/10, и
# поэтому не осуществляется переброска из бекпака в выбранный контейнер,
# чтобы такого не было максимальный вес переустанавливаем на текущий +1.
   if konteiner_sklad == UO.GetSerial('backpack') then
      MaxWeight = UO.Weight + 1
   endif
   UO.Set('grabdelay','200')
# Подсчитаем общее кол-во предметов данного типа и цвета в контейнере.
   UO.FindType(typ,tsvet,konteiner_sklad)
   while UO.FindCount() <> 0
      TotalQuantityInContainer = TotalQuantityInContainer + UO.GetQuantity('finditem')
      UO.Ignore('finditem')
      UO.FindType(typ,tsvet,konteiner_sklad)
   wend
   UO.Exec('ignorereset')
   PrintInColor("Найдено: " + str(TotalQuantityInContainer),'0x0053')
   wait(2000)
# Если ничего не найдено выходим из процедуры.
   if TotalQuantityInContainer == 0 then
      return
    else
      if TotalQuantityInContainer < kolvo or kolvo == 0 then
         kolvo = TotalQuantityInContainer
      endif
   endif
# Нашли то, что искали. ДЕЛАЕМ ПЕРЕБРОС.
   UO.FindType(typ,tsvet,konteiner_sklad)
   if UO.FindCount() == TotalQuantityInContainer then
# Берем не стакующиеся предметы
      while UO.FindCount() <> 0 and kolvo > 0 and MaxWeight > UO.Weight
         PrintInColor("Осталось перебросить: " + str(kolvo),'0x0053')
         CheckLag()
         if UO.GetSerial(konteiner_priemnik) <> '0x00000001' then
            UO.MoveItem('finditem','1',konteiner_priemnik)
          else
            UO.MoveItem('finditem','1','ground',iX,iY,iZ)
         endif
         CheckLag()
         UO.FindType(typ,tsvet,konteiner_sklad)
         kolvo = kolvo - 1
      wend
    else
# Берем стакующиеся предметы
      UO.DeleteJournal()
      changekolvo = kolvo
      while UO.FindCount() <> 0 and changekolvo > 0 and MaxWeight > UO.Weight
         PrintInColor("Перебрасываем: " + str(kolvo),'0x0053')
         CheckLag()
         if UO.GetSerial(konteiner_priemnik) <> '0x00000001' then
            UO.MoveItem('finditem',changekolvo,konteiner_priemnik)
          else
            UO.MoveItem('finditem',changekolvo,'ground',iX,iY,iZ)
         endif
         CheckLag()
         changekolvo = changekolvo - UO.GetQuantity('finditem')
         UO.FindType(typ,tsvet,konteiner_sklad)
         wait(1000)
         # Если куча очень тяжелая то берем ее частями
         if UO.InJournal("That is too heavy") then
            UO.FindType(typ,tsvet,konteiner_sklad)
            k = 0
            while UO.FindCount() <> 0 and kolvo > 0 and MaxWeight > NewWeight
               # Если из очень тяжелой кучи надо взять один предмет.
               if kolvo == 1 then
                  PrintInColor("Перебрасываем: " + str(kolvo),'0x0053')
                  if UO.GetSerial(konteiner_sklad) <> '0x00000001' then
                     OpenContainer(konteiner_sklad)   # Используется как UO.Resend(), но только для контейнера
                   else
                     UO.Resend()
                  endif
                  CheckLag()
                  if UO.GetSerial(konteiner_priemnik) <> '0x00000001' then
                     UO.MoveItem('finditem',2,konteiner_priemnik)
                   else
                     UO.MoveItem('finditem',2,'ground',iX,iY,iZ)
                  endif
                  CheckLag()
                  UO.FindType(typ,tsvet,konteiner_priemnik)
                  if UO.GetSerial(konteiner_sklad) <> '0x00000001' then
                     UO.MoveItem('finditem',1,konteiner_sklad)
                   else
                     UO.MoveItem('finditem',1,'ground',iX,iY,iZ)
                  endif
                  CheckLag()
                  return
               endif
               # Если из очень тяжелой кучи берем всё или часть.
               CheckLag()
               if UO.GetSerial(konteiner_priemnik) <> '0x00000001' then
                  UO.MoveItem('finditem',QuantityForLargeHeaps,konteiner_priemnik)
                else
                  UO.MoveItem('finditem',QuantityForLargeHeaps,'ground',iX,iY,iZ)
               endif
               CheckLag()
               UO.FindType(typ,tsvet,konteiner_sklad)
               kolvo = kolvo - QuantityForLargeHeaps
               if kolvo < QuantityForLargeHeaps then
                  QuantityForLargeHeaps = kolvo
               endif
               # Высчитываем изменение веса после каждого переброса в
               # бекпак, для проверки на превышение максимального веса.
               k = k + 1
               ChangeWeight = (UO.Weight - InitialWeight) / k
               NewWeight = UO.Weight + ChangeWeight
               PrintInColor("Осталось перебросить: " + str(kolvo),'0x0053')
            wend
         endif
      wend
   endif
endsub
#-----------------------------------------------------------------------#
# Дополнительные фукции к процедуре PEREBROS                            #
#-----------------------------------------------------------------------#
SUB PrintInColor(text,color)
   # PrintInColor("здесь текст",'цвет')
   # 0x003F - ярко-зеленый
   # 0x0026 - красный
   # 0x0053 - темно-бирюзавый
   # 0x0035 - желтый
   # 0x008F - оранжевый
   # 0x0003 - синий
   # 0x0440 - по умолчанию
   UO.ConColor(color)
   UO.Print(text)
   UO.ConColor('1088')
endsub
SUB DelJournal(string1)   #(c) Edred
   VAR nom = UO.InJournal(string1)
   if nom > 0 Then
      UO.SetJournalLine(Nom - 1, 'string replaced')
      DelJournal(string1)
   endif
endsub
SUB OpenContainer(cntnr)
   DelJournal('Contains')
   DelJournal('items')
   DelJournal('Bank Box')
   UO.UseObject(cntnr)
   UO.Click(cntnr)
   repeat
      wait(300)
   until UO.InJournal('Contains') or UO.InJournal('items') or UO.InJournal('Bank Box')
endsub
SUB CheckLag()
   DelJournal("backpack")
   UO.Click("backpack")
   repeat
      wait(300)
   until UO.InJournal("backpack")
endsub
#-----------------------------------------------------------------------#
#########################################################################


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1 post ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 7 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited