Качаем Tinkering на бутылках

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Качаем Tinkering на бутылках

Post by GAUHAR »

Code: Select all

# Версия YokoInjection: 505.18 VeNdOr
# Sphere Server : v0.55i
# Версия клиента: 2.0.3
# Автор: GAUHAR

#########################################################################
#                         НАСТРОЙКИ ПЕРЕМЕННЫХ                          #
#-----------------------------------------------------------------------#
# ПЕРЕМЕННЫЕ для TINKERING
   VAR t_ingots    = '0x1BEF'   # Тип слитков металла.
   VAR c_ingots    = '0x0000'   # Цвет металла.
   VAR Max_Weight  = UO.STR*4   # Максимальный вес загрузки. Должен быть
                                # меньше, чем в формуле UO.Str*42/10
   VAR tnk_instrum  = '0x1EBC'  # Тип инструмента (tinker's tools).
   VAR tnk_product  = '0x0F0E'  # Тип того, что будем делать (bottles).
   VAR ingots_tnk   = 2         # Количество металла на одно изделие.
#-----------------------------------------------------------------------#
   VAR EDA       = '0x097b'             # Это рыбные стейки
   VAR LastTimerDinner = UO.Timer()     # Время приема пищи
   VAR FrequencyDinner = 3600           # как часто (раз в 6 минут)
   VAR LastTimerSpiritism = UO.Timer()  # Время спиритизма
   VAR FrequencySpiritism = 3000        # как часто (раз в 5 минут)
   VAR SpiritismYorN      = 1           # 1 - качать спирит спик, 0 - нет
#-----------------------------------------------------------------------#
#########################################################################

#########################################################################
# Качаем скилл тинкеринг.                                               #
# Делаем бутылки, когда вес превысит максимум, перекладываем их в       #
# контейнер из которого берем металл.                                   #
# До запуска скрипта в один контейнер (сундук) складываем металл и еду. #
# В рюкзаке персонажа инструментов механика.                            #
#-----------------------------------------------------------------------#
sub TINKERING()
   VAR CountIngots
   Presentation("*              TINKERING               *")
   PrintInColor("Выберите сундук с материалом",'0x003F')
   UO.AddObject('CONTAINER_sender')
   while UO.Targeting()
      wait(200)
   wend
   OpenContainer('CONTAINER_sender')
   UO.UnSetReceivingContainer()
   repeat
       UO.FindType(t_ingots,c_ingots,'CONTAINER_sender')
       CountIngots = UO.FindCount()
      CRAFT_tinkering_product()
      PEREBROS(0,tnk_product,'-1','backpack','CONTAINER_sender')
   until CountIngots == 0
   PrintInColor("Закончился металл",'0x0026')
   PrintInColor("РАБОТА ЗАВЕРШЕНА",'0x003F')
endsub

SUB CRAFT_tinkering_product()
   VAR k
   UO.FindType(t_ingots,c_ingots,'CONTAINER_sender')
   while UO.FindCount() <> 0 and  UO.Weight < Max_Weight
      k = 0
      UO.FindType(t_ingots,c_ingots,'my')
      if UO.GetQuantity('finditem') < ingots_tnk then
         UO.FindType(t_ingots,c_ingots,'CONTAINER_sender')
         PEREBROS(ingots_tnk,t_ingots,c_ingots,'CONTAINER_sender','backpack')
      endif
      if UO.FindCount() <> 0 then
         UO.DeleteJournal()
         CheckLag()
         RemoveTargetingOrWaiting()
         UO.WaitMenu('Tinkering','Tools','Tools','empty bottle')
         UO.UseType(tnk_instrum)
         while not UO.InJournal("Tinkering failed|You put") and not k == 30
            k = k + 1
            wait(200)
         wend
         wait(2000)
      endif
      DINNER()
      if SpiritismYorN == 1 then
         Spiritism()
      endif
   wend
endsub
#-----------------------------------------------------------------------#
#########################################################################

#########################################################################
#-----------------------------------------------------------------------#
SUB DINNER()
   VAR k
   if UO.Timer() > LastTimerDinner+FrequencyDinner then
      if UO.Count(EDA) < 5 then
         PEREBROS(10,EDA,'-1','CONTAINER_sender','backpack')
      endif
      repeat
         k = 0
         UO.UseType(EDA)
         wait(1000)
         repeat
            wait(100)
            k = k + 1
         until (UO.InJournal("the food") or UO.InJournal("You are stuffed") or UO.InJournal("You are simply too full") or k==30)
         DelJournal("the food")
      until (UO.InJournal("You are stuffed") or UO.InJournal("You are simply too full") or k==30)
      if k <> 30 then
         PrintInColor("НАЕЛСЯ",'0x0053')
       else
         PrintInColor("Ты не можешь есть то, чего у тебя нет",'0x0053')
         PrintInColor("Пополни запас еды, или выбери другой тип",'0x0053')
      endif
      LastTimerDinner = UO.Timer()
   endif
endsub

SUB Spiritism()
   VAR ispir, k
   if UO.Timer() > LastTimerSpiritism+FrequencySpiritism then
      PrintInColor("Разговор с духами",'0x0053')
      for ispir=1 to 3
         k = 0
         UO.UseSkill('Spirit Speak')
         while not (UO.InJournal("You fail your attempt") or UO.InJournal("You establish a connection") or k == 100)
            wait(100)
            k = k + 1
         wend
         DelJournal("You fail your attempt")
         DelJournal("You establish a connection")
      next
      LastTimerSpiritism = UO.Timer()
   endif
endsub
#-----------------------------------------------------------------------#
#########################################################################

SUB PEREBROS(kolvo,typ,tsvet,konteiner_sklad,konteiner_priemnik)
   # PEREBROSKA_v1(1,'0x0000','0x0000','0x00000000','0x00000000')
   # PEREBROSKA_v1(Количество,Тип,Цвет,ОткудаБерем,КудаКладем)
   VAR iX = UO.GetX()+1, iY = UO.GetY()+1, iZ = UO.GetZ()
   VAR k
   VAR changekolvo
   VAR NewWeight = 0, ChangeWeight = 0, InitialWeight =  UO.Weight
   VAR MaxWeight = UO.Str*42/10
   VAR TotalQuantityInContainer = 0
   VAR QuantityForLargeHeaps = 100 # По сколько предметов перебрасываем
                                   # неподъемные кучи, если перебрасываем
                                   # в ранец персонажа, то лучше выставит
                                   # значение равное 10.
   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

SUB Presentation(TXT)
   PrintInColor("**************************",'0x0035')
   PrintInColor(TXT,'0x0035')
   PrintInColor("*           Made by GAUHAR            *",'0x0035')
   PrintInColor("**************************",'0x0035')
   wait(3000)
endsub

SUB PrintInColor(text,color)
   # PrintInColor("здесь текст",'цвет')
   UO.ConColor(color)
   UO.Print(text)
   UO.ConColor('1088')
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 RemoveTargetingOrWaiting()
   if UO.Waiting() then
      UO.CancelMenu()
   endif
   if UO.Targeting() then
      UO.CancelTarget()
   endif
endsub

SUB DelJournal(string1)
   VAR nom = UO.InJournal(string1)
   if nom > 0 Then
      UO.SetJournalLine(Nom - 1, 'string replaced')
      DelJournal(string1)
   endif
endsub

SUB CheckLag()
   DelJournal('backpack')
   UO.Click('backpack')
   repeat
      wait(100)
   until UO.InJournal('backpack')
endsub
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

так сложно все :roll: скрипт то в 3 раза короче можно сделать :roll:
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

Question_GimFlex wrote:так сложно все :roll: скрипт то в 3 раза короче можно сделать :roll:

Question_GimFlex спасибо за критику. Скрипт действительно несколько громоздкий в нем много всяких украшательств да и процедуру загрузки материала для крафта можно переписать на более простую, но он уже насторен и работает, те кто его попробует думаю оценит мой труд.
В общем-то его легко можно переделать на другой крафтовый скрипт.
Все измения делаются в процедурах TINKERING() и CRAFT_tinkering_product() ну и конечно же настроив соответствующие переменные в начале скрипта, остальное без изменений или повыбрасывать их нафиг, например заменив процедуру PrintInColor("здесь текст",'цвет') на UO.Print или вообще удалив все принты.
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

вот мой на бутылки :) но он без добора ингов и сброса в сундук :) хотя это пару строк :) его тоже легко переделать под любой крафт :)

Code: Select all

sub Tinkering() 
var ms1="Tinkering failed"
var ms2="You put"
var ms3="You can't make anything with what you have"
var Ttools='0x1EBC'
uo.cancelmenu()
uo.automenu('Tinkering','Tools')
uo.automenu('Tools','empty bottle (3 iron ingot)')
while not uo.injournal(ms3)
 uo.usetype(Ttools)
 repeat
  wait(100)
 until uo.injournal(ms1) or uo.injournal(ms2) or uo.injournal(ms3)
wend
endsub
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

Ну не скриптер я и не программист. Когда писал свой скрипт я получал кайф :lol: , а когда отладил и запустил, так просто кончил :oops: .
По всей видимости писать огромные скрипты на простые вещи это мой стиль :wink: .
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

GAUHAR wrote:Ну не скриптер я и не программист. Когда писал свой скрипт я получал кайф :lol: , а когда отладил и запустил, так просто кончил :oops: .
По всей видимости писать огромные скрипты на простые вещи это мой стиль :wink: .


нет у тебя просто слишком много лишнего там всякие сообщения и так далее зачем :roll: краткость сестра таланта юзеры любят чтоб скрипт короткий был и простой в настройках :)
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

Question_GimFlex wrote:краткость сестра таланта юзеры любят чтоб скрипт короткий был и простой в настройках :)

ОК в следующий раз постараюсь быть кратким, если смогу. Буду перед размещением подчищать свои скрипты и делать их мааааленькими :) и простыми в настройке.
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

1.Самое главное это простота в настройках( все переменные, сообщения, и прочие объекты которые могут быть изменены -должны быть вынесены в самое начало скрипта с подробными комментариями ),
2.скорость скрипта (стараться делать скрипт не на wait(5000) а на условиях с динамическими паузами и чеклагами) ,чтобы максимально ускорить процесс прокачки, т.к. лишние 3-5 секунд, могут выростать в большие цифры ...
3.ну и надёжность разумеется(работоспособность).

п.с. жаль тинкер прокачал уже... мб протестил бы (=

п.п.с.
Post Reply